@atlaspack/core 2.16.2-canary.48 → 2.16.2-canary.481

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 (380) hide show
  1. package/CHANGELOG.md +1324 -0
  2. package/dist/AssetGraph.js +523 -0
  3. package/dist/Atlaspack.js +701 -0
  4. package/dist/AtlaspackConfig.js +324 -0
  5. package/dist/AtlaspackConfig.schema.js +117 -0
  6. package/dist/BundleGraph.js +1906 -0
  7. package/dist/CommittedAsset.js +142 -0
  8. package/dist/Dependency.js +125 -0
  9. package/dist/Environment.js +132 -0
  10. package/dist/EnvironmentManager.js +108 -0
  11. package/dist/IdentifierRegistry.js +38 -0
  12. package/dist/InternalConfig.js +37 -0
  13. package/dist/PackagerRunner.js +470 -0
  14. package/dist/ReporterRunner.js +151 -0
  15. package/dist/RequestTracker.js +1297 -0
  16. package/dist/SymbolPropagation.js +624 -0
  17. package/dist/TargetDescriptor.schema.js +146 -0
  18. package/dist/Transformation.js +514 -0
  19. package/dist/UncommittedAsset.js +310 -0
  20. package/dist/Validation.js +196 -0
  21. package/dist/applyRuntimes.js +384 -0
  22. package/dist/assetUtils.js +169 -0
  23. package/dist/atlaspack-v3/AtlaspackV3.js +83 -0
  24. package/dist/atlaspack-v3/NapiWorkerPool.js +114 -0
  25. package/dist/atlaspack-v3/fs.js +53 -0
  26. package/dist/atlaspack-v3/index.js +25 -0
  27. package/dist/atlaspack-v3/jsCallable.js +16 -0
  28. package/dist/atlaspack-v3/worker/compat/asset-symbols.js +190 -0
  29. package/dist/atlaspack-v3/worker/compat/bitflags.js +98 -0
  30. package/dist/atlaspack-v3/worker/compat/dependency.js +43 -0
  31. package/dist/atlaspack-v3/worker/compat/environment.js +57 -0
  32. package/dist/atlaspack-v3/worker/compat/index.js +24 -0
  33. package/dist/atlaspack-v3/worker/compat/mutable-asset.js +152 -0
  34. package/dist/atlaspack-v3/worker/compat/plugin-config.js +64 -0
  35. package/dist/atlaspack-v3/worker/compat/plugin-options.js +137 -0
  36. package/dist/atlaspack-v3/worker/compat/plugin-tracer.js +10 -0
  37. package/dist/atlaspack-v3/worker/compat/target.js +14 -0
  38. package/dist/atlaspack-v3/worker/side-effect-detector.js +243 -0
  39. package/dist/atlaspack-v3/worker/worker.js +398 -0
  40. package/dist/constants.js +17 -0
  41. package/dist/dumpGraphToGraphViz.js +281 -0
  42. package/dist/index.js +62 -0
  43. package/dist/loadAtlaspackPlugin.js +128 -0
  44. package/dist/loadDotEnv.js +41 -0
  45. package/dist/projectPath.js +83 -0
  46. package/dist/public/Asset.js +279 -0
  47. package/dist/public/Bundle.js +224 -0
  48. package/dist/public/BundleGraph.js +371 -0
  49. package/dist/public/BundleGroup.js +53 -0
  50. package/dist/public/Config.js +286 -0
  51. package/dist/public/Dependency.js +138 -0
  52. package/dist/public/Environment.js +278 -0
  53. package/dist/public/MutableBundleGraph.js +277 -0
  54. package/dist/public/PluginOptions.js +80 -0
  55. package/dist/public/Symbols.js +248 -0
  56. package/dist/public/Target.js +69 -0
  57. package/dist/registerCoreWithSerializer.js +38 -0
  58. package/dist/requests/AssetGraphRequest.js +430 -0
  59. package/dist/requests/AssetGraphRequestRust.js +471 -0
  60. package/dist/requests/AssetRequest.js +130 -0
  61. package/dist/requests/AtlaspackBuildRequest.js +98 -0
  62. package/dist/requests/AtlaspackConfigRequest.js +493 -0
  63. package/dist/requests/BundleGraphRequest.js +381 -0
  64. package/dist/requests/BundleGraphRequestRust.js +324 -0
  65. package/dist/requests/BundleGraphRequestUtils.js +262 -0
  66. package/dist/requests/ConfigRequest.js +246 -0
  67. package/dist/requests/DevDepRequest.js +204 -0
  68. package/dist/requests/EntryRequest.js +314 -0
  69. package/dist/requests/PackageRequest.js +89 -0
  70. package/dist/requests/PathRequest.js +349 -0
  71. package/dist/requests/TargetRequest.js +1316 -0
  72. package/dist/requests/ValidationRequest.js +49 -0
  73. package/dist/requests/WriteBundleRequest.js +522 -0
  74. package/dist/requests/WriteBundlesRequest.js +190 -0
  75. package/dist/requests/asset-graph-diff.js +128 -0
  76. package/dist/requests/asset-graph-dot.js +131 -0
  77. package/dist/resolveOptions.js +267 -0
  78. package/dist/rustWorkerThreadDylibHack.js +19 -0
  79. package/dist/serializerCore.browser.js +43 -0
  80. package/dist/summarizeRequest.js +39 -0
  81. package/dist/types.js +31 -0
  82. package/dist/utils.js +172 -0
  83. package/dist/worker.js +123 -0
  84. package/lib/AssetGraph.js +53 -15
  85. package/lib/Atlaspack.js +140 -56
  86. package/lib/AtlaspackConfig.js +17 -6
  87. package/lib/AtlaspackConfig.schema.js +16 -5
  88. package/lib/BundleGraph.js +390 -43
  89. package/lib/CommittedAsset.js +8 -2
  90. package/lib/Dependency.js +9 -3
  91. package/lib/Environment.js +16 -10
  92. package/lib/EnvironmentManager.js +143 -0
  93. package/lib/IdentifierRegistry.js +2 -4
  94. package/lib/InternalConfig.js +3 -2
  95. package/lib/PackagerRunner.js +46 -82
  96. package/lib/ReporterRunner.js +8 -12
  97. package/lib/RequestTracker.js +191 -152
  98. package/lib/SymbolPropagation.js +52 -29
  99. package/lib/TargetDescriptor.schema.js +10 -1
  100. package/lib/Transformation.js +68 -19
  101. package/lib/UncommittedAsset.js +17 -24
  102. package/lib/Validation.js +20 -5
  103. package/lib/applyRuntimes.js +98 -7
  104. package/lib/assetUtils.js +16 -6
  105. package/lib/atlaspack-v3/AtlaspackV3.js +58 -15
  106. package/lib/atlaspack-v3/NapiWorkerPool.js +63 -2
  107. package/lib/atlaspack-v3/fs.js +4 -1
  108. package/lib/atlaspack-v3/index.js +28 -1
  109. package/lib/atlaspack-v3/jsCallable.js +0 -2
  110. package/lib/atlaspack-v3/worker/compat/asset-symbols.js +7 -4
  111. package/lib/atlaspack-v3/worker/compat/bitflags.js +31 -25
  112. package/lib/atlaspack-v3/worker/compat/dependency.js +4 -1
  113. package/lib/atlaspack-v3/worker/compat/environment.js +10 -7
  114. package/lib/atlaspack-v3/worker/compat/index.js +0 -11
  115. package/lib/atlaspack-v3/worker/compat/mutable-asset.js +16 -11
  116. package/lib/atlaspack-v3/worker/compat/plugin-config.js +14 -35
  117. package/lib/atlaspack-v3/worker/compat/plugin-options.js +16 -2
  118. package/lib/atlaspack-v3/worker/compat/plugin-tracer.js +3 -0
  119. package/lib/atlaspack-v3/worker/compat/target.js +2 -0
  120. package/lib/atlaspack-v3/worker/index.js +3 -0
  121. package/lib/atlaspack-v3/worker/side-effect-detector.js +214 -0
  122. package/lib/atlaspack-v3/worker/worker.js +231 -79
  123. package/lib/constants.js +0 -1
  124. package/lib/dumpGraphToGraphViz.js +72 -17
  125. package/lib/index.js +46 -3
  126. package/lib/loadAtlaspackPlugin.js +2 -3
  127. package/lib/loadDotEnv.js +5 -2
  128. package/lib/projectPath.js +6 -1
  129. package/lib/public/Asset.js +22 -12
  130. package/lib/public/Bundle.js +16 -18
  131. package/lib/public/BundleGraph.js +27 -25
  132. package/lib/public/BundleGroup.js +5 -6
  133. package/lib/public/Config.js +118 -18
  134. package/lib/public/Dependency.js +9 -7
  135. package/lib/public/Environment.js +13 -8
  136. package/lib/public/MutableBundleGraph.js +56 -15
  137. package/lib/public/PluginOptions.js +2 -2
  138. package/lib/public/Symbols.js +12 -12
  139. package/lib/public/Target.js +8 -7
  140. package/lib/registerCoreWithSerializer.js +7 -4
  141. package/lib/requests/AssetGraphRequest.js +61 -40
  142. package/lib/requests/AssetGraphRequestRust.js +314 -82
  143. package/lib/requests/AssetRequest.js +24 -7
  144. package/lib/requests/AtlaspackBuildRequest.js +53 -7
  145. package/lib/requests/AtlaspackConfigRequest.js +29 -19
  146. package/lib/requests/BundleGraphRequest.js +61 -130
  147. package/lib/requests/BundleGraphRequestRust.js +381 -0
  148. package/lib/requests/BundleGraphRequestUtils.js +280 -0
  149. package/lib/requests/ConfigRequest.js +55 -7
  150. package/lib/requests/DevDepRequest.js +32 -6
  151. package/lib/requests/EntryRequest.js +4 -3
  152. package/lib/requests/PackageRequest.js +56 -12
  153. package/lib/requests/PathRequest.js +26 -6
  154. package/lib/requests/TargetRequest.js +129 -60
  155. package/lib/requests/ValidationRequest.js +6 -2
  156. package/lib/requests/WriteBundleRequest.js +329 -20
  157. package/lib/requests/WriteBundlesRequest.js +64 -10
  158. package/lib/requests/asset-graph-diff.js +13 -8
  159. package/lib/requests/asset-graph-dot.js +2 -8
  160. package/lib/resolveOptions.js +37 -14
  161. package/lib/rustWorkerThreadDylibHack.js +0 -1
  162. package/lib/serializerCore.browser.js +1 -2
  163. package/lib/summarizeRequest.js +1 -1
  164. package/lib/types/AssetGraph.d.ts +55 -0
  165. package/lib/types/Atlaspack.d.ts +52 -0
  166. package/lib/types/AtlaspackConfig.d.ts +65 -0
  167. package/lib/types/AtlaspackConfig.schema.d.ts +53 -0
  168. package/lib/types/BundleGraph.d.ts +232 -0
  169. package/lib/types/CommittedAsset.d.ts +23 -0
  170. package/lib/types/Dependency.d.ts +44 -0
  171. package/lib/types/Environment.d.ts +11 -0
  172. package/lib/types/EnvironmentManager.d.ts +37 -0
  173. package/lib/types/IdentifierRegistry.d.ts +6 -0
  174. package/lib/types/InternalConfig.d.ts +23 -0
  175. package/lib/types/PackagerRunner.d.ts +85 -0
  176. package/lib/types/ReporterRunner.d.ts +25 -0
  177. package/lib/types/RequestTracker.d.ts +385 -0
  178. package/lib/types/SymbolPropagation.d.ts +11 -0
  179. package/lib/types/TargetDescriptor.schema.d.ts +5 -0
  180. package/lib/types/Transformation.d.ts +72 -0
  181. package/lib/types/UncommittedAsset.d.ts +61 -0
  182. package/lib/types/Validation.d.ts +37 -0
  183. package/lib/types/applyRuntimes.d.ts +25 -0
  184. package/lib/types/assetUtils.d.ts +42 -0
  185. package/lib/types/atlaspack-v3/AtlaspackV3.d.ts +35 -0
  186. package/lib/types/atlaspack-v3/NapiWorkerPool.d.ts +13 -0
  187. package/lib/types/atlaspack-v3/fs.d.ts +13 -0
  188. package/lib/types/atlaspack-v3/index.d.ts +6 -0
  189. package/lib/types/atlaspack-v3/jsCallable.d.ts +1 -0
  190. package/lib/types/atlaspack-v3/worker/compat/asset-symbols.d.ts +51 -0
  191. package/lib/types/atlaspack-v3/worker/compat/bitflags.d.ts +14 -0
  192. package/lib/types/atlaspack-v3/worker/compat/dependency.d.ts +25 -0
  193. package/lib/types/atlaspack-v3/worker/compat/environment.d.ts +27 -0
  194. package/{src/atlaspack-v3/worker/compat/index.js → lib/types/atlaspack-v3/worker/compat/index.d.ts} +0 -2
  195. package/lib/types/atlaspack-v3/worker/compat/mutable-asset.d.ts +49 -0
  196. package/lib/types/atlaspack-v3/worker/compat/plugin-config.d.ts +29 -0
  197. package/lib/types/atlaspack-v3/worker/compat/plugin-options.d.ts +23 -0
  198. package/lib/types/atlaspack-v3/worker/compat/plugin-tracer.d.ts +5 -0
  199. package/lib/types/atlaspack-v3/worker/compat/target.d.ts +11 -0
  200. package/lib/types/atlaspack-v3/worker/side-effect-detector.d.ts +76 -0
  201. package/lib/types/atlaspack-v3/worker/worker.d.ts +81 -0
  202. package/lib/types/constants.d.ts +13 -0
  203. package/lib/types/dumpGraphToGraphViz.d.ts +10 -0
  204. package/lib/types/index.d.ts +8 -0
  205. package/lib/types/loadAtlaspackPlugin.d.ts +8 -0
  206. package/lib/types/loadDotEnv.d.ts +3 -0
  207. package/lib/types/projectPath.d.ts +19 -0
  208. package/lib/types/public/Asset.d.ts +74 -0
  209. package/lib/types/public/Bundle.d.ts +45 -0
  210. package/lib/types/public/BundleGraph.d.ts +72 -0
  211. package/lib/types/public/BundleGroup.d.ts +12 -0
  212. package/lib/types/public/Config.d.ts +75 -0
  213. package/lib/types/public/Dependency.d.ts +32 -0
  214. package/lib/types/public/Environment.d.ts +34 -0
  215. package/lib/types/public/MutableBundleGraph.d.ts +26 -0
  216. package/lib/types/public/PluginOptions.d.ts +25 -0
  217. package/lib/types/public/Symbols.d.ts +81 -0
  218. package/lib/types/public/Target.d.ts +16 -0
  219. package/lib/types/registerCoreWithSerializer.d.ts +2 -0
  220. package/lib/types/requests/AssetGraphRequest.d.ts +76 -0
  221. package/lib/types/requests/AssetGraphRequestRust.d.ts +21 -0
  222. package/lib/types/requests/AssetRequest.d.ts +16 -0
  223. package/lib/types/requests/AtlaspackBuildRequest.d.ts +33 -0
  224. package/lib/types/requests/AtlaspackConfigRequest.d.ts +45 -0
  225. package/lib/types/requests/BundleGraphRequest.d.ts +28 -0
  226. package/lib/types/requests/BundleGraphRequestRust.d.ts +34 -0
  227. package/lib/types/requests/BundleGraphRequestUtils.d.ts +38 -0
  228. package/lib/types/requests/ConfigRequest.d.ts +67 -0
  229. package/lib/types/requests/DevDepRequest.d.ts +30 -0
  230. package/lib/types/requests/EntryRequest.d.ts +36 -0
  231. package/lib/types/requests/PackageRequest.d.ts +27 -0
  232. package/lib/types/requests/PathRequest.d.ts +48 -0
  233. package/lib/types/requests/TargetRequest.d.ts +48 -0
  234. package/lib/types/requests/ValidationRequest.d.ts +20 -0
  235. package/lib/types/requests/WriteBundleRequest.d.ts +80 -0
  236. package/lib/types/requests/WriteBundlesRequest.d.ts +32 -0
  237. package/lib/types/requests/asset-graph-diff.d.ts +1 -0
  238. package/lib/types/requests/asset-graph-dot.d.ts +9 -0
  239. package/lib/types/resolveOptions.d.ts +3 -0
  240. package/lib/types/rustWorkerThreadDylibHack.d.ts +9 -0
  241. package/lib/types/serializerCore.browser.d.ts +3 -0
  242. package/lib/types/summarizeRequest.d.ts +10 -0
  243. package/lib/types/types.d.ts +496 -0
  244. package/lib/types/utils.d.ts +23 -0
  245. package/lib/types/worker.d.ts +44 -0
  246. package/lib/types.js +8 -1
  247. package/lib/utils.js +18 -3
  248. package/lib/worker.js +32 -15
  249. package/package.json +26 -36
  250. package/src/{AssetGraph.js → AssetGraph.ts} +87 -51
  251. package/src/{Atlaspack.js → Atlaspack.ts} +181 -72
  252. package/src/{AtlaspackConfig.schema.js → AtlaspackConfig.schema.ts} +25 -19
  253. package/src/{AtlaspackConfig.js → AtlaspackConfig.ts} +78 -54
  254. package/src/{BundleGraph.js → BundleGraph.ts} +575 -145
  255. package/src/{CommittedAsset.js → CommittedAsset.ts} +15 -13
  256. package/src/{Dependency.js → Dependency.ts} +59 -42
  257. package/src/{Environment.js → Environment.ts} +24 -15
  258. package/src/EnvironmentManager.ts +154 -0
  259. package/src/{IdentifierRegistry.js → IdentifierRegistry.ts} +1 -4
  260. package/src/{InternalConfig.js → InternalConfig.ts} +22 -23
  261. package/src/{PackagerRunner.js → PackagerRunner.ts} +114 -159
  262. package/src/{ReporterRunner.js → ReporterRunner.ts} +13 -18
  263. package/src/{RequestTracker.js → RequestTracker.ts} +444 -355
  264. package/src/{SymbolPropagation.js → SymbolPropagation.ts} +178 -61
  265. package/src/{TargetDescriptor.schema.js → TargetDescriptor.schema.ts} +10 -1
  266. package/src/{Transformation.js → Transformation.ts} +110 -65
  267. package/src/{UncommittedAsset.js → UncommittedAsset.ts} +45 -49
  268. package/src/{Validation.js → Validation.ts} +32 -17
  269. package/src/{applyRuntimes.js → applyRuntimes.ts} +135 -26
  270. package/src/{assetUtils.js → assetUtils.ts} +49 -36
  271. package/src/atlaspack-v3/AtlaspackV3.ts +183 -0
  272. package/src/atlaspack-v3/NapiWorkerPool.ts +129 -0
  273. package/src/atlaspack-v3/{fs.js → fs.ts} +8 -4
  274. package/src/atlaspack-v3/{index.js → index.ts} +3 -4
  275. package/src/atlaspack-v3/jsCallable.ts +14 -0
  276. package/src/atlaspack-v3/worker/compat/{asset-symbols.js → asset-symbols.ts} +40 -30
  277. package/src/atlaspack-v3/worker/compat/bitflags.ts +102 -0
  278. package/src/atlaspack-v3/worker/compat/{dependency.js → dependency.ts} +13 -13
  279. package/src/atlaspack-v3/worker/compat/{environment.js → environment.ts} +13 -9
  280. package/src/atlaspack-v3/worker/compat/index.ts +8 -0
  281. package/src/atlaspack-v3/worker/compat/{mutable-asset.js → mutable-asset.ts} +21 -20
  282. package/src/atlaspack-v3/worker/compat/{plugin-config.js → plugin-config.ts} +25 -56
  283. package/src/atlaspack-v3/worker/compat/{plugin-options.js → plugin-options.ts} +19 -5
  284. package/src/atlaspack-v3/worker/compat/{plugin-tracer.js → plugin-tracer.ts} +2 -2
  285. package/src/atlaspack-v3/worker/compat/{target.js → target.ts} +3 -4
  286. package/src/atlaspack-v3/worker/index.js +2 -1
  287. package/src/atlaspack-v3/worker/side-effect-detector.ts +298 -0
  288. package/src/atlaspack-v3/worker/worker.ts +548 -0
  289. package/src/{constants.js → constants.ts} +0 -3
  290. package/src/{dumpGraphToGraphViz.js → dumpGraphToGraphViz.ts} +73 -28
  291. package/src/index.ts +18 -0
  292. package/src/{loadAtlaspackPlugin.js → loadAtlaspackPlugin.ts} +8 -9
  293. package/src/{loadDotEnv.js → loadDotEnv.ts} +2 -2
  294. package/src/{projectPath.js → projectPath.ts} +20 -9
  295. package/src/public/{Asset.js → Asset.ts} +41 -28
  296. package/src/public/{Bundle.js → Bundle.ts} +28 -29
  297. package/src/public/{BundleGraph.js → BundleGraph.ts} +103 -68
  298. package/src/public/{BundleGroup.js → BundleGroup.ts} +7 -10
  299. package/src/public/{Config.js → Config.ts} +171 -33
  300. package/src/public/{Dependency.js → Dependency.ts} +20 -17
  301. package/src/public/{Environment.js → Environment.ts} +28 -17
  302. package/src/public/{MutableBundleGraph.js → MutableBundleGraph.ts} +55 -24
  303. package/src/public/{PluginOptions.js → PluginOptions.ts} +6 -6
  304. package/src/public/{Symbols.js → Symbols.ts} +75 -36
  305. package/src/public/{Target.js → Target.ts} +10 -8
  306. package/src/{registerCoreWithSerializer.js → registerCoreWithSerializer.ts} +9 -7
  307. package/src/requests/{AssetGraphRequest.js → AssetGraphRequest.ts} +117 -90
  308. package/src/requests/AssetGraphRequestRust.ts +557 -0
  309. package/src/requests/{AssetRequest.js → AssetRequest.ts} +24 -18
  310. package/src/requests/AtlaspackBuildRequest.ts +168 -0
  311. package/src/requests/{AtlaspackConfigRequest.js → AtlaspackConfigRequest.ts} +72 -58
  312. package/src/requests/{BundleGraphRequest.js → BundleGraphRequest.ts} +119 -199
  313. package/src/requests/BundleGraphRequestRust.ts +470 -0
  314. package/src/requests/BundleGraphRequestUtils.ts +323 -0
  315. package/src/requests/{ConfigRequest.js → ConfigRequest.ts} +110 -50
  316. package/src/requests/{DevDepRequest.js → DevDepRequest.ts} +60 -35
  317. package/src/requests/{EntryRequest.js → EntryRequest.ts} +36 -31
  318. package/src/requests/{PackageRequest.js → PackageRequest.ts} +52 -25
  319. package/src/requests/{PathRequest.js → PathRequest.ts} +47 -37
  320. package/src/requests/{TargetRequest.js → TargetRequest.ts} +265 -179
  321. package/src/requests/{ValidationRequest.js → ValidationRequest.ts} +18 -17
  322. package/src/requests/WriteBundleRequest.ts +734 -0
  323. package/src/requests/{WriteBundlesRequest.js → WriteBundlesRequest.ts} +134 -50
  324. package/src/requests/{asset-graph-diff.js → asset-graph-diff.ts} +25 -21
  325. package/src/requests/{asset-graph-dot.js → asset-graph-dot.ts} +8 -12
  326. package/src/{resolveOptions.js → resolveOptions.ts} +57 -27
  327. package/src/{rustWorkerThreadDylibHack.js → rustWorkerThreadDylibHack.ts} +1 -4
  328. package/src/{serializerCore.browser.js → serializerCore.browser.ts} +2 -3
  329. package/src/{summarizeRequest.js → summarizeRequest.ts} +17 -5
  330. package/src/types.ts +651 -0
  331. package/src/{utils.js → utils.ts} +52 -21
  332. package/src/{worker.js → worker.ts} +50 -42
  333. package/test/{AssetGraph.test.js → AssetGraph.test.ts} +5 -8
  334. package/test/{Atlaspack.test.js → Atlaspack.test.ts} +5 -10
  335. package/test/{AtlaspackConfig.test.js → AtlaspackConfig.test.ts} +0 -5
  336. package/test/{AtlaspackConfigRequest.test.js → AtlaspackConfigRequest.test.ts} +76 -16
  337. package/test/{BundleGraph.test.js → BundleGraph.test.ts} +8 -13
  338. package/test/{Dependency.test.js → Dependency.test.ts} +2 -3
  339. package/test/{EntryRequest.test.js → EntryRequest.test.ts} +1 -6
  340. package/test/Environment.test.ts +153 -0
  341. package/test/EnvironmentManager.test.ts +188 -0
  342. package/test/{IdentifierRegistry.test.js → IdentifierRegistry.test.ts} +2 -4
  343. package/test/{InternalAsset.test.js → InternalAsset.test.ts} +2 -7
  344. package/test/PackagerRunner.test.ts +0 -0
  345. package/test/{PublicAsset.test.js → PublicAsset.test.ts} +2 -7
  346. package/test/{PublicBundle.test.js → PublicBundle.test.ts} +1 -2
  347. package/test/{PublicDependency.test.js → PublicDependency.test.ts} +0 -2
  348. package/test/PublicEnvironment.test.ts +49 -0
  349. package/test/{PublicMutableBundleGraph.test.js → PublicMutableBundleGraph.test.ts} +6 -11
  350. package/test/{RequestTracker.test.js → RequestTracker.test.ts} +136 -58
  351. package/test/{SymbolPropagation.test.js → SymbolPropagation.test.ts} +124 -74
  352. package/test/{TargetRequest.test.js → TargetRequest.test.ts} +91 -92
  353. package/test/fixtures/config-with-reporters/.parcelrc +7 -0
  354. package/test/fixtures/custom-targets/package.json +6 -0
  355. package/test/public/Config.test.ts +104 -0
  356. package/test/requests/AssetGraphRequestRust.test.ts +443 -0
  357. package/test/requests/{ConfigRequest.test.js → ConfigRequest.test.ts} +202 -13
  358. package/test/requests/{DevDepRequest.test.js → DevDepRequest.test.ts} +0 -2
  359. package/test/requests/WriteBundleRequest.test.ts +602 -0
  360. package/test/{test-utils.js → test-utils.ts} +3 -4
  361. package/test/{utils.test.js → utils.test.ts} +1 -3
  362. package/tsconfig.json +60 -0
  363. package/tsconfig.tsbuildinfo +1 -0
  364. package/index.d.ts +0 -30
  365. package/lib/atlaspack-v3/worker/compat/plugin-logger.js +0 -29
  366. package/src/atlaspack-v3/AtlaspackV3.js +0 -87
  367. package/src/atlaspack-v3/NapiWorkerPool.js +0 -53
  368. package/src/atlaspack-v3/jsCallable.js +0 -18
  369. package/src/atlaspack-v3/worker/compat/bitflags.js +0 -100
  370. package/src/atlaspack-v3/worker/compat/plugin-logger.js +0 -47
  371. package/src/atlaspack-v3/worker/worker.js +0 -369
  372. package/src/index.js +0 -13
  373. package/src/requests/AssetGraphRequestRust.js +0 -263
  374. package/src/requests/AtlaspackBuildRequest.js +0 -111
  375. package/src/requests/WriteBundleRequest.js +0 -369
  376. package/src/types.js +0 -600
  377. package/test/Environment.test.js +0 -119
  378. package/test/PackagerRunner.test.js +0 -27
  379. package/test/PublicEnvironment.test.js +0 -27
  380. package/test/requests/AssetGraphRequestRust.test.js +0 -411
