@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55

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 (594) hide show
  1. package/package.json +196 -91
  2. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  3. package/src/adapters/abstract/application-adapter.js +121 -0
  4. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  5. package/src/adapters/abstract/router-adapter.js +5 -0
  6. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  7. package/src/adapters/abstract/server-adapter.js +15 -0
  8. package/src/adapters/bun/client-bridge.d.ts +34 -0
  9. package/src/adapters/bun/client-bridge.js +48 -0
  10. package/src/adapters/bun/create-app.d.ts +60 -0
  11. package/src/adapters/bun/create-app.js +140 -0
  12. package/src/adapters/bun/hmr-manager.d.ts +47 -0
  13. package/src/adapters/bun/hmr-manager.js +58 -0
  14. package/src/adapters/bun/index.d.ts +2 -0
  15. package/src/adapters/bun/index.js +8 -0
  16. package/src/adapters/bun/runtime-host.d.ts +52 -0
  17. package/src/adapters/bun/runtime-host.js +56 -0
  18. package/src/adapters/bun/server-adapter.d.ts +223 -0
  19. package/src/adapters/bun/server-adapter.js +450 -0
  20. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  21. package/src/adapters/bun/static-preview-host.js +45 -0
  22. package/src/adapters/create-app.d.ts +20 -0
  23. package/src/adapters/create-app.js +66 -0
  24. package/src/adapters/index.d.ts +2 -0
  25. package/src/adapters/index.js +8 -0
  26. package/src/adapters/node/create-app.d.ts +24 -0
  27. package/src/adapters/node/create-app.js +92 -0
  28. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  29. package/src/adapters/node/http-request-bridge.js +118 -0
  30. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  31. package/src/adapters/node/node-client-bridge.js +66 -0
  32. package/src/adapters/node/node-hmr-manager.d.ts +52 -0
  33. package/src/adapters/node/node-hmr-manager.js +49 -0
  34. package/src/adapters/node/runtime-host.d.ts +57 -0
  35. package/src/adapters/node/runtime-host.js +92 -0
  36. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  37. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  38. package/src/adapters/node/server-adapter.d.ts +138 -0
  39. package/src/adapters/node/server-adapter.js +313 -0
  40. package/src/adapters/node/static-content-server.d.ts +60 -0
  41. package/src/adapters/node/static-content-server.js +194 -0
  42. package/src/adapters/node/static-preview-host.d.ts +55 -0
  43. package/src/adapters/node/static-preview-host.js +68 -0
  44. package/src/adapters/shared/api-response.d.ts +52 -0
  45. package/src/adapters/shared/api-response.js +96 -0
  46. package/src/adapters/shared/application-adapter.d.ts +18 -0
  47. package/src/adapters/shared/application-adapter.js +90 -0
  48. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  49. package/src/adapters/shared/define-api-handler.js +15 -0
  50. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  51. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  52. package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
  53. package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
  54. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
  55. package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
  56. package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
  57. package/src/adapters/shared/fs-server-response-factory.js +81 -0
  58. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  59. package/src/adapters/shared/fs-server-response-matcher.js +186 -0
  60. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  61. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  62. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  63. package/src/adapters/shared/hmr-html-response.js +33 -0
  64. package/src/adapters/shared/render-context.d.ts +16 -0
  65. package/src/adapters/shared/render-context.js +93 -0
  66. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  67. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  68. package/src/adapters/shared/runtime-host.d.ts +12 -0
  69. package/src/adapters/shared/runtime-host.js +0 -0
  70. package/src/adapters/shared/server-adapter.d.ts +108 -0
  71. package/src/adapters/shared/server-adapter.js +436 -0
  72. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  73. package/src/adapters/shared/server-route-handler.js +111 -0
  74. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  75. package/src/adapters/shared/server-static-builder.js +100 -0
  76. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  77. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  78. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  79. package/src/adapters/shared/static-preview-host.js +0 -0
  80. package/src/build/browser-runtime-manifest.d.ts +31 -0
  81. package/src/build/browser-runtime-manifest.js +61 -0
  82. package/src/build/{browser-runtime-plugin-helpers.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
  83. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  84. package/src/build/browser-runtime-plugin.d.ts +78 -0
  85. package/src/build/browser-runtime-plugin.js +172 -0
  86. package/src/build/build-adapter.d.ts +504 -0
  87. package/src/build/build-adapter.js +240 -0
  88. package/src/build/build-manifest.d.ts +33 -0
  89. package/src/build/build-manifest.js +49 -0
  90. package/src/build/build-types.d.ts +57 -0
  91. package/src/build/build-types.js +0 -0
  92. package/src/build/rolldown-build-adapter.d.ts +32 -0
  93. package/src/build/rolldown-build-adapter.js +260 -0
  94. package/src/build/rolldown-plugin-bridge.d.ts +50 -0
  95. package/src/build/rolldown-plugin-bridge.js +194 -0
  96. package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
  97. package/src/build/runtime-build-executor.js +19 -0
  98. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  99. package/src/build/runtime-build-output-normalizer.js +111 -0
  100. package/src/build/serialized-build-executor.d.ts +64 -0
  101. package/src/build/serialized-build-executor.js +63 -0
  102. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  103. package/src/build/server-side-css-shim-plugin.js +35 -0
  104. package/src/cache/{index.ts → index.d.ts} +1 -1
  105. package/src/cache/index.js +6 -0
  106. package/src/cache/module-parse-cache.d.ts +65 -0
  107. package/src/cache/module-parse-cache.js +75 -0
  108. package/src/config/config-builder.d.ts +252 -0
  109. package/src/config/config-builder.js +589 -0
  110. package/src/config/{constants.ts → constants.d.ts} +13 -22
  111. package/src/config/constants.js +25 -0
  112. package/src/dev/host-runtime.d.ts +10 -0
  113. package/src/dev/host-runtime.js +24 -0
  114. package/src/dev/sc-server.d.ts +30 -0
  115. package/src/dev/sc-server.js +111 -0
  116. package/src/eco/eco.browser.d.ts +2 -0
  117. package/src/eco/eco.browser.js +88 -0
  118. package/src/eco/eco.d.ts +9 -0
  119. package/src/eco/eco.js +119 -0
  120. package/src/eco/eco.types.d.ts +230 -0
  121. package/src/eco/eco.types.js +0 -0
  122. package/src/eco/eco.utils.d.ts +1 -0
  123. package/src/eco/eco.utils.js +10 -0
  124. package/src/eco/global-injector-map.d.ts +16 -0
  125. package/src/eco/global-injector-map.js +80 -0
  126. package/src/eco/lazy-injector-map.d.ts +8 -0
  127. package/src/eco/lazy-injector-map.js +70 -0
  128. package/src/eco/module-dependencies.d.ts +18 -0
  129. package/src/eco/module-dependencies.js +49 -0
  130. package/src/errors/http-error.d.ts +31 -0
  131. package/src/errors/http-error.js +50 -0
  132. package/src/errors/index.d.ts +3 -0
  133. package/src/errors/index.js +6 -0
  134. package/src/errors/locals-access-error.d.ts +4 -0
  135. package/src/errors/locals-access-error.js +9 -0
  136. package/src/global/app-logger.d.ts +2 -0
  137. package/src/global/app-logger.js +6 -0
  138. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  139. package/src/hmr/client/hmr-runtime.js +117 -0
  140. package/src/hmr/hmr-strategy.d.ts +162 -0
  141. package/src/hmr/hmr-strategy.js +44 -0
  142. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  143. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  144. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  145. package/src/hmr/hmr.test.e2e.js +43 -0
  146. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  147. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  148. package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
  149. package/src/hmr/strategies/js-hmr-strategy.js +173 -0
  150. package/src/index.browser.d.ts +3 -0
  151. package/src/index.browser.js +4 -0
  152. package/src/index.d.ts +6 -0
  153. package/src/index.js +21 -0
  154. package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
  155. package/src/integrations/ghtml/ghtml-renderer.js +57 -0
  156. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  157. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  158. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  159. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  160. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  161. package/src/plugins/alias-resolver-cache.js +106 -0
  162. package/src/plugins/alias-resolver-plugin.d.ts +6 -0
  163. package/src/plugins/alias-resolver-plugin.js +65 -0
  164. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  165. package/src/plugins/eco-component-meta-plugin.js +175 -0
  166. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  167. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  168. package/src/plugins/integration-plugin.d.ts +230 -0
  169. package/src/plugins/integration-plugin.js +201 -0
  170. package/src/plugins/processor.d.ts +97 -0
  171. package/src/plugins/processor.js +141 -0
  172. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  173. package/src/plugins/runtime-capability.js +0 -0
  174. package/src/plugins/source-transform.d.ts +46 -0
  175. package/src/plugins/source-transform.js +71 -0
  176. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  177. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  178. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  179. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  180. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  181. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  182. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  183. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  184. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  185. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  186. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  187. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  188. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  189. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  190. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  191. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  192. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  193. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  194. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  195. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  196. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  197. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  198. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  199. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  200. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  201. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  202. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  203. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  204. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  205. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  206. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  207. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  208. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  209. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  210. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  211. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  212. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  213. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  214. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  215. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  216. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  217. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  218. package/src/route-renderer/route-renderer.d.ts +69 -0
  219. package/src/route-renderer/route-renderer.js +80 -0
  220. package/src/router/client/link-intent.js +34 -0
  221. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  222. package/src/router/client/link-intent.test.browser.js +43 -0
  223. package/src/router/client/navigation-coordinator.d.ts +169 -0
  224. package/src/router/client/navigation-coordinator.js +215 -0
  225. package/src/router/server/route-registry.d.ts +78 -0
  226. package/src/router/server/route-registry.js +262 -0
  227. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  228. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  229. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  230. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  231. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  232. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  233. package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
  234. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  235. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  236. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  237. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  238. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  239. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  240. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  241. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  242. package/src/services/assets/asset-processing-service/index.js +6 -0
  243. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  244. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  245. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  246. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  247. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  248. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  249. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  250. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  251. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  252. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  253. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  254. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  255. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  256. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  257. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  258. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
  259. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  260. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  261. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  262. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  263. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  264. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
  265. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  266. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  267. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  268. package/src/services/assets/browser-bundle.service.js +41 -0
  269. package/src/services/cache/cache.types.d.ts +107 -0
  270. package/src/services/cache/cache.types.js +0 -0
  271. package/src/services/cache/index.d.ts +7 -0
  272. package/src/services/cache/index.js +7 -0
  273. package/src/services/cache/memory-cache-store.d.ts +42 -0
  274. package/src/services/cache/memory-cache-store.js +98 -0
  275. package/src/services/cache/page-cache-service.d.ts +70 -0
  276. package/src/services/cache/page-cache-service.js +152 -0
  277. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  278. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  279. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  280. package/src/services/html/html-rewriter-provider.service.js +68 -0
  281. package/src/services/html/html-transformer.service.d.ts +96 -0
  282. package/src/services/html/html-transformer.service.js +287 -0
  283. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  284. package/src/services/invalidation/development-invalidation.service.js +190 -0
  285. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  286. package/src/services/module-loading/app-module-loader.service.js +0 -0
  287. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  288. package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
  289. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  290. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  291. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  292. package/src/services/module-loading/module-loading-types.js +0 -0
  293. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  294. package/src/services/module-loading/page-module-import.service.js +193 -0
  295. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  296. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  297. package/src/services/module-loading/source-module-support.d.ts +5 -0
  298. package/src/services/module-loading/source-module-support.js +8 -0
  299. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  300. package/src/services/runtime-state/dev-graph.service.js +162 -0
  301. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  303. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  304. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  305. package/src/services/validation/schema-validation-service.d.ts +122 -0
  306. package/src/services/validation/schema-validation-service.js +101 -0
  307. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  308. package/src/services/validation/standard-schema.types.js +0 -0
  309. package/src/static-site-generator/static-site-generator.d.ts +104 -0
  310. package/src/static-site-generator/static-site-generator.js +316 -0
  311. package/src/types/internal-types.d.ts +232 -0
  312. package/src/types/internal-types.js +0 -0
  313. package/src/types/public-types.d.ts +1307 -0
  314. package/src/types/public-types.js +0 -0
  315. package/src/utils/deep-merge.d.ts +14 -0
  316. package/src/utils/deep-merge.js +32 -0
  317. package/src/utils/hash.d.ts +1 -0
  318. package/src/utils/hash.js +7 -0
  319. package/src/utils/html-escaping.d.ts +7 -0
  320. package/src/utils/html-escaping.js +6 -0
  321. package/src/utils/html.js +4 -0
  322. package/src/utils/invariant.d.ts +5 -0
  323. package/src/utils/invariant.js +11 -0
  324. package/src/utils/locals-utils.d.ts +15 -0
  325. package/src/utils/locals-utils.js +24 -0
  326. package/src/utils/parse-cli-args.d.ts +27 -0
  327. package/src/utils/parse-cli-args.js +62 -0
  328. package/src/utils/path-utils.module.d.ts +5 -0
  329. package/src/utils/path-utils.module.js +14 -0
  330. package/src/utils/resolve-work-dir.d.ts +11 -0
  331. package/src/utils/resolve-work-dir.js +31 -0
  332. package/src/utils/runtime.d.ts +11 -0
  333. package/src/utils/runtime.js +40 -0
  334. package/src/utils/server-utils.module.d.ts +19 -0
  335. package/src/utils/server-utils.module.js +56 -0
  336. package/src/watchers/project-watcher.d.ts +136 -0
  337. package/src/watchers/project-watcher.js +275 -0
  338. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  339. package/src/watchers/project-watcher.test-helpers.js +52 -0
  340. package/src/adapters/abstract/application-adapter.test.ts +0 -218
  341. package/src/adapters/abstract/application-adapter.ts +0 -379
  342. package/src/adapters/abstract/router-adapter.ts +0 -30
  343. package/src/adapters/abstract/server-adapter.ts +0 -79
  344. package/src/adapters/bun/client-bridge.ts +0 -62
  345. package/src/adapters/bun/create-app.ts +0 -214
  346. package/src/adapters/bun/hmr-manager.test.ts +0 -265
  347. package/src/adapters/bun/hmr-manager.ts +0 -88
  348. package/src/adapters/bun/index.ts +0 -2
  349. package/src/adapters/bun/runtime-host.ts +0 -76
  350. package/src/adapters/bun/server-adapter.ts +0 -605
  351. package/src/adapters/bun/static-preview-host.ts +0 -70
  352. package/src/adapters/create-app.test.ts +0 -10
  353. package/src/adapters/create-app.ts +0 -91
  354. package/src/adapters/index.ts +0 -2
  355. package/src/adapters/node/create-app.test.ts +0 -76
  356. package/src/adapters/node/create-app.ts +0 -116
  357. package/src/adapters/node/http-request-bridge.test.ts +0 -146
  358. package/src/adapters/node/http-request-bridge.ts +0 -176
  359. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  360. package/src/adapters/node/node-client-bridge.ts +0 -79
  361. package/src/adapters/node/node-hmr-manager.test.ts +0 -374
  362. package/src/adapters/node/node-hmr-manager.ts +0 -72
  363. package/src/adapters/node/runtime-host.test.ts +0 -49
  364. package/src/adapters/node/runtime-host.ts +0 -113
  365. package/src/adapters/node/server-adapter-dependencies.ts +0 -28
  366. package/src/adapters/node/server-adapter.test.ts +0 -84
  367. package/src/adapters/node/server-adapter.ts +0 -423
  368. package/src/adapters/node/static-content-server.test.ts +0 -60
  369. package/src/adapters/node/static-content-server.ts +0 -239
  370. package/src/adapters/node/static-preview-host.test.ts +0 -89
  371. package/src/adapters/node/static-preview-host.ts +0 -101
  372. package/src/adapters/shared/api-response.test.ts +0 -97
  373. package/src/adapters/shared/api-response.ts +0 -104
  374. package/src/adapters/shared/application-adapter.ts +0 -199
  375. package/src/adapters/shared/define-api-handler.ts +0 -66
  376. package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
  377. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  378. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
  379. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
  380. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
  381. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
  382. package/src/adapters/shared/fs-server-response-factory.ts +0 -96
  383. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
  384. package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
  385. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  386. package/src/adapters/shared/hmr-html-response.ts +0 -54
  387. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
  388. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
  389. package/src/adapters/shared/render-context.test.ts +0 -244
  390. package/src/adapters/shared/render-context.ts +0 -161
  391. package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
  392. package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
  393. package/src/adapters/shared/runtime-host.ts +0 -11
  394. package/src/adapters/shared/server-adapter.test.ts +0 -130
  395. package/src/adapters/shared/server-adapter.ts +0 -571
  396. package/src/adapters/shared/server-route-handler.test.ts +0 -112
  397. package/src/adapters/shared/server-route-handler.ts +0 -153
  398. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  399. package/src/adapters/shared/server-static-builder.ts +0 -170
  400. package/src/adapters/shared/shared-hmr-manager.ts +0 -298
  401. package/src/adapters/shared/static-preview-host.ts +0 -12
  402. package/src/build/browser-runtime-manifest.test.ts +0 -121
  403. package/src/build/browser-runtime-manifest.ts +0 -105
  404. package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
  405. package/src/build/browser-runtime-plugin.test.ts +0 -256
  406. package/src/build/browser-runtime-plugin.ts +0 -306
  407. package/src/build/build-adapter.test.ts +0 -463
  408. package/src/build/build-adapter.ts +0 -788
  409. package/src/build/build-manifest.ts +0 -79
  410. package/src/build/build-types.ts +0 -83
  411. package/src/build/rolldown-build-adapter.test.ts +0 -352
  412. package/src/build/rolldown-build-adapter.ts +0 -363
  413. package/src/build/rolldown-plugin-bridge.test.ts +0 -256
  414. package/src/build/rolldown-plugin-bridge.ts +0 -309
  415. package/src/build/runtime-build-executor.test.ts +0 -130
  416. package/src/build/runtime-build-output-normalizer.ts +0 -137
  417. package/src/build/serialized-build-executor.test.ts +0 -96
  418. package/src/build/serialized-build-executor.ts +0 -90
  419. package/src/build/server-side-css-shim-plugin.ts +0 -77
  420. package/src/cache/module-parse-cache.test.ts +0 -73
  421. package/src/cache/module-parse-cache.ts +0 -137
  422. package/src/config/config-builder.test.ts +0 -456
  423. package/src/config/config-builder.ts +0 -728
  424. package/src/config/config-builder.typecheck.test.ts +0 -96
  425. package/src/dev/host-runtime.ts +0 -34
  426. package/src/dev/sc-server.ts +0 -143
  427. package/src/eco/eco.browser.test.ts +0 -43
  428. package/src/eco/eco.browser.ts +0 -137
  429. package/src/eco/eco.test.ts +0 -781
  430. package/src/eco/eco.ts +0 -262
  431. package/src/eco/eco.types.ts +0 -293
  432. package/src/eco/eco.utils.test.ts +0 -219
  433. package/src/eco/eco.utils.ts +0 -5
  434. package/src/eco/global-injector-map.test.ts +0 -42
  435. package/src/eco/global-injector-map.ts +0 -112
  436. package/src/eco/lazy-injector-map.test.ts +0 -66
  437. package/src/eco/lazy-injector-map.ts +0 -120
  438. package/src/eco/module-dependencies.test.ts +0 -30
  439. package/src/eco/module-dependencies.ts +0 -75
  440. package/src/errors/http-error.test.ts +0 -134
  441. package/src/errors/http-error.ts +0 -72
  442. package/src/errors/index.ts +0 -3
  443. package/src/errors/locals-access-error.ts +0 -7
  444. package/src/global/app-logger.ts +0 -4
  445. package/src/global/utils.test.ts +0 -12
  446. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  447. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  448. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  449. package/src/hmr/client/hmr-runtime.ts +0 -162
  450. package/src/hmr/hmr-strategy.test.ts +0 -124
  451. package/src/hmr/hmr-strategy.ts +0 -177
  452. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  453. package/src/hmr/hmr.test.e2e.ts +0 -66
  454. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  455. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -344
  456. package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
  457. package/src/index.browser.ts +0 -3
  458. package/src/index.ts +0 -15
  459. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  460. package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
  461. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  462. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  463. package/src/plugins/alias-resolver-cache.test.ts +0 -110
  464. package/src/plugins/alias-resolver-cache.ts +0 -145
  465. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  466. package/src/plugins/alias-resolver-plugin.ts +0 -75
  467. package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
  468. package/src/plugins/eco-component-meta-plugin.ts +0 -518
  469. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  470. package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
  471. package/src/plugins/integration-plugin.test.ts +0 -151
  472. package/src/plugins/integration-plugin.ts +0 -344
  473. package/src/plugins/processor.test.ts +0 -148
  474. package/src/plugins/processor.ts +0 -257
  475. package/src/plugins/source-transform.test.ts +0 -82
  476. package/src/plugins/source-transform.ts +0 -123
  477. package/src/route-renderer/orchestration/component-render-context.ts +0 -338
  478. package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
  479. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
  480. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
  481. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
  482. package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
  483. package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
  484. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
  485. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
  486. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
  487. package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
  488. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
  489. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
  490. package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
  491. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  492. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  493. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
  494. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
  495. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
  496. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
  497. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  498. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  499. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  500. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  501. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  502. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
  503. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  504. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  505. package/src/route-renderer/route-renderer.ts +0 -133
  506. package/src/router/client/link-intent.test.browser.ts +0 -51
  507. package/src/router/client/link-intent.ts +0 -92
  508. package/src/router/client/navigation-coordinator.test.ts +0 -237
  509. package/src/router/client/navigation-coordinator.ts +0 -453
  510. package/src/router/server/route-registry.test.ts +0 -176
  511. package/src/router/server/route-registry.ts +0 -382
  512. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  513. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
  514. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
  515. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  516. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  517. package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
  518. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  519. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
  520. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  521. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  522. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  523. package/src/services/assets/asset-processing-service/index.ts +0 -6
  524. package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
  525. package/src/services/assets/asset-processing-service/page-package.ts +0 -103
  526. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  527. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  528. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  529. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
  530. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  531. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
  532. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
  533. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  534. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
  535. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
  536. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
  537. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  538. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
  539. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
  540. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  541. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  542. package/src/services/assets/browser-bundle.service.ts +0 -109
  543. package/src/services/cache/cache.types.ts +0 -126
  544. package/src/services/cache/index.ts +0 -18
  545. package/src/services/cache/memory-cache-store.test.ts +0 -225
  546. package/src/services/cache/memory-cache-store.ts +0 -130
  547. package/src/services/cache/page-cache-service.test.ts +0 -175
  548. package/src/services/cache/page-cache-service.ts +0 -202
  549. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  550. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  551. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  552. package/src/services/html/html-rewriter-provider.service.ts +0 -105
  553. package/src/services/html/html-transformer.service.test.ts +0 -544
  554. package/src/services/html/html-transformer.service.ts +0 -369
  555. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  556. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  557. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  558. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
  559. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
  560. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  561. package/src/services/module-loading/page-module-import.service.test.ts +0 -652
  562. package/src/services/module-loading/page-module-import.service.ts +0 -302
  563. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
  564. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  565. package/src/services/module-loading/source-module-support.ts +0 -19
  566. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  567. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  568. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  569. package/src/services/validation/schema-validation-service.test.ts +0 -223
  570. package/src/services/validation/schema-validation-service.ts +0 -204
  571. package/src/static-site-generator/static-site-generator.test.ts +0 -408
  572. package/src/static-site-generator/static-site-generator.ts +0 -445
  573. package/src/types/internal-types.ts +0 -243
  574. package/src/types/public-types.ts +0 -1508
  575. package/src/utils/deep-merge.test.ts +0 -114
  576. package/src/utils/deep-merge.ts +0 -47
  577. package/src/utils/hash.ts +0 -5
  578. package/src/utils/html-escaping.ts +0 -9
  579. package/src/utils/invariant.test.ts +0 -22
  580. package/src/utils/invariant.ts +0 -15
  581. package/src/utils/locals-utils.ts +0 -37
  582. package/src/utils/parse-cli-args.test.ts +0 -69
  583. package/src/utils/parse-cli-args.ts +0 -105
  584. package/src/utils/path-utils.module.ts +0 -14
  585. package/src/utils/path-utils.test.ts +0 -15
  586. package/src/utils/resolve-work-dir.ts +0 -45
  587. package/src/utils/runtime.ts +0 -44
  588. package/src/utils/server-utils.module.ts +0 -67
  589. package/src/utils/server-utils.test.ts +0 -38
  590. package/src/watchers/project-watcher.integration.test.ts +0 -337
  591. package/src/watchers/project-watcher.test-helpers.ts +0 -42
  592. package/src/watchers/project-watcher.test.ts +0 -768
  593. package/src/watchers/project-watcher.ts +0 -357
  594. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -1,781 +0,0 @@
1
- /**
2
- * Unit tests for the eco namespace API
3
- */
4
-
5
- import { describe, expect, test } from 'vitest';
6
- import { eco } from './eco.ts';
7
- import type {
8
- EcoComponent,
9
- GetMetadataContext,
10
- HtmlTemplateProps,
11
- LayoutProps,
12
- StaticPath,
13
- } from '../types/public-types.ts';
14
- import type { EcoPagesAppConfig } from '../types/internal-types.ts';
15
- import {
16
- type ForeignChildRuntime,
17
- getComponentRenderContext,
18
- runWithComponentRenderContext,
19
- } from '../route-renderer/orchestration/component-render-context.ts';
20
-
21
- const mockAppConfig = {} as EcoPagesAppConfig;
22
-
23
- function createResolvedForeignChildRuntime(targetIntegrations: string[], value: string): ForeignChildRuntime {
24
- return {
25
- interceptForeignChild: async ({ targetIntegration }: { targetIntegration?: string }) =>
26
- targetIntegration !== undefined && targetIntegrations.includes(targetIntegration)
27
- ? ({ kind: 'resolved', value } as const)
28
- : ({ kind: 'inline' } as const),
29
- };
30
- }
31
-
32
- describe('eco namespace', () => {
33
- describe('eco.component()', () => {
34
- test('should create a component with basic dependencies', () => {
35
- type Props = { count: number };
36
- const Counter = eco.component<Props>({
37
- dependencies: {
38
- stylesheets: ['./counter.css'],
39
- scripts: ['./counter.script.ts'],
40
- },
41
- render: ({ count }) => `<my-counter count="${count}"></my-counter>`,
42
- });
43
-
44
- expect(Counter).toBeDefined();
45
- expect(typeof Counter).toBe('function');
46
- expect(Counter.config).toBeDefined();
47
- expect(Counter.config?.dependencies?.stylesheets).toEqual(['./counter.css']);
48
- expect(Counter.config?.dependencies?.scripts).toEqual(['./counter.script.ts']);
49
- });
50
-
51
- test('should render component without lazy dependencies', () => {
52
- const Component = eco.component({
53
- render: () => '<div>Hello</div>',
54
- });
55
-
56
- const result = Component({});
57
- expect(result).toBe('<div>Hello</div>');
58
- });
59
-
60
- test('should create component with lazy dependencies', () => {
61
- const Counter = eco.component({
62
- dependencies: {
63
- stylesheets: ['./counter.css'],
64
- scripts: [{ src: './counter.script.ts', lazy: { 'on:interaction': 'mouseenter,focusin' } }],
65
- },
66
- render: () => '<my-counter></my-counter>',
67
- });
68
-
69
- expect(Counter.config?.dependencies?.scripts).toEqual([
70
- { src: './counter.script.ts', lazy: { 'on:interaction': 'mouseenter,focusin' } },
71
- ]);
72
- });
73
-
74
- test('should auto-wrap component with scripts-injector when lazy scripts are resolved', () => {
75
- const Counter = eco.component({
76
- dependencies: {
77
- scripts: [{ src: './counter.script.ts', lazy: { 'on:interaction': 'mouseenter,focusin' } }],
78
- },
79
- render: () => '<my-counter></my-counter>',
80
- });
81
-
82
- if (Counter.config) {
83
- Counter.config._resolvedLazyScripts = [
84
- { lazy: { 'on:interaction': 'mouseenter,focusin' }, scripts: '/_assets/counter.js' },
85
- ];
86
- }
87
-
88
- const result = Counter({});
89
- expect(result).toContain('<scripts-injector');
90
- expect(result).toContain('<script type="ecopages/injector-map">');
91
- expect(result).toContain(
92
- '"on:interaction":{"value":"mouseenter,focusin","scripts":["/_assets/counter.js"]}',
93
- );
94
- expect(result).toContain('<my-counter></my-counter>');
95
- expect(result).toContain('</scripts-injector>');
96
- });
97
-
98
- test('should handle on:idle trigger', () => {
99
- const Component = eco.component({
100
- dependencies: {
101
- scripts: [{ src: './script.ts', lazy: { 'on:idle': true } }],
102
- },
103
- render: () => '<div>Content</div>',
104
- });
105
-
106
- if (Component.config) {
107
- Component.config._resolvedLazyScripts = [{ lazy: { 'on:idle': true }, scripts: '/_assets/script.js' }];
108
- }
109
-
110
- const result = Component({});
111
- expect(result).toContain('"on:idle":{"scripts":["/_assets/script.js"]}');
112
- });
113
-
114
- test('should handle on:visible trigger with boolean', () => {
115
- const Component = eco.component({
116
- dependencies: {
117
- scripts: [{ src: './script.ts', lazy: { 'on:visible': true } }],
118
- },
119
- render: () => '<div>Content</div>',
120
- });
121
-
122
- if (Component.config) {
123
- Component.config._resolvedLazyScripts = [
124
- { lazy: { 'on:visible': true }, scripts: '/_assets/script.js' },
125
- ];
126
- }
127
-
128
- const result = Component({});
129
- expect(result).toContain('"on:visible":{"scripts":["/_assets/script.js"]}');
130
- });
131
-
132
- test('should handle on:visible trigger with threshold value', () => {
133
- const Component = eco.component({
134
- dependencies: {
135
- scripts: [{ src: './script.ts', lazy: { 'on:visible': '0.5' } }],
136
- },
137
- render: () => '<div>Content</div>',
138
- });
139
-
140
- if (Component.config) {
141
- Component.config._resolvedLazyScripts = [
142
- { lazy: { 'on:visible': '0.5' }, scripts: '/_assets/script.js' },
143
- ];
144
- }
145
-
146
- const result = Component({});
147
- expect(result).toContain('"on:visible":{"value":"0.5","scripts":["/_assets/script.js"]}');
148
- });
149
-
150
- test('should not wrap when lazy script entries exist but _resolvedLazyScripts is not set', () => {
151
- const Component = eco.component({
152
- dependencies: {
153
- scripts: [{ src: './script.ts', lazy: { 'on:interaction': 'mouseenter' } }],
154
- },
155
- render: () => '<div>Content</div>',
156
- });
157
-
158
- const result = Component({});
159
- expect(result).toBe('<div>Content</div>');
160
- expect(result).not.toContain('scripts-injector');
161
- });
162
-
163
- test('should pass props to render function', () => {
164
- type Props = { name: string; count: number };
165
- const Component = eco.component<Props>({
166
- render: ({ name, count }) => `<div>${name}: ${count}</div>`,
167
- });
168
-
169
- const result = Component({ name: 'Counter', count: 5 });
170
- expect(result).toBe('<div>Counter: 5</div>');
171
- });
172
-
173
- test('should support multiple lazy triggers in dependencies.scripts', () => {
174
- const Component = eco.component({
175
- dependencies: {
176
- scripts: [
177
- { src: './idle.ts', lazy: { 'on:idle': true } },
178
- { src: './visible.ts', lazy: { 'on:visible': '0.5' } },
179
- ],
180
- },
181
- render: () => '<section>Content</section>',
182
- });
183
-
184
- if (Component.config) {
185
- Component.config._resolvedLazyScripts = [
186
- { lazy: { 'on:idle': true }, scripts: '/_assets/idle.js' },
187
- { lazy: { 'on:visible': '0.5' }, scripts: '/_assets/visible.js' },
188
- ];
189
- }
190
-
191
- const result = Component({});
192
- expect(result).toContain('"on:idle":{"scripts":["/_assets/idle.js"]}');
193
- expect(result).toContain('"on:visible":{"value":"0.5","scripts":["/_assets/visible.js"]}');
194
- expect(result).toContain('<section>Content</section>');
195
- expect((result.match(/<scripts-injector/g) ?? []).length).toBe(1);
196
- });
197
-
198
- test('should set explicit integration on component config', () => {
199
- const Component = eco.component({
200
- integration: 'lit',
201
- render: () => '<div>Content</div>',
202
- });
203
-
204
- expect(Component.config?.integration).toBe('lit');
205
- });
206
-
207
- test('should render inline when the foreign-child runtime returns inline for a React component', async () => {
208
- const ReactButton = eco.component({
209
- integration: 'react',
210
- __eco: {
211
- id: 'react-button',
212
- file: '/app/components/react-button.react.tsx',
213
- integration: 'react',
214
- },
215
- render: () => '<button type="button">Click</button>',
216
- });
217
-
218
- const execution = await runWithComponentRenderContext(
219
- {
220
- currentIntegration: 'lit',
221
- },
222
- async () => ReactButton({}),
223
- );
224
-
225
- expect(execution.value).toBe('<button type="button">Click</button>');
226
- });
227
-
228
- test('should resolve foreign children immediately when the runtime returns resolved output', async () => {
229
- const ReactButton = eco.component({
230
- integration: 'react',
231
- __eco: {
232
- id: 'react-button-resolved-runtime',
233
- file: '/app/components/react-button-resolved-runtime.react.tsx',
234
- integration: 'react',
235
- },
236
- render: () => '<button type="button">Click</button>',
237
- });
238
-
239
- const execution = await runWithComponentRenderContext(
240
- {
241
- currentIntegration: 'lit',
242
- foreignChildRuntime: createResolvedForeignChildRuntime(
243
- ['react'],
244
- '<aside>Resolved in owning renderer</aside>',
245
- ),
246
- },
247
- async () => ReactButton({}),
248
- );
249
-
250
- expect(execution.value).toBe('<aside>Resolved in owning renderer</aside>');
251
- });
252
-
253
- test('should render inline with runtime-normalized props', async () => {
254
- const KitaShell = eco.component<{ children?: string }>({
255
- integration: 'kitajs',
256
- __eco: {
257
- id: 'kitajs-shell-inline-props',
258
- file: '/app/components/kitajs-shell-inline-props.kita.tsx',
259
- integration: 'kitajs',
260
- },
261
- render: ({ children }) => `<section>${children ?? ''}</section>`,
262
- });
263
-
264
- const execution = await runWithComponentRenderContext(
265
- {
266
- currentIntegration: 'ecopages-jsx',
267
- foreignChildRuntime: {
268
- interceptForeignChild: async ({ targetIntegration, props }) =>
269
- targetIntegration === 'kitajs'
270
- ? {
271
- kind: 'inline',
272
- props: {
273
- ...props,
274
- children: '<span data-serialized="true">Leaf</span>',
275
- },
276
- }
277
- : { kind: 'inline' },
278
- },
279
- },
280
- async () => KitaShell({ children: { nodeType: 1, outerHTML: '<span>Leaf</span>' } as never }),
281
- );
282
-
283
- expect(execution.value).toBe('<section><span data-serialized="true">Leaf</span></section>');
284
- });
285
-
286
- test('should share render context across duplicated module instances', async () => {
287
- const duplicateModule = (await import(
288
- '../route-renderer/orchestration/component-render-context.ts?duplicate-instance' as string
289
- )) as typeof import('../route-renderer/orchestration/component-render-context.ts');
290
-
291
- const execution = await runWithComponentRenderContext(
292
- {
293
- currentIntegration: 'kitajs',
294
- },
295
- async () => {
296
- expect(getComponentRenderContext()?.currentIntegration).toBe('kitajs');
297
- expect(duplicateModule.getComponentRenderContext()?.currentIntegration).toBe('kitajs');
298
- return 'shared-context';
299
- },
300
- );
301
-
302
- expect(execution.value).toBe('shared-context');
303
- });
304
-
305
- test('should embed children through a third argument without manual prop merging', () => {
306
- const Shell = eco.component<{ id: string; children?: string }>({
307
- render: ({ id, children }) => `<section data-shell="${id}">${children ?? ''}</section>`,
308
- });
309
-
310
- const result = eco.embed(Shell, { id: 'kita' }, '<span>Leaf</span>');
311
-
312
- expect(result).toBe('<section data-shell="kita"><span>Leaf</span></section>');
313
- });
314
-
315
- test('should accept foreign child values without constraining the authoring surface to the target children type', () => {
316
- const Shell = eco.component<{ id: string; children?: string }>({
317
- render: ({ id, children }) => `<section data-shell="${id}">${children ?? ''}</section>`,
318
- });
319
-
320
- const result = eco.embed(Shell, { id: 'kita' }, { foreign: true });
321
-
322
- expect(result).toBe('<section data-shell="kita">[object Object]</section>');
323
- });
324
-
325
- test('should let the foreign-child runtime replace embedded output when the target integration is delegated', async () => {
326
- const ReactButton = eco.component<{ label: string }>({
327
- integration: 'react',
328
- __eco: {
329
- id: 'react-button-embedded-runtime',
330
- file: '/app/components/react-button-embedded-runtime.react.tsx',
331
- integration: 'react',
332
- },
333
- render: ({ label }) => `<button type="button">${label}</button>`,
334
- });
335
-
336
- const execution = await runWithComponentRenderContext(
337
- {
338
- currentIntegration: 'lit',
339
- foreignChildRuntime: createResolvedForeignChildRuntime(
340
- ['react'],
341
- '<aside>Resolved in owning renderer</aside>',
342
- ),
343
- },
344
- async () => eco.embed(ReactButton, { label: 'Click' }),
345
- );
346
-
347
- expect(execution.value).toBe('<aside>Resolved in owning renderer</aside>');
348
- });
349
-
350
- test('should render embedded component output inline when the foreign-child runtime does not delegate the target integration', async () => {
351
- const ReactButton = eco.component<{ label: string }>({
352
- integration: 'react',
353
- __eco: {
354
- id: 'react-button-embedded-inline-runtime',
355
- file: '/app/components/react-button-embedded-inline-runtime.react.tsx',
356
- integration: 'react',
357
- },
358
- render: ({ label }) => `<button type="button">${label}</button>`,
359
- });
360
-
361
- const execution = await runWithComponentRenderContext(
362
- {
363
- currentIntegration: 'lit',
364
- foreignChildRuntime: createResolvedForeignChildRuntime(
365
- ['kitajs'],
366
- '<aside>Resolved elsewhere</aside>',
367
- ),
368
- },
369
- async () => eco.embed(ReactButton, { label: 'Click' }),
370
- );
371
-
372
- expect(execution.value).toBe('<button type="button">Click</button>');
373
- });
374
-
375
- test('should surface an eco.embed-specific error when the active integration misses foreign-child handoff', async () => {
376
- const ReactButton = eco.component<{ label: string }>({
377
- integration: 'react',
378
- __eco: {
379
- id: 'react-button-missing-runtime-handoff',
380
- file: '/app/components/react-button-missing-runtime-handoff.react.tsx',
381
- integration: 'react',
382
- },
383
- render: ({ label }) => `<button type="button">${label}</button>`,
384
- });
385
-
386
- await expect(
387
- runWithComponentRenderContext(
388
- {
389
- currentIntegration: 'lit',
390
- foreignChildRuntime: {},
391
- },
392
- async () => eco.embed(ReactButton, { label: 'Click' }),
393
- ),
394
- ).rejects.toThrowError(
395
- '[ecopages] eco.embed() could not hand off the Foreign Child from lit to react for /app/components/react-button-missing-runtime-handoff.react.tsx.',
396
- );
397
- });
398
- });
399
-
400
- describe('eco.html()', () => {
401
- test('should create a document shell component with html props', () => {
402
- const Html = eco.html({
403
- render: ({ children, language = 'en' }: HtmlTemplateProps) =>
404
- `<html lang="${language}"><body>${children}</body></html>`,
405
- });
406
-
407
- const result = Html({
408
- children: '<main>Hello</main>',
409
- metadata: { title: 'Home', description: 'Welcome' },
410
- pageProps: {},
411
- });
412
-
413
- expect(typeof Html).toBe('function');
414
- expect(result).toBe('<html lang="en"><body><main>Hello</main></body></html>');
415
- });
416
- });
417
-
418
- describe('eco.layout()', () => {
419
- test('should create a route layout component with layout props', () => {
420
- const Layout = eco.layout({
421
- render: ({ children, locals }: LayoutProps<string>) =>
422
- `<main data-user="${locals?.user ?? 'guest'}">${children}</main>`,
423
- });
424
-
425
- const result = Layout({ children: '<h1>Page</h1>', locals: { user: '123' } });
426
-
427
- expect(typeof Layout).toBe('function');
428
- expect(result).toBe('<main data-user="123"><h1>Page</h1></main>');
429
- });
430
-
431
- test('should work when used as page layout', () => {
432
- const Layout = eco.layout<string>({
433
- render: ({ children }) => `<main>${children}</main>`,
434
- });
435
-
436
- const Page = eco.page({
437
- layout: Layout,
438
- render: () => '<h1>Page Content</h1>',
439
- });
440
-
441
- expect(Page.config?.layout).toBe(Layout);
442
- expect(Page.config?.dependencies?.components).toContain(Layout);
443
- });
444
- });
445
-
446
- describe('eco.page()', () => {
447
- test('should create a page without staticProps', () => {
448
- const Page = eco.page({
449
- dependencies: {
450
- components: [],
451
- },
452
- render: () => '<h1>Welcome</h1>',
453
- });
454
-
455
- expect(Page).toBeDefined();
456
- expect(typeof Page).toBe('function');
457
- expect(Page.config).toBeDefined();
458
- });
459
-
460
- test('should create a page with typed props', () => {
461
- type PageProps = { params?: { slug?: string }; query?: Record<string, string> };
462
- const Page = eco.page<PageProps>({
463
- render: ({ params }) => `<h1>${params?.slug || 'Home'}</h1>`,
464
- });
465
-
466
- const result = Page({ params: { slug: 'test-post' } });
467
- expect(result).toBe('<h1>test-post</h1>');
468
- });
469
-
470
- test('should work with lazy dependencies on pages', () => {
471
- const Page = eco.page({
472
- dependencies: {
473
- scripts: [{ src: './page.script.ts', lazy: { 'on:interaction': 'click' } }],
474
- },
475
- render: () => '<div>Page Content</div>',
476
- });
477
-
478
- if (Page.config) {
479
- Page.config._resolvedLazyScripts = [
480
- { lazy: { 'on:interaction': 'click' }, scripts: '/_assets/page.js' },
481
- ];
482
- }
483
-
484
- const result = Page({});
485
- expect(result).toContain('<scripts-injector');
486
- expect(result).toContain('"on:interaction":{"value":"click","scripts":["/_assets/page.js"]}');
487
- });
488
-
489
- test('should store layout in config and include in dependencies', async () => {
490
- const Layout = eco.component<{ children: string }>({
491
- render: ({ children }) => `<main class="layout">${children}</main>`,
492
- });
493
-
494
- const Page = eco.page({
495
- layout: Layout,
496
- render: () => '<h1>Page Content</h1>',
497
- });
498
-
499
- expect(Page.config?.layout).toBe(Layout);
500
- expect(Page.config?.dependencies?.components).toContain(Layout);
501
- const result = await Page({});
502
- expect(result).toBe('<h1>Page Content</h1>');
503
- });
504
-
505
- test('should render raw content (layout wrapping happens at render time)', async () => {
506
- const Layout = eco.component<{ children: string }>({
507
- render: ({ children }) => `<main class="layout">${children}</main>`,
508
- });
509
-
510
- const Page = eco.page({
511
- layout: Layout,
512
- render: async () => {
513
- await Promise.resolve();
514
- return '<h1>Async Content</h1>';
515
- },
516
- });
517
-
518
- expect(Page.config?.layout).toBe(Layout);
519
- const result = await Page({});
520
- expect(result).toBe('<h1>Async Content</h1>');
521
- });
522
-
523
- test('should include layout in dependencies when provided', () => {
524
- const Layout = eco.component<{ children: string }>({
525
- dependencies: {
526
- stylesheets: ['./layout.css'],
527
- },
528
- render: ({ children }) => `<main>${children}</main>`,
529
- });
530
-
531
- const Page = eco.page({
532
- layout: Layout,
533
- dependencies: {
534
- stylesheets: ['./page.css'],
535
- },
536
- render: () => '<h1>Content</h1>',
537
- });
538
-
539
- expect(Page.config?.dependencies?.components).toContain(Layout);
540
- expect(Page.config?.dependencies?.stylesheets).toEqual(['./page.css']);
541
- });
542
-
543
- test('should set explicit integration on page config', () => {
544
- const Page = eco.page({
545
- integration: 'react',
546
- render: () => '<h1>Page</h1>',
547
- });
548
-
549
- expect(Page.config?.integration).toBe('react');
550
- });
551
- });
552
-
553
- describe('eco.metadata()', () => {
554
- test('should be an identity function', () => {
555
- const metadataFn = () => ({
556
- title: 'Home',
557
- description: 'Welcome',
558
- });
559
-
560
- const wrapped = eco.metadata(metadataFn);
561
- expect(wrapped).toBe(metadataFn);
562
- });
563
-
564
- test('should work with async metadata function', async () => {
565
- const metadataFn = async () => ({
566
- title: 'Home',
567
- description: 'Welcome',
568
- });
569
-
570
- const wrapped = eco.metadata(metadataFn);
571
- const result = await wrapped({ props: {}, params: {}, query: {}, appConfig: mockAppConfig });
572
- expect(result.title).toBe('Home');
573
- });
574
-
575
- test('should work with props-based metadata', () => {
576
- const metadataFn = async () => ({ title: 'My Post', description: 'Post excerpt' });
577
- const wrapped = eco.metadata(metadataFn);
578
- expect(wrapped).toBe(metadataFn);
579
- });
580
- });
581
-
582
- describe('eco.staticPaths()', () => {
583
- test('should be an identity function', () => {
584
- const staticPathsFn = async () => ({
585
- paths: [{ params: { slug: 'post-1' } }, { params: { slug: 'post-2' } }],
586
- });
587
-
588
- const wrapped = eco.staticPaths(staticPathsFn);
589
- expect(wrapped).toBe(staticPathsFn);
590
- });
591
-
592
- test('should preserve function behavior', async () => {
593
- const staticPathsFn = async () => ({
594
- paths: [{ params: { slug: 'post-1' } }, { params: { slug: 'post-2' } }],
595
- });
596
-
597
- const wrapped = eco.staticPaths(staticPathsFn);
598
- const result = await wrapped({ appConfig: mockAppConfig, runtimeOrigin: '' });
599
- expect(result.paths).toHaveLength(2);
600
- expect(result.paths[0].params.slug).toBe('post-1');
601
- });
602
- });
603
-
604
- describe('eco.staticProps()', () => {
605
- test('should be an identity function', () => {
606
- const staticPropsFn = async ({ pathname }: any) => ({
607
- props: { slug: pathname.params.slug },
608
- });
609
-
610
- const wrapped = eco.staticProps(staticPropsFn);
611
- expect(wrapped).toBe(staticPropsFn);
612
- });
613
-
614
- test('should preserve function behavior', async () => {
615
- const staticPropsFn = async ({ pathname }: any) => ({
616
- props: { post: { title: 'Test Post', slug: pathname.params.slug } },
617
- });
618
-
619
- const wrapped = eco.staticProps(staticPropsFn);
620
- const result = await wrapped({
621
- pathname: { params: { slug: 'my-post' } },
622
- appConfig: mockAppConfig,
623
- runtimeOrigin: '',
624
- });
625
- expect(result.props.post.title).toBe('Test Post');
626
- expect(result.props.post.slug).toBe('my-post');
627
- });
628
- });
629
-
630
- describe('integration', () => {
631
- test('should work with nested components', () => {
632
- const Button = eco.component<{ label: string }>({
633
- dependencies: {
634
- scripts: [
635
- {
636
- src: './button.script.ts',
637
- lazy: {
638
- 'on:interaction': 'click',
639
- },
640
- },
641
- ],
642
- },
643
- render: ({ label }) => `<button>${label}</button>`,
644
- });
645
-
646
- const Card = eco.component<{ title: string; children: string }>({
647
- dependencies: {
648
- components: [Button as EcoComponent],
649
- },
650
- render: ({ title, children }) => `<div class="card"><h2>${title}</h2>${children}</div>`,
651
- });
652
-
653
- expect(Card.config?.dependencies?.components).toContain(Button);
654
- });
655
- });
656
-
657
- test('should attach staticPaths when provided (consolidated API)', () => {
658
- const staticPathsFn = async () => ({
659
- paths: [{ params: { slug: 'post-1' } }, { params: { slug: 'post-2' } }],
660
- });
661
-
662
- const Page = eco.page({
663
- staticPaths: staticPathsFn,
664
- render: () => '<h1>Page</h1>',
665
- });
666
-
667
- expect(Page.staticPaths).toBe(staticPathsFn);
668
- });
669
-
670
- test('should attach staticProps when provided (consolidated API)', () => {
671
- type Props = { title: string; slug: string };
672
-
673
- const staticPropsFn = async ({ pathname }: { pathname: StaticPath }) => ({
674
- props: { title: 'Test', slug: pathname.params.slug as string },
675
- });
676
-
677
- const Page = eco.page<Props>({
678
- staticProps: staticPropsFn,
679
- render: ({ title }) => `<h1>${title}</h1>`,
680
- });
681
-
682
- expect(Page.staticProps).toBe(staticPropsFn);
683
- });
684
-
685
- test('should attach metadata when provided (consolidated API)', () => {
686
- type Props = { title: string };
687
-
688
- const metadataFn = ({ props: { title } }: GetMetadataContext<Props>) => ({
689
- title,
690
- description: `Page: ${title}`,
691
- });
692
-
693
- const Page = eco.page<Props>({
694
- metadata: metadataFn,
695
- render: ({ title }) => `<h1>${title}</h1>`,
696
- });
697
-
698
- expect(Page.metadata).toBe(metadataFn);
699
- });
700
-
701
- test('should attach all static functions together (consolidated API)', async () => {
702
- type Props = { title: string; slug: string };
703
-
704
- const Page = eco.page<Props>({
705
- staticPaths: async () => ({
706
- paths: [{ params: { slug: 'hello' } }],
707
- }),
708
- staticProps: async ({ pathname }) => ({
709
- props: { title: 'Hello World', slug: pathname.params.slug as string },
710
- }),
711
- metadata: ({ props: { title } }) => ({
712
- title,
713
- description: `Page: ${title}`,
714
- }),
715
- render: ({ title }) => `<h1>${title}</h1>`,
716
- });
717
-
718
- expect(Page.staticPaths).toBeDefined();
719
- expect(Page.staticProps).toBeDefined();
720
- expect(Page.metadata).toBeDefined();
721
-
722
- // Verify they work correctly
723
- const paths = await Page.staticPaths!({ appConfig: mockAppConfig, runtimeOrigin: '' });
724
- expect(paths.paths).toHaveLength(1);
725
-
726
- const props = await Page.staticProps!({
727
- pathname: { params: { slug: 'hello' } },
728
- appConfig: mockAppConfig,
729
- runtimeOrigin: '',
730
- });
731
- expect(props.props.title).toBe('Hello World');
732
-
733
- const result = Page({ title: 'Hello World', slug: 'hello' });
734
- expect(result).toBe('<h1>Hello World</h1>');
735
- });
736
-
737
- test('should not have static functions when not provided', () => {
738
- const Page = eco.page({
739
- render: () => '<h1>Simple Page</h1>',
740
- });
741
-
742
- expect(Page.staticPaths).toBeUndefined();
743
- expect(Page.staticProps).toBeUndefined();
744
- expect(Page.metadata).toBeUndefined();
745
- });
746
-
747
- test('should attach cache strategy "static" when provided', () => {
748
- const Page = eco.page({
749
- cache: 'static',
750
- render: () => '<h1>Static Page</h1>',
751
- });
752
-
753
- expect(Page.cache).toBe('static');
754
- });
755
-
756
- test('should attach cache strategy "dynamic" when provided', () => {
757
- const Page = eco.page({
758
- cache: 'dynamic',
759
- render: () => '<h1>Dynamic Page</h1>',
760
- });
761
-
762
- expect(Page.cache).toBe('dynamic');
763
- });
764
-
765
- test('should attach cache strategy with revalidation when provided', () => {
766
- const Page = eco.page({
767
- cache: { revalidate: 3600, tags: ['blog'] },
768
- render: () => '<h1>Blog Page</h1>',
769
- });
770
-
771
- expect(Page.cache).toEqual({ revalidate: 3600, tags: ['blog'] });
772
- });
773
-
774
- test('should not have cache when not provided', () => {
775
- const Page = eco.page({
776
- render: () => '<h1>Page Without Cache</h1>',
777
- });
778
-
779
- expect(Page.cache).toBeUndefined();
780
- });
781
- });