@ecopages/core 0.2.0-alpha.7 → 0.2.0-alpha.8

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 (354) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/package.json +212 -92
  3. package/src/adapters/abstract/application-adapter.d.ts +168 -0
  4. package/src/adapters/abstract/application-adapter.js +109 -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 +60 -0
  12. package/src/adapters/bun/create-app.js +117 -0
  13. package/src/adapters/bun/hmr-manager.d.ts +143 -0
  14. package/src/adapters/bun/hmr-manager.js +334 -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 +373 -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/index.d.ts +6 -0
  22. package/src/adapters/index.js +14 -0
  23. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +44 -0
  24. package/src/adapters/node/bootstrap-dependency-resolver.js +172 -0
  25. package/src/adapters/node/create-app.d.ts +21 -0
  26. package/src/adapters/node/create-app.js +143 -0
  27. package/src/adapters/node/index.d.ts +6 -0
  28. package/src/adapters/node/index.js +11 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  30. package/src/adapters/node/node-client-bridge.js +66 -0
  31. package/src/adapters/node/node-hmr-manager.d.ts +133 -0
  32. package/src/adapters/node/node-hmr-manager.js +312 -0
  33. package/src/adapters/node/runtime-adapter.d.ts +46 -0
  34. package/src/adapters/node/runtime-adapter.js +306 -0
  35. package/src/adapters/node/server-adapter.d.ts +161 -0
  36. package/src/adapters/node/server-adapter.js +358 -0
  37. package/src/adapters/node/static-content-server.d.ts +60 -0
  38. package/src/adapters/node/static-content-server.js +194 -0
  39. package/src/adapters/node/write-runtime-manifest.d.ts +26 -0
  40. package/src/adapters/node/write-runtime-manifest.js +12 -0
  41. package/src/adapters/shared/api-response.d.ts +52 -0
  42. package/src/adapters/shared/api-response.js +96 -0
  43. package/src/adapters/shared/application-adapter.d.ts +18 -0
  44. package/src/adapters/shared/application-adapter.js +90 -0
  45. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  46. package/src/adapters/shared/define-api-handler.js +15 -0
  47. package/src/adapters/shared/explicit-static-route-matcher.d.ts +38 -0
  48. package/src/adapters/shared/explicit-static-route-matcher.js +103 -0
  49. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
  50. package/src/adapters/shared/file-route-middleware-pipeline.js +99 -0
  51. package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
  52. package/src/adapters/shared/fs-server-response-factory.js +97 -0
  53. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  54. package/src/adapters/shared/fs-server-response-matcher.js +160 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  56. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  57. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  58. package/src/adapters/shared/hmr-html-response.js +32 -0
  59. package/src/adapters/shared/render-context.d.ts +14 -0
  60. package/src/adapters/shared/render-context.js +70 -0
  61. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  62. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  63. package/src/adapters/shared/server-adapter.d.ts +97 -0
  64. package/src/adapters/shared/server-adapter.js +386 -0
  65. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  66. package/src/adapters/shared/server-route-handler.js +111 -0
  67. package/src/adapters/shared/server-static-builder.d.ts +70 -0
  68. package/src/adapters/shared/server-static-builder.js +99 -0
  69. package/src/build/build-adapter.d.ts +186 -0
  70. package/src/build/build-adapter.js +168 -0
  71. package/src/build/build-manifest.d.ts +27 -0
  72. package/src/build/build-manifest.js +30 -0
  73. package/src/build/build-types.d.ts +57 -0
  74. package/src/build/build-types.js +0 -0
  75. package/src/build/dev-build-coordinator.d.ts +74 -0
  76. package/src/build/dev-build-coordinator.js +161 -0
  77. package/src/build/esbuild-build-adapter.d.ts +72 -0
  78. package/src/build/esbuild-build-adapter.js +422 -0
  79. package/src/build/runtime-build-executor.d.ts +13 -0
  80. package/src/build/runtime-build-executor.js +20 -0
  81. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  82. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  83. package/src/config/config-builder.d.ts +238 -0
  84. package/src/config/config-builder.js +565 -0
  85. package/src/constants.d.ts +45 -0
  86. package/src/constants.js +25 -0
  87. package/src/create-app.d.ts +17 -0
  88. package/src/create-app.js +66 -0
  89. package/src/dev/sc-server.d.ts +30 -0
  90. package/src/dev/sc-server.js +111 -0
  91. package/src/eco/component-render-context.d.ts +105 -0
  92. package/src/eco/component-render-context.js +87 -0
  93. package/src/eco/eco.d.ts +9 -0
  94. package/src/eco/eco.js +114 -0
  95. package/src/eco/eco.types.d.ts +178 -0
  96. package/src/eco/eco.types.js +0 -0
  97. package/src/eco/eco.utils.d.ts +40 -0
  98. package/src/eco/eco.utils.js +40 -0
  99. package/src/eco/global-injector-map.d.ts +16 -0
  100. package/src/eco/global-injector-map.js +80 -0
  101. package/src/eco/lazy-injector-map.d.ts +8 -0
  102. package/src/eco/lazy-injector-map.js +70 -0
  103. package/src/eco/module-dependencies.d.ts +18 -0
  104. package/src/eco/module-dependencies.js +49 -0
  105. package/src/errors/http-error.d.ts +31 -0
  106. package/src/errors/http-error.js +50 -0
  107. package/src/errors/index.d.ts +2 -0
  108. package/src/errors/index.js +4 -0
  109. package/src/errors/locals-access-error.d.ts +4 -0
  110. package/src/errors/locals-access-error.js +9 -0
  111. package/src/global/app-logger.d.ts +2 -0
  112. package/src/global/app-logger.js +6 -0
  113. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  114. package/src/hmr/client/hmr-runtime.js +109 -0
  115. package/src/hmr/hmr-strategy.d.ts +159 -0
  116. package/src/hmr/hmr-strategy.js +29 -0
  117. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  118. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  119. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  120. package/src/hmr/hmr.test.e2e.js +43 -0
  121. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  122. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  123. package/src/hmr/strategies/js-hmr-strategy.d.ts +139 -0
  124. package/src/hmr/strategies/js-hmr-strategy.js +178 -0
  125. package/src/index.browser.d.ts +3 -0
  126. package/src/index.browser.js +4 -0
  127. package/src/index.d.ts +5 -0
  128. package/src/index.js +10 -0
  129. package/src/integrations/ghtml/ghtml-renderer.d.ts +15 -0
  130. package/src/integrations/ghtml/ghtml-renderer.js +62 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +20 -0
  132. package/src/integrations/ghtml/ghtml.plugin.js +21 -0
  133. package/src/internal-types.d.ts +221 -0
  134. package/src/internal-types.js +0 -0
  135. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  136. package/src/plugins/alias-resolver-plugin.js +53 -0
  137. package/src/plugins/eco-component-meta-plugin.d.ts +97 -0
  138. package/src/plugins/eco-component-meta-plugin.js +157 -0
  139. package/src/plugins/integration-plugin.d.ts +136 -0
  140. package/src/plugins/integration-plugin.js +133 -0
  141. package/src/plugins/processor.d.ts +95 -0
  142. package/src/plugins/processor.js +136 -0
  143. package/src/plugins/runtime-capability.d.ts +9 -0
  144. package/src/plugins/runtime-capability.js +0 -0
  145. package/src/public-types.d.ts +1149 -0
  146. package/src/public-types.js +0 -0
  147. package/src/route-renderer/component-graph/component-graph-executor.d.ts +32 -0
  148. package/src/route-renderer/component-graph/component-graph-executor.js +31 -0
  149. package/src/route-renderer/component-graph/component-graph.d.ts +42 -0
  150. package/src/route-renderer/component-graph/component-graph.js +72 -0
  151. package/src/route-renderer/component-graph/component-marker.d.ts +52 -0
  152. package/src/route-renderer/component-graph/component-marker.js +46 -0
  153. package/src/route-renderer/component-graph/component-reference.d.ts +10 -0
  154. package/src/route-renderer/component-graph/component-reference.js +19 -0
  155. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +77 -0
  156. package/src/route-renderer/component-graph/marker-graph-resolver.js +95 -0
  157. package/src/route-renderer/orchestration/integration-renderer.d.ts +372 -0
  158. package/src/route-renderer/orchestration/integration-renderer.js +589 -0
  159. package/src/route-renderer/orchestration/render-execution.service.d.ts +103 -0
  160. package/src/route-renderer/orchestration/render-execution.service.js +121 -0
  161. package/src/route-renderer/orchestration/render-preparation.service.d.ts +121 -0
  162. package/src/route-renderer/orchestration/render-preparation.service.js +332 -0
  163. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  164. package/src/route-renderer/page-loading/dependency-resolver.js +442 -0
  165. package/src/route-renderer/page-loading/page-module-loader.d.ts +87 -0
  166. package/src/route-renderer/page-loading/page-module-loader.js +124 -0
  167. package/src/route-renderer/route-renderer.d.ts +61 -0
  168. package/src/route-renderer/route-renderer.js +87 -0
  169. package/src/router/client/link-intent.js +34 -0
  170. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  171. package/src/router/client/link-intent.test.browser.js +43 -0
  172. package/src/router/client/navigation-coordinator.d.ts +149 -0
  173. package/src/router/client/navigation-coordinator.js +215 -0
  174. package/src/router/server/fs-router-scanner.d.ts +41 -0
  175. package/src/router/server/fs-router-scanner.js +156 -0
  176. package/src/router/server/fs-router.d.ts +26 -0
  177. package/src/router/server/fs-router.js +100 -0
  178. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
  179. package/src/services/assets/asset-processing-service/asset-processing.service.js +331 -0
  180. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  181. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  182. package/src/services/assets/asset-processing-service/assets.types.d.ts +89 -0
  183. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  184. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  185. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
  186. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  187. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  188. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  189. package/src/services/assets/asset-processing-service/index.js +5 -0
  190. package/src/services/assets/asset-processing-service/processor.interface.d.ts +22 -0
  191. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  192. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  193. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  194. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  195. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +64 -0
  196. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +17 -0
  197. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +72 -0
  198. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  199. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  200. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +5 -0
  201. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +57 -0
  202. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +8 -0
  203. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +76 -0
  204. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  205. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +75 -0
  206. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -0
  207. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +25 -0
  208. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  209. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +66 -0
  210. package/src/services/assets/browser-bundle.service.d.ts +32 -0
  211. package/src/services/assets/browser-bundle.service.js +33 -0
  212. package/src/services/cache/cache.types.d.ts +107 -0
  213. package/src/services/cache/cache.types.js +0 -0
  214. package/src/services/cache/index.d.ts +7 -0
  215. package/src/services/cache/index.js +7 -0
  216. package/src/services/cache/memory-cache-store.d.ts +42 -0
  217. package/src/services/cache/memory-cache-store.js +98 -0
  218. package/src/services/cache/page-cache-service.d.ts +70 -0
  219. package/src/services/cache/page-cache-service.js +152 -0
  220. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  221. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  222. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  223. package/src/services/html/html-rewriter-provider.service.js +65 -0
  224. package/src/services/html/html-transformer.service.d.ts +77 -0
  225. package/src/services/html/html-transformer.service.js +221 -0
  226. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  227. package/src/services/invalidation/development-invalidation.service.js +189 -0
  228. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +16 -0
  229. package/src/services/module-loading/app-server-module-transpiler.service.js +34 -0
  230. package/src/services/module-loading/page-module-import.service.d.ts +71 -0
  231. package/src/services/module-loading/page-module-import.service.js +132 -0
  232. package/src/services/module-loading/server-loader.service.d.ts +96 -0
  233. package/src/services/module-loading/server-loader.service.js +32 -0
  234. package/src/services/module-loading/server-module-transpiler.service.d.ts +69 -0
  235. package/src/services/module-loading/server-module-transpiler.service.js +61 -0
  236. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +35 -0
  237. package/src/services/runtime-manifest/node-runtime-manifest.service.js +60 -0
  238. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  239. package/src/services/runtime-state/dev-graph.service.js +162 -0
  240. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  241. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  242. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  243. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  244. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  245. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  246. package/src/services/validation/schema-validation-service.d.ts +122 -0
  247. package/src/services/validation/schema-validation-service.js +101 -0
  248. package/src/services/validation/standard-schema.types.d.ts +65 -0
  249. package/src/services/validation/standard-schema.types.js +0 -0
  250. package/src/static-site-generator/static-site-generator.d.ts +109 -0
  251. package/src/static-site-generator/static-site-generator.js +353 -0
  252. package/src/utils/css.d.ts +1 -0
  253. package/src/utils/css.js +7 -0
  254. package/src/utils/deep-merge.d.ts +14 -0
  255. package/src/utils/deep-merge.js +32 -0
  256. package/src/utils/hash.d.ts +1 -0
  257. package/src/utils/hash.js +7 -0
  258. package/src/utils/html.d.ts +1 -0
  259. package/src/utils/html.js +4 -0
  260. package/src/utils/invariant.d.ts +5 -0
  261. package/src/utils/invariant.js +11 -0
  262. package/src/utils/locals-utils.d.ts +15 -0
  263. package/src/utils/locals-utils.js +24 -0
  264. package/src/utils/parse-cli-args.d.ts +24 -0
  265. package/src/utils/parse-cli-args.js +47 -0
  266. package/src/utils/path-utils.module.d.ts +5 -0
  267. package/src/utils/path-utils.module.js +14 -0
  268. package/src/utils/resolve-work-dir.d.ts +11 -0
  269. package/src/utils/resolve-work-dir.js +31 -0
  270. package/src/utils/runtime.d.ts +11 -0
  271. package/src/utils/runtime.js +40 -0
  272. package/src/utils/server-utils.module.d.ts +19 -0
  273. package/src/utils/server-utils.module.js +56 -0
  274. package/src/watchers/project-watcher.d.ts +136 -0
  275. package/src/watchers/project-watcher.js +281 -0
  276. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  277. package/src/watchers/project-watcher.test-helpers.js +52 -0
  278. package/src/adapters/bun/hmr-manager.test.ts +0 -267
  279. package/src/adapters/node/bootstrap-dependency-resolver.test.ts +0 -282
  280. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  281. package/src/adapters/node/node-hmr-manager.test.ts +0 -322
  282. package/src/adapters/node/runtime-adapter.test.ts +0 -868
  283. package/src/adapters/node/static-content-server.test.ts +0 -60
  284. package/src/adapters/shared/api-response.test.ts +0 -97
  285. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  286. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -90
  287. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -187
  288. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -286
  289. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -196
  290. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
  291. package/src/adapters/shared/render-context.test.ts +0 -146
  292. package/src/adapters/shared/server-adapter.test.ts +0 -77
  293. package/src/adapters/shared/server-route-handler.test.ts +0 -110
  294. package/src/adapters/shared/server-static-builder.test.ts +0 -316
  295. package/src/build/build-adapter-serialization.test.ts +0 -268
  296. package/src/build/build-adapter.test.ts +0 -815
  297. package/src/build/runtime-specifier-alias-plugin.test.ts +0 -43
  298. package/src/config/config-builder.test.ts +0 -410
  299. package/src/eco/eco.test.ts +0 -678
  300. package/src/eco/eco.utils.test.ts +0 -124
  301. package/src/eco/global-injector-map.test.ts +0 -42
  302. package/src/eco/lazy-injector-map.test.ts +0 -66
  303. package/src/eco/module-dependencies.test.ts +0 -30
  304. package/src/errors/http-error.test.ts +0 -134
  305. package/src/global/utils.test.ts +0 -12
  306. 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
  307. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  308. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  309. package/src/hmr/hmr-strategy.test.ts +0 -124
  310. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -335
  311. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -63
  312. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  313. package/src/plugins/eco-component-meta-plugin.test.ts +0 -380
  314. package/src/plugins/integration-plugin.test.ts +0 -111
  315. package/src/plugins/processor.test.ts +0 -148
  316. package/src/route-renderer/component-graph/component-graph-executor.test.ts +0 -41
  317. package/src/route-renderer/component-graph/component-graph.test.ts +0 -63
  318. package/src/route-renderer/component-graph/component-marker.test.ts +0 -73
  319. package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +0 -135
  320. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -936
  321. package/src/route-renderer/orchestration/render-execution.service.test.ts +0 -97
  322. package/src/route-renderer/orchestration/render-preparation.service.test.ts +0 -235
  323. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -345
  324. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -96
  325. package/src/router/client/navigation-coordinator.test.ts +0 -237
  326. package/src/router/server/fs-router-scanner.test.ts +0 -83
  327. package/src/router/server/fs-router.test.ts +0 -214
  328. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -385
  329. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  330. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -72
  331. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  332. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  333. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -286
  334. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
  335. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -199
  336. package/src/services/assets/browser-bundle.service.test.ts +0 -36
  337. package/src/services/cache/memory-cache-store.test.ts +0 -225
  338. package/src/services/cache/page-cache-service.test.ts +0 -175
  339. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  340. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  341. package/src/services/html/html-transformer.service.test.ts +0 -378
  342. package/src/services/invalidation/development-invalidation.service.test.ts +0 -77
  343. package/src/services/module-loading/page-module-import.service.test.ts +0 -253
  344. package/src/services/module-loading/server-loader.service.test.ts +0 -161
  345. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -115
  346. package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +0 -95
  347. package/src/services/validation/schema-validation-service.test.ts +0 -223
  348. package/src/static-site-generator/static-site-generator.test.ts +0 -307
  349. package/src/utils/deep-merge.test.ts +0 -114
  350. package/src/utils/invariant.test.ts +0 -22
  351. package/src/utils/path-utils.test.ts +0 -15
  352. package/src/utils/server-utils.test.ts +0 -38
  353. package/src/watchers/project-watcher.integration.test.ts +0 -337
  354. package/src/watchers/project-watcher.test.ts +0 -678
