@ecopages/core 0.2.0-alpha.27 → 0.2.0-alpha.28

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 (546) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/package.json +162 -72
  3. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  4. package/src/adapters/abstract/application-adapter.js +121 -0
  5. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  6. package/src/adapters/abstract/router-adapter.js +5 -0
  7. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  8. package/src/adapters/abstract/server-adapter.js +15 -0
  9. package/src/adapters/bun/client-bridge.d.ts +34 -0
  10. package/src/adapters/bun/client-bridge.js +48 -0
  11. package/src/adapters/bun/create-app.d.ts +53 -0
  12. package/src/adapters/bun/create-app.js +153 -0
  13. package/src/adapters/bun/hmr-manager.d.ts +131 -0
  14. package/src/adapters/bun/hmr-manager.js +312 -0
  15. package/src/adapters/bun/index.d.ts +2 -0
  16. package/src/adapters/bun/index.js +8 -0
  17. package/src/adapters/bun/server-adapter.d.ts +155 -0
  18. package/src/adapters/bun/server-adapter.js +393 -0
  19. package/src/adapters/bun/server-lifecycle.d.ts +63 -0
  20. package/src/adapters/bun/server-lifecycle.js +92 -0
  21. package/src/adapters/create-app.d.ts +20 -0
  22. package/src/adapters/create-app.js +66 -0
  23. package/src/adapters/index.d.ts +2 -0
  24. package/src/adapters/index.js +8 -0
  25. package/src/adapters/node/create-app.d.ts +18 -0
  26. package/src/adapters/node/create-app.js +149 -0
  27. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  28. package/src/adapters/node/node-client-bridge.js +66 -0
  29. package/src/adapters/node/node-hmr-manager.d.ts +121 -0
  30. package/src/adapters/node/node-hmr-manager.js +290 -0
  31. package/src/adapters/node/server-adapter.d.ts +162 -0
  32. package/src/adapters/node/server-adapter.js +368 -0
  33. package/src/adapters/node/static-content-server.d.ts +60 -0
  34. package/src/adapters/node/static-content-server.js +194 -0
  35. package/src/adapters/shared/api-response.d.ts +52 -0
  36. package/src/adapters/shared/api-response.js +96 -0
  37. package/src/adapters/shared/application-adapter.d.ts +18 -0
  38. package/src/adapters/shared/application-adapter.js +90 -0
  39. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  40. package/src/adapters/shared/define-api-handler.js +15 -0
  41. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  42. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  43. package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
  44. package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
  45. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
  46. package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
  47. package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
  48. package/src/adapters/shared/fs-server-response-factory.js +81 -0
  49. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  50. package/src/adapters/shared/fs-server-response-matcher.js +186 -0
  51. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  52. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  53. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  54. package/src/adapters/shared/hmr-html-response.js +32 -0
  55. package/src/adapters/shared/render-context.d.ts +15 -0
  56. package/src/adapters/shared/render-context.js +72 -0
  57. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  58. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  59. package/src/adapters/shared/server-adapter.d.ts +108 -0
  60. package/src/adapters/shared/server-adapter.js +429 -0
  61. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  62. package/src/adapters/shared/server-route-handler.js +111 -0
  63. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  64. package/src/adapters/shared/server-static-builder.js +100 -0
  65. package/src/build/build-adapter.d.ts +239 -0
  66. package/src/build/build-adapter.js +642 -0
  67. package/src/build/build-manifest.d.ts +27 -0
  68. package/src/build/build-manifest.js +30 -0
  69. package/src/build/build-types.d.ts +57 -0
  70. package/src/build/build-types.js +0 -0
  71. package/src/build/dev-build-coordinator.d.ts +72 -0
  72. package/src/build/dev-build-coordinator.js +154 -0
  73. package/src/build/esbuild-build-adapter.d.ts +78 -0
  74. package/src/build/esbuild-build-adapter.js +505 -0
  75. package/src/build/runtime-build-executor.d.ts +14 -0
  76. package/src/build/runtime-build-executor.js +22 -0
  77. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  78. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  79. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  80. package/src/build/runtime-specifier-aliases.js +95 -0
  81. package/src/config/config-builder.d.ts +252 -0
  82. package/src/config/config-builder.js +598 -0
  83. package/src/config/{constants.ts → constants.d.ts} +13 -22
  84. package/src/config/constants.js +25 -0
  85. package/src/dev/host-runtime.d.ts +10 -0
  86. package/src/dev/host-runtime.js +24 -0
  87. package/src/dev/sc-server.d.ts +30 -0
  88. package/src/dev/sc-server.js +111 -0
  89. package/src/eco/eco.browser.d.ts +2 -0
  90. package/src/eco/eco.browser.js +83 -0
  91. package/src/eco/eco.d.ts +9 -0
  92. package/src/eco/eco.js +85 -0
  93. package/src/eco/eco.types.d.ts +178 -0
  94. package/src/eco/eco.types.js +0 -0
  95. package/src/eco/eco.utils.d.ts +1 -0
  96. package/src/eco/eco.utils.js +10 -0
  97. package/src/eco/global-injector-map.d.ts +16 -0
  98. package/src/eco/global-injector-map.js +80 -0
  99. package/src/eco/lazy-injector-map.d.ts +8 -0
  100. package/src/eco/lazy-injector-map.js +70 -0
  101. package/src/eco/module-dependencies.d.ts +18 -0
  102. package/src/eco/module-dependencies.js +49 -0
  103. package/src/errors/http-error.d.ts +31 -0
  104. package/src/errors/http-error.js +50 -0
  105. package/src/errors/index.d.ts +3 -0
  106. package/src/errors/index.js +6 -0
  107. package/src/errors/locals-access-error.d.ts +4 -0
  108. package/src/errors/locals-access-error.js +9 -0
  109. package/src/global/app-logger.d.ts +2 -0
  110. package/src/global/app-logger.js +6 -0
  111. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  112. package/src/hmr/client/hmr-runtime.js +117 -0
  113. package/src/hmr/hmr-strategy.d.ts +162 -0
  114. package/src/hmr/hmr-strategy.js +44 -0
  115. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  116. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  117. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  118. package/src/hmr/hmr.test.e2e.js +43 -0
  119. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  120. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  121. package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
  122. package/src/hmr/strategies/js-hmr-strategy.js +178 -0
  123. package/src/index.browser.d.ts +3 -0
  124. package/src/index.browser.js +4 -0
  125. package/src/index.d.ts +6 -0
  126. package/src/index.js +21 -0
  127. package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
  128. package/src/integrations/ghtml/ghtml-renderer.js +57 -0
  129. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  130. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  132. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  133. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  134. package/src/plugins/alias-resolver-plugin.js +53 -0
  135. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  136. package/src/plugins/eco-component-meta-plugin.js +162 -0
  137. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  138. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  139. package/src/plugins/integration-plugin.d.ts +215 -0
  140. package/src/plugins/integration-plugin.js +189 -0
  141. package/src/plugins/processor.d.ts +97 -0
  142. package/src/plugins/processor.js +141 -0
  143. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  144. package/src/plugins/runtime-capability.js +0 -0
  145. package/src/plugins/source-transform.d.ts +46 -0
  146. package/src/plugins/source-transform.js +71 -0
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +909 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  189. package/src/route-renderer/route-renderer.d.ts +69 -0
  190. package/src/route-renderer/route-renderer.js +80 -0
  191. package/src/router/client/link-intent.js +34 -0
  192. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  193. package/src/router/client/link-intent.test.browser.js +43 -0
  194. package/src/router/client/navigation-coordinator.d.ts +169 -0
  195. package/src/router/client/navigation-coordinator.js +215 -0
  196. package/src/router/server/route-registry.d.ts +78 -0
  197. package/src/router/server/route-registry.js +262 -0
  198. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  199. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  200. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  201. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  202. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  203. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  204. package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
  205. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  206. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  207. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  208. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  210. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  211. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  212. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  213. package/src/services/assets/asset-processing-service/index.js +6 -0
  214. package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
  215. package/src/services/assets/asset-processing-service/page-package.js +74 -0
  216. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  217. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  218. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  219. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  220. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  221. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  222. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  224. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  225. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  226. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  227. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  228. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  229. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
  230. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +79 -0
  232. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  233. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
  236. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  238. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  239. package/src/services/assets/browser-bundle.service.js +41 -0
  240. package/src/services/cache/cache.types.d.ts +107 -0
  241. package/src/services/cache/cache.types.js +0 -0
  242. package/src/services/cache/index.d.ts +7 -0
  243. package/src/services/cache/index.js +7 -0
  244. package/src/services/cache/memory-cache-store.d.ts +42 -0
  245. package/src/services/cache/memory-cache-store.js +98 -0
  246. package/src/services/cache/page-cache-service.d.ts +70 -0
  247. package/src/services/cache/page-cache-service.js +152 -0
  248. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  249. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  250. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  251. package/src/services/html/html-rewriter-provider.service.js +68 -0
  252. package/src/services/html/html-transformer.service.d.ts +87 -0
  253. package/src/services/html/html-transformer.service.js +216 -0
  254. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  255. package/src/services/invalidation/development-invalidation.service.js +190 -0
  256. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  257. package/src/services/module-loading/app-module-loader.service.js +0 -0
  258. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  259. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  260. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  261. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  262. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  263. package/src/services/module-loading/module-loading-types.js +0 -0
  264. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  265. package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
  266. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  267. package/src/services/module-loading/page-module-import.service.js +170 -0
  268. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  269. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  270. package/src/services/module-loading/source-module-support.d.ts +5 -0
  271. package/src/services/module-loading/source-module-support.js +8 -0
  272. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  273. package/src/services/runtime-state/dev-graph.service.js +162 -0
  274. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  275. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  276. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  277. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  278. package/src/services/validation/schema-validation-service.d.ts +122 -0
  279. package/src/services/validation/schema-validation-service.js +101 -0
  280. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  281. package/src/services/validation/standard-schema.types.js +0 -0
  282. package/src/static-site-generator/static-site-generator.d.ts +104 -0
  283. package/src/static-site-generator/static-site-generator.js +316 -0
  284. package/src/types/internal-types.d.ts +232 -0
  285. package/src/types/internal-types.js +0 -0
  286. package/src/types/public-types.d.ts +1267 -0
  287. package/src/types/public-types.js +0 -0
  288. package/src/utils/deep-merge.d.ts +14 -0
  289. package/src/utils/deep-merge.js +32 -0
  290. package/src/utils/hash.d.ts +1 -0
  291. package/src/utils/hash.js +7 -0
  292. package/src/utils/html-escaping.d.ts +7 -0
  293. package/src/utils/html-escaping.js +6 -0
  294. package/src/utils/html.js +4 -0
  295. package/src/utils/invariant.d.ts +5 -0
  296. package/src/utils/invariant.js +11 -0
  297. package/src/utils/locals-utils.d.ts +15 -0
  298. package/src/utils/locals-utils.js +24 -0
  299. package/src/utils/parse-cli-args.d.ts +27 -0
  300. package/src/utils/parse-cli-args.js +62 -0
  301. package/src/utils/path-utils.module.d.ts +5 -0
  302. package/src/utils/path-utils.module.js +14 -0
  303. package/src/utils/resolve-work-dir.d.ts +11 -0
  304. package/src/utils/resolve-work-dir.js +31 -0
  305. package/src/utils/runtime.d.ts +11 -0
  306. package/src/utils/runtime.js +40 -0
  307. package/src/utils/server-utils.module.d.ts +19 -0
  308. package/src/utils/server-utils.module.js +56 -0
  309. package/src/watchers/project-watcher.d.ts +136 -0
  310. package/src/watchers/project-watcher.js +275 -0
  311. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  312. package/src/watchers/project-watcher.test-helpers.js +52 -0
  313. package/src/adapters/abstract/application-adapter.test.ts +0 -172
  314. package/src/adapters/abstract/application-adapter.ts +0 -379
  315. package/src/adapters/abstract/router-adapter.ts +0 -30
  316. package/src/adapters/abstract/server-adapter.ts +0 -79
  317. package/src/adapters/bun/client-bridge.ts +0 -62
  318. package/src/adapters/bun/create-app.ts +0 -232
  319. package/src/adapters/bun/hmr-manager.test.ts +0 -265
  320. package/src/adapters/bun/hmr-manager.ts +0 -383
  321. package/src/adapters/bun/index.ts +0 -2
  322. package/src/adapters/bun/server-adapter.ts +0 -526
  323. package/src/adapters/bun/server-lifecycle.ts +0 -124
  324. package/src/adapters/create-app.test.ts +0 -10
  325. package/src/adapters/create-app.ts +0 -91
  326. package/src/adapters/index.ts +0 -2
  327. package/src/adapters/node/create-app.test.ts +0 -53
  328. package/src/adapters/node/create-app.ts +0 -183
  329. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  330. package/src/adapters/node/node-client-bridge.ts +0 -79
  331. package/src/adapters/node/node-hmr-manager.test.ts +0 -320
  332. package/src/adapters/node/node-hmr-manager.ts +0 -355
  333. package/src/adapters/node/server-adapter.ts +0 -502
  334. package/src/adapters/node/static-content-server.test.ts +0 -60
  335. package/src/adapters/node/static-content-server.ts +0 -239
  336. package/src/adapters/shared/api-response.test.ts +0 -97
  337. package/src/adapters/shared/api-response.ts +0 -104
  338. package/src/adapters/shared/application-adapter.ts +0 -199
  339. package/src/adapters/shared/define-api-handler.ts +0 -66
  340. package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
  341. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  342. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
  343. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
  344. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
  345. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
  346. package/src/adapters/shared/fs-server-response-factory.ts +0 -96
  347. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
  348. package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
  349. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  350. package/src/adapters/shared/hmr-html-response.ts +0 -52
  351. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
  352. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
  353. package/src/adapters/shared/render-context.test.ts +0 -150
  354. package/src/adapters/shared/render-context.ts +0 -123
  355. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  356. package/src/adapters/shared/server-adapter.test.ts +0 -130
  357. package/src/adapters/shared/server-adapter.ts +0 -562
  358. package/src/adapters/shared/server-route-handler.test.ts +0 -111
  359. package/src/adapters/shared/server-route-handler.ts +0 -153
  360. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  361. package/src/adapters/shared/server-static-builder.ts +0 -170
  362. package/src/build/build-adapter-serialization.test.ts +0 -281
  363. package/src/build/build-adapter.test.ts +0 -1240
  364. package/src/build/build-adapter.ts +0 -1012
  365. package/src/build/build-manifest.ts +0 -54
  366. package/src/build/build-types.ts +0 -83
  367. package/src/build/dev-build-coordinator.ts +0 -220
  368. package/src/build/esbuild-build-adapter.ts +0 -660
  369. package/src/build/runtime-build-executor.test.ts +0 -81
  370. package/src/build/runtime-build-executor.ts +0 -40
  371. package/src/build/runtime-specifier-alias-plugin.test.ts +0 -67
  372. package/src/build/runtime-specifier-alias-plugin.ts +0 -62
  373. package/src/build/runtime-specifier-aliases.ts +0 -135
  374. package/src/config/config-builder.test.ts +0 -442
  375. package/src/config/config-builder.ts +0 -737
  376. package/src/config/config-builder.typecheck.test.ts +0 -96
  377. package/src/dev/host-runtime.ts +0 -34
  378. package/src/dev/sc-server.ts +0 -143
  379. package/src/eco/eco.browser.test.ts +0 -43
  380. package/src/eco/eco.browser.ts +0 -118
  381. package/src/eco/eco.test.ts +0 -654
  382. package/src/eco/eco.ts +0 -205
  383. package/src/eco/eco.types.ts +0 -221
  384. package/src/eco/eco.utils.test.ts +0 -219
  385. package/src/eco/eco.utils.ts +0 -5
  386. package/src/eco/global-injector-map.test.ts +0 -42
  387. package/src/eco/global-injector-map.ts +0 -112
  388. package/src/eco/lazy-injector-map.test.ts +0 -66
  389. package/src/eco/lazy-injector-map.ts +0 -120
  390. package/src/eco/module-dependencies.test.ts +0 -30
  391. package/src/eco/module-dependencies.ts +0 -75
  392. package/src/errors/http-error.test.ts +0 -134
  393. package/src/errors/http-error.ts +0 -72
  394. package/src/errors/index.ts +0 -3
  395. package/src/errors/locals-access-error.ts +0 -7
  396. package/src/global/app-logger.ts +0 -4
  397. package/src/global/utils.test.ts +0 -12
  398. 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
  399. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  400. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  401. package/src/hmr/client/hmr-runtime.ts +0 -162
  402. package/src/hmr/hmr-strategy.test.ts +0 -124
  403. package/src/hmr/hmr-strategy.ts +0 -177
  404. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  405. package/src/hmr/hmr.test.e2e.ts +0 -66
  406. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  407. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -334
  408. package/src/hmr/strategies/js-hmr-strategy.ts +0 -314
  409. package/src/index.browser.ts +0 -3
  410. package/src/index.ts +0 -15
  411. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  412. package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
  413. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  414. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  415. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  416. package/src/plugins/alias-resolver-plugin.ts +0 -63
  417. package/src/plugins/eco-component-meta-plugin.test.ts +0 -406
  418. package/src/plugins/eco-component-meta-plugin.ts +0 -494
  419. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  420. package/src/plugins/foreign-jsx-override-plugin.ts +0 -67
  421. package/src/plugins/integration-plugin.test.ts +0 -151
  422. package/src/plugins/integration-plugin.ts +0 -323
  423. package/src/plugins/processor.test.ts +0 -148
  424. package/src/plugins/processor.ts +0 -257
  425. package/src/plugins/source-transform.test.ts +0 -82
  426. package/src/plugins/source-transform.ts +0 -123
  427. package/src/route-renderer/orchestration/component-render-context.ts +0 -325
  428. package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
  429. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -383
  430. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2085
  431. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1244
  432. package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
  433. package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
  434. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -25
  435. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -324
  436. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -294
  437. package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
  438. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -644
  439. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -265
  440. package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -592
  441. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  442. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  443. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
  444. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
  445. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
  446. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
  447. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  448. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  449. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  450. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  451. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  452. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
  453. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  454. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  455. package/src/route-renderer/route-renderer.ts +0 -133
  456. package/src/router/client/link-intent.test.browser.ts +0 -51
  457. package/src/router/client/link-intent.ts +0 -92
  458. package/src/router/client/navigation-coordinator.test.ts +0 -237
  459. package/src/router/client/navigation-coordinator.ts +0 -453
  460. package/src/router/server/route-registry.test.ts +0 -176
  461. package/src/router/server/route-registry.ts +0 -382
  462. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  463. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
  464. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
  465. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  466. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  467. package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
  468. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  469. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -96
  470. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  471. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  472. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  473. package/src/services/assets/asset-processing-service/index.ts +0 -6
  474. package/src/services/assets/asset-processing-service/page-package.test.ts +0 -100
  475. package/src/services/assets/asset-processing-service/page-package.ts +0 -93
  476. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  477. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  478. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  479. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
  480. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  481. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -195
  482. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -137
  483. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  484. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
  485. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
  486. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -89
  487. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  488. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
  489. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
  490. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  491. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  492. package/src/services/assets/browser-bundle.service.ts +0 -109
  493. package/src/services/cache/cache.types.ts +0 -126
  494. package/src/services/cache/index.ts +0 -18
  495. package/src/services/cache/memory-cache-store.test.ts +0 -225
  496. package/src/services/cache/memory-cache-store.ts +0 -130
  497. package/src/services/cache/page-cache-service.test.ts +0 -175
  498. package/src/services/cache/page-cache-service.ts +0 -202
  499. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  500. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  501. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  502. package/src/services/html/html-rewriter-provider.service.ts +0 -104
  503. package/src/services/html/html-transformer.service.test.ts +0 -476
  504. package/src/services/html/html-transformer.service.ts +0 -275
  505. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  506. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  507. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  508. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -130
  509. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -141
  510. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  511. package/src/services/module-loading/node-bootstrap-plugin.test.ts +0 -335
  512. package/src/services/module-loading/node-bootstrap-plugin.ts +0 -311
  513. package/src/services/module-loading/page-module-import.service.test.ts +0 -504
  514. package/src/services/module-loading/page-module-import.service.ts +0 -251
  515. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -243
  516. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  517. package/src/services/module-loading/source-module-support.ts +0 -19
  518. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  519. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  520. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  521. package/src/services/validation/schema-validation-service.test.ts +0 -223
  522. package/src/services/validation/schema-validation-service.ts +0 -204
  523. package/src/static-site-generator/static-site-generator.test.ts +0 -408
  524. package/src/static-site-generator/static-site-generator.ts +0 -445
  525. package/src/types/internal-types.ts +0 -243
  526. package/src/types/public-types.ts +0 -1459
  527. package/src/utils/deep-merge.test.ts +0 -114
  528. package/src/utils/deep-merge.ts +0 -47
  529. package/src/utils/hash.ts +0 -5
  530. package/src/utils/html-escaping.ts +0 -9
  531. package/src/utils/invariant.test.ts +0 -22
  532. package/src/utils/invariant.ts +0 -15
  533. package/src/utils/locals-utils.ts +0 -37
  534. package/src/utils/parse-cli-args.test.ts +0 -69
  535. package/src/utils/parse-cli-args.ts +0 -105
  536. package/src/utils/path-utils.module.ts +0 -14
  537. package/src/utils/path-utils.test.ts +0 -15
  538. package/src/utils/resolve-work-dir.ts +0 -45
  539. package/src/utils/runtime.ts +0 -44
  540. package/src/utils/server-utils.module.ts +0 -67
  541. package/src/utils/server-utils.test.ts +0 -38
  542. package/src/watchers/project-watcher.integration.test.ts +0 -337
  543. package/src/watchers/project-watcher.test-helpers.ts +0 -42
  544. package/src/watchers/project-watcher.test.ts +0 -768
  545. package/src/watchers/project-watcher.ts +0 -357
  546. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -0,0 +1,70 @@
