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

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,267 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import fs from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { afterEach, test, vi } from 'vitest';
6
- import { ConfigBuilder } from '../../config/config-builder.ts';
7
- import { resolveInternalExecutionDir, resolveInternalWorkDir } from '../../utils/resolve-work-dir.ts';
8
- import { HmrManager } from './hmr-manager.ts';
9
-
10
- const tempRoots: string[] = [];
11
-
12
- function createTempRoot(prefix: string): string {
13
- const root = fs.mkdtempSync(path.join(os.tmpdir(), `${prefix}-`));
14
- tempRoots.push(root);
15
- return root;
16
- }
17
-
18
- afterEach(() => {
19
- for (const root of tempRoots.splice(0)) {
20
- fs.rmSync(root, { recursive: true, force: true });
21
- }
22
- vi.restoreAllMocks();
23
- });
24
-
25
- test('HmrManager shares one in-flight entrypoint registration across concurrent callers', async () => {
26
- const rootDir = createTempRoot('ecopages-bun-hmr-register');
27
- const srcDir = path.join(rootDir, 'src');
28
- const pagesDir = path.join(srcDir, 'pages');
29
- fs.mkdirSync(pagesDir, { recursive: true });
30
-
31
- const entrypointPath = path.join(pagesDir, 'react-lab.tsx');
32
- fs.writeFileSync(entrypointPath, 'export default function Page() { return null; }', 'utf8');
33
-
34
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
35
- const manager = new HmrManager({
36
- appConfig: config,
37
- bridge: {
38
- subscriberCount: 0,
39
- broadcast: () => {},
40
- subscribe: () => {},
41
- unsubscribe: () => {},
42
- } as any,
43
- });
44
-
45
- const relativePathJs = path
46
- .relative(config.absolutePaths.srcDir, entrypointPath)
47
- .replace(/\.(tsx?|jsx?|mdx?)$/, '.js');
48
- const encodedPathJs = relativePathJs.replace(/\[([^\]]+)\]/g, '_$1_');
49
- const outputPath = path.join(resolveInternalWorkDir(config), 'assets', '_hmr', encodedPathJs);
50
-
51
- const handleFileChange = vi.spyOn(manager, 'handleFileChange').mockImplementation(async () => {
52
- await new Promise((resolve) => setTimeout(resolve, 25));
53
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
54
- fs.writeFileSync(outputPath, 'export default 1;', 'utf8');
55
- });
56
-
57
- const [firstUrl, secondUrl] = await Promise.all([
58
- manager.registerEntrypoint(entrypointPath),
59
- manager.registerEntrypoint(entrypointPath),
60
- ]);
61
-
62
- assert.equal(firstUrl, '/assets/_hmr/pages/react-lab.js');
63
- assert.equal(secondUrl, '/assets/_hmr/pages/react-lab.js');
64
- assert.equal(handleFileChange.mock.calls.length, 1);
65
- assert.equal(fs.existsSync(outputPath), true);
66
-
67
- manager.stop();
68
- });
69
-
70
- test('HmrManager clears timed-out entrypoint registrations so later requests can retry', async () => {
71
- const rootDir = createTempRoot('ecopages-bun-hmr-timeout-register');
72
- const srcDir = path.join(rootDir, 'src');
73
- const pagesDir = path.join(srcDir, 'pages');
74
- fs.mkdirSync(pagesDir, { recursive: true });
75
-
76
- const entrypointPath = path.join(pagesDir, 'stuck-page.tsx');
77
- fs.writeFileSync(entrypointPath, 'export default function Page() { return null; }', 'utf8');
78
-
79
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
80
- const manager = new HmrManager({
81
- appConfig: config,
82
- bridge: {
83
- subscriberCount: 0,
84
- broadcast: () => {},
85
- subscribe: () => {},
86
- unsubscribe: () => {},
87
- } as any,
88
- });
89
-
90
- const previousNodeEnv = process.env.NODE_ENV;
91
- process.env.NODE_ENV = 'development';
92
-
93
- const handleFileChange = vi.spyOn(manager, 'handleFileChange').mockImplementation(async () => {
94
- await new Promise(() => undefined);
95
- });
96
-
97
- try {
98
- await assert.rejects(() => manager.registerEntrypoint(entrypointPath), /Timed out registering entrypoint/);
99
-
100
- const registrations = (manager as unknown as { entrypointRegistrations: Map<string, Promise<string>> })
101
- .entrypointRegistrations;
102
- const watchedFiles = manager.getWatchedFiles();
103
- assert.equal(registrations.size, 0);
104
- assert.equal(watchedFiles.has(entrypointPath), false);
105
-
106
- handleFileChange.mockImplementationOnce(async () => {
107
- const relativePathJs = path
108
- .relative(config.absolutePaths.srcDir, entrypointPath)
109
- .replace(/\.(tsx?|jsx?|mdx?)$/, '.js');
110
- const encodedPathJs = relativePathJs.replace(/\[([^\]]+)\]/g, '_$1_');
111
- const outputPath = path.join(resolveInternalWorkDir(config), 'assets', '_hmr', encodedPathJs);
112
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
113
- fs.writeFileSync(outputPath, 'export default 2;', 'utf8');
114
- });
115
-
116
- const retriedUrl = await manager.registerEntrypoint(entrypointPath);
117
- assert.equal(retriedUrl, '/assets/_hmr/pages/stuck-page.js');
118
- assert.equal(watchedFiles.get(entrypointPath), retriedUrl);
119
- } finally {
120
- process.env.NODE_ENV = previousNodeEnv;
121
- manager.stop();
122
- }
123
- });
124
-
125
- test('HmrManager fails strict entrypoint registration when the owning integration emits no output', async () => {
126
- const rootDir = createTempRoot('ecopages-bun-hmr-strict-fail');
127
- const srcDir = path.join(rootDir, 'src');
128
- const pagesDir = path.join(srcDir, 'pages');
129
- fs.mkdirSync(pagesDir, { recursive: true });
130
-
131
- const entrypointPath = path.join(pagesDir, 'react-content.mdx');
132
- fs.writeFileSync(entrypointPath, '# Hello', 'utf8');
133
-
134
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
135
- const manager = new HmrManager({
136
- appConfig: config,
137
- bridge: {
138
- subscriberCount: 0,
139
- broadcast: () => {},
140
- subscribe: () => {},
141
- unsubscribe: () => {},
142
- } as any,
143
- });
144
-
145
- vi.spyOn(manager, 'handleFileChange').mockImplementation(async () => {});
146
-
147
- await assert.rejects(() => manager.registerEntrypoint(entrypointPath), /Integration failed to emit entrypoint/);
148
- assert.equal(manager.getWatchedFiles().has(path.resolve(entrypointPath)), false);
149
-
150
- manager.stop();
151
- });
152
-
153
- test('HmrManager uses the generic build path for script entrypoints when no strategy emits output', async () => {
154
- const rootDir = createTempRoot('ecopages-bun-hmr-script-fallback');
155
- const srcDir = path.join(rootDir, 'src');
156
- fs.mkdirSync(srcDir, { recursive: true });
157
-
158
- const entrypointPath = path.join(srcDir, 'script.ts');
159
- fs.writeFileSync(entrypointPath, 'console.log("hello");', 'utf8');
160
-
161
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
162
- const manager = new HmrManager({
163
- appConfig: config,
164
- bridge: {
165
- subscriberCount: 0,
166
- broadcast: () => {},
167
- subscribe: () => {},
168
- unsubscribe: () => {},
169
- } as any,
170
- });
171
-
172
- const outputPath = path.join(resolveInternalWorkDir(config), 'assets', '_hmr', 'script.js');
173
- const buildCalls: string[] = [];
174
- config.runtime!.buildExecutor = {
175
- build: vi.fn(async (options) => {
176
- buildCalls.push(options.entrypoints[0] as string);
177
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
178
- fs.writeFileSync(outputPath, 'fresh-output', 'utf8');
179
-
180
- return {
181
- success: true,
182
- logs: [],
183
- outputs: [{ path: outputPath }],
184
- };
185
- }),
186
- };
187
-
188
- vi.spyOn(manager, 'handleFileChange').mockImplementation(async () => {});
189
-
190
- const outputUrl = await manager.registerScriptEntrypoint(entrypointPath);
191
-
192
- assert.equal(outputUrl, '/assets/_hmr/script.js');
193
- assert.deepEqual(buildCalls, [entrypointPath]);
194
- assert.equal(fs.readFileSync(outputPath, 'utf8'), 'fresh-output');
195
-
196
- manager.stop();
197
- });
198
-
199
- test('HmrManager stop clears retained registration state', async () => {
200
- const rootDir = createTempRoot('ecopages-bun-hmr-stop-cleanup');
201
- const srcDir = path.join(rootDir, 'src');
202
- const pagesDir = path.join(srcDir, 'pages');
203
- fs.mkdirSync(pagesDir, { recursive: true });
204
-
205
- const entrypointPath = path.join(pagesDir, 'react-content.tsx');
206
- fs.writeFileSync(entrypointPath, 'export default function Page() { return null; }', 'utf8');
207
-
208
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
209
- const manager = new HmrManager({
210
- appConfig: config,
211
- bridge: {
212
- subscriberCount: 0,
213
- broadcast: () => {},
214
- subscribe: () => {},
215
- unsubscribe: () => {},
216
- } as any,
217
- });
218
-
219
- const relativePathJs = path
220
- .relative(config.absolutePaths.srcDir, entrypointPath)
221
- .replace(/\.(tsx?|jsx?|mdx?)$/, '.js');
222
- const encodedPathJs = relativePathJs.replace(/\[([^\]]+)\]/g, '_$1_');
223
- const outputPath = path.join(resolveInternalWorkDir(config), 'assets', '_hmr', encodedPathJs);
224
-
225
- vi.spyOn(manager, 'handleFileChange').mockImplementation(async () => {
226
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
227
- fs.writeFileSync(outputPath, 'export default 1;', 'utf8');
228
- });
229
-
230
- manager.registerSpecifierMap({ react: '/assets/vendors/react.js' });
231
- await manager.registerEntrypoint(entrypointPath);
232
-
233
- manager.stop();
234
-
235
- assert.equal(manager.getWatchedFiles().size, 0);
236
- assert.equal(manager.getSpecifierMap().size, 0);
237
- });
238
-
239
- test('HmrManager keeps internal browser and server-module outputs out of distDir', async () => {
240
- const rootDir = createTempRoot('ecopages-bun-hmr-internal-paths');
241
- const config = await new ConfigBuilder().setRootDir(rootDir).build();
242
- const manager = new HmrManager({
243
- appConfig: config,
244
- bridge: {
245
- subscriberCount: 0,
246
- broadcast: () => {},
247
- subscribe: () => {},
248
- unsubscribe: () => {},
249
- } as any,
250
- });
251
-
252
- assert.equal(manager.getDistDir(), path.join(resolveInternalWorkDir(config), 'assets', '_hmr'));
253
-
254
- const importModule = vi.fn(async (_options: { outdir: string }) => ({}));
255
- (manager as unknown as { serverModuleTranspiler: { importModule: typeof importModule } }).serverModuleTranspiler = {
256
- importModule,
257
- };
258
-
259
- await manager.getDefaultContext().importServerModule(path.join(config.absolutePaths.srcDir, 'pages', 'index.tsx'));
260
-
261
- assert.equal(
262
- importModule.mock.calls[0]?.[0]?.outdir,
263
- path.join(resolveInternalExecutionDir(config), '.server-modules'),
264
- );
265
-
266
- manager.stop();
267
- });
@@ -1,282 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import fs from 'node:fs';
3
- import { tmpdir } from 'node:os';
4
- import path from 'node:path';
5
- import { test } from 'vitest';
6
- import {
7
- createNodeBootstrapPlugin,
8
- getNodeUnsupportedBuiltinError,
9
- resolveNodeBootstrapDependency,
10
- } from './bootstrap-dependency-resolver.ts';
11
-
12
- function writePackage(packageDir: string, options: { name: string; main?: string }) {
13
- fs.mkdirSync(packageDir, { recursive: true });
14
- fs.writeFileSync(
15
- path.join(packageDir, 'package.json'),
16
- JSON.stringify({
17
- name: options.name,
18
- main: options.main ?? 'index.js',
19
- }),
20
- 'utf8',
21
- );
22
- const entryFilePath = path.join(packageDir, options.main ?? 'index.js');
23
- fs.mkdirSync(path.dirname(entryFilePath), { recursive: true });
24
- fs.writeFileSync(entryFilePath, 'export default null;\n', 'utf8');
25
- }
26
-
27
- test('resolveNodeBootstrapDependency keeps relative, node, and workspace specifiers in the bundle graph', () => {
28
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
29
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
30
-
31
- try {
32
- const options = {
33
- projectDir: rootDir,
34
- runtimeNodeModulesDir: path.join(rootDir, '.eco', 'node_modules'),
35
- };
36
-
37
- assert.equal(resolveNodeBootstrapDependency({ path: './local.ts' }, options), undefined);
38
- assert.equal(resolveNodeBootstrapDependency({ path: 'node:path' }, options), undefined);
39
- assert.equal(resolveNodeBootstrapDependency({ path: '@/data/demo-data' }, options), undefined);
40
- assert.deepEqual(resolveNodeBootstrapDependency({ path: '@ecopages/core' }, options), {
41
- path: require.resolve('@ecopages/core'),
42
- });
43
- } finally {
44
- fs.rmSync(rootDir, { recursive: true, force: true });
45
- }
46
- });
47
-
48
- test('resolveNodeBootstrapDependency externalizes third-party packages and links them into runtime node_modules', () => {
49
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
50
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
51
- const importerPath = path.join(rootDir, 'packages', 'example', 'src', 'index.ts');
52
- fs.mkdirSync(path.dirname(importerPath), { recursive: true });
53
- fs.writeFileSync(importerPath, 'export default null;\n', 'utf8');
54
- writePackage(path.join(rootDir, 'node_modules', 'fast-glob'), { name: 'fast-glob', main: 'out/index.js' });
55
-
56
- try {
57
- const runtimeNodeModulesDir = path.join(rootDir, '.eco', 'node_modules');
58
- const result = resolveNodeBootstrapDependency(
59
- { path: 'fast-glob', importer: importerPath },
60
- { projectDir: rootDir, runtimeNodeModulesDir },
61
- );
62
-
63
- assert.deepEqual(result, { path: 'fast-glob', external: true });
64
- assert.equal(
65
- fs.realpathSync(path.join(runtimeNodeModulesDir, 'fast-glob')),
66
- fs.realpathSync(path.join(rootDir, 'node_modules', 'fast-glob')),
67
- );
68
- } finally {
69
- fs.rmSync(rootDir, { recursive: true, force: true });
70
- }
71
- });
72
-
73
- test('resolveNodeBootstrapDependency resolves workspace-source third-party imports from the app project boundary', () => {
74
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
75
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
76
- const importerPath = path.join(rootDir, 'packages', 'react-plugin', 'src', 'plugin.ts');
77
- fs.mkdirSync(path.dirname(importerPath), { recursive: true });
78
- fs.writeFileSync(importerPath, 'export default null;\n', 'utf8');
79
- writePackage(path.join(rootDir, 'node_modules', 'react'), { name: 'react', main: 'index.js' });
80
-
81
- try {
82
- const runtimeNodeModulesDir = path.join(rootDir, '.eco', 'node_modules');
83
- const result = resolveNodeBootstrapDependency(
84
- { path: 'react', importer: importerPath },
85
- { projectDir: rootDir, runtimeNodeModulesDir },
86
- );
87
-
88
- assert.deepEqual(result, { path: 'react', external: true });
89
- assert.equal(
90
- fs.realpathSync(path.join(runtimeNodeModulesDir, 'react')),
91
- fs.realpathSync(path.join(rootDir, 'node_modules', 'react')),
92
- );
93
- } finally {
94
- fs.rmSync(rootDir, { recursive: true, force: true });
95
- }
96
- });
97
-
98
- test('resolveNodeBootstrapDependency resolves nested third-party dependencies from the importer package context', () => {
99
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
100
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
101
- const importerPackageDir = path.join(rootDir, 'node_modules', 'dep-a');
102
- writePackage(importerPackageDir, { name: 'dep-a' });
103
- const nestedDependencyDir = path.join(importerPackageDir, 'node_modules', 'dep-b');
104
- writePackage(nestedDependencyDir, { name: 'dep-b' });
105
- const importerPath = path.join(importerPackageDir, 'index.js');
106
-
107
- try {
108
- const runtimeNodeModulesDir = path.join(rootDir, '.eco', 'node_modules');
109
- const result = resolveNodeBootstrapDependency(
110
- { path: 'dep-b', importer: importerPath },
111
- { projectDir: rootDir, runtimeNodeModulesDir },
112
- );
113
-
114
- assert.deepEqual(result, { path: 'dep-b', external: true });
115
- assert.equal(fs.realpathSync(path.join(runtimeNodeModulesDir, 'dep-b')), fs.realpathSync(nestedDependencyDir));
116
- } finally {
117
- fs.rmSync(rootDir, { recursive: true, force: true });
118
- }
119
- });
120
-
121
- test('createNodeBootstrapPlugin wires the shared resolution policy into an Eco build plugin', async () => {
122
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
123
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
124
- writePackage(path.join(rootDir, 'node_modules', 'fast-glob'), { name: 'fast-glob', main: 'out/index.js' });
125
-
126
- try {
127
- const plugin = createNodeBootstrapPlugin({
128
- projectDir: rootDir,
129
- runtimeNodeModulesDir: path.join(rootDir, '.eco', 'node_modules'),
130
- });
131
-
132
- let onResolveCallback: ((args: { path: string; importer?: string; namespace?: string }) => unknown) | undefined;
133
-
134
- await plugin.setup({
135
- onResolve(_options, callback) {
136
- onResolveCallback = callback;
137
- },
138
- onLoad() {},
139
- module() {},
140
- });
141
-
142
- assert.ok(onResolveCallback);
143
- assert.deepEqual(onResolveCallback?.({ path: 'fast-glob' }), {
144
- path: 'fast-glob',
145
- external: true,
146
- });
147
- } finally {
148
- fs.rmSync(rootDir, { recursive: true, force: true });
149
- }
150
- });
151
-
152
- test('createNodeBootstrapPlugin rewrites import.meta only for declared bootstrap files', async () => {
153
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
154
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
155
- const bootstrapFile = path.join(rootDir, 'eco.config.ts');
156
- const regularFile = path.join(rootDir, 'src', 'page.kita.tsx');
157
- fs.mkdirSync(path.dirname(regularFile), { recursive: true });
158
- fs.writeFileSync(bootstrapFile, 'export default import.meta.dirname;\n', 'utf8');
159
- fs.writeFileSync(regularFile, 'export default import.meta.dirname;\n', 'utf8');
160
-
161
- try {
162
- const plugin = createNodeBootstrapPlugin({
163
- projectDir: rootDir,
164
- runtimeNodeModulesDir: path.join(rootDir, '.eco', 'node_modules'),
165
- preserveImportMetaPaths: [bootstrapFile],
166
- });
167
-
168
- let onLoadCallback: ((args: { path: string; namespace?: string }) => Promise<unknown> | unknown) | undefined;
169
-
170
- await plugin.setup({
171
- onResolve() {},
172
- onLoad(_options, callback) {
173
- onLoadCallback = callback;
174
- },
175
- module() {},
176
- });
177
-
178
- assert.ok(onLoadCallback);
179
- const bootstrapResult = await onLoadCallback?.({ path: bootstrapFile });
180
- const regularResult = await onLoadCallback?.({ path: regularFile });
181
-
182
- assert.equal(typeof (bootstrapResult as { contents?: string } | undefined)?.contents, 'string');
183
- assert.equal(
184
- bootstrapResult && typeof bootstrapResult === 'object' && 'contents' in bootstrapResult
185
- ? String((bootstrapResult as { contents: string }).contents).includes(
186
- JSON.stringify(path.dirname(bootstrapFile)),
187
- )
188
- : false,
189
- true,
190
- );
191
- assert.equal(regularResult, undefined);
192
- } finally {
193
- fs.rmSync(rootDir, { recursive: true, force: true });
194
- }
195
- });
196
-
197
- test('createNodeBootstrapPlugin injects side-effect imports for project re-export barrels', async () => {
198
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
199
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
200
- const barrelFile = path.join(rootDir, 'src', 'layouts', 'base-layout', 'index.ts');
201
- fs.mkdirSync(path.dirname(barrelFile), { recursive: true });
202
- fs.writeFileSync(
203
- barrelFile,
204
- [
205
- "export * from './base-layout.kita';",
206
- "export { BaseLayout } from './base-layout.kita';",
207
- "export type { BaseLayoutProps } from './base-layout.kita';",
208
- ].join('\n'),
209
- 'utf8',
210
- );
211
-
212
- try {
213
- const plugin = createNodeBootstrapPlugin({
214
- projectDir: rootDir,
215
- runtimeNodeModulesDir: path.join(rootDir, '.eco', 'node_modules'),
216
- });
217
-
218
- let onLoadCallback: ((args: { path: string; namespace?: string }) => Promise<unknown> | unknown) | undefined;
219
-
220
- await plugin.setup({
221
- onResolve() {},
222
- onLoad(_options, callback) {
223
- onLoadCallback = callback;
224
- },
225
- module() {},
226
- });
227
-
228
- assert.ok(onLoadCallback);
229
- const result = await onLoadCallback?.({ path: barrelFile });
230
- const contents =
231
- result && typeof result === 'object' && 'contents' in result
232
- ? String((result as { contents: string }).contents)
233
- : '';
234
-
235
- assert.match(contents, /^import \* as __eco_bootstrap_reexport_0 from '\.\/base-layout\.kita';/m);
236
- assert.match(contents, /^void __eco_bootstrap_reexport_0;$/m);
237
- assert.match(contents, /export \* from '\.\/base-layout\.kita';/);
238
- assert.match(contents, /export \{ BaseLayout \} from '\.\/base-layout\.kita';/);
239
- assert.match(contents, /export type \{ BaseLayoutProps \} from '\.\/base-layout\.kita';/);
240
- assert.equal(
241
- contents.match(/import \* as __eco_bootstrap_reexport_0 from '\.\/base-layout\.kita';/g)?.length,
242
- 1,
243
- );
244
- } finally {
245
- fs.rmSync(rootDir, { recursive: true, force: true });
246
- }
247
- });
248
-
249
- test('createNodeBootstrapPlugin fails fast on Bun-only builtins', async () => {
250
- const rootDir = fs.mkdtempSync(path.join(tmpdir(), 'eco-node-bootstrap-'));
251
- fs.writeFileSync(path.join(rootDir, 'package.json'), '{}', 'utf8');
252
- const importerPath = path.join(rootDir, 'src', 'db.server.ts');
253
-
254
- try {
255
- const plugin = createNodeBootstrapPlugin({
256
- projectDir: rootDir,
257
- runtimeNodeModulesDir: path.join(rootDir, '.eco', 'node_modules'),
258
- });
259
-
260
- let onResolveCallback: ((args: { path: string; importer?: string; namespace?: string }) => unknown) | undefined;
261
-
262
- await plugin.setup({
263
- onResolve(options, callback) {
264
- if (String(options.filter) === String(/^bun:/)) {
265
- onResolveCallback = callback;
266
- }
267
- },
268
- onLoad() {},
269
- module() {},
270
- });
271
-
272
- assert.ok(onResolveCallback);
273
- assert.throws(
274
- () => onResolveCallback?.({ path: 'bun:sqlite', importer: importerPath }),
275
- new RegExp(
276
- getNodeUnsupportedBuiltinError('bun:sqlite', importerPath).replace(/[.*+?^${}()|[\]\\]/g, '\\$&'),
277
- ),
278
- );
279
- } finally {
280
- fs.rmSync(rootDir, { recursive: true, force: true });
281
- }
282
- });