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

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 (590) hide show
  1. package/README.md +2 -3
  2. package/package.json +97 -182
  3. package/src/adapters/abstract/application-adapter.test.ts +218 -0
  4. package/src/adapters/abstract/application-adapter.ts +379 -0
  5. package/src/adapters/abstract/router-adapter.ts +30 -0
  6. package/src/adapters/abstract/server-adapter.ts +79 -0
  7. package/src/adapters/bun/client-bridge.ts +62 -0
  8. package/src/adapters/bun/create-app.ts +214 -0
  9. package/src/adapters/bun/hmr-manager.test.ts +265 -0
  10. package/src/adapters/bun/hmr-manager.ts +88 -0
  11. package/src/adapters/bun/index.ts +2 -0
  12. package/src/adapters/bun/runtime-host.ts +76 -0
  13. package/src/adapters/bun/server-adapter.ts +605 -0
  14. package/src/adapters/bun/static-preview-host.ts +70 -0
  15. package/src/adapters/create-app.test.ts +10 -0
  16. package/src/adapters/create-app.ts +91 -0
  17. package/src/adapters/index.ts +2 -0
  18. package/src/adapters/node/create-app.test.ts +76 -0
  19. package/src/adapters/node/create-app.ts +116 -0
  20. package/src/adapters/node/http-request-bridge.test.ts +146 -0
  21. package/src/adapters/node/http-request-bridge.ts +176 -0
  22. package/src/adapters/node/node-client-bridge.test.ts +198 -0
  23. package/src/adapters/node/node-client-bridge.ts +79 -0
  24. package/src/adapters/node/node-hmr-manager.test.ts +374 -0
  25. package/src/adapters/node/node-hmr-manager.ts +72 -0
  26. package/src/adapters/node/runtime-host.test.ts +49 -0
  27. package/src/adapters/node/runtime-host.ts +113 -0
  28. package/src/adapters/node/server-adapter-dependencies.ts +28 -0
  29. package/src/adapters/node/server-adapter.test.ts +84 -0
  30. package/src/adapters/node/server-adapter.ts +423 -0
  31. package/src/adapters/node/static-content-server.test.ts +60 -0
  32. package/src/adapters/node/static-content-server.ts +239 -0
  33. package/src/adapters/node/static-preview-host.test.ts +89 -0
  34. package/src/adapters/node/static-preview-host.ts +101 -0
  35. package/src/adapters/shared/api-response.test.ts +97 -0
  36. package/src/adapters/shared/api-response.ts +104 -0
  37. package/src/adapters/shared/application-adapter.ts +199 -0
  38. package/src/adapters/shared/define-api-handler.ts +66 -0
  39. package/src/adapters/shared/explicit-static-render-preparation.ts +58 -0
  40. package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
  41. package/src/adapters/shared/explicit-static-route-matcher.ts +131 -0
  42. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +85 -0
  43. package/src/adapters/shared/file-route-middleware-pipeline.ts +118 -0
  44. package/src/adapters/shared/fs-server-response-factory.test.ts +176 -0
  45. package/src/adapters/shared/fs-server-response-factory.ts +96 -0
  46. package/src/adapters/shared/fs-server-response-matcher.test.ts +311 -0
  47. package/src/adapters/shared/fs-server-response-matcher.ts +240 -0
  48. package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
  49. package/src/adapters/shared/hmr-html-response.ts +54 -0
  50. package/src/adapters/shared/hmr-manager.contract.test.ts +228 -0
  51. package/src/adapters/shared/hmr-manager.dispatch.test.ts +229 -0
  52. package/src/adapters/shared/render-context.test.ts +244 -0
  53. package/src/adapters/shared/render-context.ts +161 -0
  54. package/src/adapters/shared/runtime-app-bootstrap.test.ts +96 -0
  55. package/src/adapters/shared/runtime-app-bootstrap.ts +72 -0
  56. package/src/adapters/shared/runtime-host.ts +11 -0
  57. package/src/adapters/shared/server-adapter.test.ts +130 -0
  58. package/src/adapters/shared/server-adapter.ts +571 -0
  59. package/src/adapters/shared/server-route-handler.test.ts +112 -0
  60. package/src/adapters/shared/server-route-handler.ts +153 -0
  61. package/src/adapters/shared/server-static-builder.test.ts +338 -0
  62. package/src/adapters/shared/server-static-builder.ts +170 -0
  63. package/src/adapters/shared/shared-hmr-manager.ts +298 -0
  64. package/src/adapters/shared/static-preview-host.ts +12 -0
  65. package/src/build/README.md +57 -73
  66. package/src/build/browser-runtime-manifest.test.ts +121 -0
  67. package/src/build/browser-runtime-manifest.ts +105 -0
  68. package/src/build/browser-runtime-plugin-helpers.test.ts +49 -0
  69. package/src/build/browser-runtime-plugin-helpers.ts +37 -0
  70. package/src/build/browser-runtime-plugin.test.ts +256 -0
  71. package/src/build/browser-runtime-plugin.ts +306 -0
  72. package/src/build/build-adapter.test.ts +463 -0
  73. package/src/build/build-adapter.ts +788 -0
  74. package/src/build/build-manifest.ts +79 -0
  75. package/src/build/build-types.ts +83 -0
  76. package/src/build/rolldown-build-adapter.test.ts +352 -0
  77. package/src/build/rolldown-build-adapter.ts +363 -0
  78. package/src/build/rolldown-plugin-bridge.test.ts +256 -0
  79. package/src/build/rolldown-plugin-bridge.ts +309 -0
  80. package/src/build/runtime-build-executor.test.ts +130 -0
  81. package/src/build/runtime-build-executor.ts +37 -0
  82. package/src/build/runtime-build-output-normalizer.ts +137 -0
  83. package/src/build/serialized-build-executor.test.ts +96 -0
  84. package/src/build/serialized-build-executor.ts +90 -0
  85. package/src/build/server-side-css-shim-plugin.ts +77 -0
  86. package/src/cache/index.ts +6 -0
  87. package/src/cache/module-parse-cache.test.ts +73 -0
  88. package/src/cache/module-parse-cache.ts +137 -0
  89. package/src/config/README.md +1 -1
  90. package/src/config/config-builder.test.ts +456 -0
  91. package/src/config/config-builder.ts +728 -0
  92. package/src/config/config-builder.typecheck.test.ts +96 -0
  93. package/src/config/{constants.d.ts → constants.ts} +22 -13
  94. package/src/dev/host-runtime.ts +34 -0
  95. package/src/dev/sc-server.ts +143 -0
  96. package/src/eco/eco.browser.test.ts +43 -0
  97. package/src/eco/eco.browser.ts +137 -0
  98. package/src/eco/eco.test.ts +781 -0
  99. package/src/eco/eco.ts +262 -0
  100. package/src/eco/eco.types.ts +293 -0
  101. package/src/eco/eco.utils.test.ts +219 -0
  102. package/src/eco/eco.utils.ts +5 -0
  103. package/src/eco/global-injector-map.test.ts +42 -0
  104. package/src/eco/global-injector-map.ts +112 -0
  105. package/src/eco/lazy-injector-map.test.ts +66 -0
  106. package/src/eco/lazy-injector-map.ts +120 -0
  107. package/src/eco/module-dependencies.test.ts +30 -0
  108. package/src/eco/module-dependencies.ts +75 -0
  109. package/src/errors/http-error.test.ts +134 -0
  110. package/src/errors/http-error.ts +72 -0
  111. package/src/errors/index.ts +3 -0
  112. package/src/errors/locals-access-error.ts +7 -0
  113. package/src/global/app-logger.ts +4 -0
  114. package/src/global/utils.test.ts +12 -0
  115. 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
  116. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  117. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  118. package/src/hmr/client/hmr-runtime.ts +162 -0
  119. package/src/hmr/hmr-strategy.test.ts +124 -0
  120. package/src/hmr/hmr-strategy.ts +177 -0
  121. package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
  122. package/src/hmr/hmr.test.e2e.ts +66 -0
  123. package/src/hmr/strategies/default-hmr-strategy.ts +60 -0
  124. package/src/hmr/strategies/js-hmr-strategy.test.ts +344 -0
  125. package/src/hmr/strategies/js-hmr-strategy.ts +307 -0
  126. package/src/index.browser.ts +3 -0
  127. package/src/index.ts +15 -0
  128. package/src/integrations/ghtml/ghtml-renderer.test.ts +253 -0
  129. package/src/integrations/ghtml/ghtml-renderer.ts +87 -0
  130. package/src/integrations/ghtml/ghtml.constants.ts +1 -0
  131. package/src/integrations/ghtml/ghtml.plugin.ts +28 -0
  132. package/src/plugins/alias-resolver-cache.test.ts +110 -0
  133. package/src/plugins/alias-resolver-cache.ts +145 -0
  134. package/src/plugins/alias-resolver-plugin.test.ts +41 -0
  135. package/src/plugins/alias-resolver-plugin.ts +75 -0
  136. package/src/plugins/eco-component-meta-plugin.test.ts +421 -0
  137. package/src/plugins/eco-component-meta-plugin.ts +518 -0
  138. package/src/plugins/foreign-jsx-override-plugin.test.ts +65 -0
  139. package/src/plugins/foreign-jsx-override-plugin.ts +76 -0
  140. package/src/plugins/integration-plugin.test.ts +151 -0
  141. package/src/plugins/integration-plugin.ts +344 -0
  142. package/src/plugins/processor.test.ts +148 -0
  143. package/src/plugins/processor.ts +257 -0
  144. package/src/plugins/{runtime-capability.d.ts → runtime-capability.ts} +8 -3
  145. package/src/plugins/source-transform.test.ts +82 -0
  146. package/src/plugins/source-transform.ts +123 -0
  147. package/src/route-renderer/orchestration/component-render-context.ts +338 -0
  148. package/src/route-renderer/orchestration/declared-ownership-graph.ts +62 -0
  149. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +431 -0
  150. package/src/route-renderer/orchestration/integration-renderer.test.ts +2251 -0
  151. package/src/route-renderer/orchestration/integration-renderer.ts +1384 -0
  152. package/src/route-renderer/orchestration/ownership-planning.service.ts +97 -0
  153. package/src/route-renderer/orchestration/ownership-validation.service.ts +76 -0
  154. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +29 -0
  155. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +435 -0
  156. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +310 -0
  157. package/src/route-renderer/orchestration/render-output.utils.ts +310 -0
  158. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +1365 -0
  159. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +267 -0
  160. package/src/route-renderer/orchestration/route-render-orchestrator.ts +879 -0
  161. package/src/route-renderer/orchestration/template-serialization.test.ts +110 -0
  162. package/src/route-renderer/orchestration/template-serialization.ts +117 -0
  163. package/src/route-renderer/page-loading/component-dependency-collection.ts +202 -0
  164. package/src/route-renderer/page-loading/declared-asset-collection.ts +153 -0
  165. package/src/route-renderer/page-loading/dependency-resolver.test.ts +761 -0
  166. package/src/route-renderer/page-loading/dependency-resolver.ts +144 -0
  167. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +75 -0
  168. package/src/route-renderer/page-loading/lazy-entry-collection.ts +167 -0
  169. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +74 -0
  170. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +60 -0
  171. package/src/route-renderer/page-loading/module-declaration-scripts.ts +16 -0
  172. package/src/route-renderer/page-loading/page-dependency-bundling.ts +244 -0
  173. package/src/route-renderer/page-loading/page-module-loader.test.ts +183 -0
  174. package/src/route-renderer/page-loading/page-module-loader.ts +184 -0
  175. package/src/route-renderer/route-renderer.ts +133 -0
  176. package/src/router/client/link-intent.test.browser.ts +51 -0
  177. package/src/router/client/link-intent.ts +92 -0
  178. package/src/router/client/navigation-coordinator.test.ts +237 -0
  179. package/src/router/client/navigation-coordinator.ts +453 -0
  180. package/src/router/server/route-registry.test.ts +176 -0
  181. package/src/router/server/route-registry.ts +382 -0
  182. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +66 -0
  183. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +473 -0
  184. package/src/services/assets/asset-processing-service/asset-processing.service.ts +344 -0
  185. package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
  186. package/src/services/assets/asset-processing-service/asset.factory.ts +105 -0
  187. package/src/services/assets/asset-processing-service/assets.types.ts +128 -0
  188. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +74 -0
  189. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +98 -0
  190. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
  191. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
  192. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +104 -0
  193. package/src/services/assets/asset-processing-service/index.ts +6 -0
  194. package/src/services/assets/asset-processing-service/page-package.test.ts +135 -0
  195. package/src/services/assets/asset-processing-service/page-package.ts +103 -0
  196. package/src/services/assets/asset-processing-service/{processor.interface.d.ts → processor.interface.ts} +10 -5
  197. package/src/services/assets/asset-processing-service/processor.registry.ts +18 -0
  198. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
  199. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +83 -0
  200. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +173 -0
  201. package/src/services/assets/asset-processing-service/processors/index.ts +5 -0
  202. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +188 -0
  203. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +138 -0
  204. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +326 -0
  205. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +116 -0
  206. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +270 -0
  207. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +145 -0
  208. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +261 -0
  209. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +72 -0
  210. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +83 -0
  211. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +65 -0
  212. package/src/services/assets/browser-bundle.service.test.ts +66 -0
  213. package/src/services/assets/browser-bundle.service.ts +109 -0
  214. package/src/services/cache/cache.types.ts +126 -0
  215. package/src/services/cache/index.ts +18 -0
  216. package/src/services/cache/memory-cache-store.test.ts +225 -0
  217. package/src/services/cache/memory-cache-store.ts +130 -0
  218. package/src/services/cache/page-cache-service.test.ts +175 -0
  219. package/src/services/cache/page-cache-service.ts +202 -0
  220. package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
  221. package/src/services/cache/page-request-cache-coordinator.service.ts +131 -0
  222. package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
  223. package/src/services/html/html-rewriter-provider.service.ts +105 -0
  224. package/src/services/html/html-transformer.service.test.ts +544 -0
  225. package/src/services/html/html-transformer.service.ts +369 -0
  226. package/src/services/invalidation/development-invalidation.service.test.ts +87 -0
  227. package/src/services/invalidation/development-invalidation.service.ts +262 -0
  228. package/src/services/module-loading/app-module-loader.service.ts +9 -0
  229. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +297 -0
  230. package/src/services/module-loading/app-server-module-transpiler.service.ts +168 -0
  231. package/src/services/module-loading/host-module-loader-registry.ts +15 -0
  232. package/src/services/module-loading/{module-loading-types.d.ts → module-loading-types.ts} +1 -0
  233. package/src/services/module-loading/page-module-import.service.test.ts +652 -0
  234. package/src/services/module-loading/page-module-import.service.ts +302 -0
  235. package/src/services/module-loading/server-module-transpiler.service.test.ts +242 -0
  236. package/src/services/module-loading/server-module-transpiler.service.ts +104 -0
  237. package/src/services/module-loading/source-module-support.ts +19 -0
  238. package/src/services/runtime-state/dev-graph.service.ts +217 -0
  239. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
  240. package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
  241. package/src/services/validation/schema-validation-service.test.ts +223 -0
  242. package/src/services/validation/schema-validation-service.ts +204 -0
  243. package/src/services/validation/{standard-schema.types.d.ts → standard-schema.types.ts} +20 -17
  244. package/src/static-site-generator/static-site-generator.test.ts +408 -0
  245. package/src/static-site-generator/static-site-generator.ts +445 -0
  246. package/src/types/internal-types.ts +243 -0
  247. package/src/types/public-types.ts +1508 -0
  248. package/src/utils/deep-merge.test.ts +114 -0
  249. package/src/utils/deep-merge.ts +47 -0
  250. package/src/utils/hash.ts +5 -0
  251. package/src/utils/html-escaping.ts +9 -0
  252. package/src/utils/invariant.test.ts +22 -0
  253. package/src/utils/invariant.ts +15 -0
  254. package/src/utils/locals-utils.ts +37 -0
  255. package/src/utils/parse-cli-args.test.ts +69 -0
  256. package/src/utils/parse-cli-args.ts +105 -0
  257. package/src/utils/path-utils.module.ts +14 -0
  258. package/src/utils/path-utils.test.ts +15 -0
  259. package/src/utils/resolve-work-dir.ts +45 -0
  260. package/src/utils/runtime.ts +44 -0
  261. package/src/utils/server-utils.module.ts +67 -0
  262. package/src/utils/server-utils.test.ts +38 -0
  263. package/src/watchers/project-watcher.integration.test.ts +337 -0
  264. package/src/watchers/project-watcher.test-helpers.ts +42 -0
  265. package/src/watchers/project-watcher.test.ts +768 -0
  266. package/src/watchers/project-watcher.ts +357 -0
  267. package/src/adapters/abstract/application-adapter.d.ts +0 -194
  268. package/src/adapters/abstract/application-adapter.js +0 -121
  269. package/src/adapters/abstract/router-adapter.d.ts +0 -26
  270. package/src/adapters/abstract/router-adapter.js +0 -5
  271. package/src/adapters/abstract/server-adapter.d.ts +0 -69
  272. package/src/adapters/abstract/server-adapter.js +0 -15
  273. package/src/adapters/bun/client-bridge.d.ts +0 -34
  274. package/src/adapters/bun/client-bridge.js +0 -48
  275. package/src/adapters/bun/create-app.d.ts +0 -60
  276. package/src/adapters/bun/create-app.js +0 -140
  277. package/src/adapters/bun/hmr-manager.d.ts +0 -47
  278. package/src/adapters/bun/hmr-manager.js +0 -58
  279. package/src/adapters/bun/index.d.ts +0 -2
  280. package/src/adapters/bun/index.js +0 -8
  281. package/src/adapters/bun/runtime-host.d.ts +0 -52
  282. package/src/adapters/bun/runtime-host.js +0 -56
  283. package/src/adapters/bun/server-adapter.d.ts +0 -216
  284. package/src/adapters/bun/server-adapter.js +0 -445
  285. package/src/adapters/bun/static-preview-host.d.ts +0 -28
  286. package/src/adapters/bun/static-preview-host.js +0 -45
  287. package/src/adapters/create-app.d.ts +0 -20
  288. package/src/adapters/create-app.js +0 -66
  289. package/src/adapters/index.d.ts +0 -2
  290. package/src/adapters/index.js +0 -8
  291. package/src/adapters/node/create-app.d.ts +0 -24
  292. package/src/adapters/node/create-app.js +0 -92
  293. package/src/adapters/node/http-request-bridge.d.ts +0 -57
  294. package/src/adapters/node/http-request-bridge.js +0 -118
  295. package/src/adapters/node/node-client-bridge.d.ts +0 -26
  296. package/src/adapters/node/node-client-bridge.js +0 -66
  297. package/src/adapters/node/node-hmr-manager.d.ts +0 -52
  298. package/src/adapters/node/node-hmr-manager.js +0 -49
  299. package/src/adapters/node/runtime-host.d.ts +0 -57
  300. package/src/adapters/node/runtime-host.js +0 -92
  301. package/src/adapters/node/server-adapter-dependencies.d.ts +0 -19
  302. package/src/adapters/node/server-adapter-dependencies.js +0 -18
  303. package/src/adapters/node/server-adapter.d.ts +0 -138
  304. package/src/adapters/node/server-adapter.js +0 -315
  305. package/src/adapters/node/static-content-server.d.ts +0 -60
  306. package/src/adapters/node/static-content-server.js +0 -194
  307. package/src/adapters/node/static-preview-host.d.ts +0 -55
  308. package/src/adapters/node/static-preview-host.js +0 -68
  309. package/src/adapters/shared/api-response.d.ts +0 -52
  310. package/src/adapters/shared/api-response.js +0 -96
  311. package/src/adapters/shared/application-adapter.d.ts +0 -18
  312. package/src/adapters/shared/application-adapter.js +0 -90
  313. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  314. package/src/adapters/shared/define-api-handler.js +0 -15
  315. package/src/adapters/shared/explicit-static-render-preparation.d.ts +0 -25
  316. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  317. package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -41
  318. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  319. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -62
  320. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  321. package/src/adapters/shared/fs-server-response-factory.d.ts +0 -23
  322. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  323. package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -75
  324. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  325. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  326. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  327. package/src/adapters/shared/hmr-html-response.d.ts +0 -22
  328. package/src/adapters/shared/hmr-html-response.js +0 -33
  329. package/src/adapters/shared/render-context.d.ts +0 -16
  330. package/src/adapters/shared/render-context.js +0 -93
  331. package/src/adapters/shared/runtime-app-bootstrap.d.ts +0 -26
  332. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  333. package/src/adapters/shared/runtime-host.d.ts +0 -12
  334. package/src/adapters/shared/runtime-host.js +0 -0
  335. package/src/adapters/shared/server-adapter.d.ts +0 -108
  336. package/src/adapters/shared/server-adapter.js +0 -436
  337. package/src/adapters/shared/server-route-handler.d.ts +0 -89
  338. package/src/adapters/shared/server-route-handler.js +0 -111
  339. package/src/adapters/shared/server-static-builder.d.ts +0 -71
  340. package/src/adapters/shared/server-static-builder.js +0 -100
  341. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  342. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  343. package/src/adapters/shared/static-preview-host.d.ts +0 -10
  344. package/src/adapters/shared/static-preview-host.js +0 -0
  345. package/src/build/browser-runtime-import-rewrite-plugin.d.ts +0 -26
  346. package/src/build/browser-runtime-import-rewrite-plugin.js +0 -165
  347. package/src/build/browser-runtime-manifest.d.ts +0 -31
  348. package/src/build/browser-runtime-manifest.js +0 -61
  349. package/src/build/build-adapter.d.ts +0 -247
  350. package/src/build/build-adapter.js +0 -671
  351. package/src/build/build-manifest.d.ts +0 -33
  352. package/src/build/build-manifest.js +0 -52
  353. package/src/build/build-types.d.ts +0 -57
  354. package/src/build/build-types.js +0 -0
  355. package/src/build/dev-build-coordinator.d.ts +0 -72
  356. package/src/build/dev-build-coordinator.js +0 -154
  357. package/src/build/esbuild-build-adapter.d.ts +0 -79
  358. package/src/build/esbuild-build-adapter.js +0 -521
  359. package/src/build/runtime-build-executor.d.ts +0 -14
  360. package/src/build/runtime-build-executor.js +0 -22
  361. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  362. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  363. package/src/config/config-builder.d.ts +0 -252
  364. package/src/config/config-builder.js +0 -598
  365. package/src/config/constants.js +0 -25
  366. package/src/dev/host-runtime.d.ts +0 -10
  367. package/src/dev/host-runtime.js +0 -24
  368. package/src/dev/sc-server.d.ts +0 -30
  369. package/src/dev/sc-server.js +0 -111
  370. package/src/eco/eco.browser.d.ts +0 -2
  371. package/src/eco/eco.browser.js +0 -88
  372. package/src/eco/eco.d.ts +0 -9
  373. package/src/eco/eco.js +0 -119
  374. package/src/eco/eco.types.d.ts +0 -233
  375. package/src/eco/eco.types.js +0 -0
  376. package/src/eco/eco.utils.d.ts +0 -1
  377. package/src/eco/eco.utils.js +0 -10
  378. package/src/eco/global-injector-map.d.ts +0 -16
  379. package/src/eco/global-injector-map.js +0 -80
  380. package/src/eco/lazy-injector-map.d.ts +0 -8
  381. package/src/eco/lazy-injector-map.js +0 -70
  382. package/src/eco/module-dependencies.d.ts +0 -18
  383. package/src/eco/module-dependencies.js +0 -49
  384. package/src/errors/http-error.d.ts +0 -31
  385. package/src/errors/http-error.js +0 -50
  386. package/src/errors/index.d.ts +0 -3
  387. package/src/errors/index.js +0 -6
  388. package/src/errors/locals-access-error.d.ts +0 -4
  389. package/src/errors/locals-access-error.js +0 -9
  390. package/src/global/app-logger.d.ts +0 -2
  391. package/src/global/app-logger.js +0 -6
  392. package/src/hmr/client/hmr-runtime.d.ts +0 -5
  393. package/src/hmr/client/hmr-runtime.js +0 -117
  394. package/src/hmr/hmr-strategy.d.ts +0 -162
  395. package/src/hmr/hmr-strategy.js +0 -44
  396. package/src/hmr/hmr.postcss.test.e2e.d.ts +0 -1
  397. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  398. package/src/hmr/hmr.test.e2e.d.ts +0 -1
  399. package/src/hmr/hmr.test.e2e.js +0 -43
  400. package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
  401. package/src/hmr/strategies/default-hmr-strategy.js +0 -34
  402. package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -134
  403. package/src/hmr/strategies/js-hmr-strategy.js +0 -173
  404. package/src/index.browser.d.ts +0 -3
  405. package/src/index.browser.js +0 -4
  406. package/src/index.d.ts +0 -6
  407. package/src/index.js +0 -21
  408. package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -16
  409. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  410. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  411. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  412. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  413. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  414. package/src/plugins/alias-resolver-plugin.d.ts +0 -3
  415. package/src/plugins/alias-resolver-plugin.js +0 -61
  416. package/src/plugins/eco-component-meta-plugin.d.ts +0 -108
  417. package/src/plugins/eco-component-meta-plugin.js +0 -175
  418. package/src/plugins/foreign-jsx-override-plugin.d.ts +0 -33
  419. package/src/plugins/foreign-jsx-override-plugin.js +0 -41
  420. package/src/plugins/integration-plugin.d.ts +0 -230
  421. package/src/plugins/integration-plugin.js +0 -201
  422. package/src/plugins/processor.d.ts +0 -97
  423. package/src/plugins/processor.js +0 -141
  424. package/src/plugins/runtime-capability.js +0 -0
  425. package/src/plugins/source-transform.d.ts +0 -46
  426. package/src/plugins/source-transform.js +0 -71
  427. package/src/route-renderer/orchestration/component-render-context.d.ts +0 -97
  428. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  429. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  430. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  431. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +0 -110
  432. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  433. package/src/route-renderer/orchestration/integration-renderer.d.ts +0 -534
  434. package/src/route-renderer/orchestration/integration-renderer.js +0 -991
  435. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  436. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  437. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +0 -29
  438. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  439. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +0 -3
  440. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  441. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  442. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  443. package/src/route-renderer/orchestration/render-output.utils.d.ts +0 -66
  444. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  445. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +0 -156
  446. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  447. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  448. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  449. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +0 -37
  450. package/src/route-renderer/page-loading/component-dependency-collection.js +0 -132
  451. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +0 -24
  452. package/src/route-renderer/page-loading/declared-asset-collection.js +0 -106
  453. package/src/route-renderer/page-loading/dependency-resolver.d.ts +0 -35
  454. package/src/route-renderer/page-loading/dependency-resolver.js +0 -115
  455. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +0 -11
  456. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +0 -57
  457. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +0 -45
  458. package/src/route-renderer/page-loading/lazy-entry-collection.js +0 -105
  459. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +0 -19
  460. package/src/route-renderer/page-loading/lazy-trigger-planning.js +0 -40
  461. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +0 -5
  462. package/src/route-renderer/page-loading/module-declaration-aggregation.js +0 -33
  463. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +0 -3
  464. package/src/route-renderer/page-loading/module-declaration-scripts.js +0 -18
  465. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +0 -13
  466. package/src/route-renderer/page-loading/page-dependency-bundling.js +0 -137
  467. package/src/route-renderer/page-loading/page-module-loader.d.ts +0 -90
  468. package/src/route-renderer/page-loading/page-module-loader.js +0 -127
  469. package/src/route-renderer/route-renderer.d.ts +0 -69
  470. package/src/route-renderer/route-renderer.js +0 -80
  471. package/src/router/client/link-intent.js +0 -34
  472. package/src/router/client/link-intent.test.browser.d.ts +0 -1
  473. package/src/router/client/link-intent.test.browser.js +0 -43
  474. package/src/router/client/navigation-coordinator.d.ts +0 -169
  475. package/src/router/client/navigation-coordinator.js +0 -215
  476. package/src/router/server/route-registry.d.ts +0 -78
  477. package/src/router/server/route-registry.js +0 -262
  478. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +0 -3
  479. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +0 -56
  480. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +0 -103
  481. package/src/services/assets/asset-processing-service/asset-processing.service.js +0 -285
  482. package/src/services/assets/asset-processing-service/asset.factory.d.ts +0 -17
  483. package/src/services/assets/asset-processing-service/asset.factory.js +0 -82
  484. package/src/services/assets/asset-processing-service/assets.types.d.ts +0 -103
  485. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  486. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +0 -57
  487. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +0 -49
  488. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +0 -20
  489. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +0 -41
  490. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +0 -30
  491. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +0 -65
  492. package/src/services/assets/asset-processing-service/index.d.ts +0 -6
  493. package/src/services/assets/asset-processing-service/index.js +0 -6
  494. package/src/services/assets/asset-processing-service/page-package.d.ts +0 -6
  495. package/src/services/assets/asset-processing-service/page-package.js +0 -80
  496. package/src/services/assets/asset-processing-service/processor.interface.js +0 -6
  497. package/src/services/assets/asset-processing-service/processor.registry.d.ts +0 -8
  498. package/src/services/assets/asset-processing-service/processor.registry.js +0 -15
  499. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +0 -24
  500. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +0 -65
  501. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -22
  502. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +0 -136
  503. package/src/services/assets/asset-processing-service/processors/index.d.ts +0 -5
  504. package/src/services/assets/asset-processing-service/processors/index.js +0 -5
  505. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +0 -6
  506. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +0 -120
  507. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -9
  508. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +0 -97
  509. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -42
  510. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +0 -126
  511. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -8
  512. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -59
  513. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
  514. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -69
  515. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -18
  516. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +0 -45
  517. package/src/services/assets/browser-bundle.service.d.ts +0 -73
  518. package/src/services/assets/browser-bundle.service.js +0 -41
  519. package/src/services/cache/cache.types.d.ts +0 -107
  520. package/src/services/cache/cache.types.js +0 -0
  521. package/src/services/cache/index.d.ts +0 -7
  522. package/src/services/cache/index.js +0 -7
  523. package/src/services/cache/memory-cache-store.d.ts +0 -42
  524. package/src/services/cache/memory-cache-store.js +0 -98
  525. package/src/services/cache/page-cache-service.d.ts +0 -70
  526. package/src/services/cache/page-cache-service.js +0 -152
  527. package/src/services/cache/page-request-cache-coordinator.service.d.ts +0 -75
  528. package/src/services/cache/page-request-cache-coordinator.service.js +0 -109
  529. package/src/services/html/html-rewriter-provider.service.d.ts +0 -40
  530. package/src/services/html/html-rewriter-provider.service.js +0 -68
  531. package/src/services/html/html-transformer.service.d.ts +0 -96
  532. package/src/services/html/html-transformer.service.js +0 -287
  533. package/src/services/invalidation/development-invalidation.service.d.ts +0 -74
  534. package/src/services/invalidation/development-invalidation.service.js +0 -190
  535. package/src/services/module-loading/app-module-loader.service.d.ts +0 -7
  536. package/src/services/module-loading/app-module-loader.service.js +0 -0
  537. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +0 -24
  538. package/src/services/module-loading/app-server-module-transpiler.service.js +0 -151
  539. package/src/services/module-loading/host-module-loader-registry.d.ts +0 -4
  540. package/src/services/module-loading/host-module-loader-registry.js +0 -15
  541. package/src/services/module-loading/module-loading-types.js +0 -0
  542. package/src/services/module-loading/node-bootstrap-plugin.d.ts +0 -38
  543. package/src/services/module-loading/node-bootstrap-plugin.js +0 -215
  544. package/src/services/module-loading/page-module-import.service.d.ts +0 -95
  545. package/src/services/module-loading/page-module-import.service.js +0 -191
  546. package/src/services/module-loading/server-module-transpiler.service.d.ts +0 -63
  547. package/src/services/module-loading/server-module-transpiler.service.js +0 -64
  548. package/src/services/module-loading/source-module-support.d.ts +0 -5
  549. package/src/services/module-loading/source-module-support.js +0 -8
  550. package/src/services/runtime-state/dev-graph.service.d.ts +0 -118
  551. package/src/services/runtime-state/dev-graph.service.js +0 -162
  552. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +0 -41
  553. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +0 -85
  554. package/src/services/runtime-state/server-invalidation-state.service.d.ts +0 -26
  555. package/src/services/runtime-state/server-invalidation-state.service.js +0 -35
  556. package/src/services/validation/schema-validation-service.d.ts +0 -122
  557. package/src/services/validation/schema-validation-service.js +0 -101
  558. package/src/services/validation/standard-schema.types.js +0 -0
  559. package/src/static-site-generator/static-site-generator.d.ts +0 -104
  560. package/src/static-site-generator/static-site-generator.js +0 -316
  561. package/src/types/internal-types.d.ts +0 -232
  562. package/src/types/internal-types.js +0 -0
  563. package/src/types/public-types.d.ts +0 -1307
  564. package/src/types/public-types.js +0 -0
  565. package/src/utils/deep-merge.d.ts +0 -14
  566. package/src/utils/deep-merge.js +0 -32
  567. package/src/utils/hash.d.ts +0 -1
  568. package/src/utils/hash.js +0 -7
  569. package/src/utils/html-escaping.d.ts +0 -7
  570. package/src/utils/html-escaping.js +0 -6
  571. package/src/utils/html.js +0 -4
  572. package/src/utils/invariant.d.ts +0 -5
  573. package/src/utils/invariant.js +0 -11
  574. package/src/utils/locals-utils.d.ts +0 -15
  575. package/src/utils/locals-utils.js +0 -24
  576. package/src/utils/parse-cli-args.d.ts +0 -27
  577. package/src/utils/parse-cli-args.js +0 -62
  578. package/src/utils/path-utils.module.d.ts +0 -5
  579. package/src/utils/path-utils.module.js +0 -14
  580. package/src/utils/resolve-work-dir.d.ts +0 -11
  581. package/src/utils/resolve-work-dir.js +0 -31
  582. package/src/utils/runtime.d.ts +0 -11
  583. package/src/utils/runtime.js +0 -40
  584. package/src/utils/server-utils.module.d.ts +0 -19
  585. package/src/utils/server-utils.module.js +0 -56
  586. package/src/watchers/project-watcher.d.ts +0 -136
  587. package/src/watchers/project-watcher.js +0 -275
  588. package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
  589. package/src/watchers/project-watcher.test-helpers.js +0 -52
  590. /package/src/utils/{html.d.ts → html.ts} +0 -0
