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

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 (343) hide show
  1. package/README.md +1 -0
  2. package/package.json +90 -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/README.md +23 -0
  249. package/src/router/client/link-intent.js +55 -39
  250. package/src/router/client/link-intent.test.browser.js +49 -49
  251. package/src/router/client/link-navigation-policy.js +114 -93
  252. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  253. package/src/router/client/navigation-coordinator.js +235 -211
  254. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  255. package/src/router/client/navigation-lifecycle.js +50 -0
  256. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  257. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  258. package/src/router/server/route-registry.js +237 -242
  259. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  260. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  261. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  262. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  263. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  264. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  265. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  266. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  267. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  268. package/src/services/assets/asset-processing-service/index.js +8 -8
  269. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  270. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  271. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  272. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  273. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  274. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  275. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  276. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  277. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  278. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  279. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  280. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  281. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  282. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  283. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  284. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  285. package/src/services/assets/browser-bundle.service.js +52 -47
  286. package/src/services/cache/cache.types.js +5 -0
  287. package/src/services/cache/index.js +6 -7
  288. package/src/services/cache/memory-cache-store.js +101 -89
  289. package/src/services/cache/page-cache-service.js +156 -145
  290. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  291. package/src/services/html/html-rewriter-provider.service.js +61 -61
  292. package/src/services/html/html-transformer.service.js +249 -266
  293. package/src/services/invalidation/development-invalidation.service.js +252 -241
  294. package/src/services/module-loading/app-module-loader.service.js +1 -0
  295. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  296. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  297. package/src/services/module-loading/module-loading-types.js +1 -0
  298. package/src/services/module-loading/page-module-import.service.js +235 -243
  299. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  300. package/src/services/module-loading/route-module-build-cache.js +3 -38
  301. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  302. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  303. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  304. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  305. package/src/services/module-loading/source-module-support.js +15 -7
  306. package/src/services/runtime-state/dev-graph.service.js +165 -157
  307. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  308. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  309. package/src/services/validation/schema-validation-service.js +157 -95
  310. package/src/services/validation/standard-schema.types.js +1 -0
  311. package/src/services/validation/validate-standard-schema.js +13 -13
  312. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  313. package/src/static-site-generator/sitemap-routes.js +33 -28
  314. package/src/static-site-generator/sitemap.js +38 -29
  315. package/src/static-site-generator/static-build-invalidation.js +34 -56
  316. package/src/static-site-generator/static-export-context.js +1 -0
  317. package/src/static-site-generator/static-site-generator.js +517 -553
  318. package/src/types/internal-types.d.ts +19 -3
  319. package/src/types/internal-types.js +1 -0
  320. package/src/types/public-types.d.ts +16 -46
  321. package/src/types/public-types.js +1 -0
  322. package/src/utils/deep-merge.js +39 -26
  323. package/src/utils/ecopages-route-info.js +27 -23
  324. package/src/utils/hash.js +3 -6
  325. package/src/utils/html-escaping.js +21 -8
  326. package/src/utils/html.js +1 -4
  327. package/src/utils/invariant.js +11 -10
  328. package/src/utils/locals-utils.js +32 -22
  329. package/src/utils/parse-cli-args.js +73 -65
  330. package/src/utils/path-pattern.js +38 -23
  331. package/src/utils/path-utils.module.js +8 -11
  332. package/src/utils/resolve-entry-file.js +70 -38
  333. package/src/utils/resolve-work-dir.js +23 -27
  334. package/src/utils/runtime.js +24 -33
  335. package/src/utils/server-utils.module.js +60 -52
  336. package/src/utils/static-file-extensions.js +52 -46
  337. package/src/watchers/project-watcher-ignore.js +16 -15
  338. package/src/watchers/project-watcher.js +385 -366
  339. package/src/watchers/project-watcher.test-helpers.js +45 -50
  340. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  341. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  342. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  343. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,100 +1,98 @@
