@ecopages/core 0.2.0-alpha.2 → 0.2.0-alpha.20

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 (391) hide show
  1. package/CHANGELOG.md +26 -64
  2. package/README.md +212 -14
  3. package/package.json +116 -66
  4. package/src/adapters/README.md +39 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +4 -12
  11. package/src/adapters/bun/create-app.js +4 -5
  12. package/src/adapters/bun/hmr-manager.d.ts +80 -21
  13. package/src/adapters/bun/hmr-manager.js +168 -62
  14. package/src/adapters/bun/index.d.ts +2 -3
  15. package/src/adapters/bun/index.js +3 -3
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +40 -34
  18. package/src/adapters/bun/server-lifecycle.d.ts +28 -17
  19. package/src/adapters/bun/server-lifecycle.js +34 -62
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +2 -6
  23. package/src/adapters/index.js +2 -8
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +89 -18
  28. package/src/adapters/node/node-hmr-manager.js +185 -95
  29. package/src/adapters/node/server-adapter.d.ts +6 -35
  30. package/src/adapters/node/server-adapter.js +44 -105
  31. package/src/adapters/node/static-content-server.d.ts +37 -1
  32. package/src/adapters/node/static-content-server.js +29 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  35. package/src/adapters/shared/explicit-static-route-matcher.d.ts +2 -2
  36. package/src/adapters/shared/explicit-static-route-matcher.js +4 -1
  37. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
  38. package/src/adapters/shared/file-route-middleware-pipeline.js +1 -0
  39. package/src/adapters/shared/fs-server-response-factory.d.ts +2 -2
  40. package/src/adapters/shared/fs-server-response-factory.js +1 -1
  41. package/src/adapters/shared/fs-server-response-matcher.d.ts +8 -12
  42. package/src/adapters/shared/fs-server-response-matcher.js +10 -18
  43. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  44. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  45. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  46. package/src/adapters/shared/hmr-html-response.js +32 -0
  47. package/src/adapters/shared/render-context.d.ts +2 -1
  48. package/src/adapters/shared/render-context.js +6 -3
  49. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  50. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  51. package/src/adapters/shared/server-adapter.d.ts +13 -3
  52. package/src/adapters/shared/server-adapter.js +42 -5
  53. package/src/adapters/shared/server-route-handler.d.ts +4 -4
  54. package/src/adapters/shared/server-route-handler.js +6 -15
  55. package/src/adapters/shared/server-static-builder.d.ts +38 -6
  56. package/src/adapters/shared/server-static-builder.js +64 -10
  57. package/src/build/README.md +107 -0
  58. package/src/build/build-adapter.d.ts +168 -3
  59. package/src/build/build-adapter.js +604 -16
  60. package/src/build/build-manifest.d.ts +27 -0
  61. package/src/build/build-manifest.js +30 -0
  62. package/src/build/dev-build-coordinator.d.ts +72 -0
  63. package/src/build/dev-build-coordinator.js +154 -0
  64. package/src/build/esbuild-build-adapter.d.ts +15 -6
  65. package/src/build/esbuild-build-adapter.js +189 -74
  66. package/src/build/runtime-build-executor.d.ts +14 -0
  67. package/src/build/runtime-build-executor.js +22 -0
  68. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  69. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  70. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  71. package/src/build/runtime-specifier-aliases.js +95 -0
  72. package/src/config/README.md +36 -0
  73. package/src/config/config-builder.d.ts +52 -27
  74. package/src/config/config-builder.js +260 -49
  75. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  76. package/src/{constants.js → config/constants.js} +4 -0
  77. package/src/declarations.d.ts +19 -14
  78. package/src/dev/sc-server.d.ts +1 -1
  79. package/src/dev/sc-server.js +1 -1
  80. package/src/eco/README.md +70 -16
  81. package/src/eco/eco.browser.d.ts +2 -0
  82. package/src/eco/eco.browser.js +83 -0
  83. package/src/eco/eco.js +32 -57
  84. package/src/eco/eco.types.d.ts +12 -4
  85. package/src/eco/eco.utils.d.ts +1 -40
  86. package/src/eco/eco.utils.js +5 -35
  87. package/src/eco/global-injector-map.d.ts +1 -1
  88. package/src/eco/lazy-injector-map.d.ts +1 -1
  89. package/src/hmr/README.md +26 -0
  90. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  91. package/src/hmr/client/hmr-runtime.js +30 -7
  92. package/src/hmr/hmr-strategy.d.ts +16 -13
  93. package/src/hmr/hmr-strategy.js +22 -7
  94. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  95. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  96. package/src/hmr/hmr.test.e2e.js +26 -33
  97. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  98. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  99. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -43
  100. package/src/hmr/strategies/js-hmr-strategy.js +72 -73
  101. package/src/index.browser.d.ts +2 -2
  102. package/src/index.browser.js +1 -1
  103. package/src/index.d.ts +4 -3
  104. package/src/index.js +16 -5
  105. package/src/integrations/ghtml/ghtml-renderer.d.ts +7 -2
  106. package/src/integrations/ghtml/ghtml-renderer.js +33 -30
  107. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  108. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  109. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  110. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  111. package/src/plugins/README.md +35 -0
  112. package/src/plugins/alias-resolver-plugin.js +17 -3
  113. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  114. package/src/plugins/eco-component-meta-plugin.js +27 -21
  115. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  116. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  117. package/src/plugins/integration-plugin.d.ts +145 -28
  118. package/src/plugins/integration-plugin.js +109 -13
  119. package/src/plugins/processor.d.ts +15 -2
  120. package/src/plugins/processor.js +16 -2
  121. package/src/plugins/runtime-capability.d.ts +9 -0
  122. package/src/plugins/source-transform.d.ts +46 -0
  123. package/src/plugins/source-transform.js +71 -0
  124. package/src/route-renderer/GRAPH.md +64 -98
  125. package/src/route-renderer/README.md +67 -46
  126. package/src/route-renderer/orchestration/boundary-planning.service.d.ts +25 -0
  127. package/src/route-renderer/orchestration/boundary-planning.service.js +97 -0
  128. package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
  129. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  130. package/src/route-renderer/orchestration/integration-renderer.d.ts +554 -0
  131. package/src/route-renderer/orchestration/integration-renderer.js +957 -0
  132. package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +89 -0
  133. package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
  134. package/src/route-renderer/orchestration/render-execution.service.d.ts +43 -0
  135. package/src/route-renderer/orchestration/render-execution.service.js +106 -0
  136. package/src/{eco/eco.utils.ts → route-renderer/orchestration/render-output.utils.d.ts} +10 -53
  137. package/src/route-renderer/orchestration/render-output.utils.js +65 -0
  138. package/src/route-renderer/{render-preparation.service.d.ts → orchestration/render-preparation.service.d.ts} +18 -10
  139. package/src/route-renderer/{render-preparation.service.js → orchestration/render-preparation.service.js} +115 -17
  140. package/src/route-renderer/orchestration/route-shell-composer.service.d.ts +50 -0
  141. package/src/route-renderer/orchestration/route-shell-composer.service.js +81 -0
  142. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  143. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  144. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  145. package/src/route-renderer/{dependency-resolver.js → page-loading/dependency-resolver.js} +28 -12
  146. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  147. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  148. package/src/route-renderer/route-renderer.d.ts +45 -4
  149. package/src/route-renderer/route-renderer.js +38 -3
  150. package/src/router/README.md +97 -0
  151. package/src/router/client/link-intent.d.ts +53 -0
  152. package/src/router/client/link-intent.js +34 -0
  153. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  154. package/src/router/client/link-intent.test.browser.js +43 -0
  155. package/src/router/client/navigation-coordinator.d.ts +149 -0
  156. package/src/router/client/navigation-coordinator.js +215 -0
  157. package/src/router/{fs-router-scanner.d.ts → server/fs-router-scanner.d.ts} +3 -3
  158. package/src/router/{fs-router-scanner.js → server/fs-router-scanner.js} +14 -8
  159. package/src/router/{fs-router.d.ts → server/fs-router.d.ts} +1 -1
  160. package/src/router/{fs-router.js → server/fs-router.js} +1 -1
  161. package/src/services/README.md +29 -0
  162. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
  163. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +91 -10
  164. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  165. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  166. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +2 -1
  167. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  168. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
  169. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  170. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  171. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  172. package/src/services/assets/asset-processing-service/index.js +5 -0
  173. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  174. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  175. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  176. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +9 -4
  177. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.d.ts +5 -4
  178. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.js +15 -23
  179. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  180. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  181. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +2 -2
  182. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.js +1 -1
  183. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  184. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +16 -4
  185. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
  186. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +6 -5
  187. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
  188. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.js +1 -1
  189. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  190. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +5 -2
  191. package/src/services/assets/browser-bundle.service.d.ts +32 -0
  192. package/src/services/assets/browser-bundle.service.js +33 -0
  193. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  194. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  195. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  196. package/src/services/html/html-rewriter-provider.service.js +68 -0
  197. package/src/services/html/html-transformer.service.d.ts +77 -0
  198. package/src/services/html/html-transformer.service.js +215 -0
  199. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  200. package/src/services/invalidation/development-invalidation.service.js +190 -0
  201. package/src/services/module-loading/app-module-loader.service.d.ts +28 -0
  202. package/src/services/module-loading/app-module-loader.service.js +35 -0
  203. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  204. package/src/services/module-loading/app-server-module-transpiler.service.js +109 -0
  205. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  206. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  207. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  208. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  209. package/src/services/module-loading/node-bootstrap-plugin.js +204 -0
  210. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  211. package/src/services/module-loading/page-module-import.service.js +173 -0
  212. package/src/services/module-loading/server-module-transpiler.service.d.ts +72 -0
  213. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  214. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  215. package/src/services/runtime-state/dev-graph.service.js +162 -0
  216. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  217. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  218. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  219. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  220. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  221. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  222. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  223. package/src/static-site-generator/README.md +26 -0
  224. package/src/static-site-generator/static-site-generator.d.ts +50 -3
  225. package/src/static-site-generator/static-site-generator.js +71 -5
  226. package/src/{internal-types.d.ts → types/internal-types.d.ts} +53 -22
  227. package/src/types/internal-types.js +0 -0
  228. package/src/{public-types.d.ts → types/public-types.d.ts} +146 -21
  229. package/src/types/public-types.js +0 -0
  230. package/src/utils/html-escaping.d.ts +7 -0
  231. package/src/utils/html-escaping.js +6 -0
  232. package/src/utils/locals-utils.d.ts +1 -1
  233. package/src/utils/parse-cli-args.d.ts +4 -1
  234. package/src/utils/parse-cli-args.js +16 -1
  235. package/src/utils/resolve-work-dir.d.ts +11 -0
  236. package/src/utils/resolve-work-dir.js +31 -0
  237. package/src/watchers/project-watcher.d.ts +40 -24
  238. package/src/watchers/project-watcher.js +129 -92
  239. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  240. package/src/watchers/project-watcher.test-helpers.js +1 -0
  241. package/src/adapters/abstract/application-adapter.ts +0 -337
  242. package/src/adapters/abstract/router-adapter.ts +0 -30
  243. package/src/adapters/abstract/server-adapter.ts +0 -79
  244. package/src/adapters/bun/client-bridge.ts +0 -62
  245. package/src/adapters/bun/create-app.ts +0 -189
  246. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  247. package/src/adapters/bun/define-api-handler.ts +0 -114
  248. package/src/adapters/bun/hmr-manager.ts +0 -281
  249. package/src/adapters/bun/index.ts +0 -3
  250. package/src/adapters/bun/server-adapter.ts +0 -492
  251. package/src/adapters/bun/server-lifecycle.ts +0 -154
  252. package/src/adapters/index.ts +0 -6
  253. package/src/adapters/node/create-app.ts +0 -179
  254. package/src/adapters/node/index.d.ts +0 -4
  255. package/src/adapters/node/index.js +0 -8
  256. package/src/adapters/node/index.ts +0 -9
  257. package/src/adapters/node/node-client-bridge.ts +0 -79
  258. package/src/adapters/node/node-hmr-manager.ts +0 -271
  259. package/src/adapters/node/server-adapter.ts +0 -561
  260. package/src/adapters/node/static-content-server.ts +0 -203
  261. package/src/adapters/shared/api-response.ts +0 -104
  262. package/src/adapters/shared/application-adapter.ts +0 -199
  263. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  264. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  265. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  266. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  267. package/src/adapters/shared/render-context.ts +0 -105
  268. package/src/adapters/shared/server-adapter.ts +0 -442
  269. package/src/adapters/shared/server-route-handler.ts +0 -166
  270. package/src/adapters/shared/server-static-builder.ts +0 -82
  271. package/src/build/build-adapter.ts +0 -132
  272. package/src/build/build-types.ts +0 -83
  273. package/src/build/esbuild-build-adapter.ts +0 -510
  274. package/src/config/config-builder.ts +0 -474
  275. package/src/constants.ts +0 -39
  276. package/src/create-app.ts +0 -87
  277. package/src/define-api-handler.js +0 -15
  278. package/src/define-api-handler.ts +0 -66
  279. package/src/dev/sc-server.ts +0 -143
  280. package/src/eco/component-render-context.d.ts +0 -105
  281. package/src/eco/component-render-context.js +0 -77
  282. package/src/eco/component-render-context.ts +0 -202
  283. package/src/eco/eco.ts +0 -221
  284. package/src/eco/eco.types.ts +0 -202
  285. package/src/eco/global-injector-map.ts +0 -112
  286. package/src/eco/lazy-injector-map.ts +0 -120
  287. package/src/eco/module-dependencies.ts +0 -75
  288. package/src/errors/http-error.ts +0 -72
  289. package/src/errors/index.ts +0 -2
  290. package/src/errors/locals-access-error.ts +0 -7
  291. package/src/global/app-logger.ts +0 -4
  292. 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
  293. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  294. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  295. package/src/hmr/client/hmr-runtime.ts +0 -121
  296. package/src/hmr/hmr-strategy.ts +0 -172
  297. package/src/hmr/hmr.test.e2e.ts +0 -75
  298. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  299. package/src/hmr/strategies/js-hmr-strategy.ts +0 -308
  300. package/src/index.browser.ts +0 -3
  301. package/src/index.ts +0 -5
  302. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  303. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  304. package/src/internal-types.ts +0 -212
  305. package/src/plugins/alias-resolver-plugin.ts +0 -45
  306. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  307. package/src/plugins/integration-plugin.ts +0 -184
  308. package/src/plugins/processor.ts +0 -220
  309. package/src/public-types.ts +0 -1255
  310. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  311. package/src/route-renderer/component-graph-executor.js +0 -31
  312. package/src/route-renderer/component-graph-executor.ts +0 -84
  313. package/src/route-renderer/component-graph.d.ts +0 -42
  314. package/src/route-renderer/component-graph.js +0 -72
  315. package/src/route-renderer/component-graph.ts +0 -159
  316. package/src/route-renderer/component-marker.d.ts +0 -52
  317. package/src/route-renderer/component-marker.js +0 -46
  318. package/src/route-renderer/component-marker.ts +0 -117
  319. package/src/route-renderer/dependency-resolver.ts +0 -596
  320. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  321. package/src/route-renderer/html-post-processing.service.js +0 -86
  322. package/src/route-renderer/html-post-processing.service.ts +0 -103
  323. package/src/route-renderer/integration-renderer.d.ts +0 -339
  324. package/src/route-renderer/integration-renderer.js +0 -526
  325. package/src/route-renderer/integration-renderer.ts +0 -696
  326. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  327. package/src/route-renderer/marker-graph-resolver.js +0 -93
  328. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  329. package/src/route-renderer/page-module-loader.d.ts +0 -61
  330. package/src/route-renderer/page-module-loader.ts +0 -153
  331. package/src/route-renderer/render-execution.service.d.ts +0 -69
  332. package/src/route-renderer/render-execution.service.js +0 -91
  333. package/src/route-renderer/render-execution.service.ts +0 -158
  334. package/src/route-renderer/render-preparation.service.ts +0 -358
  335. package/src/route-renderer/route-renderer.ts +0 -80
  336. package/src/router/fs-router-scanner.ts +0 -217
  337. package/src/router/fs-router.ts +0 -122
  338. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  339. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  340. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  341. package/src/services/asset-processing-service/assets.types.ts +0 -112
  342. package/src/services/asset-processing-service/index.d.ts +0 -3
  343. package/src/services/asset-processing-service/index.js +0 -3
  344. package/src/services/asset-processing-service/index.ts +0 -3
  345. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  346. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  347. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  348. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  349. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  350. package/src/services/asset-processing-service/processors/index.js +0 -5
  351. package/src/services/asset-processing-service/processors/index.ts +0 -5
  352. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  353. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  354. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  355. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  356. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  357. package/src/services/cache/cache.types.ts +0 -126
  358. package/src/services/cache/index.ts +0 -18
  359. package/src/services/cache/memory-cache-store.ts +0 -130
  360. package/src/services/cache/page-cache-service.ts +0 -202
  361. package/src/services/html-transformer.service.d.ts +0 -50
  362. package/src/services/html-transformer.service.js +0 -163
  363. package/src/services/html-transformer.service.ts +0 -217
  364. package/src/services/page-module-import.service.d.ts +0 -37
  365. package/src/services/page-module-import.service.js +0 -88
  366. package/src/services/page-module-import.service.ts +0 -129
  367. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  368. package/src/services/schema-validation-service.ts +0 -204
  369. package/src/services/validation/standard-schema.types.ts +0 -68
  370. package/src/static-site-generator/static-site-generator.ts +0 -359
  371. package/src/utils/css.d.ts +0 -1
  372. package/src/utils/css.js +0 -7
  373. package/src/utils/css.ts +0 -5
  374. package/src/utils/deep-merge.ts +0 -47
  375. package/src/utils/hash.ts +0 -5
  376. package/src/utils/html.ts +0 -1
  377. package/src/utils/invariant.ts +0 -15
  378. package/src/utils/locals-utils.ts +0 -37
  379. package/src/utils/parse-cli-args.ts +0 -83
  380. package/src/utils/path-utils.module.ts +0 -14
  381. package/src/utils/runtime.ts +0 -44
  382. package/src/utils/server-utils.module.ts +0 -67
  383. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  384. package/src/watchers/project-watcher.ts +0 -306
  385. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  386. /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
  387. /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
  388. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  389. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  390. /package/src/{public-types.js → services/module-loading/module-loading-types.js} +0 -0
  391. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,75 +0,0 @@
