@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
@@ -1,316 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { describe, expect, it, beforeAll, afterAll } from 'vitest';
3
- import {
4
- ServerStaticBuilder,
5
- type ServeOptions,
6
- type ServerStaticBuilderLogger,
7
- type ServerStaticPreviewServerFactory,
8
- } from './server-static-builder';
9
- import type { EcoPagesAppConfig } from '../../internal-types';
10
- import type { StaticSiteGenerator } from '../../static-site-generator/static-site-generator';
11
- import type { FSRouter } from '../../router/server/fs-router';
12
- import type { RouteRendererFactory } from '../../route-renderer/route-renderer';
13
- import fs from 'node:fs';
14
- import path from 'node:path';
15
- import os from 'node:os';
16
-
17
- const TMP_DIR = path.join(os.tmpdir(), 'server-static-builder-test');
18
-
19
- function createMockDependencies() {
20
- const calls = {
21
- staticSiteGeneratorRun: [] as Array<unknown>,
22
- integrationSetup: 0,
23
- processorSetup: 0,
24
- warn: [] as Array<[string, string | undefined]>,
25
- info: [] as string[],
26
- error: [] as string[],
27
- createServer: [] as Array<{
28
- appConfig: EcoPagesAppConfig;
29
- options: { port: number };
30
- }>,
31
- };
32
-
33
- const StaticSiteGenerator = {
34
- run: async (options: unknown) => {
35
- calls.staticSiteGeneratorRun.push(options);
36
- },
37
- } as unknown as StaticSiteGenerator;
38
-
39
- const mockIntegration = {
40
- setup: async () => {
41
- calls.integrationSetup += 1;
42
- },
43
- } as any;
44
-
45
- const mockProcessor = {
46
- setup: async () => {
47
- calls.processorSetup += 1;
48
- fs.mkdirSync(path.join(TMP_DIR, 'dist', 'images'), { recursive: true });
49
- fs.writeFileSync(path.join(TMP_DIR, 'dist', 'images', 'processor.webp'), 'processor-output');
50
- },
51
- } as any;
52
-
53
- const AppConfig = {
54
- rootDir: TMP_DIR,
55
- srcDir: 'src',
56
- publicDir: 'public',
57
- distDir: 'dist',
58
- integrations: [mockIntegration],
59
- processors: new Map([['image-processor', mockProcessor]]),
60
- absolutePaths: {
61
- distDir: path.join(TMP_DIR, 'dist'),
62
- workDir: path.join(TMP_DIR, '.eco'),
63
- } as EcoPagesAppConfig['absolutePaths'],
64
- } as unknown as EcoPagesAppConfig;
65
-
66
- const ServeOptions: ServeOptions = {
67
- hostname: 'localhost',
68
- port: 3000,
69
- };
70
-
71
- const Router = {} as FSRouter;
72
- const RouteRendererFactory = {} as RouteRendererFactory;
73
- const logger: ServerStaticBuilderLogger = {
74
- warn: (message: string, detail?: string) => {
75
- calls.warn.push([message, detail]);
76
- },
77
- info: (message: string) => {
78
- calls.info.push(message);
79
- },
80
- error: (message: string) => {
81
- calls.error.push(message);
82
- },
83
- };
84
- const previewServerFactory: ServerStaticPreviewServerFactory = {
85
- createServer: ({ appConfig, options }) => {
86
- calls.createServer.push({ appConfig, options });
87
- return {
88
- server: { port: 3000 },
89
- };
90
- },
91
- };
92
-
93
- return {
94
- calls,
95
- StaticSiteGenerator,
96
- AppConfig,
97
- mockIntegration,
98
- mockProcessor,
99
- logger,
100
- previewServerFactory,
101
- ServeOptions,
102
- Router,
103
- RouteRendererFactory,
104
- ApiHandlers: [],
105
- };
106
- }
107
-
108
- describe('ServerStaticBuilder', () => {
109
- beforeAll(() => {
110
- fs.mkdirSync(TMP_DIR, { recursive: true });
111
- });
112
-
113
- afterAll(() => {
114
- fs.rmSync(TMP_DIR, { recursive: true, force: true });
115
- });
116
-
117
- it('should warn when API handlers are registered for static build modes', async () => {
118
- const { AppConfig, StaticSiteGenerator, ServeOptions, Router, RouteRendererFactory, logger, calls } =
119
- createMockDependencies();
120
-
121
- const builder = new ServerStaticBuilder({
122
- appConfig: AppConfig,
123
- staticSiteGenerator: StaticSiteGenerator,
124
- serveOptions: ServeOptions,
125
- logger,
126
- apiHandlers: [
127
- { method: 'GET', path: '/api/auth/*', handler: () => undefined } as any,
128
- { method: 'POST', path: '/api/auth/*', handler: () => undefined } as any,
129
- ],
130
- });
131
-
132
- await builder.build(undefined, {
133
- router: Router,
134
- routeRendererFactory: RouteRendererFactory,
135
- });
136
-
137
- assert.deepEqual(calls.warn, [
138
- [
139
- 'Registered API endpoints are not available in static build or preview modes because no server runtime is started. They are excluded from the generated output.\n',
140
- '➤ GET /api/auth/*, POST /api/auth/*',
141
- ],
142
- ]);
143
- });
144
-
145
- describe('constructor', () => {
146
- it('should create instance with provided options', () => {
147
- const { AppConfig, StaticSiteGenerator, ServeOptions, logger, previewServerFactory } =
148
- createMockDependencies();
149
- const builder = new ServerStaticBuilder({
150
- appConfig: AppConfig,
151
- staticSiteGenerator: StaticSiteGenerator,
152
- serveOptions: ServeOptions,
153
- logger,
154
- previewServerFactory,
155
- });
156
- expect(builder).toBeDefined();
157
- });
158
- });
159
-
160
- describe('build', () => {
161
- it('should run static site generator with correct options', async () => {
162
- const { AppConfig, StaticSiteGenerator, ServeOptions, Router, RouteRendererFactory, logger, calls } =
163
- createMockDependencies();
164
-
165
- const builder = new ServerStaticBuilder({
166
- appConfig: AppConfig,
167
- staticSiteGenerator: StaticSiteGenerator,
168
- serveOptions: ServeOptions,
169
- logger,
170
- });
171
-
172
- await builder.build(undefined, {
173
- router: Router,
174
- routeRendererFactory: RouteRendererFactory,
175
- });
176
-
177
- assert.deepEqual(calls.staticSiteGeneratorRun, [
178
- {
179
- router: Router,
180
- baseUrl: 'http://localhost:3000',
181
- routeRendererFactory: RouteRendererFactory,
182
- staticRoutes: undefined,
183
- },
184
- ]);
185
- });
186
-
187
- it('should handle custom serve options for base URL', async () => {
188
- const { AppConfig, StaticSiteGenerator, Router, RouteRendererFactory, logger, calls } =
189
- createMockDependencies();
190
-
191
- const customServeOptions: ServeOptions = {
192
- hostname: '0.0.0.0',
193
- port: 8080,
194
- };
195
-
196
- const builder = new ServerStaticBuilder({
197
- appConfig: AppConfig,
198
- staticSiteGenerator: StaticSiteGenerator,
199
- serveOptions: customServeOptions,
200
- logger,
201
- });
202
-
203
- await builder.build(undefined, {
204
- router: Router,
205
- routeRendererFactory: RouteRendererFactory,
206
- });
207
-
208
- assert.equal((calls.staticSiteGeneratorRun[0] as { baseUrl: string }).baseUrl, 'http://0.0.0.0:8080');
209
- });
210
-
211
- it('should start preview server when preview option is true', async () => {
212
- const {
213
- AppConfig,
214
- StaticSiteGenerator,
215
- ServeOptions,
216
- Router,
217
- RouteRendererFactory,
218
- logger,
219
- previewServerFactory,
220
- calls,
221
- } = createMockDependencies();
222
-
223
- const builder = new ServerStaticBuilder({
224
- appConfig: AppConfig,
225
- staticSiteGenerator: StaticSiteGenerator,
226
- serveOptions: ServeOptions,
227
- logger,
228
- previewServerFactory,
229
- });
230
-
231
- await builder.build(
232
- { preview: true },
233
- {
234
- router: Router,
235
- routeRendererFactory: RouteRendererFactory,
236
- },
237
- );
238
-
239
- assert.deepEqual(calls.createServer, [
240
- {
241
- appConfig: AppConfig,
242
- options: { port: 3000 },
243
- },
244
- ]);
245
- });
246
-
247
- it('should rebuild integration runtime assets after resetting the export directory', async () => {
248
- const { AppConfig, StaticSiteGenerator, ServeOptions, Router, RouteRendererFactory, logger, calls } =
249
- createMockDependencies();
250
-
251
- const builder = new ServerStaticBuilder({
252
- appConfig: AppConfig,
253
- staticSiteGenerator: StaticSiteGenerator,
254
- serveOptions: ServeOptions,
255
- logger,
256
- });
257
-
258
- await builder.build(undefined, {
259
- router: Router,
260
- routeRendererFactory: RouteRendererFactory,
261
- });
262
-
263
- assert.equal(calls.integrationSetup, 1);
264
- });
265
-
266
- it('should rebuild processor-owned assets after resetting the export directory', async () => {
267
- const { AppConfig, StaticSiteGenerator, ServeOptions, Router, RouteRendererFactory, logger, calls } =
268
- createMockDependencies();
269
-
270
- const builder = new ServerStaticBuilder({
271
- appConfig: AppConfig,
272
- staticSiteGenerator: StaticSiteGenerator,
273
- serveOptions: ServeOptions,
274
- logger,
275
- });
276
-
277
- await builder.build(undefined, {
278
- router: Router,
279
- routeRendererFactory: RouteRendererFactory,
280
- });
281
-
282
- assert.equal(calls.processorSetup, 1);
283
- assert.equal(
284
- fs.readFileSync(path.join(TMP_DIR, 'dist', 'images', 'processor.webp'), 'utf8'),
285
- 'processor-output',
286
- );
287
- });
288
-
289
- it('should reset stale export contents before regenerating the public output', async () => {
290
- const { AppConfig, StaticSiteGenerator, ServeOptions, Router, RouteRendererFactory, logger } =
291
- createMockDependencies();
292
-
293
- const publicDir = path.join(TMP_DIR, 'src', 'public');
294
- const distDir = AppConfig.absolutePaths.distDir;
295
- fs.mkdirSync(publicDir, { recursive: true });
296
- fs.mkdirSync(path.join(distDir, '.server-modules-meta'), { recursive: true });
297
- fs.writeFileSync(path.join(publicDir, 'site.css'), 'body { color: red; }');
298
- fs.writeFileSync(path.join(distDir, '.server-modules-meta', 'stale.js'), 'stale');
299
-
300
- const builder = new ServerStaticBuilder({
301
- appConfig: AppConfig,
302
- staticSiteGenerator: StaticSiteGenerator,
303
- serveOptions: ServeOptions,
304
- logger,
305
- });
306
-
307
- await builder.build(undefined, {
308
- router: Router,
309
- routeRendererFactory: RouteRendererFactory,
310
- });
311
-
312
- expect(fs.existsSync(path.join(distDir, '.server-modules-meta'))).toBe(false);
313
- expect(fs.readFileSync(path.join(distDir, 'site.css'), 'utf8')).toBe('body { color: red; }');
314
- });
315
- });
316
- });
@@ -1,268 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import path from 'node:path';
3
- import { afterEach, test, vi } from 'vitest';
4
- import { createAppBuildExecutor, createOrReuseAppBuildExecutor, DevBuildCoordinator } from './dev-build-coordinator.ts';
5
- import { EsbuildBuildAdapter } from './esbuild-build-adapter.ts';
6
-
7
- function createBuildResult(entryPoint: string) {
8
- const label = path.basename(entryPoint).replace(/\.[^.]+$/u, '');
9
- return {
10
- success: true,
11
- logs: [],
12
- outputs: [{ path: `/tmp/out/${label}.js` }],
13
- };
14
- }
15
-
16
- afterEach(() => {
17
- vi.restoreAllMocks();
18
- });
19
-
20
- test('DevBuildCoordinator serializes concurrent build calls from overlapping callers', async () => {
21
- let activeBuilds = 0;
22
- let maxActiveBuilds = 0;
23
- const order: string[] = [];
24
- const adapter = new EsbuildBuildAdapter();
25
- vi.spyOn(adapter, 'buildOrThrow').mockImplementation(async (options) => {
26
- const entryPoint = options.entrypoints[0] ?? 'unknown';
27
- const label = path.basename(entryPoint);
28
-
29
- activeBuilds += 1;
30
- maxActiveBuilds = Math.max(maxActiveBuilds, activeBuilds);
31
- order.push(`start:${label}`);
32
-
33
- await new Promise((resolve) => setTimeout(resolve, 25));
34
-
35
- order.push(`end:${label}`);
36
- activeBuilds -= 1;
37
-
38
- return createBuildResult(entryPoint);
39
- });
40
- const coordinator = new DevBuildCoordinator(adapter);
41
-
42
- const [firstBuild, secondBuild] = await Promise.all([
43
- coordinator.build({
44
- entrypoints: ['/tmp/first.ts'],
45
- root: '/tmp',
46
- outdir: '/tmp/out',
47
- target: 'node',
48
- format: 'esm',
49
- sourcemap: 'none',
50
- splitting: false,
51
- minify: false,
52
- }),
53
- coordinator.build({
54
- entrypoints: ['/tmp/second.ts'],
55
- root: '/tmp',
56
- outdir: '/tmp/out',
57
- target: 'node',
58
- format: 'esm',
59
- sourcemap: 'none',
60
- splitting: false,
61
- minify: false,
62
- }),
63
- ]);
64
-
65
- assert.equal(firstBuild.success, true);
66
- assert.equal(secondBuild.success, true);
67
- assert.equal(maxActiveBuilds, 1);
68
- assert.deepEqual(order, ['start:first.ts', 'end:first.ts', 'start:second.ts', 'end:second.ts']);
69
- });
70
-
71
- test('DevBuildCoordinator resets and retries after an esbuild protocol failure', async () => {
72
- const adapter = new EsbuildBuildAdapter();
73
- const buildOrThrow = vi
74
- .spyOn(adapter, 'buildOrThrow')
75
- .mockRejectedValueOnce(new Error('Unexpected end of JSON input'))
76
- .mockResolvedValueOnce(createBuildResult('/tmp/recovered.ts'));
77
- const stopEsbuildService = vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
78
- const coordinator = new DevBuildCoordinator(adapter);
79
-
80
- const result = await coordinator.build({
81
- entrypoints: ['/tmp/recovered.ts'],
82
- root: '/tmp',
83
- outdir: '/tmp/out',
84
- target: 'node',
85
- format: 'esm',
86
- sourcemap: 'none',
87
- splitting: false,
88
- minify: false,
89
- });
90
-
91
- assert.equal(result.success, true);
92
- assert.equal(buildOrThrow.mock.calls.length, 2);
93
- assert.equal(stopEsbuildService.mock.calls.length, 1);
94
- assert.deepEqual(result.outputs, [{ path: '/tmp/out/recovered.js' }]);
95
- });
96
-
97
- test('DevBuildCoordinator recycles the esbuild service before the next serialized development build', async () => {
98
- const adapter = new EsbuildBuildAdapter();
99
- const buildOrThrow = vi
100
- .spyOn(adapter, 'buildOrThrow')
101
- .mockImplementation(async (options) => createBuildResult(options.entrypoints[0] ?? 'unknown'));
102
- const stopEsbuildService = vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
103
-
104
- const previousNodeEnv = process.env.NODE_ENV;
105
- process.env.NODE_ENV = 'development';
106
-
107
- try {
108
- const coordinator = new DevBuildCoordinator(adapter);
109
-
110
- const firstBuild = await coordinator.build({
111
- entrypoints: ['/tmp/first.ts'],
112
- root: '/tmp',
113
- outdir: '/tmp/out',
114
- target: 'node',
115
- format: 'esm',
116
- sourcemap: 'none',
117
- splitting: false,
118
- minify: false,
119
- });
120
-
121
- const secondBuild = await coordinator.build({
122
- entrypoints: ['/tmp/second.ts'],
123
- root: '/tmp',
124
- outdir: '/tmp/out',
125
- target: 'node',
126
- format: 'esm',
127
- sourcemap: 'none',
128
- splitting: false,
129
- minify: false,
130
- });
131
-
132
- assert.equal(firstBuild.success, true);
133
- assert.equal(secondBuild.success, true);
134
- assert.equal(buildOrThrow.mock.calls.length, 2);
135
- assert.equal(stopEsbuildService.mock.calls.length, 1);
136
- } finally {
137
- process.env.NODE_ENV = previousNodeEnv;
138
- }
139
- });
140
-
141
- test('DevBuildCoordinator does not recycle the esbuild service between serialized browser builds', async () => {
142
- const adapter = new EsbuildBuildAdapter();
143
- const buildOrThrow = vi
144
- .spyOn(adapter, 'buildOrThrow')
145
- .mockImplementation(async (options) => createBuildResult(options.entrypoints[0] ?? 'unknown'));
146
- const stopEsbuildService = vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
147
-
148
- const previousNodeEnv = process.env.NODE_ENV;
149
- process.env.NODE_ENV = 'development';
150
-
151
- try {
152
- const coordinator = new DevBuildCoordinator(adapter);
153
-
154
- await coordinator.build({
155
- entrypoints: ['/tmp/first.ts'],
156
- root: '/tmp',
157
- outdir: '/tmp/out',
158
- target: 'browser',
159
- format: 'esm',
160
- sourcemap: 'none',
161
- splitting: false,
162
- minify: false,
163
- });
164
-
165
- await coordinator.build({
166
- entrypoints: ['/tmp/second.ts'],
167
- root: '/tmp',
168
- outdir: '/tmp/out',
169
- target: 'browser',
170
- format: 'esm',
171
- sourcemap: 'none',
172
- splitting: false,
173
- minify: false,
174
- });
175
-
176
- assert.equal(buildOrThrow.mock.calls.length, 2);
177
- assert.equal(stopEsbuildService.mock.calls.length, 0);
178
- } finally {
179
- process.env.NODE_ENV = previousNodeEnv;
180
- }
181
- });
182
-
183
- test('DevBuildCoordinator can recover from a raw esbuild protocol fault', async () => {
184
- const adapter = new EsbuildBuildAdapter();
185
- const stopEsbuildService = vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
186
- const coordinator = new DevBuildCoordinator(adapter);
187
-
188
- const handled = await coordinator.recoverFromProtocolFault(new Error('Unexpected end of JSON input'));
189
-
190
- assert.equal(handled, true);
191
- assert.equal(stopEsbuildService.mock.calls.length, 1);
192
- });
193
-
194
- test('DevBuildCoordinator ignores non-esbuild runtime faults', async () => {
195
- const adapter = new EsbuildBuildAdapter();
196
- const stopEsbuildService = vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
197
- const coordinator = new DevBuildCoordinator(adapter);
198
-
199
- const handled = await coordinator.recoverFromProtocolFault(new Error('Something else failed'));
200
-
201
- assert.equal(handled, false);
202
- assert.equal(stopEsbuildService.mock.calls.length, 0);
203
- });
204
-
205
- test('DevBuildCoordinator recovery clears a wedged serialized build queue', async () => {
206
- const adapter = new EsbuildBuildAdapter();
207
- vi.spyOn(adapter, 'stopEsbuildService').mockResolvedValue(undefined);
208
- const coordinator = new DevBuildCoordinator(adapter);
209
- coordinator.setBuildQueueForTests(new Promise<void>(() => undefined));
210
-
211
- const handled = await coordinator.recoverFromProtocolFault(new Error('Unexpected end of JSON input'));
212
-
213
- assert.equal(handled, true);
214
- await assert.doesNotReject(async () => {
215
- await coordinator.getBuildQueueForTests();
216
- });
217
- });
218
-
219
- test('createOrReuseAppBuildExecutor preserves serialization when rewrapping a dev executor', async () => {
220
- let activeBuilds = 0;
221
- let maxActiveBuilds = 0;
222
- const adapter = new EsbuildBuildAdapter();
223
- vi.spyOn(adapter, 'buildOrThrow').mockImplementation(async (options) => {
224
- activeBuilds += 1;
225
- maxActiveBuilds = Math.max(maxActiveBuilds, activeBuilds);
226
-
227
- await new Promise((resolve) => setTimeout(resolve, 25));
228
-
229
- activeBuilds -= 1;
230
- return createBuildResult(options.entrypoints[0] ?? 'unknown');
231
- });
232
-
233
- const bootstrapExecutor = createAppBuildExecutor({
234
- development: true,
235
- adapter,
236
- });
237
- const runtimeExecutor = createOrReuseAppBuildExecutor({
238
- development: true,
239
- adapter,
240
- currentExecutor: bootstrapExecutor,
241
- getPlugins: () => [],
242
- });
243
-
244
- await Promise.all([
245
- bootstrapExecutor.build({
246
- entrypoints: ['/tmp/bootstrap.ts'],
247
- root: '/tmp',
248
- outdir: '/tmp/out',
249
- target: 'node',
250
- format: 'esm',
251
- sourcemap: 'none',
252
- splitting: false,
253
- minify: false,
254
- }),
255
- runtimeExecutor.build({
256
- entrypoints: ['/tmp/runtime.ts'],
257
- root: '/tmp',
258
- outdir: '/tmp/out',
259
- target: 'node',
260
- format: 'esm',
261
- sourcemap: 'none',
262
- splitting: false,
263
- minify: false,
264
- }),
265
- ]);
266
-
267
- assert.equal(maxActiveBuilds, 1);
268
- });