@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,54 +1,79 @@
1
- import path from "node:path";
2
- import { createJsxCacheKey, createPluginCacheKey, createSourceTransformCacheKey } from "../cache/cache-keys.js";
1
+ import path from 'node:path';
2
+ import { createJsxCacheKey, createPluginCacheKey, createSourceTransformCacheKey } from '../cache/cache-keys.js';
3
3
  function normalizeEntrypoints(entrypoints) {
4
- if (Array.isArray(entrypoints)) {
5
- return entrypoints.map((entrypoint) => path.resolve(entrypoint)).sort().join("|");
6
- }
7
- return Object.entries(entrypoints).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${key}:${path.resolve(value)}`).join("|");
4
+ if (Array.isArray(entrypoints)) {
5
+ return entrypoints
6
+ .map((entrypoint) => path.resolve(entrypoint))
7
+ .sort()
8
+ .join('|');
9
+ }
10
+ return Object.entries(entrypoints)
11
+ .sort(([left], [right]) => left.localeCompare(right))
12
+ .map(([key, value]) => `${key}:${path.resolve(value)}`)
13
+ .join('|');
8
14
  }
15
+ /**
16
+ * Preserves list order for collections where Rolldown precedence depends on position.
17
+ */
9
18
  function normalizeOrderedStringList(values, label) {
10
- if (!values || values.length === 0) {
11
- return `${label}:default`;
12
- }
13
- return `${label}:${values.join(",")}`;
19
+ if (!values || values.length === 0) {
20
+ return `${label}:default`;
21
+ }
22
+ return `${label}:${values.join(',')}`;
14
23
  }
24
+ /**
25
+ * Sorts unordered sets so equivalent membership produces one identity.
26
+ */
15
27
  function normalizeUnorderedStringList(values, label) {
16
- if (!values || values.length === 0) {
17
- return `${label}:default`;
18
- }
19
- return `${label}:${[...values].sort().join(",")}`;
28
+ if (!values || values.length === 0) {
29
+ return `${label}:default`;
30
+ }
31
+ return `${label}:${[...values].sort().join(',')}`;
20
32
  }
21
33
  function normalizeDefine(define) {
22
- if (!define || Object.keys(define).length === 0) {
23
- return "define:default";
24
- }
25
- return `define:${Object.entries(define).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${key}=${value}`).join(",")}`;
34
+ if (!define || Object.keys(define).length === 0) {
35
+ return 'define:default';
36
+ }
37
+ return `define:${Object.entries(define)
38
+ .sort(([left], [right]) => left.localeCompare(right))
39
+ .map(([key, value]) => `${key}=${value}`)
40
+ .join(',')}`;
26
41
  }
27
- function createBuildRequestIdentity(options) {
28
- return [
29
- normalizeEntrypoints(options.entrypoints),
30
- options.root ? path.resolve(options.root) : "root:default",
31
- options.outdir ? path.resolve(options.outdir) : "outdir:default",
32
- options.outbase ? path.resolve(options.outbase) : "outbase:default",
33
- options.splitting ?? "splitting:default",
34
- options.bundle ?? "bundle:default",
35
- options.externalPackages ?? "externalPackages:default",
36
- options.target ?? "target:default",
37
- options.format ?? "format:default",
38
- options.sourcemap ?? "sourcemap:default",
39
- options.minify ?? "minify:default",
40
- options.treeshaking ?? "treeshaking:default",
41
- options.naming ?? "naming:default",
42
- normalizeOrderedStringList(options.conditions, "conditions"),
43
- normalizeDefine(options.define),
44
- normalizeUnorderedStringList(options.external, "external"),
45
- createJsxCacheKey(options.jsx),
46
- createPluginCacheKey(options.plugins),
47
- createSourceTransformCacheKey(options.sourceTransforms)
48
- ].join("::");
42
+ /**
43
+ * Canonical identity for one complete {@link BuildOptions} request.
44
+ *
45
+ * @remarks
46
+ * Semantically unordered collections (`external`, `define` keys, array entrypoints)
47
+ * are sorted. Plugin, `conditions`, and source-transform order is preserved because
48
+ * Rolldown hook and `conditionNames` precedence depend on it.
49
+ *
50
+ * Deprecated / ignored adapter fields (`splitting`, `bundle`, `outbase`) still
51
+ * participate in the key so requests that differ only on those fields do not
52
+ * coalesce. Empty `conditions` / `define` / `external` normalize to the same
53
+ * sentinel as `undefined`.
54
+ */
55
+ export function createBuildRequestIdentity(options) {
56
+ return [
57
+ normalizeEntrypoints(options.entrypoints),
58
+ options.root ? path.resolve(options.root) : 'root:default',
59
+ options.outdir ? path.resolve(options.outdir) : 'outdir:default',
60
+ options.outbase ? path.resolve(options.outbase) : 'outbase:default',
61
+ options.splitting ?? 'splitting:default',
62
+ options.bundle ?? 'bundle:default',
63
+ options.externalPackages ?? 'externalPackages:default',
64
+ options.target ?? 'target:default',
65
+ options.format ?? 'format:default',
66
+ options.sourcemap ?? 'sourcemap:default',
67
+ options.minify ?? 'minify:default',
68
+ options.treeshaking ?? 'treeshaking:default',
69
+ options.naming ?? 'naming:default',
70
+ normalizeOrderedStringList(options.conditions, 'conditions'),
71
+ normalizeDefine(options.define),
72
+ normalizeUnorderedStringList(options.external, 'external'),
73
+ createJsxCacheKey(options.jsx),
74
+ createPluginCacheKey(options.plugins),
75
+ createSourceTransformCacheKey(options.sourceTransforms),
76
+ ].join('::');
49
77
  }
50
- const createBuildOptionsDedupeKey = createBuildRequestIdentity;
51
- export {
52
- createBuildOptionsDedupeKey,
53
- createBuildRequestIdentity
54
- };
78
+ /** @deprecated Use {@link createBuildRequestIdentity}. */
79
+ export const createBuildOptionsDedupeKey = createBuildRequestIdentity;
@@ -1,46 +1,84 @@
1
- import { getAppBrowserBuildPlugins, getAppServerBuildPlugins, getAppTranspileOptions } from "../build-adapter.js";
2
- import { resolveBuildProfileOptions } from "./build-profile-options.js";
3
- import { getJsxOwnershipPlugins } from "../browser/jsx-ownership-plugins.js";
4
- import { getAppSourceTransforms } from "../../plugins/source-transform.js";
5
- function resolveServerAppBuildPlugins(appConfig) {
6
- return [...getAppServerBuildPlugins(appConfig), ...getJsxOwnershipPlugins(appConfig)];
1
+ import { getAppBrowserBuildPlugins, getAppServerBuildPlugins, getAppTranspileOptions } from '../build-adapter.js';
2
+ import { resolveBuildProfileOptions } from './build-profile-options.js';
3
+ import { getJsxOwnershipPlugins } from '../browser/jsx-ownership-plugins.js';
4
+ import { getAppSourceTransforms } from '../../plugins/source-transform.js';
5
+ /**
6
+ * Resolves app-owned server plugins plus JSX ownership for one config.
7
+ *
8
+ * @remarks
9
+ * Always goes through {@link getAppServerBuildPlugins} so sealed-manifest and
10
+ * loader-fallback apps share one plugin list with the alias resolver. Used by
11
+ * both request assembly and unified-graph cache keys.
12
+ */
13
+ export function resolveServerAppBuildPlugins(appConfig) {
14
+ return [...getAppServerBuildPlugins(appConfig), ...getJsxOwnershipPlugins(appConfig)];
7
15
  }
8
- function mergeCallerBuildPlugins(appPlugins, callerPlugins) {
9
- if (!callerPlugins || callerPlugins.length === 0) {
10
- return appPlugins;
11
- }
12
- const appByName = new Map(appPlugins.map((plugin) => [plugin.name, plugin]));
13
- const uniqueCallerPlugins = callerPlugins.filter((plugin) => !appByName.has(plugin.name));
14
- return [...uniqueCallerPlugins, ...appPlugins];
16
+ /**
17
+ * Merges caller plugins with app-owned manifest plugins.
18
+ *
19
+ * @remarks
20
+ * App-manifest plugins cannot be silently replaced by same-name caller plugins.
21
+ * Unique caller plugins are prepended so first-wins Rolldown hooks (for example
22
+ * React vendor/alias rewrites) still run before general app loaders. Use
23
+ * `excludeAppBuildPlugins` on browser requests to omit app-owned plugins.
24
+ */
25
+ export function mergeCallerBuildPlugins(appPlugins, callerPlugins) {
26
+ if (!callerPlugins || callerPlugins.length === 0) {
27
+ return appPlugins;
28
+ }
29
+ const appByName = new Map(appPlugins.map((plugin) => [plugin.name, plugin]));
30
+ const uniqueCallerPlugins = callerPlugins.filter((plugin) => !appByName.has(plugin.name));
31
+ return [...uniqueCallerPlugins, ...appPlugins];
15
32
  }
16
- function createServerBuildRequest(appConfig, input) {
17
- const profile = input.profile ?? "route-module";
18
- const plugins = mergeCallerBuildPlugins(resolveServerAppBuildPlugins(appConfig), input.plugins);
19
- const { plugins: _callerPlugins, profile: _profile, ...overrides } = input;
20
- return {
21
- ...resolveBuildProfileOptions(profile, appConfig, overrides),
22
- ...overrides,
23
- entrypoints: input.entrypoints,
24
- ...plugins.length > 0 ? { plugins } : {}
25
- };
33
+ /**
34
+ * Assembles a complete server-oriented {@link BuildOptions} before scheduling.
35
+ *
36
+ * @remarks
37
+ * Defaults `profile` to `'route-module'`. Plugins are
38
+ * {@link resolveServerAppBuildPlugins} plus unique caller contributions via
39
+ * {@link mergeCallerBuildPlugins}. Does not attach `sourceTransforms` — unlike
40
+ * {@link createBrowserBuildRequest}. Pass the returned options into
41
+ * {@link BuildRuntime.getProfile}; the runtime no longer injects plugins.
42
+ */
43
+ export function createServerBuildRequest(appConfig, input) {
44
+ const profile = input.profile ?? 'route-module';
45
+ const plugins = mergeCallerBuildPlugins(resolveServerAppBuildPlugins(appConfig), input.plugins);
46
+ const { plugins: _callerPlugins, profile: _profile, ...overrides } = input;
47
+ return {
48
+ ...resolveBuildProfileOptions(profile, appConfig, overrides),
49
+ ...overrides,
50
+ entrypoints: input.entrypoints,
51
+ ...(plugins.length > 0 ? { plugins } : {}),
52
+ };
26
53
  }
27
- function createBrowserBuildRequest(appConfig, input) {
28
- const { profile, excludeAppBuildPlugins, plugins: callerPlugins, ...overrides } = input;
29
- const appBrowserPlugins = getAppBrowserBuildPlugins(appConfig);
30
- const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0 ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name)) : appBrowserPlugins;
31
- const plugins = mergeCallerBuildPlugins(filteredAppBrowserPlugins, callerPlugins);
32
- return {
33
- ...resolveBuildProfileOptions("browser-hmr", appConfig, overrides),
34
- ...getAppTranspileOptions(appConfig, profile),
35
- ...overrides,
36
- entrypoints: input.entrypoints,
37
- plugins,
38
- sourceTransforms: getAppSourceTransforms(appConfig)
39
- };
54
+ /**
55
+ * Assembles a complete browser-oriented {@link BuildOptions} before scheduling.
56
+ *
57
+ * @remarks
58
+ * Applies {@link resolveBuildProfileOptions} for `'browser-hmr'` (browser target
59
+ * defaults), then overlays {@link getAppTranspileOptions} for the given
60
+ * {@link BuildTranspileProfile}. That profile selects transpile settings only;
61
+ * the {@link BuildRuntime} executor slot is chosen later by the caller
62
+ * (typically {@link BrowserBundleService}).
63
+ *
64
+ * Always attaches {@link getAppSourceTransforms}. App browser plugins come from
65
+ * {@link getAppBrowserBuildPlugins} (includes JSX ownership); use
66
+ * `excludeAppBuildPlugins` to omit app-owned names. Caller plugins cannot
67
+ * replace app-manifest names ({@link mergeCallerBuildPlugins}).
68
+ */
69
+ export function createBrowserBuildRequest(appConfig, input) {
70
+ const { profile, excludeAppBuildPlugins, plugins: callerPlugins, ...overrides } = input;
71
+ const appBrowserPlugins = getAppBrowserBuildPlugins(appConfig);
72
+ const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0
73
+ ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name))
74
+ : appBrowserPlugins;
75
+ const plugins = mergeCallerBuildPlugins(filteredAppBrowserPlugins, callerPlugins);
76
+ return {
77
+ ...resolveBuildProfileOptions('browser-hmr', appConfig, overrides),
78
+ ...getAppTranspileOptions(appConfig, profile),
79
+ ...overrides,
80
+ entrypoints: input.entrypoints,
81
+ plugins,
82
+ sourceTransforms: getAppSourceTransforms(appConfig),
83
+ };
40
84
  }
41
- export {
42
- createBrowserBuildRequest,
43
- createServerBuildRequest,
44
- mergeCallerBuildPlugins,
45
- resolveServerAppBuildPlugins
46
- };
@@ -1,65 +1,75 @@
1
- import { availableParallelism } from "node:os";
2
- import { getAppBuildAdapter } from "../build-adapter.js";
3
- import { ParallelBuildExecutor } from "./parallel-build-executor.js";
4
- import { DedupingBuildExecutor } from "./deduping-build-executor.js";
5
- import { SerializedBuildExecutor } from "./serialized-build-executor.js";
1
+ import { availableParallelism } from 'node:os';
2
+ import { getAppBuildAdapter } from '../build-adapter.js';
3
+ import { ParallelBuildExecutor } from './parallel-build-executor.js';
4
+ import { DedupingBuildExecutor } from './deduping-build-executor.js';
5
+ import { SerializedBuildExecutor } from './serialized-build-executor.js';
6
6
  function resolveParallelismLimit() {
7
- return Math.max(1, availableParallelism() - 1);
7
+ return Math.max(1, availableParallelism() - 1);
8
8
  }
9
9
  function patchAppRuntime(appConfig, patch) {
10
- appConfig.runtime = {
11
- ...appConfig.runtime ?? {},
12
- ...patch
13
- };
10
+ appConfig.runtime = {
11
+ ...(appConfig.runtime ?? {}),
12
+ ...patch,
13
+ };
14
14
  }
15
15
  class AppBuildRuntime {
16
- serverEntryExecutor;
17
- routeModuleExecutor;
18
- hmrExecutor;
19
- constructor(appConfig) {
20
- const adapter = getAppBuildAdapter(appConfig);
21
- const limit = resolveParallelismLimit();
22
- this.serverEntryExecutor = new SerializedBuildExecutor(adapter);
23
- this.routeModuleExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, limit));
24
- this.hmrExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, Math.min(3, limit)));
25
- }
26
- getProfile(profile) {
27
- switch (profile) {
28
- case "server-entry":
29
- return this.serverEntryExecutor;
30
- case "route-module":
31
- return this.routeModuleExecutor;
32
- case "browser-hmr":
33
- return this.hmrExecutor;
16
+ serverEntryExecutor;
17
+ routeModuleExecutor;
18
+ hmrExecutor;
19
+ constructor(appConfig) {
20
+ const adapter = getAppBuildAdapter(appConfig);
21
+ const limit = resolveParallelismLimit();
22
+ this.serverEntryExecutor = new SerializedBuildExecutor(adapter);
23
+ this.routeModuleExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, limit));
24
+ this.hmrExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, Math.min(3, limit)));
34
25
  }
