@ecopages/core 0.2.0-alpha.1 → 0.2.0-alpha.11

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 (372) hide show
  1. package/CHANGELOG.md +16 -64
  2. package/README.md +210 -13
  3. package/package.json +88 -62
  4. package/src/adapters/README.md +39 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +4 -12
  11. package/src/adapters/bun/create-app.js +4 -5
  12. package/src/adapters/bun/hmr-manager.d.ts +80 -21
  13. package/src/adapters/bun/hmr-manager.js +163 -56
  14. package/src/adapters/bun/index.d.ts +2 -3
  15. package/src/adapters/bun/index.js +3 -3
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +40 -34
  18. package/src/adapters/bun/server-lifecycle.d.ts +28 -17
  19. package/src/adapters/bun/server-lifecycle.js +34 -62
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +2 -6
  23. package/src/adapters/index.js +2 -8
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +89 -18
  28. package/src/adapters/node/node-hmr-manager.js +180 -89
  29. package/src/adapters/node/server-adapter.d.ts +4 -33
  30. package/src/adapters/node/server-adapter.js +39 -100
  31. package/src/adapters/node/static-content-server.d.ts +37 -1
  32. package/src/adapters/node/static-content-server.js +29 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  35. package/src/adapters/shared/explicit-static-route-matcher.d.ts +2 -2
  36. package/src/adapters/shared/explicit-static-route-matcher.js +4 -1
  37. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
  38. package/src/adapters/shared/file-route-middleware-pipeline.js +1 -0
  39. package/src/adapters/shared/fs-server-response-factory.d.ts +2 -2
  40. package/src/adapters/shared/fs-server-response-factory.js +1 -1
  41. package/src/adapters/shared/fs-server-response-matcher.d.ts +9 -5
  42. package/src/adapters/shared/fs-server-response-matcher.js +13 -8
  43. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  44. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  45. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  46. package/src/adapters/shared/hmr-html-response.js +32 -0
  47. package/src/adapters/shared/render-context.d.ts +2 -1
  48. package/src/adapters/shared/render-context.js +6 -3
  49. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  50. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  51. package/src/adapters/shared/server-adapter.d.ts +13 -3
  52. package/src/adapters/shared/server-adapter.js +42 -5
  53. package/src/adapters/shared/server-route-handler.d.ts +4 -4
  54. package/src/adapters/shared/server-route-handler.js +6 -15
  55. package/src/adapters/shared/server-static-builder.d.ts +38 -6
  56. package/src/adapters/shared/server-static-builder.js +64 -10
  57. package/src/build/README.md +107 -0
  58. package/src/build/build-adapter.d.ts +160 -3
  59. package/src/build/build-adapter.js +494 -16
  60. package/src/build/build-manifest.d.ts +27 -0
  61. package/src/build/build-manifest.js +30 -0
  62. package/src/build/dev-build-coordinator.d.ts +72 -0
  63. package/src/build/dev-build-coordinator.js +154 -0
  64. package/src/build/esbuild-build-adapter.d.ts +15 -6
  65. package/src/build/esbuild-build-adapter.js +189 -74
  66. package/src/build/runtime-build-executor.d.ts +14 -0
  67. package/src/build/runtime-build-executor.js +22 -0
  68. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  69. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  70. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  71. package/src/build/runtime-specifier-aliases.js +95 -0
  72. package/src/config/README.md +36 -0
  73. package/src/config/config-builder.d.ts +52 -18
  74. package/src/config/config-builder.js +258 -48
  75. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  76. package/src/{constants.js → config/constants.js} +4 -0
  77. package/src/declarations.d.ts +19 -14
  78. package/src/dev/sc-server.d.ts +1 -1
  79. package/src/dev/sc-server.js +1 -1
  80. package/src/eco/README.md +70 -16
  81. package/src/eco/component-render-context.d.ts +2 -2
  82. package/src/eco/component-render-context.js +33 -16
  83. package/src/eco/eco.browser.d.ts +2 -0
  84. package/src/eco/eco.browser.js +83 -0
  85. package/src/eco/eco.js +91 -16
  86. package/src/eco/eco.types.d.ts +12 -4
  87. package/src/eco/eco.utils.d.ts +1 -1
  88. package/src/eco/global-injector-map.d.ts +1 -1
  89. package/src/eco/lazy-injector-map.d.ts +1 -1
  90. package/src/hmr/README.md +26 -0
  91. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  92. package/src/hmr/client/hmr-runtime.js +30 -7
  93. package/src/hmr/hmr-strategy.d.ts +8 -7
  94. package/src/hmr/hmr-strategy.js +22 -7
  95. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  96. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  97. package/src/hmr/hmr.test.e2e.js +26 -33
  98. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  99. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  100. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -43
  101. package/src/hmr/strategies/js-hmr-strategy.js +72 -73
  102. package/src/index.browser.d.ts +2 -2
  103. package/src/index.browser.js +1 -1
  104. package/src/index.d.ts +4 -3
  105. package/src/index.js +16 -5
  106. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -2
  107. package/src/integrations/ghtml/ghtml-renderer.js +3 -1
  108. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -2
  109. package/src/integrations/ghtml/ghtml.plugin.js +2 -2
  110. package/src/plugins/README.md +35 -0
  111. package/src/plugins/alias-resolver-plugin.js +17 -3
  112. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  113. package/src/plugins/eco-component-meta-plugin.js +27 -21
  114. package/src/plugins/integration-plugin.d.ts +48 -9
  115. package/src/plugins/integration-plugin.js +39 -2
  116. package/src/plugins/processor.d.ts +15 -2
  117. package/src/plugins/processor.js +16 -2
  118. package/src/plugins/runtime-capability.d.ts +9 -0
  119. package/src/plugins/source-transform.d.ts +46 -0
  120. package/src/plugins/source-transform.js +71 -0
  121. package/src/route-renderer/GRAPH.md +18 -22
  122. package/src/route-renderer/README.md +15 -26
  123. package/src/route-renderer/{component-graph-executor.d.ts → component-graph/component-graph-executor.d.ts} +3 -2
  124. package/src/route-renderer/{component-graph-executor.js → component-graph/component-graph-executor.js} +2 -3
  125. package/src/route-renderer/{component-graph.d.ts → component-graph/component-graph.d.ts} +13 -2
  126. package/src/route-renderer/{component-graph.js → component-graph/component-graph.js} +26 -4
  127. package/src/route-renderer/component-graph/component-reference.d.ts +11 -0
  128. package/src/route-renderer/component-graph/component-reference.js +39 -0
  129. package/src/route-renderer/{marker-graph-resolver.d.ts → component-graph/marker-graph-resolver.d.ts} +9 -6
  130. package/src/route-renderer/{marker-graph-resolver.js → component-graph/marker-graph-resolver.js} +36 -12
  131. package/src/route-renderer/{integration-renderer.d.ts → orchestration/integration-renderer.d.ts} +65 -13
  132. package/src/route-renderer/{integration-renderer.js → orchestration/integration-renderer.js} +206 -30
  133. package/src/route-renderer/{render-execution.service.d.ts → orchestration/render-execution.service.d.ts} +42 -6
  134. package/src/route-renderer/orchestration/render-execution.service.js +191 -0
  135. package/src/route-renderer/{render-preparation.service.d.ts → orchestration/render-preparation.service.d.ts} +13 -4
  136. package/src/route-renderer/{render-preparation.service.js → orchestration/render-preparation.service.js} +95 -5
  137. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  138. package/src/route-renderer/{dependency-resolver.js → page-loading/dependency-resolver.js} +18 -4
  139. package/src/route-renderer/page-loading/page-module-loader.d.ts +89 -0
  140. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +38 -14
  141. package/src/route-renderer/route-renderer.d.ts +41 -4
  142. package/src/route-renderer/route-renderer.js +32 -3
  143. package/src/router/README.md +97 -0
  144. package/src/router/client/link-intent.d.ts +53 -0
  145. package/src/router/client/link-intent.js +34 -0
  146. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  147. package/src/router/client/link-intent.test.browser.js +43 -0
  148. package/src/router/client/navigation-coordinator.d.ts +149 -0
  149. package/src/router/client/navigation-coordinator.js +215 -0
  150. package/src/router/{fs-router-scanner.d.ts → server/fs-router-scanner.d.ts} +3 -3
  151. package/src/router/{fs-router-scanner.js → server/fs-router-scanner.js} +8 -7
  152. package/src/router/{fs-router.d.ts → server/fs-router.d.ts} +1 -1
  153. package/src/router/{fs-router.js → server/fs-router.js} +1 -1
  154. package/src/services/README.md +29 -0
  155. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
  156. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +91 -10
  157. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  158. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  159. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +2 -1
  160. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  161. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
  162. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  163. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  164. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  165. package/src/services/assets/asset-processing-service/index.js +5 -0
  166. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  167. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  168. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  169. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +9 -4
  170. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.d.ts +5 -4
  171. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.js +15 -23
  172. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  173. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  174. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +2 -2
  175. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.js +1 -1
  176. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  177. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +16 -4
  178. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
  179. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +6 -5
  180. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
  181. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.js +1 -1
  182. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  183. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +5 -2
  184. package/src/services/assets/browser-bundle.service.d.ts +32 -0
  185. package/src/services/assets/browser-bundle.service.js +33 -0
  186. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  187. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  188. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  189. package/src/services/html/html-rewriter-provider.service.js +68 -0
  190. package/src/services/html/html-transformer.service.d.ts +77 -0
  191. package/src/services/html/html-transformer.service.js +215 -0
  192. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  193. package/src/services/invalidation/development-invalidation.service.js +190 -0
  194. package/src/services/module-loading/app-module-loader.service.d.ts +25 -0
  195. package/src/services/module-loading/app-module-loader.service.js +31 -0
  196. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  197. package/src/services/module-loading/app-server-module-transpiler.service.js +109 -0
  198. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  199. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  200. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  201. package/src/services/module-loading/node-bootstrap-plugin.d.ts +22 -0
  202. package/src/services/module-loading/node-bootstrap-plugin.js +179 -0
  203. package/src/services/module-loading/page-module-import.service.d.ts +75 -0
  204. package/src/services/module-loading/page-module-import.service.js +161 -0
  205. package/src/services/module-loading/server-module-transpiler.service.d.ts +72 -0
  206. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  207. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  208. package/src/services/runtime-state/dev-graph.service.js +162 -0
  209. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  210. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  211. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  212. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  213. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  214. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  215. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  216. package/src/static-site-generator/README.md +26 -0
  217. package/src/static-site-generator/static-site-generator.d.ts +55 -3
  218. package/src/static-site-generator/static-site-generator.js +86 -5
  219. package/src/{internal-types.d.ts → types/internal-types.d.ts} +53 -22
  220. package/src/types/internal-types.js +0 -0
  221. package/src/{public-types.d.ts → types/public-types.d.ts} +73 -17
  222. package/src/types/public-types.js +0 -0
  223. package/src/utils/locals-utils.d.ts +1 -1
  224. package/src/utils/parse-cli-args.d.ts +4 -1
  225. package/src/utils/parse-cli-args.js +16 -1
  226. package/src/utils/resolve-work-dir.d.ts +11 -0
  227. package/src/utils/resolve-work-dir.js +31 -0
  228. package/src/watchers/project-watcher.d.ts +40 -24
  229. package/src/watchers/project-watcher.js +105 -68
  230. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  231. package/src/watchers/project-watcher.test-helpers.js +1 -0
  232. package/src/adapters/abstract/application-adapter.ts +0 -337
  233. package/src/adapters/abstract/router-adapter.ts +0 -30
  234. package/src/adapters/abstract/server-adapter.ts +0 -79
  235. package/src/adapters/bun/client-bridge.ts +0 -62
  236. package/src/adapters/bun/create-app.ts +0 -189
  237. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  238. package/src/adapters/bun/define-api-handler.ts +0 -114
  239. package/src/adapters/bun/hmr-manager.ts +0 -281
  240. package/src/adapters/bun/index.ts +0 -3
  241. package/src/adapters/bun/server-adapter.ts +0 -492
  242. package/src/adapters/bun/server-lifecycle.ts +0 -154
  243. package/src/adapters/index.ts +0 -6
  244. package/src/adapters/node/create-app.ts +0 -179
  245. package/src/adapters/node/index.d.ts +0 -4
  246. package/src/adapters/node/index.js +0 -8
  247. package/src/adapters/node/index.ts +0 -9
  248. package/src/adapters/node/node-client-bridge.ts +0 -79
  249. package/src/adapters/node/node-hmr-manager.ts +0 -271
  250. package/src/adapters/node/server-adapter.ts +0 -561
  251. package/src/adapters/node/static-content-server.ts +0 -203
  252. package/src/adapters/shared/api-response.ts +0 -104
  253. package/src/adapters/shared/application-adapter.ts +0 -199
  254. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  255. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  256. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  257. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  258. package/src/adapters/shared/render-context.ts +0 -105
  259. package/src/adapters/shared/server-adapter.ts +0 -442
  260. package/src/adapters/shared/server-route-handler.ts +0 -166
  261. package/src/adapters/shared/server-static-builder.ts +0 -82
  262. package/src/build/build-adapter.ts +0 -132
  263. package/src/build/build-types.ts +0 -83
  264. package/src/build/esbuild-build-adapter.ts +0 -510
  265. package/src/config/config-builder.ts +0 -474
  266. package/src/constants.ts +0 -39
  267. package/src/create-app.ts +0 -87
  268. package/src/define-api-handler.js +0 -15
  269. package/src/define-api-handler.ts +0 -66
  270. package/src/dev/sc-server.ts +0 -143
  271. package/src/eco/component-render-context.ts +0 -202
  272. package/src/eco/eco.ts +0 -221
  273. package/src/eco/eco.types.ts +0 -202
  274. package/src/eco/eco.utils.ts +0 -89
  275. package/src/eco/global-injector-map.ts +0 -112
  276. package/src/eco/lazy-injector-map.ts +0 -120
  277. package/src/eco/module-dependencies.ts +0 -75
  278. package/src/errors/http-error.ts +0 -72
  279. package/src/errors/index.ts +0 -2
  280. package/src/errors/locals-access-error.ts +0 -7
  281. package/src/global/app-logger.ts +0 -4
  282. 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
  283. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  284. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  285. package/src/hmr/client/hmr-runtime.ts +0 -121
  286. package/src/hmr/hmr-strategy.ts +0 -172
  287. package/src/hmr/hmr.test.e2e.ts +0 -75
  288. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  289. package/src/hmr/strategies/js-hmr-strategy.ts +0 -308
  290. package/src/index.browser.ts +0 -3
  291. package/src/index.ts +0 -5
  292. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  293. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  294. package/src/internal-types.ts +0 -212
  295. package/src/plugins/alias-resolver-plugin.ts +0 -45
  296. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  297. package/src/plugins/integration-plugin.ts +0 -184
  298. package/src/plugins/processor.ts +0 -220
  299. package/src/public-types.ts +0 -1255
  300. package/src/route-renderer/component-graph-executor.ts +0 -84
  301. package/src/route-renderer/component-graph.ts +0 -159
  302. package/src/route-renderer/component-marker.ts +0 -117
  303. package/src/route-renderer/dependency-resolver.ts +0 -596
  304. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  305. package/src/route-renderer/html-post-processing.service.js +0 -86
  306. package/src/route-renderer/html-post-processing.service.ts +0 -103
  307. package/src/route-renderer/integration-renderer.ts +0 -696
  308. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  309. package/src/route-renderer/page-module-loader.d.ts +0 -61
  310. package/src/route-renderer/page-module-loader.ts +0 -153
  311. package/src/route-renderer/render-execution.service.js +0 -91
  312. package/src/route-renderer/render-execution.service.ts +0 -158
  313. package/src/route-renderer/render-preparation.service.ts +0 -358
  314. package/src/route-renderer/route-renderer.ts +0 -80
  315. package/src/router/fs-router-scanner.ts +0 -217
  316. package/src/router/fs-router.ts +0 -122
  317. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  318. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  319. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  320. package/src/services/asset-processing-service/assets.types.ts +0 -112
  321. package/src/services/asset-processing-service/index.d.ts +0 -3
  322. package/src/services/asset-processing-service/index.js +0 -3
  323. package/src/services/asset-processing-service/index.ts +0 -3
  324. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  325. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  326. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  327. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  328. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  329. package/src/services/asset-processing-service/processors/index.js +0 -5
  330. package/src/services/asset-processing-service/processors/index.ts +0 -5
  331. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  332. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  333. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  334. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  335. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  336. package/src/services/cache/cache.types.ts +0 -126
  337. package/src/services/cache/index.ts +0 -18
  338. package/src/services/cache/memory-cache-store.ts +0 -130
  339. package/src/services/cache/page-cache-service.ts +0 -202
  340. package/src/services/html-transformer.service.d.ts +0 -50
  341. package/src/services/html-transformer.service.js +0 -163
  342. package/src/services/html-transformer.service.ts +0 -217
  343. package/src/services/page-module-import.service.d.ts +0 -37
  344. package/src/services/page-module-import.service.js +0 -88
  345. package/src/services/page-module-import.service.ts +0 -129
  346. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  347. package/src/services/schema-validation-service.ts +0 -204
  348. package/src/services/validation/standard-schema.types.ts +0 -68
  349. package/src/static-site-generator/static-site-generator.ts +0 -359
  350. package/src/utils/css.d.ts +0 -1
  351. package/src/utils/css.js +0 -7
  352. package/src/utils/css.ts +0 -5
  353. package/src/utils/deep-merge.ts +0 -47
  354. package/src/utils/hash.ts +0 -5
  355. package/src/utils/html.ts +0 -1
  356. package/src/utils/invariant.ts +0 -15
  357. package/src/utils/locals-utils.ts +0 -37
  358. package/src/utils/parse-cli-args.ts +0 -83
  359. package/src/utils/path-utils.module.ts +0 -14
  360. package/src/utils/runtime.ts +0 -44
  361. package/src/utils/server-utils.module.ts +0 -67
  362. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  363. package/src/watchers/project-watcher.ts +0 -306
  364. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  365. /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
  366. /package/src/route-renderer/{component-marker.d.ts → component-graph/component-marker.d.ts} +0 -0
  367. /package/src/route-renderer/{component-marker.js → component-graph/component-marker.js} +0 -0
  368. /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
  369. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  370. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  371. /package/src/{public-types.js → services/module-loading/module-loading-types.js} +0 -0
  372. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -0,0 +1,154 @@
