@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,214 +1,284 @@
1
- import path from "node:path";
2
- import { finalizeLoadResultWithSourceTransforms } from "./rolldown-source-transform-pass.js";
3
- import { escapeRegExp } from "../browser/browser-runtime-plugin-helpers.js";
4
- const NAMESPACE_SEPARATOR = ":";
1
+ /**
2
+ * Bundler plugin bridge.
3
+ *
4
+ * @remarks
5
+ * Translates an array of `EcoBuildPlugin` instances (the runtime-agnostic
6
+ * plugin contract used by Ecopages processors and integrations) into
7
+ * the bundler's native `Plugin` array. The bridge exposes the same
8
+ * three hooks (`onResolve`, `onLoad`, `module`) the `EcoBuildPlugin`
9
+ * contract uses, but maps them to the bundler's `resolveId`/`load`
10
+ * hooks.
11
+ *
12
+ * The shared `EcoBuildPlugin` contract stays the boundary between
13
+ * integrations and bundler backends.
14
+ *
15
+ * **Namespace handling.**
16
+ *
17
+ * The shared `EcoBuildPlugin` contract scopes `onResolve`/`onLoad`
18
+ * handlers with a `namespace` string. The bundler encodes namespaces
19
+ * into the module id (no separate field). The bridge prepends
20
+ * `<namespace>:` to the resolved id when the result includes a
21
+ * namespace, and matches `onLoad`/`onResolve` filters against that
22
+ * prefix. The bridge strips the prefix before forwarding the id back
23
+ * to the callback so plugin code keeps seeing the same `path` shape
24
+ * it did on the historical contract.
25
+ *
26
+ * **Plugin ordering is semantically significant.**
27
+ *
28
+ * The bundler's `resolveId` and `load` are "first" hooks: the first
29
+ * plugin that returns a non-null value wins. Because the bridge
30
+ * translates each `EcoBuildPlugin` into its own bundler plugin and
31
+ * preserves the array order, the position of each plugin in the
32
+ * `plugins` array determines its priority:
33
+ *
34
+ * - **Index 0** has the highest priority.
35
+ * - **Last index** has the lowest priority.
36
+ *
37
+ * When adding new integrations or processors, ensure security-critical
38
+ * plugins (e.g. `ecopages-client-graph-boundary`) are placed **before**
39
+ * general-purpose loaders in the array so they always get first refusal
40
+ * on every source file.
41
+ */
42
+ import path from 'node:path';
43
+ import { finalizeLoadResultWithSourceTransforms } from './rolldown-source-transform-pass.js';
44
+ import { escapeRegExp } from '../browser/browser-runtime-plugin-helpers.js';
45
+ const NAMESPACE_SEPARATOR = ':';
5
46
  function joinNamespace(namespace, value) {
6
- return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
47
+ return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
7
48
  }
8
49
  function splitNamespace(id) {
9
- const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
10
- if (separatorIndex <= 0) {
11
- return { namespace: void 0, path: id };
12
- }
13
- return {
14
- namespace: id.slice(0, separatorIndex),
15
- path: id.slice(separatorIndex + 1)
16
- };
50
+ const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
51
+ if (separatorIndex <= 0) {
52
+ return { namespace: undefined, path: id };
53
+ }
54
+ return {
55
+ namespace: id.slice(0, separatorIndex),
56
+ path: id.slice(separatorIndex + 1),
57
+ };
17
58
  }
18
59
  function inferRolldownModuleTypeFromPath(filePath) {
19
- const extension = path.extname(filePath).toLowerCase();
20
- switch (extension) {
21
- case ".ts":
22
- return "ts";
23
- case ".tsx":
24
- return "tsx";
25
- case ".jsx":
26
- return "jsx";
27
- case ".json":
28
- return "json";
29
- case ".css":
30
- return "css";
31
- default:
32
- return "js";
33
- }
60
+ const extension = path.extname(filePath).toLowerCase();
61
+ switch (extension) {
62
+ case '.ts':
63
+ return 'ts';
64
+ case '.tsx':
65
+ return 'tsx';
66
+ case '.jsx':
67
+ return 'jsx';
68
+ case '.json':
69
+ return 'json';
70
+ case '.css':
71
+ return 'css';
72
+ default:
73
+ return 'js';
74
+ }
34
75
  }
