@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.32

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 (338) hide show
  1. package/README.md +1 -0
  2. package/package.json +82 -3
  3. package/src/adapters/abstract/application-adapter.d.ts +0 -8
  4. package/src/adapters/abstract/application-adapter.js +252 -261
  5. package/src/adapters/abstract/router-adapter.js +12 -4
  6. package/src/adapters/abstract/segment-path-matcher.js +132 -134
  7. package/src/adapters/abstract/server-adapter.js +22 -14
  8. package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
  9. package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
  10. package/src/adapters/bun/client-bridge.js +51 -50
  11. package/src/adapters/bun/create-app.js +171 -161
  12. package/src/adapters/bun/hmr-manager.js +62 -57
  13. package/src/adapters/bun/index.js +2 -31
  14. package/src/adapters/bun/runtime-host.js +61 -54
  15. package/src/adapters/bun/server-adapter.d.ts +0 -1
  16. package/src/adapters/bun/server-adapter.js +561 -561
  17. package/src/adapters/bun/static-preview-host.js +43 -46
  18. package/src/adapters/create-app.js +11 -14
  19. package/src/adapters/index.js +2 -30
  20. package/src/adapters/node/create-app.js +123 -129
  21. package/src/adapters/node/http-request-bridge.js +147 -106
  22. package/src/adapters/node/node-client-bridge.js +62 -64
  23. package/src/adapters/node/node-hmr-manager.js +58 -48
  24. package/src/adapters/node/runtime-host.js +96 -89
  25. package/src/adapters/node/server-adapter-dependencies.js +18 -21
  26. package/src/adapters/node/server-adapter.d.ts +0 -1
  27. package/src/adapters/node/server-adapter.js +347 -326
  28. package/src/adapters/node/static-content-server.js +172 -191
  29. package/src/adapters/node/static-preview-host.js +87 -78
  30. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  31. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  32. package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
  33. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
  34. package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
  35. package/src/adapters/shared/http/api-request-pipeline.js +122 -119
  36. package/src/adapters/shared/http/api-response.js +77 -77
  37. package/src/adapters/shared/http/create-body-response.js +22 -19
  38. package/src/adapters/shared/http/define-api-handler.js +41 -55
  39. package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
  40. package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
  41. package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
  42. package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
  43. package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
  44. package/src/adapters/shared/http/run-middleware-chain.js +15 -15
  45. package/src/adapters/shared/runtime/application-adapter.js +72 -87
  46. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
  47. package/src/adapters/shared/runtime/port-manager.js +207 -177
  48. package/src/adapters/shared/runtime/render-context.js +94 -79
  49. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
  50. package/src/adapters/shared/runtime/runtime-host.js +1 -0
  51. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
  52. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
  53. package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
  54. package/src/adapters/shared/runtime/server-adapter.js +233 -217
  55. package/src/adapters/shared/runtime/server-route-handler.js +74 -70
  56. package/src/adapters/shared/runtime/server-static-builder.js +165 -184
  57. package/src/adapters/shared/runtime/static-preview-host.js +1 -0
  58. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
  59. package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
  60. package/src/build/README.md +52 -1
  61. package/src/build/app-build-manifest-runtime.js +129 -108
  62. package/src/build/browser/browser-runtime-manifest.js +47 -50
  63. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
  64. package/src/build/browser/browser-runtime-plugin.js +206 -160
  65. package/src/build/browser/jsx-ownership-plugins.js +51 -37
  66. package/src/build/browser/lit-static-render-worker-context.js +3 -5
  67. package/src/build/build-adapter.js +276 -139
  68. package/src/build/cache/build-input-fingerprint.js +28 -26
  69. package/src/build/cache/cache-constants.js +4 -6
  70. package/src/build/cache/cache-keys.js +64 -56
  71. package/src/build/cache/pages-unified-graph-build.js +179 -178
  72. package/src/build/cache/production-build-cache.js +47 -54
  73. package/src/build/cache/server-entry-build-cache.js +134 -146
  74. package/src/build/contracts/build-contracts.d.ts +4 -4
  75. package/src/build/contracts/build-contracts.js +1 -0
  76. package/src/build/contracts/build-manifest.js +58 -43
  77. package/src/build/contracts/build-types.js +1 -0
  78. package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
  79. package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
  80. package/src/build/rolldown/rolldown-build-adapter.js +53 -61
  81. package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
  82. package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
  83. package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
  84. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
  85. package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
  86. package/src/build/runtime/build-profile-options.js +36 -36
  87. package/src/build/runtime/build-request-identity.js +70 -45
  88. package/src/build/runtime/build-request-policy.js +80 -42
  89. package/src/build/runtime/build-runtime.js +64 -54
  90. package/src/build/runtime/deduping-build-executor.js +38 -32
  91. package/src/build/runtime/parallel-build-executor.js +58 -50
  92. package/src/build/runtime/serialized-build-executor.js +78 -62
  93. package/src/cache/index.js +6 -6
  94. package/src/cache/module-parse-cache.js +99 -68
  95. package/src/client/navigation-scripts/classification.js +45 -37
  96. package/src/client/navigation-scripts/index.js +3 -23
  97. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
  98. package/src/client/navigation-scripts/registry.js +15 -11
  99. package/src/client/navigation-scripts/rerun-queue.js +81 -64
  100. package/src/client/scroll.js +32 -24
  101. package/src/client/scroll.test.browser.js +27 -33
  102. package/src/client/view-transitions.js +68 -55
  103. package/src/config/config-builder.d.ts +8 -0
  104. package/src/config/config-builder.js +637 -642
  105. package/src/config/constants.js +44 -24
  106. package/src/declarations.d.ts +1 -0
  107. package/src/dev/README.md +24 -0
  108. package/src/dev/client-bridge-registry.js +7 -12
  109. package/src/dev/dev-client-ownership.js +7 -5
  110. package/src/dev/hmr-manager-registry.js +7 -12
  111. package/src/dev/host-runtime.js +25 -30
  112. package/src/dev/runtime-server-started-message.js +2 -5
  113. package/src/dev/sc-server.js +106 -103
  114. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  115. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  116. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  117. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  118. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  119. package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
  120. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  121. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  122. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  123. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  124. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  125. package/src/dev/transform-server/dev-transform-server.js +191 -0
  126. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  127. package/src/dev/transform-server/dev-transform-url.js +58 -0
  128. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
  129. package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
  130. package/src/dev/transform-server/index.d.ts +6 -0
  131. package/src/dev/transform-server/index.js +4 -0
  132. package/src/dev/transform-server/types.d.ts +15 -0
  133. package/src/dev/transform-server/types.js +1 -0
  134. package/src/dev-toolbar/README.md +51 -0
  135. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  136. package/src/dev-toolbar/define-dev-tool.js +9 -0
  137. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  138. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  139. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  140. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  141. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  142. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  143. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  144. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  145. package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
  146. package/src/dev-toolbar/dev-toolbar-package.js +72 -0
  147. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  148. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  149. package/src/diagnostics/request-build-dedupe.js +34 -28
  150. package/src/diagnostics/startup-trace.d.ts +10 -1
  151. package/src/diagnostics/startup-trace.js +269 -241
  152. package/src/eco/README.md +6 -0
  153. package/src/eco/eco-declared-component.js +19 -14
  154. package/src/eco/eco.browser.js +56 -69
  155. package/src/eco/eco.js +156 -96
  156. package/src/eco/eco.types.js +5 -0
  157. package/src/eco/eco.utils.js +1 -10
  158. package/src/eco/global-injector-map.js +55 -41
  159. package/src/eco/lazy-injector-map.js +90 -60
  160. package/src/eco/module-dependencies.js +52 -44
  161. package/src/eco/page-layout-normalization.js +59 -49
  162. package/src/errors/http-error.js +50 -49
  163. package/src/errors/index.js +3 -12
  164. package/src/errors/locals-access-error.js +5 -8
  165. package/src/errors/undeclared-component-dependency-error.js +15 -15
  166. package/src/global/app-logger.js +3 -6
  167. package/src/hmr/README.md +10 -0
  168. package/src/hmr/client/hmr-runtime.js +117 -113
  169. package/src/hmr/client/module-update.d.ts +13 -0
  170. package/src/hmr/client/module-update.js +39 -0
  171. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  172. package/src/hmr/hmr-asset-paths.js +22 -0
  173. package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
  174. package/src/hmr/hmr-entrypoint-output.js +28 -54
  175. package/src/hmr/hmr-file-change-prep.js +13 -16
  176. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  177. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  178. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  179. package/src/hmr/hmr-runtime-paths.js +13 -0
  180. package/src/hmr/hmr-strategy.d.ts +5 -11
  181. package/src/hmr/hmr-strategy.js +113 -61
  182. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  183. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
  184. package/src/hmr/strategies/js-hmr-strategy.js +104 -217
  185. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
  186. package/src/index.browser.js +1 -4
  187. package/src/index.d.ts +1 -0
  188. package/src/index.js +6 -47
  189. package/src/integrations/ghtml/ghtml-renderer.js +12 -7
  190. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  191. package/src/integrations/ghtml/ghtml.plugin.js +9 -12
  192. package/src/islands/README.md +25 -0
  193. package/src/islands/island-host.d.ts +37 -0
  194. package/src/islands/island-host.js +55 -0
  195. package/src/plugins/alias-resolver-cache.js +114 -97
  196. package/src/plugins/alias-resolver-plugin.js +33 -47
  197. package/src/plugins/define-integration.js +18 -17
  198. package/src/plugins/eco-component-meta-plugin.js +387 -145
  199. package/src/plugins/foreign-jsx-override-plugin.js +49 -35
  200. package/src/plugins/integration-plugin.js +212 -203
  201. package/src/plugins/jsx-import-source.utils.js +16 -21
  202. package/src/plugins/processor.js +159 -149
  203. package/src/plugins/runtime-capability.js +1 -0
  204. package/src/plugins/source-transform.js +109 -79
  205. package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
  206. package/src/plugins/tsconfig-import-resolver.js +218 -142
  207. package/src/route-renderer/README.md +12 -1
  208. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
  209. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
  210. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
  211. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
  212. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
  213. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
  214. package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
  215. package/src/route-renderer/orchestration/integration-renderer.js +731 -750
  216. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
  217. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
  218. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
  219. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
  220. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
  221. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
  222. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
  223. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
  224. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
  225. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
  226. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
  227. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
  228. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
  229. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
  230. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
  231. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
  232. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
  233. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
  234. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
  235. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
  236. package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
  237. package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
  238. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  239. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  240. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
  241. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  242. package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
  243. package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
  244. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  245. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  246. package/src/route-renderer/page-loading/page-module-loader.js +130 -124
  247. package/src/route-renderer/route-renderer.js +74 -76
  248. package/src/router/client/link-intent.js +55 -39
  249. package/src/router/client/link-intent.test.browser.js +49 -49
  250. package/src/router/client/link-navigation-policy.js +114 -93
  251. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  252. package/src/router/client/navigation-coordinator.js +235 -211
  253. package/src/router/server/route-registry.js +237 -242
  254. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  255. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  256. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  257. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  258. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  259. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  260. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  261. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  262. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  263. package/src/services/assets/asset-processing-service/index.js +8 -8
  264. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  265. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  266. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  267. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  268. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  269. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  270. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  271. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  272. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  273. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  274. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  275. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  276. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  277. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  278. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  279. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  280. package/src/services/assets/browser-bundle.service.js +52 -47
  281. package/src/services/cache/cache.types.js +5 -0
  282. package/src/services/cache/index.js +6 -7
  283. package/src/services/cache/memory-cache-store.js +101 -89
  284. package/src/services/cache/page-cache-service.js +156 -145
  285. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  286. package/src/services/html/html-rewriter-provider.service.js +61 -61
  287. package/src/services/html/html-transformer.service.js +249 -266
  288. package/src/services/invalidation/development-invalidation.service.js +252 -241
  289. package/src/services/module-loading/app-module-loader.service.js +1 -0
  290. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  291. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  292. package/src/services/module-loading/module-loading-types.js +1 -0
  293. package/src/services/module-loading/page-module-import.service.js +235 -243
  294. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  295. package/src/services/module-loading/route-module-build-cache.js +3 -38
  296. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  297. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  298. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  299. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  300. package/src/services/module-loading/source-module-support.js +15 -7
  301. package/src/services/runtime-state/dev-graph.service.js +165 -157
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  303. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  304. package/src/services/validation/schema-validation-service.js +157 -95
  305. package/src/services/validation/standard-schema.types.js +1 -0
  306. package/src/services/validation/validate-standard-schema.js +13 -13
  307. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  308. package/src/static-site-generator/sitemap-routes.js +33 -28
  309. package/src/static-site-generator/sitemap.js +38 -29
  310. package/src/static-site-generator/static-build-invalidation.js +34 -56
  311. package/src/static-site-generator/static-export-context.js +1 -0
  312. package/src/static-site-generator/static-site-generator.js +517 -553
  313. package/src/types/internal-types.d.ts +19 -3
  314. package/src/types/internal-types.js +1 -0
  315. package/src/types/public-types.d.ts +16 -46
  316. package/src/types/public-types.js +1 -0
  317. package/src/utils/deep-merge.js +39 -26
  318. package/src/utils/ecopages-route-info.js +27 -23
  319. package/src/utils/hash.js +3 -6
  320. package/src/utils/html-escaping.js +21 -8
  321. package/src/utils/html.js +1 -4
  322. package/src/utils/invariant.js +11 -10
  323. package/src/utils/locals-utils.js +32 -22
  324. package/src/utils/parse-cli-args.js +73 -65
  325. package/src/utils/path-pattern.js +38 -23
  326. package/src/utils/path-utils.module.js +8 -11
  327. package/src/utils/resolve-entry-file.js +70 -38
  328. package/src/utils/resolve-work-dir.js +23 -27
  329. package/src/utils/runtime.js +24 -33
  330. package/src/utils/server-utils.module.js +60 -52
  331. package/src/utils/static-file-extensions.js +52 -46
  332. package/src/watchers/project-watcher-ignore.js +16 -15
  333. package/src/watchers/project-watcher.js +385 -366
  334. package/src/watchers/project-watcher.test-helpers.js +45 -50
  335. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  336. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  337. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  338. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,201 +1,253 @@
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
- import { isBarePackageImportSpecifier } from "../../plugins/tsconfig-import-resolver.js";
6
- const corePackageRequire = createRequire(new URL("../../../package.json", import.meta.url));
7
- const appDeclaredPackageCache = /* @__PURE__ */ new Map();
8
- const appWorkspacePackageCache = /* @__PURE__ */ new Map();
9
- const CORE_RUNTIME_BARE_SPECIFIER_PACKAGES = /* @__PURE__ */ new Set(["ws"]);
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
+ import { isBarePackageImportSpecifier } from '../../plugins/tsconfig-import-resolver.js';
6
+ const corePackageRequire = createRequire(new URL('../../../package.json', import.meta.url));
7
+ const appDeclaredPackageCache = new Map();
8
+ const appWorkspacePackageCache = new Map();
9
+ /**
10
+ * Core-owned packages that are part of the Node adapter's runtime surface and
11
+ * should therefore be preserved as bare specifiers in bundled output.
12
+ *
13
+ * Only list packages whose bare-specifier form will be resolvable from the
14
+ * app's Node.js runtime (i.e. they ship alongside the framework and do not
15
+ * need to be in the app's own package.json).
16
+ *
17
+ * Build-time tools (e.g. oxc-parser, rolldown) deliberately omitted — their
18
+ * imports in server-side output must be rewritten to absolute file: URLs so
19
+ * the bundler does not embed them in app code.
20
+ */
21
+ const CORE_RUNTIME_BARE_SPECIFIER_PACKAGES = new Set(['ws']);
10
22
  function tryResolveRuntimeImport(specifier, resolver) {
11
- try {
12
- return resolver.resolve(specifier);
13
- } catch {
14
- return void 0;
15
- }
23
+ try {
24
+ return resolver.resolve(specifier);
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
16
29
  }
30
+ /**
31
+ * Extracts the package name from a file:// URL pointing to a node_modules path.
32
+ *
33
+ * @remarks
34
+ * Given a URL like `file:///path/to/node_modules/@scope/pkg/dist/index.js`,
35
+ * returns `@scope/pkg`. Given `file:///path/to/node_modules/pkg/dist/index.js`,
36
+ * returns `pkg`. Returns `undefined` if the URL doesn't point to node_modules.
37
+ *
38
+ * Handles pnpm's nested node_modules structure by finding the LAST node_modules
39
+ * in the path (e.g., `node_modules/.pnpm/pkg@version/node_modules/@scope/pkg/...`).
40
+ */
17
41
  function extractPackageNameFromFileUrl(specifier) {
18
- if (!specifier.startsWith("file://")) {
19
- return void 0;
20
- }
21
- const lastNodeModulesIndex = specifier.lastIndexOf("/node_modules/");
22
- if (lastNodeModulesIndex === -1) {
23
- return void 0;
24
- }
25
- const afterNodeModules = specifier.slice(lastNodeModulesIndex + "/node_modules/".length);
26
- const parts = afterNodeModules.split("/");
27
- if (parts.length === 0) {
28
- return void 0;
29
- }
30
- if (parts[0]?.startsWith("@") && parts.length > 1) {
31
- return `${parts[0]}/${parts[1]}`;
32
- }
33
- return parts[0];
42
+ if (!specifier.startsWith('file://')) {
43
+ return undefined;
44
+ }
45
+ // Find the LAST node_modules in the path to handle pnpm's nested structure
46
+ const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
47
+ if (lastNodeModulesIndex === -1) {
48
+ return undefined;
49
+ }
50
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
51
+ const parts = afterNodeModules.split('/');
52
+ if (parts.length === 0) {
53
+ return undefined;
54
+ }
55
+ if (parts[0]?.startsWith('@') && parts.length > 1) {
56
+ return `${parts[0]}/${parts[1]}`;
57
+ }
58
+ return parts[0];
34
59
  }
35
60
  function getPackageNameFromSpecifier(specifier) {
36
- if (specifier.startsWith("@")) {
37
- return specifier.split("/").slice(0, 2).join("/");
38
- }
39
- return specifier.split("/")[0] ?? specifier;
61
+ if (specifier.startsWith('@')) {
62
+ return specifier.split('/').slice(0, 2).join('/');
63
+ }
64
+ return specifier.split('/')[0] ?? specifier;
40
65
  }
41
66
  function getDeclaredAppPackages(rootDir) {
42
- const cacheKey = path.resolve(rootDir);
43
- const cached = appDeclaredPackageCache.get(cacheKey);
44
- if (cached) {
45
- return cached;
46
- }
47
- const packageJsonPath = path.resolve(rootDir, "package.json");
48
- const declaredPackages = /* @__PURE__ */ new Set();
49
- try {
50
- const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
51
- for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
52
- const entries = packageJson[field];
53
- if (!entries || typeof entries !== "object") {
54
- continue;
55
- }
56
- for (const packageName of Object.keys(entries)) {
57
- declaredPackages.add(packageName);
58
- }
59
- }
60
- } catch {
67
+ const cacheKey = path.resolve(rootDir);
68
+ const cached = appDeclaredPackageCache.get(cacheKey);
69
+ if (cached) {
70
+ return cached;
71
+ }
72
+ const packageJsonPath = path.resolve(rootDir, 'package.json');
73
+ const declaredPackages = new Set();
74
+ try {
75
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
76
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
77
+ const entries = packageJson[field];
78
+ if (!entries || typeof entries !== 'object') {
79
+ continue;
80
+ }
81
+ for (const packageName of Object.keys(entries)) {
82
+ declaredPackages.add(packageName);
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
88
+ return declaredPackages;
89
+ }
61
90
  appDeclaredPackageCache.set(cacheKey, declaredPackages);
62
91
  return declaredPackages;
63
- }
64
- appDeclaredPackageCache.set(cacheKey, declaredPackages);
65
- return declaredPackages;
66
92
  }
93
+ /**
94
+ * Returns the set of workspace packages declared in the app's package.json.
95
+ *
96
+ * Workspace packages are identified by the `workspace:` protocol in their
97
+ * version specifier (e.g., `"workspace:*"`, `"workspace:^1.0.0"`). These
98
+ * packages are typically source-only and must be bundled rather than
99
+ * externalized.
100
+ */
67
101
  function getWorkspacePackages(rootDir) {
68
- const cacheKey = path.resolve(rootDir);
69
- const cached = appWorkspacePackageCache.get(cacheKey);
70
- if (cached) {
71
- return cached;
72
- }
73
- const packageJsonPath = path.resolve(rootDir, "package.json");
74
- const workspacePackages = /* @__PURE__ */ new Set();
75
- try {
76
- const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
77
- for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
78
- const entries = packageJson[field];
79
- if (!entries || typeof entries !== "object") {
80
- continue;
81
- }
82
- for (const [packageName, version] of Object.entries(entries)) {
83
- if (typeof version === "string" && version.startsWith("workspace:")) {
84
- workspacePackages.add(packageName);
102
+ const cacheKey = path.resolve(rootDir);
103
+ const cached = appWorkspacePackageCache.get(cacheKey);
104
+ if (cached) {
105
+ return cached;
106
+ }
107
+ const packageJsonPath = path.resolve(rootDir, 'package.json');
108
+ const workspacePackages = new Set();
109
+ try {
110
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
111
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
112
+ const entries = packageJson[field];
113
+ if (!entries || typeof entries !== 'object') {
114
+ continue;
115
+ }
116
+ for (const [packageName, version] of Object.entries(entries)) {
117
+ if (typeof version === 'string' && version.startsWith('workspace:')) {
118
+ workspacePackages.add(packageName);
119
+ }
120
+ }
85
121
  }
86
- }
87
122
  }
88
- } catch {
123
+ catch {
124
+ appWorkspacePackageCache.set(cacheKey, workspacePackages);
125
+ return workspacePackages;
126
+ }
89
127
  appWorkspacePackageCache.set(cacheKey, workspacePackages);
90
128
  return workspacePackages;
91
- }
92
- appWorkspacePackageCache.set(cacheKey, workspacePackages);
93
- return workspacePackages;
94
129
  }
95
- function isWorkspacePackageImport(specifier, rootDir) {
96
- return getWorkspacePackages(rootDir).has(getPackageNameFromSpecifier(specifier));
130
+ /**
131
+ * Returns true if the given specifier is a workspace package.
132
+ *
133
+ * Workspace packages are declared with the `workspace:` protocol and are
134
+ * typically source-only, requiring bundling rather than externalization.
135
+ */
136
+ export function isWorkspacePackageImport(specifier, rootDir) {
137
+ return getWorkspacePackages(rootDir).has(getPackageNameFromSpecifier(specifier));
97
138
  }
98
- function isDeclaredAppPackageImport(specifier, rootDir) {
99
- return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
139
+ export function isDeclaredAppPackageImport(specifier, rootDir) {
140
+ return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
100
141
  }
142
+ /**
143
+ * Whether the given bare specifier should be left as-is (not rewritten to a
144
+ * file URL) in bundled output.
145
+ *
146
+ * Two categories qualify:
147
+ * 1. **App-declared packages** — present in the app's own package.json; the
148
+ * app's resolver will find them at runtime.
149
+ * 2. **Core runtime surface packages** — a curated subset of the framework's
150
+ * own dependencies that are part of its public Node adapter surface (e.g.
151
+ * `ws`). These ship alongside the framework and are resolvable from the
152
+ * bundled output's location even when the app has not declared them.
153
+ *
154
+ * Build-time packages declared by core (e.g. `oxc-parser`, `rolldown`) are
155
+ * intentionally *not* included here — their imports must still be rewritten
156
+ * to absolute `file:` URLs so they are not left as bare specifiers in app
157
+ * output.
158
+ */
101
159
  function isDeclaredInResolutionChain(specifier, rootDir) {
102
- const packageName = getPackageNameFromSpecifier(specifier);
103
- if (CORE_RUNTIME_BARE_SPECIFIER_PACKAGES.has(packageName)) {
104
- return true;
105
- }
106
- return isDeclaredAppPackageImport(specifier, rootDir);
160
+ const packageName = getPackageNameFromSpecifier(specifier);
161
+ if (CORE_RUNTIME_BARE_SPECIFIER_PACKAGES.has(packageName)) {
162
+ return true;
163
+ }
164
+ return isDeclaredAppPackageImport(specifier, rootDir);
107
165
  }
108
166
  function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
109
- if (!isBarePackageImportSpecifier(specifier, rootDir)) {
110
- return void 0;
111
- }
112
- if (isDeclaredInResolutionChain(specifier, rootDir)) {
113
- return void 0;
114
- }
115
- const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
116
- if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
117
- return void 0;
118
- }
119
- return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
167
+ if (!isBarePackageImportSpecifier(specifier, rootDir)) {
168
+ return undefined;
169
+ }
170
+ if (isDeclaredInResolutionChain(specifier, rootDir)) {
171
+ return undefined;
172
+ }
173
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
174
+ if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
175
+ return undefined;
176
+ }
177
+ return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
120
178
  }