@@ -0,0 +1,110 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import {
3
+ type DeferredTemplateSerializer,
4
+ serializeTemplateShape,
5
+ type SerializableTemplateShape,
6
+ } from './template-serialization.ts';
7
+
8
+ type TestTemplateShape = SerializableTemplateShape & {
9
+ __testTemplateType: 'deferred-template';
10
+ };
11
+
12
+ function createTestTemplate(strings: readonly string[], values: readonly unknown[]): TestTemplateShape {
13
+ return {
14
+ __testTemplateType: 'deferred-template',
15
+ strings,
16
+ values,
17
+ };
18
+ }
19
+
20
+ const testDeferredTemplateSerializer: DeferredTemplateSerializer<TestTemplateShape> = {
21
+ matches(value: unknown): value is TestTemplateShape {
22
+ return (
23
+ typeof value === 'object' &&
24
+ value !== null &&
25
+ (value as { __testTemplateType?: unknown }).__testTemplateType === 'deferred-template' &&
26
+ Array.isArray((value as { strings?: unknown }).strings) &&
27
+ ((value as { values?: unknown }).values === undefined ||
28
+ Array.isArray((value as { values?: unknown }).values))
29
+ );
30
+ },
31
+ serialize(template: TestTemplateShape, serializeValue: (value: unknown) => string | undefined) {
32
+ return serializeTemplateShape(template, serializeValue);
33
+ },
34
+ };
35
+
36
+ function serializeTestDeferredTemplateValue(
37
+ value: unknown,
38
+ serializeValue: (value: unknown) => string | undefined,
39
+ ): string | undefined {
40
+ if (!testDeferredTemplateSerializer.matches(value)) {
41
+ return undefined;
42
+ }
43
+
44
+ return testDeferredTemplateSerializer.serialize(value, serializeValue);
45
+ }
46
+
47
+ describe('serializeTemplateLike', () => {
48
+ test('preserves quoted attribute values for multi-token class attributes', () => {
49
+ const html = serializeTemplateShape(
50
+ createTestTemplate(['<div class=', '>', '</div>'], ['grid gap-4 lg:grid-cols-2 xl:grid-cols-4', 'Content']),
51
+ (value) => (value == null ? '' : String(value)),
52
+ );
53
+
54
+ expect(html).toBe('<div class="grid gap-4 lg:grid-cols-2 xl:grid-cols-4">Content</div>');
55
+ });
56
+
57
+ test('omits falsey boolean attributes and preserves truthy boolean attributes', () => {
58
+ const truthyHtml = serializeTemplateShape(
59
+ createTestTemplate(['<button ?disabled=', '>x</button>'], ['yes']),
60
+ (value) => (value == null ? '' : String(value)),
61
+ );
62
+ const falseyHtml = serializeTemplateShape(
63
+ createTestTemplate(['<button ?disabled=', '>x</button>'], ['']),
64
+ (value) => (value == null ? '' : String(value)),
65
+ );
66
+
67
+ expect(truthyHtml).toBe('<button disabled>x</button>');
68
+ expect(falseyHtml).toBe('<button>x</button>');
69
+ });
70
+
71
+ test('skips event and prop bindings in SSR output', () => {
72
+ const html = serializeTemplateShape(
73
+ createTestTemplate(['<button @click=', ' .value=', '>x</button>'], ['handler', '1']),
74
+ (value) => (value == null ? '' : String(value)),
75
+ );
76
+
77
+ expect(html).toBe('<button>x</button>');
78
+ });
79
+
80
+ test('escapes attribute values while preserving child interpolation', () => {
81
+ const html = serializeTemplateShape(
82
+ createTestTemplate(['<div title=', '>', '</div>'], ['a "quote" & <tag>', '<span>child</span>']),
83
+ (value) => (value == null ? '' : String(value)),
84
+ );
85
+
86
+ expect(html).toBe('<div title="a &quot;quote&quot; &amp; &lt;tag&gt;"><span>child</span></div>');
87
+ });
88
+
89
+ test('does not serialize unmatched template-like values', () => {
90
+ expect(
91
+ serializeTestDeferredTemplateValue(
92
+ {
93
+ strings: ['<div>', '</div>'],
94
+ values: ['content'],
95
+ _$litType$: 1,
96
+ },
97
+ (value) => (value == null ? '' : String(value)),
98
+ ),
99
+ ).toBeUndefined();
100
+ });
101
+
102
+ test('serializes locally provided template serializers without ambient registration', () => {
103
+ expect(
104
+ serializeTestDeferredTemplateValue(
105
+ createTestTemplate(['<div class=', '>', '</div>'], ['shared gap-4', 'content']),
106
+ (value) => (value == null ? '' : String(value)),
107
+ ),
108
+ ).toBe('<div class="shared gap-4">content</div>');
109
+ });
110
+ });
@@ -0,0 +1,117 @@
1
+ import { escapeHtmlAttribute } from '../../utils/html-escaping.ts';
2
+
3
+ /**
4
+ * Minimal template-result shape that core can serialize generically.
5
+ *
6
+ * @remarks
7
+ * Core intentionally models only the transport shape used during deferred
8
+ * cross-integration child passing: alternating static string segments plus
9
+ * interpolated runtime values. Concrete runtime markers that identify a given
10
+ * framework's template payload must stay outside core and be registered by the
11
+ * owning integration package.
12
+ */
13
+ export type SerializableTemplateShape = {
14
+ strings: readonly string[];
15
+ values?: readonly unknown[];
16
+ };
17
+
18
+ /**
19
+ * Parsed attribute metadata for one template string segment.
20
+ *
21
+ * `serializeTemplateShape()` uses this to decide whether the next interpolated
22
+ * value should be emitted as raw HTML content, a quoted attribute value, a
23
+ * boolean attribute, or omitted entirely for client-only bindings.
24
+ */
25
+ type SerializableTemplateAttribute = {
26
+ leading: string;
27
+ name: string;
28
+ prefix: string;
29
+ whitespace: string;
30
+ };
31
+
32
+ /**
33
+ * Integration-owned adapter that teaches core how to serialize one deferred
34
+ * template payload shape.
35
+ *
36
+ * @remarks
37
+ * The separation here is intentional: core owns the HTML serialization logic,
38
+ * but integrations own runtime-shape detection. That keeps package-specific
39
+ * markers such as framework template sentinels out of core while still letting
40
+ * deferred children round-trip through mixed renderer boundaries.
41
+ */
42
+ export type DeferredTemplateSerializer<TTemplate extends SerializableTemplateShape = SerializableTemplateShape> = {
43
+ matches(value: unknown): value is TTemplate;
44
+ serialize(template: TTemplate, serializeValue: (value: unknown) => string | undefined): string;
45
+ };
46
+
47
+ const ATTRIBUTE_TAIL_PATTERN = /(\s+)([@.?!]?)([^\s"'<>/=`@.?!]+)=$/;
48
+
49
+ /**
50
+ * Detects whether the current string segment ends in an HTML attribute binding.
51
+ *
52
+ * The parser is intentionally small: it only recognizes the transport shape
53
+ * Ecopages needs during deferred mixed-integration rendering, not a full HTML
54
+ * grammar.
55
+ */
56
+ function getSerializableTemplateAttribute(stringPart: string): SerializableTemplateAttribute | undefined {
57
+ const match = ATTRIBUTE_TAIL_PATTERN.exec(stringPart);
58
+ if (!match) return undefined;
59
+
60
+ return {
61
+ leading: stringPart.slice(0, match.index),
62
+ whitespace: match[1],
63
+ prefix: match[2],
64
+ name: match[3],
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Serializes a generic template shape into HTML.
70
+ *
71
+ * @remarks
72
+ * This handles only HTML reconstruction semantics: quoted attribute values,
73
+ * boolean attributes, and omission of client-only event or property bindings.
74
+ * It does not decide whether an arbitrary value belongs to a framework-specific
75
+ * template runtime; integrations must make that decision before delegating here.
76
+ */
77
+ export function serializeTemplateShape(
78
+ template: SerializableTemplateShape,
79
+ serializeValue: (value: unknown) => string | undefined,
80
+ ): string {
81
+ const values = template.values ?? [];
82
+ let html = '';
83
+
84
+ for (let index = 0; index < values.length; index += 1) {
85
+ const stringPart = template.strings[index] ?? '';
86
+ const serializedValue = serializeValue(values[index]);
87
+ const attribute = getSerializableTemplateAttribute(stringPart);
88
+
89
+ if (!attribute) {
90
+ html += stringPart;
91
+ html += serializedValue ?? '';
92
+ continue;
93
+ }
94
+
95
+ html += attribute.leading;
96
+
97
+ if (attribute.prefix === '@' || attribute.prefix === '!' || attribute.prefix === '.') {
98
+ continue;
99
+ }
100
+
101
+ if (attribute.prefix === '?') {
102
+ if (serializedValue) {
103
+ html += `${attribute.whitespace}${attribute.name}`;
104
+ }
105
+ continue;
106
+ }
107
+
108
+ if (serializedValue === undefined) {
109
+ continue;
110
+ }
111
+
112
+ html += `${attribute.whitespace}${attribute.name}="${escapeHtmlAttribute(serializedValue)}"`;
113
+ }
114
+
115
+ html += template.strings[values.length] ?? '';
116
+ return html;
117
+ }
@@ -0,0 +1,202 @@
1
+ import path from 'node:path';
2
+ import type { DependencyLazyTrigger, EcoComponent } from '../../types/public-types.ts';
3
+ import type { AssetDefinition } from '../../services/assets/asset-processing-service/index.ts';
4
+ import { AssetFactory } from '../../services/assets/asset-processing-service/index.ts';
5
+ import { extractEcopagesVirtualImports } from './ecopages-virtual-imports.ts';
6
+ import { collectDeclaredAssetEntries } from './declared-asset-collection.ts';
7
+ import { getLazyTriggerKey } from './lazy-trigger-planning.ts';
8
+ import { collectLazyScriptEntries, type LazyGroup } from './lazy-entry-collection.ts';
9
+ import {
10
+ createModuleScriptName,
11
+ createNamedImportModuleSource,
12
+ createNamespaceImportModuleSource,
13
+ } from './module-declaration-scripts.ts';
14
+ import { collectModuleDeclarations } from './module-declaration-aggregation.ts';
15
+
16
+ const MODULE_SCRIPT_ATTRIBUTES = {
17
+ type: 'module',
18
+ defer: '',
19
+ } as const;
20
+
21
+ function createModuleScriptAttributes(attributes?: Record<string, string>): Record<string, string> {
22
+ return {
23
+ ...MODULE_SCRIPT_ATTRIBUTES,
24
+ ...attributes,
25
+ };
26
+ }
27
+
28
+ function pushUniqueDependency(
29
+ keys: Set<string>,
30
+ key: string,
31
+ dependencies: AssetDefinition[],
32
+ dependency: AssetDefinition,
33
+ ): boolean {
34
+ if (keys.has(key)) {
35
+ return false;
36
+ }
37
+
38
+ keys.add(key);
39
+ dependencies.push(dependency);
40
+ return true;
41
+ }
42
+
43
+ function resolveDependencyPath(componentDir: string, pathUrl: string): string {
44
+ return path.join(componentDir, pathUrl);
45
+ }
46
+
47
+ /**
48
+ * Aggregated dependency output for one dependency-collection pass.
49
+ */
50
+ export type CollectedComponentDependencies = {
51
+ /**
52
+ * Flat asset declarations ready for downstream processing.
53
+ */
54
+ dependencies: AssetDefinition[];
55
+ /**
56
+ * Lazy script groups keyed by component config and trigger key.
57
+ */
58
+ lazyScriptsByConfig: Map<NonNullable<EcoComponent['config']>, Map<string, LazyGroup>>;
59
+ };
60
+
61
+ type CollectComponentDependenciesOptions = {
62
+ components: Array<EcoComponent | Partial<EcoComponent> | undefined | null>;
63
+ integrationName: string;
64
+ resolveLazyScripts: (componentDir: string, scripts: string[]) => string;
65
+ createEcopagesJsxLazyEntryName: (integrationName: string, key: string) => string;
66
+ isEcopagesJsxIntegration: (integrationName: string) => boolean;
67
+ errors: {
68
+ invalidStylesheetEntry: string;
69
+ invalidScriptEntry: string;
70
+ lazyScriptMissingSrc: string;
71
+ };
72
+ };
73
+
74
+ /**
75
+ * Walks component dependency trees and collects declared assets, module declarations,
76
+ * and lazy-script group metadata in one pass.
77
+ *
78
+ * The returned structures intentionally preserve both the flat asset list used by
79
+ * asset processing and the grouped lazy-trigger data used later during render output.
80
+ */
81
+ export function collectComponentDependencies(
82
+ options: CollectComponentDependenciesOptions,
83
+ ): CollectedComponentDependencies {
84
+ const {
85
+ components,
86
+ integrationName,
87
+ resolveLazyScripts,
88
+ createEcopagesJsxLazyEntryName,
89
+ isEcopagesJsxIntegration,
90
+ errors,
91
+ } = options;
92
+ const dependencies: AssetDefinition[] = [];
93
+ const lazyScriptsByConfig = new Map<NonNullable<EcoComponent['config']>, Map<string, LazyGroup>>();
94
+ const lazyDependencyKeys = new Set<string>();
95
+
96
+ for (const component of components) {
97
+ if (!component) continue;
98
+
99
+ const componentFile = component.config?.__eco?.file;
100
+ if (!componentFile) continue;
101
+
102
+ const stylesheetDependencyKeys = new Set<string>();
103
+ const scriptDependencyKeys = new Set<string>();
104
+ const modulesMap = new Map<string, Set<string> | null>();
105
+
106
+ /**
107
+ * Recursively visits one component config and its declared child dependencies.
108
+ */
109
+ const collect = (config: EcoComponent['config']) => {
110
+ if (!config) return;
111
+
112
+ const file = config.__eco?.file;
113
+ if (!file) return;
114
+ const dir = path.dirname(file);
115
+ const dependenciesConfig = config.dependencies;
116
+
117
+ const registerLazyScript = ({
118
+ lazy,
119
+ lazyKey,
120
+ fallbackUrl,
121
+ }: {
122
+ lazy: DependencyLazyTrigger;
123
+ lazyKey: string;
124
+ fallbackUrl?: string;
125
+ }) => {
126
+ let grouped = lazyScriptsByConfig.get(config);
127
+ if (!grouped) {
128
+ grouped = new Map<string, LazyGroup>();
129
+ lazyScriptsByConfig.set(config, grouped);
130
+ }
131
+
132
+ const triggerKey = getLazyTriggerKey(lazy);
133
+ const existing = grouped.get(triggerKey) ?? { lazy, scripts: [] };
134
+ existing.scripts.push({ lazyKey, fallbackUrl });
135
+ grouped.set(triggerKey, existing);
136
+ };
137
+
138
+ collectDeclaredAssetEntries({
139
+ stylesheetEntries: dependenciesConfig?.stylesheets ?? [],
140
+ scriptEntries: dependenciesConfig?.scripts ?? [],
141
+ componentDir: dir,
142
+ dependencies,
143
+ stylesheetDependencyKeys,
144
+ scriptDependencyKeys,
145
+ resolveDependencyPath,
146
+ createModuleScriptAttributes,
147
+ pushUniqueDependency,
148
+ getInvalidStylesheetEntryMessage: () => errors.invalidStylesheetEntry,
149
+ getInvalidScriptEntryMessage: () => errors.invalidScriptEntry,
150
+ });
151
+
152
+ collectModuleDeclarations(modulesMap, dependenciesConfig?.modules, extractEcopagesVirtualImports(file));
153
+
154
+ collectLazyScriptEntries({
155
+ scriptEntries: dependenciesConfig?.scripts ?? [],
156
+ componentFile: file,
157
+ componentDir: dir,
158
+ integrationName,
159
+ dependencies,
160
+ lazyDependencyKeys,
161
+ registerLazyScript,
162
+ resolveDependencyPath,
163
+ resolveLazyScripts,
164
+ createModuleScriptAttributes,
165
+ createEcopagesJsxLazyEntryName,
166
+ pushUniqueDependency,
167
+ getLazyScriptMissingSrcMessage: () => errors.lazyScriptMissingSrc,
168
+ isEcopagesJsxIntegration,
169
+ });
170
+
171
+ if (dependenciesConfig?.components) {
172
+ for (const nestedComponent of dependenciesConfig.components) {
173
+ if (nestedComponent?.config) {
174
+ collect(nestedComponent.config);
175
+ }
176
+ }
177
+ }
178
+ };
179
+
180
+ collect(component.config);
181
+
182
+ dependencies.push(
183
+ ...Array.from(modulesMap.entries()).map(([from, importsSet]) => {
184
+ const imports = importsSet ? Array.from(importsSet) : undefined;
185
+ return AssetFactory.createContentScript({
186
+ position: 'head',
187
+ name: createModuleScriptName(from, imports),
188
+ content:
189
+ imports && imports.length > 0
190
+ ? createNamedImportModuleSource(from, imports)
191
+ : createNamespaceImportModuleSource(from),
192
+ attributes: createModuleScriptAttributes(),
193
+ });
194
+ }),
195
+ );
196
+ }
197
+
198
+ return {
199
+ dependencies,
200
+ lazyScriptsByConfig,
201
+ };
202
+ }
@@ -0,0 +1,153 @@
1
+ import type { EcoComponentScriptEntry, EcoComponentStylesheetEntry } from '../../types/public-types.ts';
2
+ import type { AssetDefinition } from '../../services/assets/asset-processing-service/index.ts';
3
+ import { AssetFactory } from '../../services/assets/asset-processing-service/index.ts';
4
+
5
+ type CollectDeclaredAssetEntriesOptions = {
6
+ stylesheetEntries: Array<string | EcoComponentStylesheetEntry>;
7
+ scriptEntries: Array<string | EcoComponentScriptEntry>;
8
+ componentDir: string;
9
+ dependencies: AssetDefinition[];
10
+ stylesheetDependencyKeys: Set<string>;
11
+ scriptDependencyKeys: Set<string>;
12
+ resolveDependencyPath: (componentDir: string, pathUrl: string) => string;
13
+ createModuleScriptAttributes: (attributes?: Record<string, string>) => Record<string, string>;
14
+ pushUniqueDependency: (
15
+ keys: Set<string>,
16
+ key: string,
17
+ dependencies: AssetDefinition[],
18
+ dependency: AssetDefinition,
19
+ ) => boolean;
20
+ getInvalidStylesheetEntryMessage: () => string;
21
+ getInvalidScriptEntryMessage: () => string;
22
+ };
23
+
24
+ function isDependencyEntryObject(
25
+ entry: string | EcoComponentScriptEntry | EcoComponentStylesheetEntry,
26
+ ): entry is EcoComponentScriptEntry | EcoComponentStylesheetEntry {
27
+ return typeof entry === 'object' && entry !== null;
28
+ }
29
+
30
+ function getDependencyEntrySrc(
31
+ entry: string | EcoComponentScriptEntry | EcoComponentStylesheetEntry,
32
+ ): string | undefined {
33
+ return isDependencyEntryObject(entry) ? entry.src : entry;
34
+ }
35
+
36
+ function getDependencyEntryContent(
37
+ entry: string | EcoComponentScriptEntry | EcoComponentStylesheetEntry,
38
+ ): string | undefined {
39
+ return isDependencyEntryObject(entry) ? entry.content : undefined;
40
+ }
41
+
42
+ function getDependencyEntryAttributes(
43
+ entry: string | EcoComponentScriptEntry | EcoComponentStylesheetEntry,
44
+ ): Record<string, string> | undefined {
45
+ return isDependencyEntryObject(entry) ? entry.attributes : undefined;
46
+ }
47
+
48
+ /**
49
+ * Normalizes non-lazy stylesheet and script declarations into asset definitions.
50
+ *
51
+ * Duplicate declarations are filtered through the provided key sets so callers can
52
+ * compose this helper into larger recursive collection passes without re-emitting
53
+ * the same asset multiple times.
54
+ */
55
+ export function collectDeclaredAssetEntries(options: CollectDeclaredAssetEntriesOptions): void {
56
+ const {
57
+ stylesheetEntries,
58
+ scriptEntries,
59
+ componentDir,
60
+ dependencies,
61
+ stylesheetDependencyKeys,
62
+ scriptDependencyKeys,
63
+ resolveDependencyPath,
64
+ createModuleScriptAttributes,
65
+ pushUniqueDependency,
66
+ getInvalidStylesheetEntryMessage,
67
+ getInvalidScriptEntryMessage,
68
+ } = options;
69
+
70
+ for (const style of stylesheetEntries) {
71
+ const content = getDependencyEntryContent(style);
72
+ const src = getDependencyEntrySrc(style);
73
+ const attributes = getDependencyEntryAttributes(style);
74
+
75
+ if (content) {
76
+ const depKey = `style:content:${content}:${JSON.stringify(attributes ?? {})}`;
77
+ pushUniqueDependency(
78
+ stylesheetDependencyKeys,
79
+ depKey,
80
+ dependencies,
81
+ AssetFactory.createContentStylesheet({
82
+ content,
83
+ position: 'head',
84
+ attributes,
85
+ }),
86
+ );
87
+ continue;
88
+ }
89
+
90
+ if (!src) {
91
+ throw new Error(getInvalidStylesheetEntryMessage());
92
+ }
93
+
94
+ const resolvedPath = resolveDependencyPath(componentDir, src);
95
+ const depKey = `style:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
96
+ pushUniqueDependency(
97
+ stylesheetDependencyKeys,
98
+ depKey,
99
+ dependencies,
100
+ AssetFactory.createFileStylesheet({
101
+ filepath: resolvedPath,
102
+ position: 'head',
103
+ attributes: {
104
+ rel: 'stylesheet',
105
+ ...attributes,
106
+ },
107
+ }),
108
+ );
109
+ }
110
+
111
+ for (const script of scriptEntries) {
112
+ if (isDependencyEntryObject(script) && 'lazy' in script && script.lazy) {
113
+ continue;
114
+ }
115
+
116
+ const content = getDependencyEntryContent(script);
117
+ const src = getDependencyEntrySrc(script);
118
+ const attributes = getDependencyEntryAttributes(script);
119
+
120
+ if (content) {
121
+ const depKey = `script:content:${content}:${JSON.stringify(attributes ?? {})}`;
122
+ pushUniqueDependency(
123
+ scriptDependencyKeys,
124
+ depKey,
125
+ dependencies,
126
+ AssetFactory.createInlineContentScript({
127
+ position: 'head',
128
+ content,
129
+ bundle: false,
130
+ attributes,
131
+ }),
132
+ );
133
+ continue;
134
+ }
135
+
136
+ if (!src) {
137
+ throw new Error(getInvalidScriptEntryMessage());
138
+ }
139
+
140
+ const resolvedPath = resolveDependencyPath(componentDir, src);
141
+ const depKey = `script:file:${resolvedPath}:${JSON.stringify(attributes ?? {})}`;
142
+ pushUniqueDependency(
143
+ scriptDependencyKeys,
144
+ depKey,
145
+ dependencies,
146
+ AssetFactory.createFileScript({
147
+ filepath: resolvedPath,
148
+ position: 'head',
149
+ attributes: createModuleScriptAttributes(attributes),
150
+ }),
151
+ );
152
+ }
153
+ }