@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,180 +1,191 @@
1
- import { buildInjectorMapScript } from "../../../eco/lazy-injector-map.js";
1
+ import { buildInjectorMapScript } from '../../../eco/lazy-injector-map.js';
2
2
  function cloneTemplateStrings(strings, firstString) {
3
- const nextStrings = [...strings];
4
- nextStrings[0] = firstString;
5
- const rawDescriptor = Object.getOwnPropertyDescriptor(strings, "raw");
6
- if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
7
- const rawStrings = [...rawDescriptor.value];
8
- rawStrings[0] = firstString;
9
- Object.defineProperty(nextStrings, "raw", {
10
- ...rawDescriptor,
11
- value: rawStrings
12
- });
13
- }
14
- return nextStrings;
3
+ const nextStrings = [...strings];
4
+ nextStrings[0] = firstString;
5
+ const rawDescriptor = Object.getOwnPropertyDescriptor(strings, 'raw');
6
+ if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
7
+ const rawStrings = [...rawDescriptor.value];
8
+ rawStrings[0] = firstString;
9
+ Object.defineProperty(nextStrings, 'raw', {
10
+ ...rawDescriptor,
11
+ value: rawStrings,
12
+ });
13
+ }
14
+ return nextStrings;
15
15
  }
16
16
  function cloneTemplateContentWithUpdatedFirstString(content, firstString) {
17
- const descriptors = Object.getOwnPropertyDescriptors(content);
18
- const clonedContent = Object.create(Object.getPrototypeOf(content));
19
- const stringsDescriptor = descriptors.strings;
20
- Object.defineProperties(clonedContent, {
21
- ...descriptors,
22
- strings: {
23
- ...stringsDescriptor,
24
- value: cloneTemplateStrings(content.strings, firstString)
25
- }
26
- });
27
- return clonedContent;
17
+ const descriptors = Object.getOwnPropertyDescriptors(content);
18
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
19
+ const stringsDescriptor = descriptors.strings;
20
+ Object.defineProperties(clonedContent, {
21
+ ...descriptors,
22
+ strings: {
23
+ ...stringsDescriptor,
24
+ value: cloneTemplateStrings(content.strings, firstString),
25
+ },
26
+ });
27
+ return clonedContent;
28
28
  }
29
29
  function cloneMarkupNodeLikeWithUpdatedOuterHtml(content, outerHTML) {
30
- const descriptors = Object.getOwnPropertyDescriptors(content);
31
- const clonedContent = Object.create(Object.getPrototypeOf(content));
32
- const outerHTMLDescriptor = descriptors.outerHTML;
33
- Object.defineProperties(clonedContent, {
34
- ...descriptors,
35
- outerHTML: {
36
- configurable: outerHTMLDescriptor?.configurable ?? true,
37
- enumerable: outerHTMLDescriptor?.enumerable ?? true,
38
- writable: true,
39
- value: outerHTML
40
- }
41
- });
42
- return clonedContent;
30
+ const descriptors = Object.getOwnPropertyDescriptors(content);
31
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
32
+ const outerHTMLDescriptor = descriptors.outerHTML;
33
+ Object.defineProperties(clonedContent, {
34
+ ...descriptors,
35
+ outerHTML: {
36
+ configurable: outerHTMLDescriptor?.configurable ?? true,
37
+ enumerable: outerHTMLDescriptor?.enumerable ?? true,
38
+ writable: true,
39
+ value: outerHTML,
40
+ },
41
+ });
42
+ return clonedContent;
43
43
  }
44
44
  function wrapWithScriptsInjectorMarkup(content, injectorMapScript) {
45
- return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}<\/script>${content}<\/scripts-injector>`;
45
+ return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}</script>${content}</scripts-injector>`;
46
46
  }