@@ -0,0 +1,624 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.propagateSymbols = propagateSymbols;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const nullthrows_1 = __importDefault(require("nullthrows"));
9
+ const utils_1 = require("@atlaspack/utils");
10
+ const logger_1 = __importDefault(require("@atlaspack/logger"));
11
+ const diagnostic_1 = require("@atlaspack/diagnostic");
12
+ const logger_2 = require("@atlaspack/logger");
13
+ const types_1 = require("./types");
14
+ const projectPath_1 = require("./projectPath");
15
+ function propagateSymbols({ options, assetGraph, changedAssetsPropagation, assetGroupsWithRemovedParents, previousErrors, }) {
16
+ return (0, logger_2.instrument)('propagateSymbols', () => {
17
+ let changedAssets = new Set([...changedAssetsPropagation].map((id) => assetGraph.getNodeIdByContentKey(id)));
18
+ // To reorder once at the end
19
+ let changedDeps = new Set();
20
+ // For the down traversal, the nodes with `usedSymbolsDownDirty = true` are exactly
21
+ // `changedAssetsPropagation` (= asset and therefore potentially dependencies changed) or the
22
+ // asset children of `assetGroupsWithRemovedParents` (= fewer incoming dependencies causing less
23
+ // used symbols).
24
+ //
25
+ // The up traversal has to consider all nodes that changed in the down traversal
26
+ // (`useSymbolsUpDirtyDown = true`) which are listed in `changedDepsUsedSymbolsUpDirtyDown`
27
+ // (more or less requested symbols) and in `changedAssetsPropagation` (changing an asset might
28
+ // change exports).
29
+ // The dependencies that changed in the down traversal causing an update in the up traversal.
30
+ let changedDepsUsedSymbolsUpDirtyDown = new Set();
31
+ // Propagate the requested symbols down from the root to the leaves
32
+ propagateSymbolsDown(assetGraph, changedAssets, assetGroupsWithRemovedParents, (assetNode, incomingDeps, outgoingDeps) => {
33
+ if (assetNode.value.meta.emptyFileStarReexport &&
34
+ incomingDeps.every((d) => d.value.specifierType === types_1.SpecifierType.esm)) {
35
+ assetNode.value.symbols?.delete('*');
36
+ }
37
+ // exportSymbol -> identifier
38
+ let assetSymbols = assetNode.value.symbols;
39
+ // identifier -> exportSymbol
40
+ let assetSymbolsInverse;
41
+ if (assetSymbols) {
42
+ assetSymbolsInverse = new Map();
43
+ for (let [s, { local }] of assetSymbols) {
44
+ let set = assetSymbolsInverse.get(local);
45
+ if (!set) {
46
+ set = new Set();
47
+ assetSymbolsInverse.set(local, set);
48
+ }
49
+ set.add(s);
50
+ }
51
+ }
52
+ let hasNamespaceOutgoingDeps = outgoingDeps.some((d) => d.value.symbols?.get('*')?.local === '*' ||
53
+ d.value.meta?.hasExportStar);
54
+ // 1) Determine what the incomingDeps requests from the asset
55
+ // ----------------------------------------------------------
56
+ let isEntry = false;
57
+ let addAll = false;
58
+ // Used symbols that are exported or reexported (symbol will be removed again later) by asset.
59
+ assetNode.usedSymbols = new Set();
60
+ // Symbols that have to be namespace reexported by outgoingDeps.
61
+ let namespaceReexportedSymbols = new Set();
62
+ if (incomingDeps.length === 0) {
63
+ // Root in the runtimes Graph
64
+ assetNode.usedSymbols.add('*');
65
+ namespaceReexportedSymbols.add('*');
66
+ }
67
+ else {
68
+ for (let incomingDep of incomingDeps) {
69
+ if (incomingDep.value.symbols == null ||
70
+ incomingDep.value.priority === types_1.Priority.conditional) {
71
+ if (incomingDep.value.sourceAssetId == null) {
72
+ // The root dependency on non-library builds
73
+ isEntry = true;
74
+ }
75
+ else {
76
+ // A regular dependency with cleared symbols
77
+ addAll = true;
78
+ }
79
+ continue;
80
+ }
81
+ for (let exportSymbol of incomingDep.usedSymbolsDown) {
82
+ if (exportSymbol === '*') {
83
+ assetNode.usedSymbols.add('*');
84
+ namespaceReexportedSymbols.add('*');
85
+ }
86
+ if (!assetSymbols ||
87
+ assetSymbols.has(exportSymbol) ||
88
+ assetSymbols.has('*')) {
89
+ // An own symbol or a non-namespace reexport
90
+ assetNode.usedSymbols.add(exportSymbol);
91
+ }
92
+ // A namespace reexport
93
+ // (but only if we actually have namespace-exporting outgoing dependencies,
94
+ // This usually happens with a reexporting asset with many namespace exports which means that
95
+ // we cannot match up the correct asset with the used symbol at this level.)
96
+ else if (hasNamespaceOutgoingDeps && exportSymbol !== 'default') {
97
+ namespaceReexportedSymbols.add(exportSymbol);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ // Incomding dependency with cleared symbols, add everything
103
+ if (addAll) {
104
+ assetSymbols?.forEach((_, exportSymbol) => assetNode.usedSymbols.add(exportSymbol));
105
+ }
106
+ // 2) Distribute the symbols to the outgoing dependencies
107
+ // ----------------------------------------------------------
108
+ for (let dep of outgoingDeps) {
109
+ let depUsedSymbolsDownOld = dep.usedSymbolsDown;
110
+ let depUsedSymbolsDown = new Set();
111
+ // @ts-expect-error TS2322
112
+ dep.usedSymbolsDown = depUsedSymbolsDown;
113
+ if (assetNode.value.sideEffects ||
114
+ // Incoming dependency with cleared symbols
115
+ addAll ||
116
+ // For entries, we still need to add dep.value.symbols of the entry (which are "used" but not according to the symbols data)
117
+ isEntry ||
118
+ // If not a single symbol is used, we can say the entire subgraph is not used.
119
+ // This is e.g. needed when some symbol is imported and then used for a export which isn't used (= "semi-weak" reexport)
120
+ // index.js: `import {bar} from "./lib"; ...`
121
+ // lib/index.js: `export * from "./foo.js"; export * from "./bar.js";`
122
+ // lib/foo.js: `import { data } from "./bar.js"; export const foo = data + " esm2";`
123
+ assetNode.usedSymbols.size > 0 ||
124
+ namespaceReexportedSymbols.size > 0) {
125
+ let depSymbols = dep.value.symbols;
126
+ if (!depSymbols)
127
+ continue;
128
+ if (depSymbols.get('*')?.local === '*' ||
129
+ dep.value.meta?.hasExportStar) {
130
+ if (addAll) {
131
+ depUsedSymbolsDown.add('*');
132
+ }
133
+ else {
134
+ for (let s of namespaceReexportedSymbols) {
135
+ // We need to propagate the namespaceReexportedSymbols to all namespace dependencies (= even wrong ones because we don't know yet)
136
+ depUsedSymbolsDown.add(s);
137
+ }
138
+ }
139
+ }
140
+ for (let [symbol, { local }] of depSymbols) {
141
+ // Was already handled above
142
+ if (local === '*')
143
+ continue;
144
+ if (!assetSymbolsInverse || !depSymbols.get(symbol)?.isWeak) {
145
+ // Bailout or non-weak symbol (= used in the asset itself = not a reexport)
146
+ depUsedSymbolsDown.add(symbol);
147
+ }
148
+ else {
149
+ let reexportedExportSymbols = assetSymbolsInverse.get(local);
150
+ if (reexportedExportSymbols == null) {
151
+ // not reexported = used in asset itself
152
+ depUsedSymbolsDown.add(symbol);
153
+ }
154
+ else if (assetNode.usedSymbols.has('*')) {
155
+ // we need everything
156
+ depUsedSymbolsDown.add(symbol);
157
+ [...reexportedExportSymbols].forEach((s) => assetNode.usedSymbols.delete(s));
158
+ }
159
+ else {
160
+ let usedReexportedExportSymbols = [
161
+ ...reexportedExportSymbols,
162
+ ].filter((s) => assetNode.usedSymbols.has(s));
163
+ if (usedReexportedExportSymbols.length > 0) {
164
+ // The symbol is indeed a reexport, so it's not used from the asset itself
165
+ depUsedSymbolsDown.add(symbol);
166
+ usedReexportedExportSymbols.forEach((s) => assetNode.usedSymbols.delete(s));
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ else {
173
+ depUsedSymbolsDown.clear();
174
+ }
175
+ if (!(0, utils_1.setEqual)(depUsedSymbolsDownOld, depUsedSymbolsDown)) {
176
+ dep.usedSymbolsDownDirty = true;
177
+ dep.usedSymbolsUpDirtyDown = true;
178
+ changedDepsUsedSymbolsUpDirtyDown.add(dep.id);
179
+ }
180
+ if (dep.usedSymbolsUpDirtyDown) {
181
+ // Set on node creation
182
+ changedDepsUsedSymbolsUpDirtyDown.add(dep.id);
183
+ }
184
+ }
185
+ });
186
+ const logFallbackNamespaceInsertion = (assetNode, symbol, depNode1, depNode2) => {
187
+ if (options.logLevel === 'verbose') {
188
+ logger_1.default.warn({
189
+ message: `${(0, projectPath_1.fromProjectPathRelative)(assetNode.value.filePath)} reexports "${symbol}", which could be resolved either to the dependency "${depNode1.value.specifier}" or "${depNode2.value.specifier}" at runtime. Adding a namespace object to fall back on.`,
190
+ origin: '@atlaspack/core',
191
+ });
192
+ }
193
+ };
194
+ // Because namespace reexports introduce ambiguity, go up the graph from the leaves to the
195
+ // root and remove requested symbols that aren't actually exported
196
+ let errors = propagateSymbolsUp(assetGraph, changedAssets, changedDepsUsedSymbolsUpDirtyDown, previousErrors, (assetNode, incomingDeps, outgoingDeps) => {
197
+ let assetSymbols = assetNode.value.symbols;
198
+ let assetSymbolsInverse = null;
199
+ if (assetSymbols) {
200
+ assetSymbolsInverse = new Map();
201
+ for (let [s, { local }] of assetSymbols) {
202
+ let set = assetSymbolsInverse.get(local);
203
+ if (!set) {
204
+ set = new Set();
205
+ assetSymbolsInverse.set(local, set);
206
+ }
207
+ set.add(s);
208
+ }
209
+ }
210
+ // the symbols that are reexported (not used in `asset`) -> asset they resolved to
211
+ let reexportedSymbols = new Map();
212
+ // the symbols that are reexported (not used in `asset`) -> the corresponding outgoingDep(s)
213
+ // To generate the diagnostic when there are multiple dependencies with non-statically
214
+ // analyzable exports
215
+ let reexportedSymbolsSource = new Map();
216
+ for (let outgoingDep of outgoingDeps) {
217
+ let outgoingDepSymbols = outgoingDep.value.symbols;
218
+ if (!outgoingDepSymbols)
219
+ continue;
220
+ let isExcluded = assetGraph.getNodeIdsConnectedFrom(assetGraph.getNodeIdByContentKey(outgoingDep.id)).length === 0;
221
+ // excluded, assume everything that is requested exists
222
+ if (isExcluded) {
223
+ outgoingDep.usedSymbolsDown.forEach((_, s) => outgoingDep.usedSymbolsUp.set(s, null));
224
+ }
225
+ if (outgoingDepSymbols.get('*')?.local === '*' ||
226
+ outgoingDep.value.meta?.hasExportStar) {
227
+ outgoingDep.usedSymbolsUp.forEach((sResolved, s) => {
228
+ if (s === 'default') {
229
+ return;
230
+ }
231
+ // If the symbol could come from multiple assets at runtime, assetNode's
232
+ // namespace will be needed at runtime to perform the lookup on.
233
+ if (reexportedSymbols.has(s)) {
234
+ if (!assetNode.usedSymbols.has('*')) {
235
+ logFallbackNamespaceInsertion(assetNode, s, (0, nullthrows_1.default)(reexportedSymbolsSource.get(s)), outgoingDep);
236
+ }
237
+ assetNode.usedSymbols.add('*');
238
+ reexportedSymbols.set(s, { asset: assetNode.id, symbol: s });
239
+ }
240
+ else {
241
+ reexportedSymbols.set(s, sResolved);
242
+ reexportedSymbolsSource.set(s, outgoingDep);
243
+ }
244
+ });
245
+ }
246
+ for (let [s, sResolved] of outgoingDep.usedSymbolsUp) {
247
+ if (!outgoingDep.usedSymbolsDown.has(s)) {
248
+ // usedSymbolsDown is a superset of usedSymbolsUp
249
+ continue;
250
+ }
251
+ let local = outgoingDepSymbols.get(s)?.local;
252
+ if (local == null) {
253
+ // Caused by '*' => '*', already handled
254
+ continue;
255
+ }
256
+ let reexported = assetSymbolsInverse?.get(local);
257
+ if (reexported != null) {
258
+ reexported.forEach((s) => {
259
+ // see same code above
260
+ if (reexportedSymbols.has(s)) {
261
+ if (!assetNode.usedSymbols.has('*')) {
262
+ logFallbackNamespaceInsertion(assetNode, s, (0, nullthrows_1.default)(reexportedSymbolsSource.get(s)), outgoingDep);
263
+ }
264
+ assetNode.usedSymbols.add('*');
265
+ reexportedSymbols.set(s, { asset: assetNode.id, symbol: s });
266
+ }
267
+ else {
268
+ reexportedSymbols.set(s, sResolved);
269
+ reexportedSymbolsSource.set(s, outgoingDep);
270
+ }
271
+ });
272
+ }
273
+ }
274
+ }
275
+ let errors = [];
276
+ function usedSymbolsUpAmbiguous(old, current, s, value) {
277
+ if (old.has(s)) {
278
+ let valueOld = old.get(s);
279
+ if (valueOld !== value &&
280
+ !(valueOld?.asset === value.asset &&
281
+ valueOld?.symbol === value.symbol)) {
282
+ // The dependency points to multiple assets (via an asset group).
283
+ current.set(s, undefined);
284
+ return;
285
+ }
286
+ }
287
+ current.set(s, value);
288
+ }
289
+ for (let incomingDep of incomingDeps) {
290
+ let incomingDepUsedSymbolsUpOld = incomingDep.usedSymbolsUp;
291
+ incomingDep.usedSymbolsUp = new Map();
292
+ let incomingDepSymbols = incomingDep.value.symbols;
293
+ if (!incomingDepSymbols)
294
+ continue;
295
+ let hasNamespaceReexport = incomingDepSymbols.get('*')?.local === '*' ||
296
+ incomingDep.value.meta?.hasExportStar;
297
+ for (let s of incomingDep.usedSymbolsDown) {
298
+ if (assetSymbols == null || // Assume everything could be provided if symbols are cleared
299
+ assetNode.value.bundleBehavior === types_1.BundleBehavior.isolated ||
300
+ assetNode.value.bundleBehavior === types_1.BundleBehavior.inline ||
301
+ s === '*' ||
302
+ assetNode.usedSymbols.has(s)) {
303
+ usedSymbolsUpAmbiguous(incomingDepUsedSymbolsUpOld, incomingDep.usedSymbolsUp, s, {
304
+ asset: assetNode.id,
305
+ symbol: s,
306
+ });
307
+ }
308
+ else if (reexportedSymbols.has(s)) {
309
+ let reexport = reexportedSymbols.get(s);
310
+ let v =
311
+ // Forward a reexport only if the current asset is side-effect free and not external
312
+ !assetNode.value.sideEffects && reexport != null
313
+ ? reexport
314
+ : {
315
+ asset: assetNode.id,
316
+ symbol: s,
317
+ };
318
+ usedSymbolsUpAmbiguous(incomingDepUsedSymbolsUpOld, incomingDep.usedSymbolsUp, s, v);
319
+ }
320
+ else if (!hasNamespaceReexport) {
321
+ let loc = incomingDep.value.symbols?.get(s)?.loc;
322
+ let [resolutionNodeId] = assetGraph.getNodeIdsConnectedFrom(assetGraph.getNodeIdByContentKey(incomingDep.id));
323
+ let resolution = (0, nullthrows_1.default)(assetGraph.getNode(resolutionNodeId));
324
+ (0, assert_1.default)(resolution &&
325
+ (resolution.type === 'asset_group' ||
326
+ resolution.type === 'asset'));
327
+ errors.push({
328
+ message: (0, diagnostic_1.md) `${(0, projectPath_1.fromProjectPathRelative)(
329
+ // @ts-expect-error TS2345
330
+ resolution.value.filePath)} does not export '${s}'`,
331
+ origin: '@atlaspack/core',
332
+ codeFrames: loc
333
+ ? [
334
+ {
335
+ filePath: (0, projectPath_1.fromProjectPath)(options.projectRoot, loc?.filePath) ??
336
+ undefined,
337
+ language: incomingDep.value.sourceAssetType ?? undefined,
338
+ codeHighlights: [(0, diagnostic_1.convertSourceLocationToHighlight)(loc)],
339
+ },
340
+ ]
341
+ : undefined,
342
+ });
343
+ }
344
+ }
345
+ if (!equalMap(incomingDepUsedSymbolsUpOld, incomingDep.usedSymbolsUp)) {
346
+ changedDeps.add(incomingDep);
347
+ incomingDep.usedSymbolsUpDirtyUp = true;
348
+ }
349
+ incomingDep.excluded = false;
350
+ if (incomingDep.value.symbols != null &&
351
+ incomingDep.usedSymbolsUp.size === 0) {
352
+ let connectedNodeIds = assetGraph.getNodeIdsConnectedFrom(assetGraph.getNodeIdByContentKey(incomingDep.id));
353
+ let sideEffectFree = connectedNodeIds.every((nodeId) => {
354
+ let connectedNode = (0, nullthrows_1.default)(assetGraph.getNode(nodeId));
355
+ // Dependencies should only connect to asset_groups or assets
356
+ (0, assert_1.default)(connectedNode.type === 'asset' ||
357
+ connectedNode.type === 'asset_group');
358
+ return connectedNode.value.sideEffects === false;
359
+ });
360
+ if (sideEffectFree) {
361
+ incomingDep.excluded = true;
362
+ }
363
+ }
364
+ }
365
+ return errors;
366
+ });
367
+ // Sort usedSymbolsUp so they are a consistent order across builds.
368
+ // This ensures a consistent ordering of these symbols when packaging.
369
+ // See https://github.com/parcel-bundler/parcel/pull/8212
370
+ for (let dep of changedDeps) {
371
+ dep.usedSymbolsUp = new Map(
372
+ // @ts-expect-error TS2345
373
+ [...dep.usedSymbolsUp].sort(([a], [b]) => a.localeCompare(b)));
374
+ }
375
+ return errors;
376
+ });
377
+ }
378
+ function propagateSymbolsDown(assetGraph, changedAssets, assetGroupsWithRemovedParents, visit) {
379
+ if (changedAssets.size === 0 && assetGroupsWithRemovedParents.size === 0) {
380
+ return;
381
+ }
382
+ // We care about changed assets and their changed dependencies. So start with the first changed
383
+ // asset or dependency and continue while the symbols change. If the queue becomes empty,
384
+ // continue with the next unvisited changed asset.
385
+ //
386
+ // In the end, nodes, which are neither listed in changedAssets nor in
387
+ // assetGroupsWithRemovedParents nor reached via a dirty flag, don't have to be visited at all.
388
+ //
389
+ // In the worst case, some nodes have to be revisited because we don't want to sort the assets
390
+ // into topological order. For example in a diamond graph where the join point is visited twice
391
+ // via each parent (the numbers signifiying the order of re/visiting, `...` being unvisited).
392
+ // However, this only continues as long as there are changes in the used symbols that influence
393
+ // child nodes.
394
+ //
395
+ // |
396
+ // ...
397
+ // / \
398
+ // 1 4
399
+ // \ /
400
+ // 2+5
401
+ // |
402
+ // 3+6
403
+ // |
404
+ // ...
405
+ // |
406
+ //
407
+ let unreachedAssets = new Set([
408
+ ...changedAssets,
409
+ ...assetGroupsWithRemovedParents,
410
+ ]);
411
+ let queue = new Set([setPop(unreachedAssets)]);
412
+ while (queue.size > 0) {
413
+ let queuedNodeId = setPop(queue);
414
+ unreachedAssets.delete(queuedNodeId);
415
+ let outgoing = assetGraph.getNodeIdsConnectedFrom(queuedNodeId);
416
+ let node = (0, nullthrows_1.default)(assetGraph.getNode(queuedNodeId));
417
+ let wasNodeDirty = false;
418
+ if (node.type === 'dependency' || node.type === 'asset_group') {
419
+ wasNodeDirty = node.usedSymbolsDownDirty;
420
+ node.usedSymbolsDownDirty = false;
421
+ }
422
+ else if (node.type === 'asset' && node.usedSymbolsDownDirty) {
423
+ visit(node, incomingDependencyNodesFromAsset(assetGraph, node.value), dependencyNodesFromIds(assetGraph, outgoing));
424
+ node.usedSymbolsDownDirty = false;
425
+ }
426
+ for (let child of outgoing) {
427
+ let childNode = (0, nullthrows_1.default)(assetGraph.getNode(child));
428
+ let childDirty = false;
429
+ if ((childNode.type === 'asset' || childNode.type === 'asset_group') &&
430
+ wasNodeDirty) {
431
+ childNode.usedSymbolsDownDirty = true;
432
+ childDirty = true;
433
+ }
434
+ else if (childNode.type === 'dependency') {
435
+ childDirty = childNode.usedSymbolsDownDirty;
436
+ }
437
+ if (childDirty) {
438
+ queue.add(child);
439
+ }
440
+ }
441
+ if (queue.size === 0 && unreachedAssets.size > 0) {
442
+ queue.add(setPop(unreachedAssets));
443
+ }
444
+ }
445
+ }
446
+ function propagateSymbolsUp(assetGraph, changedAssets, changedDepsUsedSymbolsUpDirtyDown, previousErrors, visit) {
447
+ // For graphs in general (so with cyclic dependencies), some nodes will have to be revisited. So
448
+ // run a regular queue-based BFS for anything that's still dirty.
449
+ //
450
+ // (Previously, there was first a recursive post-order DFS, with the idea that all children of a
451
+ // node should be processed first. With a tree, this would result in a minimal amount of work by
452
+ // processing every asset exactly once and then the remaining cycles would have been handled
453
+ // with the loop. This was slightly faster for initial builds but had O(project) instead of
454
+ // O(changes).)
455
+ let errors = previousErrors
456
+ ? // Some nodes might have been removed since the last build
457
+ // @ts-expect-error TS2769
458
+ new Map([...previousErrors].filter(([n]) => assetGraph.hasNode(n)))
459
+ : new Map();
460
+ let changedDepsUsedSymbolsUpDirtyDownAssets = new Set([
461
+ ...[...changedDepsUsedSymbolsUpDirtyDown]
462
+ .reverse()
463
+ .flatMap((id) => getDependencyResolution(assetGraph, id)),
464
+ ...changedAssets,
465
+ ]);
466
+ // Do a more efficient full traversal (less recomputations) if more than half of the assets
467
+ // changed.
468
+ let runFullPass =
469
+ // If there are n nodes in the graph, then the asset count is approximately
470
+ // n/6 (for every asset, there are ~4 dependencies and ~1 asset_group).
471
+ assetGraph.nodes.length * (1 / 6) * 0.5 <
472
+ changedDepsUsedSymbolsUpDirtyDownAssets.size;
473
+ // @ts-expect-error TS7034
474
+ let dirtyDeps;
475
+ if (runFullPass) {
476
+ dirtyDeps = new Set();
477
+ let rootNodeId = (0, nullthrows_1.default)(assetGraph.rootNodeId, 'A root node is required to traverse');
478
+ const nodeVisitor = (nodeId) => {
479
+ let node = (0, nullthrows_1.default)(assetGraph.getNode(nodeId));
480
+ if (node.type === 'asset') {
481
+ let outgoing = outgoingDependencyNodesFromAsset(assetGraph, nodeId);
482
+ for (let child of outgoing) {
483
+ if (child.usedSymbolsUpDirtyUp) {
484
+ node.usedSymbolsUpDirty = true;
485
+ child.usedSymbolsUpDirtyUp = false;
486
+ }
487
+ }
488
+ let incoming = incomingDependencyNodesFromAsset(assetGraph, node.value);
489
+ for (let dep of incoming) {
490
+ if (dep.usedSymbolsUpDirtyDown) {
491
+ dep.usedSymbolsUpDirtyDown = false;
492
+ node.usedSymbolsUpDirty = true;
493
+ }
494
+ }
495
+ if (node.usedSymbolsUpDirty) {
496
+ let e = visit(node, incoming, outgoing);
497
+ if (e.length > 0) {
498
+ node.usedSymbolsUpDirty = true;
499
+ errors.set(nodeId, e);
500
+ }
501
+ else {
502
+ node.usedSymbolsUpDirty = false;
503
+ errors.delete(nodeId);
504
+ }
505
+ }
506
+ }
507
+ else {
508
+ if (node.type === 'dependency') {
509
+ if (node.usedSymbolsUpDirtyUp) {
510
+ // @ts-expect-error TS7005
511
+ dirtyDeps.add(nodeId);
512
+ }
513
+ else {
514
+ // @ts-expect-error TS7005
515
+ dirtyDeps.delete(nodeId);
516
+ }
517
+ }
518
+ }
519
+ };
520
+ // @ts-expect-error TS2345
521
+ assetGraph.postOrderDfsFast(nodeVisitor, rootNodeId);
522
+ }
523
+ let queue = dirtyDeps ?? changedDepsUsedSymbolsUpDirtyDownAssets;
524
+ while (queue.size > 0) {
525
+ let queuedNodeId = setPop(queue);
526
+ let node = (0, nullthrows_1.default)(assetGraph.getNode(queuedNodeId));
527
+ if (node.type === 'asset') {
528
+ let incoming = incomingDependencyNodesFromAsset(assetGraph, node.value);
529
+ for (let dep of incoming) {
530
+ if (dep.usedSymbolsUpDirtyDown) {
531
+ dep.usedSymbolsUpDirtyDown = false;
532
+ node.usedSymbolsUpDirty = true;
533
+ }
534
+ }
535
+ let outgoing = outgoingDependencyNodesFromAsset(assetGraph, queuedNodeId);
536
+ for (let dep of outgoing) {
537
+ if (dep.usedSymbolsUpDirtyUp) {
538
+ node.usedSymbolsUpDirty = true;
539
+ dep.usedSymbolsUpDirtyUp = false;
540
+ }
541
+ }
542
+ if (node.usedSymbolsUpDirty) {
543
+ let e = visit(node, incoming, outgoing);
544
+ if (e.length > 0) {
545
+ node.usedSymbolsUpDirty = true;
546
+ errors.set(queuedNodeId, e);
547
+ }
548
+ else {
549
+ node.usedSymbolsUpDirty = false;
550
+ errors.delete(queuedNodeId);
551
+ }
552
+ }
553
+ for (let i of incoming) {
554
+ if (i.usedSymbolsUpDirtyUp) {
555
+ queue.add(assetGraph.getNodeIdByContentKey(i.id));
556
+ }
557
+ }
558
+ }
559
+ else {
560
+ let connectedNodes = assetGraph.getNodeIdsConnectedTo(queuedNodeId);
561
+ if (connectedNodes.length > 0) {
562
+ // @ts-expect-error TS2556
563
+ queue.add(...connectedNodes);
564
+ }
565
+ }
566
+ }
567
+ return errors;
568
+ }
569
+ function getDependencyResolution(graph, depId) {
570
+ let depNodeId = graph.getNodeIdByContentKey(depId);
571
+ let connected = graph.getNodeIdsConnectedFrom(depNodeId);
572
+ let resolvedNodeIds = [];
573
+ // If any of the resolved nodes is an asset_group, we need to resolve its
574
+ // assets here.
575
+ for (let child of connected) {
576
+ if (!child) {
577
+ continue;
578
+ }
579
+ let childNode = (0, nullthrows_1.default)(graph.getNode(child));
580
+ if (childNode.type === 'asset_group') {
581
+ resolvedNodeIds.push(...graph.getNodeIdsConnectedFrom(child));
582
+ }
583
+ else {
584
+ resolvedNodeIds.push(child);
585
+ }
586
+ }
587
+ return resolvedNodeIds;
588
+ }
589
+ function equalMap(a, b) {
590
+ if (a.size !== b.size)
591
+ return false;
592
+ for (let [k, v] of a) {
593
+ if (!b.has(k))
594
+ return false;
595
+ let vB = b.get(k);
596
+ if (vB?.asset !== v?.asset || vB?.symbol !== v?.symbol)
597
+ return false;
598
+ }
599
+ return true;
600
+ }
601
+ function setPop(set) {
602
+ let v = (0, nullthrows_1.default)(set.values().next().value);
603
+ set.delete(v);
604
+ return v;
605
+ }
606
+ function outgoingDependencyNodesFromAsset(assetGraph, assetNode) {
607
+ return dependencyNodesFromIds(assetGraph, assetGraph.getNodeIdsConnectedFrom(assetNode));
608
+ }
609
+ function dependencyNodesFromIds(assetGraph, dependencyIds) {
610
+ return dependencyIds.map((depNodeId) => {
611
+ let depNode = (0, nullthrows_1.default)(assetGraph.getNode(depNodeId));
612
+ (0, assert_1.default)(depNode.type === 'dependency');
613
+ return depNode;
614
+ });
615
+ }
616
+ function incomingDependencyNodesFromAsset(assetGraph,
617
+ // @ts-expect-error TS2552
618
+ assetNodeValue) {
619
+ return assetGraph.getIncomingDependencies(assetNodeValue).map((d) => {
620
+ let n = assetGraph.getNodeByContentKey(d.id);
621
+ (0, assert_1.default)(n && n.type === 'dependency');
622
+ return n;
623
+ });
624
+ }