1
- export type ModuleDependencyDeclaration = {
2
- from: string;
3
- imports?: string[];
4
- };
5
-
6
- function normalizeImports(imports: string[] | undefined): string[] | undefined {
7
- if (!imports || imports.length === 0) {
8
- return undefined;
9
- }
10
-
11
- const normalized = Array.from(new Set(imports.map((entry) => entry.trim()).filter((entry) => entry.length > 0)));
12
-
13
- return normalized.length > 0 ? normalized : undefined;
14
- }
15
-
16
- /**
17
- * Parses a module grammar declaration into normalized object form.
18
- *
19
- * Supported input examples:
20
- * - `react-aria-components`
21
- * - `react-aria-components{Table,Select}`
22
- */
23
- export function parseModuleDeclaration(value: string): ModuleDependencyDeclaration {
24
- const source = value.trim();
25
- if (source.length === 0) {
26
- throw new Error('Module declaration cannot be empty');
27
- }
28
-
29
- const openBraceIndex = source.indexOf('{');
30
- if (openBraceIndex < 0) {
31
- return { from: source };
32
- }
33
-
34
- const closeBraceIndex = source.lastIndexOf('}');
35
- if (closeBraceIndex !== source.length - 1 || closeBraceIndex <= openBraceIndex) {
36
- throw new Error(`Invalid module declaration '${value}'`);
37
- }
38
-
39
- const from = source.slice(0, openBraceIndex).trim();
40
- if (from.length === 0) {
41
- throw new Error(`Invalid module declaration '${value}'`);
42
- }
43
-
44
- const importsSlice = source.slice(openBraceIndex + 1, closeBraceIndex);
45
- const imports = normalizeImports(importsSlice.split(','));
46
-
47
- return {
48
- from,
49
- imports,
50
- };
51
- }
52
-
53
- /**
54
- * Normalizes and deduplicates module declarations from `modules`.
55
- *
56
- * Returns canonical object declarations suitable for downstream bundling logic.
57
- */
58
- export function normalizeModuleDeclarations(modules?: string[]): ModuleDependencyDeclaration[] {
59
- const declarations = modules ?? [];
60
-
61
- const output: ModuleDependencyDeclaration[] = [];
62
- const seen = new Set<string>();
63
-
64
- for (const declaration of declarations) {
65
- const normalized = parseModuleDeclaration(declaration);
66
- const key = `${normalized.from}::${(normalized.imports ?? []).join(',')}`;
67
-
68
- if (!seen.has(key)) {
69
- seen.add(key);
70
- output.push(normalized);
71
- }
72
- }
73
-
74
- return output;
75
- }
@@ -1,72 +0,0 @@
1
- export interface HttpErrorDetails {
2
- [key: string]: unknown;
3
- }
4
-
5
- export interface HttpErrorJson {
6
- error: string;
7
- status: number;
8
- details?: HttpErrorDetails;
9
- }
10
-
11
- /**
12
- * HTTP error class for structured error handling in route handlers.
13
- * Provides static factory methods for common HTTP error responses.
14
- */
15
- export class HttpError extends Error {
16
- readonly status: number;
17
- readonly details?: HttpErrorDetails;
18
-
19
- constructor(status: number, message: string, details?: HttpErrorDetails) {
20
- super(message);
21
- this.name = 'HttpError';
22
- this.status = status;
23
- this.details = details;
24
- }
25
-
26
- /**
27
- * Serialize error to JSON for API responses.
28
- */
29
- toJSON(): HttpErrorJson {
30
- const json: HttpErrorJson = {
31
- error: this.message,
32
- status: this.status,
33
- };
34
-
35
- if (this.details) {
36
- json.details = this.details;
37
- }
38
-
39
- return json;
40
- }
41
-
42
- /**
43
- * Create a Response object from this error.
44
- */
45
- toResponse(): Response {
46
- return Response.json(this.toJSON(), { status: this.status });
47
- }
48
-
49
- static BadRequest(message = 'Bad Request', details?: HttpErrorDetails): HttpError {
50
- return new HttpError(400, message, details);
51
- }
52
-
53
- static Unauthorized(message = 'Unauthorized'): HttpError {
54
- return new HttpError(401, message);
55
- }
56
-
57
- static Forbidden(message = 'Forbidden'): HttpError {
58
- return new HttpError(403, message);
59
- }
60
-
61
- static NotFound(message = 'Not Found'): HttpError {
62
- return new HttpError(404, message);
63
- }
64
-
65
- static Conflict(message = 'Conflict', details?: HttpErrorDetails): HttpError {
66
- return new HttpError(409, message, details);
67
- }
68
-
69
- static InternalServerError(message = 'Internal Server Error'): HttpError {
70
- return new HttpError(500, message);
71
- }
72
- }
@@ -1,2 +0,0 @@
1
- export { HttpError } from './http-error.ts';
2
- export type { HttpErrorDetails, HttpErrorJson } from './http-error.ts';
@@ -1,7 +0,0 @@
1
- export class LocalsAccessError extends Error {
2
- override name = 'LocalsAccessError';
3
-
4
- constructor(message: string) {
5
- super(message);
6
- }
7
- }
@@ -1,4 +0,0 @@
1
- import { Logger } from '@ecopages/logger';
2
-
3
- const debug = process.env.ECOPAGES_LOGGER_DEBUG === 'true';
4
- export const appLogger = new Logger('[@ecopages/core]', { debug });
@@ -1,121 +0,0 @@
1
- /**
2
- * Ecopages HMR Runtime
3
- * Injected into the browser to handle Hot Module Replacement updates.
4
- */
5
-
6
- interface HMRPayload {
7
- type: 'reload' | 'error' | 'update' | 'css-update' | 'layout-update';
8
- path?: string;
9
- message?: string;
10
- timestamp?: number;
11
- }
12
-
13
- (function () {
14
- const WS_URL = 'ws://' + location.host + '/_hmr';
15
- let socket: WebSocket;
16
- let reconnectAttempts = 0;
17
-
18
- function connect() {
19
- socket = new WebSocket(WS_URL);
20
-
21
- socket.addEventListener('open', () => {
22
- console.log('[ecopages] HMR Connected');
23
- reconnectAttempts = 0;
24
- });
25
-
26
- socket.addEventListener('message', async (event) => {
27
- try {
28
- const payload: HMRPayload = JSON.parse(event.data);
29
- handleMessage(payload);
30
- } catch (e) {
31
- console.error('[ecopages] Invalid HMR message:', e);
32
- }
33
- });
34
-
35
- socket.addEventListener('close', () => {
36
- if (reconnectAttempts < 10) {
37
- setTimeout(connect, 1000 * 2 ** reconnectAttempts);
38
- reconnectAttempts++;
39
- }
40
- });
41
- }
42
-
43
- async function handleMessage(payload: HMRPayload) {
44
- switch (payload.type) {
45
- case 'reload':
46
- location.reload();
47
- break;
48
- case 'layout-update': {
49
- const reloadFn = window.__ecopages_reload_current_page__;
50
- if (typeof reloadFn === 'function') {
51
- await reloadFn({ clearCache: true });
52
- } else {
53
- location.reload();
54
- }
55
- break;
56
- }
57
- case 'error':
58
- console.error('[ecopages] HMR Error:', payload.message);
59
- break;
60
- case 'update':
61
- if (payload.path) {
62
- await applyUpdate(payload.path, payload.timestamp);
63
- }
64
- break;
65
- case 'css-update':
66
- if (payload.path) {
67
- refreshStylesheet(payload.path);
68
- }
69
- break;
70
- }
71
- }
72
-
73
- /**
74
- * Applies a module update by calling registered HMR handlers or re-importing the module.
75
- * @param path - The module path to update
76
- * @param timestamp - Optional timestamp for cache busting
77
- */
78
- async function applyUpdate(path: string, timestamp?: number) {
79
- try {
80
- const url = path + '?t=' + (timestamp || Date.now());
81
- const handlers = window.__ecopages_hmr_handlers__;
82
-
83
- if (handlers?.[path]) {
84
- await handlers[path](url);
85
- return;
86
- }
87
-
88
- await import(url);
89
-
90
- // If we're inside the EcoRouter, we need to trigger a router navigation to render the new component.
91
- // Passing clearCache: false preserves the persisted layout cache.
92
- const reloadFn = window.__ecopages_reload_current_page__;
93
- if (typeof reloadFn === 'function') {
94
- await reloadFn({ clearCache: false });
95
- }
96
- } catch (e) {
97
- console.error('[ecopages] Failed to apply HMR update:', e);
98
- }
99
- }
100
-
101
- /**
102
- * Hot-reload CSS by updating stylesheet link href with cache-busting query param.
103
- * This causes the browser to re-fetch the stylesheet without a full page reload.
104
- */
105
- function refreshStylesheet(path: string) {
106
- const filename = path.split('/').pop() || '';
107
- const links = document.querySelectorAll('link[rel="stylesheet"]');
108
-
109
- links.forEach((link) => {
110
- const href = (link as HTMLLinkElement).href;
111
- if (href.includes(filename) || href.includes(path.replace(/^.*\/src\//, '/assets/'))) {
112
- const url = new URL(href, location.origin);
113
- url.searchParams.set('t', Date.now().toString());
114
- (link as HTMLLinkElement).href = url.toString();
115
- console.log('[ecopages] CSS updated:', filename);
116
- }
117
- });
118
- }
119
-
120
- connect();
121
- })();
@@ -1,172 +0,0 @@
1
- import type { ClientBridgeEvent } from '../public-types';
2
-
3
- /**
4
- * HMR Strategy Pattern
5
- *
6
- * This module defines the base classes and types for Hot Module Replacement strategies.
7
- * Each strategy handles a specific type of file change and determines how to process it.
8
- *
9
- * @module
10
- * @example
11
- * ```typescript
12
- * class CustomHmrStrategy extends HmrStrategy {
13
- * readonly type = HmrStrategyType.INTEGRATION;
14
- *
15
- * matches(filePath: string): boolean {
16
- * return filePath.endsWith('.custom');
17
- * }
18
- *
19
- * async process(filePath: string): Promise<HmrAction> {
20
- * return {
21
- * type: 'broadcast',
22
- * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
23
- * };
24
- * }
25
- * }
26
-
27
- * Defines the category of an HMR strategy, which determines its execution priority.
28
- * Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
29
- *
30
- * @remarks
31
- * The numeric values represent base priorities. Strategies can fine-tune their priority
32
- * using the `priorityOffset` property.
33
- */
34
- export enum HmrStrategyType {
35
- /**
36
- * Integration-specific strategies (React, Lit, etc.)
37
- * Highest priority to allow framework-specific HMR handling.
38
- */
39
- INTEGRATION = 100,
40
-
41
- /**
42
- * Asset processing strategies (CSS, images, etc.)
43
- * High priority for specialized asset handling.
44
- */
45
- ASSET = 50,
46
-
47
- /**
48
- * Generic script bundling strategies (JS/TS)
49
- * Medium priority for standard script processing.
50
- */
51
- SCRIPT = 25,
52
-
53
- /**
54
- * Fallback strategy for unhandled file types.
55
- * Lowest priority, triggers full page reload.
56
- */
57
- FALLBACK = 0,
58
- }
59
-
60
- /**
61
- * Represents an action to be taken after processing a file change.
62
- */
63
- export interface HmrAction {
64
- /**
65
- * Whether to broadcast an HMR event to connected clients.
66
- */
67
- type: 'broadcast' | 'none';
68
-
69
- /**
70
- * The HMR events to broadcast, if type is 'broadcast'.
71
- * capable of broadcasting multiple events at once.
72
- */
73
- events?: ClientBridgeEvent[];
74
- }
75
-
76
- /**
77
- * Base class for HMR strategies.
78
- *
79
- * Each strategy handles a specific type of file change and determines how to process it.
80
- * Strategies are selected based on their priority (higher values are evaluated first) and
81
- * whether they match the changed file path.
82
- *
83
- * @remarks
84
- * Strategies should be stateless and idempotent. The same file change should always
85
- * produce the same result when processed by the same strategy.
86
- *
87
- * @example
88
- * ```typescript
89
- * class MyAssetStrategy extends HmrStrategy {
90
- * readonly type = HmrStrategyType.ASSET;
91
- * readonly priorityOffset = 5;
92
- *
93
- * matches(filePath: string): boolean {
94
- * return /\.(png|jpg|svg)$/.test(filePath);
95
- * }
96
- *
97
- * async process(filePath: string): Promise<HmrAction> {
98
- * await this.optimizeImage(filePath);
99
- * return {
100
- * type: 'broadcast',
101
- * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
102
- * };
103
- * }
104
- * }
105
- * ```
106
- */
107
- export abstract class HmrStrategy {
108
- /**
109
- * The category of this strategy, determining its base priority.
110
- */
111
- abstract readonly type: HmrStrategyType;
112
-
113
- /**
114
- * Optional offset to fine-tune priority within the same category.
115
- * Useful when multiple strategies share the same type.
116
- *
117
- * @defaultValue 0
118
- */
119
- readonly priorityOffset: number = 0;
120
-
121
- /**
122
- * Computed priority for strategy selection.
123
- * Higher values are evaluated first.
124
- *
125
- * @returns The sum of the strategy type and priority offset
126
- */
127
- get priority(): number {
128
- return this.type + this.priorityOffset;
129
- }
130
-
131
- /**
132
- * Determines if this strategy can handle the given file path.
133
- *
134
- * @param filePath - Absolute path to the changed file
135
- * @returns True if this strategy should process the file
136
- *
137
- * @example
138
- * ```typescript
139
- * matches(filePath: string): boolean {
140
- * return filePath.endsWith('.css');
141
- * }
142
- * ```
143
- */
144
- abstract matches(filePath: string): boolean;
145
-
146
- /**
147
- * Processes a file change and returns the action to take.
148
- *
149
- * This method may perform side effects such as:
150
- * - Rebuilding files
151
- * - Writing to disk
152
- * - Transforming code
153
- * - Updating caches
154
- *
155
- * @param filePath - Absolute path to the changed file
156
- * @returns Action to take (broadcast event or none)
157
- *
158
- * @example
159
- * ```typescript
160
- * async process(filePath: string): Promise<HmrAction> {
161
- * const processed = await this.transform(filePath);
162
- * await Bun.write(outputPath, processed);
163
- *
164
- * return {
165
- * type: 'broadcast',
166
- * events: [{ type: 'update', path: outputPath, timestamp: Date.now() }]
167
- * };
168
- * }
169
- * ```
170
- */
171
- abstract process(filePath: string): Promise<HmrAction>;
172
- }
@@ -1,75 +0,0 @@
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
-
6
- /**
7
- * HMR E2E Tests
8
- *
9
- * True end-to-end tests for Hot Module Replacement using Playwright.
10
- * These tests modify actual source files and verify the browser updates.
11
- *
12
- * Run with: bunx playwright test packages/core/src/hmr/hmr.e2e.test.ts
13
- */
14
-
15
- const FIXTURE_DIR = resolve(process.cwd(), 'packages/core/__fixtures__/app');
16
- const TEST_CSS_FILE = resolve(FIXTURE_DIR, 'src/pages/index.css');
17
- const BUILT_CSS_FILE = resolve(FIXTURE_DIR, '.eco/assets/pages/index.css');
18
- const TEST_URL = 'http://localhost:3002';
19
-
20
- test.describe('HMR E2E', () => {
21
- test('should load page with .main-title element', async ({ page }) => {
22
- await page.goto(TEST_URL, { waitUntil: 'networkidle' });
23
- const title = page.locator('.main-title').first();
24
- await expect(title).toBeVisible();
25
- });
26
-
27
- test('should connect to HMR WebSocket', async ({ page }) => {
28
- await page.goto(TEST_URL);
29
-
30
- const connected = await page.evaluate(async () => {
31
- return new Promise<boolean>((resolve) => {
32
- const ws = new WebSocket('ws://localhost:3002/_hmr');
33
- ws.onopen = () => {
34
- ws.close();
35
- resolve(true);
36
- };
37
- ws.onerror = () => resolve(false);
38
- setTimeout(() => resolve(false), 5000);
39
- });
40
- });
41
-
42
- expect(connected).toBe(true);
43
- });
44
-
45
- test('should reload page when CSS file changes', async ({ page }) => {
46
- const originalCss = readFileSync(TEST_CSS_FILE, 'utf-8');
47
-
48
- await page.goto(TEST_URL, { waitUntil: 'networkidle' });
49
-
50
- const initialColor = await page.evaluate(() => {
51
- const el = document.querySelector('.main-title');
52
- return el ? getComputedStyle(el).color : null;
53
- });
54
-
55
- expect(initialColor).toBeTruthy();
56
-
57
- const modifiedCss = originalCss.replace('.main-title {', '.main-title {\n\tcolor: rgb(255, 0, 0);');
58
-
59
- const loadPromise = page.waitForEvent('load', { timeout: 10000 });
60
-
61
- await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
62
- await writeFile(BUILT_CSS_FILE, modifiedCss, { flush: true });
63
-
64
- await loadPromise;
65
-
66
- const updatedColor = await page.evaluate(() => {
67
- const el = document.querySelector('.main-title');
68
- return el ? getComputedStyle(el).color : null;
69
- });
70
-
71
- expect(updatedColor).toBe('rgb(255, 0, 0)');
72
-
73
- await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
74
- });
75
- });
@@ -1,60 +0,0 @@
1
- /**
2
- * Default HMR Strategy
3
- *
4
- * Fallback strategy for file types that don't have specialized handling.
5
- * Triggers a full page reload to ensure changes are reflected.
6
- *
7
- * @module
8
- */
9
-
10
- import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
11
-
12
- /**
13
- * Default fallback strategy for unhandled file types.
14
- *
15
- * This strategy matches all files and triggers a full page reload.
16
- * It has the lowest priority (FALLBACK) and acts as a catch-all when
17
- * no other strategy matches the changed file.
18
- *
19
- * @remarks
20
- * This strategy ensures that all file changes result in some action,
21
- * even if we don't have specialized handling for that file type.
22
- *
23
- * @example
24
- * ```typescript
25
- * const strategy = new DefaultHmrStrategy();
26
- * const action = await strategy.process('/path/to/unknown.file');
27
- * ```
28
- */
29
- export class DefaultHmrStrategy extends HmrStrategy {
30
- readonly type = HmrStrategyType.FALLBACK;
31
-
32
- /**
33
- * Matches all file paths.
34
- *
35
- * @param _filePath - Absolute path to the changed file (unused)
36
- * @returns Always returns true as this is a catch-all strategy
37
- */
38
- matches(_filePath: string): boolean {
39
- return true;
40
- }
41
-
42
- /**
43
- * Processes a file change by triggering a full page reload.
44
- *
45
- * @param filePath - Absolute path to the changed file
46
- * @returns Action to broadcast a reload event
47
- */
48
- async process(filePath: string): Promise<HmrAction> {
49
- return {
50
- type: 'broadcast',
51
- events: [
52
- {
53
- type: 'reload',
54
- path: filePath,
55
- message: 'fallback-strategy',
56
- },
57
- ],
58
- };
59
- }
60
- }