47
47
  function cloneTemplateContentWithWrappedInjector(content, injectorMapScript) {
48
- if (content.strings.length === 0) {
49
- return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
50
- }
51
- const nextStrings = [...content.strings];
52
- nextStrings[0] = wrapWithScriptsInjectorMarkup(nextStrings[0] ?? "", injectorMapScript);
53
- nextStrings[nextStrings.length - 1] = `${nextStrings[nextStrings.length - 1] ?? ""}<\/scripts-injector>`;
54
- const rawDescriptor = Object.getOwnPropertyDescriptor(content.strings, "raw");
55
- if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
56
- const rawStrings = [...rawDescriptor.value];
57
- rawStrings[0] = wrapWithScriptsInjectorMarkup(rawStrings[0] ?? "", injectorMapScript);
58
- rawStrings[rawStrings.length - 1] = `${rawStrings[rawStrings.length - 1] ?? ""}<\/scripts-injector>`;
59
- Object.defineProperty(nextStrings, "raw", {
60
- ...rawDescriptor,
61
- value: rawStrings
62
- });
63
- }
64
- const descriptors = Object.getOwnPropertyDescriptors(content);
65
- const clonedContent = Object.create(Object.getPrototypeOf(content));
66
- const stringsDescriptor = descriptors.strings;
67
- Object.defineProperties(clonedContent, {
68
- ...descriptors,
69
- strings: {
70
- ...stringsDescriptor,
71
- value: nextStrings
48
+ if (content.strings.length === 0) {
49
+ return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
72
50
  }
73
- });
74
- return clonedContent;
51
+ const nextStrings = [...content.strings];
52
+ nextStrings[0] = wrapWithScriptsInjectorMarkup(nextStrings[0] ?? '', injectorMapScript);
53
+ nextStrings[nextStrings.length - 1] = `${nextStrings[nextStrings.length - 1] ?? ''}</scripts-injector>`;
54
+ const rawDescriptor = Object.getOwnPropertyDescriptor(content.strings, 'raw');
55
+ if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
56
+ const rawStrings = [...rawDescriptor.value];
57
+ rawStrings[0] = wrapWithScriptsInjectorMarkup(rawStrings[0] ?? '', injectorMapScript);
58
+ rawStrings[rawStrings.length - 1] = `${rawStrings[rawStrings.length - 1] ?? ''}</scripts-injector>`;
59
+ Object.defineProperty(nextStrings, 'raw', {
60
+ ...rawDescriptor,
61
+ value: rawStrings,
62
+ });
63
+ }
64
+ const descriptors = Object.getOwnPropertyDescriptors(content);
65
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
66
+ const stringsDescriptor = descriptors.strings;
67
+ Object.defineProperties(clonedContent, {
68
+ ...descriptors,
69
+ strings: {
70
+ ...stringsDescriptor,
71
+ value: nextStrings,
72
+ },
73
+ });
74
+ return clonedContent;
75
75
  }