1
- import path from "node:path";
2
- import { RESOLVED_ASSETS_DIR } from "../../../../../config/constants.js";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { BaseScriptProcessor } from "../base/base-script-processor.js";
5
- class FileScriptProcessor extends BaseScriptProcessor {
6
- hmrManager;
7
- setHmrManager(hmrManager) {
8
- this.hmrManager = hmrManager;
9
- }
10
- async process(dep) {
11
- if (this.hmrManager?.isEnabled() && !dep.inline) {
12
- const resolvedOutput = this.hmrManager.getResolvedScriptOutput?.(dep.filepath);
13
- if (resolvedOutput) {
14
- return {
15
- filepath: resolvedOutput.outputPath,
16
- sourceFilepath: dep.filepath,
17
- srcUrl: resolvedOutput.outputUrl,
18
- kind: "script",
19
- position: dep.position,
20
- attributes: dep.attributes,
21
- inline: false,
22
- excludeFromHtml: dep.excludeFromHtml,
23
- packageRole: dep.packageRole,
24
- bundledSourceFilepaths: dep.bundledSourceFilepaths
25
- };
26
- }
27
- const registered = await this.hmrManager.registerScriptEntrypoint(dep.filepath);
28
- return {
29
- filepath: registered.outputPath,
30
- sourceFilepath: dep.filepath,
31
- srcUrl: registered.outputUrl,
32
- kind: "script",
33
- position: dep.position,
34
- attributes: dep.attributes,
35
- inline: false,
36
- excludeFromHtml: dep.excludeFromHtml,
37
- packageRole: dep.packageRole,
38
- bundledSourceFilepaths: dep.bundledSourceFilepaths
39
- };
1
+ import path from 'node:path';
2
+ import { RESOLVED_ASSETS_DIR } from '../../../../../config/constants.js';
3
+ import { fileSystem } from '@ecopages/file-system';
4
+ import { BaseScriptProcessor } from '../base/base-script-processor.js';
5
+ export class FileScriptProcessor extends BaseScriptProcessor {
6
+ hmrManager;
7
+ setHmrManager(hmrManager) {
8
+ this.hmrManager = hmrManager;
40
9
  }
41
- const content = fileSystem.readFileSync(dep.filepath);
42
- const shouldBundle = this.shouldBundle(dep);
43
- const configHash = this.generateHash(
44
- JSON.stringify({
45
- bundle: shouldBundle,
46
- minify: shouldBundle && this.isProduction,
47
- opts: dep.bundleOptions
48
- })
49
- );
50
- const cachekey = `${this.buildCacheKey(dep.filepath, this.generateHash(content), dep)}:${configHash}`;
51
- return this.getOrProcess(cachekey, async () => {
52
- if (!shouldBundle) {
53
- const outFilepath = path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath);
54
- let filepath;
55
- if (!dep.inline) {
56
- filepath = path.join(this.getAssetsDir(), outFilepath);
57
- fileSystem.copyFile(dep.filepath, filepath);
10
+ async process(dep) {
11
+ /**
12
+ * If HMR Manager is active, delegate build/watch to it.
13
+ */
14
+ if (this.hmrManager?.isEnabled() && !dep.inline) {
15
+ const resolvedOutput = this.hmrManager.getResolvedScriptOutput?.(dep.filepath);
16
+ if (resolvedOutput) {
17
+ return {
18
+ filepath: resolvedOutput.outputPath,
19
+ sourceFilepath: dep.filepath,
20
+ srcUrl: resolvedOutput.outputUrl,
21
+ kind: 'script',
22
+ position: dep.position,
23
+ attributes: dep.attributes,
24
+ inline: false,
25
+ excludeFromHtml: dep.excludeFromHtml,
26
+ packageRole: dep.packageRole,
27
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
28
+ };
29
+ }
30
+ const registered = await this.hmrManager.registerScriptEntrypoint(dep.filepath);
31
+ return {
32
+ filepath: registered.outputPath,
33
+ sourceFilepath: dep.filepath,
34
+ srcUrl: registered.outputUrl,
35
+ kind: 'script',
36
+ position: dep.position,
37
+ attributes: dep.attributes,
38
+ inline: false,
39
+ excludeFromHtml: dep.excludeFromHtml,
40
+ packageRole: dep.packageRole,
41
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
42
+ };
58
43
  }
59
- return {
60
- filepath,
61
- sourceFilepath: dep.filepath,
62
- content,
63
- kind: "script",
64
- position: dep.position,
65
- attributes: dep.attributes,
66
- inline: dep.inline,
67
- excludeFromHtml: dep.excludeFromHtml,
68
- packageRole: dep.packageRole,
69
- bundledSourceFilepaths: dep.bundledSourceFilepaths
70
- };
71
- }
72
- const relativeFilepath = path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath);
73
- const outdirPath = path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR, relativeFilepath);
74
- const outdirDirname = path.dirname(outdirPath);
75
- const bundlerOptions = this.getBundlerOptions(dep);
76
- const bundledFilePath = await this.bundleScript({
77
- entrypoint: dep.filepath,
78
- outdir: outdirDirname,
79
- minify: this.isProduction,
80
- ...bundlerOptions,
81
- plugins: bundlerOptions.plugins
82
- });
83
- return {
84
- filepath: bundledFilePath,
85
- sourceFilepath: dep.filepath,
86
- content: dep.inline ? fileSystem.readFileSync(bundledFilePath).toString() : void 0,
87
- kind: "script",
88
- position: dep.position,
89
- attributes: dep.attributes,
90
- inline: dep.inline,
91
- excludeFromHtml: dep.excludeFromHtml,
92
- packageRole: dep.packageRole,
93
- bundledSourceFilepaths: dep.bundledSourceFilepaths
94
- };
95
- });
96
- }
44
+ const content = fileSystem.readFileSync(dep.filepath);
45
+ const shouldBundle = this.shouldBundle(dep);
46
+ const configHash = this.generateHash(JSON.stringify({
47
+ bundle: shouldBundle,
48
+ minify: shouldBundle && this.isProduction,
49
+ opts: dep.bundleOptions,
50
+ }));
51
+ const cachekey = `${this.buildCacheKey(dep.filepath, this.generateHash(content), dep)}:${configHash}`;
52
+ return this.getOrProcess(cachekey, async () => {
53
+ if (!shouldBundle) {
54
+ const outFilepath = path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath);
55
+ let filepath;
56
+ if (!dep.inline) {
57
+ filepath = path.join(this.getAssetsDir(), outFilepath);
58
+ fileSystem.copyFile(dep.filepath, filepath);
59
+ }
60
+ return {
61
+ filepath,
62
+ sourceFilepath: dep.filepath,
63
+ content,
64
+ kind: 'script',
65
+ position: dep.position,
66
+ attributes: dep.attributes,
67
+ inline: dep.inline,
68
+ excludeFromHtml: dep.excludeFromHtml,
69
+ packageRole: dep.packageRole,
70
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
71
+ };
72
+ }
73
+ const relativeFilepath = path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath);
74
+ const outdirPath = path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR, relativeFilepath);
75
+ const outdirDirname = path.dirname(outdirPath);
76
+ const bundlerOptions = this.getBundlerOptions(dep);
77
+ const bundledFilePath = await this.bundleScript({
78
+ entrypoint: dep.filepath,
79
+ outdir: outdirDirname,
80
+ minify: this.isProduction,
81
+ ...bundlerOptions,
82
+ plugins: bundlerOptions.plugins,
83
+ });
84
+ return {
85
+ filepath: bundledFilePath,
86
+ sourceFilepath: dep.filepath,
87
+ content: dep.inline ? fileSystem.readFileSync(bundledFilePath).toString() : undefined,
88
+ kind: 'script',
89
+ position: dep.position,
90
+ attributes: dep.attributes,
91
+ inline: dep.inline,
92
+ excludeFromHtml: dep.excludeFromHtml,
93
+ packageRole: dep.packageRole,
94
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
95
+ };
96
+ });
97
+ }
97
98
  }