121
179
  function rewriteRuntimeBuildOutputImports(code, rootDir) {
122
- const rewriteSpecifier = (prefix, quote, specifier) => {
123
- const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
124
- return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
125
- };
126
- const rewriteFileUrl = (prefix, quote, specifier) => {
127
- const packageName = extractPackageNameFromFileUrl(specifier);
128
- if (!packageName) {
129
- return `${prefix}${quote}${specifier}${quote}`;
130
- }
131
- if (!isDeclaredInResolutionChain(packageName, rootDir)) {
132
- return `${prefix}${quote}${specifier}${quote}`;
133
- }
134
- const lastNodeModulesIndex = specifier.lastIndexOf("/node_modules/");
135
- if (lastNodeModulesIndex === -1) {
136
- return `${prefix}${quote}${specifier}${quote}`;
137
- }
138
- const afterNodeModules = specifier.slice(lastNodeModulesIndex + "/node_modules/".length);
139
- const afterPackage = afterNodeModules.slice(packageName.length);
140
- const bareSpecifier = packageName + afterPackage;
141
- return `${prefix}${quote}${bareSpecifier}${quote}`;
142
- };
143
- const withResolvedPackages = code.replace(
144
- /(\bfrom\s+)(['"])([^'"\\]+)\2/g,
145
- (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
146
- ).replace(
147
- /(\bimport\s+)(['"])([^'"\\]+)\2/g,
148
- (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
149
- ).replace(
150
- /(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g,
151
- (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
152
- );
153
- const withBareSpecifiers = withResolvedPackages.replace(
154
- /(\bfrom\s+)(['"])(file:\/\/[^'"\\]+)\2/g,
155
- (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
156
- ).replace(
157
- /(\bimport\s+)(['"])(file:\/\/[^'"\\]+)\2/g,
158
- (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
159
- ).replace(
160
- /(\bimport\s*\(\s*)(['"])(file:\/\/[^'"\\]+)\2/g,
161
- (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
162
- );
163
- return withBareSpecifiers.replace(
164
- /(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g,
165
- (match, quote, specifier) => {
166
- const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
167
- return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
168
- }
169
- );
180
+ const rewriteSpecifier = (prefix, quote, specifier) => {
181
+ const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
182
+ return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
183
+ };
184
+ /**
185
+ * Rewrites file:// URLs pointing to node_modules back to bare specifiers,
186
+ * but only when the package is resolvable from the app's resolution chain.
187
+ *
188
+ * @remarks
189
+ * Rolldown resolves external imports to file:// URLs during the build. For
190
+ * packages declared in the app's package.json, rewriting to bare specifiers
191
+ * is safe and preserves CJS named-export interop. For transitive
192
+ * dependencies that aren't directly resolvable, the file:// URL is kept as-is
193
+ * to avoid ERR_MODULE_NOT_FOUND errors at runtime.
194
+ */
195
+ const rewriteFileUrl = (prefix, quote, specifier) => {
196
+ const packageName = extractPackageNameFromFileUrl(specifier);
197
+ if (!packageName) {
198
+ return `${prefix}${quote}${specifier}${quote}`;
199
+ }
200
+ if (!isDeclaredInResolutionChain(packageName, rootDir)) {
201
+ return `${prefix}${quote}${specifier}${quote}`;
202
+ }
203
+ // Extract the subpath after the package name
204
+ // Use lastIndexOf to handle pnpm's nested node_modules structure
205
+ const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
206
+ if (lastNodeModulesIndex === -1) {
207
+ return `${prefix}${quote}${specifier}${quote}`;
208
+ }
209
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
210
+ const afterPackage = afterNodeModules.slice(packageName.length);
211
+ // Reconstruct the bare specifier
212
+ const bareSpecifier = packageName + afterPackage;
213
+ return `${prefix}${quote}${bareSpecifier}${quote}`;
214
+ };
215
+ const withResolvedPackages = code
216
+ .replace(/(\bfrom\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
217
+ .replace(/(\bimport\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
218
+ .replace(/(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier));
219
+ // Rewrite file:// URLs pointing to node_modules back to bare specifiers
220
+ const withBareSpecifiers = withResolvedPackages
221
+ .replace(/(\bfrom\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
222
+ .replace(/(\bimport\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
223
+ .replace(/(\bimport\s*\(\s*)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier));
224
+ return withBareSpecifiers.replace(/(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g, (match, quote, specifier) => {
225
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
226
+ return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
227
+ });
170
228
  }
171
- function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
172
- if (process.env.ECOPAGES_LOGGER_DEBUG === "true") {
173
- console.log(`[normalizeNodeRuntimeBuildOutputFile] Checking ${filePath}`);
174
- }
175
- if (!/\.(?:[cm]?js)$/u.test(filePath)) {
176
- return;
177
- }
178
- const fileSystem = corePackageRequire("node:fs");
179
- if (!fileSystem.existsSync(filePath)) {
180
- return;
181
- }
182
- const code = fileSystem.readFileSync(filePath, "utf-8");
183
- const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
184
- if (rewritten !== code) {
185
- if (process.env.ECOPAGES_LOGGER_DEBUG === "true") {
186
- console.log(`[normalizeNodeRuntimeBuildOutputFile] Rewriting ${filePath}`);
187
- }
188
- fileSystem.writeFileSync(filePath, rewritten);
189
- }
229
+ export function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
230
+ if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
231
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Checking ${filePath}`);
232
+ }
233
+ if (!/\.(?:[cm]?js)$/u.test(filePath)) {
234
+ return;
235
+ }
236
+ const fileSystem = corePackageRequire('node:fs');
237
+ if (!fileSystem.existsSync(filePath)) {
238
+ return;
239
+ }
240
+ const code = fileSystem.readFileSync(filePath, 'utf-8');
241
+ const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
242
+ if (rewritten !== code) {
243
+ if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
244
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Rewriting ${filePath}`);
245
+ }
246
+ fileSystem.writeFileSync(filePath, rewritten);
247
+ }
190
248
  }
191
- function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
192
- for (const outputPath of outputPaths) {
193
- normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
194
- }
249
+ export function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
250
+ for (const outputPath of outputPaths) {
251
+ normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
252
+ }
195
253
  }
196
- export {
197
- isDeclaredAppPackageImport,
198
- isWorkspacePackageImport,
199
- normalizeNodeRuntimeBuildOutputFile,
200
- normalizeNodeRuntimeBuildOutputs
201
- };
@@ -1,35 +1,58 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import path from "node:path";
1
+ /**
2
+ * Server-side CSS shim plugin for the bundler adapter.
3
+ *
4
+ * @remarks
5
+ * Page modules imported by the server (so the framework can read
6
+ * `getStaticProps` / `staticPaths` / page metadata) commonly have
7
+ * `import './style.css'` at the top. The bundler does not bundle
8
+ * CSS, and the server only needs the JS exports — the CSS itself
9
+ * is delivered to the browser via the page's `dependencies.stylesheets`
10
+ * declarations. This plugin:
11
+ *
12
+ * - Resolves `.css` imports to the absolute on-disk path.
13
+ * - Loads them and returns an empty ESM module with
14
+ * `moduleSideEffects: true` so the bundler keeps the import in
15
+ * the dependency graph without trying to bundle the bytes.
16
+ *
17
+ * The plugin is added by the adapter on every server-side build.
18
+ * Browser-side builds that want real CSS bundling should keep using
19
+ * a dedicated CSS pipeline (e.g. the postcss processor's output)
20
+ * and continue to declare stylesheets in `dependencies.stylesheets`
21
+ * — the shim is intentionally inert for those flows.
22
+ */
23
+ import { existsSync, readFileSync } from 'node:fs';
24
+ import path from 'node:path';
3
25
  const CSS_PATH = /\.css$/u;
4
- const CSS_QUERY = "?ecopages-css-shim";
26
+ const CSS_QUERY = '?ecopages-css-shim';
5
27
  function stripShimQuery(id) {
6
- const queryIndex = id.indexOf("?");
7
- return queryIndex === -1 ? id : id.slice(0, queryIndex);
28
+ const queryIndex = id.indexOf('?');
29
+ return queryIndex === -1 ? id : id.slice(0, queryIndex);
8
30
  }
9
- function createServerSideCssShimPlugin() {
10
- return {
11
- name: "ecopages:server-side-css-shim",
12
- async resolveId(source, importer) {
13
- if (!CSS_PATH.test(source)) {
14
- return null;
15
- }
16
- const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
17
- return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
18
- },
19
- async load(id) {
20
- if (!id.endsWith(CSS_QUERY)) {
21
- return null;
22
- }
23
- const realPath = stripShimQuery(id);
24
- readFileSync(realPath, "utf-8");
25
- return {
26
- code: 'export default "";',
27
- moduleType: "js",
28
- moduleSideEffects: true
29
- };
30
- }
31
- };
31
+ /**
32
+ * Builds a Rolldown plugin that turns `.css` imports into no-op ESM
33
+ * modules while preserving the dependency graph.
34
+ */
35
+ export function createServerSideCssShimPlugin() {
36
+ return {
37
+ name: 'ecopages:server-side-css-shim',
38
+ async resolveId(source, importer) {
39
+ if (!CSS_PATH.test(source)) {
40
+ return null;
41
+ }
42
+ const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
43
+ return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
44
+ },
45
+ async load(id) {
46
+ if (!id.endsWith(CSS_QUERY)) {
47
+ return null;
48
+ }
49
+ const realPath = stripShimQuery(id);
50
+ readFileSync(realPath, 'utf-8');
51
+ return {
52
+ code: 'export default "";',
53
+ moduleType: 'js',
54
+ moduleSideEffects: true,
55
+ };
56
+ },
57
+ };
32
58
  }
33
- export {
34
- createServerSideCssShimPlugin
35
- };
@@ -1,37 +1,37 @@
1
- function resolveBuildProfileOptions(profile, appConfig, overrides = {}) {
2
- const root = appConfig.rootDir;
3
- switch (profile) {
4
- case "server-entry":
5
- return {
6
- root,
7
- target: "node",
8
- format: "esm",
9
- sourcemap: "none",
10
- minify: false,
11
- externalPackages: true,
12
- ...overrides
13
- };
14
- case "route-module":
15
- return {
16
- root,
17
- target: "es2022",
18
- format: "esm",
19
- sourcemap: "none",
20
- minify: false,
21
- externalPackages: true,
22
- ...overrides
23
- };
24
- case "browser-hmr":
25
- return {
26
- root,
27
- target: "browser",
28
- format: "esm",
29
- sourcemap: "none",
30
- minify: false,
31
- ...overrides
32
- };
33
- }
1
+ /**
2
+ * Resolves shared Rolldown options for a build profile.
3
+ */
4
+ export function resolveBuildProfileOptions(profile, appConfig, overrides = {}) {
5
+ const root = appConfig.rootDir;
6
+ switch (profile) {
7
+ case 'server-entry':
8
+ return {
9
+ root,
10
+ target: 'node',
11
+ format: 'esm',
12
+ sourcemap: 'none',
13
+ minify: false,
14
+ externalPackages: true,
15
+ ...overrides,
16
+ };
17
+ case 'route-module':
18
+ return {
19
+ root,
20
+ target: 'es2022',
21
+ format: 'esm',
22
+ sourcemap: 'none',
23
+ minify: false,
24
+ externalPackages: true,
25
+ ...overrides,
26
+ };
27
+ case 'browser-hmr':
28
+ return {
29
+ root,
30
+ target: 'browser',
31
+ format: 'esm',
32
+ sourcemap: 'none',
33
+ minify: false,
34
+ ...overrides,
35
+ };
36
+ }
34
37
  }
35
- export {
36
- resolveBuildProfileOptions
37
- };