35
76
  function normalizeRolldownModuleType(loader) {
36
- switch (loader) {
37
- case "js":
38
- case "jsx":
39
- case "ts":
40
- case "tsx":
41
- case "json":
42
- case "css":
43
- case "text":
44
- case "base64":
45
- case "dataurl":
46
- case "binary":
47
- case "empty":
48
- return loader;
49
- case "global-css":
50
- case "local-css":
51
- return "css";
52
- case "file":
53
- case "copy":
54
- return "asset";
55
- default:
56
- return void 0;
57
- }
77
+ switch (loader) {
78
+ case 'js':
79
+ case 'jsx':
80
+ case 'ts':
81
+ case 'tsx':
82
+ case 'json':
83
+ case 'css':
84
+ case 'text':
85
+ case 'base64':
86
+ case 'dataurl':
87
+ case 'binary':
88
+ case 'empty':
89
+ return loader;
90
+ case 'global-css':
91
+ case 'local-css':
92
+ return 'css';
93
+ case 'file':
94
+ case 'copy':
95
+ return 'asset';
96
+ default:
97
+ return undefined;
98
+ }
58
99
  }
59
100
  function convertLoadResultToModuleSource(result) {
60
- if (result.loader === "object" && result.exports && typeof result.exports === "object") {
61
- return Object.entries(result.exports).map(
62
- ([key, value]) => key === "default" ? `export default ${JSON.stringify(value)};` : `export const ${key} = ${JSON.stringify(value)};`
63
- ).join("\n");
64
- }
65
- return void 0;
101
+ if (result.loader === 'object' && result.exports && typeof result.exports === 'object') {
102
+ return Object.entries(result.exports)
103
+ .map(([key, value]) => key === 'default'
104
+ ? `export default ${JSON.stringify(value)};`
105
+ : `export const ${key} = ${JSON.stringify(value)};`)
106
+ .join('\n');
107
+ }
108
+ return undefined;
66
109
  }
67
110
  function buildIdFilter(filter, namespace) {
68
- if (!namespace) {
69
- return filter;
70
- }
71
- return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
111
+ if (!namespace) {
112
+ return filter;
113
+ }
114
+ return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
72
115
  }
73
116
  function resolvePluginPath(value, importer, contextRoot) {
74
- if (path.isAbsolute(value)) {
117
+ if (path.isAbsolute(value)) {
118
+ return value;
119
+ }
120
+ if (value.startsWith('.') || value.startsWith('..')) {
121
+ const baseDir = importer ? path.dirname(importer) : contextRoot;
122
+ return path.resolve(baseDir, value);
123
+ }
75
124
  return value;
76
- }
77
- if (value.startsWith(".") || value.startsWith("..")) {
78
- const baseDir = importer ? path.dirname(importer) : contextRoot;
79
- return path.resolve(baseDir, value);
80
- }
81
- return value;
82
125
  }
83
126
  function convertPluginOnLoadResult(args, result) {
84
- if (!result || typeof result !== "object") {
85
- return void 0;
86
- }
87
- const candidate = result;
88
- const { path: sourcePath } = splitNamespace(args.id);
89
- const sourceFromExports = convertLoadResultToModuleSource(candidate);
90
- if (sourceFromExports) {
91
- const description = {
92
- code: sourceFromExports,
93
- moduleType: "js"
94
- };
95
- return description;
96
- }
97
- if (typeof candidate.contents === "string" || candidate.contents instanceof Uint8Array) {
98
- const code = typeof candidate.contents === "string" ? candidate.contents : new TextDecoder().decode(candidate.contents);
99
- const description = {
100
- code,
101
- moduleType: normalizeRolldownModuleType(candidate.loader) ?? inferRolldownModuleTypeFromPath(sourcePath)
102
- };
103
- return description;
104
- }
105
- return void 0;
127
+ if (!result || typeof result !== 'object') {
128
+ return undefined;
129
+ }
130
+ const candidate = result;
131
+ const { path: sourcePath } = splitNamespace(args.id);
132
+ const sourceFromExports = convertLoadResultToModuleSource(candidate);
133
+ if (sourceFromExports) {
134
+ const description = {
135
+ code: sourceFromExports,
136
+ moduleType: 'js',
137
+ };
138
+ return description;
139
+ }
140
+ if (typeof candidate.contents === 'string' || candidate.contents instanceof Uint8Array) {
141
+ const code = typeof candidate.contents === 'string' ? candidate.contents : new TextDecoder().decode(candidate.contents);
142
+ const description = {
143
+ code,
144
+ moduleType: (normalizeRolldownModuleType(candidate.loader) ??
145
+ inferRolldownModuleTypeFromPath(sourcePath)),
146
+ };
147
+ return description;
148
+ }
149
+ return undefined;
106
150
  }
