@ecopages/core 0.2.0-beta.30 → 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,100 +1,162 @@
1
- import { SchemaError, validateStandardSchema } from "./validate-standard-schema.js";
2
- class SchemaValidationService {
3
- /**
4
- * Validates request data against provided schemas.
5
- *
6
- * Validates body, query parameters, and headers against their respective schemas.
7
- * All validations are performed, and errors are aggregated from all sources.
8
- *
9
- * @param source - The data to validate (body, query, headers)
10
- * @param schemas - The Standard Schema validators for each source
11
- * @returns Validation result with validated data or aggregated errors
12
- *
13
- * @example
14
- * ```typescript
15
- * const result = await service.validateRequest(
16
- * { body: { name: 'John', age: 30 } },
17
- * { body: z.object({ name: z.string(), age: z.number() }) }
18
- * );
19
- *
20
- * if (result.success) {
21
- * const validated = result.data.body;
22
- * } else {
23
- * console.error(result.errors);
24
- * }
25
- * ```
26
- */
27
- async validateRequest(source, schemas) {
28
- const validated = {};
29
- const allErrors = [];
30
- if (schemas.body && source.body !== void 0) {
31
- const result = await this.validateWithSchema(schemas.body, source.body);
32
- if (!result.success) {
33
- allErrors.push(...result.errors || []);
34
- } else {
35
- validated.body = result.data;
36
- }
1
+ import { SchemaError, validateStandardSchema } from './validate-standard-schema.js';
2
+ /**
3
+ * Service for validating request data using Standard Schema compliant validators.
4
+ *
5
+ * This service provides a unified interface for validating HTTP request data (body, query parameters, headers)
6
+ * using any validation library that implements the Standard Schema specification.
7
+ *
8
+ * @example Using with Zod
9
+ * ```typescript
10
+ * import { z } from 'zod';
11
+ * import { SchemaValidationService } from './schema-validation-service.js';
12
+ *
13
+ * const service = new SchemaValidationService();
14
+ * const result = await service.validateRequest(
15
+ * { body: { title: 'Hello', count: 42 } },
16
+ * { body: z.object({ title: z.string(), count: z.number() }) }
17
+ * );
18
+ *
19
+ * if (result.success) {
20
+ * console.log(result.data.body);
21
+ * }
22
+ * ```
23
+ *
24
+ * @example Using with Valibot
25
+ * ```typescript
26
+ * import * as v from 'valibot';
27
+ *
28
+ * const result = await service.validateRequest(
29
+ * { query: { page: '1' } },
30
+ * { query: v.object({ page: v.string() }) }
31
+ * );
32
+ * ```
33
+ *
34
+ * @example Using with ArkType
35
+ * ```typescript
36
+ * import { type } from 'arktype';
37
+ *
38
+ * const result = await service.validateRequest(
39
+ * { headers: { 'authorization': 'Bearer token' } },
40
+ * { headers: type({ authorization: 'string' }) }
41
+ * );
42
+ * ```
43
+ *
44
+ * @example Multiple sources
45
+ * ```typescript
46
+ * const result = await service.validateRequest(
47
+ * {
48
+ * body: { title: 'Post' },
49
+ * query: { format: 'json' },
50
+ * headers: { 'content-type': 'application/json' }
51
+ * },
52
+ * {
53
+ * body: z.object({ title: z.string() }),
54
+ * query: v.object({ format: v.string() }),
55
+ * headers: type({ 'content-type': 'string' })
56
+ * }
57
+ * );
58
+ * ```
59
+ *
60
+ * Supported libraries: Zod, Valibot, ArkType, Effect Schema (with standardSchemaV1 wrapper)
61
+ */
62
+ export class SchemaValidationService {
63
+ /**
64
+ * Validates request data against provided schemas.
65
+ *
66
+ * Validates body, query parameters, and headers against their respective schemas.
67
+ * All validations are performed, and errors are aggregated from all sources.
68
+ *
69
+ * @param source - The data to validate (body, query, headers)
70
+ * @param schemas - The Standard Schema validators for each source
71
+ * @returns Validation result with validated data or aggregated errors
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const result = await service.validateRequest(
76
+ * { body: { name: 'John', age: 30 } },
77
+ * { body: z.object({ name: z.string(), age: z.number() }) }
78
+ * );
79
+ *
80
+ * if (result.success) {
81
+ * const validated = result.data.body;
82
+ * } else {
83
+ * console.error(result.errors);
84
+ * }
85
+ * ```
86
+ */
87
+ async validateRequest(source, schemas) {
88
+ const validated = {};
89
+ const allErrors = [];
90
+ if (schemas.body && source.body !== undefined) {
91
+ const result = await this.validateWithSchema(schemas.body, source.body);
92
+ if (!result.success) {
93
+ allErrors.push(...(result.errors || []));
94
+ }
95
+ else {
96
+ validated.body = result.data;
97
+ }
98
+ }
99
+ if (schemas.query && source.query) {
100
+ const result = await this.validateWithSchema(schemas.query, source.query);
101
+ if (!result.success) {
102
+ allErrors.push(...(result.errors || []));
103
+ }
104
+ else {
105
+ validated.query = result.data;
106
+ }
107
+ }
108
+ if (schemas.headers && source.headers) {
109
+ const result = await this.validateWithSchema(schemas.headers, source.headers);
110
+ if (!result.success) {
111
+ allErrors.push(...(result.errors || []));
112
+ }
113
+ else {
114
+ validated.headers = result.data;
115
+ }
116
+ }
117
+ if (schemas.params && source.params) {
118
+ const result = await this.validateWithSchema(schemas.params, source.params);
119
+ if (!result.success) {
120
+ allErrors.push(...(result.errors || []));
121
+ }
122
+ else {
123
+ validated.params = result.data;
124
+ }
125
+ }
126
+ if (allErrors.length > 0) {
127
+ return { success: false, errors: allErrors };
128
+ }
129
+ return { success: true, data: validated };
37
130
  }
38
- if (schemas.query && source.query) {
39
- const result = await this.validateWithSchema(schemas.query, source.query);
40
- if (!result.success) {
41
- allErrors.push(...result.errors || []);
42
- } else {
43
- validated.query = result.data;
44
- }
45
- }
46
- if (schemas.headers && source.headers) {
47
- const result = await this.validateWithSchema(schemas.headers, source.headers);
48
- if (!result.success) {
49
- allErrors.push(...result.errors || []);
50
- } else {
51
- validated.headers = result.data;
52
- }
53
- }
54
- if (schemas.params && source.params) {
55
- const result = await this.validateWithSchema(schemas.params, source.params);
56
- if (!result.success) {
57
- allErrors.push(...result.errors || []);
58
- } else {
59
- validated.params = result.data;
60
- }
61
- }
62
- if (allErrors.length > 0) {
63
- return { success: false, errors: allErrors };
64
- }
65
- return { success: true, data: validated };
66
- }
67
- /**
68
- * Validates a single value against a Standard Schema.
69
- */
70
- mapSchemaIssue(issue) {
71
- return {
72
- message: issue.message,
73
- path: issue.path?.map((p) => typeof p === "object" && "key" in p ? p.key : p)
74
- };
75
- }
76
- async validateWithSchema(schema, data) {
77
- try {
78
- const value = await validateStandardSchema(schema, data);
79
- return { success: true, data: value };
80
- } catch (error) {
81
- if (error instanceof SchemaError) {
131
+ /**
132
+ * Validates a single value against a Standard Schema.
133
+ */
134
+ mapSchemaIssue(issue) {
82
135
  return {
83
- success: false,
84
- errors: error.issues.map((issue) => this.mapSchemaIssue(issue))
136
+ message: issue.message,
137
+ path: issue.path?.map((p) => (typeof p === 'object' && 'key' in p ? p.key : p)),
85
138
  };
86
- }
87
- return {
88
- success: false,
89
- errors: [
90
- {
91
- message: error instanceof Error ? error.message : "Validation failed"
92
- }
93
- ]
94
- };
95
139
  }
96
- }
140
+ async validateWithSchema(schema, data) {
141
+ try {
142
+ const value = await validateStandardSchema(schema, data);
143
+ return { success: true, data: value };
144
+ }
145
+ catch (error) {
146
+ if (error instanceof SchemaError) {
147
+ return {
148
+ success: false,
149
+ errors: error.issues.map((issue) => this.mapSchemaIssue(issue)),
150
+ };
151
+ }
152
+ return {
153
+ success: false,
154
+ errors: [
155
+ {
156
+ message: error instanceof Error ? error.message : 'Validation failed',
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ }
97
162
  }
98
- export {
99
- SchemaValidationService
100
- };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,14 +1,14 @@
1
- import { SchemaError } from "@standard-schema/utils";
2
- import { SchemaError as SchemaError2 } from "@standard-schema/utils";
3
- async function validateStandardSchema(schema, value) {
4
- const resultOrPromise = schema["~standard"].validate(value);
5
- const result = resultOrPromise instanceof Promise ? await resultOrPromise : resultOrPromise;
6
- if (result.issues) {
7
- throw new SchemaError(result.issues);
8
- }
9
- return result.value;
1
+ import { SchemaError } from '@standard-schema/utils';
2
+ export { SchemaError } from '@standard-schema/utils';
3
+ /**
4
+ * Validates a value with any Standard Schema-compliant validator.
5
+ * Throws {@link SchemaError} when validation fails.
6
+ */
7
+ export async function validateStandardSchema(schema, value) {
8
+ const resultOrPromise = schema['~standard'].validate(value);
9
+ const result = resultOrPromise instanceof Promise ? await resultOrPromise : resultOrPromise;
10
+ if (result.issues) {
11
+ throw new SchemaError(result.issues);
12
+ }
13
+ return result.value;
10
14
  }
11
- export {
12
- SchemaError2 as SchemaError,
13
- validateStandardSchema
14
- };
@@ -1,22 +1,38 @@
1
- import path from "node:path";
2
- import { getAppPageBrowserGraphSession } from "../route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js";
3
- function shouldPrebuildProductionPageBrowserGraphs() {
4
- return process.env.NODE_ENV === "production";
1
+ import path from 'node:path';
2
+ import { getAppPageBrowserGraphSession } from '../route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js';
3
+ /**
4
+ * Returns whether production static export should warm Page Browser Graphs before rendering.
5
+ *
6
+ * @remarks
7
+ * True only when `NODE_ENV === 'production'`. Independent of `force` and of
8
+ * unified pages-graph env flags. Does not persist a disk manifest.
9
+ */
10
+ export function shouldPrebuildProductionPageBrowserGraphs() {
11
+ return process.env.NODE_ENV === 'production';
5
12
  }
6
- function clearProductionPageBrowserGraphSession(appConfig) {
7
- getAppPageBrowserGraphSession(appConfig).clearPolicyRecords("production");
13
+ /**
14
+ * Clears in-memory production Page Browser Graph session records.
15
+ *
16
+ * @remarks
17
+ * Clears only the `'production'` policy so a failed or force export cannot
18
+ * reuse staged graph output. Development session records are left intact.
19
+ */
20
+ export function clearProductionPageBrowserGraphSession(appConfig) {
21
+ getAppPageBrowserGraphSession(appConfig).clearPolicyRecords('production');
8
22
  }
9
- async function prebuildProductionPageBrowserGraphs(routeFiles, routeRendererFactory) {
10
- const uniqueRouteFiles = [...new Set(routeFiles.map((routeFile) => path.resolve(routeFile)))].sort(
11
- (left, right) => left.localeCompare(right)
12
- );
13
- for (const routeFile of uniqueRouteFiles) {
14
- const renderer = routeRendererFactory.getPageRenderer(routeFile);
15
- await renderer.prebuildProductionPageBrowserGraph(routeFile);
16
- }
23
+ /**
24
+ * Warms production Page Browser Graphs for the supplied static route files.
25
+ *
26
+ * @remarks
27
+ * Deduplicates and lexicographically sorts absolute route paths, then calls
28
+ * each integration renderer's `prebuildProductionPageBrowserGraph` sequentially
29
+ * (activates integration runtime, then resolves into
30
+ * `page-browser-graph-session`). Does not persist a disk manifest.
31
+ */
32
+ export async function prebuildProductionPageBrowserGraphs(routeFiles, routeRendererFactory) {
33
+ const uniqueRouteFiles = [...new Set(routeFiles.map((routeFile) => path.resolve(routeFile)))].sort((left, right) => left.localeCompare(right));
34
+ for (const routeFile of uniqueRouteFiles) {
35
+ const renderer = routeRendererFactory.getPageRenderer(routeFile);
36
+ await renderer.prebuildProductionPageBrowserGraph(routeFile);
37
+ }
17
38
  }
18
- export {
19
- clearProductionPageBrowserGraphSession,
20
- prebuildProductionPageBrowserGraphs,
21
- shouldPrebuildProductionPageBrowserGraphs
22
- };
@@ -1,31 +1,36 @@
1
- import { matchesAnyPathPattern, normalizePathname } from "../utils/path-pattern.js";
2
- import { buildSitemapLocation } from "./sitemap.js";
3
- function resolveSitemapLocations(input) {
4
- const exclude = input.sitemap.exclude ?? [];
5
- const locations = [];
6
- const seen = /* @__PURE__ */ new Set();
7
- for (const pathname of input.eligiblePathnames) {
8
- const normalized = normalizePathname(pathname);
9
- if (matchesAnyPathPattern(normalized, exclude)) {
10
- continue;
1
+ import { matchesAnyPathPattern, normalizePathname } from '../utils/path-pattern.js';
2
+ import { buildSitemapLocation } from './sitemap.js';
3
+ /**
4
+ * Builds the ordered absolute locations for sitemap.xml.
5
+ *
6
+ * @remarks
7
+ * `eligiblePathnames` must already be successfully exported and robots-indexable.
8
+ * Filtering here is only `sitemap.exclude`, then `extraUrls` are appended.
9
+ * `extraUrls` always include (deduped) and are not subject to `exclude` or page robots.
10
+ */
11
+ export function resolveSitemapLocations(input) {
12
+ const exclude = input.sitemap.exclude ?? [];
13
+ const locations = [];
14
+ const seen = new Set();
15
+ for (const pathname of input.eligiblePathnames) {
16
+ const normalized = normalizePathname(pathname);
17
+ if (matchesAnyPathPattern(normalized, exclude)) {
18
+ continue;
19
+ }
20
+ const location = buildSitemapLocation(input.baseUrl, normalized);
21
+ if (seen.has(location)) {
22
+ continue;
23
+ }
24
+ seen.add(location);
25
+ locations.push(location);
11
26
  }
12
- const location = buildSitemapLocation(input.baseUrl, normalized);
13
- if (seen.has(location)) {
14
- continue;
27
+ for (const extraUrl of input.sitemap.extraUrls ?? []) {
28
+ const location = buildSitemapLocation(input.baseUrl, extraUrl);
29
+ if (seen.has(location)) {
30
+ continue;
31
+ }
32
+ seen.add(location);
33
+ locations.push(location);
15
34
  }
16
- seen.add(location);
17
- locations.push(location);
18
- }
19
- for (const extraUrl of input.sitemap.extraUrls ?? []) {
20
- const location = buildSitemapLocation(input.baseUrl, extraUrl);
21
- if (seen.has(location)) {
22
- continue;
23
- }
24
- seen.add(location);
25
- locations.push(location);
26
- }
27
- return locations;
35
+ return locations;
28
36
  }
29
- export {
30
- resolveSitemapLocations
31
- };
@@ -1,33 +1,42 @@
1
- import { escapeXmlText } from "../utils/html-escaping.js";
2
- import { normalizePathname } from "../utils/path-pattern.js";
3
- function buildSitemapLocation(baseUrl, pathnameOrUrl) {
4
- const trimmed = pathnameOrUrl.trim();
5
- if (/^https?:\/\//i.test(trimmed)) {
6
- return normalizeLocation(trimmed);
7
- }
8
- const origin = baseUrl.replace(/\/+$/, "");
9
- const pathname = normalizePathname(trimmed);
10
- return pathname === "/" ? `${origin}/` : `${origin}${pathname}`;
1
+ import { escapeXmlText } from '../utils/html-escaping.js';
2
+ import { normalizePathname } from '../utils/path-pattern.js';
3
+ /**
4
+ * Joins a base origin with a pathname or absolute URL into a sitemap `<loc>` value.
5
+ *
6
+ * @remarks
7
+ * Trailing slashes are stripped except for the site root (`/`). Absolute `http(s)`
8
+ * URLs in `extraUrls` are returned as-is (still slash-normalized).
9
+ */
10
+ export function buildSitemapLocation(baseUrl, pathnameOrUrl) {
11
+ const trimmed = pathnameOrUrl.trim();
12
+ if (/^https?:\/\//i.test(trimmed)) {
13
+ return normalizeLocation(trimmed);
14
+ }
15
+ const origin = baseUrl.replace(/\/+$/, '');
16
+ const pathname = normalizePathname(trimmed);
17
+ return pathname === '/' ? `${origin}/` : `${origin}${pathname}`;
11
18
  }
12
- function renderSitemap(locations) {
13
- const urls = locations.map((loc) => ` <url>
14
- <loc>${escapeXmlText(normalizeLocation(loc))}</loc>
15
- </url>`).join("\n");
16
- return [
17
- '<?xml version="1.0" encoding="UTF-8"?>',
18
- '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
19
- urls,
20
- "</urlset>",
21
- ""
22
- ].join("\n");
19
+ /**
20
+ * Renders a sitemap.org 0.9 urlset document from absolute location URLs.
21
+ *
22
+ * @remarks
23
+ * Callers are responsible for deduplication; this serializer preserves input order.
24
+ */
25
+ export function renderSitemap(locations) {
26
+ const urls = locations
27
+ .map((loc) => ` <url>\n <loc>${escapeXmlText(normalizeLocation(loc))}</loc>\n </url>`)
28
+ .join('\n');
29
+ return [
30
+ '<?xml version="1.0" encoding="UTF-8"?>',
31
+ '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
32
+ urls,
33
+ '</urlset>',
34
+ '',
35
+ ].join('\n');
23
36
  }
24
37
  function normalizeLocation(location) {
25
- if (/^https?:\/\/[^/]+\/?$/i.test(location)) {
26
- return `${location.replace(/\/+$/, "")}/`;
27
- }
28
- return location.replace(/\/+$/, "");
38
+ if (/^https?:\/\/[^/]+\/?$/i.test(location)) {
39
+ return `${location.replace(/\/+$/, '')}/`;
40
+ }
41
+ return location.replace(/\/+$/, '');
29
42
  }
30
- export {
31
- buildSitemapLocation,
32
- renderSitemap
33
- };
@@ -1,59 +1,37 @@
1
- import {
2
- createBuildInputsFingerprint,
3
- hashAppConfigFile,
4
- haveBuildInputsChanged
5
- } from "../build/cache/build-input-fingerprint.js";
6
- import { clearPersistedProductionBuildCacheManifests } from "../build/cache/production-build-cache.js";
7
- import {} from "../services/module-loading/route-module-build-manifest.js";
8
- import {
9
- getSharedRouteModuleBuildCache,
10
- getServerModuleBuildCacheOutdir
11
- } from "../services/module-loading/route-module-build-cache-registry.js";
12
- import {
13
- collectBuildInputContributors,
14
- createBuildInputsFingerprint as createBuildInputsFingerprint2,
15
- didBuildInputContributorChange,
16
- hashAppConfigFile as hashAppConfigFile2,
17
- haveBuildInputsChanged as haveBuildInputsChanged2
18
- } from "../build/cache/build-input-fingerprint.js";
19
- function createRouteModuleStaticRenderCacheContext(appConfig) {
20
- return {
21
- configHash: hashAppConfigFile(appConfig),
22
- buildInputsFingerprint: createBuildInputsFingerprint(appConfig)
23
- };
1
+ import { createBuildInputsFingerprint, hashAppConfigFile, haveBuildInputsChanged, } from '../build/cache/build-input-fingerprint.js';
2
+ import { clearPersistedProductionBuildCacheManifests } from '../build/cache/production-build-cache.js';
3
+ import {} from '../services/module-loading/route-module-build-manifest.js';
4
+ import { getSharedRouteModuleBuildCache, getServerModuleBuildCacheOutdir, } from '../services/module-loading/route-module-build-cache-registry.js';
5
+ export { collectBuildInputContributors, createBuildInputsFingerprint, didBuildInputContributorChange, hashAppConfigFile, haveBuildInputsChanged, } from '../build/cache/build-input-fingerprint.js';
6
+ /** Builds the static-render invalidation context for one app config. */
7
+ export function createRouteModuleStaticRenderCacheContext(appConfig) {
8
+ return {
9
+ configHash: hashAppConfigFile(appConfig),
10
+ buildInputsFingerprint: createBuildInputsFingerprint(appConfig),
11
+ };
24
12
  }
25
- function shouldResetStaticExportDirectory(appConfig, force = false) {
26
- if (force) {
27
- return true;
28
- }
29
- if (haveBuildInputsChanged(appConfig)) {
30
- return true;
31
- }
32
- const routeModuleCache = getSharedRouteModuleBuildCache(getServerModuleBuildCacheOutdir(appConfig), appConfig);
33
- return !routeModuleCache.isIncrementalStaticGenerationAvailable(
34
- createRouteModuleStaticRenderCacheContext(appConfig)
35
- );
13
+ /** Returns whether `dist/` should be wiped before the next static export. */
14
+ export function shouldResetStaticExportDirectory(appConfig, force = false) {
15
+ if (force) {
16
+ return true;
17
+ }
18
+ if (haveBuildInputsChanged(appConfig)) {
19
+ return true;
20
+ }
21
+ const routeModuleCache = getSharedRouteModuleBuildCache(getServerModuleBuildCacheOutdir(appConfig), appConfig);
22
+ return !routeModuleCache.isIncrementalStaticGenerationAvailable(createRouteModuleStaticRenderCacheContext(appConfig));
36
23
  }
37
- function clearProductionBuildCaches(appConfig) {
38
- if (process.env.NODE_ENV !== "production") {
39
- return;
40
- }
41
- clearPersistedProductionBuildCacheManifests(appConfig);
42
- for (const cache of appConfig.runtime?.routeModuleBuildCaches?.values() ?? []) {
43
- cache.resetMemory();
44
- }
45
- appConfig.runtime?.routeModuleBuildCaches?.clear();
46
- if (appConfig.runtime) {
47
- appConfig.runtime.buildRuntime = void 0;
48
- }
24
+ /** Removes persisted production build caches so the next build recomputes everything. */
25
+ export function clearProductionBuildCaches(appConfig) {
26
+ if (process.env.NODE_ENV !== 'production') {
27
+ return;
28
+ }
29
+ clearPersistedProductionBuildCacheManifests(appConfig);
30
+ for (const cache of appConfig.runtime?.routeModuleBuildCaches?.values() ?? []) {
31
+ cache.resetMemory();
32
+ }
33
+ appConfig.runtime?.routeModuleBuildCaches?.clear();
34
+ if (appConfig.runtime) {
35
+ appConfig.runtime.buildRuntime = undefined;
36
+ }
49
37
  }
50
- export {
51
- clearProductionBuildCaches,
52
- collectBuildInputContributors,
53
- createBuildInputsFingerprint2 as createBuildInputsFingerprint,
54
- createRouteModuleStaticRenderCacheContext,
55
- didBuildInputContributorChange,
56
- hashAppConfigFile2 as hashAppConfigFile,
57
- haveBuildInputsChanged2 as haveBuildInputsChanged,
58
- shouldResetStaticExportDirectory
59
- };
@@ -0,0 +1 @@
1
+ export {};