@@ -0,0 +1,66 @@
1
+ import { AbstractApplicationAdapter } from "./adapters/abstract/application-adapter.js";
2
+ import { SharedApplicationAdapter } from "./adapters/shared/application-adapter.js";
3
+ async function createRuntimeApp(options) {
4
+ const bun = globalThis.Bun;
5
+ if (bun) {
6
+ const { createApp: createBunApp } = await import("./adapters/bun/create-app.js");
7
+ return await createBunApp(options);
8
+ }
9
+ const { createNodeApp } = await import("./adapters/node/create-app.js");
10
+ return await createNodeApp(options);
11
+ }
12
+ async function createApp(options) {
13
+ return createRuntimeApp(options);
14
+ }
15
+ class EcopagesApp extends SharedApplicationAdapter {
16
+ appOptions;
17
+ runtimeApp = null;
18
+ runtimeAppPromise = null;
19
+ constructor(options) {
20
+ super(options);
21
+ this.appOptions = options;
22
+ }
23
+ async getRuntimeApp() {
24
+ if (this.runtimeApp) {
25
+ return this.runtimeApp;
26
+ }
27
+ if (!this.runtimeAppPromise) {
28
+ this.runtimeAppPromise = createRuntimeApp({
29
+ ...this.appOptions,
30
+ clearOutput: false
31
+ }).then((app) => {
32
+ for (const handler of this.apiHandlers) {
33
+ app.add(handler);
34
+ }
35
+ for (const route of this.staticRoutes) {
36
+ app.static(route.path, route.loader);
37
+ }
38
+ if (this.errorHandler) {
39
+ app.onError(this.errorHandler);
40
+ }
41
+ this.runtimeApp = app;
42
+ return app;
43
+ });
44
+ }
45
+ return this.runtimeAppPromise;
46
+ }
47
+ async initializeServerAdapter() {
48
+ return this.getRuntimeApp();
49
+ }
50
+ async start() {
51
+ const runtimeApp = await this.getRuntimeApp();
52
+ return runtimeApp.start();
53
+ }
54
+ async fetch(request) {
55
+ const runtimeApp = await this.getRuntimeApp();
56
+ const candidate = runtimeApp;
57
+ if (!candidate.fetch) {
58
+ throw new Error("The selected runtime adapter does not expose fetch()");
59
+ }
60
+ return candidate.fetch(request);
61
+ }
62
+ }
63
+ export {
64
+ EcopagesApp,
65
+ createApp
66
+ };
@@ -0,0 +1,30 @@
1
+ import type { Server } from 'bun';
2
+ import type { EcoPagesAppConfig } from '../internal-types.js';
3
+ type StaticContentServerOptions = {
4
+ port?: number;
5
+ };
6
+ /**
7
+ * Static content server for production builds.
8
+ * Serves pre-built static files from the dist directory with gzip compression support.
9
+ */
10
+ export declare class StaticContentServer {
11
+ server: Server<unknown> | null;
12
+ private appConfig;
13
+ private options;
14
+ constructor({ appConfig, options }: {
15
+ appConfig: EcoPagesAppConfig;
16
+ options?: StaticContentServerOptions;
17
+ });
18
+ private shouldServeGzip;
19
+ private isHtml;
20
+ private sendNotFoundPage;
21
+ private serveFromDir;
22
+ fetch(request: Request): Promise<Response>;
23
+ private startServer;
24
+ stop(): void;
25
+ static createServer({ appConfig, options, }: {
26
+ appConfig: EcoPagesAppConfig;
27
+ options?: StaticContentServerOptions;
28
+ }): StaticContentServer;
29
+ }
30
+ export {};
@@ -0,0 +1,111 @@
1
+ import { extname, join } from "node:path";
2
+ import { STATUS_MESSAGE } from "../constants.js";
3
+ import { fileSystem } from "@ecopages/file-system";
4
+ import { ServerUtils } from "../utils/server-utils.module.js";
5
+ import { getRequiredBunRuntime } from "../utils/runtime.js";
6
+ class StaticContentServer {
7
+ server = null;
8
+ appConfig;
9
+ options = { port: 3e3 };
10
+ constructor({ appConfig, options }) {
11
+ this.appConfig = appConfig;
12
+ if (options) this.options = options;
13
+ this.startServer();
14
+ }
15
+ shouldServeGzip(contentType) {
16
+ return ["text/javascript", "text/css"].includes(contentType);
17
+ }
18
+ isHtml(contentType) {
19
+ return contentType === "text/html";
20
+ }
21
+ async sendNotFoundPage() {
22
+ const error404TemplatePath = `${this.appConfig.absolutePaths.distDir}/404.html`;
23
+ try {
24
+ fileSystem.exists(error404TemplatePath);
25
+ } catch {
26
+ return new Response(STATUS_MESSAGE[404], {
27
+ status: 404
28
+ });
29
+ }
30
+ const response = new Response(fileSystem.readFileAsBuffer(error404TemplatePath), {
31
+ headers: { "Content-Type": "text/html" }
32
+ });
33
+ return response;
34
+ }
35
+ async serveFromDir({ path, request }) {
36
+ const { absolutePaths } = this.appConfig;
37
+ const basePath = join(absolutePaths.distDir, path);
38
+ const contentType = ServerUtils.getContentType(extname(basePath));
39
+ const acceptsGzip = request.headers.get("Accept-Encoding")?.includes("gzip");
40
+ try {
41
+ if (acceptsGzip && this.shouldServeGzip(contentType)) {
42
+ const gzipPath = `${basePath}.gz`;
43
+ if (fileSystem.exists(gzipPath)) {
44
+ const file = fileSystem.readFileAsBuffer(gzipPath);
45
+ return new Response(file, {
46
+ headers: {
47
+ "Content-Type": contentType,
48
+ "Content-Encoding": "gzip",
49
+ Vary: "Accept-Encoding"
50
+ }
51
+ });
52
+ }
53
+ }
54
+ if (path.includes(".") && fileSystem.exists(basePath)) {
55
+ const file = fileSystem.readFileAsBuffer(basePath);
56
+ return new Response(file, {
57
+ headers: { "Content-Type": contentType }
58
+ });
59
+ }
60
+ const htmlCandidates = [`${basePath}.html`, `${basePath}/index.html`];
61
+ for (const candidate of htmlCandidates) {
62
+ if (fileSystem.exists(candidate)) {
63
+ const file = fileSystem.readFileAsBuffer(candidate);
64
+ return new Response(file, {
65
+ headers: {
66
+ "Content-Type": ServerUtils.getContentType(extname(candidate))
67
+ }
68
+ });
69
+ }
70
+ }
71
+ return this.sendNotFoundPage();
72
+ } catch {
73
+ return this.sendNotFoundPage();
74
+ }
75
+ }
76
+ async fetch(request) {
77
+ let reqPath = new URL(request.url).pathname;
78
+ if (reqPath === "/") reqPath = "/index.html";
79
+ const response = this.serveFromDir({
80
+ path: reqPath,
81
+ request
82
+ });
83
+ if (response) return response;
84
+ return new Response(STATUS_MESSAGE[404], {
85
+ status: 404
86
+ });
87
+ }
88
+ startServer() {
89
+ this.server = getRequiredBunRuntime().serve({
90
+ fetch: this.fetch.bind(this),
91
+ port: this.options.port
92
+ });
93
+ }
94
+ stop() {
95
+ if (this.server) {
96
+ this.server.stop(true);
97
+ }
98
+ }
99
+ static createServer({
100
+ appConfig,
101
+ options
102
+ }) {
103
+ return new StaticContentServer({
104
+ appConfig,
105
+ options
106
+ });
107
+ }
108
+ }
109
+ export {
110
+ StaticContentServer
111
+ };
@@ -0,0 +1,105 @@
1
+ import type { EcoComponent } from '../public-types.js';
2
+ import type { MarkerNodeId } from '../route-renderer/component-graph/component-marker.js';
3
+ /**
4
+ * Outcome returned by boundary policy during one component render pass.
5
+ *
6
+ * - `inline`: render the target component immediately in the current pass
7
+ * - `defer`: emit an `eco-marker` and resolve it during the marker graph phase
8
+ */
9
+ export type BoundaryRenderMode = 'inline' | 'defer';
10
+ /**
11
+ * Input provided to boundary policy when a component boundary is reached.
12
+ *
13
+ * This keeps `eco.component()` decoupled from concrete integration/plugin
14
+ * objects while still giving policy enough information to decide whether the
15
+ * boundary should render immediately or be deferred.
16
+ */
17
+ export type BoundaryRenderDecisionInput = {
18
+ currentIntegration: string;
19
+ targetIntegration?: string;
20
+ component: EcoComponent;
21
+ };
22
+ /**
23
+ * Narrow render-pass facade used by `eco.component()` for boundary decisions.
24
+ *
25
+ * The boundary context is intentionally small so component rendering can remain
26
+ * unaware of integration registries, plugin instances, or renderer lifecycles.
27
+ */
28
+ export type ComponentRenderBoundaryContext = {
29
+ /**
30
+ * Decides whether the next component boundary should render inline or defer to
31
+ * the marker graph stage.
32
+ *
33
+ * @param input Boundary metadata for the current render pass.
34
+ * @returns Boundary rendering mode for the target component.
35
+ */
36
+ decideBoundaryRender(input: BoundaryRenderDecisionInput): BoundaryRenderMode;
37
+ };
38
+ /**
39
+ * Per-render mutable state used while collecting marker graph references.
40
+ *
41
+ * Counters generate deterministic ids within one render execution.
42
+ */
43
+ type ComponentRenderContext = {
44
+ currentIntegration: string;
45
+ boundaryContext: ComponentRenderBoundaryContext;
46
+ nextNodeId: number;
47
+ nextPropsRefId: number;
48
+ nextSlotRefId: number;
49
+ propsByRef: Record<string, Record<string, unknown>>;
50
+ slotChildrenByRef: Record<string, MarkerNodeId[]>;
51
+ };
52
+ /**
53
+ * Serializable graph context captured from one render execution.
54
+ *
55
+ * This payload is merged with explicit page-module graph context before marker
56
+ * resolution in the route renderer.
57
+ */
58
+ export type ComponentGraphContext = {
59
+ propsByRef: Record<string, Record<string, unknown>>;
60
+ slotChildrenByRef: Record<string, MarkerNodeId[]>;
61
+ };
62
+ /**
63
+ * Returns the current component render context, if one is active.
64
+ *
65
+ * @returns Active render context or `undefined` outside render execution.
66
+ */
67
+ export declare function getComponentRenderContext(): ComponentRenderContext | undefined;
68
+ /**
69
+ * Allocates the next marker node id in the active render context.
70
+ *
71
+ * @param context Active render context.
72
+ * @returns Stable marker node id for this render pass.
73
+ */
74
+ export declare function createNodeId(context: ComponentRenderContext): MarkerNodeId;
75
+ /**
76
+ * Allocates the next props reference id in the active render context.
77
+ *
78
+ * @param context Active render context.
79
+ * @returns Props reference key.
80
+ */
81
+ export declare function createPropsRef(context: ComponentRenderContext): string;
82
+ /**
83
+ * Allocates the next slot reference id in the active render context.
84
+ *
85
+ * @param context Active render context.
86
+ * @returns Slot reference key.
87
+ */
88
+ export declare function createSlotRef(context: ComponentRenderContext): string;
89
+ /**
90
+ * Runs render work under a fresh component render context and returns both:
91
+ * - the render result value
92
+ * - captured graph reference maps for downstream marker resolution
93
+ *
94
+ * @param input Execution metadata for current integration and boundary policy.
95
+ * @param render Async render function to execute inside the context.
96
+ * @returns Render result and captured graph context maps.
97
+ */
98
+ export declare function runWithComponentRenderContext<T>(input: {
99
+ currentIntegration: string;
100
+ boundaryContext: ComponentRenderBoundaryContext;
101
+ }, render: () => Promise<T>): Promise<{
102
+ value: T;
103
+ graphContext: ComponentGraphContext;
104
+ }>;
105
+ export {};
@@ -0,0 +1,87 @@
1
+ const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = "__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__";
2
+ function getComponentRenderContextState() {
3
+ const globalScope = globalThis;
4
+ globalScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
5
+ contextStack: [],
6
+ nodeContextStorage: null,
7
+ nodeContextStorageLoader: null
8
+ };
9
+ return globalScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
10
+ }
11
+ async function getContextStorage() {
12
+ const state = getComponentRenderContextState();
13
+ if (state.nodeContextStorage) {
14
+ return state.nodeContextStorage;
15
+ }
16
+ if (state.nodeContextStorageLoader) {
17
+ return state.nodeContextStorageLoader;
18
+ }
19
+ state.nodeContextStorageLoader = import("node:async_hooks").then((module) => {
20
+ const storage = new module.AsyncLocalStorage();
21
+ state.nodeContextStorage = {
22
+ getStore: () => storage.getStore(),
23
+ run: (store, callback) => storage.run(store, callback)
24
+ };
25
+ return state.nodeContextStorage;
26
+ }).catch(() => {
27
+ state.nodeContextStorage = null;
28
+ return null;
29
+ }).finally(() => {
30
+ state.nodeContextStorageLoader = null;
31
+ });
32
+ return state.nodeContextStorageLoader;
33
+ }
34
+ function getComponentRenderContext() {
35
+ const state = getComponentRenderContextState();
36
+ return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
37
+ }
38
+ function createNodeId(context) {
39
+ context.nextNodeId += 1;
40
+ return `n_${context.nextNodeId}`;
41
+ }
42
+ function createPropsRef(context) {
43
+ context.nextPropsRefId += 1;
44
+ return `p_${context.nextPropsRefId}`;
45
+ }
46
+ function createSlotRef(context) {
47
+ context.nextSlotRefId += 1;
48
+ return `s_${context.nextSlotRefId}`;
49
+ }
50
+ async function runWithComponentRenderContext(input, render) {
51
+ const context = {
52
+ currentIntegration: input.currentIntegration,
53
+ boundaryContext: input.boundaryContext,
54
+ nextNodeId: 0,
55
+ nextPropsRefId: 0,
56
+ nextSlotRefId: 0,
57
+ propsByRef: {},
58
+ slotChildrenByRef: {}
59
+ };
60
+ const storage = await getContextStorage();
61
+ let value;
62
+ if (storage) {
63
+ value = await storage.run(context, render);
64
+ } else {
65
+ const state = getComponentRenderContextState();
66
+ state.contextStack.push(context);
67
+ try {
68
+ value = await render();
69
+ } finally {
70
+ state.contextStack.pop();
71
+ }
72
+ }
73
+ return {
74
+ value,
75
+ graphContext: {
76
+ propsByRef: context.propsByRef,
77
+ slotChildrenByRef: context.slotChildrenByRef
78
+ }
79
+ };
80
+ }
81
+ export {
82
+ createNodeId,
83
+ createPropsRef,
84
+ createSlotRef,
85
+ getComponentRenderContext,
86
+ runWithComponentRenderContext
87
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The eco namespace - unified component and page factory API
3
+ * @module
4
+ */
5
+ import type { Eco } from './eco.types.js';
6
+ /**
7
+ * The eco namespace - provides factories for components and pages
8
+ */
9
+ export declare const eco: Eco;
package/src/eco/eco.js ADDED
@@ -0,0 +1,114 @@
1
+ import { createNodeId, createPropsRef, createSlotRef, getComponentRenderContext } from "./component-render-context.js";
2
+ import { createComponentMarker, parseComponentMarkers } from "../route-renderer/component-graph/component-marker.js";
3
+ import { getComponentReference } from "../route-renderer/component-graph/component-reference.js";
4
+ import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./eco.utils.js";
5
+ function createComponentFactory(options) {
6
+ const integrationName = options.integration ?? options.__eco?.integration;
7
+ const comp = ((props) => {
8
+ const renderContext = getComponentRenderContext();
9
+ const shouldEmitMarker = renderContext !== void 0 && renderContext.boundaryContext.decideBoundaryRender({
10
+ currentIntegration: renderContext.currentIntegration,
11
+ targetIntegration: integrationName,
12
+ component: comp
13
+ }) === "defer";
14
+ if (shouldEmitMarker && renderContext) {
15
+ const nodeId = createNodeId(renderContext);
16
+ const propsRef = createPropsRef(renderContext);
17
+ const componentRef = getComponentReference(comp);
18
+ const componentProps = props ?? {};
19
+ renderContext.propsByRef[propsRef] = componentProps;
20
+ let slotRef;
21
+ const children = componentProps.children;
22
+ if (typeof children === "string" && children.includes("<eco-marker")) {
23
+ const childMarkers = parseComponentMarkers(children);
24
+ if (childMarkers.length > 0) {
25
+ slotRef = createSlotRef(renderContext);
26
+ renderContext.slotChildrenByRef[slotRef] = childMarkers.map((marker) => marker.nodeId);
27
+ }
28
+ }
29
+ return createComponentMarker({
30
+ nodeId,
31
+ integration: integrationName,
32
+ componentRef,
33
+ propsRef,
34
+ slotRef
35
+ });
36
+ }
37
+ const content = options.render(props);
38
+ const lazyTriggers = comp.config?._resolvedLazyTriggers;
39
+ if (lazyTriggers && lazyTriggers.length > 0) {
40
+ const triggerId = lazyTriggers[0].triggerId;
41
+ if (isThenable(content)) {
42
+ return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
43
+ }
44
+ return addTriggerAttribute(content, triggerId);
45
+ }
46
+ const lazyGroups = comp.config?._resolvedLazyScripts;
47
+ if (lazyGroups && lazyGroups.length > 0) {
48
+ if (isThenable(content)) {
49
+ return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
50
+ }
51
+ return wrapWithScriptsInjector(content, lazyGroups);
52
+ }
53
+ return content;
54
+ });
55
+ comp.config = {
56
+ __eco: options.__eco,
57
+ integration: options.integration,
58
+ dependencies: options.dependencies
59
+ };
60
+ return comp;
61
+ }
62
+ function component(options) {
63
+ return createComponentFactory(options);
64
+ }
65
+ function html(options) {
66
+ return createComponentFactory(options);
67
+ }
68
+ function layout(options) {
69
+ return createComponentFactory(options);
70
+ }
71
+ function page(options) {
72
+ const { layout: layout2, dependencies, render, staticPaths: staticPaths2, staticProps: staticProps2, metadata: metadata2, cache, requires, middleware } = options;
73
+ const componentOptions = {
74
+ __eco: options.__eco,
75
+ integration: options.integration,
76
+ dependencies: layout2 ? {
77
+ ...dependencies,
78
+ components: [...dependencies?.components || [], layout2]
79
+ } : dependencies,
80
+ render
81
+ };
82
+ const pageComponent = createComponentFactory(componentOptions);
83
+ if (layout2 && pageComponent.config) {
84
+ pageComponent.config.layout = layout2;
85
+ }
86
+ if (staticPaths2) pageComponent.staticPaths = staticPaths2;
87
+ if (staticProps2) pageComponent.staticProps = staticProps2;
88
+ if (metadata2) pageComponent.metadata = metadata2;
89
+ if (cache) pageComponent.cache = cache;
90
+ if (requires) pageComponent.requires = requires;
91
+ if (middleware) pageComponent.middleware = middleware;
92
+ return pageComponent;
93
+ }
94
+ function metadata(fn) {
95
+ return fn;
96
+ }
97
+ function staticPaths(fn) {
98
+ return fn;
99
+ }
100
+ function staticProps(fn) {
101
+ return fn;
102
+ }
103
+ const eco = {
104
+ component,
105
+ html,
106
+ layout,
107
+ page,
108
+ metadata,
109
+ staticPaths,
110
+ staticProps
111
+ };
112
+ export {
113
+ eco
114
+ };