@ecopages/core 0.2.0-alpha.25 → 0.2.0-alpha.26

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 (543) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/package.json +226 -93
  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 +52 -0
  12. package/src/adapters/bun/create-app.js +116 -0
  13. package/src/adapters/bun/hmr-manager.d.ts +143 -0
  14. package/src/adapters/bun/hmr-manager.js +333 -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 +374 -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 +133 -0
  30. package/src/adapters/node/node-hmr-manager.js +311 -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-route-matcher.d.ts +38 -0
  42. package/src/adapters/shared/explicit-static-route-matcher.js +103 -0
  43. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
  44. package/src/adapters/shared/file-route-middleware-pipeline.js +99 -0
  45. package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
  46. package/src/adapters/shared/fs-server-response-factory.js +97 -0
  47. package/src/adapters/shared/fs-server-response-matcher.d.ts +67 -0
  48. package/src/adapters/shared/fs-server-response-matcher.js +147 -0
  49. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  50. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  51. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  52. package/src/adapters/shared/hmr-html-response.js +32 -0
  53. package/src/adapters/shared/render-context.d.ts +15 -0
  54. package/src/adapters/shared/render-context.js +72 -0
  55. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  56. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  57. package/src/adapters/shared/server-adapter.d.ts +97 -0
  58. package/src/adapters/shared/server-adapter.js +390 -0
  59. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  60. package/src/adapters/shared/server-route-handler.js +111 -0
  61. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  62. package/src/adapters/shared/server-static-builder.js +100 -0
  63. package/src/build/build-adapter.d.ts +239 -0
  64. package/src/build/build-adapter.js +642 -0
  65. package/src/build/build-manifest.d.ts +27 -0
  66. package/src/build/build-manifest.js +30 -0
  67. package/src/build/build-types.d.ts +57 -0
  68. package/src/build/build-types.js +0 -0
  69. package/src/build/dev-build-coordinator.d.ts +72 -0
  70. package/src/build/dev-build-coordinator.js +154 -0
  71. package/src/build/esbuild-build-adapter.d.ts +78 -0
  72. package/src/build/esbuild-build-adapter.js +505 -0
  73. package/src/build/runtime-build-executor.d.ts +14 -0
  74. package/src/build/runtime-build-executor.js +22 -0
  75. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  76. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  77. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  78. package/src/build/runtime-specifier-aliases.js +95 -0
  79. package/src/config/config-builder.d.ts +252 -0
  80. package/src/config/config-builder.js +603 -0
  81. package/src/config/{constants.ts → constants.d.ts} +13 -22
  82. package/src/config/constants.js +25 -0
  83. package/src/dev/sc-server.d.ts +30 -0
  84. package/src/dev/sc-server.js +111 -0
  85. package/src/eco/eco.browser.d.ts +2 -0
  86. package/src/eco/eco.browser.js +83 -0
  87. package/src/eco/eco.d.ts +9 -0
  88. package/src/eco/eco.js +85 -0
  89. package/src/eco/eco.types.d.ts +178 -0
  90. package/src/eco/eco.types.js +0 -0
  91. package/src/eco/eco.utils.d.ts +1 -0
  92. package/src/eco/eco.utils.js +10 -0
  93. package/src/eco/global-injector-map.d.ts +16 -0
  94. package/src/eco/global-injector-map.js +80 -0
  95. package/src/eco/lazy-injector-map.d.ts +8 -0
  96. package/src/eco/lazy-injector-map.js +70 -0
  97. package/src/eco/module-dependencies.d.ts +18 -0
  98. package/src/eco/module-dependencies.js +49 -0
  99. package/src/errors/http-error.d.ts +31 -0
  100. package/src/errors/http-error.js +50 -0
  101. package/src/errors/{index.ts → index.d.ts} +2 -2
  102. package/src/errors/index.js +4 -0
  103. package/src/errors/locals-access-error.d.ts +4 -0
  104. package/src/errors/locals-access-error.js +9 -0
  105. package/src/global/app-logger.d.ts +2 -0
  106. package/src/global/app-logger.js +6 -0
  107. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  108. package/src/hmr/client/hmr-runtime.js +117 -0
  109. package/src/hmr/hmr-strategy.d.ts +162 -0
  110. package/src/hmr/hmr-strategy.js +44 -0
  111. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  112. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  113. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  114. package/src/hmr/hmr.test.e2e.js +43 -0
  115. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  116. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  117. package/src/hmr/strategies/js-hmr-strategy.d.ts +139 -0
  118. package/src/hmr/strategies/js-hmr-strategy.js +178 -0
  119. package/src/index.browser.d.ts +3 -0
  120. package/src/index.browser.js +4 -0
  121. package/src/index.d.ts +6 -0
  122. package/src/index.js +21 -0
  123. package/src/integrations/ghtml/ghtml-renderer.d.ts +20 -0
  124. package/src/integrations/ghtml/ghtml-renderer.js +63 -0
  125. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  126. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  127. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  128. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  129. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  130. package/src/plugins/alias-resolver-plugin.js +53 -0
  131. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  132. package/src/plugins/eco-component-meta-plugin.js +163 -0
  133. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  134. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  135. package/src/plugins/integration-plugin.d.ts +219 -0
  136. package/src/plugins/integration-plugin.js +196 -0
  137. package/src/plugins/processor.d.ts +95 -0
  138. package/src/plugins/processor.js +136 -0
  139. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  140. package/src/plugins/runtime-capability.js +0 -0
  141. package/src/plugins/source-transform.d.ts +46 -0
  142. package/src/plugins/source-transform.js +71 -0
  143. package/src/route-renderer/orchestration/boundary-planning.service.d.ts +25 -0
  144. package/src/route-renderer/orchestration/boundary-planning.service.js +97 -0
  145. package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
  146. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  147. package/src/route-renderer/orchestration/integration-renderer.d.ts +556 -0
  148. package/src/route-renderer/orchestration/integration-renderer.js +932 -0
  149. package/src/route-renderer/orchestration/page-packaging.service.d.ts +16 -0
  150. package/src/route-renderer/orchestration/page-packaging.service.js +66 -0
  151. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  152. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  153. package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +89 -0
  154. package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
  155. package/src/route-renderer/orchestration/render-execution.service.d.ts +43 -0
  156. package/src/route-renderer/orchestration/render-execution.service.js +106 -0
  157. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  158. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  159. package/src/route-renderer/orchestration/render-preparation.service.d.ts +120 -0
  160. package/src/route-renderer/orchestration/render-preparation.service.js +364 -0
  161. package/src/route-renderer/orchestration/route-shell-composer.service.d.ts +50 -0
  162. package/src/route-renderer/orchestration/route-shell-composer.service.js +81 -0
  163. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  164. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  165. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  166. package/src/route-renderer/page-loading/component-dependency-collection.js +125 -0
  167. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  168. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  169. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  170. package/src/route-renderer/page-loading/dependency-resolver.js +117 -0
  171. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  172. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  173. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  174. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  175. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  176. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  177. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  178. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  179. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  180. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  181. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  182. package/src/route-renderer/page-loading/page-dependency-bundling.js +115 -0
  183. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  184. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  185. package/src/route-renderer/route-renderer.d.ts +67 -0
  186. package/src/route-renderer/route-renderer.js +103 -0
  187. package/src/router/client/link-intent.js +34 -0
  188. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  189. package/src/router/client/link-intent.test.browser.js +43 -0
  190. package/src/router/client/navigation-coordinator.d.ts +169 -0
  191. package/src/router/client/navigation-coordinator.js +215 -0
  192. package/src/router/server/fs-router-scanner.d.ts +41 -0
  193. package/src/router/server/fs-router-scanner.js +161 -0
  194. package/src/router/server/fs-router.d.ts +26 -0
  195. package/src/router/server/fs-router.js +100 -0
  196. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  197. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  198. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  199. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  200. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  201. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  202. package/src/services/assets/asset-processing-service/assets.types.d.ts +100 -0
  203. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  204. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  205. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  206. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  207. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  208. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  209. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  210. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  211. package/src/services/assets/asset-processing-service/index.js +5 -0
  212. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  213. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  214. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  215. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  216. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  217. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  218. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  219. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  220. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  221. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  222. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  223. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +116 -0
  224. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  225. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +91 -0
  226. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  227. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +77 -0
  228. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  229. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +58 -0
  230. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  231. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +67 -0
  232. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  233. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  234. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  235. package/src/services/assets/browser-bundle.service.js +41 -0
  236. package/src/services/cache/cache.types.d.ts +107 -0
  237. package/src/services/cache/cache.types.js +0 -0
  238. package/src/services/cache/index.d.ts +7 -0
  239. package/src/services/cache/index.js +7 -0
  240. package/src/services/cache/memory-cache-store.d.ts +42 -0
  241. package/src/services/cache/memory-cache-store.js +98 -0
  242. package/src/services/cache/page-cache-service.d.ts +70 -0
  243. package/src/services/cache/page-cache-service.js +152 -0
  244. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  245. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  246. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  247. package/src/services/html/html-rewriter-provider.service.js +68 -0
  248. package/src/services/html/html-transformer.service.d.ts +87 -0
  249. package/src/services/html/html-transformer.service.js +216 -0
  250. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  251. package/src/services/invalidation/development-invalidation.service.js +190 -0
  252. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  253. package/src/services/module-loading/app-module-loader.service.js +0 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  255. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  256. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  257. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  258. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  259. package/src/services/module-loading/module-loading-types.js +0 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  261. package/src/services/module-loading/node-bootstrap-plugin.js +204 -0
  262. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  263. package/src/services/module-loading/page-module-import.service.js +170 -0
  264. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  265. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  266. package/src/services/module-loading/source-module-support.d.ts +5 -0
  267. package/src/services/module-loading/source-module-support.js +8 -0
  268. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  269. package/src/services/runtime-state/dev-graph.service.js +162 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  271. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  272. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  273. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  274. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  275. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  276. package/src/services/validation/schema-validation-service.d.ts +122 -0
  277. package/src/services/validation/schema-validation-service.js +101 -0
  278. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  279. package/src/services/validation/standard-schema.types.js +0 -0
  280. package/src/static-site-generator/static-site-generator.d.ts +105 -0
  281. package/src/static-site-generator/static-site-generator.js +349 -0
  282. package/src/types/internal-types.d.ts +231 -0
  283. package/src/types/internal-types.js +0 -0
  284. package/src/types/public-types.d.ts +1257 -0
  285. package/src/types/public-types.js +0 -0
  286. package/src/utils/deep-merge.d.ts +14 -0
  287. package/src/utils/deep-merge.js +32 -0
  288. package/src/utils/hash.d.ts +1 -0
  289. package/src/utils/hash.js +7 -0
  290. package/src/utils/html-escaping.d.ts +7 -0
  291. package/src/utils/html-escaping.js +6 -0
  292. package/src/utils/html.js +4 -0
  293. package/src/utils/invariant.d.ts +5 -0
  294. package/src/utils/invariant.js +11 -0
  295. package/src/utils/locals-utils.d.ts +15 -0
  296. package/src/utils/locals-utils.js +24 -0
  297. package/src/utils/parse-cli-args.d.ts +27 -0
  298. package/src/utils/parse-cli-args.js +62 -0
  299. package/src/utils/path-utils.module.d.ts +5 -0
  300. package/src/utils/path-utils.module.js +14 -0
  301. package/src/utils/resolve-work-dir.d.ts +11 -0
  302. package/src/utils/resolve-work-dir.js +31 -0
  303. package/src/utils/runtime.d.ts +11 -0
  304. package/src/utils/runtime.js +40 -0
  305. package/src/utils/server-utils.module.d.ts +19 -0
  306. package/src/utils/server-utils.module.js +56 -0
  307. package/src/watchers/project-watcher.d.ts +136 -0
  308. package/src/watchers/project-watcher.js +275 -0
  309. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  310. package/src/watchers/project-watcher.test-helpers.js +52 -0
  311. package/src/adapters/abstract/application-adapter.test.ts +0 -172
  312. package/src/adapters/abstract/application-adapter.ts +0 -379
  313. package/src/adapters/abstract/router-adapter.ts +0 -30
  314. package/src/adapters/abstract/server-adapter.ts +0 -79
  315. package/src/adapters/bun/client-bridge.ts +0 -62
  316. package/src/adapters/bun/create-app.ts +0 -180
  317. package/src/adapters/bun/hmr-manager.test.ts +0 -267
  318. package/src/adapters/bun/hmr-manager.ts +0 -406
  319. package/src/adapters/bun/index.ts +0 -2
  320. package/src/adapters/bun/server-adapter.ts +0 -500
  321. package/src/adapters/bun/server-lifecycle.ts +0 -124
  322. package/src/adapters/create-app.test.ts +0 -10
  323. package/src/adapters/create-app.ts +0 -91
  324. package/src/adapters/index.ts +0 -2
  325. package/src/adapters/node/create-app.test.ts +0 -53
  326. package/src/adapters/node/create-app.ts +0 -183
  327. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  328. package/src/adapters/node/node-client-bridge.ts +0 -79
  329. package/src/adapters/node/node-hmr-manager.test.ts +0 -322
  330. package/src/adapters/node/node-hmr-manager.ts +0 -378
  331. package/src/adapters/node/server-adapter.ts +0 -502
  332. package/src/adapters/node/static-content-server.test.ts +0 -60
  333. package/src/adapters/node/static-content-server.ts +0 -239
  334. package/src/adapters/shared/api-response.test.ts +0 -97
  335. package/src/adapters/shared/api-response.ts +0 -104
  336. package/src/adapters/shared/application-adapter.ts +0 -199
  337. package/src/adapters/shared/define-api-handler.ts +0 -66
  338. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  339. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  340. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -90
  341. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  342. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -187
  343. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  344. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -285
  345. package/src/adapters/shared/fs-server-response-matcher.ts +0 -189
  346. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  347. package/src/adapters/shared/hmr-html-response.ts +0 -52
  348. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -232
  349. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
  350. package/src/adapters/shared/render-context.test.ts +0 -150
  351. package/src/adapters/shared/render-context.ts +0 -123
  352. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  353. package/src/adapters/shared/server-adapter.test.ts +0 -77
  354. package/src/adapters/shared/server-adapter.ts +0 -493
  355. package/src/adapters/shared/server-route-handler.test.ts +0 -110
  356. package/src/adapters/shared/server-route-handler.ts +0 -153
  357. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  358. package/src/adapters/shared/server-static-builder.ts +0 -170
  359. package/src/build/build-adapter-serialization.test.ts +0 -281
  360. package/src/build/build-adapter.test.ts +0 -1240
  361. package/src/build/build-adapter.ts +0 -1012
  362. package/src/build/build-manifest.ts +0 -54
  363. package/src/build/build-types.ts +0 -83
  364. package/src/build/dev-build-coordinator.ts +0 -220
  365. package/src/build/esbuild-build-adapter.ts +0 -660
  366. package/src/build/runtime-build-executor.test.ts +0 -81
  367. package/src/build/runtime-build-executor.ts +0 -40
  368. package/src/build/runtime-specifier-alias-plugin.test.ts +0 -67
  369. package/src/build/runtime-specifier-alias-plugin.ts +0 -62
  370. package/src/build/runtime-specifier-aliases.ts +0 -135
  371. package/src/config/config-builder.test.ts +0 -443
  372. package/src/config/config-builder.ts +0 -742
  373. package/src/config/config-builder.typecheck.test.ts +0 -96
  374. package/src/dev/sc-server.ts +0 -143
  375. package/src/eco/eco.browser.test.ts +0 -43
  376. package/src/eco/eco.browser.ts +0 -118
  377. package/src/eco/eco.test.ts +0 -654
  378. package/src/eco/eco.ts +0 -205
  379. package/src/eco/eco.types.ts +0 -221
  380. package/src/eco/eco.utils.test.ts +0 -219
  381. package/src/eco/eco.utils.ts +0 -5
  382. package/src/eco/global-injector-map.test.ts +0 -42
  383. package/src/eco/global-injector-map.ts +0 -112
  384. package/src/eco/lazy-injector-map.test.ts +0 -66
  385. package/src/eco/lazy-injector-map.ts +0 -120
  386. package/src/eco/module-dependencies.test.ts +0 -30
  387. package/src/eco/module-dependencies.ts +0 -75
  388. package/src/errors/http-error.test.ts +0 -134
  389. package/src/errors/http-error.ts +0 -72
  390. package/src/errors/locals-access-error.ts +0 -7
  391. package/src/global/app-logger.ts +0 -4
  392. package/src/global/utils.test.ts +0 -12
  393. 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
  394. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  395. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  396. package/src/hmr/client/hmr-runtime.ts +0 -160
  397. package/src/hmr/hmr-strategy.test.ts +0 -124
  398. package/src/hmr/hmr-strategy.ts +0 -177
  399. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  400. package/src/hmr/hmr.test.e2e.ts +0 -66
  401. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  402. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -335
  403. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  404. package/src/index.browser.ts +0 -3
  405. package/src/index.ts +0 -15
  406. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  407. package/src/integrations/ghtml/ghtml-renderer.ts +0 -97
  408. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  409. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  410. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  411. package/src/plugins/alias-resolver-plugin.ts +0 -63
  412. package/src/plugins/eco-component-meta-plugin.test.ts +0 -406
  413. package/src/plugins/eco-component-meta-plugin.ts +0 -495
  414. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  415. package/src/plugins/foreign-jsx-override-plugin.ts +0 -67
  416. package/src/plugins/integration-plugin.test.ts +0 -156
  417. package/src/plugins/integration-plugin.ts +0 -311
  418. package/src/plugins/processor.test.ts +0 -148
  419. package/src/plugins/processor.ts +0 -240
  420. package/src/plugins/source-transform.test.ts +0 -82
  421. package/src/plugins/source-transform.ts +0 -123
  422. package/src/route-renderer/orchestration/boundary-planning.service.ts +0 -146
  423. package/src/route-renderer/orchestration/component-render-context.ts +0 -318
  424. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2088
  425. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1285
  426. package/src/route-renderer/orchestration/page-packaging.service.test.ts +0 -76
  427. package/src/route-renderer/orchestration/page-packaging.service.ts +0 -85
  428. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -25
  429. package/src/route-renderer/orchestration/queued-boundary-runtime.service.test.ts +0 -319
  430. package/src/route-renderer/orchestration/queued-boundary-runtime.service.ts +0 -289
  431. package/src/route-renderer/orchestration/render-execution.service.test.ts +0 -196
  432. package/src/route-renderer/orchestration/render-execution.service.ts +0 -182
  433. package/src/route-renderer/orchestration/render-output.utils.ts +0 -302
  434. package/src/route-renderer/orchestration/render-preparation.service.test.ts +0 -569
  435. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -508
  436. package/src/route-renderer/orchestration/route-shell-composer.service.ts +0 -162
  437. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  438. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  439. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -196
  440. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -156
  441. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -665
  442. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -150
  443. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  444. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  445. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  446. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  447. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  448. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -205
  449. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  450. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  451. package/src/route-renderer/route-renderer.ts +0 -136
  452. package/src/router/client/link-intent.test.browser.ts +0 -51
  453. package/src/router/client/link-intent.ts +0 -92
  454. package/src/router/client/navigation-coordinator.test.ts +0 -237
  455. package/src/router/client/navigation-coordinator.ts +0 -453
  456. package/src/router/server/fs-router-scanner.test.ts +0 -83
  457. package/src/router/server/fs-router-scanner.ts +0 -224
  458. package/src/router/server/fs-router.test.ts +0 -214
  459. package/src/router/server/fs-router.ts +0 -122
  460. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  461. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -476
  462. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -345
  463. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  464. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  465. package/src/services/assets/asset-processing-service/assets.types.ts +0 -125
  466. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  467. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -96
  468. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  469. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  470. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  471. package/src/services/assets/asset-processing-service/index.ts +0 -5
  472. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  473. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  474. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  475. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -174
  476. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  477. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -192
  478. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -134
  479. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  480. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -110
  481. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
  482. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -87
  483. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  484. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -71
  485. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -81
  486. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  487. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  488. package/src/services/assets/browser-bundle.service.ts +0 -109
  489. package/src/services/cache/cache.types.ts +0 -126
  490. package/src/services/cache/index.ts +0 -18
  491. package/src/services/cache/memory-cache-store.test.ts +0 -225
  492. package/src/services/cache/memory-cache-store.ts +0 -130
  493. package/src/services/cache/page-cache-service.test.ts +0 -175
  494. package/src/services/cache/page-cache-service.ts +0 -202
  495. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  496. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  497. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  498. package/src/services/html/html-rewriter-provider.service.ts +0 -104
  499. package/src/services/html/html-transformer.service.test.ts +0 -479
  500. package/src/services/html/html-transformer.service.ts +0 -275
  501. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  502. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  503. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  504. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -130
  505. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -143
  506. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  507. package/src/services/module-loading/node-bootstrap-plugin.test.ts +0 -335
  508. package/src/services/module-loading/node-bootstrap-plugin.ts +0 -297
  509. package/src/services/module-loading/page-module-import.service.test.ts +0 -504
  510. package/src/services/module-loading/page-module-import.service.ts +0 -252
  511. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -243
  512. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  513. package/src/services/module-loading/source-module-support.ts +0 -19
  514. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  515. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  516. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  517. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  518. package/src/services/validation/schema-validation-service.test.ts +0 -223
  519. package/src/services/validation/schema-validation-service.ts +0 -204
  520. package/src/static-site-generator/static-site-generator.test.ts +0 -316
  521. package/src/static-site-generator/static-site-generator.ts +0 -462
  522. package/src/types/internal-types.ts +0 -242
  523. package/src/types/public-types.ts +0 -1443
  524. package/src/utils/deep-merge.test.ts +0 -114
  525. package/src/utils/deep-merge.ts +0 -47
  526. package/src/utils/hash.ts +0 -5
  527. package/src/utils/html-escaping.ts +0 -9
  528. package/src/utils/invariant.test.ts +0 -22
  529. package/src/utils/invariant.ts +0 -15
  530. package/src/utils/locals-utils.ts +0 -37
  531. package/src/utils/parse-cli-args.test.ts +0 -69
  532. package/src/utils/parse-cli-args.ts +0 -105
  533. package/src/utils/path-utils.module.ts +0 -14
  534. package/src/utils/path-utils.test.ts +0 -15
  535. package/src/utils/resolve-work-dir.ts +0 -45
  536. package/src/utils/runtime.ts +0 -44
  537. package/src/utils/server-utils.module.ts +0 -67
  538. package/src/utils/server-utils.test.ts +0 -38
  539. package/src/watchers/project-watcher.integration.test.ts +0 -337
  540. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  541. package/src/watchers/project-watcher.test.ts +0 -768
  542. package/src/watchers/project-watcher.ts +0 -357
  543. /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
+ };
@@ -1,2 +1,2 @@
1
- export { HttpError } from './http-error.ts';
2
- export type { HttpErrorDetails, HttpErrorJson } from './http-error.ts';
1
+ export { HttpError } from './http-error.js';
2
+ export type { HttpErrorDetails, HttpErrorJson } from './http-error.js';
@@ -0,0 +1,4 @@
1
+ import { HttpError } from "./http-error.js";
2
+ export {
3
+ HttpError
4
+ };
@@ -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
+ });