@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,380 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { createEcoComponentMetaPlugin } from './eco-component-meta-plugin';
3
- import type { EcoPagesAppConfig } from '../internal-types';
4
- import { fileSystem } from '@ecopages/file-system';
5
-
6
- /**
7
- * Creates a regex pattern to match __eco injection with any id hash.
8
- * The id is a base36 hash that varies, so we match it with a pattern.
9
- */
10
- function ecoMetaPattern(file: string, integration: string): RegExp {
11
- const escapedFile = file.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
12
- return new RegExp(`__eco: \\{ id: "[a-z0-9]+", file: "${escapedFile}", integration: "${integration}" \\}`);
13
- }
14
-
15
- describe('eco-component-meta-plugin', () => {
16
- const Config = {
17
- integrations: [
18
- {
19
- name: 'kitajs',
20
- extensions: ['.kita.tsx'],
21
- },
22
- {
23
- name: 'react',
24
- extensions: ['.tsx'],
25
- },
26
- {
27
- name: 'ghtml',
28
- extensions: ['.ts', '.ghtml.ts'],
29
- },
30
- ],
31
- } as EcoPagesAppConfig;
32
-
33
- const plugin = createEcoComponentMetaPlugin({ config: Config });
34
-
35
- async function runPluginOnContent(content: string, filePath: string) {
36
- let regexFilter: RegExp | undefined;
37
- let onLoadCallback: any;
38
-
39
- const buildMock = {
40
- onLoad: (options: { filter: RegExp }, callback: any) => {
41
- regexFilter = options.filter;
42
- onLoadCallback = callback;
43
- },
44
- };
45
-
46
- plugin.setup(buildMock as any);
47
-
48
- if (!onLoadCallback || !regexFilter) {
49
- throw new Error('Plugin did not register onLoad handler');
50
- }
51
-
52
- if (!regexFilter.test(filePath)) {
53
- throw new Error(`File path ${filePath} does not match plugin filter ${regexFilter}`);
54
- }
55
-
56
- const fileSpy = vi.spyOn(fileSystem, 'readFileSync').mockImplementation(() => content);
57
-
58
- try {
59
- return await onLoadCallback({ path: filePath });
60
- } finally {
61
- fileSpy.mockRestore();
62
- }
63
- }
64
-
65
- it('should inject __eco into X.config assignment in TSX files', async () => {
66
- const content = `
67
- MyComponent.config = {
68
- dependencies: {}
69
- };
70
- `;
71
-
72
- const result = await runPluginOnContent(content, '/path/to/component.tsx');
73
-
74
- expect(result).toBeDefined();
75
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/component.tsx', 'react'));
76
- });
77
-
78
- it('should NOT inject __eco into config patterns in non-EcoComponent files', async () => {
79
- const content = `
80
- export const config = {
81
- apiUrl: 'https://api.example.com',
82
- theme: 'dark'
83
- };
84
- `;
85
-
86
- const result = await runPluginOnContent(content, '/path/to/settings.tsx');
87
-
88
- expect(result).toBeDefined();
89
- expect(result.contents).not.toContain('__eco:');
90
- });
91
-
92
- it('should inject __eco into EcoComponent-typed object with config property', async () => {
93
- const content = `
94
- import type { EcoComponent } from '@ecopages/core';
95
-
96
- export const LitCounter: EcoComponent = {
97
- config: {
98
- dependencies: {
99
- scripts: ['lit-counter.script.ts'] } } };
100
- `;
101
-
102
- const result = await runPluginOnContent(content, '/path/to/lit-counter.ts');
103
-
104
- expect(result).toBeDefined();
105
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/lit-counter.ts', 'ghtml'));
106
- });
107
-
108
- it('should inject __eco into eco.component() call', async () => {
109
- const content = `
110
- import { eco } from '@ecopages/core';
111
- export const Counter = eco.component${'<CounterProps>'}({
112
- dependencies: {
113
- scripts: ['./counter.ts'] },
114
- render: () => '${'<div>'}Counter${'</div>'}' });
115
- `;
116
-
117
- const result = await runPluginOnContent(content, '/path/to/counter.tsx');
118
-
119
- expect(result).toBeDefined();
120
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/counter.tsx', 'react'));
121
- expect(result.contents).toContain('eco.component' + '<CounterProps>({');
122
- });
123
-
124
- it('should inject __eco into eco.page call', async () => {
125
- const content = `
126
- import { eco } from '@ecopages/core';
127
- export default eco.page({
128
- dependencies: {
129
- components: [] },
130
- render: () => '${'<main>'}Page${'</main>'}' });
131
- `;
132
-
133
- const result = await runPluginOnContent(content, '/path/to/pages/index.tsx');
134
-
135
- expect(result).toBeDefined();
136
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/pages/index.tsx', 'react'));
137
- });
138
-
139
- it('should inject __eco into eco.layout call', async () => {
140
- const content = `
141
- import { eco } from '@ecopages/core';
142
- export const MainLayout = eco.layout({
143
- render: ({ children }) => '${'<main>'}' + children + '${'</main>'}' });
144
- `;
145
-
146
- const result = await runPluginOnContent(content, '/path/to/layouts/main-layout.tsx');
147
-
148
- expect(result).toBeDefined();
149
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/layouts/main-layout.tsx', 'react'));
150
- });
151
-
152
- it('should inject __eco into eco.html call', async () => {
153
- const content = `
154
- import { eco } from '@ecopages/core';
155
- export default eco.html({
156
- render: ({ children }) => '${'<html><body>'}' + children + '${'</body></html>'}' });
157
- `;
158
-
159
- const result = await runPluginOnContent(content, '/path/to/html.tsx');
160
-
161
- expect(result).toBeDefined();
162
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/html.tsx', 'react'));
163
- });
164
-
165
- it('should inject __eco into eco.component() with lazy dependencies', async () => {
166
- const content = `
167
- export const LazyCounter = eco.component({
168
- dependencies: {
169
- scripts: [{ src: './counter.ts', lazy: { 'on:interaction': 'click' } }] },
170
- render: () => '${'<div>'}Lazy${'</div>'}' });
171
- `;
172
-
173
- const result = await runPluginOnContent(content, '/path/to/lazy-counter.tsx');
174
-
175
- expect(result).toBeDefined();
176
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/lazy-counter.tsx', 'react'));
177
- });
178
-
179
- it('should detect kitajs integration from .kita.tsx extension', async () => {
180
- const content = `import { eco } from '@ecopages/core';
181
- import type { PageHeadProps } from '@ecopages/core';
182
-
183
- export const Head = eco.component<PageHeadProps<string>>({
184
- dependencies: {
185
- stylesheets: ['../styles/global.css'] },
186
- render: ({ metadata, children }) => (
187
- <head>
188
- <meta charset="UTF-8" />
189
- {children}
190
- </head>
191
- ) });`;
192
-
193
- const result = await runPluginOnContent(content, '/path/to/includes/head.kita.tsx');
194
-
195
- expect(result).toBeDefined();
196
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/includes/head.kita.tsx', 'kitajs'));
197
- });
198
-
199
- it('should handle eco.page with complex generic types', async () => {
200
- const content = `
201
- import { eco } from '@ecopages/core';
202
-
203
- export default eco.page<{ title: string; callback: (arg: string) => void }>({
204
- staticProps: async () => ({ props: { title: 'Hello', callback: () => {} } }),
205
- render: (props) => '<div>' + props.title + '</div>' });
206
- `;
207
-
208
- const result = await runPluginOnContent(content, '/path/to/pages/complex.tsx');
209
-
210
- expect(result).toBeDefined();
211
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/pages/complex.tsx', 'react'));
212
- });
213
-
214
- it('should handle multiple eco.component calls in same file', async () => {
215
- const content = `
216
- import { eco } from '@ecopages/core';
217
-
218
- export const Button = eco.component({
219
- render: () => '<button>Click</button>' });
220
-
221
- export const Input = eco.component({
222
- render: () => '<input type="text" />' });
223
- `;
224
-
225
- const result = await runPluginOnContent(content, '/path/to/components.tsx');
226
-
227
- expect(result).toBeDefined();
228
- const matches = result.contents.match(
229
- /__eco: \{ id: "[a-z0-9]+", file: "\/path\/to\/components\.tsx", integration: "react" \},/g,
230
- );
231
- expect(matches).toHaveLength(2);
232
- });
233
-
234
- it('should handle eco.component with empty config object', async () => {
235
- const content = `
236
- import { eco } from '@ecopages/core';
237
-
238
- export const Simple = eco.component({});
239
- `;
240
-
241
- const result = await runPluginOnContent(content, '/path/to/simple.tsx');
242
-
243
- expect(result).toBeDefined();
244
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/simple.tsx', 'react'));
245
- });
246
-
247
- it('should not inject into non-eco call expressions', async () => {
248
- const content = `
249
- import { other } from 'some-lib';
250
-
251
- export const Thing = other.component({
252
- render: () => '<div>Thing</div>' });
253
- `;
254
-
255
- const result = await runPluginOnContent(content, '/path/to/thing.tsx');
256
-
257
- expect(result).toBeDefined();
258
- expect(result.contents).not.toContain('__eco:');
259
- });
260
-
261
- it('should not inject into non-config variable declarations', async () => {
262
- const content = `
263
- const settings = {
264
- theme: 'dark',
265
- locale: 'en' };
266
- `;
267
-
268
- const result = await runPluginOnContent(content, '/path/to/settings.ts');
269
-
270
- expect(result).toBeDefined();
271
- expect(result.contents).not.toContain('__eco:');
272
- });
273
-
274
- it('should handle file paths with special characters in directory', async () => {
275
- const content = `
276
- import { eco } from '@ecopages/core';
277
-
278
- export default eco.page({
279
- render: () => '<div>Page</div>' });
280
- `;
281
-
282
- const result = await runPluginOnContent(content, '/path/to/my-app/pages/index.tsx');
283
-
284
- expect(result).toBeDefined();
285
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/my-app/pages/index.tsx', 'react'));
286
- });
287
-
288
- it('should handle eco.component with nested object in dependencies', async () => {
289
- const content = `
290
- import { eco } from '@ecopages/core';
291
-
292
- export const LazyComponent = eco.component({
293
- dependencies: {
294
- stylesheets: ['./style.css'],
295
- scripts: [{ src: './script.ts', lazy: { 'on:interaction': 'click' } }],
296
- components: [] },
297
- render: () => '<div>Lazy</div>' });
298
- `;
299
-
300
- const result = await runPluginOnContent(content, '/path/to/lazy.tsx');
301
-
302
- expect(result).toBeDefined();
303
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/lazy.tsx', 'react'));
304
- });
305
-
306
- it('should preserve original code structure after injection', async () => {
307
- const content = `import { eco } from '@ecopages/core';
308
-
309
- export const Counter = eco.component({
310
- dependencies: {
311
- scripts: ['./counter.ts'] },
312
- render: () => '<button>0</button>' });`;
313
-
314
- const result = await runPluginOnContent(content, '/path/to/counter.tsx');
315
-
316
- expect(result).toBeDefined();
317
- expect(result.contents).toContain("import { eco } from '@ecopages/core';");
318
- expect(result.contents).toContain("scripts: ['./counter.ts']");
319
- expect(result.contents).toContain("render: () => '<button>0</button>'");
320
- });
321
-
322
- it('should handle query string in file path for cache busting', async () => {
323
- const content = `
324
- import { eco } from '@ecopages/core';
325
-
326
- export default eco.page({
327
- render: () => '<div>Page</div>' });
328
- `;
329
-
330
- const result = await runPluginOnContent(content, '/path/to/pages/index.tsx?update=123456');
331
-
332
- expect(result).toBeDefined();
333
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/pages/index.tsx', 'react'));
334
- });
335
-
336
- describe('Regression: eco-blog views failure', () => {
337
- it('should inject __eco into a kitajs page with complex props and no manual __eco', async () => {
338
- const content = `import { eco } from '@ecopages/core';
339
- import { MainLayout } from '@/layouts/main-layout.kita';
340
- import type { Post } from '@/lib/db';
341
-
342
- export interface BlogListProps {
343
- posts: Post[];
344
- }
345
-
346
- export const BlogList = eco.page<BlogListProps>({
347
- layout: MainLayout,
348
- metadata: () => ({
349
- title: 'EcoBlog | Home',
350
- description: 'A blog about sustainability and technology' }),
351
- render: ({ posts }) => {
352
- return (
353
- <div class="max-w-3xl mx-auto space-y-12">
354
- {/* content */}
355
- </div>
356
- );
357
- } });`;
358
-
359
- const result = await runPluginOnContent(
360
- content,
361
- '/path/to/playground/eco-blog/src/views/blog-list.kita.tsx',
362
- );
363
-
364
- expect(result).toBeDefined();
365
- expect(result.contents).toMatch(
366
- ecoMetaPattern('/path/to/playground/eco-blog/src/views/blog-list.kita.tsx', 'kitajs'),
367
- );
368
- });
369
-
370
- it('should inject __eco even if the eco call is not at the top level', async () => {
371
- const content = `
372
- import { eco } from '@ecopages/core';
373
- const createPage = () => eco.page({ render: () => 'hi' });
374
- export default createPage();
375
- `;
376
- const result = await runPluginOnContent(content, '/path/to/nested.tsx');
377
- expect(result.contents).toMatch(ecoMetaPattern('/path/to/nested.tsx', 'react'));
378
- });
379
- });
380
- });
@@ -1,111 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { IntegrationPlugin, type IntegrationPluginConfig } from './integration-plugin';
3
- import type { IHmrManager } from '../public-types';
4
- import type { AssetDefinition } from '../services/assets/asset-processing-service';
5
-
6
- class TestIntegrationPlugin extends IntegrationPlugin {
7
- renderer = vi.fn() as any;
8
- override setup(): Promise<void> {
9
- return Promise.resolve();
10
- }
11
-
12
- override teardown(): Promise<void> {
13
- return Promise.resolve();
14
- }
15
- }
16
-
17
- describe('IntegrationPlugin', () => {
18
- let plugin: TestIntegrationPlugin;
19
- const config: IntegrationPluginConfig = {
20
- name: 'test-plugin',
21
- extensions: ['.test'],
22
- integrationDependencies: [],
23
- };
24
-
25
- beforeEach(() => {
26
- plugin = new TestIntegrationPlugin(config);
27
- });
28
-
29
- it('should initialize with correct config values', () => {
30
- expect(plugin.name).toBe(config.name);
31
- expect(plugin.extensions).toEqual(config.extensions);
32
- expect(plugin.runtimeCapability).toBeUndefined();
33
- expect(plugin.getResolvedIntegrationDependencies()).toEqual(
34
- config.integrationDependencies as AssetDefinition[],
35
- );
36
- });
37
-
38
- it('should retain runtime capability declarations', () => {
39
- const pluginWithRuntimeCapability = new TestIntegrationPlugin({
40
- name: 'runtime-capable',
41
- extensions: ['.test'],
42
- runtimeCapability: {
43
- tags: ['bun-only'],
44
- minRuntimeVersion: '1.0.0',
45
- },
46
- });
47
-
48
- expect(pluginWithRuntimeCapability.runtimeCapability).toEqual({
49
- tags: ['bun-only'],
50
- minRuntimeVersion: '1.0.0',
51
- });
52
- });
53
-
54
- it('should initialize with empty dependencies if not provided', () => {
55
- const pluginWithoutDeps = new TestIntegrationPlugin({
56
- name: 'test',
57
- extensions: [],
58
- });
59
- expect(pluginWithoutDeps.getResolvedIntegrationDependencies()).toEqual([]);
60
- });
61
-
62
- it('should implement setup and teardown methods', async () => {
63
- await expect(plugin.setup()).resolves.toBeUndefined();
64
- await expect(plugin.teardown()).resolves.toBeUndefined();
65
- });
66
-
67
- it('should not defer component boundaries by default', () => {
68
- expect(
69
- plugin.shouldDeferComponentBoundary({
70
- currentIntegration: 'ghtml',
71
- targetIntegration: 'react',
72
- component: () => '<div></div>',
73
- }),
74
- ).toBe(false);
75
- });
76
-
77
- it('should register runtime specifier maps through the base HMR setup', () => {
78
- const registerSpecifierMap = vi.fn();
79
- const hmrManager = {
80
- registerSpecifierMap,
81
- registerStrategy: vi.fn(),
82
- registerEntrypoint: vi.fn(),
83
- registerScriptEntrypoint: vi.fn(),
84
- setPlugins: vi.fn(),
85
- setEnabled: vi.fn(),
86
- isEnabled: vi.fn(() => true),
87
- broadcast: vi.fn(),
88
- getOutputUrl: vi.fn(),
89
- getWatchedFiles: vi.fn(() => new Map()),
90
- getSpecifierMap: vi.fn(() => new Map()),
91
- getDistDir: vi.fn(() => ''),
92
- getPlugins: vi.fn(() => []),
93
- getDefaultContext: vi.fn(),
94
- handleFileChange: vi.fn(),
95
- } satisfies IHmrManager;
96
-
97
- const pluginWithRuntimeSpecifiers = new (class extends TestIntegrationPlugin {
98
- override getRuntimeSpecifierMap(): Record<string, string> {
99
- return {
100
- 'test-runtime': '/assets/vendors/test-runtime.js',
101
- };
102
- }
103
- })(config);
104
-
105
- pluginWithRuntimeSpecifiers.setHmrManager(hmrManager);
106
-
107
- expect(registerSpecifierMap).toHaveBeenCalledWith({
108
- 'test-runtime': '/assets/vendors/test-runtime.js',
109
- });
110
- });
111
- });
@@ -1,148 +0,0 @@
1
- import { afterAll, beforeEach, describe, expect, test } from 'vitest';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import type { EcoBuildPlugin } from '../build/build-types.ts';
5
- import type { EcoPagesAppConfig } from '../internal-types';
6
- import { Processor, type ProcessorConfig } from './processor.ts';
7
-
8
- class TestProcessor extends Processor {
9
- override buildPlugins?: EcoBuildPlugin[] = [];
10
- override plugins?: EcoBuildPlugin[] = [];
11
-
12
- override async setup(): Promise<void> {}
13
-
14
- override async process(input: unknown, _filePath?: string): Promise<unknown> {
15
- return input;
16
- }
17
-
18
- override async teardown(): Promise<void> {}
19
- }
20
-
21
- describe('Processor', () => {
22
- let processor: TestProcessor;
23
- let config: ProcessorConfig;
24
- let appConfig: EcoPagesAppConfig;
25
-
26
- beforeEach(() => {
27
- config = {
28
- name: 'test-processor',
29
- options: { test: true },
30
- watch: {
31
- paths: ['/test'],
32
- },
33
- };
34
-
35
- const testRoot = path.join(process.cwd(), '.test-tmp', 'processor-test');
36
-
37
- if (fs.existsSync(testRoot)) {
38
- fs.rmSync(testRoot, { recursive: true, force: true });
39
- }
40
-
41
- appConfig = {
42
- rootDir: testRoot,
43
- absolutePaths: {
44
- srcDir: path.join(testRoot, 'src'),
45
- distDir: path.join(testRoot, 'dist'),
46
- },
47
- } as EcoPagesAppConfig;
48
-
49
- processor = new TestProcessor(config);
50
- processor.setContext(appConfig);
51
- });
52
-
53
- afterAll(() => {
54
- fs.rmSync(path.join(process.cwd(), '.test-tmp'), { recursive: true, force: true });
55
- });
56
-
57
- test('should initialize with correct name', () => {
58
- expect(processor.getName()).toBe('test-processor');
59
- });
60
-
61
- test('should retain runtime capability declarations', () => {
62
- const runtimeProcessor = new TestProcessor({
63
- name: 'runtime-processor',
64
- runtimeCapability: {
65
- tags: ['requires-node-builtins'],
66
- minRuntimeVersion: '18.0.0',
67
- },
68
- });
69
-
70
- expect(runtimeProcessor.runtimeCapability).toEqual({
71
- tags: ['requires-node-builtins'],
72
- minRuntimeVersion: '18.0.0',
73
- });
74
- });
75
-
76
- test('should return watch config', () => {
77
- expect(processor.getWatchConfig()).toEqual({
78
- paths: ['/test'],
79
- });
80
- });
81
- });
82
-
83
- describe('Processor capability matching', () => {
84
- test('matches all extensions with * pattern', () => {
85
- const processor = new TestProcessor({
86
- name: 'wildcard-all',
87
- capabilities: [{ kind: 'stylesheet', extensions: ['*'] }],
88
- });
89
-
90
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(true);
91
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.scss')).toBe(true);
92
- });
93
-
94
- test('matches explicit *.ext patterns', () => {
95
- const processor = new TestProcessor({
96
- name: 'wildcard-explicit',
97
- capabilities: [{ kind: 'stylesheet', extensions: ['*.css'] }],
98
- });
99
-
100
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(true);
101
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.scss')).toBe(false);
102
- });
103
-
104
- test('matches grouped extension patterns', () => {
105
- const processor = new TestProcessor({
106
- name: 'wildcard-group',
107
- capabilities: [{ kind: 'stylesheet', extensions: ['*.{css,scss,sass}'] }],
108
- });
109
-
110
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(true);
111
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.scss')).toBe(true);
112
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.sass')).toBe(true);
113
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.less')).toBe(false);
114
- });
115
-
116
- test('matches grouped patterns with mixed case and spacing', () => {
117
- const processor = new TestProcessor({
118
- name: 'wildcard-group-normalized',
119
- capabilities: [{ kind: 'stylesheet', extensions: ['*.{ CSS, ScSs , .SASS }'] }],
120
- });
121
-
122
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(true);
123
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.scss')).toBe(true);
124
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.sass')).toBe(true);
125
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.less')).toBe(false);
126
- });
127
-
128
- test('matches plain extension and dotted extension forms', () => {
129
- const processor = new TestProcessor({
130
- name: 'plain-ext',
131
- capabilities: [{ kind: 'stylesheet', extensions: ['css', '.scss'] }],
132
- });
133
-
134
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(true);
135
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.scss')).toBe(true);
136
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.sass')).toBe(false);
137
- });
138
-
139
- test('respects capability kind filtering', () => {
140
- const processor = new TestProcessor({
141
- name: 'kind-filter',
142
- capabilities: [{ kind: 'image', extensions: ['*.png'] }],
143
- });
144
-
145
- expect(processor.canProcessAsset('stylesheet', '/src/styles/app.css')).toBe(false);
146
- expect(processor.canProcessAsset('image', '/src/assets/logo.png')).toBe(true);
147
- });
148
- });
@@ -1,41 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { createComponentMarker } from './component-marker.ts';
3
- import { extractComponentGraph } from './component-graph.ts';
4
- import { resolveComponentGraph } from './component-graph-executor.ts';
5
-
6
- describe('component graph executor', () => {
7
- it('resolves markers bottom-up using graph levels', async () => {
8
- const html = [
9
- '<main>',
10
- createComponentMarker({
11
- nodeId: 'n_1',
12
- integration: 'lit',
13
- componentRef: 'c_parent',
14
- propsRef: 'p_parent',
15
- slotRef: 's_parent',
16
- }),
17
- createComponentMarker({
18
- nodeId: 'n_2',
19
- integration: 'react',
20
- componentRef: 'c_child',
21
- propsRef: 'p_child',
22
- }),
23
- '</main>',
24
- ].join('');
25
-
26
- const graph = extractComponentGraph(html, {
27
- s_parent: ['n_2'],
28
- });
29
-
30
- const resolved = await resolveComponentGraph(html, graph, async (marker) => {
31
- if (marker.nodeId === 'n_2') {
32
- return { html: '<section>child</section>' };
33
- }
34
- return { html: '<article>parent</article>' };
35
- });
36
-
37
- expect(resolved).toContain('<article>parent</article>');
38
- expect(resolved).toContain('<section>child</section>');
39
- expect(resolved).not.toContain('<eco-marker');
40
- });
41
- });