1
+ function normalizeScripts(scripts) {
2
+ return scripts.split(",").map((scriptPath) => scriptPath.trim()).filter(Boolean).map((scriptPath) => {
3
+ if (scriptPath.startsWith("/")) {
4
+ return scriptPath;
5
+ }
6
+ const normalizedRelativePath = scriptPath.replace(/^\/+/, "").replace(/^(\.\/)+/, "");
7
+ return `/${normalizedRelativePath}`;
8
+ });
9
+ }
10
+ function dedupeCsvValues(values) {
11
+ const seen = /* @__PURE__ */ new Set();
12
+ for (const value of values) {
13
+ for (const token of value.split(",").map((part) => part.trim()).filter(Boolean)) {
14
+ seen.add(token);
15
+ }
16
+ }
17
+ return Array.from(seen).join(",");
18
+ }
19
+ function buildInjectorMap(lazyGroups) {
20
+ const map = {};
21
+ for (const group of lazyGroups) {
22
+ const scripts = normalizeScripts(group.scripts);
23
+ const lazy = group.lazy;
24
+ if ("on:idle" in lazy) {
25
+ map["on:idle"] = {
26
+ scripts: [...map["on:idle"]?.scripts ?? [], ...scripts]
27
+ };
28
+ continue;
29
+ }
30
+ if ("on:interaction" in lazy) {
31
+ const currentValue = map["on:interaction"]?.value;
32
+ const nextValue = lazy["on:interaction"];
33
+ map["on:interaction"] = {
34
+ value: typeof currentValue === "string" ? dedupeCsvValues([currentValue, nextValue]) : nextValue,
35
+ scripts: [...map["on:interaction"]?.scripts ?? [], ...scripts]
36
+ };
37
+ continue;
38
+ }
39
+ if ("on:visible" in lazy) {
40
+ const currentValue = map["on:visible"]?.value;
41
+ const currentThreshold = typeof currentValue === "string" ? currentValue : void 0;
42
+ const nextValue = lazy["on:visible"];
43
+ map["on:visible"] = {
44
+ ...nextValue === true ? currentThreshold ? { value: currentThreshold } : {} : { value: String(nextValue) },
45
+ scripts: [...map["on:visible"]?.scripts ?? [], ...scripts]
46
+ };
47
+ continue;
48
+ }
49
+ throw new Error(
50
+ `Invalid lazy options: must specify on:idle, on:interaction, or on:visible. Received: ${JSON.stringify(lazy)}`
51
+ );
52
+ }
53
+ for (const key of Object.keys(map)) {
54
+ const scripts = map[key]?.scripts;
55
+ if (scripts) {
56
+ map[key] = {
57
+ ...map[key],
58
+ scripts: Array.from(new Set(scripts))
59
+ };
60
+ }
61
+ }
62
+ return map;
63
+ }
64
+ function buildInjectorMapScript(lazyGroups) {
65
+ const map = buildInjectorMap(lazyGroups);
66
+ return JSON.stringify(map).replace(/<\/script/gi, "<\\/script");
67
+ }
68
+ export {
69
+ buildInjectorMapScript
70
+ };
@@ -0,0 +1,18 @@
1
+ export type ModuleDependencyDeclaration = {
2
+ from: string;
3
+ imports?: string[];
4
+ };
5
+ /**
6
+ * Parses a module grammar declaration into normalized object form.
7
+ *
8
+ * Supported input examples:
9
+ * - `react-aria-components`
10
+ * - `react-aria-components{Table,Select}`
11
+ */
12
+ export declare function parseModuleDeclaration(value: string): ModuleDependencyDeclaration;
13
+ /**
14
+ * Normalizes and deduplicates module declarations from `modules`.
15
+ *
16
+ * Returns canonical object declarations suitable for downstream bundling logic.
17
+ */
18
+ export declare function normalizeModuleDeclarations(modules?: string[]): ModuleDependencyDeclaration[];
@@ -0,0 +1,49 @@
1
+ function normalizeImports(imports) {
2
+ if (!imports || imports.length === 0) {
3
+ return void 0;
4
+ }
5
+ const normalized = Array.from(new Set(imports.map((entry) => entry.trim()).filter((entry) => entry.length > 0)));
6
+ return normalized.length > 0 ? normalized : void 0;
7
+ }
8
+ function parseModuleDeclaration(value) {
9
+ const source = value.trim();
10
+ if (source.length === 0) {
11
+ throw new Error("Module declaration cannot be empty");
12
+ }
13
+ const openBraceIndex = source.indexOf("{");
14
+ if (openBraceIndex < 0) {
15
+ return { from: source };
16
+ }
17
+ const closeBraceIndex = source.lastIndexOf("}");
18
+ if (closeBraceIndex !== source.length - 1 || closeBraceIndex <= openBraceIndex) {
19
+ throw new Error(`Invalid module declaration '${value}'`);
20
+ }
21
+ const from = source.slice(0, openBraceIndex).trim();
22
+ if (from.length === 0) {
23
+ throw new Error(`Invalid module declaration '${value}'`);
24
+ }
25
+ const importsSlice = source.slice(openBraceIndex + 1, closeBraceIndex);
26
+ const imports = normalizeImports(importsSlice.split(","));
27
+ return {
28
+ from,
29
+ imports
30
+ };
31
+ }
32
+ function normalizeModuleDeclarations(modules) {
33
+ const declarations = modules ?? [];
34
+ const output = [];
35
+ const seen = /* @__PURE__ */ new Set();
36
+ for (const declaration of declarations) {
37
+ const normalized = parseModuleDeclaration(declaration);
38
+ const key = `${normalized.from}::${(normalized.imports ?? []).join(",")}`;
39
+ if (!seen.has(key)) {
40
+ seen.add(key);
41
+ output.push(normalized);
42
+ }
43
+ }
44
+ return output;
45
+ }
46
+ export {
47
+ normalizeModuleDeclarations,
48
+ parseModuleDeclaration
49
+ };
@@ -0,0 +1,31 @@
1
+ export interface HttpErrorDetails {
2
+ [key: string]: unknown;
3
+ }
4
+ export interface HttpErrorJson {
5
+ error: string;
6
+ status: number;
7
+ details?: HttpErrorDetails;
8
+ }
9
+ /**
10
+ * HTTP error class for structured error handling in route handlers.
11
+ * Provides static factory methods for common HTTP error responses.
12
+ */
13
+ export declare class HttpError extends Error {
14
+ readonly status: number;
15
+ readonly details?: HttpErrorDetails;
16
+ constructor(status: number, message: string, details?: HttpErrorDetails);
17
+ /**
18
+ * Serialize error to JSON for API responses.
19
+ */
20
+ toJSON(): HttpErrorJson;
21
+ /**
22
+ * Create a Response object from this error.
23
+ */
24
+ toResponse(): Response;
25
+ static BadRequest(message?: string, details?: HttpErrorDetails): HttpError;
26
+ static Unauthorized(message?: string): HttpError;
27
+ static Forbidden(message?: string): HttpError;
28
+ static NotFound(message?: string): HttpError;
29
+ static Conflict(message?: string, details?: HttpErrorDetails): HttpError;
30
+ static InternalServerError(message?: string): HttpError;
31
+ }
@@ -0,0 +1,50 @@
1
+ class HttpError extends Error {
2
+ status;
3
+ details;
4
+ constructor(status, message, details) {
5
+ super(message);
6
+ this.name = "HttpError";
7
+ this.status = status;
8
+ this.details = details;
9
+ }
10
+ /**
11
+ * Serialize error to JSON for API responses.
12
+ */
13
+ toJSON() {
14
+ const json = {
15
+ error: this.message,
16
+ status: this.status
17
+ };
18
+ if (this.details) {
19
+ json.details = this.details;
20
+ }
21
+ return json;
22
+ }
23
+ /**
24
+ * Create a Response object from this error.
25
+ */
26
+ toResponse() {
27
+ return Response.json(this.toJSON(), { status: this.status });
28
+ }
29
+ static BadRequest(message = "Bad Request", details) {
30
+ return new HttpError(400, message, details);
31
+ }
32
+ static Unauthorized(message = "Unauthorized") {
33
+ return new HttpError(401, message);
34
+ }
35
+ static Forbidden(message = "Forbidden") {
36
+ return new HttpError(403, message);
37
+ }
38
+ static NotFound(message = "Not Found") {
39
+ return new HttpError(404, message);
40
+ }
41
+ static Conflict(message = "Conflict", details) {
42
+ return new HttpError(409, message, details);
43
+ }
44
+ static InternalServerError(message = "Internal Server Error") {
45
+ return new HttpError(500, message);
46
+ }
47
+ }
48
+ export {
49
+ HttpError
50
+ };
@@ -0,0 +1,3 @@
1
+ export { HttpError } from './http-error.js';
2
+ export type { HttpErrorDetails, HttpErrorJson } from './http-error.js';
3
+ export { LocalsAccessError } from './locals-access-error.js';
@@ -0,0 +1,6 @@
1
+ import { HttpError } from "./http-error.js";
2
+ import { LocalsAccessError } from "./locals-access-error.js";
3
+ export {
4
+ HttpError,
5
+ LocalsAccessError
6
+ };
@@ -0,0 +1,4 @@
1
+ export declare class LocalsAccessError extends Error {
2
+ name: string;
3
+ constructor(message: string);
4
+ }
@@ -0,0 +1,9 @@
1
+ class LocalsAccessError extends Error {
2
+ name = "LocalsAccessError";
3
+ constructor(message) {
4
+ super(message);
5
+ }
6
+ }
7
+ export {
8
+ LocalsAccessError
9
+ };
@@ -0,0 +1,2 @@
1
+ import { Logger } from '@ecopages/logger';
2
+ export declare const appLogger: Logger;
@@ -0,0 +1,6 @@
1
+ import { Logger } from "@ecopages/logger";
2
+ const debug = process.env.ECOPAGES_LOGGER_DEBUG === "true";
3
+ const appLogger = new Logger("[@ecopages/core]", { debug });
4
+ export {
5
+ appLogger
6
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Ecopages HMR Runtime
3
+ * Injected into the browser to handle Hot Module Replacement updates.
4
+ */
5
+ export {};
@@ -0,0 +1,117 @@
1
+ import { getEcoNavigationRuntime } from "../../router/client/navigation-coordinator.js";
2
+ (function() {
3
+ const WS_URL = "ws://" + location.host + "/_hmr";
4
+ let socket;
5
+ let reconnectAttempts = 0;
6
+ function connect() {
7
+ socket = new WebSocket(WS_URL);
8
+ socket.addEventListener("open", () => {
9
+ console.log("[ecopages] HMR Connected");
10
+ reconnectAttempts = 0;
11
+ });
12
+ socket.addEventListener("message", async (event) => {
13
+ try {
14
+ const payload = JSON.parse(event.data);
15
+ handleMessage(payload);
16
+ } catch (e) {
17
+ console.error("[ecopages] Invalid HMR message:", e);
18
+ }
19
+ });
20
+ socket.addEventListener("close", () => {
21
+ if (reconnectAttempts < 10) {
22
+ setTimeout(connect, 1e3 * 2 ** reconnectAttempts);
23
+ reconnectAttempts++;
24
+ }
25
+ });
26
+ }
27
+ async function handleMessage(payload) {
28
+ const navigationRuntime = getEcoNavigationRuntime(window);
29
+ switch (payload.type) {
30
+ case "reload":
31
+ await waitForNavigationToSettle(navigationRuntime);
32
+ location.reload();
33
+ break;
34
+ case "layout-update": {
35
+ await waitForNavigationToSettle(navigationRuntime);
36
+ if (await navigationRuntime.reloadCurrentPage({ clearCache: true, moduleUrl: getActiveHmrModuleUrl() })) {
37
+ } else {
38
+ location.reload();
39
+ }
40
+ break;
41
+ }
42
+ case "error":
43
+ console.error("[ecopages] HMR Error:", payload.message);
44
+ break;
45
+ case "update":
46
+ if (payload.path) {
47
+ await applyUpdate(payload.path, payload.timestamp);
48
+ }
49
+ break;
50
+ case "css-update":
51
+ if (payload.path) {
52
+ refreshStylesheet(payload.path);
53
+ }
54
+ break;
55
+ }
56
+ }
57
+ async function applyUpdate(path, timestamp) {
58
+ try {
59
+ const url = path + "?t=" + (timestamp || Date.now());
60
+ const handlers = window.__ECO_PAGES__?.hmrHandlers;
61
+ const navigationRuntime = getEcoNavigationRuntime(window);
62
+ await waitForNavigationToSettle(navigationRuntime);
63
+ if (handlers?.[path]) {
64
+ await handlers[path](url);
65
+ return;
66
+ }
67
+ await import(url);
68
+ if (await navigationRuntime.reloadCurrentPage({ clearCache: false })) {
69
+ }
70
+ } catch (e) {
71
+ console.error("[ecopages] Failed to apply HMR update:", e);
72
+ }
73
+ }
74
+ function getActiveHmrModuleUrl() {
75
+ const pageModule = window.__ECO_PAGES__?.page?.module;
76
+ if (pageModule && pageModule.includes("/assets/_hmr/")) {
77
+ return pageModule.split("?")[0];
78
+ }
79
+ const handlerPaths = Object.keys(window.__ECO_PAGES__?.hmrHandlers ?? {});
80
+ return handlerPaths[handlerPaths.length - 1];
81
+ }
82
+ async function waitForNavigationToSettle(navigationRuntime) {
83
+ if (!navigationRuntime.hasPendingNavigationTransaction()) {
84
+ return;
85
+ }
86
+ await new Promise((resolve) => {
87
+ const startedAt = performance.now();
88
+ const timeoutMs = 2e3;
89
+ const poll = () => {
90
+ if (!navigationRuntime.hasPendingNavigationTransaction()) {
91
+ resolve();
92
+ return;
93
+ }
94
+ if (performance.now() - startedAt >= timeoutMs) {
95
+ resolve();
96
+ return;
97
+ }
98
+ requestAnimationFrame(poll);
99
+ };
100
+ requestAnimationFrame(poll);
101
+ });
102
+ }
103
+ function refreshStylesheet(path) {
104
+ const filename = path.split("/").pop() || "";
105
+ const links = document.querySelectorAll('link[rel="stylesheet"]');
106
+ links.forEach((link) => {
107
+ const href = link.href;
108
+ if (href.includes(filename) || href.includes(path.replace(/^.*\/src\//, "/assets/"))) {
109
+ const url = new URL(href, location.origin);
110
+ url.searchParams.set("t", Date.now().toString());
111
+ link.href = url.toString();
112
+ console.log("[ecopages] CSS updated:", filename);
113
+ }
114
+ });
115
+ }
116
+ connect();
117
+ })();
@@ -0,0 +1,162 @@
1
+ import type { ClientBridgeEvent } from '../types/public-types.js';
2
+ /**
3
+ * HMR Strategy Pattern
4
+ *
5
+ * This module defines the base classes and types for Hot Module Replacement strategies.
6
+ * Each strategy handles a specific type of file change and determines how to process it.
7
+ *
8
+ * @module
9
+ * @example
10
+ * ```typescript
11
+ * class CustomHmrStrategy extends HmrStrategy {
12
+ * readonly type = HmrStrategyType.INTEGRATION;
13
+ *
14
+ * matches(filePath: string): boolean {
15
+ * return filePath.endsWith('.custom');
16
+ * }
17
+ *
18
+ * async process(filePath: string): Promise<HmrAction> {
19
+ * return {
20
+ * type: 'broadcast',
21
+ * events: [{ type: 'update', path: filePath, timestamp: Date.now() }],
22
+ * };
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ /**
28
+ * Defines the category of an HMR strategy, which determines its execution priority.
29
+ * Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
30
+ *
31
+ * @remarks
32
+ * The numeric values represent base priorities. Strategies can fine-tune their priority
33
+ * using the `priorityOffset` property.
34
+ */
35
+ export declare const HmrStrategyType: {
36
+ /**
37
+ * Integration-specific strategies (React, Lit, etc.)
38
+ * Highest priority to allow framework-specific HMR handling.
39
+ */
40
+ readonly INTEGRATION: 100;
41
+ /**
42
+ * Asset processing strategies (CSS, images, etc.)
43
+ * High priority for specialized asset handling.
44
+ */
45
+ readonly ASSET: 50;
46
+ /**
47
+ * Generic script bundling strategies (JS/TS)
48
+ * Medium priority for standard script processing.
49
+ */
50
+ readonly SCRIPT: 25;
51
+ /**
52
+ * Fallback strategy for unhandled file types.
53
+ * Lowest priority, triggers full page reload.
54
+ */
55
+ readonly FALLBACK: 0;
56
+ };
57
+ export type HmrStrategyType = (typeof HmrStrategyType)[keyof typeof HmrStrategyType];
58
+ /**
59
+ * Represents an action to be taken after processing a file change.
60
+ */
61
+ export interface HmrAction {
62
+ /**
63
+ * Whether to broadcast an HMR event to connected clients.
64
+ */
65
+ type: 'broadcast' | 'none';
66
+ /**
67
+ * The HMR events to broadcast, if type is 'broadcast'.
68
+ * Multiple events may be broadcast in one action.
69
+ */
70
+ events?: ClientBridgeEvent[];
71
+ }
72
+ /**
73
+ * Base class for HMR strategies.
74
+ *
75
+ * Each strategy handles a specific type of file change and determines how to process it.
76
+ * Strategies are selected based on their priority (higher values are evaluated first) and
77
+ * whether they match the changed file path.
78
+ *
79
+ * @remarks
80
+ * Strategies are expected to be stateless and idempotent. The same file change
81
+ * should produce the same result when processed by the same strategy.
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * class MyAssetStrategy extends HmrStrategy {
86
+ * readonly type = HmrStrategyType.ASSET;
87
+ * readonly priorityOffset = 5;
88
+ *
89
+ * matches(filePath: string): boolean {
90
+ * return /\.(png|jpg|svg)$/.test(filePath);
91
+ * }
92
+ *
93
+ * async process(filePath: string): Promise<HmrAction> {
94
+ * await this.optimizeImage(filePath);
95
+ * return {
96
+ * type: 'broadcast',
97
+ * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
98
+ * };
99
+ * }
100
+ * }
101
+ * ```
102
+ */
103
+ export declare abstract class HmrStrategy {
104
+ /**
105
+ * The category of this strategy, determining its base priority.
106
+ */
107
+ abstract readonly type: HmrStrategyType;
108
+ /**
109
+ * Optional offset to fine-tune priority within the same category.
110
+ * Useful when multiple strategies share the same type.
111
+ *
112
+ * @defaultValue 0
113
+ */
114
+ readonly priorityOffset: number;
115
+ /**
116
+ * Computed priority for strategy selection.
117
+ * Higher values are evaluated first.
118
+ *
119
+ * @returns The sum of the strategy type and priority offset
120
+ */
121
+ get priority(): number;
122
+ /**
123
+ * Determines if this strategy can handle the given file path.
124
+ *
125
+ * @param filePath - Absolute path to the changed file
126
+ * @returns `true` when this strategy should process the file
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * matches(filePath: string): boolean {
131
+ * return filePath.endsWith('.css');
132
+ * }
133
+ * ```
134
+ */
135
+ abstract matches(filePath: string): boolean;
136
+ /**
137
+ * Processes a file change and returns the action to take.
138
+ *
139
+ * This method may perform side effects such as:
140
+ * - Rebuilding files
141
+ * - Writing to disk
142
+ * - Transforming code
143
+ * - Updating caches
144
+ *
145
+ * @param filePath - Absolute path to the changed file
146
+ * @returns Action to take (broadcast event or none)
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * async process(filePath: string): Promise<HmrAction> {
151
+ * const processed = await this.transform(filePath);
152
+ * await Bun.write(outputPath, processed);
153
+ *
154
+ * return {
155
+ * type: 'broadcast',
156
+ * events: [{ type: 'update', path: outputPath, timestamp: Date.now() }]
157
+ * };
158
+ * }
159
+ * ```
160
+ */
161
+ abstract process(filePath: string): Promise<HmrAction>;
162
+ }
@@ -0,0 +1,44 @@
1
+ const HmrStrategyType = {
2
+ /**
3
+ * Integration-specific strategies (React, Lit, etc.)
4
+ * Highest priority to allow framework-specific HMR handling.
5
+ */
6
+ INTEGRATION: 100,
7
+ /**
8
+ * Asset processing strategies (CSS, images, etc.)
9
+ * High priority for specialized asset handling.
10
+ */
11
+ ASSET: 50,
12
+ /**
13
+ * Generic script bundling strategies (JS/TS)
14
+ * Medium priority for standard script processing.
15
+ */
16
+ SCRIPT: 25,
17
+ /**
18
+ * Fallback strategy for unhandled file types.
19
+ * Lowest priority, triggers full page reload.
20
+ */
21
+ FALLBACK: 0
22
+ };
23
+ class HmrStrategy {
24
+ /**
25
+ * Optional offset to fine-tune priority within the same category.
26
+ * Useful when multiple strategies share the same type.
27
+ *
28
+ * @defaultValue 0
29
+ */
30
+ priorityOffset = 0;
31
+ /**
32
+ * Computed priority for strategy selection.
33
+ * Higher values are evaluated first.
34
+ *
35
+ * @returns The sum of the strategy type and priority offset
36
+ */
37
+ get priority() {
38
+ return this.type + this.priorityOffset;
39
+ }
40
+ }
41
+ export {
42
+ HmrStrategy,
43
+ HmrStrategyType
44
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import { test, expect } from "@playwright/test";
2
+ import { readFileSync } from "node:fs";
3
+ import { writeFile } from "node:fs/promises";
4
+ import { resolve } from "node:path";
5
+ const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
6
+ const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/postcss-hmr.css");
7
+ test.describe("HMR E2E PostCSS", () => {
8
+ test("should hot-update processor-owned CSS without a full page reload", async ({ page }) => {
9
+ const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
10
+ const title = page.locator(".postcss-title").first();
11
+ try {
12
+ await page.goto("/postcss-hmr", { waitUntil: "networkidle" });
13
+ await expect(title).toBeVisible();
14
+ const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
15
+ expect(initialColor).toBeTruthy();
16
+ await page.evaluate(() => {
17
+ window.__postcssReloadProbe = "before-change";
18
+ });
19
+ const modifiedCss = originalCss.replace(".postcss-title {", ".postcss-title {\n color: rgb(255, 0, 0);");
20
+ await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
21
+ await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
22
+ await expect(
23
+ page.evaluate(
24
+ () => window.__postcssReloadProbe ?? null
25
+ )
26
+ ).resolves.toBe("before-change");
27
+ } finally {
28
+ await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
29
+ }
30
+ });
31
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import { test, expect } from "@playwright/test";
2
+ import { readFileSync } from "node:fs";
3
+ import { writeFile } from "node:fs/promises";
4
+ import { resolve } from "node:path";
5
+ const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
6
+ const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/index.css");
7
+ test.describe("HMR E2E", () => {
8
+ test("should load page with .main-title element", async ({ page }) => {
9
+ await page.goto("/", { waitUntil: "networkidle" });
10
+ const title = page.locator(".main-title").first();
11
+ await expect(title).toBeVisible();
12
+ });
13
+ test("should connect to HMR WebSocket", async ({ page }) => {
14
+ const socketPromise = page.waitForEvent("websocket", {
15
+ predicate: (socket2) => socket2.url().endsWith("/_hmr"),
16
+ timeout: 1e4
17
+ });
18
+ await page.goto("/", { waitUntil: "networkidle" });
19
+ const socket = await socketPromise;
20
+ expect(socket.url()).toMatch(/\/_hmr$/);
21
+ });
22
+ test("should fall back to a full page reload when raw CSS file changes", async ({ page }) => {
23
+ const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
24
+ const title = page.locator(".main-title").first();
25
+ try {
26
+ await page.goto("/", { waitUntil: "networkidle" });
27
+ await expect(title).toBeVisible();
28
+ const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
29
+ expect(initialColor).toBeTruthy();
30
+ const modifiedCss = originalCss.replace(".main-title {", ".main-title {\n color: rgb(255, 0, 0);");
31
+ const reloadPromise = page.waitForEvent("framenavigated", {
32
+ predicate: (frame) => frame === page.mainFrame(),
33
+ timeout: 1e4
34
+ });
35
+ await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
36
+ await reloadPromise;
37
+ await page.waitForLoadState("networkidle");
38
+ await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
39
+ } finally {
40
+ await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
41
+ }
42
+ });
43
+ });