@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,2 @@
1
+ export type SourceModuleLoader = (id: string) => Promise<unknown>;
2
+ export type SourceModuleLoaderFactory = () => SourceModuleLoader | undefined;
@@ -0,0 +1,22 @@
1
+ import type { EcoBuildOnResolveArgs, EcoBuildOnResolveResult, EcoBuildPlugin } from '../../build/build-types.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ /**
4
+ * Returns the app-local node_modules directory used by framework-owned Node
5
+ * bootstrap loads outside the thin-host manifest path.
6
+ */
7
+ export declare function getAppRuntimeNodeModulesDir(appConfig: Pick<EcoPagesAppConfig, 'rootDir' | 'workDir' | 'absolutePaths'>): string;
8
+ export interface NodeBootstrapResolutionOptions {
9
+ projectDir: string;
10
+ runtimeNodeModulesDir: string;
11
+ preserveImportMetaPaths?: string[];
12
+ }
13
+ /**
14
+ * Builds the user-facing error for Bun-native imports that cannot run on the
15
+ * Node bootstrap transpile path.
16
+ */
17
+ export declare function getNodeUnsupportedBuiltinError(specifier: string, importer?: string): string;
18
+ export declare function resolveNodeBootstrapDependency(args: Pick<EcoBuildOnResolveArgs, 'path' | 'importer'>, options: NodeBootstrapResolutionOptions): EcoBuildOnResolveResult | undefined;
19
+ export declare function createNodeBootstrapPlugin(options: NodeBootstrapResolutionOptions): EcoBuildPlugin;
20
+ export declare function createAppNodeBootstrapPlugin(appConfig: Pick<EcoPagesAppConfig, 'rootDir' | 'workDir' | 'absolutePaths'>, options?: {
21
+ preserveImportMetaPaths?: string[];
22
+ }): EcoBuildPlugin;
@@ -0,0 +1,179 @@
1
+ import path from "node:path";
2
+ import { existsSync, mkdirSync, readFileSync, symlinkSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+ import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
6
+ function getAppRuntimeNodeModulesDir(appConfig) {
7
+ return path.join(resolveInternalExecutionDir(appConfig), "node_modules");
8
+ }
9
+ function getPackageNameFromSpecifier(specifier) {
10
+ if (specifier.startsWith("@")) {
11
+ const [scope, name] = specifier.split("/");
12
+ return `${scope}/${name}`;
13
+ }
14
+ return specifier.split("/")[0] ?? specifier;
15
+ }
16
+ function findPackageRoot(resolvedPath) {
17
+ let currentPath = path.dirname(resolvedPath);
18
+ while (true) {
19
+ const packageJsonPath = path.join(currentPath, "package.json");
20
+ if (existsSync(packageJsonPath)) {
21
+ return currentPath;
22
+ }
23
+ const parentPath = path.dirname(currentPath);
24
+ if (parentPath === currentPath) {
25
+ throw new Error(`Could not find package root for resolved dependency path: ${resolvedPath}`);
26
+ }
27
+ currentPath = parentPath;
28
+ }
29
+ }
30
+ function ensureRuntimePackageLink(nodeModulesDir, specifier, resolvedPath) {
31
+ const packageName = getPackageNameFromSpecifier(specifier);
32
+ const packageRoot = findPackageRoot(resolvedPath);
33
+ const linkPath = path.join(nodeModulesDir, packageName);
34
+ if (existsSync(linkPath)) {
35
+ return;
36
+ }
37
+ mkdirSync(path.dirname(linkPath), { recursive: true });
38
+ symlinkSync(packageRoot, linkPath, "dir");
39
+ }
40
+ function getNodeUnsupportedBuiltinError(specifier, importer) {
41
+ return `Node bootstrap transpilation does not support Bun builtin specifier ${JSON.stringify(specifier)}${importer ? ` imported from ${importer}` : ""}.`;
42
+ }
43
+ function shouldResolveFromImporter(importer) {
44
+ return Boolean(importer && importer.includes(`${path.sep}node_modules${path.sep}`));
45
+ }
46
+ function resolveSpecifier(specifier, parentPath) {
47
+ try {
48
+ return createRequire(parentPath).resolve(specifier);
49
+ } catch {
50
+ return fileURLToPath(import.meta.resolve(specifier, pathToFileURL(parentPath).href));
51
+ }
52
+ }
53
+ function resolveFromCore(specifier) {
54
+ return createRequire(import.meta.url).resolve(specifier);
55
+ }
56
+ function getBootstrapBuildLoaderForPath(filePath) {
57
+ switch (path.extname(filePath).toLowerCase()) {
58
+ case ".ts":
59
+ case ".mts":
60
+ case ".cts":
61
+ return "ts";
62
+ case ".tsx":
63
+ return "tsx";
64
+ case ".jsx":
65
+ return "jsx";
66
+ case ".json":
67
+ return "json";
68
+ default:
69
+ return "js";
70
+ }
71
+ }
72
+ const REEXPORT_FROM_STATEMENT_PATTERN = /^\s*export\s+(?!type\b)(?:\*|\{[\s\S]*?\})\s+from\s+(['"][^'"]+['"])\s*;?\s*$/gm;
73
+ function injectBootstrapReexportImports(source) {
74
+ const sideEffectImports = [];
75
+ const importedSpecifiers = /* @__PURE__ */ new Set();
76
+ let importIndex = 0;
77
+ const rewrittenSource = source.replace(REEXPORT_FROM_STATEMENT_PATTERN, (statement, specifierLiteral) => {
78
+ if (!importedSpecifiers.has(specifierLiteral)) {
79
+ importedSpecifiers.add(specifierLiteral);
80
+ const importBinding = `__eco_bootstrap_reexport_${importIndex++}`;
81
+ sideEffectImports.push(`import * as ${importBinding} from ${specifierLiteral};`);
82
+ sideEffectImports.push(`void ${importBinding};`);
83
+ }
84
+ return statement;
85
+ });
86
+ if (sideEffectImports.length === 0) {
87
+ return source;
88
+ }
89
+ return `${sideEffectImports.join("\n")}
90
+ ${rewrittenSource}`;
91
+ }
92
+ function shouldRewriteBootstrapSource(filePath, projectDir) {
93
+ const normalizedPath = path.resolve(filePath);
94
+ const normalizedProjectDir = path.resolve(projectDir);
95
+ return normalizedPath.startsWith(`${normalizedProjectDir}${path.sep}`) && !normalizedPath.includes(`${path.sep}node_modules${path.sep}`);
96
+ }
97
+ function resolveNodeBootstrapDependency(args, options) {
98
+ if (args.path.startsWith("./") || args.path.startsWith("../") || args.path.startsWith("@/") || args.path.startsWith("/") || args.path.startsWith("node:")) {
99
+ return void 0;
100
+ }
101
+ const resolveParent = args.importer && path.isAbsolute(args.importer) && shouldResolveFromImporter(args.importer) ? args.importer : path.join(options.projectDir, "package.json");
102
+ if (args.path.startsWith("@ecopages/")) {
103
+ let resolvedPath2;
104
+ try {
105
+ resolvedPath2 = resolveFromCore(args.path);
106
+ } catch {
107
+ resolvedPath2 = resolveSpecifier(args.path, resolveParent);
108
+ }
109
+ if (resolvedPath2.includes(`${path.sep}node_modules${path.sep}`)) {
110
+ ensureRuntimePackageLink(options.runtimeNodeModulesDir, args.path, resolvedPath2);
111
+ return {
112
+ path: args.path,
113
+ external: true
114
+ };
115
+ }
116
+ return { path: resolvedPath2 };
117
+ }
118
+ const resolvedPath = resolveSpecifier(args.path, resolveParent);
119
+ ensureRuntimePackageLink(options.runtimeNodeModulesDir, args.path, resolvedPath);
120
+ return {
121
+ path: args.path,
122
+ external: true
123
+ };
124
+ }
125
+ function createNodeBootstrapPlugin(options) {
126
+ const projectDir = path.resolve(options.projectDir);
127
+ const importMetaRewritePaths = new Set(
128
+ (options.preserveImportMetaPaths ?? []).map((filePath) => path.resolve(filePath))
129
+ );
130
+ return {
131
+ name: "node-bootstrap-plugin",
132
+ setup(build) {
133
+ build.onResolve({ filter: /^bun:/ }, (args) => {
134
+ throw new Error(getNodeUnsupportedBuiltinError(args.path, args.importer));
135
+ });
136
+ build.onLoad({ filter: /\.[cm]?[jt]sx?$/ }, async (args) => {
137
+ const absolutePath = path.resolve(args.path);
138
+ const shouldPreserveImportMeta = importMetaRewritePaths.has(absolutePath);
139
+ const shouldRewriteReexports = shouldRewriteBootstrapSource(absolutePath, projectDir);
140
+ if (!shouldPreserveImportMeta && !shouldRewriteReexports) {
141
+ return void 0;
142
+ }
143
+ const originalContents = readFileSync(args.path, "utf8");
144
+ let contents = originalContents;
145
+ if (shouldPreserveImportMeta) {
146
+ contents = contents.replaceAll("import.meta.dirname", JSON.stringify(path.dirname(args.path))).replaceAll("import.meta.filename", JSON.stringify(args.path));
147
+ }
148
+ if (shouldRewriteReexports) {
149
+ contents = injectBootstrapReexportImports(contents);
150
+ }
151
+ if (contents === originalContents) {
152
+ return void 0;
153
+ }
154
+ return {
155
+ contents,
156
+ loader: getBootstrapBuildLoaderForPath(args.path),
157
+ resolveDir: path.dirname(args.path)
158
+ };
159
+ });
160
+ build.onResolve({ filter: /^[@A-Za-z0-9][^:]*$/ }, (args) => {
161
+ return resolveNodeBootstrapDependency(args, options);
162
+ });
163
+ }
164
+ };
165
+ }
166
+ function createAppNodeBootstrapPlugin(appConfig, options) {
167
+ return createNodeBootstrapPlugin({
168
+ projectDir: appConfig.rootDir,
169
+ runtimeNodeModulesDir: getAppRuntimeNodeModulesDir(appConfig),
170
+ preserveImportMetaPaths: options?.preserveImportMetaPaths
171
+ });
172
+ }
173
+ export {
174
+ createAppNodeBootstrapPlugin,
175
+ createNodeBootstrapPlugin,
176
+ getAppRuntimeNodeModulesDir,
177
+ getNodeUnsupportedBuiltinError,
178
+ resolveNodeBootstrapDependency
179
+ };
@@ -0,0 +1,75 @@
1
+ import { build, type BuildExecutor, type BuildResult } from '../../build/build-adapter.js';
2
+ import type { EcoBuildPlugin } from '../../build/build-types.js';
3
+ import type { SourceModuleLoaderFactory } from './module-loading-types.js';
4
+ export interface PageModuleImportOptions {
5
+ filePath: string;
6
+ rootDir: string;
7
+ outdir: string;
8
+ bypassCache?: boolean;
9
+ buildExecutor?: BuildExecutor;
10
+ invalidationVersion?: number;
11
+ splitting?: boolean;
12
+ externalPackages?: boolean;
13
+ plugins?: EcoBuildPlugin[];
14
+ transpileErrorMessage?: (details: string) => string;
15
+ noOutputMessage?: (filePath: string) => string;
16
+ }
17
+ /**
18
+ * Minimal runtime dependencies required to load page modules.
19
+ *
20
+ * @remarks
21
+ * This service owns cache and runtime import policy. Hashing and build
22
+ * execution are injected so tests can provide explicit fakes without module
23
+ * interception.
24
+ */
25
+ export interface PageModuleImportDependencies {
26
+ hashFile(filePath: string): string;
27
+ buildModule(options: Parameters<typeof build>[0], buildExecutor?: BuildExecutor): Promise<BuildResult>;
28
+ canLoadSourceModuleFromHost(filePath: string): boolean;
29
+ getHostModuleLoader: SourceModuleLoaderFactory;
30
+ }
31
+ /**
32
+ * Loads source page modules in a runtime-agnostic way.
33
+ *
34
+ * This service centralizes the Bun-vs-Node import strategy used by route
35
+ * scanning, page data loading, and request-time page inspection. In Bun it can
36
+ * import source files directly; in Node it transpiles the file into a dedicated
37
+ * output directory first and then imports the generated module.
38
+ *
39
+ * Keeping this logic in one place prevents subtle drift in cache-busting,
40
+ * transpilation settings, and error semantics across the different callers.
41
+ */
42
+ export declare class PageModuleImportService {
43
+ private readonly dependencies;
44
+ private readonly importCache;
45
+ private developmentInvalidationVersion;
46
+ constructor(dependencies?: Partial<PageModuleImportDependencies>);
47
+ /**
48
+ * Clears the shared import cache used by framework-owned page-module loads.
49
+ */
50
+ clearImportCache(): void;
51
+ /**
52
+ * Invalidates all previously imported modules in development by clearing the
53
+ * import cache and incrementing the invalidation version included in cache keys.
54
+ *
55
+ * This forces all modules to be reloaded on the next import, even if their
56
+ * source content hasn't changed. This is necessary to ensure that changes to
57
+ * non-content aspects of modules (e.g. dependencies, transpilation output)
58
+ * are picked up during development.
59
+ */
60
+ invalidateDevelopmentGraph(): void;
61
+ /**
62
+ * Imports a page-like module from source.
63
+ *
64
+ * The caller controls the output directory and error wording so different
65
+ * subsystems can reuse the same loading mechanism while preserving their
66
+ * current diagnostics. Module identities stay stable for unchanged files and
67
+ * roll forward automatically when the source hash changes during watch mode.
68
+ *
69
+ * @typeParam T Expected module shape.
70
+ * @param options Runtime-specific import settings.
71
+ * @returns The loaded module.
72
+ */
73
+ importModule<T = unknown>(options: PageModuleImportOptions): Promise<T>;
74
+ private loadModule;
75
+ }
@@ -0,0 +1,161 @@
1
+ import path from "node:path";
2
+ import { pathToFileURL } from "node:url";
3
+ import { fileSystem } from "@ecopages/file-system";
4
+ import { build } from "../../build/build-adapter.js";
5
+ class PageModuleImportService {
6
+ dependencies;
7
+ importCache = /* @__PURE__ */ new Map();
8
+ developmentInvalidationVersion = 0;
9
+ constructor(dependencies) {
10
+ this.dependencies = {
11
+ hashFile: dependencies?.hashFile ?? ((filePath) => fileSystem.hash(filePath)),
12
+ buildModule: dependencies?.buildModule ?? ((options, buildExecutor) => build(options, buildExecutor)),
13
+ canLoadSourceModuleFromHost: dependencies?.canLoadSourceModuleFromHost ?? supportsHostSourceModuleLoading,
14
+ getHostModuleLoader: dependencies?.getHostModuleLoader ?? (() => void 0)
15
+ };
16
+ }
17
+ /**
18
+ * Clears the shared import cache used by framework-owned page-module loads.
19
+ */
20
+ clearImportCache() {
21
+ this.importCache.clear();
22
+ }
23
+ /**
24
+ * Invalidates all previously imported modules in development by clearing the
25
+ * import cache and incrementing the invalidation version included in cache keys.
26
+ *
27
+ * This forces all modules to be reloaded on the next import, even if their
28
+ * source content hasn't changed. This is necessary to ensure that changes to
29
+ * non-content aspects of modules (e.g. dependencies, transpilation output)
30
+ * are picked up during development.
31
+ */
32
+ invalidateDevelopmentGraph() {
33
+ this.clearImportCache();
34
+ this.developmentInvalidationVersion += 1;
35
+ }
36
+ /**
37
+ * Imports a page-like module from source.
38
+ *
39
+ * The caller controls the output directory and error wording so different
40
+ * subsystems can reuse the same loading mechanism while preserving their
41
+ * current diagnostics. Module identities stay stable for unchanged files and
42
+ * roll forward automatically when the source hash changes during watch mode.
43
+ *
44
+ * @typeParam T Expected module shape.
45
+ * @param options Runtime-specific import settings.
46
+ * @returns The loaded module.
47
+ */
48
+ async importModule(options) {
49
+ const { filePath, rootDir, externalPackages, splitting } = options;
50
+ const invalidationVersion = options.invalidationVersion ?? this.developmentInvalidationVersion;
51
+ const fileHash = this.dependencies.hashFile(filePath);
52
+ const hostModuleLoader = typeof Bun === "undefined" && process.env.NODE_ENV === "development" && this.dependencies.canLoadSourceModuleFromHost(filePath) ? this.dependencies.getHostModuleLoader() : void 0;
53
+ if (hostModuleLoader) {
54
+ const sourceModuleUrl = createRuntimeModuleUrl(filePath, fileHash, invalidationVersion);
55
+ return await hostModuleLoader(sourceModuleUrl.href);
56
+ }
57
+ if (options.bypassCache) {
58
+ this.developmentInvalidationVersion += 1;
59
+ return await this.loadModule({
60
+ ...options,
61
+ invalidationVersion: this.developmentInvalidationVersion,
62
+ fileHash
63
+ });
64
+ }
65
+ const runtime = typeof Bun !== "undefined" ? "bun" : "node-build";
66
+ const cacheKey = [
67
+ runtime,
68
+ filePath,
69
+ rootDir,
70
+ splitting ?? "default",
71
+ externalPackages ?? "default",
72
+ fileHash,
73
+ invalidationVersion
74
+ ].join("::");
75
+ const cachedModule = this.importCache.get(cacheKey);
76
+ if (cachedModule) {
77
+ return await cachedModule;
78
+ }
79
+ const importPromise = this.loadModule({
80
+ ...options,
81
+ fileHash
82
+ });
83
+ this.importCache.set(cacheKey, importPromise);
84
+ try {
85
+ return await importPromise;
86
+ } catch (error) {
87
+ this.importCache.delete(cacheKey);
88
+ throw error;
89
+ }
90
+ }
91
+ async loadModule(options) {
92
+ const {
93
+ filePath,
94
+ rootDir,
95
+ outdir,
96
+ invalidationVersion = this.developmentInvalidationVersion,
97
+ splitting,
98
+ externalPackages,
99
+ transpileErrorMessage = (details) => `Error transpiling page module: ${details}`,
100
+ noOutputMessage = (targetFilePath) => `No transpiled output generated for page module: ${targetFilePath}`,
101
+ fileHash
102
+ } = options;
103
+ const sourceModuleUrl = createRuntimeModuleUrl(filePath, fileHash, invalidationVersion);
104
+ if (typeof Bun !== "undefined") {
105
+ return await import(
106
+ /* @vite-ignore */
107
+ sourceModuleUrl.href
108
+ );
109
+ }
110
+ const fileBaseName = path.basename(filePath, path.extname(filePath));
111
+ const outputFileName = `${fileBaseName}-${fileHash}.js`;
112
+ const buildResult = await this.dependencies.buildModule(
113
+ {
114
+ entrypoints: [filePath],
115
+ root: rootDir,
116
+ outdir,
117
+ target: "node",
118
+ format: "esm",
119
+ sourcemap: "none",
120
+ splitting: splitting ?? true,
121
+ minify: false,
122
+ naming: outputFileName,
123
+ externalPackages: true,
124
+ plugins: options.plugins,
125
+ ...externalPackages !== void 0 ? { externalPackages } : {}
126
+ },
127
+ options.buildExecutor
128
+ );
129
+ if (!buildResult.success) {
130
+ const details = buildResult.logs.map((log) => log.message).join(" | ");
131
+ throw new Error(transpileErrorMessage(details));
132
+ }
133
+ const preferredOutputPath = path.join(outdir, outputFileName);
134
+ const compiledOutput = buildResult.outputs.find((output) => output.path === preferredOutputPath)?.path ?? buildResult.outputs.find((output) => output.path.endsWith(".js"))?.path;
135
+ if (!compiledOutput) {
136
+ throw new Error(noOutputMessage(filePath));
137
+ }
138
+ const compiledOutputUrl = pathToFileURL(compiledOutput);
139
+ if (process.env.NODE_ENV === "development") {
140
+ compiledOutputUrl.searchParams.set("update", `${fileHash}-${invalidationVersion}`);
141
+ }
142
+ return await import(
143
+ /* @vite-ignore */
144
+ compiledOutputUrl.href
145
+ );
146
+ }
147
+ }
148
+ function createRuntimeModuleUrl(filePath, fileHash, invalidationVersion) {
149
+ const moduleUrl = pathToFileURL(filePath);
150
+ if (process.env.NODE_ENV === "development") {
151
+ moduleUrl.searchParams.set("update", `${fileHash}-${invalidationVersion}`);
152
+ }
153
+ return moduleUrl;
154
+ }
155
+ function supportsHostSourceModuleLoading(filePath) {
156
+ const extension = path.extname(filePath);
157
+ return extension === ".js" || extension === ".jsx" || extension === ".ts" || extension === ".tsx" || extension === ".mjs" || extension === ".mts" || extension === ".cjs" || extension === ".cts";
158
+ }
159
+ export {
160
+ PageModuleImportService
161
+ };
@@ -0,0 +1,72 @@
1
+ import type { BuildExecutor } from '../../build/build-adapter.js';
2
+ import type { EcoBuildPlugin } from '../../build/build-types.js';
3
+ import { type PageModuleImportOptions } from './page-module-import.service.js';
4
+ import type { SourceModuleLoaderFactory } from './module-loading-types.js';
5
+ export type ServerModuleTranspilerOptions = Omit<PageModuleImportOptions, 'rootDir' | 'buildExecutor'>;
6
+ /**
7
+ * Minimal import-service dependency required by the server module transpiler.
8
+ *
9
+ * @remarks
10
+ * This keeps the transpiler boundary testable without module-level mocking and
11
+ * lets callers provide an app-owned import implementation when needed.
12
+ */
13
+ export interface ServerModuleImportDependency {
14
+ importModule<T = unknown>(options: PageModuleImportOptions): Promise<T>;
15
+ invalidateDevelopmentGraph(): void;
16
+ }
17
+ /**
18
+ * Immutable execution context for one server-transpiler instance.
19
+ *
20
+ * @remarks
21
+ * Callers own when and why a new transpiler is created. This service only owns
22
+ * applying the supplied root/build-executor pair consistently to every module
23
+ * load that passes through it.
24
+ */
25
+ export type ServerModuleTranspilerBootstrapArgs = {
26
+ rootDir: string;
27
+ getBuildExecutor: () => BuildExecutor | undefined;
28
+ canLoadSourceModuleFromHost?: (filePath: string) => boolean;
29
+ getHostModuleLoader?: SourceModuleLoaderFactory;
30
+ getInvalidationVersion?: () => number;
31
+ invalidateModules?: (changedFiles?: string[]) => void;
32
+ pageModuleImportService?: ServerModuleImportDependency;
33
+ /** Factory evaluated on each importModule call to produce plugins applied to every load. */
34
+ getDefaultPlugins?: () => EcoBuildPlugin[];
35
+ };
36
+ /**
37
+ * App-owned boundary for server-side source module loading.
38
+ *
39
+ * @remarks
40
+ * This service centralizes server-side module transpilation and import behind
41
+ * an explicit caller-owned root and build executor.
42
+ */
43
+ export declare class ServerModuleTranspiler {
44
+ private readonly pageModuleImportService;
45
+ private readonly getRootDir;
46
+ private readonly getBuildExecutor;
47
+ private readonly getInvalidationVersion;
48
+ private readonly invalidateModules;
49
+ private readonly getDefaultPlugins;
50
+ /**
51
+ * Creates one explicit server-transpiler boundary for a given execution
52
+ * context.
53
+ */
54
+ constructor(args: ServerModuleTranspilerBootstrapArgs);
55
+ /**
56
+ * Loads a server-side source module through the caller-owned transpile
57
+ * context.
58
+ */
59
+ importModule<T = unknown>(options: ServerModuleTranspilerOptions): Promise<T>;
60
+ /**
61
+ * Invalidates cached module state for development reloads.
62
+ */
63
+ invalidate(changedFiles?: string[]): void;
64
+ /**
65
+ * Releases transpiler-owned resources.
66
+ *
67
+ * @remarks
68
+ * The current implementation delegates cache ownership to lower-level module
69
+ * loading services, so disposal is intentionally a no-op for now.
70
+ */
71
+ dispose(): Promise<void>;
72
+ }
@@ -0,0 +1,64 @@
1
+ import { PageModuleImportService } from "./page-module-import.service.js";
2
+ class ServerModuleTranspiler {
3
+ pageModuleImportService;
4
+ getRootDir;
5
+ getBuildExecutor;
6
+ getInvalidationVersion;
7
+ invalidateModules;
8
+ getDefaultPlugins;
9
+ /**
10
+ * Creates one explicit server-transpiler boundary for a given execution
11
+ * context.
12
+ */
13
+ constructor(args) {
14
+ this.pageModuleImportService = args.pageModuleImportService ?? new PageModuleImportService({
15
+ canLoadSourceModuleFromHost: args.canLoadSourceModuleFromHost,
16
+ getHostModuleLoader: args.getHostModuleLoader
17
+ });
18
+ this.getRootDir = () => args.rootDir;
19
+ this.getBuildExecutor = args.getBuildExecutor;
20
+ this.getInvalidationVersion = () => args.getInvalidationVersion?.();
21
+ this.getDefaultPlugins = args.getDefaultPlugins ?? (() => []);
22
+ this.invalidateModules = (changedFiles) => {
23
+ if (args.invalidateModules) {
24
+ args.invalidateModules(changedFiles);
25
+ return;
26
+ }
27
+ this.pageModuleImportService.invalidateDevelopmentGraph();
28
+ };
29
+ }
30
+ /**
31
+ * Loads a server-side source module through the caller-owned transpile
32
+ * context.
33
+ */
34
+ async importModule(options) {
35
+ const mergedPlugins = [...this.getDefaultPlugins(), ...options.plugins ?? []];
36
+ const { plugins: _plugins, ...baseOptions } = options;
37
+ return await this.pageModuleImportService.importModule({
38
+ ...baseOptions,
39
+ ...mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {},
40
+ rootDir: this.getRootDir(),
41
+ buildExecutor: this.getBuildExecutor(),
42
+ invalidationVersion: this.getInvalidationVersion()
43
+ });
44
+ }
45
+ /**
46
+ * Invalidates cached module state for development reloads.
47
+ */
48
+ invalidate(changedFiles) {
49
+ this.invalidateModules(changedFiles);
50
+ }
51
+ /**
52
+ * Releases transpiler-owned resources.
53
+ *
54
+ * @remarks
55
+ * The current implementation delegates cache ownership to lower-level module
56
+ * loading services, so disposal is intentionally a no-op for now.
57
+ */
58
+ async dispose() {
59
+ return;
60
+ }
61
+ }
62
+ export {
63
+ ServerModuleTranspiler
64
+ };