@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,223 +0,0 @@
1
- import { describe, test, expect } from 'vitest';
2
- import { z } from 'zod';
3
- import * as v from 'valibot';
4
- import { type } from 'arktype';
5
- import { SchemaValidationService } from './schema-validation-service.ts';
6
-
7
- describe('SchemaValidationService', () => {
8
- const service = new SchemaValidationService();
9
-
10
- describe('Zod validation', () => {
11
- test('validates body with Zod schema', async () => {
12
- const schema = z.object({
13
- title: z.string().min(1),
14
- count: z.number(),
15
- });
16
-
17
- const result = await service.validateRequest(
18
- { body: { title: 'Hello', count: 42 } },
19
- { body: schema as unknown as Parameters<typeof service.validateRequest>[1]['body'] },
20
- );
21
-
22
- expect(result.success).toBe(true);
23
- expect(result.data?.body).toEqual({ title: 'Hello', count: 42 });
24
- });
25
-
26
- test('rejects invalid body with Zod schema', async () => {
27
- const schema = z.object({
28
- title: z.string().min(1),
29
- count: z.number(),
30
- });
31
-
32
- const result = await service.validateRequest(
33
- { body: { title: '', count: 'not-a-number' } },
34
- { body: schema as unknown as Parameters<typeof service.validateRequest>[1]['body'] },
35
- );
36
-
37
- expect(result.success).toBe(false);
38
- expect(result.errors).toBeDefined();
39
- expect(result.errors!.length).toBeGreaterThan(0);
40
- });
41
- });
42
-
43
- describe('Valibot validation', () => {
44
- test('validates query with Valibot schema', async () => {
45
- const schema = v.object({
46
- page: v.string(),
47
- limit: v.string(),
48
- });
49
-
50
- const result = await service.validateRequest(
51
- { query: { page: '1', limit: '10' } },
52
- { query: schema as unknown as Parameters<typeof service.validateRequest>[1]['query'] },
53
- );
54
-
55
- expect(result.success).toBe(true);
56
- expect(result.data?.query).toEqual({ page: '1', limit: '10' });
57
- });
58
-
59
- test('rejects invalid query with Valibot schema', async () => {
60
- const schema = v.object({
61
- page: v.pipe(v.string(), v.minLength(1)),
62
- });
63
-
64
- const result = await service.validateRequest(
65
- { query: { page: '' } },
66
- { query: schema as unknown as Parameters<typeof service.validateRequest>[1]['query'] },
67
- );
68
-
69
- expect(result.success).toBe(false);
70
- expect(result.errors).toBeDefined();
71
- });
72
- });
73
-
74
- describe('ArkType validation', () => {
75
- test('validates headers with ArkType schema', async () => {
76
- const schema = type({
77
- 'content-type': 'string',
78
- authorization: 'string',
79
- });
80
-
81
- const result = await service.validateRequest(
82
- {
83
- headers: {
84
- 'content-type': 'application/json',
85
- authorization: 'Bearer token',
86
- },
87
- },
88
- { headers: schema as unknown as Parameters<typeof service.validateRequest>[1]['headers'] },
89
- );
90
-
91
- expect(result.success).toBe(true);
92
- expect(result.data?.headers).toEqual({
93
- 'content-type': 'application/json',
94
- authorization: 'Bearer token',
95
- });
96
- });
97
-
98
- test('rejects invalid headers with ArkType schema', async () => {
99
- const schema = type({
100
- 'content-type': 'string',
101
- 'x-custom': 'string>5',
102
- });
103
-
104
- const result = await service.validateRequest(
105
- {
106
- headers: {
107
- 'content-type': 'application/json',
108
- 'x-custom': 'ab',
109
- },
110
- },
111
- { headers: schema as unknown as Parameters<typeof service.validateRequest>[1]['headers'] },
112
- );
113
-
114
- expect(result.success).toBe(false);
115
- expect(result.errors).toBeDefined();
116
- });
117
- });
118
-
119
- describe('Combined validation', () => {
120
- test('validates multiple sources at once', async () => {
121
- const bodySchema = z.object({
122
- title: z.string(),
123
- });
124
- const querySchema = v.object({
125
- format: v.string(),
126
- });
127
-
128
- const result = await service.validateRequest(
129
- {
130
- body: { title: 'Post Title' },
131
- query: { format: 'json' },
132
- },
133
- {
134
- body: bodySchema as unknown as Parameters<typeof service.validateRequest>[1]['body'],
135
- query: querySchema as unknown as Parameters<typeof service.validateRequest>[1]['query'],
136
- },
137
- );
138
-
139
- expect(result.success).toBe(true);
140
- expect(result.data?.body).toEqual({ title: 'Post Title' });
141
- expect(result.data?.query).toEqual({ format: 'json' });
142
- });
143
-
144
- test('validates route params with schema', async () => {
145
- const paramsSchema = z.object({
146
- id: z.coerce.number().int(),
147
- });
148
-
149
- const result = await service.validateRequest(
150
- {
151
- params: { id: '42' },
152
- },
153
- {
154
- params: paramsSchema as unknown as Parameters<typeof service.validateRequest>[1]['params'],
155
- },
156
- );
157
-
158
- expect(result.success).toBe(true);
159
- expect(result.data?.params).toEqual({ id: 42 });
160
- });
161
-
162
- test('aggregates errors from multiple sources', async () => {
163
- const bodySchema = z.object({
164
- title: z.string().min(5),
165
- });
166
- const querySchema = v.object({
167
- page: v.pipe(v.string(), v.regex(/^\d+$/)),
168
- });
169
-
170
- const result = await service.validateRequest(
171
- {
172
- body: { title: 'ab' },
173
- query: { page: 'invalid' },
174
- },
175
- {
176
- body: bodySchema as unknown as Parameters<typeof service.validateRequest>[1]['body'],
177
- query: querySchema as unknown as Parameters<typeof service.validateRequest>[1]['query'],
178
- },
179
- );
180
-
181
- expect(result.success).toBe(false);
182
- expect(result.errors).toBeDefined();
183
- expect(result.errors!.length).toBeGreaterThan(1);
184
- });
185
- });
186
-
187
- describe('Edge cases', () => {
188
- test('handles missing optional schemas', async () => {
189
- const result = await service.validateRequest({ body: { data: 'test' } }, {});
190
-
191
- expect(result.success).toBe(true);
192
- expect(result.data).toEqual({});
193
- });
194
-
195
- test('handles undefined source data', async () => {
196
- const schema = z.object({ name: z.string() });
197
-
198
- const result = await service.validateRequest(
199
- { body: undefined },
200
- { body: schema as unknown as Parameters<typeof service.validateRequest>[1]['body'] },
201
- );
202
-
203
- expect(result.success).toBe(true);
204
- });
205
-
206
- test('catches validation exceptions', async () => {
207
- const brokenSchema = {
208
- '~standard': {
209
- version: 1,
210
- vendor: 'test',
211
- validate: () => {
212
- throw new Error('Validation crashed');
213
- },
214
- },
215
- } as const;
216
-
217
- const result = await service.validateRequest({ body: { test: true } }, { body: brokenSchema });
218
-
219
- expect(result.success).toBe(false);
220
- expect(result.errors?.[0]?.message).toBe('Validation crashed');
221
- });
222
- });
223
- });
@@ -1,307 +0,0 @@
1
- import { describe, expect, test, beforeEach, afterEach, vi } from 'vitest';
2
- import { fileSystem } from '@ecopages/file-system';
3
- import { StaticSiteGenerator } from './static-site-generator';
4
- import type { EcoPagesAppConfig } from '../internal-types';
5
- import type { FSRouter } from '../router/server/fs-router';
6
- import type { RouteRendererFactory } from '../route-renderer/route-renderer';
7
- import { appLogger } from '../global/app-logger.ts';
8
- import { PageModuleImportService } from '../services/module-loading/page-module-import.service';
9
- import { DEFAULT_ECOPAGES_WORK_DIR } from '../constants.ts';
10
-
11
- const originalEnsureDir = fileSystem.ensureDir;
12
- const originalWrite = fileSystem.write;
13
-
14
- const createMockConfig = (overrides: Partial<EcoPagesAppConfig> = {}): EcoPagesAppConfig =>
15
- ({
16
- rootDir: '/test/project',
17
- distDir: 'dist',
18
- workDir: DEFAULT_ECOPAGES_WORK_DIR,
19
- srcDir: 'src',
20
- robotsTxt: {
21
- preferences: {
22
- '*': ['/admin', '/private'],
23
- Googlebot: ['/no-google'],
24
- },
25
- },
26
- absolutePaths: {
27
- distDir: '/test/project/dist',
28
- workDir: '/test/project/.eco',
29
- } as EcoPagesAppConfig['absolutePaths'],
30
- integrations: [],
31
- ...overrides,
32
- }) as EcoPagesAppConfig;
33
-
34
- describe('StaticSiteGenerator', () => {
35
- let ensureDirMock: any;
36
- let writeMock: any;
37
-
38
- beforeEach(() => {
39
- ensureDirMock = vi.fn(() => {});
40
- writeMock = vi.fn(() => {});
41
- fileSystem.ensureDir = ensureDirMock;
42
- fileSystem.write = writeMock;
43
- vi.spyOn(PageModuleImportService.prototype, 'importModule').mockResolvedValue({
44
- default: Object.assign(() => null, { cache: 'static' }),
45
- });
46
- vi.spyOn(appLogger, 'warn').mockReturnValue(appLogger);
47
- });
48
-
49
- afterEach(() => {
50
- fileSystem.ensureDir = originalEnsureDir;
51
- fileSystem.write = originalWrite;
52
- vi.restoreAllMocks();
53
- });
54
-
55
- describe('constructor', () => {
56
- test('should create instance with appConfig', () => {
57
- const config = createMockConfig();
58
- const ssg = new StaticSiteGenerator({ appConfig: config });
59
- expect(ssg.appConfig).toBe(config);
60
- });
61
- });
62
-
63
- describe('isRootDir', () => {
64
- test('should return true for root path /', () => {
65
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
66
- expect(ssg.isRootDir('/')).toBe(true);
67
- });
68
-
69
- test('should return false for nested path /foo/bar', () => {
70
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
71
- expect(ssg.isRootDir('/foo/bar')).toBe(false);
72
- });
73
-
74
- test('should return false for deeply nested paths', () => {
75
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
76
- expect(ssg.isRootDir('/a/b/c/d')).toBe(false);
77
- });
78
-
79
- test('should return null (falsy) for paths without slashes', () => {
80
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
81
- expect(ssg.isRootDir('no-slashes')).toBeFalsy();
82
- });
83
- });
84
-
85
- describe('getDirectories', () => {
86
- test('should return empty array for root-level routes', () => {
87
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
88
- const dirs = ssg.getDirectories(['/about', '/contact']);
89
- expect(dirs).toEqual([]);
90
- });
91
-
92
- test('should extract directories from nested routes', () => {
93
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
94
- const dirs = ssg.getDirectories(['/blog/post-1', '/blog/post-2', '/docs/api']);
95
- expect(dirs).toContain('/blog');
96
- expect(dirs).toContain('/docs');
97
- });
98
-
99
- test('should handle HTTP URLs and extract pathname', () => {
100
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
101
- const dirs = ssg.getDirectories(['http://localhost:3000/blog/post']);
102
- expect(dirs).toContain('/blog');
103
- });
104
-
105
- test('should deduplicate directories', () => {
106
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
107
- const dirs = ssg.getDirectories(['/blog/a', '/blog/b', '/blog/c']);
108
- expect(dirs.filter((d) => d === '/blog').length).toBe(1);
109
- });
110
-
111
- test('should handle deeply nested paths', () => {
112
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
113
- const dirs = ssg.getDirectories(['/a/b/c/page']);
114
- expect(dirs).toContain('/a/b/c');
115
- });
116
- });
117
-
118
- describe('generateRobotsTxt', () => {
119
- test('should generate robots.txt with preferences from config', () => {
120
- const config = createMockConfig();
121
- const ssg = new StaticSiteGenerator({ appConfig: config });
122
-
123
- ssg.generateRobotsTxt();
124
-
125
- expect(ensureDirMock).toHaveBeenCalledWith('/test/project/dist');
126
- expect(writeMock).toHaveBeenCalledWith('/test/project/dist/robots.txt', expect.any(String));
127
-
128
- const writtenContent = writeMock.mock.calls[0][1] as string;
129
- expect(writtenContent).toContain('user-agent: *');
130
- expect(writtenContent).toContain('disallow: /admin');
131
- expect(writtenContent).toContain('disallow: /private');
132
- expect(writtenContent).toContain('user-agent: Googlebot');
133
- expect(writtenContent).toContain('disallow: /no-google');
134
- });
135
-
136
- test('should handle empty preferences', () => {
137
- const config = createMockConfig({
138
- robotsTxt: { preferences: {} },
139
- });
140
- const ssg = new StaticSiteGenerator({ appConfig: config });
141
-
142
- ssg.generateRobotsTxt();
143
-
144
- expect(writeMock).toHaveBeenCalledWith('/test/project/dist/robots.txt', '');
145
- });
146
- });
147
-
148
- describe('generateStaticPages', () => {
149
- const createMockRouter = (routes: Record<string, { filePath: string; pathname: string }>) =>
150
- ({
151
- routes: Object.fromEntries(
152
- Object.entries(routes).map(([key, value]) => [key, { ...value, kind: 'exact' }]),
153
- ),
154
- origin: 'http://localhost:3000',
155
- }) as unknown as FSRouter;
156
-
157
- test('should filter out dynamic routes containing [', async () => {
158
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
159
- const Router = createMockRouter({
160
- '/static': { filePath: '/src/pages/static.ghtml.ts', pathname: '/static' },
161
- '/dynamic/[id]': { filePath: '/src/pages/dynamic/[id].ghtml.ts', pathname: '/dynamic/[id]' },
162
- });
163
-
164
- const RendererFactory = {
165
- createRenderer: vi.fn(() => ({
166
- createRoute: vi.fn(async () => ({ body: '<html>Static</html>' })),
167
- })),
168
- } as unknown as RouteRendererFactory;
169
-
170
- await ssg.generateStaticPages(Router, 'http://localhost:3000', RendererFactory);
171
-
172
- expect(writeMock).toHaveBeenCalledTimes(1);
173
- });
174
-
175
- test('should create directories for nested routes', async () => {
176
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
177
- const Router = createMockRouter({
178
- '/blog/post': { filePath: '/src/pages/blog/post.ghtml.ts', pathname: '/blog/post' },
179
- });
180
-
181
- const RendererFactory = {
182
- createRenderer: vi.fn(() => ({
183
- createRoute: vi.fn(async () => ({ body: '<html>Blog Post</html>' })),
184
- })),
185
- } as unknown as RouteRendererFactory;
186
-
187
- await ssg.generateStaticPages(Router, 'http://localhost:3000', RendererFactory);
188
-
189
- expect(ensureDirMock).toHaveBeenCalled();
190
- });
191
-
192
- test('should throw error when routeRendererFactory is missing for render strategy', async () => {
193
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
194
- const Router = createMockRouter({
195
- '/page': { filePath: '/src/pages/page.ghtml.ts', pathname: '/page' },
196
- });
197
-
198
- await ssg.generateStaticPages(Router, 'http://localhost:3000', undefined);
199
- });
200
-
201
- test('should write index.html for root path', async () => {
202
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
203
- const Router = createMockRouter({
204
- '/': { filePath: '/src/pages/index.ghtml.ts', pathname: '/' },
205
- });
206
-
207
- const RendererFactory = {
208
- createRenderer: vi.fn(() => ({
209
- createRoute: vi.fn(async () => ({ body: '<html>Home</html>' })),
210
- })),
211
- } as unknown as RouteRendererFactory;
212
-
213
- await ssg.generateStaticPages(Router, 'http://localhost:3000', RendererFactory);
214
-
215
- expect(writeMock).toHaveBeenCalledWith(expect.stringContaining('index.html'), '<html>Home</html>');
216
- });
217
-
218
- test('should handle Buffer content from renderer', async () => {
219
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
220
- const Router = createMockRouter({
221
- '/': { filePath: '/src/pages/index.ghtml.ts', pathname: '/' },
222
- });
223
-
224
- const bufferContent = Buffer.from('<html>Buffer Content</html>');
225
- const RendererFactory = {
226
- createRenderer: vi.fn(() => ({
227
- createRoute: vi.fn(async () => ({ body: bufferContent })),
228
- })),
229
- } as unknown as RouteRendererFactory;
230
-
231
- await ssg.generateStaticPages(Router, 'http://localhost:3000', RendererFactory);
232
-
233
- expect(writeMock).toHaveBeenCalledWith(expect.stringContaining('index.html'), bufferContent);
234
- });
235
-
236
- test('should skip cache dynamic pages during static generation and log a warning', async () => {
237
- vi.spyOn(PageModuleImportService.prototype, 'importModule').mockResolvedValue({
238
- default: Object.assign(() => null, { cache: 'dynamic' }),
239
- });
240
-
241
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
242
- const Router = createMockRouter({
243
- '/dashboard': { filePath: '/src/pages/dashboard.tsx', pathname: '/dashboard' },
244
- });
245
-
246
- const RendererFactory = {
247
- createRenderer: vi.fn(() => ({
248
- createRoute: vi.fn(async () => ({ body: '<html>Dashboard</html>' })),
249
- })),
250
- } as unknown as RouteRendererFactory;
251
-
252
- await ssg.generateStaticPages(Router, 'http://localhost:3000', RendererFactory);
253
-
254
- expect(RendererFactory.createRenderer).not.toHaveBeenCalled();
255
- expect(writeMock).not.toHaveBeenCalled();
256
- expect(appLogger.warn).toHaveBeenCalledWith(
257
- "Pages with cache: 'dynamic' are not supported in static generation or preview, so they will be skipped\n",
258
- '➤ /src/pages/dashboard.tsx',
259
- );
260
- });
261
- });
262
-
263
- describe('run', () => {
264
- test('should call generateRobotsTxt and generateStaticPages', async () => {
265
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
266
- const Router = {
267
- routes: {},
268
- origin: 'http://localhost:3000',
269
- } as unknown as FSRouter;
270
-
271
- await ssg.run({
272
- router: Router,
273
- baseUrl: 'http://localhost:3000',
274
- });
275
-
276
- expect(ensureDirMock).toHaveBeenCalled();
277
- expect(writeMock).toHaveBeenCalledWith('/test/project/dist/robots.txt', expect.any(String));
278
- });
279
-
280
- test('should skip explicit static routes backed by cache dynamic views', async () => {
281
- const ssg = new StaticSiteGenerator({ appConfig: createMockConfig() });
282
- const dynamicView = Object.assign(() => null, { cache: 'dynamic' }) as any;
283
-
284
- await ssg.run({
285
- router: {
286
- routes: {},
287
- origin: 'http://localhost:3000',
288
- } as unknown as FSRouter,
289
- baseUrl: 'http://localhost:3000',
290
- routeRendererFactory: {
291
- getRendererByIntegration: vi.fn(),
292
- } as unknown as RouteRendererFactory,
293
- staticRoutes: [
294
- {
295
- path: '/dashboard',
296
- loader: async () => ({ default: dynamicView }),
297
- },
298
- ],
299
- });
300
-
301
- expect(appLogger.warn).toHaveBeenCalledWith(
302
- "Pages with cache: 'dynamic' are not supported in static generation or preview, so they will be skipped\n",
303
- '➤ /dashboard',
304
- );
305
- });
306
- });
307
- });
@@ -1,114 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { deepMerge } from './deep-merge.ts';
3
-
4
- describe('deepMerge', () => {
5
- it('should merge two objects with nested properties', () => {
6
- const target = { a: 1, b: { c: 2 } };
7
- const source = { b: { d: 3 }, e: 4 };
8
- const expected = { a: 1, b: { c: 2, d: 3 }, e: 4 };
9
- const result = deepMerge(target, source);
10
- expect(result).toEqual(expected);
11
- });
12
-
13
- it('should merge two objects with overlapping properties', () => {
14
- const target = { a: 1, b: 2 };
15
- const source = { b: 3, c: 4 };
16
- const expected = { a: 1, b: 3, c: 4 };
17
- const result = deepMerge(target, source);
18
- expect(result).toEqual(expected);
19
- });
20
-
21
- it('should merge two objects with arrays', () => {
22
- const target = { a: [1, 2], b: { c: [3, 4] } };
23
- const source = { a: [5, 6], b: { c: [7, 8] } };
24
- const expected = { a: [1, 2, 5, 6], b: { c: [3, 4, 7, 8] } };
25
- const result = deepMerge(target, source);
26
- expect(result).toEqual(expected);
27
- });
28
-
29
- it('should merge two objects with nested objects', () => {
30
- const target = { a: { b: 1, c: 2 }, d: 3 };
31
- const source = { a: { c: 3, d: 4 }, e: 5 };
32
- const expected = { a: { b: 1, c: 3, d: 4 }, d: 3, e: 5 };
33
- const result = deepMerge(target, source);
34
- expect(result).toEqual(expected);
35
- });
36
-
37
- it('should overwrite non-object properties in the target', () => {
38
- const target = { a: 1, b: 2 };
39
- const source = { a: 3, c: 4 };
40
- const expected = { a: 3, b: 2, c: 4 };
41
- const result = deepMerge(target, source);
42
- expect(result).toEqual(expected);
43
- });
44
-
45
- it('should add properties from the source that are not in the target', () => {
46
- const target = { a: 1 };
47
- const source = { b: 2 };
48
- const expected = { a: 1, b: 2 };
49
- const result = deepMerge(target, source);
50
- expect(result).toEqual(expected);
51
- });
52
-
53
- it('should return an empty object when both inputs are empty', () => {
54
- const target = {};
55
- const source = {};
56
- const expected = {};
57
- const result = deepMerge(target, source);
58
- expect(result).toEqual(expected);
59
- });
60
-
61
- it('should ignore properties in the source that are undefined', () => {
62
- const target = { a: 1, b: 2 };
63
- const source = { a: undefined, c: 3 } as Partial<typeof target>;
64
- const expected = { a: 1, b: 2, c: 3 };
65
- const result = deepMerge(target, source);
66
- expect(result).toEqual(expected);
67
- });
68
-
69
- it('should merge dependencies', () => {
70
- const depsA = {
71
- stylesheets: ['/components/radiant-counter/radiant-counter.css'],
72
- scripts: ['/components/radiant-counter/radiant-counter.script.ts'],
73
- };
74
-
75
- const depsB = {
76
- stylesheets: [
77
- '/layouts/docs-layout/docs-layout.css',
78
- '/layouts/base-layout/base-layout.css',
79
- '/components/header/header.css',
80
- '/components/navigation/navigation.css',
81
- '/components/logo/logo.css',
82
- '/components/code-block/code-block.css',
83
- ],
84
- scripts: ['/layouts/base-layout/base-layout.script.ts'],
85
- };
86
-
87
- const expected = {
88
- stylesheets: [
89
- '/components/radiant-counter/radiant-counter.css',
90
- '/layouts/docs-layout/docs-layout.css',
91
- '/layouts/base-layout/base-layout.css',
92
- '/components/header/header.css',
93
- '/components/navigation/navigation.css',
94
- '/components/logo/logo.css',
95
- '/components/code-block/code-block.css',
96
- ],
97
- scripts: [
98
- '/components/radiant-counter/radiant-counter.script.ts',
99
- '/layouts/base-layout/base-layout.script.ts',
100
- ],
101
- };
102
-
103
- const result = deepMerge(depsA, depsB);
104
- expect(result).toEqual(expected);
105
- });
106
-
107
- it('should merge two arrays', () => {
108
- const target = [1, 2, 3];
109
- const source = [4, 5, 6];
110
- const expected = [1, 2, 3, 4, 5, 6];
111
- const result = deepMerge(target, source);
112
- expect(result).toEqual(expected);
113
- });
114
- });
@@ -1,22 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { invariant } from './invariant.ts';
3
-
4
- describe('invariant', () => {
5
- test('should not throw an error when the condition is true', () => {
6
- expect(() => {
7
- invariant(true);
8
- }).not.toThrow();
9
- });
10
-
11
- test('should throw an error with the default message when the condition is false', () => {
12
- expect(() => {
13
- invariant(false);
14
- }).toThrowError('[ecopages] An error occurred');
15
- });
16
-
17
- test('should throw an error with the provided message when the condition is false', () => {
18
- expect(() => {
19
- invariant(false, 'Custom error message');
20
- }).toThrowError('[ecopages] Custom error message');
21
- });
22
- });
@@ -1,15 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { PathUtils } from './path-utils.module.ts';
3
-
4
- describe('PathUtils', () => {
5
- test.each([
6
- ['packages/core/src/utils/file-name-analyzer.ts', '.ts'],
7
- ['packages/playground/src/pages/blog/author/%5Bid%5D.kita.tsx', '.kita.tsx'],
8
- ['packages/core/src/component-utils/deps-manager.ts', '.ts'],
9
- ['/packages/core/src/plugins/build-html-pages/build-html-pages.plugin.ts', '.plugin.ts'],
10
- ['packages/core/src/ecopages.fake.descriptor.ts', '.descriptor.ts'],
11
- ])('getEcoTemplateExtension: %p should return %p', (filePath, expected) => {
12
- const result = PathUtils.getEcoTemplateExtension(filePath);
13
- expect(result).toBe(expected);
14
- });
15
- });