107
151
  function convertPluginOnResolveResult(result, importer, contextRoot) {
108
- if (!result || typeof result !== "object") {
109
- return void 0;
110
- }
111
- const candidate = result;
112
- if (typeof candidate.path !== "string" && typeof candidate.namespace !== "string") {
113
- if (typeof candidate.external !== "boolean") {
114
- return void 0;
115
- }
116
- }
117
- const partial = { id: "" };
118
- if (typeof candidate.path === "string") {
119
- partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
120
- } else if (typeof candidate.namespace === "string") {
121
- partial.id = joinNamespace(candidate.namespace, "");
122
- }
123
- if (typeof candidate.external === "boolean") {
124
- partial.external = candidate.external;
125
- }
126
- return partial;
152
+ if (!result || typeof result !== 'object') {
153
+ return undefined;
154
+ }
155
+ const candidate = result;
156
+ if (typeof candidate.path !== 'string' && typeof candidate.namespace !== 'string') {
157
+ if (typeof candidate.external !== 'boolean') {
158
+ return undefined;
159
+ }
160
+ }
161
+ const partial = { id: '' };
162
+ if (typeof candidate.path === 'string') {
163
+ partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
164
+ }
165
+ else if (typeof candidate.namespace === 'string') {
166
+ partial.id = joinNamespace(candidate.namespace, '');
167
+ }
168
+ if (typeof candidate.external === 'boolean') {
169
+ partial.external = candidate.external;
170
+ }
171
+ return partial;
127
172
  }
