@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,14 +1,11 @@
1
- import path from "node:path";
1
+ import path from 'node:path';
2
2
  function getEcoTemplateExtension(filePath) {
3
- const { name, ext } = path.parse(filePath);
4
- const nameParts = name.split(".");
5
- const descriptor = nameParts.length > 1 ? nameParts.pop() : void 0;
6
- const templateExtension = descriptor ? `.${descriptor}${ext}` : ext;
7
- return templateExtension;
3
+ const { name, ext } = path.parse(filePath);
4
+ const nameParts = name.split('.');
5
+ const descriptor = nameParts.length > 1 ? nameParts.pop() : undefined;
6
+ const templateExtension = descriptor ? `.${descriptor}${ext}` : ext;
7
+ return templateExtension;
8
8
  }
9
- const PathUtils = {
10
- getEcoTemplateExtension
11
- };
12
- export {
13
- PathUtils
9
+ export const PathUtils = {
10
+ getEcoTemplateExtension,
14
11
  };
@@ -1,41 +1,73 @@
1
- import { parseArgs } from "node:util";
2
- import { getRuntimeArgv } from "./runtime.js";
3
- const DEFAULT_ENTRY_FILE = "app.ts";
4
- const ENTRY_FILE_ENV = "ECOPAGES_ENTRY_FILE";
5
- const entryFileOptions = {
6
- "entry-file": { type: "string", short: "e" }
1
+ import { parseArgs } from 'node:util';
2
+ import { getRuntimeArgv } from './runtime.js';
3
+ /**
4
+ * The default entry file name when no other source provides a value.
5
+ */
6
+ export const DEFAULT_ENTRY_FILE = 'app.ts';
7
+ /**
8
+ * The environment variable used to override the entry file path.
9
+ */
10
+ export const ENTRY_FILE_ENV = 'ECOPAGES_ENTRY_FILE';
11
+ /**
12
+ * Centralized definition of the entry-file CLI argument.
13
+ *
14
+ * Exported so callers (CLI, tests, docs) reference a single source of truth
15
+ * for the flag name, short alias, and type. Keep this in sync with
16
+ * `resolveEntryFile` below.
17
+ */
18
+ export const entryFileOptions = {
19
+ 'entry-file': { type: 'string', short: 'e' },
7
20
  };
8
- const ENTRY_FILE_FLAG = "entry-file";
9
- function resolveEntryFile({
10
- entryFile,
11
- env = process.env,
12
- argv = getRuntimeArgv()
13
- } = {}) {
14
- if (entryFile && entryFile.length > 0) return entryFile;
15
- const fromEnv = env[ENTRY_FILE_ENV];
16
- if (fromEnv && fromEnv.length > 0) return fromEnv;
17
- const fromFlag = readEntryFileFlag(argv);
18
- if (fromFlag) return fromFlag;
19
- return DEFAULT_ENTRY_FILE;
21
+ /**
22
+ * The long flag name for the entry file option. Re-exported as a
23
+ * constant so consumers don't hardcode the string.
24
+ */
25
+ export const ENTRY_FILE_FLAG = 'entry-file';
26
+ /**
27
+ * Resolves the entry file path using standard precedence.
28
+ *
29
+ * This is the single source of truth for entry-file resolution across
30
+ * the CLI, build pipeline, and runtime. Both the CLI layer and the
31
+ * runtime builders call into this function instead of reimplementing
32
+ * the precedence chain.
33
+ *
34
+ * @example
35
+ * resolveEntryFile(); // 'app.ts' (or env/argv)
36
+ * resolveEntryFile({ entryFile: 'src/server.ts' }); // 'src/server.ts'
37
+ * resolveEntryFile({ env: { ECOPAGES_ENTRY_FILE: 'x' }}); // 'x'
38
+ * resolveEntryFile({ argv: ['node', '-e', 'flag.ts'] }); // 'flag.ts'
39
+ */
40
+ export function resolveEntryFile({ entryFile, env = process.env, argv = getRuntimeArgv(), } = {}) {
41
+ if (entryFile && entryFile.length > 0)
42
+ return entryFile;
43
+ const fromEnv = env[ENTRY_FILE_ENV];
44
+ if (fromEnv && fromEnv.length > 0)
45
+ return fromEnv;
46
+ const fromFlag = readEntryFileFlag(argv);
47
+ if (fromFlag)
48
+ return fromFlag;
49
+ return DEFAULT_ENTRY_FILE;
20
50
  }
21
- function readEntryFileFlag(argv = getRuntimeArgv()) {
22
- const { values } = parseArgs({
23
- args: argv.slice(1),
24
- options: { ...entryFileOptions },
25
- strict: false
26
- });
27
- const raw = values[ENTRY_FILE_FLAG];
28
- return typeof raw === "string" && raw.length > 0 ? raw : void 0;
51
+ /**
52
+ * Parses argv for the entry-file flag using the shared `parseArgs` config.
53
+ *
54
+ * Exposed for callers that need the raw flag value without the full
55
+ * precedence chain (e.g. CLI help text, validation).
56
+ */
57
+ export function readEntryFileFlag(argv = getRuntimeArgv()) {
58
+ const { values } = parseArgs({
59
+ args: argv.slice(1),
60
+ options: { ...entryFileOptions },
61
+ strict: false,
62
+ });
63
+ const raw = values[ENTRY_FILE_FLAG];
64
+ return typeof raw === 'string' && raw.length > 0 ? raw : undefined;
29
65
  }
30
- const SERVER_BUNDLE_DIR = ".server";
31
- const SERVER_BUNDLE_FILENAME = "app.mjs";
32
- export {
33
- DEFAULT_ENTRY_FILE,
34
- ENTRY_FILE_ENV,
35
- ENTRY_FILE_FLAG,
36
- SERVER_BUNDLE_DIR,
37
- SERVER_BUNDLE_FILENAME,
38
- entryFileOptions,
39
- readEntryFileFlag,
40
- resolveEntryFile
41
- };
66
+ /**
67
+ * The subdirectory inside `dist/` where the bundled server entry is placed.
68
+ */
69
+ export const SERVER_BUNDLE_DIR = '.server';
70
+ /**
71
+ * The filename of the bundled server entry.
72
+ */
73
+ export const SERVER_BUNDLE_FILENAME = 'app.mjs';
@@ -1,31 +1,27 @@
1
- import path from "node:path";
2
- import { DEFAULT_ECOPAGES_WORK_DIR } from "../config/constants.js";
1
+ import path from 'node:path';
2
+ import { DEFAULT_ECOPAGES_WORK_DIR } from '../config/constants.js';
3
3
  function isInsideNodeModules(directory) {
4
- return path.normalize(directory).split(path.sep).includes("node_modules");
4
+ return path.normalize(directory).split(path.sep).includes('node_modules');
5
5
  }
6
- function resolveInternalWorkDir(appConfig) {
7
- if (appConfig.absolutePaths?.workDir) {
8
- return appConfig.absolutePaths.workDir;
9
- }
10
- if (appConfig.rootDir) {
11
- return path.join(appConfig.rootDir, appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
12
- }
13
- if (appConfig.workDir) {
14
- return appConfig.workDir;
15
- }
16
- return DEFAULT_ECOPAGES_WORK_DIR;
6
+ export function resolveInternalWorkDir(appConfig) {
7
+ if (appConfig.absolutePaths?.workDir) {
8
+ return appConfig.absolutePaths.workDir;
9
+ }
10
+ if (appConfig.rootDir) {
11
+ return path.join(appConfig.rootDir, appConfig.workDir ?? DEFAULT_ECOPAGES_WORK_DIR);
12
+ }
13
+ if (appConfig.workDir) {
14
+ return appConfig.workDir;
15
+ }
16
+ return DEFAULT_ECOPAGES_WORK_DIR;
17
17
  }
18
- function resolveInternalExecutionDir(appConfig) {
19
- const workDir = resolveInternalWorkDir(appConfig);
20
- if (!isInsideNodeModules(workDir)) {
21
- return workDir;
22
- }
23
- if (appConfig.rootDir) {
24
- return path.join(appConfig.rootDir, DEFAULT_ECOPAGES_WORK_DIR);
25
- }
26
- return DEFAULT_ECOPAGES_WORK_DIR;
18
+ export function resolveInternalExecutionDir(appConfig) {
19
+ const workDir = resolveInternalWorkDir(appConfig);
20
+ if (!isInsideNodeModules(workDir)) {
21
+ return workDir;
22
+ }
23
+ if (appConfig.rootDir) {
24
+ return path.join(appConfig.rootDir, DEFAULT_ECOPAGES_WORK_DIR);
25
+ }
26
+ return DEFAULT_ECOPAGES_WORK_DIR;
27
27
  }
28
- export {
29
- resolveInternalExecutionDir,
30
- resolveInternalWorkDir
31
- };
@@ -1,40 +1,31 @@
1
- import { createHash } from "node:crypto";
2
- const RUNTIME_ERRORS = {
3
- BUN_RUNTIME_REQUIRED: "Bun runtime is required"
1
+ import { createHash } from 'node:crypto';
2
+ export const RUNTIME_ERRORS = {
3
+ BUN_RUNTIME_REQUIRED: 'Bun runtime is required',
4
4
  };
5
- function getBunRuntime() {
6
- return globalThis.Bun;
5
+ export function getBunRuntime() {
6
+ return globalThis.Bun;
7
7
  }
8
- function getRequiredBunRuntime() {
9
- const bun = getBunRuntime();
10
- if (!bun) {
11
- throw new Error(RUNTIME_ERRORS.BUN_RUNTIME_REQUIRED);
12
- }
13
- return bun;
8
+ export function getRequiredBunRuntime() {
9
+ const bun = getBunRuntime();
10
+ if (!bun) {
11
+ throw new Error(RUNTIME_ERRORS.BUN_RUNTIME_REQUIRED);
12
+ }
13
+ return bun;
14
14
  }
15
- function getRuntimeArgv() {
16
- return process.argv;
15
+ export function getRuntimeArgv() {
16
+ return process.argv;
17
17
  }
18
- function isDevelopmentRuntime() {
19
- return process.env.NODE_ENV === "development";
18
+ export function isDevelopmentRuntime() {
19
+ return process.env.NODE_ENV === 'development';
20
20
  }
21
- function isProductionRuntime() {
22
- return process.env.NODE_ENV === "production";
21
+ export function isProductionRuntime() {
22
+ return process.env.NODE_ENV === 'production';
23
23
  }
24
- function runtimeHash(content) {
25
- const bun = getBunRuntime();
26
- if (bun) {
27
- return bun.hash(content);
28
- }
29
- const hex = createHash("sha256").update(content).digest("hex").slice(0, 16);
30
- return BigInt(`0x${hex}`);
24
+ export function runtimeHash(content) {
25
+ const bun = getBunRuntime();
26
+ if (bun) {
27
+ return bun.hash(content);
28
+ }
29
+ const hex = createHash('sha256').update(content).digest('hex').slice(0, 16);
30
+ return BigInt(`0x${hex}`);
31
31
  }
32
- export {
33
- RUNTIME_ERRORS,
34
- getBunRuntime,
35
- getRequiredBunRuntime,
36
- getRuntimeArgv,
37
- isDevelopmentRuntime,
38
- isProductionRuntime,
39
- runtimeHash
40
- };
@@ -1,55 +1,63 @@
1
- import { hasKnownStaticExtension } from "./static-file-extensions.js";
2
- const ContentTypeMap = /* @__PURE__ */ new Map([
3
- ["jpg", "image/jpeg"],
4
- ["jpeg", "image/jpeg"],
5
- ["png", "image/png"],
6
- ["gif", "image/gif"],
7
- ["bmp", "image/bmp"],
8
- ["svg", "image/svg+xml"],
9
- ["tiff", "image/tiff"],
10
- ["webp", "image/webp"],
11
- ["avif", "image/avif"],
12
- ["ico", "image/x-icon"],
13
- ["mp3", "audio/mpeg"],
14
- ["ogg", "audio/ogg"],
15
- ["wav", "audio/wav"],
16
- ["mp4", "video/mp4"],
17
- ["webm", "video/webm"],
18
- ["ogv", "video/ogg"],
19
- ["mov", "video/quicktime"],
20
- ["txt", "text/plain"],
21
- ["md", "text/markdown"],
22
- ["html", "text/html"],
23
- ["css", "text/css"],
24
- ["js", "text/javascript"],
25
- ["mjs", "text/javascript"],
26
- ["json", "application/json"],
27
- ["map", "application/json"],
28
- ["xml", "application/xml"],
29
- ["webmanifest", "application/manifest+json"],
30
- ["wasm", "application/wasm"],
31
- ["csv", "text/csv"],
32
- ["ttf", "font/ttf"],
33
- ["woff", "font/woff"],
34
- ["woff2", "font/woff2"],
35
- ["otf", "font/otf"],
36
- ["eot", "application/vnd.ms-fontobject"],
37
- ["gz", "application/x-gzip"],
38
- ["zip", "application/zip"],
39
- ["pdf", "application/pdf"],
40
- ["doc", "application/msword"]
1
+ import { hasKnownStaticExtension } from './static-file-extensions.js';
2
+ const ContentTypeMap = new Map([
3
+ ['jpg', 'image/jpeg'],
4
+ ['jpeg', 'image/jpeg'],
5
+ ['png', 'image/png'],
6
+ ['gif', 'image/gif'],
7
+ ['bmp', 'image/bmp'],
8
+ ['svg', 'image/svg+xml'],
9
+ ['tiff', 'image/tiff'],
10
+ ['webp', 'image/webp'],
11
+ ['avif', 'image/avif'],
12
+ ['ico', 'image/x-icon'],
13
+ ['mp3', 'audio/mpeg'],
14
+ ['ogg', 'audio/ogg'],
15
+ ['wav', 'audio/wav'],
16
+ ['mp4', 'video/mp4'],
17
+ ['webm', 'video/webm'],
18
+ ['ogv', 'video/ogg'],
19
+ ['mov', 'video/quicktime'],
20
+ ['txt', 'text/plain'],
21
+ ['md', 'text/markdown'],
22
+ ['html', 'text/html'],
23
+ ['css', 'text/css'],
24
+ ['js', 'text/javascript'],
25
+ ['mjs', 'text/javascript'],
26
+ ['json', 'application/json'],
27
+ ['map', 'application/json'],
28
+ ['xml', 'application/xml'],
29
+ ['webmanifest', 'application/manifest+json'],
30
+ ['wasm', 'application/wasm'],
31
+ ['csv', 'text/csv'],
32
+ ['ttf', 'font/ttf'],
33
+ ['woff', 'font/woff'],
34
+ ['woff2', 'font/woff2'],
35
+ ['otf', 'font/otf'],
36
+ ['eot', 'application/vnd.ms-fontobject'],
37
+ ['gz', 'application/x-gzip'],
38
+ ['zip', 'application/zip'],
39
+ ['pdf', 'application/pdf'],
40
+ ['doc', 'application/msword'],
41
41
  ]);
42
- const getContentType = (file) => {
43
- const extension = file.split(".").pop() || "txt";
44
- return ContentTypeMap.get(extension) || "text/plain";
42
+ /**
43
+ * Get the content type of a file based on its extension.
44
+ * @param file - The file name.
45
+ * @returns The content type.
46
+ */
47
+ export const getContentType = (file) => {
48
+ const extension = file.split('.').pop() || 'txt';
49
+ return ContentTypeMap.get(extension) || 'text/plain';
45
50
  };
46
- import { hasKnownStaticExtension as hasKnownStaticExtension2 } from "./static-file-extensions.js";
47
- const ServerUtils = {
48
- getContentType,
49
- hasKnownStaticExtension
50
- };
51
- export {
52
- ServerUtils,
53
- getContentType,
54
- hasKnownStaticExtension2 as hasKnownStaticExtension
51
+ /**
52
+ * Check if a file path has a known static file extension.
53
+ * @param file - The file name or path.
54
+ * @returns true if the extension is recognized.
55
+ */
56
+ export { hasKnownStaticExtension } from './static-file-extensions.js';
57
+ /**
58
+ * A module for server utilities.
59
+ */
60
+ export const ServerUtils = {
61
+ getContentType,
62
+ hasKnownStaticExtension,
55
63
  };
@@ -1,48 +1,54 @@
1
- const STATIC_FILE_EXTENSIONS = /* @__PURE__ */ new Set([
2
- "jpg",
3
- "jpeg",
4
- "png",
5
- "gif",
6
- "bmp",
7
- "svg",
8
- "tiff",
9
- "webp",
10
- "avif",
11
- "ico",
12
- "mp3",
13
- "ogg",
14
- "wav",
15
- "mp4",
16
- "webm",
17
- "ogv",
18
- "mov",
19
- "txt",
20
- "md",
21
- "html",
22
- "css",
23
- "js",
24
- "mjs",
25
- "json",
26
- "map",
27
- "xml",
28
- "webmanifest",
29
- "wasm",
30
- "csv",
31
- "ttf",
32
- "woff",
33
- "woff2",
34
- "otf",
35
- "eot",
36
- "gz",
37
- "zip",
38
- "pdf",
39
- "doc"
1
+ /**
2
+ * Known static asset extensions served directly from disk.
3
+ *
4
+ * @remarks
5
+ * Keep this list aligned with server static-file handling and client routers
6
+ * that must bypass SPA navigation for same-origin asset links.
7
+ */
8
+ export const STATIC_FILE_EXTENSIONS = new Set([
9
+ 'jpg',
10
+ 'jpeg',
11
+ 'png',
12
+ 'gif',
13
+ 'bmp',
14
+ 'svg',
15
+ 'tiff',
16
+ 'webp',
17
+ 'avif',
18
+ 'ico',
19
+ 'mp3',
20
+ 'ogg',
21
+ 'wav',
22
+ 'mp4',
23
+ 'webm',
24
+ 'ogv',
25
+ 'mov',
26
+ 'txt',
27
+ 'md',
28
+ 'html',
29
+ 'css',
30
+ 'js',
31
+ 'mjs',
32
+ 'json',
33
+ 'map',
34
+ 'xml',
35
+ 'webmanifest',
36
+ 'wasm',
37
+ 'csv',
38
+ 'ttf',
39
+ 'woff',
40
+ 'woff2',
41
+ 'otf',
42
+ 'eot',
43
+ 'gz',
44
+ 'zip',
45
+ 'pdf',
46
+ 'doc',
40
47
  ]);
41
- function hasKnownStaticExtension(fileOrPath) {
42
- const extension = fileOrPath.split(".").pop();
43
- return extension !== void 0 && STATIC_FILE_EXTENSIONS.has(extension);
48
+ /**
49
+ * Returns whether a path or filename ends with a known static asset extension.
50
+ */
51
+ export function hasKnownStaticExtension(fileOrPath) {
52
+ const extension = fileOrPath.split('.').pop();
53
+ return extension !== undefined && STATIC_FILE_EXTENSIONS.has(extension);
44
54
  }
45
- export {
46
- STATIC_FILE_EXTENSIONS,
47
- hasKnownStaticExtension
48
- };
@@ -1,16 +1,17 @@
1
- import path from "node:path";
2
- function createProjectWatcherIgnorePredicate(absolutePaths) {
3
- const ignoredPrefixes = [absolutePaths.workDir, absolutePaths.distDir];
4
- return (watchedPath) => {
5
- const segments = watchedPath.split(path.sep);
6
- if (segments.includes("node_modules") || segments.includes(".git")) {
7
- return true;
8
- }
9
- return ignoredPrefixes.some(
10
- (prefix) => watchedPath === prefix || watchedPath.startsWith(`${prefix}${path.sep}`)
11
- );
12
- };
1
+ import path from 'node:path';
2
+ /**
3
+ * @remarks
4
+ * chokidar v4+ no longer treats glob strings in `ignored` as patterns. A path
5
+ * predicate keeps node_modules, VCS metadata, and scoped artifact dirs out of
6
+ * the watch tree without descending into symlinked monorepo node_modules.
7
+ */
8
+ export function createProjectWatcherIgnorePredicate(absolutePaths) {
9
+ const ignoredPrefixes = [absolutePaths.workDir, absolutePaths.distDir];
10
+ return (watchedPath) => {
11
+ const segments = watchedPath.split(path.sep);
12
+ if (segments.includes('node_modules') || segments.includes('.git')) {
13
+ return true;
14
+ }
15
+ return ignoredPrefixes.some((prefix) => watchedPath === prefix || watchedPath.startsWith(`${prefix}${path.sep}`));
16
+ };
13
17
  }
14
- export {
15
- createProjectWatcherIgnorePredicate
16
- };