@ecopages/core 0.2.0-alpha.53 → 0.2.0-alpha.54

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 (590) hide show
  1. package/README.md +2 -3
  2. package/package.json +97 -182
  3. package/src/adapters/abstract/application-adapter.test.ts +218 -0
  4. package/src/adapters/abstract/application-adapter.ts +379 -0
  5. package/src/adapters/abstract/router-adapter.ts +30 -0
  6. package/src/adapters/abstract/server-adapter.ts +79 -0
  7. package/src/adapters/bun/client-bridge.ts +62 -0
  8. package/src/adapters/bun/create-app.ts +214 -0
  9. package/src/adapters/bun/hmr-manager.test.ts +265 -0
  10. package/src/adapters/bun/hmr-manager.ts +88 -0
  11. package/src/adapters/bun/index.ts +2 -0
  12. package/src/adapters/bun/runtime-host.ts +76 -0
  13. package/src/adapters/bun/server-adapter.ts +605 -0
  14. package/src/adapters/bun/static-preview-host.ts +70 -0
  15. package/src/adapters/create-app.test.ts +10 -0
  16. package/src/adapters/create-app.ts +91 -0
  17. package/src/adapters/index.ts +2 -0
  18. package/src/adapters/node/create-app.test.ts +76 -0
  19. package/src/adapters/node/create-app.ts +116 -0
  20. package/src/adapters/node/http-request-bridge.test.ts +146 -0
  21. package/src/adapters/node/http-request-bridge.ts +176 -0
  22. package/src/adapters/node/node-client-bridge.test.ts +198 -0
  23. package/src/adapters/node/node-client-bridge.ts +79 -0
  24. package/src/adapters/node/node-hmr-manager.test.ts +374 -0
  25. package/src/adapters/node/node-hmr-manager.ts +72 -0
  26. package/src/adapters/node/runtime-host.test.ts +49 -0
  27. package/src/adapters/node/runtime-host.ts +113 -0
  28. package/src/adapters/node/server-adapter-dependencies.ts +28 -0
  29. package/src/adapters/node/server-adapter.test.ts +84 -0
  30. package/src/adapters/node/server-adapter.ts +423 -0
  31. package/src/adapters/node/static-content-server.test.ts +60 -0
  32. package/src/adapters/node/static-content-server.ts +239 -0
  33. package/src/adapters/node/static-preview-host.test.ts +89 -0
  34. package/src/adapters/node/static-preview-host.ts +101 -0
  35. package/src/adapters/shared/api-response.test.ts +97 -0
  36. package/src/adapters/shared/api-response.ts +104 -0
  37. package/src/adapters/shared/application-adapter.ts +199 -0
  38. package/src/adapters/shared/define-api-handler.ts +66 -0
  39. package/src/adapters/shared/explicit-static-render-preparation.ts +58 -0
  40. package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
  41. package/src/adapters/shared/explicit-static-route-matcher.ts +131 -0
  42. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +85 -0
  43. package/src/adapters/shared/file-route-middleware-pipeline.ts +118 -0
  44. package/src/adapters/shared/fs-server-response-factory.test.ts +176 -0
  45. package/src/adapters/shared/fs-server-response-factory.ts +96 -0
  46. package/src/adapters/shared/fs-server-response-matcher.test.ts +311 -0
  47. package/src/adapters/shared/fs-server-response-matcher.ts +240 -0
  48. package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
  49. package/src/adapters/shared/hmr-html-response.ts +54 -0
  50. package/src/adapters/shared/hmr-manager.contract.test.ts +228 -0
  51. package/src/adapters/shared/hmr-manager.dispatch.test.ts +229 -0
  52. package/src/adapters/shared/render-context.test.ts +244 -0
  53. package/src/adapters/shared/render-context.ts +161 -0
  54. package/src/adapters/shared/runtime-app-bootstrap.test.ts +96 -0
  55. package/src/adapters/shared/runtime-app-bootstrap.ts +72 -0
  56. package/src/adapters/shared/runtime-host.ts +11 -0
  57. package/src/adapters/shared/server-adapter.test.ts +130 -0
  58. package/src/adapters/shared/server-adapter.ts +571 -0
  59. package/src/adapters/shared/server-route-handler.test.ts +112 -0
  60. package/src/adapters/shared/server-route-handler.ts +153 -0
  61. package/src/adapters/shared/server-static-builder.test.ts +338 -0
  62. package/src/adapters/shared/server-static-builder.ts +170 -0
  63. package/src/adapters/shared/shared-hmr-manager.ts +298 -0
  64. package/src/adapters/shared/static-preview-host.ts +12 -0
  65. package/src/build/README.md +57 -73
  66. package/src/build/browser-runtime-manifest.test.ts +121 -0
  67. package/src/build/browser-runtime-manifest.ts +105 -0
  68. package/src/build/browser-runtime-plugin-helpers.test.ts +49 -0
  69. package/src/build/browser-runtime-plugin-helpers.ts +37 -0
  70. package/src/build/browser-runtime-plugin.test.ts +256 -0
  71. package/src/build/browser-runtime-plugin.ts +306 -0
  72. package/src/build/build-adapter.test.ts +463 -0
  73. package/src/build/build-adapter.ts +788 -0
  74. package/src/build/build-manifest.ts +79 -0
  75. package/src/build/build-types.ts +83 -0
  76. package/src/build/rolldown-build-adapter.test.ts +352 -0
  77. package/src/build/rolldown-build-adapter.ts +363 -0
  78. package/src/build/rolldown-plugin-bridge.test.ts +256 -0
  79. package/src/build/rolldown-plugin-bridge.ts +309 -0
  80. package/src/build/runtime-build-executor.test.ts +130 -0
  81. package/src/build/runtime-build-executor.ts +37 -0
  82. package/src/build/runtime-build-output-normalizer.ts +137 -0
  83. package/src/build/serialized-build-executor.test.ts +96 -0
  84. package/src/build/serialized-build-executor.ts +90 -0
  85. package/src/build/server-side-css-shim-plugin.ts +77 -0
  86. package/src/cache/index.ts +6 -0
  87. package/src/cache/module-parse-cache.test.ts +73 -0
  88. package/src/cache/module-parse-cache.ts +137 -0
  89. package/src/config/README.md +1 -1
  90. package/src/config/config-builder.test.ts +456 -0
  91. package/src/config/config-builder.ts +728 -0
  92. package/src/config/config-builder.typecheck.test.ts +96 -0
  93. package/src/config/{constants.d.ts → constants.ts} +22 -13
  94. package/src/dev/host-runtime.ts +34 -0
  95. package/src/dev/sc-server.ts +143 -0
  96. package/src/eco/eco.browser.test.ts +43 -0
  97. package/src/eco/eco.browser.ts +137 -0
  98. package/src/eco/eco.test.ts +781 -0
  99. package/src/eco/eco.ts +262 -0
  100. package/src/eco/eco.types.ts +293 -0
  101. package/src/eco/eco.utils.test.ts +219 -0
  102. package/src/eco/eco.utils.ts +5 -0
  103. package/src/eco/global-injector-map.test.ts +42 -0
  104. package/src/eco/global-injector-map.ts +112 -0
  105. package/src/eco/lazy-injector-map.test.ts +66 -0
  106. package/src/eco/lazy-injector-map.ts +120 -0
  107. package/src/eco/module-dependencies.test.ts +30 -0
  108. package/src/eco/module-dependencies.ts +75 -0
  109. package/src/errors/http-error.test.ts +134 -0
  110. package/src/errors/http-error.ts +72 -0
  111. package/src/errors/index.ts +3 -0
  112. package/src/errors/locals-access-error.ts +7 -0
  113. package/src/global/app-logger.ts +4 -0
  114. package/src/global/utils.test.ts +12 -0
  115. 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
  116. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  117. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  118. package/src/hmr/client/hmr-runtime.ts +162 -0
  119. package/src/hmr/hmr-strategy.test.ts +124 -0
  120. package/src/hmr/hmr-strategy.ts +177 -0
  121. package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
  122. package/src/hmr/hmr.test.e2e.ts +66 -0
  123. package/src/hmr/strategies/default-hmr-strategy.ts +60 -0
  124. package/src/hmr/strategies/js-hmr-strategy.test.ts +344 -0
  125. package/src/hmr/strategies/js-hmr-strategy.ts +307 -0
  126. package/src/index.browser.ts +3 -0
  127. package/src/index.ts +15 -0
  128. package/src/integrations/ghtml/ghtml-renderer.test.ts +253 -0
  129. package/src/integrations/ghtml/ghtml-renderer.ts +87 -0
  130. package/src/integrations/ghtml/ghtml.constants.ts +1 -0
  131. package/src/integrations/ghtml/ghtml.plugin.ts +28 -0
  132. package/src/plugins/alias-resolver-cache.test.ts +110 -0
  133. package/src/plugins/alias-resolver-cache.ts +145 -0
  134. package/src/plugins/alias-resolver-plugin.test.ts +41 -0
  135. package/src/plugins/alias-resolver-plugin.ts +75 -0
  136. package/src/plugins/eco-component-meta-plugin.test.ts +421 -0
  137. package/src/plugins/eco-component-meta-plugin.ts +518 -0
  138. package/src/plugins/foreign-jsx-override-plugin.test.ts +65 -0
  139. package/src/plugins/foreign-jsx-override-plugin.ts +76 -0
  140. package/src/plugins/integration-plugin.test.ts +151 -0
  141. package/src/plugins/integration-plugin.ts +344 -0
  142. package/src/plugins/processor.test.ts +148 -0
  143. package/src/plugins/processor.ts +257 -0
  144. package/src/plugins/{runtime-capability.d.ts → runtime-capability.ts} +8 -3
  145. package/src/plugins/source-transform.test.ts +82 -0
  146. package/src/plugins/source-transform.ts +123 -0
  147. package/src/route-renderer/orchestration/component-render-context.ts +338 -0
  148. package/src/route-renderer/orchestration/declared-ownership-graph.ts +62 -0
  149. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +431 -0
  150. package/src/route-renderer/orchestration/integration-renderer.test.ts +2251 -0
  151. package/src/route-renderer/orchestration/integration-renderer.ts +1384 -0
  152. package/src/route-renderer/orchestration/ownership-planning.service.ts +97 -0
  153. package/src/route-renderer/orchestration/ownership-validation.service.ts +76 -0
  154. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +29 -0
  155. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +435 -0
  156. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +310 -0
  157. package/src/route-renderer/orchestration/render-output.utils.ts +310 -0
  158. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +1365 -0
  159. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +267 -0
  160. package/src/route-renderer/orchestration/route-render-orchestrator.ts +879 -0
  161. package/src/route-renderer/orchestration/template-serialization.test.ts +110 -0
  162. package/src/route-renderer/orchestration/template-serialization.ts +117 -0
  163. package/src/route-renderer/page-loading/component-dependency-collection.ts +202 -0
  164. package/src/route-renderer/page-loading/declared-asset-collection.ts +153 -0
  165. package/src/route-renderer/page-loading/dependency-resolver.test.ts +761 -0
  166. package/src/route-renderer/page-loading/dependency-resolver.ts +144 -0
  167. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +75 -0
  168. package/src/route-renderer/page-loading/lazy-entry-collection.ts +167 -0
  169. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +74 -0
  170. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +60 -0
  171. package/src/route-renderer/page-loading/module-declaration-scripts.ts +16 -0
  172. package/src/route-renderer/page-loading/page-dependency-bundling.ts +244 -0
  173. package/src/route-renderer/page-loading/page-module-loader.test.ts +183 -0
  174. package/src/route-renderer/page-loading/page-module-loader.ts +184 -0
  175. package/src/route-renderer/route-renderer.ts +133 -0
  176. package/src/router/client/link-intent.test.browser.ts +51 -0
  177. package/src/router/client/link-intent.ts +92 -0
  178. package/src/router/client/navigation-coordinator.test.ts +237 -0
  179. package/src/router/client/navigation-coordinator.ts +453 -0
  180. package/src/router/server/route-registry.test.ts +176 -0
  181. package/src/router/server/route-registry.ts +382 -0
  182. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +66 -0
  183. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +473 -0
  184. package/src/services/assets/asset-processing-service/asset-processing.service.ts +344 -0
  185. package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
  186. package/src/services/assets/asset-processing-service/asset.factory.ts +105 -0
  187. package/src/services/assets/asset-processing-service/assets.types.ts +128 -0
  188. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +74 -0
  189. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +98 -0
  190. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
  191. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
  192. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +104 -0
  193. package/src/services/assets/asset-processing-service/index.ts +6 -0
  194. package/src/services/assets/asset-processing-service/page-package.test.ts +135 -0
  195. package/src/services/assets/asset-processing-service/page-package.ts +103 -0
  196. package/src/services/assets/asset-processing-service/{processor.interface.d.ts → processor.interface.ts} +10 -5
  197. package/src/services/assets/asset-processing-service/processor.registry.ts +18 -0
  198. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
  199. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +83 -0
  200. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +173 -0
  201. package/src/services/assets/asset-processing-service/processors/index.ts +5 -0
  202. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +188 -0
  203. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +138 -0
  204. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +326 -0
  205. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +116 -0
  206. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +270 -0
  207. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +145 -0
  208. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +261 -0
  209. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +72 -0
  210. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +83 -0
  211. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +65 -0
  212. package/src/services/assets/browser-bundle.service.test.ts +66 -0
  213. package/src/services/assets/browser-bundle.service.ts +109 -0
  214. package/src/services/cache/cache.types.ts +126 -0
  215. package/src/services/cache/index.ts +18 -0
  216. package/src/services/cache/memory-cache-store.test.ts +225 -0
  217. package/src/services/cache/memory-cache-store.ts +130 -0
  218. package/src/services/cache/page-cache-service.test.ts +175 -0
  219. package/src/services/cache/page-cache-service.ts +202 -0
  220. package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
  221. package/src/services/cache/page-request-cache-coordinator.service.ts +131 -0
  222. package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
  223. package/src/services/html/html-rewriter-provider.service.ts +105 -0
  224. package/src/services/html/html-transformer.service.test.ts +544 -0
  225. package/src/services/html/html-transformer.service.ts +369 -0
  226. package/src/services/invalidation/development-invalidation.service.test.ts +87 -0
  227. package/src/services/invalidation/development-invalidation.service.ts +262 -0
  228. package/src/services/module-loading/app-module-loader.service.ts +9 -0
  229. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +297 -0
  230. package/src/services/module-loading/app-server-module-transpiler.service.ts +168 -0
  231. package/src/services/module-loading/host-module-loader-registry.ts +15 -0
  232. package/src/services/module-loading/{module-loading-types.d.ts → module-loading-types.ts} +1 -0
  233. package/src/services/module-loading/page-module-import.service.test.ts +652 -0
  234. package/src/services/module-loading/page-module-import.service.ts +302 -0
  235. package/src/services/module-loading/server-module-transpiler.service.test.ts +242 -0
  236. package/src/services/module-loading/server-module-transpiler.service.ts +104 -0
  237. package/src/services/module-loading/source-module-support.ts +19 -0
  238. package/src/services/runtime-state/dev-graph.service.ts +217 -0
  239. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
  240. package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
  241. package/src/services/validation/schema-validation-service.test.ts +223 -0
  242. package/src/services/validation/schema-validation-service.ts +204 -0
  243. package/src/services/validation/{standard-schema.types.d.ts → standard-schema.types.ts} +20 -17
  244. package/src/static-site-generator/static-site-generator.test.ts +408 -0
  245. package/src/static-site-generator/static-site-generator.ts +445 -0
  246. package/src/types/internal-types.ts +243 -0
  247. package/src/types/public-types.ts +1508 -0
  248. package/src/utils/deep-merge.test.ts +114 -0
  249. package/src/utils/deep-merge.ts +47 -0
  250. package/src/utils/hash.ts +5 -0
  251. package/src/utils/html-escaping.ts +9 -0
  252. package/src/utils/invariant.test.ts +22 -0
  253. package/src/utils/invariant.ts +15 -0
  254. package/src/utils/locals-utils.ts +37 -0
  255. package/src/utils/parse-cli-args.test.ts +69 -0
  256. package/src/utils/parse-cli-args.ts +105 -0
  257. package/src/utils/path-utils.module.ts +14 -0
  258. package/src/utils/path-utils.test.ts +15 -0
  259. package/src/utils/resolve-work-dir.ts +45 -0
  260. package/src/utils/runtime.ts +44 -0
  261. package/src/utils/server-utils.module.ts +67 -0
  262. package/src/utils/server-utils.test.ts +38 -0
  263. package/src/watchers/project-watcher.integration.test.ts +337 -0
  264. package/src/watchers/project-watcher.test-helpers.ts +42 -0
  265. package/src/watchers/project-watcher.test.ts +768 -0
  266. package/src/watchers/project-watcher.ts +357 -0
  267. package/src/adapters/abstract/application-adapter.d.ts +0 -194
  268. package/src/adapters/abstract/application-adapter.js +0 -121
  269. package/src/adapters/abstract/router-adapter.d.ts +0 -26
  270. package/src/adapters/abstract/router-adapter.js +0 -5
  271. package/src/adapters/abstract/server-adapter.d.ts +0 -69
  272. package/src/adapters/abstract/server-adapter.js +0 -15
  273. package/src/adapters/bun/client-bridge.d.ts +0 -34
  274. package/src/adapters/bun/client-bridge.js +0 -48
  275. package/src/adapters/bun/create-app.d.ts +0 -60
  276. package/src/adapters/bun/create-app.js +0 -140
  277. package/src/adapters/bun/hmr-manager.d.ts +0 -47
  278. package/src/adapters/bun/hmr-manager.js +0 -58
  279. package/src/adapters/bun/index.d.ts +0 -2
  280. package/src/adapters/bun/index.js +0 -8
  281. package/src/adapters/bun/runtime-host.d.ts +0 -52
  282. package/src/adapters/bun/runtime-host.js +0 -56
  283. package/src/adapters/bun/server-adapter.d.ts +0 -216
  284. package/src/adapters/bun/server-adapter.js +0 -445
  285. package/src/adapters/bun/static-preview-host.d.ts +0 -28
  286. package/src/adapters/bun/static-preview-host.js +0 -45
  287. package/src/adapters/create-app.d.ts +0 -20
  288. package/src/adapters/create-app.js +0 -66
  289. package/src/adapters/index.d.ts +0 -2
  290. package/src/adapters/index.js +0 -8
  291. package/src/adapters/node/create-app.d.ts +0 -24
  292. package/src/adapters/node/create-app.js +0 -92
  293. package/src/adapters/node/http-request-bridge.d.ts +0 -57
  294. package/src/adapters/node/http-request-bridge.js +0 -118
  295. package/src/adapters/node/node-client-bridge.d.ts +0 -26
  296. package/src/adapters/node/node-client-bridge.js +0 -66
  297. package/src/adapters/node/node-hmr-manager.d.ts +0 -52
  298. package/src/adapters/node/node-hmr-manager.js +0 -49
  299. package/src/adapters/node/runtime-host.d.ts +0 -57
  300. package/src/adapters/node/runtime-host.js +0 -92
  301. package/src/adapters/node/server-adapter-dependencies.d.ts +0 -19
  302. package/src/adapters/node/server-adapter-dependencies.js +0 -18
  303. package/src/adapters/node/server-adapter.d.ts +0 -138
  304. package/src/adapters/node/server-adapter.js +0 -315
  305. package/src/adapters/node/static-content-server.d.ts +0 -60
  306. package/src/adapters/node/static-content-server.js +0 -194
  307. package/src/adapters/node/static-preview-host.d.ts +0 -55
  308. package/src/adapters/node/static-preview-host.js +0 -68
  309. package/src/adapters/shared/api-response.d.ts +0 -52
  310. package/src/adapters/shared/api-response.js +0 -96
  311. package/src/adapters/shared/application-adapter.d.ts +0 -18
  312. package/src/adapters/shared/application-adapter.js +0 -90
  313. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  314. package/src/adapters/shared/define-api-handler.js +0 -15
  315. package/src/adapters/shared/explicit-static-render-preparation.d.ts +0 -25
  316. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  317. package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -41
  318. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  319. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -62
  320. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  321. package/src/adapters/shared/fs-server-response-factory.d.ts +0 -23
  322. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  323. package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -75
  324. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  325. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  326. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  327. package/src/adapters/shared/hmr-html-response.d.ts +0 -22
  328. package/src/adapters/shared/hmr-html-response.js +0 -33
  329. package/src/adapters/shared/render-context.d.ts +0 -16
  330. package/src/adapters/shared/render-context.js +0 -93
  331. package/src/adapters/shared/runtime-app-bootstrap.d.ts +0 -26
  332. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  333. package/src/adapters/shared/runtime-host.d.ts +0 -12
  334. package/src/adapters/shared/runtime-host.js +0 -0
  335. package/src/adapters/shared/server-adapter.d.ts +0 -108
  336. package/src/adapters/shared/server-adapter.js +0 -436
  337. package/src/adapters/shared/server-route-handler.d.ts +0 -89
  338. package/src/adapters/shared/server-route-handler.js +0 -111
  339. package/src/adapters/shared/server-static-builder.d.ts +0 -71
  340. package/src/adapters/shared/server-static-builder.js +0 -100
  341. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  342. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  343. package/src/adapters/shared/static-preview-host.d.ts +0 -10
  344. package/src/adapters/shared/static-preview-host.js +0 -0
  345. package/src/build/browser-runtime-import-rewrite-plugin.d.ts +0 -26
  346. package/src/build/browser-runtime-import-rewrite-plugin.js +0 -165
  347. package/src/build/browser-runtime-manifest.d.ts +0 -31
  348. package/src/build/browser-runtime-manifest.js +0 -61
  349. package/src/build/build-adapter.d.ts +0 -247
  350. package/src/build/build-adapter.js +0 -671
  351. package/src/build/build-manifest.d.ts +0 -33
  352. package/src/build/build-manifest.js +0 -52
  353. package/src/build/build-types.d.ts +0 -57
  354. package/src/build/build-types.js +0 -0
  355. package/src/build/dev-build-coordinator.d.ts +0 -72
  356. package/src/build/dev-build-coordinator.js +0 -154
  357. package/src/build/esbuild-build-adapter.d.ts +0 -79
  358. package/src/build/esbuild-build-adapter.js +0 -521
  359. package/src/build/runtime-build-executor.d.ts +0 -14
  360. package/src/build/runtime-build-executor.js +0 -22
  361. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  362. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  363. package/src/config/config-builder.d.ts +0 -252
  364. package/src/config/config-builder.js +0 -598
  365. package/src/config/constants.js +0 -25
  366. package/src/dev/host-runtime.d.ts +0 -10
  367. package/src/dev/host-runtime.js +0 -24
  368. package/src/dev/sc-server.d.ts +0 -30
  369. package/src/dev/sc-server.js +0 -111
  370. package/src/eco/eco.browser.d.ts +0 -2
  371. package/src/eco/eco.browser.js +0 -88
  372. package/src/eco/eco.d.ts +0 -9
  373. package/src/eco/eco.js +0 -119
  374. package/src/eco/eco.types.d.ts +0 -233
  375. package/src/eco/eco.types.js +0 -0
  376. package/src/eco/eco.utils.d.ts +0 -1
  377. package/src/eco/eco.utils.js +0 -10
  378. package/src/eco/global-injector-map.d.ts +0 -16
  379. package/src/eco/global-injector-map.js +0 -80
  380. package/src/eco/lazy-injector-map.d.ts +0 -8
  381. package/src/eco/lazy-injector-map.js +0 -70
  382. package/src/eco/module-dependencies.d.ts +0 -18
  383. package/src/eco/module-dependencies.js +0 -49
  384. package/src/errors/http-error.d.ts +0 -31
  385. package/src/errors/http-error.js +0 -50
  386. package/src/errors/index.d.ts +0 -3
  387. package/src/errors/index.js +0 -6
  388. package/src/errors/locals-access-error.d.ts +0 -4
  389. package/src/errors/locals-access-error.js +0 -9
  390. package/src/global/app-logger.d.ts +0 -2
  391. package/src/global/app-logger.js +0 -6
  392. package/src/hmr/client/hmr-runtime.d.ts +0 -5
  393. package/src/hmr/client/hmr-runtime.js +0 -117
  394. package/src/hmr/hmr-strategy.d.ts +0 -162
  395. package/src/hmr/hmr-strategy.js +0 -44
  396. package/src/hmr/hmr.postcss.test.e2e.d.ts +0 -1
  397. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  398. package/src/hmr/hmr.test.e2e.d.ts +0 -1
  399. package/src/hmr/hmr.test.e2e.js +0 -43
  400. package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
  401. package/src/hmr/strategies/default-hmr-strategy.js +0 -34
  402. package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -134
  403. package/src/hmr/strategies/js-hmr-strategy.js +0 -173
  404. package/src/index.browser.d.ts +0 -3
  405. package/src/index.browser.js +0 -4
  406. package/src/index.d.ts +0 -6
  407. package/src/index.js +0 -21
  408. package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -16
  409. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  410. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  411. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  412. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  413. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  414. package/src/plugins/alias-resolver-plugin.d.ts +0 -3
  415. package/src/plugins/alias-resolver-plugin.js +0 -61
  416. package/src/plugins/eco-component-meta-plugin.d.ts +0 -108
  417. package/src/plugins/eco-component-meta-plugin.js +0 -175
  418. package/src/plugins/foreign-jsx-override-plugin.d.ts +0 -33
  419. package/src/plugins/foreign-jsx-override-plugin.js +0 -41
  420. package/src/plugins/integration-plugin.d.ts +0 -230
  421. package/src/plugins/integration-plugin.js +0 -201
  422. package/src/plugins/processor.d.ts +0 -97
  423. package/src/plugins/processor.js +0 -141
  424. package/src/plugins/runtime-capability.js +0 -0
  425. package/src/plugins/source-transform.d.ts +0 -46
  426. package/src/plugins/source-transform.js +0 -71
  427. package/src/route-renderer/orchestration/component-render-context.d.ts +0 -97
  428. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  429. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  430. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  431. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +0 -110
  432. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  433. package/src/route-renderer/orchestration/integration-renderer.d.ts +0 -534
  434. package/src/route-renderer/orchestration/integration-renderer.js +0 -991
  435. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  436. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  437. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +0 -29
  438. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  439. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +0 -3
  440. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  441. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  442. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  443. package/src/route-renderer/orchestration/render-output.utils.d.ts +0 -66
  444. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  445. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +0 -156
  446. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  447. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  448. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  449. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +0 -37
  450. package/src/route-renderer/page-loading/component-dependency-collection.js +0 -132
  451. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +0 -24
  452. package/src/route-renderer/page-loading/declared-asset-collection.js +0 -106
  453. package/src/route-renderer/page-loading/dependency-resolver.d.ts +0 -35
  454. package/src/route-renderer/page-loading/dependency-resolver.js +0 -115
  455. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +0 -11
  456. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +0 -57
  457. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +0 -45
  458. package/src/route-renderer/page-loading/lazy-entry-collection.js +0 -105
  459. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +0 -19
  460. package/src/route-renderer/page-loading/lazy-trigger-planning.js +0 -40
  461. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +0 -5
  462. package/src/route-renderer/page-loading/module-declaration-aggregation.js +0 -33
  463. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +0 -3
  464. package/src/route-renderer/page-loading/module-declaration-scripts.js +0 -18
  465. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +0 -13
  466. package/src/route-renderer/page-loading/page-dependency-bundling.js +0 -137
  467. package/src/route-renderer/page-loading/page-module-loader.d.ts +0 -90
  468. package/src/route-renderer/page-loading/page-module-loader.js +0 -127
  469. package/src/route-renderer/route-renderer.d.ts +0 -69
  470. package/src/route-renderer/route-renderer.js +0 -80
  471. package/src/router/client/link-intent.js +0 -34
  472. package/src/router/client/link-intent.test.browser.d.ts +0 -1
  473. package/src/router/client/link-intent.test.browser.js +0 -43
  474. package/src/router/client/navigation-coordinator.d.ts +0 -169
  475. package/src/router/client/navigation-coordinator.js +0 -215
  476. package/src/router/server/route-registry.d.ts +0 -78
  477. package/src/router/server/route-registry.js +0 -262
  478. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +0 -3
  479. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +0 -56
  480. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +0 -103
  481. package/src/services/assets/asset-processing-service/asset-processing.service.js +0 -285
  482. package/src/services/assets/asset-processing-service/asset.factory.d.ts +0 -17
  483. package/src/services/assets/asset-processing-service/asset.factory.js +0 -82
  484. package/src/services/assets/asset-processing-service/assets.types.d.ts +0 -103
  485. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  486. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +0 -57
  487. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +0 -49
  488. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +0 -20
  489. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +0 -41
  490. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +0 -30
  491. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +0 -65
  492. package/src/services/assets/asset-processing-service/index.d.ts +0 -6
  493. package/src/services/assets/asset-processing-service/index.js +0 -6
  494. package/src/services/assets/asset-processing-service/page-package.d.ts +0 -6
  495. package/src/services/assets/asset-processing-service/page-package.js +0 -80
  496. package/src/services/assets/asset-processing-service/processor.interface.js +0 -6
  497. package/src/services/assets/asset-processing-service/processor.registry.d.ts +0 -8
  498. package/src/services/assets/asset-processing-service/processor.registry.js +0 -15
  499. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +0 -24
  500. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +0 -65
  501. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -22
  502. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +0 -136
  503. package/src/services/assets/asset-processing-service/processors/index.d.ts +0 -5
  504. package/src/services/assets/asset-processing-service/processors/index.js +0 -5
  505. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +0 -6
  506. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +0 -120
  507. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -9
  508. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +0 -97
  509. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -42
  510. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +0 -126
  511. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -8
  512. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -59
  513. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
  514. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -69
  515. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -18
  516. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +0 -45
  517. package/src/services/assets/browser-bundle.service.d.ts +0 -73
  518. package/src/services/assets/browser-bundle.service.js +0 -41
  519. package/src/services/cache/cache.types.d.ts +0 -107
  520. package/src/services/cache/cache.types.js +0 -0
  521. package/src/services/cache/index.d.ts +0 -7
  522. package/src/services/cache/index.js +0 -7
  523. package/src/services/cache/memory-cache-store.d.ts +0 -42
  524. package/src/services/cache/memory-cache-store.js +0 -98
  525. package/src/services/cache/page-cache-service.d.ts +0 -70
  526. package/src/services/cache/page-cache-service.js +0 -152
  527. package/src/services/cache/page-request-cache-coordinator.service.d.ts +0 -75
  528. package/src/services/cache/page-request-cache-coordinator.service.js +0 -109
  529. package/src/services/html/html-rewriter-provider.service.d.ts +0 -40
  530. package/src/services/html/html-rewriter-provider.service.js +0 -68
  531. package/src/services/html/html-transformer.service.d.ts +0 -96
  532. package/src/services/html/html-transformer.service.js +0 -287
  533. package/src/services/invalidation/development-invalidation.service.d.ts +0 -74
  534. package/src/services/invalidation/development-invalidation.service.js +0 -190
  535. package/src/services/module-loading/app-module-loader.service.d.ts +0 -7
  536. package/src/services/module-loading/app-module-loader.service.js +0 -0
  537. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +0 -24
  538. package/src/services/module-loading/app-server-module-transpiler.service.js +0 -151
  539. package/src/services/module-loading/host-module-loader-registry.d.ts +0 -4
  540. package/src/services/module-loading/host-module-loader-registry.js +0 -15
  541. package/src/services/module-loading/module-loading-types.js +0 -0
  542. package/src/services/module-loading/node-bootstrap-plugin.d.ts +0 -38
  543. package/src/services/module-loading/node-bootstrap-plugin.js +0 -215
  544. package/src/services/module-loading/page-module-import.service.d.ts +0 -95
  545. package/src/services/module-loading/page-module-import.service.js +0 -191
  546. package/src/services/module-loading/server-module-transpiler.service.d.ts +0 -63
  547. package/src/services/module-loading/server-module-transpiler.service.js +0 -64
  548. package/src/services/module-loading/source-module-support.d.ts +0 -5
  549. package/src/services/module-loading/source-module-support.js +0 -8
  550. package/src/services/runtime-state/dev-graph.service.d.ts +0 -118
  551. package/src/services/runtime-state/dev-graph.service.js +0 -162
  552. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +0 -41
  553. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +0 -85
  554. package/src/services/runtime-state/server-invalidation-state.service.d.ts +0 -26
  555. package/src/services/runtime-state/server-invalidation-state.service.js +0 -35
  556. package/src/services/validation/schema-validation-service.d.ts +0 -122
  557. package/src/services/validation/schema-validation-service.js +0 -101
  558. package/src/services/validation/standard-schema.types.js +0 -0
  559. package/src/static-site-generator/static-site-generator.d.ts +0 -104
  560. package/src/static-site-generator/static-site-generator.js +0 -316
  561. package/src/types/internal-types.d.ts +0 -232
  562. package/src/types/internal-types.js +0 -0
  563. package/src/types/public-types.d.ts +0 -1307
  564. package/src/types/public-types.js +0 -0
  565. package/src/utils/deep-merge.d.ts +0 -14
  566. package/src/utils/deep-merge.js +0 -32
  567. package/src/utils/hash.d.ts +0 -1
  568. package/src/utils/hash.js +0 -7
  569. package/src/utils/html-escaping.d.ts +0 -7
  570. package/src/utils/html-escaping.js +0 -6
  571. package/src/utils/html.js +0 -4
  572. package/src/utils/invariant.d.ts +0 -5
  573. package/src/utils/invariant.js +0 -11
  574. package/src/utils/locals-utils.d.ts +0 -15
  575. package/src/utils/locals-utils.js +0 -24
  576. package/src/utils/parse-cli-args.d.ts +0 -27
  577. package/src/utils/parse-cli-args.js +0 -62
  578. package/src/utils/path-utils.module.d.ts +0 -5
  579. package/src/utils/path-utils.module.js +0 -14
  580. package/src/utils/resolve-work-dir.d.ts +0 -11
  581. package/src/utils/resolve-work-dir.js +0 -31
  582. package/src/utils/runtime.d.ts +0 -11
  583. package/src/utils/runtime.js +0 -40
  584. package/src/utils/server-utils.module.d.ts +0 -19
  585. package/src/utils/server-utils.module.js +0 -56
  586. package/src/watchers/project-watcher.d.ts +0 -136
  587. package/src/watchers/project-watcher.js +0 -275
  588. package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
  589. package/src/watchers/project-watcher.test-helpers.js +0 -52
  590. /package/src/utils/{html.d.ts → html.ts} +0 -0
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Bundler plugin bridge.
3
+ *
4
+ * @remarks
5
+ * Translates an array of `EcoBuildPlugin` instances (the runtime-agnostic
6
+ * plugin contract used by Ecopages processors and integrations) into
7
+ * the bundler's native `Plugin` array. The bridge exposes the same
8
+ * three hooks (`onResolve`, `onLoad`, `module`) the `EcoBuildPlugin`
9
+ * contract uses, but maps them to the bundler's `resolveId`/`load`
10
+ * hooks.
11
+ *
12
+ * The shared `EcoBuildPlugin` contract stays the boundary between
13
+ * integrations and bundler backends.
14
+ *
15
+ * **Namespace handling.**
16
+ *
17
+ * The shared `EcoBuildPlugin` contract scopes `onResolve`/`onLoad`
18
+ * handlers with a `namespace` string. The bundler encodes namespaces
19
+ * into the module id (no separate field). The bridge prepends
20
+ * `<namespace>:` to the resolved id when the result includes a
21
+ * namespace, and matches `onLoad`/`onResolve` filters against that
22
+ * prefix. The bridge strips the prefix before forwarding the id back
23
+ * to the callback so plugin code keeps seeing the same `path` shape
24
+ * it did on the historical contract.
25
+ *
26
+ * **Plugin ordering is semantically significant.**
27
+ *
28
+ * The bundler's `resolveId` and `load` are "first" hooks: the first
29
+ * plugin that returns a non-null value wins. Because the bridge
30
+ * translates each `EcoBuildPlugin` into its own bundler plugin and
31
+ * preserves the array order, the position of each plugin in the
32
+ * `plugins` array determines its priority:
33
+ *
34
+ * - **Index 0** has the highest priority.
35
+ * - **Last index** has the lowest priority.
36
+ *
37
+ * When adding new integrations or processors, ensure security-critical
38
+ * plugins (e.g. `ecopages-client-graph-boundary`) are placed **before**
39
+ * general-purpose loaders in the array so they always get first refusal
40
+ * on every source file.
41
+ */
42
+
43
+ import path from 'node:path';
44
+ import type { LoadResult, PartialResolvedId, Plugin, ResolveIdResult, SourceDescription } from 'rolldown';
45
+ import { escapeRegExp } from './browser-runtime-plugin-helpers.ts';
46
+ import type {
47
+ EcoBuildOnLoadArgs,
48
+ EcoBuildOnLoadResult,
49
+ EcoBuildOnResolveArgs,
50
+ EcoBuildOnResolveResult,
51
+ EcoBuildPlugin,
52
+ EcoBuildPluginBuilder,
53
+ } from './build-types.ts';
54
+
55
+ const NAMESPACE_SEPARATOR = ':';
56
+
57
+ function joinNamespace(namespace: string | undefined, value: string): string {
58
+ return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
59
+ }
60
+
61
+ function splitNamespace(id: string): { namespace: string | undefined; path: string } {
62
+ const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
63
+ if (separatorIndex <= 0) {
64
+ return { namespace: undefined, path: id };
65
+ }
66
+ return {
67
+ namespace: id.slice(0, separatorIndex),
68
+ path: id.slice(separatorIndex + 1),
69
+ };
70
+ }
71
+
72
+ function inferRolldownModuleTypeFromPath(filePath: string): string {
73
+ const extension = path.extname(filePath).toLowerCase();
74
+
75
+ switch (extension) {
76
+ case '.ts':
77
+ return 'ts';
78
+ case '.tsx':
79
+ return 'tsx';
80
+ case '.jsx':
81
+ return 'jsx';
82
+ case '.json':
83
+ return 'json';
84
+ case '.css':
85
+ return 'css';
86
+ default:
87
+ return 'js';
88
+ }
89
+ }
90
+
91
+ function normalizeRolldownModuleType(loader: unknown): string | undefined {
92
+ switch (loader) {
93
+ case 'js':
94
+ case 'jsx':
95
+ case 'ts':
96
+ case 'tsx':
97
+ case 'json':
98
+ case 'css':
99
+ case 'text':
100
+ case 'base64':
101
+ case 'dataurl':
102
+ case 'binary':
103
+ case 'empty':
104
+ return loader;
105
+ case 'global-css':
106
+ case 'local-css':
107
+ return 'css';
108
+ case 'file':
109
+ case 'copy':
110
+ return 'asset';
111
+ default:
112
+ return undefined;
113
+ }
114
+ }
115
+
116
+ function convertLoadResultToModuleSource(result: EcoBuildOnLoadResult): string | undefined {
117
+ if (result.loader === 'object' && result.exports && typeof result.exports === 'object') {
118
+ return Object.entries(result.exports)
119
+ .map(([key, value]) =>
120
+ key === 'default'
121
+ ? `export default ${JSON.stringify(value)};`
122
+ : `export const ${key} = ${JSON.stringify(value)};`,
123
+ )
124
+ .join('\n');
125
+ }
126
+
127
+ return undefined;
128
+ }
129
+
130
+ function buildIdFilter(filter: RegExp, namespace: string | undefined): RegExp {
131
+ if (!namespace) {
132
+ return filter;
133
+ }
134
+ return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
135
+ }
136
+
137
+ function resolvePluginPath(value: string, importer: string | undefined, contextRoot: string): string {
138
+ if (path.isAbsolute(value)) {
139
+ return value;
140
+ }
141
+
142
+ if (value.startsWith('.') || value.startsWith('..')) {
143
+ const baseDir = importer ? path.dirname(importer) : contextRoot;
144
+ return path.resolve(baseDir, value);
145
+ }
146
+
147
+ return value;
148
+ }
149
+
150
+ function convertPluginOnLoadResult(args: { id: string }, result: unknown): LoadResult | undefined {
151
+ if (!result || typeof result !== 'object') {
152
+ return undefined;
153
+ }
154
+
155
+ const candidate = result as EcoBuildOnLoadResult;
156
+ const { path: sourcePath } = splitNamespace(args.id);
157
+
158
+ const sourceFromExports = convertLoadResultToModuleSource(candidate);
159
+
160
+ if (sourceFromExports) {
161
+ const description: SourceDescription = {
162
+ code: sourceFromExports,
163
+ moduleType: 'js',
164
+ };
165
+ return description;
166
+ }
167
+
168
+ if (typeof candidate.contents === 'string' || candidate.contents instanceof Uint8Array) {
169
+ const code =
170
+ typeof candidate.contents === 'string' ? candidate.contents : new TextDecoder().decode(candidate.contents);
171
+ const description: SourceDescription = {
172
+ code,
173
+ moduleType: (normalizeRolldownModuleType(candidate.loader) ??
174
+ inferRolldownModuleTypeFromPath(sourcePath)) as SourceDescription['moduleType'],
175
+ };
176
+ return description;
177
+ }
178
+
179
+ return undefined;
180
+ }
181
+
182
+ function convertPluginOnResolveResult(
183
+ result: unknown,
184
+ importer: string | undefined,
185
+ contextRoot: string,
186
+ ): ResolveIdResult | undefined {
187
+ if (!result || typeof result !== 'object') {
188
+ return undefined;
189
+ }
190
+
191
+ const candidate = result as EcoBuildOnResolveResult;
192
+
193
+ if (typeof candidate.path !== 'string' && typeof candidate.namespace !== 'string') {
194
+ if (typeof candidate.external !== 'boolean') {
195
+ return undefined;
196
+ }
197
+ }
198
+
199
+ const partial: PartialResolvedId = { id: '' };
200
+
201
+ if (typeof candidate.path === 'string') {
202
+ partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
203
+ } else if (typeof candidate.namespace === 'string') {
204
+ partial.id = joinNamespace(candidate.namespace, '');
205
+ }
206
+
207
+ if (typeof candidate.external === 'boolean') {
208
+ partial.external = candidate.external;
209
+ }
210
+
211
+ return partial;
212
+ }
213
+
214
+ type ResolveCallback = (
215
+ args: EcoBuildOnResolveArgs,
216
+ ) => EcoBuildOnResolveResult | undefined | Promise<EcoBuildOnResolveResult | undefined>;
217
+
218
+ type LoadCallback = (
219
+ args: EcoBuildOnLoadArgs,
220
+ ) => EcoBuildOnLoadResult | undefined | Promise<EcoBuildOnLoadResult | undefined>;
221
+
222
+ interface ResolveRegistration {
223
+ filter: RegExp;
224
+ callback: ResolveCallback;
225
+ }
226
+
227
+ interface LoadRegistration {
228
+ filter: RegExp;
229
+ callback: LoadCallback;
230
+ }
231
+
232
+ function wrapEcoPlugin(ecoPlugin: EcoBuildPlugin, contextRoot: string, moduleCounter: { value: number }): Plugin {
233
+ const resolveRegistrations: ResolveRegistration[] = [];
234
+ const loadRegistrations: LoadRegistration[] = [];
235
+
236
+ const registerResolve = (filter: RegExp, callback: ResolveCallback): void => {
237
+ resolveRegistrations.push({ filter, callback });
238
+ };
239
+
240
+ const registerLoad = (filter: RegExp, callback: LoadCallback): void => {
241
+ loadRegistrations.push({ filter, callback });
242
+ };
243
+
244
+ return {
245
+ name: `ecopages-plugin-bridge:${ecoPlugin.name}`,
246
+ buildStart: async (): Promise<void> => {
247
+ const bridge: EcoBuildPluginBuilder = {
248
+ onResolve: (options, callback) => {
249
+ registerResolve(buildIdFilter(options.filter, options.namespace), callback);
250
+ },
251
+ onLoad: (options, callback) => {
252
+ registerLoad(buildIdFilter(options.filter, options.namespace), callback);
253
+ },
254
+ module: (specifier, callback) => {
255
+ const namespace = `ecopages-module-${moduleCounter.value}`;
256
+ moduleCounter.value += 1;
257
+ const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
258
+
259
+ registerResolve(filter, async () => ({
260
+ path: joinNamespace(namespace, specifier),
261
+ }));
262
+
263
+ registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
264
+ },
265
+ };
266
+
267
+ await ecoPlugin.setup(bridge);
268
+ },
269
+ resolveId: async (source, importer, _extraOptions) => {
270
+ for (const { filter, callback } of resolveRegistrations) {
271
+ if (!filter.test(source)) {
272
+ continue;
273
+ }
274
+ const { namespace, path: sourcePath } = splitNamespace(source);
275
+ const result = await callback({ path: sourcePath, importer, namespace });
276
+ const converted = convertPluginOnResolveResult(result, importer, contextRoot);
277
+ if (converted !== undefined) {
278
+ return converted;
279
+ }
280
+ }
281
+ return undefined;
282
+ },
283
+ load: async (id) => {
284
+ for (const { filter, callback } of loadRegistrations) {
285
+ if (!filter.test(id)) {
286
+ continue;
287
+ }
288
+ const { namespace, path: sourcePath } = splitNamespace(id);
289
+ const result = await callback({ path: sourcePath, namespace });
290
+ const converted = convertPluginOnLoadResult({ id }, result);
291
+ if (converted !== undefined) {
292
+ return converted;
293
+ }
294
+ }
295
+ return undefined;
296
+ },
297
+ };
298
+ }
299
+
300
+ /**
301
+ * Creates a Rolldown `Plugin` array that drives the supplied
302
+ * `EcoBuildPlugin` instances. Each `EcoBuildPlugin` becomes its own
303
+ * Rolldown plugin so that the order of registrations is preserved as
304
+ * plugin priority.
305
+ */
306
+ export function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string): Plugin[] {
307
+ const moduleCounter = { value: 0 };
308
+ return plugins.map((ecoPlugin) => wrapEcoPlugin(ecoPlugin, contextRoot, moduleCounter));
309
+ }
@@ -0,0 +1,130 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'vitest';
3
+ import { createAppBuildManifest } from './build-manifest.ts';
4
+ import {
5
+ getAppBuildAdapter,
6
+ getAppBuildOwnership,
7
+ setAppBuildAdapter,
8
+ setAppBuildExecutor,
9
+ setAppBuildManifest,
10
+ ViteHostBuildAdapter,
11
+ withBuildExecutorPlugins,
12
+ } from './build-adapter.ts';
13
+ import { SerializedBuildExecutor } from './serialized-build-executor.ts';
14
+ import { RolldownBuildAdapter } from './rolldown-build-adapter.ts';
15
+ import { installAppRuntimeBuildExecutor } from './runtime-build-executor.ts';
16
+
17
+ test('installAppRuntimeBuildExecutor wraps the active adapter in a SerializedBuildExecutor', () => {
18
+ const staleExecutor = new RolldownBuildAdapter();
19
+ const appConfig = {
20
+ runtime: {
21
+ buildExecutor: staleExecutor,
22
+ },
23
+ loaders: new Map(),
24
+ } as never;
25
+
26
+ setAppBuildAdapter(appConfig, new ViteHostBuildAdapter());
27
+ setAppBuildManifest(
28
+ appConfig,
29
+ createAppBuildManifest({
30
+ runtimePlugins: [],
31
+ }),
32
+ );
33
+
34
+ const executor = installAppRuntimeBuildExecutor(appConfig);
35
+
36
+ assert.notEqual(executor, staleExecutor);
37
+ assert.ok(executor instanceof SerializedBuildExecutor, 'wraps the executor in a FIFO-serialized layer');
38
+ });
39
+
40
+ test('installAppRuntimeBuildExecutor rejects when the app-owned adapter is a Vite-host boundary', async () => {
41
+ const appConfig = {
42
+ runtime: {},
43
+ loaders: new Map(),
44
+ } as never;
45
+
46
+ setAppBuildAdapter(appConfig, new ViteHostBuildAdapter());
47
+ setAppBuildManifest(
48
+ appConfig,
49
+ createAppBuildManifest({
50
+ runtimePlugins: [],
51
+ }),
52
+ );
53
+
54
+ const executor = installAppRuntimeBuildExecutor(appConfig);
55
+
56
+ await assert.rejects(
57
+ executor.build({
58
+ entrypoints: ['/tmp/entry.ts'],
59
+ root: '/tmp',
60
+ outdir: '/tmp/out',
61
+ target: 'browser',
62
+ format: 'esm',
63
+ sourcemap: 'none',
64
+ splitting: false,
65
+ minify: false,
66
+ }),
67
+ /Vite-hosted builds are owned by the host runtime/,
68
+ );
69
+ });
70
+
71
+ test('installAppRuntimeBuildExecutor merges app-owned server plugins into every build', async () => {
72
+ const injectedPlugin = {
73
+ name: 'test-injected-plugin',
74
+ setup() {},
75
+ };
76
+ const observed: Array<unknown> = [];
77
+ const baseAdapter = new RolldownBuildAdapter();
78
+ const wrappedAdapter: import('./build-adapter.ts').BuildAdapter = {
79
+ ownership: baseAdapter.ownership,
80
+ resolve: baseAdapter.resolve.bind(baseAdapter),
81
+ getTranspileOptions: baseAdapter.getTranspileOptions.bind(baseAdapter),
82
+ async build(options) {
83
+ observed.push(options.plugins);
84
+ return { success: true, logs: [], outputs: [] };
85
+ },
86
+ };
87
+ const appConfig = {
88
+ runtime: { buildAdapter: wrappedAdapter },
89
+ loaders: new Map(),
90
+ } as never;
91
+
92
+ setAppBuildManifest(
93
+ appConfig,
94
+ createAppBuildManifest({
95
+ runtimePlugins: [injectedPlugin],
96
+ }),
97
+ );
98
+
99
+ const executor = installAppRuntimeBuildExecutor(appConfig);
100
+ await executor.build({
101
+ entrypoints: ['/tmp/entry.ts'],
102
+ root: '/tmp',
103
+ outdir: '/tmp/out',
104
+ target: 'browser',
105
+ format: 'esm',
106
+ sourcemap: 'none',
107
+ });
108
+
109
+ assert.equal(observed.length, 1, 'inner adapter received one build call');
110
+ const observedPlugins = observed[0] as Array<{ name: string }> | undefined;
111
+ assert.ok(observedPlugins?.some((plugin) => plugin.name === injectedPlugin.name));
112
+ });
113
+
114
+ test('installAppRuntimeBuildExecutor does not double-wrap an already-wrapped executor', () => {
115
+ const appConfig = {
116
+ runtime: {},
117
+ loaders: new Map(),
118
+ } as never;
119
+
120
+ setAppBuildAdapter(appConfig, new RolldownBuildAdapter());
121
+ setAppBuildExecutor(
122
+ appConfig,
123
+ withBuildExecutorPlugins(new RolldownBuildAdapter(), () => []),
124
+ );
125
+
126
+ const installed = installAppRuntimeBuildExecutor(appConfig);
127
+ assert.ok(installed instanceof SerializedBuildExecutor);
128
+ assert.equal(getAppBuildAdapter(appConfig).ownership, 'rolldown');
129
+ assert.equal(getAppBuildOwnership(appConfig), 'rolldown');
130
+ });
@@ -0,0 +1,37 @@
1
+ import type { EcoPagesAppConfig } from '../types/internal-types.ts';
2
+ import {
3
+ getAppBuildAdapter,
4
+ getAppBuildExecutor,
5
+ getAppServerBuildPlugins,
6
+ setAppBuildExecutor,
7
+ withBuildExecutorPlugins,
8
+ type BuildExecutor,
9
+ } from './build-adapter.ts';
10
+ import { SerializedBuildExecutor } from './serialized-build-executor.ts';
11
+
12
+ /**
13
+ * Installs the app-owned runtime build executor for one app instance.
14
+ *
15
+ * @remarks
16
+ * Wraps the app-owned adapter in a {@link SerializedBuildExecutor} so
17
+ * every dev-watch caller issues builds against a single FIFO queue.
18
+ * Plugin injection is applied here via {@link withBuildExecutorPlugins}
19
+ * so app-owned plugins are merged into every rebuild without callers
20
+ * having to know about the manifest.
21
+ *
22
+ * Idempotent across calls: re-invoking replaces the existing executor
23
+ * on `appConfig.runtime` with a fresh wrapper.
24
+ *
25
+ * @param appConfig - The app config whose runtime state is updated.
26
+ * The function reads the existing executor (falling back to the
27
+ * app-owned adapter) and writes the wrapped executor back.
28
+ * @returns The installed {@link BuildExecutor}.
29
+ */
30
+ export function installAppRuntimeBuildExecutor(appConfig: EcoPagesAppConfig): BuildExecutor {
31
+ const baseExecutor = getAppBuildExecutor(appConfig) ?? getAppBuildAdapter(appConfig);
32
+ const buildExecutor = new SerializedBuildExecutor(
33
+ withBuildExecutorPlugins(baseExecutor, () => getAppServerBuildPlugins(appConfig)),
34
+ );
35
+ setAppBuildExecutor(appConfig, buildExecutor);
36
+ return buildExecutor;
37
+ }
@@ -0,0 +1,137 @@
1
+ import { createRequire } from 'node:module';
2
+ import { readFileSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+
6
+ const corePackageRequire = createRequire(new URL('../../package.json', import.meta.url));
7
+ const appDeclaredPackageCache = new Map<string, Set<string>>();
8
+
9
+ function tryResolveRuntimeImport(specifier: string, resolver: NodeJS.Require): string | undefined {
10
+ try {
11
+ return resolver.resolve(specifier);
12
+ } catch {
13
+ return undefined;
14
+ }
15
+ }
16
+
17
+ function isBareRuntimeImport(specifier: string): boolean {
18
+ return (
19
+ !specifier.startsWith('.') &&
20
+ !path.isAbsolute(specifier) &&
21
+ !specifier.startsWith('/') &&
22
+ !specifier.startsWith('node:') &&
23
+ !specifier.startsWith('@/') &&
24
+ !specifier.startsWith('~/') &&
25
+ !specifier.startsWith('#') &&
26
+ !specifier.includes(':')
27
+ );
28
+ }
29
+
30
+ function getPackageNameFromSpecifier(specifier: string): string {
31
+ if (specifier.startsWith('@')) {
32
+ return specifier.split('/').slice(0, 2).join('/');
33
+ }
34
+
35
+ return specifier.split('/')[0] ?? specifier;
36
+ }
37
+
38
+ function getDeclaredAppPackages(rootDir: string): Set<string> {
39
+ const cacheKey = path.resolve(rootDir);
40
+ const cached = appDeclaredPackageCache.get(cacheKey);
41
+ if (cached) {
42
+ return cached;
43
+ }
44
+
45
+ const packageJsonPath = path.resolve(rootDir, 'package.json');
46
+ const declaredPackages = new Set<string>();
47
+
48
+ try {
49
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as Record<string, unknown>;
50
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const) {
51
+ const entries = packageJson[field];
52
+ if (!entries || typeof entries !== 'object') {
53
+ continue;
54
+ }
55
+
56
+ for (const packageName of Object.keys(entries as Record<string, unknown>)) {
57
+ declaredPackages.add(packageName);
58
+ }
59
+ }
60
+ } catch {
61
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
62
+ return declaredPackages;
63
+ }
64
+
65
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
66
+ return declaredPackages;
67
+ }
68
+
69
+ export function isDeclaredAppPackageImport(specifier: string, rootDir: string): boolean {
70
+ return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
71
+ }
72
+
73
+ function rewriteRuntimeImportSpecifier(specifier: string, quote: string, rootDir: string): string | undefined {
74
+ if (!isBareRuntimeImport(specifier)) {
75
+ return undefined;
76
+ }
77
+
78
+ if (isDeclaredAppPackageImport(specifier, rootDir)) {
79
+ return undefined;
80
+ }
81
+
82
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
83
+ if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
84
+ return undefined;
85
+ }
86
+
87
+ return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
88
+ }
89
+
90
+ function rewriteRuntimeBuildOutputImports(code: string, rootDir: string): string {
91
+ const rewriteSpecifier = (prefix: string, quote: string, specifier: string) => {
92
+ const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
93
+ return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
94
+ };
95
+
96
+ const withResolvedPackages = code
97
+ .replace(/(\bfrom\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) =>
98
+ rewriteSpecifier(prefix, quote, specifier),
99
+ )
100
+ .replace(/(\bimport\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) =>
101
+ rewriteSpecifier(prefix, quote, specifier),
102
+ )
103
+ .replace(/(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) =>
104
+ rewriteSpecifier(prefix, quote, specifier),
105
+ );
106
+
107
+ return withResolvedPackages.replace(
108
+ /(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g,
109
+ (match, quote, specifier) => {
110
+ const resolvedPath = tryResolveRuntimeImport(specifier as string, corePackageRequire);
111
+ return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
112
+ },
113
+ );
114
+ }
115
+
116
+ export function normalizeNodeRuntimeBuildOutputFile(filePath: string, rootDir: string): void {
117
+ if (!/\.(?:[cm]?js)$/u.test(filePath)) {
118
+ return;
119
+ }
120
+
121
+ const fileSystem = corePackageRequire('node:fs') as typeof import('node:fs');
122
+ if (!fileSystem.existsSync(filePath)) {
123
+ return;
124
+ }
125
+
126
+ const code = fileSystem.readFileSync(filePath, 'utf-8');
127
+ const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
128
+ if (rewritten !== code) {
129
+ fileSystem.writeFileSync(filePath, rewritten);
130
+ }
131
+ }
132
+
133
+ export function normalizeNodeRuntimeBuildOutputs(outputPaths: string[], rootDir: string): void {
134
+ for (const outputPath of outputPaths) {
135
+ normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
136
+ }
137
+ }