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

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 (456) hide show
  1. package/README.md +267 -14
  2. package/package.json +98 -108
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +98 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/browser-runtime-import-rewrite-plugin.d.ts +26 -0
  74. package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
  75. package/src/build/browser-runtime-manifest.d.ts +31 -0
  76. package/src/build/browser-runtime-manifest.js +61 -0
  77. package/src/build/build-adapter.d.ts +175 -3
  78. package/src/build/build-adapter.js +633 -16
  79. package/src/build/build-manifest.d.ts +33 -0
  80. package/src/build/build-manifest.js +52 -0
  81. package/src/build/dev-build-coordinator.d.ts +72 -0
  82. package/src/build/dev-build-coordinator.js +154 -0
  83. package/src/build/esbuild-build-adapter.d.ts +16 -6
  84. package/src/build/esbuild-build-adapter.js +205 -75
  85. package/src/build/runtime-build-executor.d.ts +14 -0
  86. package/src/build/runtime-build-executor.js +22 -0
  87. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  88. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  89. package/src/config/README.md +36 -0
  90. package/src/config/config-builder.d.ts +54 -29
  91. package/src/config/config-builder.js +256 -50
  92. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  93. package/src/{constants.js → config/constants.js} +4 -0
  94. package/src/declarations.d.ts +19 -14
  95. package/src/dev/host-runtime.d.ts +10 -0
  96. package/src/dev/host-runtime.js +24 -0
  97. package/src/dev/sc-server.d.ts +1 -1
  98. package/src/dev/sc-server.js +1 -1
  99. package/src/eco/README.md +70 -16
  100. package/src/eco/eco.browser.d.ts +2 -0
  101. package/src/eco/eco.browser.js +88 -0
  102. package/src/eco/eco.js +63 -54
  103. package/src/eco/eco.types.d.ts +69 -6
  104. package/src/eco/eco.utils.d.ts +1 -40
  105. package/src/eco/eco.utils.js +5 -35
  106. package/src/eco/global-injector-map.d.ts +3 -3
  107. package/src/eco/global-injector-map.js +2 -2
  108. package/src/eco/lazy-injector-map.d.ts +2 -2
  109. package/src/errors/index.d.ts +1 -0
  110. package/src/errors/index.js +3 -1
  111. package/src/hmr/README.md +26 -0
  112. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  113. package/src/hmr/client/hmr-runtime.js +38 -7
  114. package/src/hmr/hmr-strategy.d.ts +16 -13
  115. package/src/hmr/hmr-strategy.js +22 -7
  116. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  117. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  118. package/src/hmr/hmr.test.e2e.js +26 -33
  119. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  120. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  121. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  122. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  123. package/src/index.browser.d.ts +2 -2
  124. package/src/index.browser.js +1 -1
  125. package/src/index.d.ts +4 -3
  126. package/src/index.js +16 -5
  127. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  128. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  129. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  130. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  132. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  133. package/src/plugins/README.md +35 -0
  134. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  135. package/src/plugins/alias-resolver-plugin.js +27 -5
  136. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  137. package/src/plugins/eco-component-meta-plugin.js +42 -24
  138. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  139. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  140. package/src/plugins/integration-plugin.d.ts +157 -29
  141. package/src/plugins/integration-plugin.js +115 -14
  142. package/src/plugins/processor.d.ts +17 -2
  143. package/src/plugins/processor.js +22 -3
  144. package/src/plugins/runtime-capability.d.ts +9 -0
  145. package/src/plugins/source-transform.d.ts +46 -0
  146. package/src/plugins/source-transform.js +71 -0
  147. package/src/route-renderer/GRAPH.md +83 -325
  148. package/src/route-renderer/README.md +73 -90
  149. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  150. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  151. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  152. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  153. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  154. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  155. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  156. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  157. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  158. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  159. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  160. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  161. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  162. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  163. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  164. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  165. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  166. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  167. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  168. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  169. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  170. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  171. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  172. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  173. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  174. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  175. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  176. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  177. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  178. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  179. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  180. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  181. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  182. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  183. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  184. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  185. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  186. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  187. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  188. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  189. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  190. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  191. package/src/route-renderer/route-renderer.d.ts +57 -14
  192. package/src/route-renderer/route-renderer.js +30 -18
  193. package/src/router/README.md +94 -0
  194. package/src/router/client/link-intent.d.ts +53 -0
  195. package/src/router/client/link-intent.js +34 -0
  196. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  197. package/src/router/client/link-intent.test.browser.js +43 -0
  198. package/src/router/client/navigation-coordinator.d.ts +169 -0
  199. package/src/router/client/navigation-coordinator.js +215 -0
  200. package/src/router/server/route-registry.d.ts +78 -0
  201. package/src/router/server/route-registry.js +262 -0
  202. package/src/services/README.md +28 -0
  203. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  204. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  205. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  208. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  209. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  210. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -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 -0
  218. package/src/services/assets/asset-processing-service/index.js +6 -0
  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/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  223. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  229. package/src/services/{asset-processing-service → 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 +120 -0
  231. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  235. package/src/services/{asset-processing-service → 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 +59 -0
  237. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  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 +73 -0
  242. package/src/services/assets/browser-bundle.service.js +41 -0
  243. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  244. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  245. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  246. package/src/services/html/html-rewriter-provider.service.js +68 -0
  247. package/src/services/html/html-transformer.service.d.ts +96 -0
  248. package/src/services/html/html-transformer.service.js +287 -0
  249. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  250. package/src/services/invalidation/development-invalidation.service.js +190 -0
  251. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  252. package/src/services/module-loading/app-module-loader.service.js +0 -0
  253. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  255. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  256. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  257. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  258. package/src/services/module-loading/module-loading-types.js +0 -0
  259. package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  261. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  262. package/src/services/module-loading/page-module-import.service.js +191 -0
  263. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  264. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  265. package/src/services/module-loading/source-module-support.d.ts +5 -0
  266. package/src/services/module-loading/source-module-support.js +8 -0
  267. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  268. package/src/services/runtime-state/dev-graph.service.js +162 -0
  269. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  271. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  272. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  273. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  274. package/src/static-site-generator/README.md +26 -0
  275. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  276. package/src/static-site-generator/static-site-generator.js +182 -138
  277. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  278. package/src/types/internal-types.js +0 -0
  279. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  280. package/src/types/public-types.js +0 -0
  281. package/src/utils/html-escaping.d.ts +7 -0
  282. package/src/utils/html-escaping.js +6 -0
  283. package/src/utils/locals-utils.d.ts +1 -1
  284. package/src/utils/parse-cli-args.d.ts +4 -1
  285. package/src/utils/parse-cli-args.js +16 -1
  286. package/src/utils/resolve-work-dir.d.ts +11 -0
  287. package/src/utils/resolve-work-dir.js +31 -0
  288. package/src/watchers/project-watcher.d.ts +11 -7
  289. package/src/watchers/project-watcher.js +69 -75
  290. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  291. package/src/watchers/project-watcher.test-helpers.js +6 -5
  292. package/CHANGELOG.md +0 -94
  293. package/src/adapters/abstract/application-adapter.ts +0 -337
  294. package/src/adapters/abstract/router-adapter.ts +0 -30
  295. package/src/adapters/abstract/server-adapter.ts +0 -79
  296. package/src/adapters/bun/client-bridge.ts +0 -62
  297. package/src/adapters/bun/create-app.ts +0 -189
  298. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  299. package/src/adapters/bun/define-api-handler.ts +0 -114
  300. package/src/adapters/bun/hmr-manager.ts +0 -276
  301. package/src/adapters/bun/index.ts +0 -3
  302. package/src/adapters/bun/server-adapter.ts +0 -492
  303. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  304. package/src/adapters/bun/server-lifecycle.js +0 -120
  305. package/src/adapters/bun/server-lifecycle.ts +0 -154
  306. package/src/adapters/index.ts +0 -6
  307. package/src/adapters/node/create-app.ts +0 -179
  308. package/src/adapters/node/index.d.ts +0 -4
  309. package/src/adapters/node/index.js +0 -8
  310. package/src/adapters/node/index.ts +0 -9
  311. package/src/adapters/node/node-client-bridge.ts +0 -79
  312. package/src/adapters/node/node-hmr-manager.ts +0 -271
  313. package/src/adapters/node/server-adapter.ts +0 -561
  314. package/src/adapters/node/static-content-server.ts +0 -203
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  318. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  319. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  320. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  321. package/src/adapters/shared/render-context.ts +0 -105
  322. package/src/adapters/shared/server-adapter.ts +0 -442
  323. package/src/adapters/shared/server-route-handler.ts +0 -166
  324. package/src/adapters/shared/server-static-builder.ts +0 -82
  325. package/src/build/build-adapter.ts +0 -133
  326. package/src/build/build-types.ts +0 -83
  327. package/src/build/esbuild-build-adapter.ts +0 -511
  328. package/src/config/config-builder.ts +0 -474
  329. package/src/constants.ts +0 -39
  330. package/src/create-app.ts +0 -87
  331. package/src/define-api-handler.js +0 -15
  332. package/src/define-api-handler.ts +0 -66
  333. package/src/dev/sc-server.ts +0 -143
  334. package/src/eco/component-render-context.d.ts +0 -105
  335. package/src/eco/component-render-context.js +0 -77
  336. package/src/eco/component-render-context.ts +0 -202
  337. package/src/eco/eco.ts +0 -221
  338. package/src/eco/eco.types.ts +0 -202
  339. package/src/eco/eco.utils.ts +0 -89
  340. package/src/eco/global-injector-map.ts +0 -112
  341. package/src/eco/lazy-injector-map.ts +0 -120
  342. package/src/eco/module-dependencies.ts +0 -75
  343. package/src/errors/http-error.ts +0 -72
  344. package/src/errors/index.ts +0 -2
  345. package/src/errors/locals-access-error.ts +0 -7
  346. package/src/global/app-logger.ts +0 -4
  347. package/src/hmr/client/hmr-runtime.ts +0 -121
  348. package/src/hmr/hmr-strategy.ts +0 -172
  349. package/src/hmr/hmr.test.e2e.ts +0 -75
  350. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  351. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  352. package/src/index.browser.ts +0 -3
  353. package/src/index.ts +0 -5
  354. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  355. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  356. package/src/internal-types.ts +0 -212
  357. package/src/plugins/alias-resolver-plugin.ts +0 -45
  358. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  359. package/src/plugins/integration-plugin.ts +0 -184
  360. package/src/plugins/processor.ts +0 -220
  361. package/src/public-types.ts +0 -1255
  362. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  363. package/src/route-renderer/component-graph-executor.js +0 -31
  364. package/src/route-renderer/component-graph-executor.ts +0 -84
  365. package/src/route-renderer/component-graph.d.ts +0 -42
  366. package/src/route-renderer/component-graph.js +0 -72
  367. package/src/route-renderer/component-graph.ts +0 -159
  368. package/src/route-renderer/component-marker.d.ts +0 -52
  369. package/src/route-renderer/component-marker.js +0 -46
  370. package/src/route-renderer/component-marker.ts +0 -117
  371. package/src/route-renderer/dependency-resolver.js +0 -428
  372. package/src/route-renderer/dependency-resolver.ts +0 -596
  373. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  374. package/src/route-renderer/html-post-processing.service.js +0 -86
  375. package/src/route-renderer/html-post-processing.service.ts +0 -103
  376. package/src/route-renderer/integration-renderer.d.ts +0 -339
  377. package/src/route-renderer/integration-renderer.js +0 -526
  378. package/src/route-renderer/integration-renderer.ts +0 -696
  379. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  380. package/src/route-renderer/marker-graph-resolver.js +0 -93
  381. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  382. package/src/route-renderer/page-module-loader.d.ts +0 -61
  383. package/src/route-renderer/page-module-loader.ts +0 -153
  384. package/src/route-renderer/render-execution.service.d.ts +0 -69
  385. package/src/route-renderer/render-execution.service.js +0 -91
  386. package/src/route-renderer/render-execution.service.ts +0 -158
  387. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  388. package/src/route-renderer/render-preparation.service.js +0 -243
  389. package/src/route-renderer/render-preparation.service.ts +0 -358
  390. package/src/route-renderer/route-renderer.ts +0 -80
  391. package/src/router/fs-router-scanner.d.ts +0 -41
  392. package/src/router/fs-router-scanner.js +0 -155
  393. package/src/router/fs-router-scanner.ts +0 -217
  394. package/src/router/fs-router.d.ts +0 -26
  395. package/src/router/fs-router.js +0 -100
  396. package/src/router/fs-router.ts +0 -122
  397. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  398. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  399. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  400. package/src/services/asset-processing-service/assets.types.ts +0 -112
  401. package/src/services/asset-processing-service/index.d.ts +0 -3
  402. package/src/services/asset-processing-service/index.js +0 -3
  403. package/src/services/asset-processing-service/index.ts +0 -3
  404. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  405. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  406. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  408. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  409. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  410. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  411. package/src/services/asset-processing-service/processors/index.js +0 -5
  412. package/src/services/asset-processing-service/processors/index.ts +0 -5
  413. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  414. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  415. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  417. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  418. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  419. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  420. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  421. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  422. package/src/services/cache/cache.types.ts +0 -126
  423. package/src/services/cache/index.ts +0 -18
  424. package/src/services/cache/memory-cache-store.ts +0 -130
  425. package/src/services/cache/page-cache-service.ts +0 -202
  426. package/src/services/html-transformer.service.d.ts +0 -50
  427. package/src/services/html-transformer.service.js +0 -163
  428. package/src/services/html-transformer.service.ts +0 -217
  429. package/src/services/page-module-import.service.d.ts +0 -37
  430. package/src/services/page-module-import.service.js +0 -88
  431. package/src/services/page-module-import.service.ts +0 -129
  432. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  433. package/src/services/schema-validation-service.ts +0 -204
  434. package/src/services/validation/standard-schema.types.ts +0 -68
  435. package/src/static-site-generator/static-site-generator.ts +0 -359
  436. package/src/utils/css.d.ts +0 -1
  437. package/src/utils/css.js +0 -7
  438. package/src/utils/css.ts +0 -5
  439. package/src/utils/deep-merge.ts +0 -47
  440. package/src/utils/hash.ts +0 -5
  441. package/src/utils/html.ts +0 -1
  442. package/src/utils/invariant.ts +0 -15
  443. package/src/utils/locals-utils.ts +0 -37
  444. package/src/utils/parse-cli-args.ts +0 -83
  445. package/src/utils/path-utils.module.ts +0 -14
  446. package/src/utils/runtime.ts +0 -44
  447. package/src/utils/server-utils.module.ts +0 -67
  448. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  449. package/src/watchers/project-watcher.ts +0 -364
  450. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  451. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  452. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  453. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  454. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  455. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  456. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -0,0 +1,132 @@
1
+ import path from "node:path";
2
+ import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
3
+ import { extractEcopagesVirtualImports } from "./ecopages-virtual-imports.js";
4
+ import { collectDeclaredAssetEntries } from "./declared-asset-collection.js";
5
+ import { getLazyTriggerKey } from "./lazy-trigger-planning.js";
6
+ import { collectLazyScriptEntries } from "./lazy-entry-collection.js";
7
+ import {
8
+ createModuleScriptName,
9
+ createNamedImportModuleSource,
10
+ createNamespaceImportModuleSource
11
+ } from "./module-declaration-scripts.js";
12
+ import { collectModuleDeclarations } from "./module-declaration-aggregation.js";
13
+ const MODULE_SCRIPT_ATTRIBUTES = {
14
+ type: "module",
15
+ defer: ""
16
+ };
17
+ function createModuleScriptAttributes(attributes) {
18
+ return {
19
+ ...MODULE_SCRIPT_ATTRIBUTES,
20
+ ...attributes
21
+ };
22
+ }
23
+ function pushUniqueDependency(keys, key, dependencies, dependency) {
24
+ if (keys.has(key)) {
25
+ return false;
26
+ }
27
+ keys.add(key);
28
+ dependencies.push(dependency);
29
+ return true;
30
+ }
31
+ function resolveDependencyPath(componentDir, pathUrl) {
32
+ return path.join(componentDir, pathUrl);
33
+ }
34
+ function collectComponentDependencies(options) {
35
+ const {
36
+ components,
37
+ integrationName,
38
+ resolveLazyScripts,
39
+ createEcopagesJsxLazyEntryName,
40
+ isEcopagesJsxIntegration,
41
+ errors
42
+ } = options;
43
+ const dependencies = [];
44
+ const lazyScriptsByConfig = /* @__PURE__ */ new Map();
45
+ const lazyDependencyKeys = /* @__PURE__ */ new Set();
46
+ for (const component of components) {
47
+ if (!component) continue;
48
+ const componentFile = component.config?.__eco?.file;
49
+ if (!componentFile) continue;
50
+ const stylesheetDependencyKeys = /* @__PURE__ */ new Set();
51
+ const scriptDependencyKeys = /* @__PURE__ */ new Set();
52
+ const modulesMap = /* @__PURE__ */ new Map();
53
+ const collect = (config) => {
54
+ if (!config) return;
55
+ const file = config.__eco?.file;
56
+ if (!file) return;
57
+ const dir = path.dirname(file);
58
+ const dependenciesConfig = config.dependencies;
59
+ const registerLazyScript = ({
60
+ lazy,
61
+ lazyKey,
62
+ fallbackUrl
63
+ }) => {
64
+ let grouped = lazyScriptsByConfig.get(config);
65
+ if (!grouped) {
66
+ grouped = /* @__PURE__ */ new Map();
67
+ lazyScriptsByConfig.set(config, grouped);
68
+ }
69
+ const triggerKey = getLazyTriggerKey(lazy);
70
+ const existing = grouped.get(triggerKey) ?? { lazy, scripts: [] };
71
+ existing.scripts.push({ lazyKey, fallbackUrl });
72
+ grouped.set(triggerKey, existing);
73
+ };
74
+ collectDeclaredAssetEntries({
75
+ stylesheetEntries: dependenciesConfig?.stylesheets ?? [],
76
+ scriptEntries: dependenciesConfig?.scripts ?? [],
77
+ componentDir: dir,
78
+ dependencies,
79
+ stylesheetDependencyKeys,
80
+ scriptDependencyKeys,
81
+ resolveDependencyPath,
82
+ createModuleScriptAttributes,
83
+ pushUniqueDependency,
84
+ getInvalidStylesheetEntryMessage: () => errors.invalidStylesheetEntry,
85
+ getInvalidScriptEntryMessage: () => errors.invalidScriptEntry
86
+ });
87
+ collectModuleDeclarations(modulesMap, dependenciesConfig?.modules, extractEcopagesVirtualImports(file));
88
+ collectLazyScriptEntries({
89
+ scriptEntries: dependenciesConfig?.scripts ?? [],
90
+ componentFile: file,
91
+ componentDir: dir,
92
+ integrationName,
93
+ dependencies,
94
+ lazyDependencyKeys,
95
+ registerLazyScript,
96
+ resolveDependencyPath,
97
+ resolveLazyScripts,
98
+ createModuleScriptAttributes,
99
+ createEcopagesJsxLazyEntryName,
100
+ pushUniqueDependency,
101
+ getLazyScriptMissingSrcMessage: () => errors.lazyScriptMissingSrc,
102
+ isEcopagesJsxIntegration
103
+ });
104
+ if (dependenciesConfig?.components) {
105
+ for (const nestedComponent of dependenciesConfig.components) {
106
+ if (nestedComponent?.config) {
107
+ collect(nestedComponent.config);
108
+ }
109
+ }
110
+ }
111
+ };
112
+ collect(component.config);
113
+ dependencies.push(
114
+ ...Array.from(modulesMap.entries()).map(([from, importsSet]) => {
115
+ const imports = importsSet ? Array.from(importsSet) : void 0;
116
+ return AssetFactory.createContentScript({
117
+ position: "head",
118
+ name: createModuleScriptName(from, imports),
119
+ content: imports && imports.length > 0 ? createNamedImportModuleSource(from, imports) : createNamespaceImportModuleSource(from),
120
+ attributes: createModuleScriptAttributes()
121
+ });
122
+ })
123
+ );
124
+ }
125
+ return {
126
+ dependencies,
127
+ lazyScriptsByConfig
128
+ };
129
+ }
130
+ export {
131
+ collectComponentDependencies
132
+ };
@@ -0,0 +1,24 @@
1
+ import type { EcoComponentScriptEntry, EcoComponentStylesheetEntry } from '../../types/public-types.js';
2
+ import type { AssetDefinition } from '../../services/assets/asset-processing-service/index.js';
3
+ type CollectDeclaredAssetEntriesOptions = {
4
+ stylesheetEntries: Array<string | EcoComponentStylesheetEntry>;
5
+ scriptEntries: Array<string | EcoComponentScriptEntry>;
6
+ componentDir: string;
7
+ dependencies: AssetDefinition[];
8
+ stylesheetDependencyKeys: Set<string>;
9
+ scriptDependencyKeys: Set<string>;
10
+ resolveDependencyPath: (componentDir: string, pathUrl: string) => string;
11
+ createModuleScriptAttributes: (attributes?: Record<string, string>) => Record<string, string>;
12
+ pushUniqueDependency: (keys: Set<string>, key: string, dependencies: AssetDefinition[], dependency: AssetDefinition) => boolean;
13
+ getInvalidStylesheetEntryMessage: () => string;
14
+ getInvalidScriptEntryMessage: () => string;
15
+ };
16
+ /**
17
+ * Normalizes non-lazy stylesheet and script declarations into asset definitions.
18
+ *
19
+ * Duplicate declarations are filtered through the provided key sets so callers can
20
+ * compose this helper into larger recursive collection passes without re-emitting
21
+ * the same asset multiple times.
22
+ */
23
+ export declare function collectDeclaredAssetEntries(options: CollectDeclaredAssetEntriesOptions): void;
24
+ export {};
@@ -0,0 +1,106 @@
1
+ import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
2
+ function isDependencyEntryObject(entry) {
3
+ return typeof entry === "object" && entry !== null;
4
+ }
5
+ function getDependencyEntrySrc(entry) {
6
+ return isDependencyEntryObject(entry) ? entry.src : entry;
7
+ }
8
+ function getDependencyEntryContent(entry) {
9
+ return isDependencyEntryObject(entry) ? entry.content : void 0;
10
+ }
11
+ function getDependencyEntryAttributes(entry) {
12
+ return isDependencyEntryObject(entry) ? entry.attributes : void 0;
13
+ }
14
+ function collectDeclaredAssetEntries(options) {
15
+ const {
16
+ stylesheetEntries,
17
+ scriptEntries,
18
+ componentDir,
19
+ dependencies,
20
+ stylesheetDependencyKeys,
21
+ scriptDependencyKeys,
22
+ resolveDependencyPath,
23
+ createModuleScriptAttributes,
24
+ pushUniqueDependency,
25
+ getInvalidStylesheetEntryMessage,
26
+ getInvalidScriptEntryMessage
27
+ } = options;
28
+ for (const style of stylesheetEntries) {
29
+ const content = getDependencyEntryContent(style);
30
+ const src = getDependencyEntrySrc(style);
31
+ const attributes = getDependencyEntryAttributes(style);
32
+ if (content) {
33
+ const depKey2 = `style:content:${content}:${JSON.stringify(attributes ?? {})}`;
34
+ pushUniqueDependency(
35
+ stylesheetDependencyKeys,
36
+ depKey2,
37
+ dependencies,
38
+ AssetFactory.createContentStylesheet({
39
+ content,
40
+ position: "head",
41
+ attributes
42
+ })
43
+ );
44
+ continue;
45
+ }
46
+ if (!src) {
47
+ throw new Error(getInvalidStylesheetEntryMessage());
48
+ }
49
+ const resolvedPath = resolveDependencyPath(componentDir, src);
50
+ const depKey = `style:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
51
+ pushUniqueDependency(
52
+ stylesheetDependencyKeys,
53
+ depKey,
54
+ dependencies,
55
+ AssetFactory.createFileStylesheet({
56
+ filepath: resolvedPath,
57
+ position: "head",
58
+ attributes: {
59
+ rel: "stylesheet",
60
+ ...attributes
61
+ }
62
+ })
63
+ );
64
+ }
65
+ for (const script of scriptEntries) {
66
+ if (isDependencyEntryObject(script) && "lazy" in script && script.lazy) {
67
+ continue;
68
+ }
69
+ const content = getDependencyEntryContent(script);
70
+ const src = getDependencyEntrySrc(script);
71
+ const attributes = getDependencyEntryAttributes(script);
72
+ if (content) {
73
+ const depKey2 = `script:content:${content}:${JSON.stringify(attributes ?? {})}`;
74
+ pushUniqueDependency(
75
+ scriptDependencyKeys,
76
+ depKey2,
77
+ dependencies,
78
+ AssetFactory.createInlineContentScript({
79
+ position: "head",
80
+ content,
81
+ bundle: false,
82
+ attributes
83
+ })
84
+ );
85
+ continue;
86
+ }
87
+ if (!src) {
88
+ throw new Error(getInvalidScriptEntryMessage());
89
+ }
90
+ const resolvedPath = resolveDependencyPath(componentDir, src);
91
+ const depKey = `script:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
92
+ pushUniqueDependency(
93
+ scriptDependencyKeys,
94
+ depKey,
95
+ dependencies,
96
+ AssetFactory.createFileScript({
97
+ filepath: resolvedPath,
98
+ position: "head",
99
+ attributes: createModuleScriptAttributes(attributes)
100
+ })
101
+ );
102
+ }
103
+ }
104
+ export {
105
+ collectDeclaredAssetEntries
106
+ };
@@ -1,6 +1,6 @@
1
- import type { EcoComponent } from '../public-types.js';
2
- import type { EcoPagesAppConfig } from '../internal-types.js';
3
- import type { AssetProcessingService, ProcessedAsset } from '../services/asset-processing-service/index.js';
1
+ import type { EcoComponent } from '../../types/public-types.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ import type { AssetProcessingService, ProcessedAsset } from '../../services/assets/asset-processing-service/index.js';
4
4
  export declare const DEPENDENCY_ERRORS: {
5
5
  readonly INVALID_STYLESHEET_ENTRY: "Invalid stylesheet dependency entry: expected src or content";
6
6
  readonly INVALID_SCRIPT_ENTRY: "Invalid script dependency entry: expected src or content";
@@ -9,7 +9,18 @@ export declare const DEPENDENCY_ERRORS: {
9
9
  export declare class DependencyResolverService {
10
10
  private appConfig;
11
11
  private assetProcessingService;
12
+ /**
13
+ * Creates the dependency resolver used by route and component rendering.
14
+ *
15
+ * @remarks
16
+ * The resolver stays intentionally separate from HTML rendering so component
17
+ * dependency collection, lazy trigger grouping, and processed-asset generation
18
+ * can evolve without changing renderer implementations.
19
+ */
12
20
  constructor(appConfig: EcoPagesAppConfig, assetProcessingService: AssetProcessingService);
21
+ /**
22
+ * Resolves one dependency path relative to the component that declared it.
23
+ */
13
24
  resolveDependencyPath(componentDir: string, pathUrl: string): string;
14
25
  /**
15
26
  * Maps lazy script source entries to deterministic fallback public URLs
@@ -20,5 +31,5 @@ export declare class DependencyResolverService {
20
31
  * Collects and processes component dependencies (styles, scripts, modules, lazy scripts).
21
32
  * Lazy dependencies are always resolved into global-injector trigger maps.
22
33
  */
23
- processComponentDependencies(components: (EcoComponent | Partial<EcoComponent>)[], integrationName: string): Promise<ProcessedAsset[]>;
34
+ processComponentDependencies(components: Array<EcoComponent | Partial<EcoComponent> | undefined | null>, integrationName: string): Promise<ProcessedAsset[]>;
24
35
  }
@@ -0,0 +1,115 @@
1
+ import path from "node:path";
2
+ import { rapidhash } from "../../utils/hash.js";
3
+ import { AssetFactory } from "../../services/assets/asset-processing-service/index.js";
4
+ import { buildResolvedLazyTriggers } from "./lazy-trigger-planning.js";
5
+ import { collectComponentDependencies } from "./component-dependency-collection.js";
6
+ import { packagePageDependencies } from "./page-dependency-bundling.js";
7
+ const DEPENDENCY_ERRORS = {
8
+ INVALID_STYLESHEET_ENTRY: "Invalid stylesheet dependency entry: expected src or content",
9
+ INVALID_SCRIPT_ENTRY: "Invalid script dependency entry: expected src or content",
10
+ LAZY_SCRIPT_MISSING_SRC: "Lazy script dependency entry in dependencies.scripts requires a src value"
11
+ };
12
+ function resolveLazyScripts(appConfig, componentDir, scripts) {
13
+ const getSafeFileName = (filepath) => {
14
+ const EXTENSIONS_TO_JS = ["ts", "tsx"];
15
+ const safe = filepath.replace(new RegExp(`\\.(${EXTENSIONS_TO_JS.join("|")})$`), ".js");
16
+ return safe.startsWith("./") ? safe.slice(2) : safe;
17
+ };
18
+ const baseDir = componentDir.split(appConfig.srcDir)[1] ?? "";
19
+ const resolvedPaths = scripts.map((script) => {
20
+ const relativePath = [AssetFactory.RESOLVED_ASSETS_DIR, baseDir, getSafeFileName(script)].filter(Boolean).join("/").replace(/\/+/g, "/");
21
+ return `/${relativePath.replace(/^\/+/, "")}`;
22
+ });
23
+ return resolvedPaths.join(",");
24
+ }
25
+ const ECOPAGES_JSX_INTEGRATION_NAME = "ecopages-jsx";
26
+ function isEcopagesJsxIntegration(integrationName) {
27
+ return integrationName === ECOPAGES_JSX_INTEGRATION_NAME;
28
+ }
29
+ function createEcopagesJsxLazyEntryName(integrationName, key) {
30
+ return `ecopages-${integrationName}-lazy-${rapidhash(key).toString(16)}`;
31
+ }
32
+ class DependencyResolverService {
33
+ appConfig;
34
+ assetProcessingService;
35
+ /**
36
+ * Creates the dependency resolver used by route and component rendering.
37
+ *
38
+ * @remarks
39
+ * The resolver stays intentionally separate from HTML rendering so component
40
+ * dependency collection, lazy trigger grouping, and processed-asset generation
41
+ * can evolve without changing renderer implementations.
42
+ */
43
+ constructor(appConfig, assetProcessingService) {
44
+ this.appConfig = appConfig;
45
+ this.assetProcessingService = assetProcessingService;
46
+ }
47
+ /**
48
+ * Resolves one dependency path relative to the component that declared it.
49
+ */
50
+ resolveDependencyPath(componentDir, pathUrl) {
51
+ return path.join(componentDir, pathUrl);
52
+ }
53
+ /**
54
+ * Maps lazy script source entries to deterministic fallback public URLs
55
+ * used when bundling output URLs are unavailable.
56
+ */
57
+ resolveLazyScripts(componentDir, scripts) {
58
+ return resolveLazyScripts(this.appConfig, componentDir, scripts);
59
+ }
60
+ /**
61
+ * Collects and processes component dependencies (styles, scripts, modules, lazy scripts).
62
+ * Lazy dependencies are always resolved into global-injector trigger maps.
63
+ */
64
+ async processComponentDependencies(components, integrationName) {
65
+ if (!this.assetProcessingService?.processDependencies) return [];
66
+ const { dependencies, lazyScriptsByConfig } = collectComponentDependencies({
67
+ components,
68
+ integrationName,
69
+ resolveLazyScripts: (componentDir, scripts) => this.resolveLazyScripts(componentDir, scripts),
70
+ createEcopagesJsxLazyEntryName,
71
+ isEcopagesJsxIntegration,
72
+ errors: {
73
+ invalidStylesheetEntry: DEPENDENCY_ERRORS.INVALID_STYLESHEET_ENTRY,
74
+ invalidScriptEntry: DEPENDENCY_ERRORS.INVALID_SCRIPT_ENTRY,
75
+ lazyScriptMissingSrc: DEPENDENCY_ERRORS.LAZY_SCRIPT_MISSING_SRC
76
+ }
77
+ });
78
+ const packagedDependencies = packagePageDependencies(dependencies, integrationName);
79
+ const hasLazyDependencies = packagedDependencies.some(
80
+ (dep) => dep.kind === "script" && dep.excludeFromHtml === true
81
+ );
82
+ const processedDependencies = await this.assetProcessingService.processDependencies(
83
+ packagedDependencies,
84
+ integrationName
85
+ );
86
+ const lazyKeyToOutputUrl = /* @__PURE__ */ new Map();
87
+ for (const dependency of processedDependencies) {
88
+ if (dependency.kind === "script" && dependency.srcUrl) {
89
+ const lazyKey = dependency.attributes?.["data-eco-lazy-key"];
90
+ if (lazyKey) {
91
+ lazyKeyToOutputUrl.set(lazyKey, dependency.srcUrl);
92
+ }
93
+ }
94
+ }
95
+ for (const [config, lazyGroupsMap] of lazyScriptsByConfig.entries()) {
96
+ const rawGroups = [];
97
+ for (const group of lazyGroupsMap.values()) {
98
+ const resolvedUrls = group.scripts.map(({ lazyKey, fallbackUrl }) => lazyKeyToOutputUrl.get(lazyKey) ?? fallbackUrl).filter((url) => Boolean(url && url.length > 0));
99
+ if (resolvedUrls.length === 0) {
100
+ continue;
101
+ }
102
+ rawGroups.push({ lazy: group.lazy, scripts: Array.from(new Set(resolvedUrls)) });
103
+ }
104
+ if (hasLazyDependencies) {
105
+ config._resolvedLazyTriggers = buildResolvedLazyTriggers(config, rawGroups);
106
+ config._resolvedLazyScripts = void 0;
107
+ }
108
+ }
109
+ return processedDependencies;
110
+ }
111
+ }
112
+ export {
113
+ DEPENDENCY_ERRORS,
114
+ DependencyResolverService
115
+ };
@@ -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[];