35
- }
36
- /**
37
- * No-op for profile teardown.
38
- *
39
- * @remarks
40
- * Rolldown-owned profiles use one-shot builds, and Vite-host profiles only
41
- * wrap a boundary marker. Neither owns a long-lived engine to close.
42
- */
43
- async dispose() {
44
- }
26
+ getProfile(profile) {
27
+ switch (profile) {
28
+ case 'server-entry':
29
+ return this.serverEntryExecutor;
30
+ case 'route-module':
31
+ return this.routeModuleExecutor;
32
+ case 'browser-hmr':
33
+ return this.hmrExecutor;
34
+ }
35
+ }
36
+ /**
37
+ * No-op for profile teardown.
38
+ *
39
+ * @remarks
40
+ * Rolldown-owned profiles use one-shot builds, and Vite-host profiles only
41
+ * wrap a boundary marker. Neither owns a long-lived engine to close.
42
+ */
43
+ async dispose() { }
45
44
  }
46
- function getBuildRuntime(appConfig) {
47
- return appConfig.runtime?.buildRuntime;
45
+ export function getBuildRuntime(appConfig) {
46
+ return appConfig.runtime?.buildRuntime;
48
47
  }
49
- function requireBuildRuntime(appConfig) {
50
- return getBuildRuntime(appConfig) ?? installBuildRuntime(appConfig);
48
+ /**
49
+ * Returns the installed build runtime, installing it when missing.
50
+ */
51
+ export function requireBuildRuntime(appConfig) {
52
+ return getBuildRuntime(appConfig) ?? installBuildRuntime(appConfig);
51
53
  }
52
- function installBuildRuntime(appConfig) {
53
- const buildRuntime = new AppBuildRuntime(appConfig);
54
- patchAppRuntime(appConfig, { buildRuntime });
55
- return buildRuntime;
54
+ /**
55
+ * Installs profile-based build executors for one app instance.
56
+ *
57
+ * @remarks
58
+ * For Rolldown ownership, server-entry stays serialized single-flight while
59
+ * route-module and browser-HMR run in parallel one-shot builds. Vite-host
60
+ * profiles wrap a boundary marker and reject framework-owned build attempts.
61
+ * Profiles do not inject app plugins — assemble complete
62
+ * {@link BuildOptions} with {@link createServerBuildRequest} /
63
+ * {@link createBrowserBuildRequest} (or {@link BrowserBundleService}) first.
64
+ */
65
+ export function installBuildRuntime(appConfig) {
66
+ const buildRuntime = new AppBuildRuntime(appConfig);
67
+ patchAppRuntime(appConfig, { buildRuntime });
68
+ return buildRuntime;
56
69
  }
57
- async function disposeAppBuildRuntime(appConfig) {
58
- await getBuildRuntime(appConfig)?.dispose();
70
+ /**
71
+ * No-op retained for server teardown call sites.
72
+ */
73
+ export async function disposeAppBuildRuntime(appConfig) {
74
+ await getBuildRuntime(appConfig)?.dispose();
59
75
  }
60
- export {
61
- disposeAppBuildRuntime,
62
- getBuildRuntime,
63
- installBuildRuntime,
64
- requireBuildRuntime
65
- };
@@ -1,34 +1,40 @@
1
- import { createBuildRequestIdentity } from "./build-request-identity.js";
2
- import { createBuildRequestIdentity as createBuildRequestIdentity2, createBuildOptionsDedupeKey } from "./build-request-identity.js";
3
- class DedupingBuildExecutor {
4
- inner;
5
- inFlight = /* @__PURE__ */ new Map();
6
- constructor(inner) {
7
- this.inner = inner;
8
- }
9
- build(options) {
10
- const key = createBuildRequestIdentity(options);
11
- const existing = this.inFlight.get(key);
12
- if (existing) {
13
- return existing;
1
+ import { createBuildRequestIdentity } from './build-request-identity.js';
2
+ export { createBuildRequestIdentity, createBuildOptionsDedupeKey } from './build-request-identity.js';
3
+ /**
4
+ * In-flight build coalescing wrapper.
5
+ *
6
+ * @remarks
7
+ * `ParallelBuildExecutor` allows concurrent builds but does not dedupe identical
8
+ * options. Multiple callers (route import, browser bundles, HMR) can hit the
9
+ * same Rolldown request before disk or import caches warm. This wrapper shares
10
+ * one inner `build()` promise per dedupe key until it settles.
11
+ *
12
+ * Wrap route-module and browser-hmr profiles only; server-entry stays serialized.
13
+ */
14
+ export class DedupingBuildExecutor {
15
+ inner;
16
+ inFlight = new Map();
17
+ constructor(inner) {
18
+ this.inner = inner;
19
+ }
20
+ build(options) {
21
+ const key = createBuildRequestIdentity(options);
22
+ const existing = this.inFlight.get(key);
23
+ if (existing) {
24
+ return existing;
25
+ }
26
+ const buildPromise = this.inner.build(options).finally(() => {
27
+ if (this.inFlight.get(key) === buildPromise) {
28
+ this.inFlight.delete(key);
29
+ }
30
+ });
31
+ this.inFlight.set(key, buildPromise);
32
+ return buildPromise;
33
+ }
34
+ unwrap() {
35
+ return this.inner;
36
+ }
37
+ getInFlightCountForTests() {
38
+ return this.inFlight.size;
14
39
  }
15
- const buildPromise = this.inner.build(options).finally(() => {
16
- if (this.inFlight.get(key) === buildPromise) {
17
- this.inFlight.delete(key);
18
- }
19
- });
20
- this.inFlight.set(key, buildPromise);
21
- return buildPromise;
22
- }
23
- unwrap() {
24
- return this.inner;
25
- }
26
- getInFlightCountForTests() {
27
- return this.inFlight.size;
28
- }
29
40
  }
30
- export {
31
- DedupingBuildExecutor,
32
- createBuildOptionsDedupeKey,
33
- createBuildRequestIdentity2 as createBuildRequestIdentity
34
- };
@@ -1,52 +1,60 @@
1
- class ParallelBuildExecutor {
2
- inner;
3
- limit;
4
- activeCount = 0;
5
- queue = [];
6
- constructor(inner, limit) {
7
- this.inner = inner;
8
- this.limit = Math.max(1, limit);
9
- }
10
- build(options) {
11
- return new Promise((resolve, reject) => {
12
- this.queue.push({
13
- operation: () => this.inner.build(options),
14
- resolve,
15
- reject
16
- });
17
- this.drainQueue();
18
- });
19
- }
20
- drainQueue() {
21
- while (this.activeCount < this.limit && this.queue.length > 0) {
22
- const next = this.queue.shift();
23
- if (!next) {
24
- return;
25
- }
26
- this.activeCount += 1;
27
- void next.operation().then((result) => {
28
- next.resolve(result);
29
- }).catch((error) => {
30
- next.reject(error);
31
- }).finally(() => {
32
- this.activeCount -= 1;
33
- this.drainQueue();
34
- });
1
+ /**
2
+ * Concurrency-limited build executor wrapper.
3
+ *
4
+ * @remarks
5
+ * Runs up to `limit` builds concurrently. Use for independent route-module
6
+ * and HMR browser builds where FIFO serialization is unnecessary.
7
+ */
8
+ export class ParallelBuildExecutor {
9
+ inner;
10
+ limit;
11
+ activeCount = 0;
12
+ queue = [];
13
+ constructor(inner, limit) {
14
+ this.inner = inner;
15
+ this.limit = Math.max(1, limit);
16
+ }
17
+ build(options) {
18
+ return new Promise((resolve, reject) => {
19
+ this.queue.push({
20
+ operation: () => this.inner.build(options),
21
+ resolve,
22
+ reject,
23
+ });
24
+ this.drainQueue();
25
+ });
26
+ }
27
+ drainQueue() {
28
+ while (this.activeCount < this.limit && this.queue.length > 0) {
29
+ const next = this.queue.shift();
30
+ if (!next) {
31
+ return;
32
+ }
33
+ this.activeCount += 1;
34
+ void next
35
+ .operation()
36
+ .then((result) => {
37
+ next.resolve(result);
38
+ })
39
+ .catch((error) => {
40
+ next.reject(error);
41
+ })
42
+ .finally(() => {
43
+ this.activeCount -= 1;
44
+ this.drainQueue();
45
+ });
46
+ }
47
+ }
48
+ unwrap() {
49
+ return this.inner;
50
+ }
51
+ getConcurrencyLimitForTests() {
52
+ return this.limit;
53
+ }
54
+ getActiveCountForTests() {
55
+ return this.activeCount;
56
+ }
57
+ getQueuedCountForTests() {
58
+ return this.queue.length;
35
59
  }
36
- }
37
- unwrap() {
38
- return this.inner;
39
- }
40
- getConcurrencyLimitForTests() {
41
- return this.limit;
42
- }
43
- getActiveCountForTests() {
44
- return this.activeCount;
45
- }
46
- getQueuedCountForTests() {
47
- return this.queue.length;
48
- }
49
60
  }
50
- export {
51
- ParallelBuildExecutor
52
- };