@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,43 +1,44 @@
1
- import path from "node:path";
2
- const PROCESSABLE_STYLESHEET_EXTENSIONS = /* @__PURE__ */ new Set([".css", ".scss", ".sass", ".less"]);
1
+ import path from 'node:path';
2
+ const PROCESSABLE_STYLESHEET_EXTENSIONS = new Set(['.css', '.scss', '.sass', '.less']);
3
3
  function isProcessableStylesheet(filepath) {
4
- return PROCESSABLE_STYLESHEET_EXTENSIONS.has(path.extname(filepath));
4
+ return PROCESSABLE_STYLESHEET_EXTENSIONS.has(path.extname(filepath));
5
5
  }
6
+ /**
7
+ * Legacy fallback for processors that transform stylesheets without declaring
8
+ * capabilities (notably PostCSS before capability metadata was required).
9
+ */
6
10
  function shouldRunStylesheetProcessor(processor, filepath) {
7
- const hasCapabilities = processor.getAssetCapabilities().length > 0;
8
- const canProcessStylesheet = processor.canProcessAsset("stylesheet", filepath);
9
- if (canProcessStylesheet) {
10
- return true;
11
- }
12
- if (hasCapabilities) {
13
- return false;
14
- }
15
- return processor.getName().includes("postcss");
16
- }
17
- async function applyStylesheetProcessors(appConfig, content, filepath) {
18
- if (!isProcessableStylesheet(filepath)) {
19
- return content;
20
- }
21
- let transformedContent = content;
22
- const processors = appConfig.processors ? Array.from(appConfig.processors.values()) : [];
23
- for (const processor of processors) {
24
- if (!shouldRunStylesheetProcessor(processor, filepath)) {
25
- continue;
11
+ const hasCapabilities = processor.getAssetCapabilities().length > 0;
12
+ const canProcessStylesheet = processor.canProcessAsset('stylesheet', filepath);
13
+ if (canProcessStylesheet) {
14
+ return true;
26
15
  }
27
- if (!processor.matchesFileFilter(filepath)) {
28
- continue;
16
+ if (hasCapabilities) {
17
+ return false;
29
18
  }
30
- const result = await processor.process(transformedContent, filepath);
31
- if (typeof result === "string") {
32
- transformedContent = result;
33
- continue;
19
+ return processor.getName().includes('postcss');
20
+ }
21
+ export async function applyStylesheetProcessors(appConfig, content, filepath) {
22
+ if (!isProcessableStylesheet(filepath)) {
23
+ return content;
34
24
  }
35
- if (result instanceof Buffer) {
36
- transformedContent = result.toString();
25
+ let transformedContent = content;
26
+ const processors = appConfig.processors ? Array.from(appConfig.processors.values()) : [];
27
+ for (const processor of processors) {
28
+ if (!shouldRunStylesheetProcessor(processor, filepath)) {
29
+ continue;
30
+ }
31
+ if (!processor.matchesFileFilter(filepath)) {
32
+ continue;
33
+ }
34
+ const result = await processor.process(transformedContent, filepath);
35
+ if (typeof result === 'string') {
36
+ transformedContent = result;
37
+ continue;
38
+ }
39
+ if (result instanceof Buffer) {
40
+ transformedContent = result.toString();
41
+ }
37
42
  }
38
- }
39
- return transformedContent;
43
+ return transformedContent;
40
44
  }
41
- export {
42
- applyStylesheetProcessors
43
- };
@@ -1,17 +1,15 @@
1
- function resolveIntegrationPluginForProcessingKey(appConfig, processingKey) {
2
- if (!appConfig.integrations?.length) {
3
- return void 0;
4
- }
5
- const exactMatch = appConfig.integrations.find((integration) => integration.name === processingKey);
6
- if (exactMatch) {
7
- return exactMatch;
8
- }
9
- const baseName = processingKey.split(":")[0];
10
- if (!baseName || baseName === processingKey) {
11
- return void 0;
12
- }
13
- return appConfig.integrations.find((integration) => integration.name === baseName);
1
+ /** Resolves the integration plugin that owns one asset-processing batch key. */
2
+ export function resolveIntegrationPluginForProcessingKey(appConfig, processingKey) {
3
+ if (!appConfig.integrations?.length) {
4
+ return undefined;
5
+ }
6
+ const exactMatch = appConfig.integrations.find((integration) => integration.name === processingKey);
7
+ if (exactMatch) {
8
+ return exactMatch;
9
+ }
10
+ const baseName = processingKey.split(':')[0];
11
+ if (!baseName || baseName === processingKey) {
12
+ return undefined;
13
+ }
14
+ return appConfig.integrations.find((integration) => integration.name === baseName);
14
15
  }
15
- export {
16
- resolveIntegrationPluginForProcessingKey
17
- };
@@ -1,40 +1,28 @@
1
- import { fileSystem } from "@ecopages/file-system";
2
- import { finalizeProcessedAsset } from "./finalize-processed-asset.js";
3
- async function processUngroupedDependency(options) {
4
- const {
5
- dep,
6
- depKey,
7
- getCachedAsset,
8
- getProcessor,
9
- resolveProcessedAssetSrcUrl,
10
- setCachedAsset,
11
- logMissingProcessor,
12
- logMissingFile,
13
- logProcessingError
14
- } = options;
15
- const cached = getCachedAsset(dep, depKey);
16
- if (cached) {
17
- return finalizeProcessedAsset(cached, resolveProcessedAssetSrcUrl);
18
- }
19
- const processor = getProcessor(dep);
20
- if (!processor) {
21
- logMissingProcessor(dep);
22
- return null;
23
- }
24
- if (dep.source === "file" && "filepath" in dep && !fileSystem.exists(dep.filepath)) {
25
- logMissingFile(dep);
26
- return null;
27
- }
28
- try {
29
- const processed = await processor.process(dep);
30
- const finalized = finalizeProcessedAsset(processed, resolveProcessedAssetSrcUrl);
31
- setCachedAsset(dep, depKey, finalized);
32
- return finalized;
33
- } catch (error) {
34
- logProcessingError(dep, error);
35
- return null;
36
- }
1
+ import { fileSystem } from '@ecopages/file-system';
2
+ import { finalizeProcessedAsset } from './finalize-processed-asset.js';
3
+ export async function processUngroupedDependency(options) {
4
+ const { dep, depKey, getCachedAsset, getProcessor, resolveProcessedAssetSrcUrl, setCachedAsset, logMissingProcessor, logMissingFile, logProcessingError, } = options;
5
+ const cached = getCachedAsset(dep, depKey);
6
+ if (cached) {
7
+ return finalizeProcessedAsset(cached, resolveProcessedAssetSrcUrl);
8
+ }
9
+ const processor = getProcessor(dep);
10
+ if (!processor) {
11
+ logMissingProcessor(dep);
12
+ return null;
13
+ }
14
+ if (dep.source === 'file' && 'filepath' in dep && !fileSystem.exists(dep.filepath)) {
15
+ logMissingFile(dep);
16
+ return null;
17
+ }
18
+ try {
19
+ const processed = await processor.process(dep);
20
+ const finalized = finalizeProcessedAsset(processed, resolveProcessedAssetSrcUrl);
21
+ setCachedAsset(dep, depKey, finalized);
22
+ return finalized;
23
+ }
24
+ catch (error) {
25
+ logProcessingError(dep, error);
26
+ return null;
27
+ }
37
28
  }
38
- export {
39
- processUngroupedDependency
40
- };
@@ -1,50 +1,55 @@
1
- import { createBrowserBuildRequest } from "../../build/runtime/build-request-policy.js";
2
- import { requireBuildRuntime } from "../../build/runtime/build-runtime.js";
3
- import { startupTrace } from "../../diagnostics/startup-trace.js";
4
- import { requestBuildDedupe } from "../../diagnostics/request-build-dedupe.js";
5
- import { createBuildRequestIdentity } from "../../build/runtime/build-request-identity.js";
1
+ import { createBrowserBuildRequest } from '../../build/runtime/build-request-policy.js';
2
+ import { requireBuildRuntime } from '../../build/runtime/build-runtime.js';
3
+ import { startupTrace } from '../../diagnostics/startup-trace.js';
4
+ import { requestBuildDedupe } from '../../diagnostics/request-build-dedupe.js';
5
+ import { createBuildRequestIdentity } from '../../build/runtime/build-request-identity.js';
6
6
  function resolveBrowserBundleExecutor(appConfig, profile, executor) {
7
- const buildRuntime = requireBuildRuntime(appConfig);
8
- if (executor === "hmr" && (profile === "hmr-entrypoint" || profile === "hmr-runtime")) {
9
- return buildRuntime.getProfile("browser-hmr");
10
- }
11
- return buildRuntime.getProfile("route-module");
7
+ const buildRuntime = requireBuildRuntime(appConfig);
8
+ if (executor === 'hmr' && (profile === 'hmr-entrypoint' || profile === 'hmr-runtime')) {
9
+ return buildRuntime.getProfile('browser-hmr');
10
+ }
11
+ return buildRuntime.getProfile('route-module');
12
12
  }
13
- class BrowserBundleService {
14
- appConfig;
15
- constructor(appConfig) {
16
- this.appConfig = appConfig;
17
- }
18
- /**
19
- * Runs one browser-targeted build through the app-owned executor.
20
- *
21
- * @remarks
22
- * Browser defaults, app-owned browser plugins, and
23
- * {@link getAppSourceTransforms | app source transforms} are applied here
24
- * so HMR and asset generation do not recreate that policy at each call site.
25
- */
26
- async bundle(options) {
27
- const { profile, executor = "hmr", ...requestInput } = options;
28
- const request = createBrowserBuildRequest(this.appConfig, {
29
- ...requestInput,
30
- profile
31
- });
32
- const buildExecutor = resolveBrowserBundleExecutor(this.appConfig, profile, executor);
33
- const dedupeKey = createBuildRequestIdentity(request);
34
- return requestBuildDedupe.dedupeBuild(dedupeKey, async () => {
35
- const result = await buildExecutor.build(request);
36
- startupTrace.recordBrowserBundle(result.outputs);
37
- return result;
38
- });
39
- }
40
- async bundleGroupedEntries(entries, options) {
41
- const request = {
42
- ...options,
43
- entrypoints: Object.fromEntries(entries.map((entry) => [entry.entryName, entry.entrypoint]))
44
- };
45
- return this.bundle(request);
46
- }
13
+ /**
14
+ * App-owned boundary for browser-oriented bundle work.
15
+ *
16
+ * @remarks
17
+ * Owns shared browser transpile defaults and ensures browser builds run through
18
+ * the app-owned executor rather than direct backend calls. Assembles a complete
19
+ * request via {@link createBrowserBuildRequest} before scheduling.
20
+ */
21
+ export class BrowserBundleService {
22
+ appConfig;
23
+ constructor(appConfig) {
24
+ this.appConfig = appConfig;
25
+ }
26
+ /**
27
+ * Runs one browser-targeted build through the app-owned executor.
28
+ *
29
+ * @remarks
30
+ * Browser defaults, app-owned browser plugins, and
31
+ * {@link getAppSourceTransforms | app source transforms} are applied here
32
+ * so HMR and asset generation do not recreate that policy at each call site.
33
+ */
34
+ async bundle(options) {
35
+ const { profile, executor = 'hmr', ...requestInput } = options;
36
+ const request = createBrowserBuildRequest(this.appConfig, {
37
+ ...requestInput,
38
+ profile,
39
+ });
40
+ const buildExecutor = resolveBrowserBundleExecutor(this.appConfig, profile, executor);
41
+ const dedupeKey = createBuildRequestIdentity(request);
42
+ return requestBuildDedupe.dedupeBuild(dedupeKey, async () => {
43
+ const result = await buildExecutor.build(request);
44
+ startupTrace.recordBrowserBundle(result.outputs);
45
+ return result;
46
+ });
47
+ }
48
+ async bundleGroupedEntries(entries, options) {
49
+ const request = {
50
+ ...options,
51
+ entrypoints: Object.fromEntries(entries.map((entry) => [entry.entryName, entry.entrypoint])),
52
+ };
53
+ return this.bundle(request);
54
+ }
47
55
  }
48
- export {
49
- BrowserBundleService
50
- };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Cache types and interfaces for page caching and ISR
3
+ * @module
4
+ */
5
+ export {};
@@ -1,7 +1,6 @@
1
- import { MemoryCacheStore } from "./memory-cache-store.js";
2
- import { getCacheControlHeader, PageCacheService } from "./page-cache-service.js";
3
- export {
4
- MemoryCacheStore,
5
- PageCacheService,
6
- getCacheControlHeader
7
- };
1
+ /**
2
+ * Cache services exports
3
+ * @module
4
+ */
5
+ export { MemoryCacheStore } from './memory-cache-store.js';
6
+ export { getCacheControlHeader, PageCacheService } from './page-cache-service.js';
@@ -1,98 +1,110 @@
1
- class MemoryCacheStore {
2
- cache = /* @__PURE__ */ new Map();
3
- tagIndex = /* @__PURE__ */ new Map();
4
- maxEntries;
5
- constructor(options = {}) {
6
- this.maxEntries = options.maxEntries ?? 1e3;
7
- }
8
- /**
9
- * Retrieve an entry by key.
10
- * Uses Map's insertion order for LRU tracking - accessed entries are
11
- * deleted and re-inserted to move them to the "most recently used" position.
12
- */
13
- async get(key) {
14
- const entry = this.cache.get(key);
15
- if (!entry) return null;
16
- this.cache.delete(key);
17
- this.cache.set(key, entry);
18
- return entry;
19
- }
20
- /**
21
- * Store an entry, evicting the oldest if at capacity.
22
- * When maxEntries is reached and a new key is added, the first key in
23
- * the Map (oldest/least-recently-used) is evicted to make room.
24
- * Updating an existing key refreshes its LRU position.
25
- */
26
- async set(key, entry) {
27
- const existingEntry = this.cache.get(key);
28
- if (existingEntry) {
29
- for (const tag of existingEntry.tags) {
30
- this.tagIndex.get(tag)?.delete(key);
31
- if (this.tagIndex.get(tag)?.size === 0) {
32
- this.tagIndex.delete(tag);
1
+ /**
2
+ * In-memory cache store with LRU eviction.
3
+ * Suitable for single-instance deployments and development.
4
+ * @module
5
+ */
6
+ /**
7
+ * Simple in-memory cache store with LRU eviction.
8
+ * Uses Map insertion order for LRU tracking.
9
+ */
10
+ export class MemoryCacheStore {
11
+ cache = new Map();
12
+ tagIndex = new Map();
13
+ maxEntries;
14
+ constructor(options = {}) {
15
+ this.maxEntries = options.maxEntries ?? 1000;
16
+ }
17
+ /**
18
+ * Retrieve an entry by key.
19
+ * Uses Map's insertion order for LRU tracking - accessed entries are
20
+ * deleted and re-inserted to move them to the "most recently used" position.
21
+ */
22
+ async get(key) {
23
+ const entry = this.cache.get(key);
24
+ if (!entry)
25
+ return null;
26
+ this.cache.delete(key);
27
+ this.cache.set(key, entry);
28
+ return entry;
29
+ }
30
+ /**
31
+ * Store an entry, evicting the oldest if at capacity.
32
+ * When maxEntries is reached and a new key is added, the first key in
33
+ * the Map (oldest/least-recently-used) is evicted to make room.
34
+ * Updating an existing key refreshes its LRU position.
35
+ */
36
+ async set(key, entry) {
37
+ const existingEntry = this.cache.get(key);
38
+ if (existingEntry) {
39
+ for (const tag of existingEntry.tags) {
40
+ this.tagIndex.get(tag)?.delete(key);
41
+ if (this.tagIndex.get(tag)?.size === 0) {
42
+ this.tagIndex.delete(tag);
43
+ }
44
+ }
45
+ this.cache.delete(key);
46
+ }
47
+ else if (this.cache.size >= this.maxEntries) {
48
+ const oldestKey = this.cache.keys().next().value;
49
+ if (oldestKey)
50
+ await this.delete(oldestKey);
51
+ }
52
+ this.cache.set(key, entry);
53
+ for (const tag of entry.tags) {
54
+ if (!this.tagIndex.has(tag)) {
55
+ this.tagIndex.set(tag, new Set());
56
+ }
57
+ this.tagIndex.get(tag).add(key);
33
58
  }
34
- }
35
- this.cache.delete(key);
36
- } else if (this.cache.size >= this.maxEntries) {
37
- const oldestKey = this.cache.keys().next().value;
38
- if (oldestKey) await this.delete(oldestKey);
39
59
  }
40
- this.cache.set(key, entry);
41
- for (const tag of entry.tags) {
42
- if (!this.tagIndex.has(tag)) {
43
- this.tagIndex.set(tag, /* @__PURE__ */ new Set());
44
- }
45
- this.tagIndex.get(tag).add(key);
60
+ /**
61
+ * Delete an entry and clean up its tag index references.
62
+ * Removes empty tag sets to prevent memory leaks from accumulated tags.
63
+ */
64
+ async delete(key) {
65
+ const entry = this.cache.get(key);
66
+ if (!entry)
67
+ return false;
68
+ for (const tag of entry.tags) {
69
+ this.tagIndex.get(tag)?.delete(key);
70
+ if (this.tagIndex.get(tag)?.size === 0) {
71
+ this.tagIndex.delete(tag);
72
+ }
73
+ }
74
+ return this.cache.delete(key);
46
75
  }
47
- }
48
- /**
49
- * Delete an entry and clean up its tag index references.
50
- * Removes empty tag sets to prevent memory leaks from accumulated tags.
51
- */
52
- async delete(key) {
53
- const entry = this.cache.get(key);
54
- if (!entry) return false;
55
- for (const tag of entry.tags) {
56
- this.tagIndex.get(tag)?.delete(key);
57
- if (this.tagIndex.get(tag)?.size === 0) {
58
- this.tagIndex.delete(tag);
59
- }
76
+ async invalidateByTags(tags) {
77
+ let count = 0;
78
+ const keysToDelete = new Set();
79
+ for (const tag of tags) {
80
+ const keys = this.tagIndex.get(tag);
81
+ if (keys) {
82
+ for (const key of keys) {
83
+ keysToDelete.add(key);
84
+ }
85
+ }
86
+ }
87
+ for (const key of keysToDelete) {
88
+ if (await this.delete(key))
89
+ count++;
90
+ }
91
+ return count;
60
92
  }
61
- return this.cache.delete(key);
62
- }
63
- async invalidateByTags(tags) {
64
- let count = 0;
65
- const keysToDelete = /* @__PURE__ */ new Set();
66
- for (const tag of tags) {
67
- const keys = this.tagIndex.get(tag);
68
- if (keys) {
69
- for (const key of keys) {
70
- keysToDelete.add(key);
93
+ async invalidateByPaths(paths) {
94
+ let count = 0;
95
+ for (const path of paths) {
96
+ if (await this.delete(path))
97
+ count++;
71
98
  }
72
- }
99
+ return count;
73
100
  }
74
- for (const key of keysToDelete) {
75
- if (await this.delete(key)) count++;
101
+ async clear() {
102
+ this.cache.clear();
103
+ this.tagIndex.clear();
76
104
  }
77
- return count;
78
- }
79
- async invalidateByPaths(paths) {
80
- let count = 0;
81
- for (const path of paths) {
82
- if (await this.delete(path)) count++;
105
+ async stats() {
106
+ return {
107
+ entries: this.cache.size,
108
+ };
83
109
  }
84
- return count;
85
- }
86
- async clear() {
87
- this.cache.clear();
88
- this.tagIndex.clear();
89
- }
90
- async stats() {
91
- return {
92
- entries: this.cache.size
93
- };
94
- }
95
110
  }
96
- export {
97
- MemoryCacheStore
98
- };