76
- function isThenable(value) {
77
- return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
76
+ /**
77
+ * Returns `true` when `value` is a thenable (Promise-like) object.
78
+ *
79
+ * Used to transparently handle both synchronous and asynchronous component
80
+ * render results without requiring every caller to branch on `instanceof Promise`.
81
+ *
82
+ * @typeParam T Expected resolved type of the thenable.
83
+ */
84
+ export function isThenable(value) {
85
+ return (typeof value === 'object' &&
86
+ value !== null &&
87
+ 'then' in value &&
88
+ typeof value.then === 'function');
78
89
  }
79
90
  function isTemplateContentShape(value) {
80
- return typeof value === "object" && value !== null && Array.isArray(value.strings) && ((value.values ?? void 0) === void 0 || Array.isArray(value.values));
91
+ return (typeof value === 'object' &&
92
+ value !== null &&
93
+ Array.isArray(value.strings) &&
94
+ ((value.values ?? undefined) === undefined ||
95
+ Array.isArray(value.values)));
81
96
  }
82
97
  function isMarkupNodeLikeShape(value) {
83
- return typeof value === "object" && value !== null && typeof value.nodeType === "number";
98
+ return (typeof value === 'object' && value !== null && typeof value.nodeType === 'number');
84
99
  }
85
- function isMarkupNodeLike(value) {
86
- return isMarkupNodeLikeShape(value);
100
+ /** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
101
+ export function isMarkupNodeLike(value) {
102
+ return isMarkupNodeLikeShape(value);
87
103
  }
88
- function isOpaqueForeignChildValue(children) {
89
- if (children === null || typeof children !== "object") {
90
- return false;
91
- }
92
- if (Array.isArray(children)) {
93
- return false;
94
- }
95
- if ("$$typeof" in children) {
96
- return false;
97
- }
98
- if ("strings" in children && Array.isArray(children.strings)) {
99
- return false;
100
- }
101
- if (isMarkupNodeLikeShape(children)) {
102
- return false;
103
- }
104
- const prototype = Object.getPrototypeOf(children);
105
- return prototype === Object.prototype || prototype === null;
104
+ /**
105
+ * Returns whether a value is a plain opaque object that string serializers would
106
+ * coerce via `String(value)` rather than render as markup.
107
+ *
108
+ * @remarks
109
+ * Template results (`strings`/`values`), markup nodes, arrays, and framework
110
+ * element markers (`$$typeof`) are not opaque. Cross-integration children that
111
+ * are only plain objects must use EcoEmbed or already-serialized HTML.
112
+ */
113
+ export function isOpaqueForeignChildValue(children) {
114
+ if (children === null || typeof children !== 'object') {
115
+ return false;
116
+ }
117
+ if (Array.isArray(children)) {
118
+ return false;
119
+ }
120
+ if ('$$typeof' in children) {
121
+ return false;
122
+ }
123
+ if ('strings' in children && Array.isArray(children.strings)) {
124
+ return false;
125
+ }
126
+ if (isMarkupNodeLikeShape(children)) {
127
+ return false;
128
+ }
129
+ const prototype = Object.getPrototypeOf(children);
130
+ return prototype === Object.prototype || prototype === null;
106
131
  }
107
- function assertForeignChildrenNotOpaque(children, context) {
108
- if (!isOpaqueForeignChildValue(children)) {
109
- return;
110
- }
111
- const childTag = Object.prototype.toString.call(children);
112
- throw new TypeError(
113
- `[ecopages] ${context} refused to coerce opaque foreign children (${childTag}). Use EcoEmbed for cross-integration children or pass already-serialized HTML.`
114
- );
132
+ /**
133
+ * Throws when foreign-path children would be coerced from an opaque object.
134
+ */
135
+ export function assertForeignChildrenNotOpaque(children, context) {
136
+ if (!isOpaqueForeignChildValue(children)) {
137
+ return;
138
+ }
139
+ const childTag = Object.prototype.toString.call(children);
140
+ throw new TypeError(`[ecopages] ${context} refused to coerce opaque foreign children (${childTag}). Use EcoEmbed for cross-integration children or pass already-serialized HTML.`);
115
141
  }
116
142
  function injectTriggerAttributeIntoString(content, triggerId) {
117
- const str = content;
118
- let i = 0;
119
- while (i < str.length) {
120
- if (str[i] !== "<") {
121
- i++;
122
- continue;
143
+ const str = content;
144
+ let i = 0;
145
+ while (i < str.length) {
146
+ if (str[i] !== '<') {
147
+ i++;
148
+ continue;
149
+ }
150
+ const next = str[i + 1];
151
+ if (next === '!' || next === '?') {
152
+ const end = str.indexOf('>', i);
153
+ if (end === -1)
154
+ break;
155
+ i = end + 1;
156
+ continue;
157
+ }
158
+ if (next && /[a-zA-Z]/.test(next)) {
159
+ const tagSlice = str.slice(i + 1);
160
+ const nameEnd = tagSlice.search(/[\s/>]/);
161
+ if (nameEnd === -1)
162
+ break;
163
+ const insertAt = i + 1 + nameEnd;
164
+ return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
165
+ }
166
+ break;
123
167
  }
124
- const next = str[i + 1];
125
- if (next === "!" || next === "?") {
126
- const end = str.indexOf(">", i);
127
- if (end === -1) break;
128
- i = end + 1;
129
- continue;
168
+ return str;
169
+ }
170
+ export function addTriggerAttribute(content, triggerId) {
171
+ if (isTemplateContentShape(content)) {
172
+ if (content.strings.length === 0) {
173
+ return String(content);
174
+ }
175
+ return cloneTemplateContentWithUpdatedFirstString(content, injectTriggerAttributeIntoString(content.strings[0] ?? '', triggerId));
130
176
  }
131
- if (next && /[a-zA-Z]/.test(next)) {
132
- const tagSlice = str.slice(i + 1);
133
- const nameEnd = tagSlice.search(/[\s/>]/);
134
- if (nameEnd === -1) break;
135
- const insertAt = i + 1 + nameEnd;
136
- return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
177
+ if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
178
+ return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, injectTriggerAttributeIntoString(content.outerHTML, triggerId));
137
179
  }
138
- break;
139
- }
140
- return str;
180
+ return injectTriggerAttributeIntoString(String(content), triggerId);
141
181
  }
142
- function addTriggerAttribute(content, triggerId) {
143
- if (isTemplateContentShape(content)) {
144
- if (content.strings.length === 0) {
145
- return String(content);
182
+ export function wrapWithScriptsInjector(content, lazyGroups) {
183
+ const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
184
+ if (isTemplateContentShape(content)) {
185
+ return cloneTemplateContentWithWrappedInjector(content, injectorMapScript);
146
186
  }
147
- return cloneTemplateContentWithUpdatedFirstString(
148
- content,
149
- injectTriggerAttributeIntoString(content.strings[0] ?? "", triggerId)
150
- );
151
- }
152
- if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === "string") {
153
- return cloneMarkupNodeLikeWithUpdatedOuterHtml(
154
- content,
155
- injectTriggerAttributeIntoString(content.outerHTML, triggerId)
156
- );
157
- }
158
- return injectTriggerAttributeIntoString(String(content), triggerId);
159
- }
160
- function wrapWithScriptsInjector(content, lazyGroups) {
161
- const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
162
- if (isTemplateContentShape(content)) {
163
- return cloneTemplateContentWithWrappedInjector(content, injectorMapScript);
164
- }
165
- if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === "string") {
166
- return cloneMarkupNodeLikeWithUpdatedOuterHtml(
167
- content,
168
- wrapWithScriptsInjectorMarkup(content.outerHTML, injectorMapScript)
169
- );
170
- }
171
- return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
187
+ if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
188
+ return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, wrapWithScriptsInjectorMarkup(content.outerHTML, injectorMapScript));
189
+ }
190
+ return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
172
191
  }
173
- export {
174
- addTriggerAttribute,
175
- assertForeignChildrenNotOpaque,
176
- isMarkupNodeLike,
177
- isOpaqueForeignChildValue,
178
- isThenable,
179
- wrapWithScriptsInjector
180
- };