98
- export {
99
- FileScriptProcessor
100
- };
@@ -1,140 +1,141 @@
1
- import path from "node:path";
2
- import { fileURLToPath, pathToFileURL } from "node:url";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { getAppBuildAdapter } from "../../../../../build/build-adapter.js";
5
- import { BaseScriptProcessor } from "../base/base-script-processor.js";
6
- class NodeModuleScriptProcessor extends BaseScriptProcessor {
7
- async process(dep) {
8
- const modulePath = this.resolveModulePath(dep.importPath, this.appConfig.rootDir);
9
- const moduleName = path.basename(modulePath);
10
- const filename = dep.name ?? `nm-${moduleName}`;
11
- const shouldBundle = this.shouldBundle(dep);
12
- const configHash = this.generateHash(
13
- JSON.stringify({
14
- bundle: shouldBundle,
15
- inline: dep.inline,
16
- minify: shouldBundle && !dep.inline && this.isProduction,
17
- opts: dep.bundleOptions
18
- })
19
- );
20
- const cachekey = `${this.buildCacheKey(filename, this.generateHash(modulePath), dep)}:${configHash}`;
21
- return this.getOrProcess(cachekey, async () => {
22
- if (dep.inline || !shouldBundle) {
23
- const content = fileSystem.readFileAsBuffer(modulePath).toString();
24
- const filepath = dep.inline ? void 0 : path.join(this.getAssetsDir(), "vendors", filename);
25
- if (filepath) {
26
- fileSystem.ensureDir(path.dirname(filepath));
27
- if (!fileSystem.exists(filepath) || fileSystem.readFileAsBuffer(filepath).toString() !== content) {
28
- fileSystem.copyFile(modulePath, filepath);
29
- }
30
- }
31
- return {
32
- filepath,
33
- content,
34
- kind: dep.kind,
35
- position: dep.position,
36
- attributes: dep.attributes,
37
- inline: dep.inline,
38
- excludeFromHtml: dep.excludeFromHtml,
39
- packageRole: dep.packageRole,
40
- bundledSourceFilepaths: dep.bundledSourceFilepaths
41
- };
42
- }
43
- const outdir = path.join(this.getAssetsDir(), "vendors");
44
- const bundlerOptions = this.getBundlerOptions(dep);
45
- const filePath = await this.bundleScript({
46
- entrypoint: modulePath,
47
- outdir,
48
- minify: this.isProduction,
49
- naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : "[name]-[hash].[ext]"),
50
- ...bundlerOptions
51
- });
52
- return {
53
- filepath: filePath,
54
- kind: dep.kind,
55
- position: dep.position,
56
- attributes: dep.attributes,
57
- inline: dep.inline,
58
- excludeFromHtml: dep.excludeFromHtml,
59
- packageRole: dep.packageRole,
60
- bundledSourceFilepaths: dep.bundledSourceFilepaths
61
- };
62
- });
63
- }
64
- /**
65
- * Resolves a node-module script entry from the current app boundary.
66
- *
67
- * @remarks
68
- * The build adapter remains the primary resolution surface because Bun/native
69
- * host-owned builds may have a more accurate view of aliases and package
70
- * ownership than core does. The local fallback only runs when that adapter
71
- * resolution is unavailable.
72
- */
73
- resolveModulePath(importPath, rootDir) {
74
- if (path.isAbsolute(importPath) && fileSystem.exists(importPath)) {
75
- return importPath;
76
- }
77
- try {
78
- return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
79
- } catch {
80
- return this.resolveModulePathFallback(importPath, rootDir);
1
+ import path from 'node:path';
2
+ import { fileURLToPath, pathToFileURL } from 'node:url';
3
+ import { fileSystem } from '@ecopages/file-system';
4
+ import { getAppBuildAdapter } from '../../../../../build/build-adapter.js';
5
+ import { BaseScriptProcessor } from '../base/base-script-processor.js';
6
+ /**
7
+ * Processes browser script assets whose entrypoint is referenced by package specifier.
8
+ *
9
+ * @remarks
10
+ * Resolution stays app-boundary-first: prefer the active build adapter, then fall back
11
+ * to ESM export-map resolution, and only then probe a small set of literal file paths.
12
+ */
13
+ export class NodeModuleScriptProcessor extends BaseScriptProcessor {
14
+ async process(dep) {
15
+ const modulePath = this.resolveModulePath(dep.importPath, this.appConfig.rootDir);
16
+ const moduleName = path.basename(modulePath);
17
+ const filename = dep.name ?? `nm-${moduleName}`;
18
+ const shouldBundle = this.shouldBundle(dep);
19
+ const configHash = this.generateHash(JSON.stringify({
20
+ bundle: shouldBundle,
21
+ inline: dep.inline,
22
+ minify: shouldBundle && !dep.inline && this.isProduction,
23
+ opts: dep.bundleOptions,
24
+ }));
25
+ const cachekey = `${this.buildCacheKey(filename, this.generateHash(modulePath), dep)}:${configHash}`;
26
+ return this.getOrProcess(cachekey, async () => {
27
+ if (dep.inline || !shouldBundle) {
28
+ const content = fileSystem.readFileAsBuffer(modulePath).toString();
29
+ const filepath = dep.inline ? undefined : path.join(this.getAssetsDir(), 'vendors', filename);
30
+ if (filepath) {
31
+ fileSystem.ensureDir(path.dirname(filepath));
32
+ if (!fileSystem.exists(filepath) || fileSystem.readFileAsBuffer(filepath).toString() !== content) {
33
+ fileSystem.copyFile(modulePath, filepath);
34
+ }
35
+ }
36
+ return {
37
+ filepath,
38
+ content,
39
+ kind: dep.kind,
40
+ position: dep.position,
41
+ attributes: dep.attributes,
42
+ inline: dep.inline,
43
+ excludeFromHtml: dep.excludeFromHtml,
44
+ packageRole: dep.packageRole,
45
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
46
+ };
47
+ }
48
+ const outdir = path.join(this.getAssetsDir(), 'vendors');
49
+ const bundlerOptions = this.getBundlerOptions(dep);
50
+ const filePath = await this.bundleScript({
51
+ entrypoint: modulePath,
52
+ outdir: outdir,
53
+ minify: this.isProduction,
54
+ naming: bundlerOptions.naming ?? (dep.name ? `${dep.name}-[hash].[ext]` : '[name]-[hash].[ext]'),
55
+ ...bundlerOptions,
56
+ });
57
+ return {
58
+ filepath: filePath,
59
+ kind: dep.kind,
60
+ position: dep.position,
61
+ attributes: dep.attributes,
62
+ inline: dep.inline,
63
+ excludeFromHtml: dep.excludeFromHtml,
64
+ packageRole: dep.packageRole,
65
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
66
+ };
67
+ });
81
68
  }
82
- }
83
- /**
84
- * Resolves browser-owned script specifiers without relying on CommonJS resolution.
85
- *
86
- * @remarks
87
- * This path intentionally stays ESM-first because these assets are emitted as
88
- * browser scripts. We first ask Node's ESM resolver to evaluate the package
89
- * export map from the app boundary. If that still fails, we fall back to a
90
- * bounded filesystem probe so direct file installs and package subpaths like
91
- * `pkg/client/entry` still resolve when the export map does not cover them.
92
- */
93
- resolveModulePathFallback(importPath, rootDir, maxDepth = 5) {
94
- try {
95
- return fileURLToPath(
96
- import.meta.resolve(importPath, pathToFileURL(path.join(rootDir, "package.json")).href)
97
- );
98
- } catch {
69
+ /**
70
+ * Resolves a node-module script entry from the current app boundary.
71
+ *
72
+ * @remarks
73
+ * The build adapter remains the primary resolution surface because Bun/native
74
+ * host-owned builds may have a more accurate view of aliases and package
75
+ * ownership than core does. The local fallback only runs when that adapter
76
+ * resolution is unavailable.
77
+ */
78
+ resolveModulePath(importPath, rootDir) {
79
+ if (path.isAbsolute(importPath) && fileSystem.exists(importPath)) {
80
+ return importPath;
81
+ }
82
+ try {
83
+ return getAppBuildAdapter(this.appConfig).resolve(importPath, rootDir);
84
+ }
85
+ catch {
86
+ return this.resolveModulePathFallback(importPath, rootDir);
87
+ }
99
88
  }
100
- let currentDir = rootDir;
101
- let remainingDepth = maxDepth;
102
- while (remainingDepth >= 0) {
103
- for (const candidatePath of this.getFallbackCandidatePaths(currentDir, importPath)) {
104
- if (fileSystem.exists(candidatePath)) {
105
- return candidatePath;
89
+ /**
90
+ * Resolves browser-owned script specifiers without relying on CommonJS resolution.
91
+ *
92
+ * @remarks
93
+ * This path intentionally stays ESM-first because these assets are emitted as
94
+ * browser scripts. We first ask Node's ESM resolver to evaluate the package
95
+ * export map from the app boundary. If that still fails, we fall back to a
96
+ * bounded filesystem probe so direct file installs and package subpaths like
97
+ * `pkg/client/entry` still resolve when the export map does not cover them.
98
+ */
99
+ resolveModulePathFallback(importPath, rootDir, maxDepth = 5) {
100
+ try {
101
+ return fileURLToPath(import.meta.resolve(importPath, pathToFileURL(path.join(rootDir, 'package.json')).href));
102
+ }
103
+ catch { }
104
+ let currentDir = rootDir;
105
+ let remainingDepth = maxDepth;
106
+ while (remainingDepth >= 0) {
107
+ for (const candidatePath of this.getFallbackCandidatePaths(currentDir, importPath)) {
108
+ if (fileSystem.exists(candidatePath)) {
109
+ return candidatePath;
110
+ }
111
+ }
112
+ const parentDir = path.dirname(currentDir);
113
+ if (parentDir === currentDir) {
114
+ break;
115
+ }
116
+ currentDir = parentDir;
117
+ remainingDepth -= 1;
106
118
  }
107
- }
108
- const parentDir = path.dirname(currentDir);
109
- if (parentDir === currentDir) {
110
- break;
111
- }
112
- currentDir = parentDir;
113
- remainingDepth -= 1;
119
+ throw new Error(`Could not resolve module '${importPath}' from '${rootDir}'`);
120
+ }
121
+ /**
122
+ * Returns the file candidates we accept during the final literal filesystem probe.
123
+ *
124
+ * @remarks
125
+ * This is intentionally small and browser-entry-oriented: direct files, common
126
+ * JS extensions, and `index.*` entrypoints. If a package needs anything more
127
+ * exotic, it should resolve through the adapter or ESM export-map path above.
128
+ */
129
+ getFallbackCandidatePaths(rootDir, importPath) {
130
+ const moduleBasePath = path.join(rootDir, 'node_modules', importPath);
131
+ return [
132
+ moduleBasePath,
133
+ `${moduleBasePath}.js`,
134
+ `${moduleBasePath}.mjs`,
135
+ `${moduleBasePath}.cjs`,
136
+ path.join(moduleBasePath, 'index.js'),
137
+ path.join(moduleBasePath, 'index.mjs'),
138
+ path.join(moduleBasePath, 'index.cjs'),
139
+ ];
114
140
  }
115
- throw new Error(`Could not resolve module '${importPath}' from '${rootDir}'`);
116
- }
117
- /**
118
- * Returns the file candidates we accept during the final literal filesystem probe.
119
- *
120
- * @remarks
121
- * This is intentionally small and browser-entry-oriented: direct files, common
122
- * JS extensions, and `index.*` entrypoints. If a package needs anything more
123
- * exotic, it should resolve through the adapter or ESM export-map path above.
124
- */
125
- getFallbackCandidatePaths(rootDir, importPath) {
126
- const moduleBasePath = path.join(rootDir, "node_modules", importPath);
127
- return [
128
- moduleBasePath,
129
- `${moduleBasePath}.js`,
130
- `${moduleBasePath}.mjs`,
131
- `${moduleBasePath}.cjs`,
132
- path.join(moduleBasePath, "index.js"),
133
- path.join(moduleBasePath, "index.mjs"),
134
- path.join(moduleBasePath, "index.cjs")
135
- ];
136
- }
137
141
  }
138
- export {
139
- NodeModuleScriptProcessor
140
- };
@@ -1,30 +1,28 @@
1
- import path from "node:path";
2
- import { fileSystem } from "@ecopages/file-system";
3
- import { BaseProcessor } from "../base/base-processor.js";
4
- import { applyStylesheetProcessors } from "./stylesheet-processor-pipeline.js";
5
- class ContentStylesheetProcessor extends BaseProcessor {
6
- async process(dep) {
7
- const virtualFilepath = path.join(this.appConfig.absolutePaths.distDir, "styles", "page-bundle.css");
8
- const processedContent = await applyStylesheetProcessors(this.appConfig, dep.content, virtualFilepath);
9
- const hash = this.generateHash(processedContent);
10
- const filename = `style-${hash}.css`;
11
- const cachekey = this.buildCacheKey(filename, hash, dep);
12
- return this.getOrProcess(cachekey, () => {
13
- const filepath = path.join(this.getAssetsDir(), "styles", filename);
14
- if (!dep.inline) fileSystem.write(filepath, processedContent);
15
- return {
16
- filepath: dep.inline ? void 0 : filepath,
17
- content: dep.inline ? processedContent : void 0,
18
- kind: "stylesheet",
19
- position: dep.position,
20
- attributes: dep.attributes,
21
- inline: dep.inline,
22
- packageRole: dep.packageRole,
23
- bundledSourceFilepaths: dep.bundledSourceFilepaths
24
- };
25
- });
26
- }
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { BaseProcessor } from '../base/base-processor.js';
4
+ import { applyStylesheetProcessors } from './stylesheet-processor-pipeline.js';
5
+ export class ContentStylesheetProcessor extends BaseProcessor {
6
+ async process(dep) {
7
+ const virtualFilepath = path.join(this.appConfig.absolutePaths.distDir, 'styles', 'page-bundle.css');
8
+ const processedContent = await applyStylesheetProcessors(this.appConfig, dep.content, virtualFilepath);
9
+ const hash = this.generateHash(processedContent);
10
+ const filename = `style-${hash}.css`;
11
+ const cachekey = this.buildCacheKey(filename, hash, dep);
12
+ return this.getOrProcess(cachekey, () => {
13
+ const filepath = path.join(this.getAssetsDir(), 'styles', filename);
14
+ if (!dep.inline)
15
+ fileSystem.write(filepath, processedContent);
16
+ return {
17
+ filepath: dep.inline ? undefined : filepath,
18
+ content: dep.inline ? processedContent : undefined,
19
+ kind: 'stylesheet',
20
+ position: dep.position,
21
+ attributes: dep.attributes,
22
+ inline: dep.inline,
23
+ packageRole: dep.packageRole,
24
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
25
+ };
26
+ });
27
+ }
27
28
  }
28
- export {
29
- ContentStylesheetProcessor
30
- };
@@ -1,41 +1,35 @@
1
- import path from "node:path";
2
- import { fileSystem } from "@ecopages/file-system";
3
- import { BaseProcessor } from "../base/base-processor.js";
4
- import { applyStylesheetProcessors } from "./stylesheet-processor-pipeline.js";
5
- class FileStylesheetProcessor extends BaseProcessor {
6
- getStyleContent = (srcUrl) => {
7
- return fileSystem.readFileAsBuffer(srcUrl);
8
- };
9
- async process(dep) {
10
- const buffer = this.getStyleContent(dep.filepath);
11
- const rawContent = buffer.toString();
12
- const processedContent = await applyStylesheetProcessors(this.appConfig, rawContent, dep.filepath);
13
- const hash = this.generateHash(processedContent);
14
- const cachekey = this.buildCacheKey(dep.filepath, hash, dep);
15
- return this.getOrProcess(cachekey, () => {
16
- const filepath = path.join(
17
- this.getAssetsDir(),
18
- path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath)
19
- );
20
- const outputBuffer = Buffer.from(processedContent);
21
- if (!dep.inline) {
22
- fileSystem.ensureDir(path.dirname(filepath));
23
- fileSystem.write(filepath, outputBuffer);
24
- }
25
- return {
26
- filepath,
27
- sourceFilepath: dep.filepath,
28
- content: dep.inline ? processedContent : void 0,
29
- kind: "stylesheet",
30
- position: dep.position,
31
- attributes: dep.attributes,
32
- inline: dep.inline,
33
- packageRole: dep.packageRole,
34
- bundledSourceFilepaths: dep.bundledSourceFilepaths
35
- };
36
- });
37
- }
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { BaseProcessor } from '../base/base-processor.js';
4
+ import { applyStylesheetProcessors } from './stylesheet-processor-pipeline.js';
5
+ export class FileStylesheetProcessor extends BaseProcessor {
6
+ getStyleContent = (srcUrl) => {
7
+ return fileSystem.readFileAsBuffer(srcUrl);
8
+ };
9
+ async process(dep) {
10
+ const buffer = this.getStyleContent(dep.filepath);
11
+ const rawContent = buffer.toString();
12
+ const processedContent = await applyStylesheetProcessors(this.appConfig, rawContent, dep.filepath);
13
+ const hash = this.generateHash(processedContent);
14
+ const cachekey = this.buildCacheKey(dep.filepath, hash, dep);
15
+ return this.getOrProcess(cachekey, () => {
16
+ const filepath = path.join(this.getAssetsDir(), path.relative(this.appConfig.absolutePaths.srcDir, dep.filepath));
17
+ const outputBuffer = Buffer.from(processedContent);
18
+ if (!dep.inline) {
19
+ fileSystem.ensureDir(path.dirname(filepath));
20
+ fileSystem.write(filepath, outputBuffer);
21
+ }
22
+ return {
23
+ filepath: filepath,
24
+ sourceFilepath: dep.filepath,
25
+ content: dep.inline ? processedContent : undefined,
26
+ kind: 'stylesheet',
27
+ position: dep.position,
28
+ attributes: dep.attributes,
29
+ inline: dep.inline,
30
+ packageRole: dep.packageRole,
31
+ bundledSourceFilepaths: dep.bundledSourceFilepaths,
32
+ };
33
+ });
34
+ }
38
35
  }
39
- export {
40
- FileStylesheetProcessor
41
- };