128
- function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
129
- if (plugins.length === 0) {
130
- return [];
131
- }
132
- const moduleCounter = { value: 0 };
133
- const resolveRegistrations = [];
134
- const loadRegistrations = [];
135
- const registerResolve = (filter, callback) => {
136
- resolveRegistrations.push({ filter, callback });
137
- };
138
- const registerLoad = (filter, callback) => {
139
- loadRegistrations.push({ filter, callback });
140
- };
141
- const resolveIdHandler = async (source, importer, _extraOptions) => {
142
- for (const { filter, callback } of resolveRegistrations) {
143
- if (!filter.test(source)) {
144
- continue;
145
- }
146
- const { namespace, path: sourcePath } = splitNamespace(source);
147
- const result = await callback({ path: sourcePath, importer, namespace });
148
- const converted = convertPluginOnResolveResult(result, importer, contextRoot);
149
- if (converted !== void 0) {
150
- return converted;
151
- }
152
- }
153
- return void 0;
154
- };
155
- const loadHandler = async (id) => {
156
- let loadResult;
157
- for (const { filter, callback } of loadRegistrations) {
158
- if (!filter.test(id)) {
159
- continue;
160
- }
161
- const { namespace: namespace2, path: sourcePath2 } = splitNamespace(id);
162
- const result = await callback({ path: sourcePath2, namespace: namespace2 });
163
- const converted = convertPluginOnLoadResult({ id }, result);
164
- if (converted !== void 0) {
165
- loadResult = converted;
166
- break;
167
- }
168
- }
169
- const { namespace, path: sourcePath } = splitNamespace(id);
170
- return finalizeLoadResultWithSourceTransforms({
171
- id,
172
- namespace,
173
- sourcePath,
174
- loadResult,
175
- sourceTransforms,
176
- contextRoot,
177
- inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath)
178
- });
179
- };
180
- const plugin = {
181
- name: "ecopages-plugin-bridge",
182
- buildStart: async () => {
183
- resolveRegistrations.length = 0;
184
- loadRegistrations.length = 0;
185
- moduleCounter.value = 0;
186
- for (const ecoPlugin of plugins) {
187
- const bridge = {
188
- onResolve: (options, callback) => {
189
- registerResolve(buildIdFilter(options.filter, options.namespace), callback);
190
- },
191
- onLoad: (options, callback) => {
192
- registerLoad(buildIdFilter(options.filter, options.namespace), callback);
193
- },
194
- module: (specifier, callback) => {
195
- const namespace = `ecopages-module-${moduleCounter.value}`;
196
- moduleCounter.value += 1;
197
- const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
198
- registerResolve(filter, async () => ({
199
- path: joinNamespace(namespace, specifier)
200
- }));
201
- registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
202
- }
203
- };
204
- await ecoPlugin.setup(bridge);
205
- }
206
- },
207
- resolveId: resolveIdHandler,
208
- load: loadHandler
209
- };
210
- return [plugin];
173
+ /**
174
+ * Creates a Rolldown `Plugin` array that drives the supplied
175
+ * `EcoBuildPlugin` instances.
176
+ *
177
+ * All eco plugins are merged into a single Rolldown plugin to minimize
178
+ * Rust→JS FFI overhead. Rolldown calls every hook for every module when
179
+ * there is no static filter, so N separate plugins would cause N
180
+ * `resolveId` + N `load` calls per module. Consolidating into one
181
+ * plugin reduces that to 1 call each, with JavaScript-side filtering
182
+ * routing to the correct eco plugin callback.
183
+ *
184
+ * Plugin ordering is preserved: registrations from earlier eco plugins
185
+ * are checked before registrations from later ones, matching the
186
+ * original per-plugin priority semantics.
187
+ *
188
+ * @remarks
189
+ * Rolldown re-fires `buildStart` on each build, so registrations and the
190
+ * virtual-module counter are cleared before every `setup` pass — otherwise
191
+ * handlers accumulate when bridge plugins are reused.
192
+ *
193
+ * @param plugins - `EcoBuildPlugin` instances registered for this build.
194
+ * @param contextRoot - Project root used to resolve relative load paths.
195
+ * @param sourceTransforms - Optional app-owned transforms applied after a matching
196
+ * `onLoad` handler returns module contents. Browser builds pass
197
+ * {@link getAppSourceTransforms | app source transforms} here so metadata injection
198
+ * still runs on output rewritten by boundary/runtime plugins. Virtual modules,
199
+ * CSS, and asset loads are skipped.
200
+ */
201
+ export function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
202
+ if (plugins.length === 0) {
203
+ return [];
204
+ }
205
+ const moduleCounter = { value: 0 };
206
+ const resolveRegistrations = [];
207
+ const loadRegistrations = [];
208
+ const registerResolve = (filter, callback) => {
209
+ resolveRegistrations.push({ filter, callback });
210
+ };
211
+ const registerLoad = (filter, callback) => {
212
+ loadRegistrations.push({ filter, callback });
213
+ };
214
+ const resolveIdHandler = async (source, importer, _extraOptions) => {
215
+ for (const { filter, callback } of resolveRegistrations) {
216
+ if (!filter.test(source)) {
217
+ continue;
218
+ }
219
+ const { namespace, path: sourcePath } = splitNamespace(source);
220
+ const result = await callback({ path: sourcePath, importer, namespace });
221
+ const converted = convertPluginOnResolveResult(result, importer, contextRoot);
222
+ if (converted !== undefined) {
223
+ return converted;
224
+ }
225
+ }
226
+ return undefined;
227
+ };
228
+ const loadHandler = async (id) => {
229
+ let loadResult;
230
+ for (const { filter, callback } of loadRegistrations) {
231
+ if (!filter.test(id)) {
232
+ continue;
233
+ }
234
+ const { namespace, path: sourcePath } = splitNamespace(id);
235
+ const result = await callback({ path: sourcePath, namespace });
236
+ const converted = convertPluginOnLoadResult({ id }, result);
237
+ if (converted !== undefined) {
238
+ loadResult = converted;
239
+ break;
240
+ }
241
+ }
242
+ const { namespace, path: sourcePath } = splitNamespace(id);
243
+ return finalizeLoadResultWithSourceTransforms({
244
+ id,
245
+ namespace,
246
+ sourcePath,
247
+ loadResult,
248
+ sourceTransforms,
249
+ contextRoot,
250
+ inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath),
251
+ });
252
+ };
253
+ const plugin = {
254
+ name: 'ecopages-plugin-bridge',
255
+ buildStart: async () => {
256
+ resolveRegistrations.length = 0;
257
+ loadRegistrations.length = 0;
258
+ moduleCounter.value = 0;
259
+ for (const ecoPlugin of plugins) {
260
+ const bridge = {
261
+ onResolve: (options, callback) => {
262
+ registerResolve(buildIdFilter(options.filter, options.namespace), callback);
263
+ },
264
+ onLoad: (options, callback) => {
265
+ registerLoad(buildIdFilter(options.filter, options.namespace), callback);
266
+ },
267
+ module: (specifier, callback) => {
268
+ const namespace = `ecopages-module-${moduleCounter.value}`;
269
+ moduleCounter.value += 1;
270
+ const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
271
+ registerResolve(filter, async () => ({
272
+ path: joinNamespace(namespace, specifier),
273
+ }));
274
+ registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
275
+ },
276
+ };
277
+ await ecoPlugin.setup(bridge);
278
+ }
279
+ },
280
+ resolveId: resolveIdHandler,
281
+ load: loadHandler,
282
+ };
283
+ return [plugin];
211
284
  }
