@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,124 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { addTriggerAttribute, isThenable } from './eco.utils.ts';
3
-
4
- const TRIGGER_ID = 'eco-trigger-abc123';
5
-
6
- describe('addTriggerAttribute', () => {
7
- describe('basic element injection', () => {
8
- test('injects into a plain div', () => {
9
- const result = addTriggerAttribute('<div>content</div>', TRIGGER_ID);
10
- expect(result).toBe(`<div data-eco-trigger="${TRIGGER_ID}">content</div>`);
11
- });
12
-
13
- test('injects into a custom element', () => {
14
- const result = addTriggerAttribute('<my-counter value="0"></my-counter>', TRIGGER_ID);
15
- expect(result).toBe(`<my-counter data-eco-trigger="${TRIGGER_ID}" value="0"></my-counter>`);
16
- });
17
-
18
- test('injects into an element that already has attributes', () => {
19
- const result = addTriggerAttribute('<div class="foo" id="bar">content</div>', TRIGGER_ID);
20
- expect(result).toBe(`<div data-eco-trigger="${TRIGGER_ID}" class="foo" id="bar">content</div>`);
21
- });
22
-
23
- test('injects into a self-closing void element', () => {
24
- const result = addTriggerAttribute('<img src="x.png" alt="" />', TRIGGER_ID);
25
- expect(result).toBe(`<img data-eco-trigger="${TRIGGER_ID}" src="x.png" alt="" />`);
26
- });
27
-
28
- test('injects into an element with no attributes and immediate close', () => {
29
- const result = addTriggerAttribute('<section></section>', TRIGGER_ID);
30
- expect(result).toBe(`<section data-eco-trigger="${TRIGGER_ID}"></section>`);
31
- });
32
- });
33
-
34
- describe('leading non-element nodes are skipped', () => {
35
- test('skips leading whitespace and injects into the first element', () => {
36
- const result = addTriggerAttribute(' \n <div>content</div>', TRIGGER_ID);
37
- expect(result).toBe(` \n <div data-eco-trigger="${TRIGGER_ID}">content</div>`);
38
- });
39
-
40
- test('skips a leading HTML comment', () => {
41
- const result = addTriggerAttribute('<!-- wrapper --><div>content</div>', TRIGGER_ID);
42
- expect(result).toBe(`<!-- wrapper --><div data-eco-trigger="${TRIGGER_ID}">content</div>`);
43
- });
44
-
45
- test('skips multiple leading HTML comments', () => {
46
- const result = addTriggerAttribute('<!-- a --><!-- b --><span>text</span>', TRIGGER_ID);
47
- expect(result).toBe(`<!-- a --><!-- b --><span data-eco-trigger="${TRIGGER_ID}">text</span>`);
48
- });
49
-
50
- test('skips a leading doctype declaration', () => {
51
- const result = addTriggerAttribute('<!DOCTYPE html><html lang="en"></html>', TRIGGER_ID);
52
- expect(result).toBe(`<!DOCTYPE html><html data-eco-trigger="${TRIGGER_ID}" lang="en"></html>`);
53
- });
54
-
55
- test('skips a leading XML processing instruction', () => {
56
- const result = addTriggerAttribute('<?xml version="1.0"?><root/>', TRIGGER_ID);
57
- expect(result).toBe(`<?xml version="1.0"?><root data-eco-trigger="${TRIGGER_ID}"/>`);
58
- });
59
-
60
- test('skips comment then whitespace then element', () => {
61
- const result = addTriggerAttribute('<!-- note -->\n<article>body</article>', TRIGGER_ID);
62
- expect(result).toBe(`<!-- note -->\n<article data-eco-trigger="${TRIGGER_ID}">body</article>`);
63
- });
64
- });
65
-
66
- describe('only the first element is modified', () => {
67
- test('does not inject into sibling elements', () => {
68
- const result = addTriggerAttribute('<div>first</div><div>second</div>', TRIGGER_ID);
69
- expect(result).toBe(`<div data-eco-trigger="${TRIGGER_ID}">first</div><div>second</div>`);
70
- });
71
- });
72
-
73
- describe('fallback when no element is found', () => {
74
- test('returns the original string unchanged when there is no opening tag', () => {
75
- const input = 'just some text';
76
- expect(addTriggerAttribute(input, TRIGGER_ID)).toBe(input);
77
- });
78
-
79
- test('returns the original string unchanged when input is empty', () => {
80
- expect(addTriggerAttribute('', TRIGGER_ID)).toBe('');
81
- });
82
- });
83
-
84
- describe('non-string input coercion', () => {
85
- test('coerces a number to string before injecting', () => {
86
- const result = addTriggerAttribute(42, TRIGGER_ID);
87
- expect(result).toBe('42');
88
- });
89
-
90
- test('coerces null to the string "null"', () => {
91
- expect(addTriggerAttribute(null, TRIGGER_ID)).toBe('null');
92
- });
93
- });
94
- });
95
-
96
- describe('isThenable', () => {
97
- test('returns true for a native Promise', () => {
98
- expect(isThenable(Promise.resolve())).toBe(true);
99
- });
100
-
101
- test('returns true for a plain object with a then function', () => {
102
- expect(isThenable({ then: () => {} })).toBe(true);
103
- });
104
-
105
- test('returns false for a plain string', () => {
106
- expect(isThenable('hello')).toBe(false);
107
- });
108
-
109
- test('returns false for a number', () => {
110
- expect(isThenable(42)).toBe(false);
111
- });
112
-
113
- test('returns false for null', () => {
114
- expect(isThenable(null)).toBe(false);
115
- });
116
-
117
- test('returns false for an object without then', () => {
118
- expect(isThenable({ value: 1 })).toBe(false);
119
- });
120
-
121
- test('returns false when then is not a function', () => {
122
- expect(isThenable({ then: 'not-a-function' })).toBe(false);
123
- });
124
- });
@@ -1,42 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { buildGlobalInjectorBootstrapContent, buildGlobalInjectorMapScript } from './global-injector-map.ts';
3
- import type { ResolvedLazyTrigger } from '../public-types.ts';
4
-
5
- describe('buildGlobalInjectorMapScript', () => {
6
- test('builds merged map by trigger id and escapes script closing tags', () => {
7
- const triggers: ResolvedLazyTrigger[] = [
8
- {
9
- triggerId: 'eco-trigger-one',
10
- rules: [
11
- { 'on:interaction': { value: 'click', scripts: ['/a.js', '/b</script>.js'] } },
12
- { 'on:idle': { scripts: ['/idle.js'] } },
13
- ],
14
- },
15
- {
16
- triggerId: 'eco-trigger-one',
17
- rules: [{ 'on:interaction': { value: 'click', scripts: ['/a.js', '/c.js'] } }],
18
- },
19
- ];
20
-
21
- const payload = buildGlobalInjectorMapScript(triggers);
22
- expect(payload).toContain('<\\/script>');
23
-
24
- const map = JSON.parse(payload) as Record<string, Record<string, { scripts: string[]; value?: string }>>;
25
- expect(map['eco-trigger-one']?.['on:idle']?.scripts).toEqual(['/idle.js']);
26
- expect(map['eco-trigger-one']?.['on:interaction']).toEqual({
27
- value: 'click',
28
- scripts: ['/a.js', '/b</script>.js', '/c.js'],
29
- });
30
- });
31
- });
32
-
33
- describe('buildGlobalInjectorBootstrapContent', () => {
34
- test('binds refresh to after-swap and avoids before-swap cleanup listener', () => {
35
- const bootstrap = buildGlobalInjectorBootstrapContent('/assets/injector-global.js');
36
-
37
- expect(bootstrap).toContain("document.addEventListener('eco:after-swap', handleAfterSwap);");
38
- expect(bootstrap).not.toContain("document.addEventListener('eco:before-swap'");
39
- expect(bootstrap).not.toContain('const handleBeforeSwap');
40
- expect(bootstrap).toContain("document.removeEventListener('eco:after-swap', handleAfterSwap);");
41
- });
42
- });
@@ -1,66 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { buildInjectorMapScript } from './lazy-injector-map.ts';
3
- import type { InjectorMapConfig } from '@ecopages/scripts-injector/types';
4
- import type { ResolvedLazyScriptGroup } from '../public-types.ts';
5
-
6
- describe('buildInjectorMapScript', () => {
7
- test('builds injector map for mixed lazy triggers', () => {
8
- const lazyGroups: ResolvedLazyScriptGroup[] = [
9
- { lazy: { 'on:idle': true }, scripts: './idle-a.js, /idle-b.js' },
10
- { lazy: { 'on:interaction': 'click' }, scripts: './int-a.js' },
11
- { lazy: { 'on:visible': '0.5' }, scripts: '/vis-a.js' },
12
- ];
13
-
14
- const result = buildInjectorMapScript(lazyGroups);
15
- const map = JSON.parse(result) as InjectorMapConfig;
16
-
17
- expect(map['on:idle']).toEqual({ scripts: ['/idle-a.js', '/idle-b.js'] });
18
- expect(map['on:interaction']).toEqual({
19
- value: 'click',
20
- scripts: ['/int-a.js'],
21
- });
22
- expect(map['on:visible']).toEqual({
23
- value: '0.5',
24
- scripts: ['/vis-a.js'],
25
- });
26
- });
27
-
28
- test('dedupes scripts and merges interaction events while preserving order', () => {
29
- const lazyGroups: ResolvedLazyScriptGroup[] = [
30
- { lazy: { 'on:interaction': 'click,mouseenter' }, scripts: './one.js,./two.js' },
31
- { lazy: { 'on:interaction': 'mouseenter,focusin' }, scripts: '/two.js,/three.js' },
32
- ];
33
-
34
- const result = buildInjectorMapScript(lazyGroups);
35
- const map = JSON.parse(result) as InjectorMapConfig;
36
-
37
- expect(map['on:interaction']).toEqual({
38
- value: 'click,mouseenter,focusin',
39
- scripts: ['/one.js', '/two.js', '/three.js'],
40
- });
41
- });
42
-
43
- test('keeps existing on:visible threshold when a later boolean trigger is encountered', () => {
44
- const lazyGroups: ResolvedLazyScriptGroup[] = [
45
- { lazy: { 'on:visible': '100px' }, scripts: './threshold.js' },
46
- { lazy: { 'on:visible': true }, scripts: './fallback.js' },
47
- ];
48
-
49
- const result = buildInjectorMapScript(lazyGroups);
50
- const map = JSON.parse(result) as InjectorMapConfig;
51
-
52
- expect(map['on:visible']).toEqual({
53
- value: '100px',
54
- scripts: ['/threshold.js', '/fallback.js'],
55
- });
56
- });
57
-
58
- test('escapes closing script tags in output payload', () => {
59
- const lazyGroups: ResolvedLazyScriptGroup[] = [
60
- { lazy: { 'on:idle': true }, scripts: '/safe.js, /x</script>y.js' },
61
- ];
62
-
63
- const result = buildInjectorMapScript(lazyGroups);
64
- expect(result).toContain('<\\/script>');
65
- });
66
- });
@@ -1,30 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { normalizeModuleDeclarations, parseModuleDeclaration } from './module-dependencies.ts';
3
-
4
- describe('module dependencies parser', () => {
5
- test('parses simple module declaration', () => {
6
- expect(parseModuleDeclaration('react-aria-components')).toEqual({
7
- from: 'react-aria-components',
8
- });
9
- });
10
-
11
- test('parses declaration with named imports', () => {
12
- expect(parseModuleDeclaration('react-aria-components{Table,Select}')).toEqual({
13
- from: 'react-aria-components',
14
- imports: ['Table', 'Select'],
15
- });
16
- });
17
-
18
- test('normalizes and deduplicates module declarations', () => {
19
- expect(
20
- normalizeModuleDeclarations([
21
- 'react-aria-components{Table,Select}',
22
- 'react-aria-components{Table,Select}',
23
- 'lodash-es{debounce}',
24
- ]),
25
- ).toEqual([
26
- { from: 'react-aria-components', imports: ['Table', 'Select'] },
27
- { from: 'lodash-es', imports: ['debounce'] },
28
- ]);
29
- });
30
- });
@@ -1,134 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { HttpError } from './http-error.ts';
3
-
4
- describe('HttpError', () => {
5
- describe('constructor', () => {
6
- test('creates error with status and message', () => {
7
- const error = new HttpError(400, 'Bad request');
8
-
9
- expect(error).toBeInstanceOf(Error);
10
- expect(error).toBeInstanceOf(HttpError);
11
- expect(error.status).toBe(400);
12
- expect(error.message).toBe('Bad request');
13
- expect(error.name).toBe('HttpError');
14
- expect(error.details).toBeUndefined();
15
- });
16
-
17
- test('creates error with details', () => {
18
- const details = { field: 'email', reason: 'invalid format' };
19
- const error = new HttpError(400, 'Validation failed', details);
20
-
21
- expect(error.details).toEqual(details);
22
- });
23
- });
24
-
25
- describe('toJSON', () => {
26
- test('serializes error without details', () => {
27
- const error = new HttpError(404, 'Not found');
28
-
29
- expect(error.toJSON()).toEqual({
30
- error: 'Not found',
31
- status: 404,
32
- });
33
- });
34
-
35
- test('serializes error with details', () => {
36
- const details = { body: [{ path: ['title'], message: 'Required' }] };
37
- const error = new HttpError(400, 'Validation failed', details);
38
-
39
- expect(error.toJSON()).toEqual({
40
- error: 'Validation failed',
41
- status: 400,
42
- details,
43
- });
44
- });
45
- });
46
-
47
- describe('toResponse', () => {
48
- test('creates Response with correct status and body', async () => {
49
- const error = new HttpError(403, 'Access denied');
50
- const response = error.toResponse();
51
-
52
- expect(response).toBeInstanceOf(Response);
53
- expect(response.status).toBe(403);
54
- expect(response.headers.get('content-type')).toContain('application/json');
55
-
56
- const body = await response.json();
57
- expect(body).toEqual({ error: 'Access denied', status: 403 });
58
- });
59
- });
60
-
61
- describe('factory methods', () => {
62
- test('BadRequest creates 400 error', () => {
63
- const error = HttpError.BadRequest();
64
- expect(error.status).toBe(400);
65
- expect(error.message).toBe('Bad Request');
66
- });
67
-
68
- test('BadRequest accepts custom message and details', () => {
69
- const details = { field: 'name' };
70
- const error = HttpError.BadRequest('Invalid input', details);
71
-
72
- expect(error.message).toBe('Invalid input');
73
- expect(error.details).toEqual(details);
74
- });
75
-
76
- test('Unauthorized creates 401 error', () => {
77
- const error = HttpError.Unauthorized();
78
- expect(error.status).toBe(401);
79
- expect(error.message).toBe('Unauthorized');
80
- });
81
-
82
- test('Unauthorized accepts custom message', () => {
83
- const error = HttpError.Unauthorized('Token expired');
84
- expect(error.message).toBe('Token expired');
85
- });
86
-
87
- test('Forbidden creates 403 error', () => {
88
- const error = HttpError.Forbidden();
89
- expect(error.status).toBe(403);
90
- expect(error.message).toBe('Forbidden');
91
- });
92
-
93
- test('Forbidden accepts custom message', () => {
94
- const error = HttpError.Forbidden('Admin access required');
95
- expect(error.message).toBe('Admin access required');
96
- });
97
-
98
- test('NotFound creates 404 error', () => {
99
- const error = HttpError.NotFound();
100
- expect(error.status).toBe(404);
101
- expect(error.message).toBe('Not Found');
102
- });
103
-
104
- test('NotFound accepts custom message', () => {
105
- const error = HttpError.NotFound('Post not found');
106
- expect(error.message).toBe('Post not found');
107
- });
108
-
109
- test('Conflict creates 409 error', () => {
110
- const error = HttpError.Conflict();
111
- expect(error.status).toBe(409);
112
- expect(error.message).toBe('Conflict');
113
- });
114
-
115
- test('Conflict accepts custom message and details', () => {
116
- const details = { resource: 'user', conflict: 'email already exists' };
117
- const error = HttpError.Conflict('Resource conflict', details);
118
-
119
- expect(error.message).toBe('Resource conflict');
120
- expect(error.details).toEqual(details);
121
- });
122
-
123
- test('InternalServerError creates 500 error', () => {
124
- const error = HttpError.InternalServerError();
125
- expect(error.status).toBe(500);
126
- expect(error.message).toBe('Internal Server Error');
127
- });
128
-
129
- test('InternalServerError accepts custom message', () => {
130
- const error = HttpError.InternalServerError('Database connection failed');
131
- expect(error.message).toBe('Database connection failed');
132
- });
133
- });
134
- });
@@ -1,12 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { invariant } from '../utils/invariant.ts';
3
-
4
- describe('Utils', () => {
5
- test('invariant should throw error when condition is falsy', () => {
6
- expect(() => invariant(false, 'Test error')).toThrowError('[ecopages] Test error');
7
- });
8
-
9
- test('invariant should not throw error when condition is truthy', () => {
10
- expect(() => invariant(true, 'Test error')).not.toThrow();
11
- });
12
- });
@@ -1,124 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { HmrStrategy, HmrStrategyType, type HmrAction } from './hmr-strategy';
3
-
4
- /**
5
- * Mock strategy for testing the base class behavior
6
- */
7
- class MockStrategy extends HmrStrategy {
8
- readonly type: HmrStrategyType;
9
- override readonly priorityOffset: number;
10
- private matchPattern: string;
11
-
12
- constructor(options: { type: HmrStrategyType; priorityOffset?: number; matchPattern?: string }) {
13
- super();
14
- this.type = options.type;
15
- this.priorityOffset = options.priorityOffset ?? 0;
16
- this.matchPattern = options.matchPattern ?? '.';
17
- }
18
-
19
- matches(filePath: string): boolean {
20
- return filePath.endsWith(this.matchPattern);
21
- }
22
-
23
- async process(filePath: string): Promise<HmrAction> {
24
- return {
25
- type: 'broadcast',
26
- events: [{ type: 'update', path: filePath, timestamp: Date.now() }],
27
- };
28
- }
29
- }
30
-
31
- describe('HmrStrategyType', () => {
32
- it('INTEGRATION has value 100', () => {
33
- expect(HmrStrategyType.INTEGRATION).toBe(100);
34
- });
35
-
36
- it('ASSET has value 50', () => {
37
- expect(HmrStrategyType.ASSET).toBe(50);
38
- });
39
-
40
- it('SCRIPT has value 25', () => {
41
- expect(HmrStrategyType.SCRIPT).toBe(25);
42
- });
43
-
44
- it('FALLBACK has value 0', () => {
45
- expect(HmrStrategyType.FALLBACK).toBe(0);
46
- });
47
-
48
- it('maintains priority order: INTEGRATION > ASSET > SCRIPT > FALLBACK', () => {
49
- expect(HmrStrategyType.INTEGRATION).toBeGreaterThan(HmrStrategyType.ASSET);
50
- expect(HmrStrategyType.ASSET).toBeGreaterThan(HmrStrategyType.SCRIPT);
51
- expect(HmrStrategyType.SCRIPT).toBeGreaterThan(HmrStrategyType.FALLBACK);
52
- });
53
- });
54
-
55
- describe('HmrStrategy', () => {
56
- describe('priority', () => {
57
- it('returns type value when priorityOffset is 0', () => {
58
- const strategy = new MockStrategy({ type: HmrStrategyType.INTEGRATION });
59
- expect(strategy.priority).toBe(100);
60
- });
61
-
62
- it('returns type + priorityOffset', () => {
63
- const strategy = new MockStrategy({ type: HmrStrategyType.INTEGRATION, priorityOffset: 5 });
64
- expect(strategy.priority).toBe(105);
65
- });
66
-
67
- it('allows negative priorityOffset', () => {
68
- const strategy = new MockStrategy({ type: HmrStrategyType.ASSET, priorityOffset: -10 });
69
- expect(strategy.priority).toBe(40);
70
- });
71
- });
72
-
73
- describe('strategy selection by priority', () => {
74
- it('higher priority strategies are selected first', () => {
75
- const strategies = [
76
- new MockStrategy({ type: HmrStrategyType.FALLBACK, matchPattern: '.test' }),
77
- new MockStrategy({ type: HmrStrategyType.INTEGRATION, matchPattern: '.test' }),
78
- new MockStrategy({ type: HmrStrategyType.SCRIPT, matchPattern: '.test' }),
79
- new MockStrategy({ type: HmrStrategyType.ASSET, matchPattern: '.test' }),
80
- ];
81
-
82
- const sorted = [...strategies].sort((a, b) => b.priority - a.priority);
83
-
84
- expect(sorted[0].type).toBe(HmrStrategyType.INTEGRATION);
85
- expect(sorted[1].type).toBe(HmrStrategyType.ASSET);
86
- expect(sorted[2].type).toBe(HmrStrategyType.SCRIPT);
87
- expect(sorted[3].type).toBe(HmrStrategyType.FALLBACK);
88
- });
89
-
90
- it('priorityOffset can override default ordering', () => {
91
- const assetWithHighOffset = new MockStrategy({
92
- type: HmrStrategyType.ASSET,
93
- priorityOffset: 60,
94
- matchPattern: '.test',
95
- });
96
- const integration = new MockStrategy({
97
- type: HmrStrategyType.INTEGRATION,
98
- matchPattern: '.test',
99
- });
100
-
101
- expect(assetWithHighOffset.priority).toBeGreaterThan(integration.priority);
102
- });
103
- });
104
-
105
- describe('matches', () => {
106
- it('should be implemented by subclasses', () => {
107
- const strategy = new MockStrategy({ type: HmrStrategyType.ASSET, matchPattern: '.css' });
108
- expect(strategy.matches('styles.css')).toBe(true);
109
- expect(strategy.matches('script.js')).toBe(false);
110
- });
111
- });
112
-
113
- describe('process', () => {
114
- it('should return an HmrAction', async () => {
115
- const strategy = new MockStrategy({ type: HmrStrategyType.ASSET });
116
- const action = await strategy.process('/path/to/file.');
117
-
118
- expect(action.type).toBe('broadcast');
119
- expect(action.events).toBeDefined();
120
- expect(action.events?.[0].type).toBe('update');
121
- expect(action.events?.[0].path).toBe('/path/to/file.');
122
- });
123
- });
124
- });