1
+ import { appLogger } from "../global/app-logger.js";
2
+ import {
3
+ defaultBunBuildAdapter
4
+ } from "./build-adapter.js";
5
+ import { EsbuildBuildAdapter, ESBUILD_ADAPTER_BRAND } from "./esbuild-build-adapter.js";
6
+ import { mergeEcoBuildPlugins } from "./build-manifest.js";
7
+ function isEsbuildBuildAdapter(adapter) {
8
+ return adapter instanceof EsbuildBuildAdapter || typeof adapter === "object" && adapter !== null && adapter[ESBUILD_ADAPTER_BRAND] === true;
9
+ }
10
+ function mergeBuildPlugins(options, appPlugins) {
11
+ if (appPlugins.length === 0) {
12
+ return options;
13
+ }
14
+ return {
15
+ ...options,
16
+ plugins: mergeEcoBuildPlugins(options.plugins, appPlugins)
17
+ };
18
+ }
19
+ class BuildExecutorWithPlugins {
20
+ executor;
21
+ getPlugins;
22
+ constructor(executor, getPlugins) {
23
+ this.executor = executor;
24
+ this.getPlugins = getPlugins;
25
+ }
26
+ async build(options) {
27
+ return await this.executor.build(mergeBuildPlugins(options, this.getPlugins()));
28
+ }
29
+ unwrap() {
30
+ return this.executor;
31
+ }
32
+ }
33
+ function unwrapBuildExecutor(executor) {
34
+ if (executor instanceof BuildExecutorWithPlugins) {
35
+ return unwrapBuildExecutor(executor.unwrap());
36
+ }
37
+ return executor;
38
+ }
39
+ function withBuildExecutorPlugins(executor, getPlugins) {
40
+ return new BuildExecutorWithPlugins(executor, getPlugins);
41
+ }
42
+ class DevBuildCoordinator {
43
+ buildQueue = Promise.resolve();
44
+ esbuildSessionWarm = false;
45
+ esbuildModuleGeneration = 0;
46
+ adapter;
47
+ constructor(adapter) {
48
+ this.adapter = adapter;
49
+ }
50
+ /**
51
+ * Executes a build through the serialized development queue.
52
+ *
53
+ * If an esbuild protocol fault is detected, the coordinator resets the queue,
54
+ * stops the corrupted service, increments the module generation, and retries
55
+ * the build once.
56
+ */
57
+ async build(options) {
58
+ return this.runSerialized(async () => {
59
+ try {
60
+ const result = await this.adapter.buildOrThrow(options, this.esbuildModuleGeneration);
61
+ this.esbuildSessionWarm = true;
62
+ return result;
63
+ } catch (error) {
64
+ if (await this.recoverFromProtocolFault(error)) {
65
+ appLogger.warn("Recovered from esbuild protocol fault. Retrying build.");
66
+ try {
67
+ const retry = await this.adapter.buildOrThrow(options, this.esbuildModuleGeneration);
68
+ this.esbuildSessionWarm = true;
69
+ return retry;
70
+ } catch (retryError) {
71
+ return this.adapter.createFailureResult(retryError);
72
+ }
73
+ }
74
+ return this.adapter.createFailureResult(error);
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * Attempts recovery from a known esbuild worker protocol fault.
80
+ *
81
+ * Returns `true` only when the error matches the protocol-fault signature and
82
+ * the coordinator successfully reset its shared state.
83
+ */
84
+ async recoverFromProtocolFault(error) {
85
+ if (!this.adapter.isEsbuildProtocolError(error)) {
86
+ return false;
87
+ }
88
+ this.buildQueue = Promise.resolve();
89
+ this.esbuildSessionWarm = false;
90
+ await this.adapter.stopEsbuildService(this.esbuildModuleGeneration);
91
+ this.esbuildModuleGeneration += 1;
92
+ return true;
93
+ }
94
+ /**
95
+ * Clears internal coordinator state for isolated tests.
96
+ */
97
+ resetForTests() {
98
+ this.buildQueue = Promise.resolve();
99
+ this.esbuildSessionWarm = false;
100
+ this.esbuildModuleGeneration = 0;
101
+ }
102
+ /**
103
+ * Overrides the internal queue promise for fault-recovery tests.
104
+ */
105
+ setBuildQueueForTests(queue) {
106
+ this.buildQueue = queue;
107
+ }
108
+ /**
109
+ * Returns the current internal queue promise for fault-recovery tests.
110
+ */
111
+ getBuildQueueForTests() {
112
+ return this.buildQueue;
113
+ }
114
+ async runSerialized(operation) {
115
+ let releaseBuild;
116
+ const currentBuild = new Promise((resolve) => {
117
+ releaseBuild = resolve;
118
+ });
119
+ const previousBuild = this.buildQueue;
120
+ this.buildQueue = previousBuild.catch(() => void 0).then(async () => await currentBuild);
121
+ await previousBuild.catch(() => void 0);
122
+ try {
123
+ return await operation();
124
+ } finally {
125
+ releaseBuild?.();
126
+ }
127
+ }
128
+ }
129
+ function createAppBuildExecutor(options) {
130
+ const adapter = options.adapter ?? defaultBunBuildAdapter;
131
+ const baseExecutor = isEsbuildBuildAdapter(adapter) ? new DevBuildCoordinator(adapter) : adapter;
132
+ if (!options.getPlugins) {
133
+ return baseExecutor;
134
+ }
135
+ return new BuildExecutorWithPlugins(baseExecutor, options.getPlugins);
136
+ }
137
+ function createOrReuseAppBuildExecutor(options) {
138
+ const adapter = options.adapter ?? defaultBunBuildAdapter;
139
+ const currentBaseExecutor = options.currentExecutor ? unwrapBuildExecutor(options.currentExecutor) : void 0;
140
+ const baseExecutor = options.development && currentBaseExecutor instanceof DevBuildCoordinator ? currentBaseExecutor : createAppBuildExecutor({
141
+ development: options.development,
142
+ adapter
143
+ });
144
+ if (!options.getPlugins) {
145
+ return baseExecutor;
146
+ }
147
+ return withBuildExecutorPlugins(baseExecutor, options.getPlugins);
148
+ }
149
+ export {
150
+ DevBuildCoordinator,
151
+ createAppBuildExecutor,
152
+ createOrReuseAppBuildExecutor,
153
+ withBuildExecutorPlugins
154
+ };
@@ -1,4 +1,3 @@
1
- import type { EcoBuildPlugin } from './build-types.js';
2
1
  import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from './build-adapter.js';
3
2
  /**
4
3
  * Node build adapter backed by esbuild.
@@ -6,8 +5,13 @@ import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, Bu
6
5
  * This adapter keeps Ecopages build plugin compatibility (`onResolve`, `onLoad`,
7
6
  * and `module`) while delegating bundling and TypeScript/decorator transforms to esbuild.
8
7
  */
8
+ export declare const ESBUILD_ADAPTER_BRAND: unique symbol;
9
9
  export declare class EsbuildBuildAdapter implements BuildAdapter {
10
- private registeredPlugins;
10
+ readonly ownership: "bun-native";
11
+ readonly [ESBUILD_ADAPTER_BRAND] = true;
12
+ private collectWorkspaceNodePaths;
13
+ private getFallbackNodePaths;
14
+ private rewriteAliasedRuntimeSpecifiers;
11
15
  private escapeRegExp;
12
16
  private getPluginsForBuild;
13
17
  private normalizeEsbuildLoader;
@@ -40,6 +44,14 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
40
44
  */
41
45
  private createEcoPluginBridge;
42
46
  private loadEsbuildModule;
47
+ private isMockedEsbuildModule;
48
+ /**
49
+ * Detects the subset of runtime faults that indicate esbuild's worker
50
+ * protocol is corrupted rather than a normal build error.
51
+ */
52
+ isEsbuildProtocolError(error: unknown): boolean;
53
+ stopEsbuildService(moduleGeneration?: number): Promise<void>;
54
+ buildOrThrow(options: BuildOptions, moduleGeneration?: number): Promise<BuildResult>;
43
55
  private mapEsbuildSourcemap;
44
56
  private mapEsbuildFormat;
45
57
  private hasTemplateTokens;
@@ -50,6 +62,7 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
50
62
  * Normalizes esbuild errors into Ecopages `BuildLog` entries.
51
63
  */
52
64
  private toBuildLogs;
65
+ createFailureResult(error: unknown): BuildResult;
53
66
  /**
54
67
  * Bundles entrypoints using esbuild for Node runtime builds.
55
68
  */
@@ -58,10 +71,6 @@ export declare class EsbuildBuildAdapter implements BuildAdapter {
58
71
  * Resolves module specifiers from a project root.
59
72
  */
60
73
  resolve(importPath: string, rootDir: string): string;
61
- /**
62
- * Registers a build plugin once by plugin name.
63
- */
64
- registerPlugin(plugin: EcoBuildPlugin): void;
65
74
  /**
66
75
  * Returns transpile defaults for a known transpile profile.
67
76
  */
@@ -1,6 +1,12 @@
1
- import path from "node:path";
1
+ import { readFileSync, readdirSync, writeFileSync } from "node:fs";
2
2
  import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
3
5
  import { fileSystem } from "@ecopages/file-system";
6
+ import { collectRuntimeSpecifierAliasMap, rewriteRuntimeSpecifierAliases } from "./runtime-specifier-aliases.js";
7
+ const moduleRequire = createRequire(import.meta.url);
8
+ const esbuildPath = moduleRequire.resolve("esbuild");
9
+ const workspaceNodePathsCache = /* @__PURE__ */ new Map();
4
10
  function transpileProfileToOptions(profile) {
5
11
  switch (profile) {
6
12
  case "browser-script":
@@ -23,15 +29,84 @@ function transpileProfileToOptions(profile) {
23
29
  };
24
30
  }
25
31
  }
32
+ const ESBUILD_ADAPTER_BRAND = /* @__PURE__ */ Symbol.for("EsbuildBuildAdapter");
26
33
  class EsbuildBuildAdapter {
27
- registeredPlugins = [];
34
+ ownership = "bun-native";
35
+ [ESBUILD_ADAPTER_BRAND] = true;
36
+ collectWorkspaceNodePaths(scanRoot, maxDepth = 3) {
37
+ const normalizedRoot = path.resolve(scanRoot);
38
+ const cached = workspaceNodePathsCache.get(normalizedRoot);
39
+ if (cached) {
40
+ return cached;
41
+ }
42
+ const nodePaths = /* @__PURE__ */ new Set();
43
+ const skippedDirectoryNames = /* @__PURE__ */ new Set([".git", ".turbo", "dist", "node_modules", "test-results"]);
44
+ const visit = (dirPath, depth) => {
45
+ if (depth > maxDepth) {
46
+ return;
47
+ }
48
+ const packageJsonPath = path.join(dirPath, "package.json");
49
+ const nodeModulesPath = path.join(dirPath, "node_modules");
50
+ if (fileSystem.exists(packageJsonPath) && fileSystem.exists(nodeModulesPath)) {
51
+ nodePaths.add(nodeModulesPath);
52
+ }
53
+ if (depth === maxDepth) {
54
+ return;
55
+ }
56
+ for (const entry of readdirSync(dirPath, { withFileTypes: true })) {
57
+ if (!entry.isDirectory()) {
58
+ continue;
59
+ }
60
+ if (skippedDirectoryNames.has(entry.name) || entry.name.startsWith(".")) {
61
+ continue;
62
+ }
63
+ visit(path.join(dirPath, entry.name), depth + 1);
64
+ }
65
+ };
66
+ if (fileSystem.exists(normalizedRoot) && fileSystem.isDirectory(normalizedRoot)) {
67
+ visit(normalizedRoot, 0);
68
+ }
69
+ const resolvedNodePaths = Array.from(nodePaths);
70
+ workspaceNodePathsCache.set(normalizedRoot, resolvedNodePaths);
71
+ return resolvedNodePaths;
72
+ }
73
+ getFallbackNodePaths(contextRoot) {
74
+ const nodePaths = /* @__PURE__ */ new Set();
75
+ const contextNodeModulesPath = path.join(contextRoot, "node_modules");
76
+ if (fileSystem.exists(contextNodeModulesPath)) {
77
+ nodePaths.add(contextNodeModulesPath);
78
+ }
79
+ for (const workspaceNodePath of this.collectWorkspaceNodePaths(process.cwd())) {
80
+ nodePaths.add(workspaceNodePath);
81
+ }
82
+ return Array.from(nodePaths);
83
+ }
84
+ rewriteAliasedRuntimeSpecifiers(result, plugins) {
85
+ if (!result.success || result.outputs.length === 0) {
86
+ return result;
87
+ }
88
+ const aliasMap = collectRuntimeSpecifierAliasMap(plugins);
89
+ if (aliasMap.size === 0) {
90
+ return result;
91
+ }
92
+ for (const output of result.outputs) {
93
+ if (!/\.(?:[cm]?js)$/u.test(output.path)) {
94
+ continue;
95
+ }
96
+ const code = readFileSync(output.path, "utf-8");
97
+ const rewritten = rewriteRuntimeSpecifierAliases(code, aliasMap);
98
+ if (rewritten !== code) {
99
+ writeFileSync(output.path, rewritten);
100
+ }
101
+ }
102
+ return result;
103
+ }
28
104
  escapeRegExp(value) {
29
105
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
30
106
  }
31
107
  getPluginsForBuild(additionalPlugins) {
32
- const merged = [...additionalPlugins ?? [], ...this.registeredPlugins];
33
108
  const byName = /* @__PURE__ */ new Map();
34
- for (const plugin of merged) {
109
+ for (const plugin of additionalPlugins ?? []) {
35
110
  if (!byName.has(plugin.name)) {
36
111
  byName.set(plugin.name, plugin);
37
112
  }
@@ -207,13 +282,110 @@ class EsbuildBuildAdapter {
207
282
  }
208
283
  };
209
284
  }
210
- async loadEsbuildModule() {
211
- const esbuildModule = await import("esbuild");
285
+ async loadEsbuildModule(moduleGeneration = 0) {
286
+ const importedModule = await import("esbuild");
287
+ const esbuildModule = typeof importedModule.build === "function" ? importedModule : importedModule.default ?? importedModule;
288
+ if (moduleGeneration > 0 && !this.isMockedEsbuildModule(esbuildModule)) {
289
+ const freshModule = await import(
290
+ /* @vite-ignore */
291
+ `${pathToFileURL(esbuildPath).href}?ecopages_esbuild=${moduleGeneration}`
292
+ );
293
+ const normalizedFreshModule = typeof freshModule.build === "function" ? freshModule : freshModule.default ?? freshModule;
294
+ if (typeof normalizedFreshModule.build === "function") {
295
+ return normalizedFreshModule;
296
+ }
297
+ }
212
298
  if (typeof esbuildModule.build !== "function") {
213
299
  throw new Error("esbuild is not available. Install esbuild to use Node bundling.");
214
300
  }
215
301
  return esbuildModule;
216
302
  }
303
+ isMockedEsbuildModule(esbuildModule) {
304
+ const build = esbuildModule.build;
305
+ const stop = esbuildModule.stop;
306
+ return typeof build?.mock === "object" || typeof stop?.mock === "object";
307
+ }
308
+ /**
309
+ * Detects the subset of runtime faults that indicate esbuild's worker
310
+ * protocol is corrupted rather than a normal build error.
311
+ */
312
+ isEsbuildProtocolError(error) {
313
+ if (!(error instanceof Error)) {
314
+ return false;
315
+ }
316
+ return ["Unexpected end of JSON input", "Unexpected EOF", "parseJSON", "buildResponseToResult"].some(
317
+ (fragment) => error.message.includes(fragment) || error.stack?.includes(fragment)
318
+ );
319
+ }
320
+ async stopEsbuildService(moduleGeneration = 0) {
321
+ const esbuild = await this.loadEsbuildModule(moduleGeneration);
322
+ if (typeof esbuild.stop === "function") {
323
+ esbuild.stop();
324
+ }
325
+ }
326
+ async buildOrThrow(options, moduleGeneration = 0) {
327
+ const esbuild = await this.loadEsbuildModule(moduleGeneration);
328
+ const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
329
+ const outdir = path.resolve(options.outdir ?? "dist/assets");
330
+ const tsconfigPath = path.join(contextRoot, "tsconfig.json");
331
+ const tsconfigExists = fileSystem.exists(tsconfigPath);
332
+ const nodePaths = this.getFallbackNodePaths(contextRoot);
333
+ const plugins = this.getPluginsForBuild(options.plugins);
334
+ const esbuildPlugins = [
335
+ ...plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []
336
+ ];
337
+ const transpileTarget = "es2022";
338
+ const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
339
+ const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : void 0;
340
+ if (outfile) {
341
+ fileSystem.ensureDir(path.dirname(outfile));
342
+ }
343
+ const outputOptions = outfile ? { outfile } : {
344
+ outdir,
345
+ ...options.outbase ? { outbase: path.resolve(options.outbase) } : {},
346
+ entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : "[name]",
347
+ chunkNames: "[name]-[hash]",
348
+ assetNames: "[name]-[hash]"
349
+ };
350
+ const result = await esbuild.build({
351
+ absWorkingDir: contextRoot,
352
+ ...nodePaths.length > 0 ? { nodePaths } : {},
353
+ entryPoints: options.entrypoints,
354
+ bundle: options.bundle ?? true,
355
+ ...outputOptions,
356
+ ...options.conditions ? { conditions: options.conditions } : {},
357
+ ...options.define ? { define: options.define } : {},
358
+ format: this.mapEsbuildFormat(options.format),
359
+ platform: options.target === "browser" ? "browser" : "node",
360
+ sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
361
+ splitting: outfile ? false : !!options.splitting,
362
+ minify: !!options.minify,
363
+ ...typeof options.treeshaking === "boolean" ? { treeShaking: options.treeshaking } : {},
364
+ external: options.external,
365
+ ...options.target !== "browser" && options.externalPackages !== false ? { packages: "external" } : {},
366
+ target: transpileTarget,
367
+ metafile: true,
368
+ write: true,
369
+ plugins: esbuildPlugins,
370
+ jsx: "automatic",
371
+ tsconfig: tsconfigExists ? tsconfigPath : void 0,
372
+ logLevel: "silent"
373
+ });
374
+ const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
375
+ path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath)
376
+ }));
377
+ const logs = result.warnings.map((warning) => ({ message: warning.text }));
378
+ const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
379
+ return this.rewriteAliasedRuntimeSpecifiers(
380
+ {
381
+ success: true,
382
+ logs,
383
+ outputs,
384
+ dependencyGraph
385
+ },
386
+ plugins
387
+ );
388
+ }
217
389
  mapEsbuildSourcemap(value) {
218
390
  switch (value) {
219
391
  case "none":
@@ -297,86 +469,28 @@ class EsbuildBuildAdapter {
297
469
  }
298
470
  return [{ message: "Unknown esbuild error" }];
299
471
  }
472
+ createFailureResult(error) {
473
+ return {
474
+ success: false,
475
+ logs: this.toBuildLogs(error),
476
+ outputs: []
477
+ };
478
+ }
300
479
  /**
301
480
  * Bundles entrypoints using esbuild for Node runtime builds.
302
481
  */
303
482
  async build(options) {
304
- const esbuild = await this.loadEsbuildModule();
305
- const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
306
- const outdir = path.resolve(options.outdir ?? ".eco/assets");
307
- const tsconfigPath = path.join(contextRoot, "tsconfig.json");
308
- const tsconfigExists = fileSystem.exists(tsconfigPath);
309
- const plugins = this.getPluginsForBuild(options.plugins);
310
- const esbuildPlugins = [
311
- ...plugins.length > 0 ? [this.createEcoPluginBridge(plugins, contextRoot)] : []
312
- ];
313
- const transpileTarget = "es2022";
314
- const usesTemplatedNaming = this.hasTemplateTokens(options.naming);
315
- const outfile = options.naming && !usesTemplatedNaming ? path.join(outdir, options.naming) : void 0;
316
- if (outfile) {
317
- fileSystem.ensureDir(path.dirname(outfile));
318
- }
319
- const outputOptions = outfile ? { outfile } : {
320
- outdir,
321
- entryNames: usesTemplatedNaming ? this.toEntryNamePattern(options.naming) : "[name]",
322
- chunkNames: "[name]-[hash]",
323
- assetNames: "[name]-[hash]"
324
- };
325
483
  try {
326
- const result = await esbuild.build({
327
- absWorkingDir: contextRoot,
328
- entryPoints: options.entrypoints,
329
- bundle: options.bundle ?? true,
330
- ...outputOptions,
331
- format: this.mapEsbuildFormat(options.format),
332
- platform: options.target === "browser" ? "browser" : "node",
333
- sourcemap: this.mapEsbuildSourcemap(options.sourcemap),
334
- splitting: outfile ? false : !!options.splitting,
335
- minify: !!options.minify,
336
- ...typeof options.treeshaking === "boolean" ? { treeShaking: options.treeshaking } : {},
337
- external: options.external,
338
- ...options.target !== "browser" && options.externalPackages !== false ? { packages: "external" } : {},
339
- target: transpileTarget,
340
- metafile: true,
341
- write: true,
342
- plugins: esbuildPlugins,
343
- jsx: "automatic",
344
- tsconfig: tsconfigExists ? tsconfigPath : void 0,
345
- logLevel: "silent"
346
- });
347
- const outputs = Object.keys(result.metafile.outputs).map((outputPath) => ({
348
- path: path.isAbsolute(outputPath) ? outputPath : path.join(contextRoot, outputPath)
349
- }));
350
- const logs = result.warnings.map((warning) => ({ message: warning.text }));
351
- const dependencyGraph = this.extractDependencyGraph(result.metafile, contextRoot);
352
- return {
353
- success: true,
354
- logs,
355
- outputs,
356
- dependencyGraph
357
- };
484
+ return await this.buildOrThrow(options);
358
485
  } catch (error) {
359
- return {
360
- success: false,
361
- logs: this.toBuildLogs(error),
362
- outputs: []
363
- };
486
+ return this.createFailureResult(error);
364
487
  }
365
488
  }
366
489
  /**
367
490
  * Resolves module specifiers from a project root.
368
491
  */
369
492
  resolve(importPath, rootDir) {
370
- const localRequire = createRequire(path.join(rootDir, "package.json"));
371
- return localRequire.resolve(importPath);
372
- }
373
- /**
374
- * Registers a build plugin once by plugin name.
375
- */
376
- registerPlugin(plugin) {
377
- if (!this.registeredPlugins.find((registered) => registered.name === plugin.name)) {
378
- this.registeredPlugins.push(plugin);
379
- }
493
+ return moduleRequire.resolve(importPath, { paths: [rootDir] });
380
494
  }
381
495
  /**
382
496
  * Returns transpile defaults for a known transpile profile.
@@ -386,5 +500,6 @@ class EsbuildBuildAdapter {
386
500
  }
387
501
  }
388
502
  export {
503
+ ESBUILD_ADAPTER_BRAND,
389
504
  EsbuildBuildAdapter
390
505
  };
@@ -0,0 +1,14 @@
1
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
2
+ import { type BuildExecutor } from './build-adapter.js';
3
+ /**
4
+ * Installs the app-owned runtime build executor for one app instance.
5
+ *
6
+ * @remarks
7
+ * This is the single runtime executor boundary for adapter-owned startup.
8
+ * Bun-native ownership may reuse `DevBuildCoordinator` in development, while
9
+ * Vite-host ownership stays on a plain host-owned executor boundary with no
10
+ * Bun-specific coordination policy.
11
+ */
12
+ export declare function installAppRuntimeBuildExecutor(appConfig: EcoPagesAppConfig, options: {
13
+ development: boolean;
14
+ }): BuildExecutor;
@@ -0,0 +1,22 @@
1
+ import {
2
+ getAppBuildAdapter,
3
+ getAppBuildExecutor,
4
+ getAppBuildOwnership,
5
+ getAppServerBuildPlugins,
6
+ setAppBuildExecutor
7
+ } from "./build-adapter.js";
8
+ import { createOrReuseAppBuildExecutor, withBuildExecutorPlugins } from "./dev-build-coordinator.js";
9
+ function installAppRuntimeBuildExecutor(appConfig, options) {
10
+ const buildOwnership = getAppBuildOwnership(appConfig);
11
+ const buildExecutor = buildOwnership === "bun-native" ? createOrReuseAppBuildExecutor({
12
+ development: options.development,
13
+ adapter: getAppBuildAdapter(appConfig),
14
+ currentExecutor: getAppBuildExecutor(appConfig),
15
+ getPlugins: () => getAppServerBuildPlugins(appConfig)
16
+ }) : withBuildExecutorPlugins(getAppBuildAdapter(appConfig), () => getAppServerBuildPlugins(appConfig));
17
+ setAppBuildExecutor(appConfig, buildExecutor);
18
+ return buildExecutor;
19
+ }
20
+ export {
21
+ installAppRuntimeBuildExecutor
22
+ };
@@ -0,0 +1,15 @@
1
+ import type { EcoBuildPlugin } from './build-types.js';
2
+ type RuntimeSpecifierMap = ReadonlyMap<string, string> | Record<string, string>;
3
+ /**
4
+ * Creates a build plugin that aliases runtime bare specifiers to concrete URLs.
5
+ *
6
+ * @remarks
7
+ * This helper is used when browser-target builds must preserve integration-owned
8
+ * runtime specifier semantics while letting the bundler treat the mapped URLs as
9
+ * external runtime assets.
10
+ */
11
+ export declare function createRuntimeSpecifierAliasPlugin(specifierMapInput: RuntimeSpecifierMap, options?: {
12
+ name?: string;
13
+ external?: boolean;
14
+ }): EcoBuildPlugin | null;
15
+ export {};
@@ -0,0 +1,35 @@
1
+ import { attachRuntimeSpecifierAliasMap } from "./runtime-specifier-aliases.js";
2
+ function toRuntimeSpecifierMap(specifierMap) {
3
+ return specifierMap instanceof Map ? specifierMap : new Map(Object.entries(specifierMap));
4
+ }
5
+ function escapeRegExp(value) {
6
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7
+ }
8
+ function createRuntimeSpecifierAliasPlugin(specifierMapInput, options) {
9
+ const specifierMap = toRuntimeSpecifierMap(specifierMapInput);
10
+ if (specifierMap.size === 0) {
11
+ return null;
12
+ }
13
+ const filter = new RegExp(`^(${Array.from(specifierMap.keys()).map(escapeRegExp).join("|")})$`);
14
+ return attachRuntimeSpecifierAliasMap(
15
+ {
16
+ name: options?.name ?? "runtime-specifier-alias",
17
+ setup(build) {
18
+ build.onResolve({ filter }, (args) => {
19
+ const mappedPath = specifierMap.get(args.path);
20
+ if (!mappedPath) {
21
+ return void 0;
22
+ }
23
+ return {
24
+ path: mappedPath,
25
+ external: options?.external ?? true
26
+ };
27
+ });
28
+ }
29
+ },
30
+ specifierMap
31
+ );
32
+ }
33
+ export {
34
+ createRuntimeSpecifierAliasPlugin
35
+ };
@@ -0,0 +1,5 @@
1
+ import type { EcoBuildPlugin } from './build-types.js';
2
+ export declare function attachRuntimeSpecifierAliasMap(plugin: EcoBuildPlugin, specifierMap: ReadonlyMap<string, string>): EcoBuildPlugin;
3
+ export declare function getRuntimeSpecifierAliasMap(plugin: EcoBuildPlugin): ReadonlyMap<string, string> | undefined;
4
+ export declare function collectRuntimeSpecifierAliasMap(plugins: EcoBuildPlugin[] | undefined): ReadonlyMap<string, string>;
5
+ export declare function rewriteRuntimeSpecifierAliases(code: string, specifierMap: ReadonlyMap<string, string>): string;