212
- export {
213
- createRolldownPluginBridge
214
- };
@@ -1,61 +1,70 @@
1
- import path from "node:path";
2
- import { fileSystem } from "@ecopages/file-system";
3
- import {
4
- applySourceTransforms,
5
- normalizeTransformId
6
- } from "../../plugins/source-transform.js";
7
- const TRANSFORMABLE_SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mdx"]);
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { applySourceTransforms, normalizeTransformId, } from '../../plugins/source-transform.js';
4
+ /**
5
+ * Standard source extensions eligible for the browser post-load transform pass.
6
+ *
7
+ * @remarks
8
+ * Compound integration templates (for example `.kita.tsx`) still match because
9
+ * matching uses the final path suffix. Keep this aligned with integration
10
+ * template extensions registered in app config.
11
+ */
12
+ const TRANSFORMABLE_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mdx']);
8
13
  function shouldApplySourceTransforms(namespace, sourcePath) {
9
- if (namespace !== void 0) {
10
- return false;
11
- }
12
- const normalizedPath = normalizeTransformId(sourcePath);
13
- return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
14
+ if (namespace !== undefined) {
15
+ return false;
16
+ }
17
+ const normalizedPath = normalizeTransformId(sourcePath);
18
+ return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
14
19
  }
15
20
  function shouldTransformLoadedModule(moduleType) {
16
- return moduleType !== "css" && moduleType !== "asset";
21
+ return moduleType !== 'css' && moduleType !== 'asset';
17
22
  }
18
23
  function applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, code) {
19
- if (sourceTransforms.length === 0) {
20
- return code;
21
- }
22
- return applySourceTransforms(sourceTransforms, code, sourcePath);
24
+ if (sourceTransforms.length === 0) {
25
+ return code;
26
+ }
27
+ return applySourceTransforms(sourceTransforms, code, sourcePath);
23
28
  }
24
- async function finalizeLoadResultWithSourceTransforms(options) {
25
- const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
26
- if (!shouldApplySourceTransforms(namespace, sourcePath)) {
27
- return loadResult;
28
- }
29
- if (typeof loadResult === "object" && loadResult !== null && "code" in loadResult && typeof loadResult.code === "string") {
30
- if (!shouldTransformLoadedModule(loadResult.moduleType)) {
31
- return loadResult;
29
+ /**
30
+ * Runs app-owned source transforms after first-wins `onLoad` plugins produce
31
+ * module contents for one Rolldown load request.
32
+ */
33
+ export async function finalizeLoadResultWithSourceTransforms(options) {
34
+ const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
35
+ if (!shouldApplySourceTransforms(namespace, sourcePath)) {
36
+ return loadResult;
37
+ }
38
+ if (typeof loadResult === 'object' &&
39
+ loadResult !== null &&
40
+ 'code' in loadResult &&
41
+ typeof loadResult.code === 'string') {
42
+ if (!shouldTransformLoadedModule(loadResult.moduleType)) {
43
+ return loadResult;
44
+ }
45
+ const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
46
+ if (transformedCode === loadResult.code) {
47
+ return loadResult;
48
+ }
49
+ return {
50
+ code: transformedCode,
51
+ moduleType: loadResult.moduleType,
52
+ };
53
+ }
54
+ if (loadResult !== undefined || sourceTransforms.length === 0) {
55
+ return loadResult;
56
+ }
57
+ const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
58
+ if (!fileSystem.exists(normalizedPath)) {
59
+ return loadResult;
32
60
  }
33
- const transformedCode2 = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
34
- if (transformedCode2 === loadResult.code) {
35
- return loadResult;
61
+ const originalCode = fileSystem.readFileSync(normalizedPath);
62
+ const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
63
+ if (transformedCode === originalCode) {
64
+ return loadResult;
36
65
  }
37
66
  return {
38
- code: transformedCode2,
39
- moduleType: loadResult.moduleType
67
+ code: transformedCode,
68
+ moduleType: inferModuleTypeFromPath(normalizedPath),
40
69
  };
41
- }
42
- if (loadResult !== void 0 || sourceTransforms.length === 0) {
43
- return loadResult;
44
- }
45
- const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
46
- if (!fileSystem.exists(normalizedPath)) {
47
- return loadResult;
48
- }
49
- const originalCode = fileSystem.readFileSync(normalizedPath);
50
- const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
51
- if (transformedCode === originalCode) {
52
- return loadResult;
53
- }
54
- return {
55
- code: transformedCode,
56
- moduleType: inferModuleTypeFromPath(normalizedPath)
57
- };
58
70
  }
59
- export {
60
- finalizeLoadResultWithSourceTransforms
61
- };