@vltpkg/graph 1.0.0-rc.1 → 1.0.0-rc.11

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 (329) hide show
  1. package/dist/actual/load.d.ts.map +1 -0
  2. package/dist/{esm/actual → actual}/load.js +35 -14
  3. package/dist/actual/load.js.map +1 -0
  4. package/dist/{esm/browser.d.ts → browser.d.ts} +1 -1
  5. package/dist/browser.d.ts.map +1 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/build.d.ts.map +1 -0
  8. package/dist/build.js.map +1 -0
  9. package/dist/dependencies.d.ts.map +1 -0
  10. package/dist/dependencies.js.map +1 -0
  11. package/dist/{esm/diff.d.ts → diff.d.ts} +2 -0
  12. package/dist/diff.d.ts.map +1 -0
  13. package/dist/diff.js.map +1 -0
  14. package/dist/{esm/edge.d.ts → edge.d.ts} +1 -0
  15. package/dist/edge.d.ts.map +1 -0
  16. package/dist/{esm/edge.js → edge.js} +4 -0
  17. package/dist/edge.js.map +1 -0
  18. package/dist/fixup-added-names.d.ts +16 -0
  19. package/dist/fixup-added-names.d.ts.map +1 -0
  20. package/dist/fixup-added-names.js +31 -0
  21. package/dist/fixup-added-names.js.map +1 -0
  22. package/dist/{esm/graph.d.ts → graph.d.ts} +18 -4
  23. package/dist/graph.d.ts.map +1 -0
  24. package/dist/{esm/graph.js → graph.js} +63 -40
  25. package/dist/graph.js.map +1 -0
  26. package/dist/{esm/ideal → ideal}/append-nodes.d.ts +2 -1
  27. package/dist/ideal/append-nodes.d.ts.map +1 -0
  28. package/dist/ideal/append-nodes.js +395 -0
  29. package/dist/ideal/append-nodes.js.map +1 -0
  30. package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.d.ts +4 -4
  31. package/dist/ideal/build-ideal-from-starting-graph.d.ts.map +1 -0
  32. package/dist/ideal/build-ideal-from-starting-graph.js +70 -0
  33. package/dist/ideal/build-ideal-from-starting-graph.js.map +1 -0
  34. package/dist/ideal/build.d.ts.map +1 -0
  35. package/dist/{esm/ideal → ideal}/build.js +29 -2
  36. package/dist/ideal/build.js.map +1 -0
  37. package/dist/{esm/ideal → ideal}/get-importer-specs.d.ts +9 -2
  38. package/dist/ideal/get-importer-specs.d.ts.map +1 -0
  39. package/dist/{esm/ideal → ideal}/get-importer-specs.js +80 -5
  40. package/dist/ideal/get-importer-specs.js.map +1 -0
  41. package/dist/ideal/get-ordered-dependencies.d.ts +10 -0
  42. package/dist/ideal/get-ordered-dependencies.d.ts.map +1 -0
  43. package/dist/ideal/get-ordered-dependencies.js +42 -0
  44. package/dist/ideal/get-ordered-dependencies.js.map +1 -0
  45. package/dist/ideal/peers.d.ts +76 -0
  46. package/dist/ideal/peers.d.ts.map +1 -0
  47. package/dist/ideal/peers.js +340 -0
  48. package/dist/ideal/peers.js.map +1 -0
  49. package/dist/ideal/refresh-ideal-graph.d.ts +48 -0
  50. package/dist/ideal/refresh-ideal-graph.d.ts.map +1 -0
  51. package/dist/ideal/refresh-ideal-graph.js +79 -0
  52. package/dist/ideal/refresh-ideal-graph.js.map +1 -0
  53. package/dist/ideal/remove-satisfied-specs.d.ts.map +1 -0
  54. package/dist/ideal/remove-satisfied-specs.js.map +1 -0
  55. package/dist/ideal/types.d.ts +112 -0
  56. package/dist/ideal/types.d.ts.map +1 -0
  57. package/dist/ideal/types.js.map +1 -0
  58. package/dist/{esm/index.d.ts → index.d.ts} +2 -1
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/{esm/index.js → index.js} +1 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/{esm/install.d.ts → install.d.ts} +3 -2
  63. package/dist/install.d.ts.map +1 -0
  64. package/dist/{esm/install.js → install.js} +30 -6
  65. package/dist/install.js.map +1 -0
  66. package/dist/lockfile/load-edges.d.ts.map +1 -0
  67. package/dist/{esm/lockfile → lockfile}/load-edges.js +4 -3
  68. package/dist/lockfile/load-edges.js.map +1 -0
  69. package/dist/{esm/lockfile → lockfile}/load-nodes.d.ts +1 -1
  70. package/dist/lockfile/load-nodes.d.ts.map +1 -0
  71. package/dist/{esm/lockfile → lockfile}/load-nodes.js +16 -4
  72. package/dist/lockfile/load-nodes.js.map +1 -0
  73. package/dist/{esm/lockfile → lockfile}/load.d.ts +2 -2
  74. package/dist/lockfile/load.d.ts.map +1 -0
  75. package/dist/{esm/lockfile → lockfile}/load.js +6 -29
  76. package/dist/lockfile/load.js.map +1 -0
  77. package/dist/{esm/lockfile → lockfile}/save.d.ts +5 -1
  78. package/dist/lockfile/save.d.ts.map +1 -0
  79. package/dist/{esm/lockfile → lockfile}/save.js +23 -9
  80. package/dist/lockfile/save.js.map +1 -0
  81. package/dist/lockfile/types.d.ts.map +1 -0
  82. package/dist/lockfile/types.js.map +1 -0
  83. package/dist/modifiers.d.ts.map +1 -0
  84. package/dist/modifiers.js.map +1 -0
  85. package/dist/{esm/node.d.ts → node.d.ts} +14 -0
  86. package/dist/node.d.ts.map +1 -0
  87. package/dist/{esm/node.js → node.js} +21 -0
  88. package/dist/node.js.map +1 -0
  89. package/dist/non-empty-list.d.ts.map +1 -0
  90. package/dist/non-empty-list.js.map +1 -0
  91. package/dist/reify/add-edge.d.ts.map +1 -0
  92. package/dist/reify/add-edge.js.map +1 -0
  93. package/dist/{esm/reify → reify}/add-edges.d.ts +1 -1
  94. package/dist/reify/add-edges.d.ts.map +1 -0
  95. package/dist/{esm/reify → reify}/add-edges.js +2 -1
  96. package/dist/reify/add-edges.js.map +1 -0
  97. package/dist/reify/add-nodes.d.ts.map +1 -0
  98. package/dist/reify/add-nodes.js.map +1 -0
  99. package/dist/reify/bin-chmod.d.ts.map +1 -0
  100. package/dist/reify/bin-chmod.js.map +1 -0
  101. package/dist/reify/build.d.ts.map +1 -0
  102. package/dist/{esm/reify → reify}/build.js +1 -1
  103. package/dist/reify/build.js.map +1 -0
  104. package/dist/reify/calculate-save-value.d.ts.map +1 -0
  105. package/dist/reify/calculate-save-value.js.map +1 -0
  106. package/dist/reify/check-needed-build.d.ts.map +1 -0
  107. package/dist/reify/check-needed-build.js.map +1 -0
  108. package/dist/reify/delete-edge.d.ts.map +1 -0
  109. package/dist/reify/delete-edge.js.map +1 -0
  110. package/dist/reify/delete-edges.d.ts.map +1 -0
  111. package/dist/reify/delete-edges.js.map +1 -0
  112. package/dist/reify/delete-nodes.d.ts.map +1 -0
  113. package/dist/reify/delete-nodes.js.map +1 -0
  114. package/dist/reify/extract-node.d.ts.map +1 -0
  115. package/dist/{esm/reify → reify}/extract-node.js +10 -2
  116. package/dist/reify/extract-node.js.map +1 -0
  117. package/dist/reify/index.d.ts.map +1 -0
  118. package/dist/{esm/reify → reify}/index.js +1 -1
  119. package/dist/reify/index.js.map +1 -0
  120. package/dist/reify/internal-hoist.d.ts.map +1 -0
  121. package/dist/reify/internal-hoist.js.map +1 -0
  122. package/dist/reify/optional-fail.d.ts.map +1 -0
  123. package/dist/reify/optional-fail.js.map +1 -0
  124. package/dist/reify/rollback.d.ts.map +1 -0
  125. package/dist/reify/rollback.js.map +1 -0
  126. package/dist/{esm/reify → reify}/update-importers-package-json.d.ts +1 -1
  127. package/dist/reify/update-importers-package-json.d.ts.map +1 -0
  128. package/dist/{esm/reify → reify}/update-importers-package-json.js +19 -16
  129. package/dist/reify/update-importers-package-json.js.map +1 -0
  130. package/dist/remove-optional-subgraph.d.ts.map +1 -0
  131. package/dist/remove-optional-subgraph.js.map +1 -0
  132. package/dist/resolve-save-type.d.ts.map +1 -0
  133. package/dist/resolve-save-type.js.map +1 -0
  134. package/dist/stringify-node.d.ts.map +1 -0
  135. package/dist/{esm/stringify-node.js → stringify-node.js} +10 -1
  136. package/dist/stringify-node.js.map +1 -0
  137. package/dist/transfer-data/load.d.ts.map +1 -0
  138. package/dist/transfer-data/load.js.map +1 -0
  139. package/dist/uninstall.d.ts.map +1 -0
  140. package/dist/{esm/uninstall.js → uninstall.js} +10 -0
  141. package/dist/uninstall.js.map +1 -0
  142. package/dist/update.d.ts.map +1 -0
  143. package/dist/{esm/update.js → update.js} +10 -0
  144. package/dist/update.js.map +1 -0
  145. package/dist/virtual-root.d.ts.map +1 -0
  146. package/dist/virtual-root.js.map +1 -0
  147. package/dist/visualization/human-readable-output.d.ts.map +1 -0
  148. package/dist/{esm/visualization → visualization}/human-readable-output.js +7 -2
  149. package/dist/visualization/human-readable-output.js.map +1 -0
  150. package/dist/{esm/visualization → visualization}/json-output.d.ts +2 -1
  151. package/dist/visualization/json-output.d.ts.map +1 -0
  152. package/dist/{esm/visualization → visualization}/json-output.js +2 -2
  153. package/dist/visualization/json-output.js.map +1 -0
  154. package/dist/visualization/mermaid-output.d.ts.map +1 -0
  155. package/dist/{esm/visualization → visualization}/mermaid-output.js +57 -16
  156. package/dist/visualization/mermaid-output.js.map +1 -0
  157. package/dist/visualization/object-like-output.d.ts.map +1 -0
  158. package/dist/visualization/object-like-output.js.map +1 -0
  159. package/package.json +34 -50
  160. package/dist/esm/actual/load.d.ts.map +0 -1
  161. package/dist/esm/actual/load.js.map +0 -1
  162. package/dist/esm/browser.d.ts.map +0 -1
  163. package/dist/esm/browser.js.map +0 -1
  164. package/dist/esm/build.d.ts.map +0 -1
  165. package/dist/esm/build.js.map +0 -1
  166. package/dist/esm/dependencies.d.ts.map +0 -1
  167. package/dist/esm/dependencies.js.map +0 -1
  168. package/dist/esm/diff.d.ts.map +0 -1
  169. package/dist/esm/diff.js.map +0 -1
  170. package/dist/esm/edge.d.ts.map +0 -1
  171. package/dist/esm/edge.js.map +0 -1
  172. package/dist/esm/graph.d.ts.map +0 -1
  173. package/dist/esm/graph.js.map +0 -1
  174. package/dist/esm/ideal/add-nodes.d.ts +0 -34
  175. package/dist/esm/ideal/add-nodes.d.ts.map +0 -1
  176. package/dist/esm/ideal/add-nodes.js +0 -39
  177. package/dist/esm/ideal/add-nodes.js.map +0 -1
  178. package/dist/esm/ideal/append-nodes.d.ts.map +0 -1
  179. package/dist/esm/ideal/append-nodes.js +0 -288
  180. package/dist/esm/ideal/append-nodes.js.map +0 -1
  181. package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts.map +0 -1
  182. package/dist/esm/ideal/build-ideal-from-starting-graph.js +0 -55
  183. package/dist/esm/ideal/build-ideal-from-starting-graph.js.map +0 -1
  184. package/dist/esm/ideal/build.d.ts.map +0 -1
  185. package/dist/esm/ideal/build.js.map +0 -1
  186. package/dist/esm/ideal/get-importer-specs.d.ts.map +0 -1
  187. package/dist/esm/ideal/get-importer-specs.js.map +0 -1
  188. package/dist/esm/ideal/remove-nodes.d.ts +0 -7
  189. package/dist/esm/ideal/remove-nodes.d.ts.map +0 -1
  190. package/dist/esm/ideal/remove-nodes.js +0 -19
  191. package/dist/esm/ideal/remove-nodes.js.map +0 -1
  192. package/dist/esm/ideal/remove-satisfied-specs.d.ts.map +0 -1
  193. package/dist/esm/ideal/remove-satisfied-specs.js.map +0 -1
  194. package/dist/esm/ideal/types.d.ts +0 -35
  195. package/dist/esm/ideal/types.d.ts.map +0 -1
  196. package/dist/esm/ideal/types.js.map +0 -1
  197. package/dist/esm/index.d.ts.map +0 -1
  198. package/dist/esm/index.js.map +0 -1
  199. package/dist/esm/install.d.ts.map +0 -1
  200. package/dist/esm/install.js.map +0 -1
  201. package/dist/esm/lockfile/load-edges.d.ts.map +0 -1
  202. package/dist/esm/lockfile/load-edges.js.map +0 -1
  203. package/dist/esm/lockfile/load-nodes.d.ts.map +0 -1
  204. package/dist/esm/lockfile/load-nodes.js.map +0 -1
  205. package/dist/esm/lockfile/load.d.ts.map +0 -1
  206. package/dist/esm/lockfile/load.js.map +0 -1
  207. package/dist/esm/lockfile/save.d.ts.map +0 -1
  208. package/dist/esm/lockfile/save.js.map +0 -1
  209. package/dist/esm/lockfile/types.d.ts.map +0 -1
  210. package/dist/esm/lockfile/types.js.map +0 -1
  211. package/dist/esm/modifiers.d.ts.map +0 -1
  212. package/dist/esm/modifiers.js.map +0 -1
  213. package/dist/esm/node.d.ts.map +0 -1
  214. package/dist/esm/node.js.map +0 -1
  215. package/dist/esm/non-empty-list.d.ts.map +0 -1
  216. package/dist/esm/non-empty-list.js.map +0 -1
  217. package/dist/esm/package.json +0 -3
  218. package/dist/esm/reify/add-edge.d.ts.map +0 -1
  219. package/dist/esm/reify/add-edge.js.map +0 -1
  220. package/dist/esm/reify/add-edges.d.ts.map +0 -1
  221. package/dist/esm/reify/add-edges.js.map +0 -1
  222. package/dist/esm/reify/add-nodes.d.ts.map +0 -1
  223. package/dist/esm/reify/add-nodes.js.map +0 -1
  224. package/dist/esm/reify/bin-chmod.d.ts.map +0 -1
  225. package/dist/esm/reify/bin-chmod.js.map +0 -1
  226. package/dist/esm/reify/build.d.ts.map +0 -1
  227. package/dist/esm/reify/build.js.map +0 -1
  228. package/dist/esm/reify/calculate-save-value.d.ts.map +0 -1
  229. package/dist/esm/reify/calculate-save-value.js.map +0 -1
  230. package/dist/esm/reify/check-needed-build.d.ts.map +0 -1
  231. package/dist/esm/reify/check-needed-build.js.map +0 -1
  232. package/dist/esm/reify/delete-edge.d.ts.map +0 -1
  233. package/dist/esm/reify/delete-edge.js.map +0 -1
  234. package/dist/esm/reify/delete-edges.d.ts.map +0 -1
  235. package/dist/esm/reify/delete-edges.js.map +0 -1
  236. package/dist/esm/reify/delete-nodes.d.ts.map +0 -1
  237. package/dist/esm/reify/delete-nodes.js.map +0 -1
  238. package/dist/esm/reify/extract-node.d.ts.map +0 -1
  239. package/dist/esm/reify/extract-node.js.map +0 -1
  240. package/dist/esm/reify/index.d.ts.map +0 -1
  241. package/dist/esm/reify/index.js.map +0 -1
  242. package/dist/esm/reify/internal-hoist.d.ts.map +0 -1
  243. package/dist/esm/reify/internal-hoist.js.map +0 -1
  244. package/dist/esm/reify/optional-fail.d.ts.map +0 -1
  245. package/dist/esm/reify/optional-fail.js.map +0 -1
  246. package/dist/esm/reify/rollback.d.ts.map +0 -1
  247. package/dist/esm/reify/rollback.js.map +0 -1
  248. package/dist/esm/reify/update-importers-package-json.d.ts.map +0 -1
  249. package/dist/esm/reify/update-importers-package-json.js.map +0 -1
  250. package/dist/esm/remove-optional-subgraph.d.ts.map +0 -1
  251. package/dist/esm/remove-optional-subgraph.js.map +0 -1
  252. package/dist/esm/resolve-save-type.d.ts.map +0 -1
  253. package/dist/esm/resolve-save-type.js.map +0 -1
  254. package/dist/esm/stringify-node.d.ts.map +0 -1
  255. package/dist/esm/stringify-node.js.map +0 -1
  256. package/dist/esm/transfer-data/load.d.ts.map +0 -1
  257. package/dist/esm/transfer-data/load.js.map +0 -1
  258. package/dist/esm/uninstall.d.ts.map +0 -1
  259. package/dist/esm/uninstall.js.map +0 -1
  260. package/dist/esm/update.d.ts.map +0 -1
  261. package/dist/esm/update.js.map +0 -1
  262. package/dist/esm/virtual-root.d.ts.map +0 -1
  263. package/dist/esm/virtual-root.js.map +0 -1
  264. package/dist/esm/visualization/human-readable-output.d.ts.map +0 -1
  265. package/dist/esm/visualization/human-readable-output.js.map +0 -1
  266. package/dist/esm/visualization/json-output.d.ts.map +0 -1
  267. package/dist/esm/visualization/json-output.js.map +0 -1
  268. package/dist/esm/visualization/mermaid-output.d.ts.map +0 -1
  269. package/dist/esm/visualization/mermaid-output.js.map +0 -1
  270. package/dist/esm/visualization/object-like-output.d.ts.map +0 -1
  271. package/dist/esm/visualization/object-like-output.js.map +0 -1
  272. /package/dist/{esm/actual → actual}/load.d.ts +0 -0
  273. /package/dist/{esm/browser.js → browser.js} +0 -0
  274. /package/dist/{esm/build.d.ts → build.d.ts} +0 -0
  275. /package/dist/{esm/build.js → build.js} +0 -0
  276. /package/dist/{esm/dependencies.d.ts → dependencies.d.ts} +0 -0
  277. /package/dist/{esm/dependencies.js → dependencies.js} +0 -0
  278. /package/dist/{esm/diff.js → diff.js} +0 -0
  279. /package/dist/{esm/ideal → ideal}/build.d.ts +0 -0
  280. /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.d.ts +0 -0
  281. /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.js +0 -0
  282. /package/dist/{esm/ideal → ideal}/types.js +0 -0
  283. /package/dist/{esm/lockfile → lockfile}/load-edges.d.ts +0 -0
  284. /package/dist/{esm/lockfile → lockfile}/types.d.ts +0 -0
  285. /package/dist/{esm/lockfile → lockfile}/types.js +0 -0
  286. /package/dist/{esm/modifiers.d.ts → modifiers.d.ts} +0 -0
  287. /package/dist/{esm/modifiers.js → modifiers.js} +0 -0
  288. /package/dist/{esm/non-empty-list.d.ts → non-empty-list.d.ts} +0 -0
  289. /package/dist/{esm/non-empty-list.js → non-empty-list.js} +0 -0
  290. /package/dist/{esm/reify → reify}/add-edge.d.ts +0 -0
  291. /package/dist/{esm/reify → reify}/add-edge.js +0 -0
  292. /package/dist/{esm/reify → reify}/add-nodes.d.ts +0 -0
  293. /package/dist/{esm/reify → reify}/add-nodes.js +0 -0
  294. /package/dist/{esm/reify → reify}/bin-chmod.d.ts +0 -0
  295. /package/dist/{esm/reify → reify}/bin-chmod.js +0 -0
  296. /package/dist/{esm/reify → reify}/build.d.ts +0 -0
  297. /package/dist/{esm/reify → reify}/calculate-save-value.d.ts +0 -0
  298. /package/dist/{esm/reify → reify}/calculate-save-value.js +0 -0
  299. /package/dist/{esm/reify → reify}/check-needed-build.d.ts +0 -0
  300. /package/dist/{esm/reify → reify}/check-needed-build.js +0 -0
  301. /package/dist/{esm/reify → reify}/delete-edge.d.ts +0 -0
  302. /package/dist/{esm/reify → reify}/delete-edge.js +0 -0
  303. /package/dist/{esm/reify → reify}/delete-edges.d.ts +0 -0
  304. /package/dist/{esm/reify → reify}/delete-edges.js +0 -0
  305. /package/dist/{esm/reify → reify}/delete-nodes.d.ts +0 -0
  306. /package/dist/{esm/reify → reify}/delete-nodes.js +0 -0
  307. /package/dist/{esm/reify → reify}/extract-node.d.ts +0 -0
  308. /package/dist/{esm/reify → reify}/index.d.ts +0 -0
  309. /package/dist/{esm/reify → reify}/internal-hoist.d.ts +0 -0
  310. /package/dist/{esm/reify → reify}/internal-hoist.js +0 -0
  311. /package/dist/{esm/reify → reify}/optional-fail.d.ts +0 -0
  312. /package/dist/{esm/reify → reify}/optional-fail.js +0 -0
  313. /package/dist/{esm/reify → reify}/rollback.d.ts +0 -0
  314. /package/dist/{esm/reify → reify}/rollback.js +0 -0
  315. /package/dist/{esm/remove-optional-subgraph.d.ts → remove-optional-subgraph.d.ts} +0 -0
  316. /package/dist/{esm/remove-optional-subgraph.js → remove-optional-subgraph.js} +0 -0
  317. /package/dist/{esm/resolve-save-type.d.ts → resolve-save-type.d.ts} +0 -0
  318. /package/dist/{esm/resolve-save-type.js → resolve-save-type.js} +0 -0
  319. /package/dist/{esm/stringify-node.d.ts → stringify-node.d.ts} +0 -0
  320. /package/dist/{esm/transfer-data → transfer-data}/load.d.ts +0 -0
  321. /package/dist/{esm/transfer-data → transfer-data}/load.js +0 -0
  322. /package/dist/{esm/uninstall.d.ts → uninstall.d.ts} +0 -0
  323. /package/dist/{esm/update.d.ts → update.d.ts} +0 -0
  324. /package/dist/{esm/virtual-root.d.ts → virtual-root.d.ts} +0 -0
  325. /package/dist/{esm/virtual-root.js → virtual-root.js} +0 -0
  326. /package/dist/{esm/visualization → visualization}/human-readable-output.d.ts +0 -0
  327. /package/dist/{esm/visualization → visualization}/mermaid-output.d.ts +0 -0
  328. /package/dist/{esm/visualization → visualization}/object-like-output.d.ts +0 -0
  329. /package/dist/{esm/visualization → visualization}/object-like-output.js +0 -0
@@ -1,7 +1,12 @@
1
1
  import type { AddImportersDependenciesMap, RemoveImportersDependenciesMap } from '../dependencies.ts';
2
- import type { BuildIdealAddOptions, BuildIdealFromGraphOptions, BuildIdealRemoveOptions } from './types.ts';
2
+ import type { BuildIdealAddOptions, BuildIdealFromGraphOptions, BuildIdealRemoveOptions, TransientAddMap, TransientRemoveMap } from './types.ts';
3
3
  import type { SpecOptions } from '@vltpkg/spec';
4
- export type GetImporterSpecsOptions = BuildIdealAddOptions & BuildIdealFromGraphOptions & BuildIdealRemoveOptions & SpecOptions;
4
+ import type { PackageJson } from '@vltpkg/package-json';
5
+ import type { PathScurry } from 'path-scurry';
6
+ export type GetImporterSpecsOptions = BuildIdealAddOptions & BuildIdealFromGraphOptions & BuildIdealRemoveOptions & SpecOptions & {
7
+ scurry: PathScurry;
8
+ packageJson: PackageJson;
9
+ };
5
10
  /**
6
11
  * Given a {@link Graph} and a list of {@link Dependency}, merges the
7
12
  * dependencies info found in the graph importers and returns the add & remove
@@ -10,5 +15,7 @@ export type GetImporterSpecsOptions = BuildIdealAddOptions & BuildIdealFromGraph
10
15
  export declare const getImporterSpecs: (options: GetImporterSpecsOptions) => {
11
16
  add: AddImportersDependenciesMap;
12
17
  remove: RemoveImportersDependenciesMap;
18
+ transientAdd: TransientAddMap;
19
+ transientRemove: TransientRemoveMap;
13
20
  };
14
21
  //# sourceMappingURL=get-importer-specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-importer-specs.d.ts","sourceRoot":"","sources":["../../src/ideal/get-importer-specs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAE3B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAMnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GACxD,0BAA0B,GAC1B,uBAAuB,GACvB,WAAW,GAAG;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;CACzB,CAAA;AAyBH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAClB,uBAAuB;;;;;CAoLjC,CAAA"}
@@ -1,4 +1,3 @@
1
- import { error } from '@vltpkg/error-cause';
2
1
  import { longDependencyTypes } from '@vltpkg/types';
3
2
  import { shorten, asDependency } from "../dependencies.js";
4
3
  import { removeSatisfiedSpecs } from "./remove-satisfied-specs.js";
@@ -47,23 +46,85 @@ export const getImporterSpecs = (options) => {
47
46
  const deps = Object.entries(importer.manifest?.[depType] ?? {});
48
47
  for (const [depName, depSpec] of deps) {
49
48
  const edge = importer.edgesOut.get(depName);
49
+ // skip if the edge exists and already uses the same spec
50
+ if (edge?.to && depSpec === edge.spec.bareSpec)
51
+ continue;
50
52
  const dependency = asDependency({
51
53
  spec: Spec.parse(depName, depSpec, options),
52
54
  type: shorten(depType, depName, importer.manifest),
53
55
  });
54
- if (!edge?.to) {
55
- addDeps.set(depName, dependency);
56
- }
56
+ addDeps.set(depName, dependency);
57
57
  }
58
58
  }
59
59
  addResult.set(importer.id, addDeps);
60
60
  removeResult.set(importer.id, removeDeps);
61
61
  }
62
+ // Maps to store dependencies targeting non-importer nodes (e.g., nested folders)
63
+ // These will be injected when the target node is placed in the graph
64
+ const transientAdd = new Map();
65
+ const transientRemove = new Map();
66
+ // Traverse all nodes in the graph to find file type dependencies that are directories
67
+ // and populate transientAdd/transientRemove with their manifest dependencies
68
+ // Only process when scurry and packageJson are available
69
+ for (const node of graph.nodes.values()) {
70
+ // Skip importers as they're already handled above and also skip
71
+ // any non-file type dependencies
72
+ if (graph.importers.has(node) || !node.id.startsWith('file'))
73
+ continue;
74
+ // check if this is a file type dependency that is a directory
75
+ const nodePath = options.scurry.cwd.resolve(node.location);
76
+ const stat = nodePath.lstatSync();
77
+ if (stat?.isDirectory()) {
78
+ // load the manifest for this directory (throw if it does not exist)
79
+ const manifest = options.packageJson.read(nodePath.fullpath());
80
+ // should always set the manifest to the read manifest
81
+ node.manifest = manifest;
82
+ // create a map of dependencies from the manifest
83
+ const addDeps = new Map();
84
+ // check for edges not in manifest (should be removed)
85
+ const removeDeps = new Set();
86
+ for (const edge of node.edgesOut.values()) {
87
+ if (!hasDepName(node, edge) &&
88
+ !add.get(node.id)?.has(edge.name)) {
89
+ removeDeps.add(edge.name);
90
+ }
91
+ }
92
+ // iterate over manifest dependencies to add them if
93
+ // they're missing from the graph
94
+ for (const depType of longDependencyTypes) {
95
+ const deps = Object.entries(manifest[depType] ?? {});
96
+ for (const [depName, depSpec] of deps) {
97
+ const edge = node.edgesOut.get(depName);
98
+ // skip if the edge exists and already uses the same spec
99
+ if (edge?.to && depSpec === edge.spec.bareSpec)
100
+ continue;
101
+ // add the dependency to the addDeps map
102
+ const dependency = asDependency({
103
+ spec: Spec.parse(depName, depSpec, options),
104
+ type: shorten(depType, depName, manifest),
105
+ });
106
+ addDeps.set(depName, dependency);
107
+ }
108
+ }
109
+ // store in transientAdd if there are any dependencies
110
+ if (addDeps.size > 0) {
111
+ transientAdd.set(node.id, addDeps);
112
+ }
113
+ // store in transientRemove if there are any to remove
114
+ if (removeDeps.size > 0) {
115
+ transientRemove.set(node.id, removeDeps);
116
+ }
117
+ }
118
+ }
62
119
  // merges any provided specs to add to the current found results
63
120
  for (const [id, addDeps] of add.entries()) {
64
121
  const deps = addResult.get(id);
65
122
  if (!deps) {
66
- throw error('Not an importer', { found: id });
123
+ // Not an importer - only store file-type deps for later injection
124
+ if (id.startsWith('file')) {
125
+ transientAdd.set(id, addDeps);
126
+ }
127
+ continue;
67
128
  }
68
129
  for (const [name, dep] of addDeps.entries()) {
69
130
  deps.set(name, dep);
@@ -78,6 +139,18 @@ export const getImporterSpecs = (options) => {
78
139
  importerRemoveItem.add(depName);
79
140
  }
80
141
  }
142
+ else if (key.startsWith('file')) {
143
+ // Not an importer - only store file-type deps in transientRemove
144
+ const existing = transientRemove.get(key);
145
+ if (existing) {
146
+ for (const depName of removeSet) {
147
+ existing.add(depName);
148
+ }
149
+ }
150
+ else {
151
+ transientRemove.set(key, new Set(removeSet));
152
+ }
153
+ }
81
154
  }
82
155
  // Removes any references to an importer that no longer has specs
83
156
  for (const [key, removeItem] of removeResult) {
@@ -101,6 +174,8 @@ export const getImporterSpecs = (options) => {
101
174
  return {
102
175
  add: addResult,
103
176
  remove: removeResult,
177
+ transientAdd,
178
+ transientRemove,
104
179
  };
105
180
  };
106
181
  //# sourceMappingURL=get-importer-specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-importer-specs.js","sourceRoot":"","sources":["../../src/ideal/get-importer-specs.ts"],"names":[],"mappings":"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","sourcesContent":["import { longDependencyTypes } from '@vltpkg/types'\nimport { shorten, asDependency } from '../dependencies.ts'\nimport type {\n AddImportersDependenciesMap,\n Dependency,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport { removeSatisfiedSpecs } from './remove-satisfied-specs.ts'\nimport type {\n BuildIdealAddOptions,\n BuildIdealFromGraphOptions,\n BuildIdealRemoveOptions,\n TransientAddMap,\n TransientRemoveMap,\n} from './types.ts'\nimport type { Edge } from '../edge.ts'\nimport type { Node } from '../node.ts'\nimport type { Graph } from '../graph.ts'\nimport type { DepID } from '@vltpkg/dep-id'\nimport { Spec } from '@vltpkg/spec'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport type { PathScurry } from 'path-scurry'\n\nexport type GetImporterSpecsOptions = BuildIdealAddOptions &\n BuildIdealFromGraphOptions &\n BuildIdealRemoveOptions &\n SpecOptions & {\n scurry: PathScurry\n packageJson: PackageJson\n }\n\nconst hasDepName = (importer: Node, edge: Edge): boolean => {\n for (const depType of longDependencyTypes) {\n const listedDeps = importer.manifest?.[depType]\n if (listedDeps && Object.hasOwn(listedDeps, edge.name))\n return true\n }\n return false\n}\n\nclass AddImportersDependenciesMapImpl\n extends Map\n implements AddImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\nclass RemoveImportersDependenciesMapImpl\n extends Map\n implements RemoveImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\n/**\n * Given a {@link Graph} and a list of {@link Dependency}, merges the\n * dependencies info found in the graph importers and returns the add & remove\n * results as a Map in which keys are {@link DepID} of each importer node.\n */\nexport const getImporterSpecs = (\n options: GetImporterSpecsOptions,\n) => {\n const { add, graph, remove } = options\n const addResult: AddImportersDependenciesMap =\n new AddImportersDependenciesMapImpl()\n const removeResult: RemoveImportersDependenciesMap =\n new RemoveImportersDependenciesMapImpl()\n\n // traverse the list of importers in the starting graph\n for (const importer of graph.importers) {\n // uses a Map keying to the spec.name in order to easily make sure there's\n // only a single dependency entry for a given dependency for each importer\n const addDeps = new Map<string, Dependency>()\n const removeDeps = new Set<string>()\n // if an edge from the graph is not listed in the manifest,\n // add that edge to the list of dependencies to be removed\n for (const edge of importer.edgesOut.values()) {\n if (\n !hasDepName(importer, edge) &&\n !add.get(importer.id)?.has(edge.name)\n ) {\n removeDeps.add(edge.name)\n removeResult.modifiedDependencies = true\n }\n }\n // if a dependency is listed in the manifest but not in the graph,\n // add that dependency to the list of dependencies to be added\n for (const depType of longDependencyTypes) {\n const deps = Object.entries(importer.manifest?.[depType] ?? {})\n for (const [depName, depSpec] of deps) {\n const edge = importer.edgesOut.get(depName)\n\n // skip if the edge exists and already uses the same spec\n if (edge?.to && depSpec === edge.spec.bareSpec) continue\n\n const dependency = asDependency({\n spec: Spec.parse(depName, depSpec, options),\n type: shorten(depType, depName, importer.manifest),\n })\n addDeps.set(depName, dependency)\n }\n }\n addResult.set(importer.id, addDeps)\n removeResult.set(importer.id, removeDeps)\n }\n\n // Maps to store dependencies targeting non-importer nodes (e.g., nested folders)\n // These will be injected when the target node is placed in the graph\n const transientAdd = new Map() as TransientAddMap\n const transientRemove = new Map() as TransientRemoveMap\n\n // Traverse all nodes in the graph to find file type dependencies that are directories\n // and populate transientAdd/transientRemove with their manifest dependencies\n // Only process when scurry and packageJson are available\n for (const node of graph.nodes.values()) {\n // Skip importers as they're already handled above and also skip\n // any non-file type dependencies\n if (graph.importers.has(node) || !node.id.startsWith('file'))\n continue\n\n // check if this is a file type dependency that is a directory\n const nodePath = options.scurry.cwd.resolve(node.location)\n const stat = nodePath.lstatSync()\n\n if (stat?.isDirectory()) {\n // load the manifest for this directory (throw if it does not exist)\n const manifest = options.packageJson.read(nodePath.fullpath())\n\n // should always set the manifest to the read manifest\n node.manifest = manifest\n\n // create a map of dependencies from the manifest\n const addDeps = new Map<string, Dependency>()\n\n // check for edges not in manifest (should be removed)\n const removeDeps = new Set<string>()\n for (const edge of node.edgesOut.values()) {\n if (\n !hasDepName(node, edge) &&\n !add.get(node.id)?.has(edge.name)\n ) {\n removeDeps.add(edge.name)\n }\n }\n\n // iterate over manifest dependencies to add them if\n // they're missing from the graph\n for (const depType of longDependencyTypes) {\n const deps = Object.entries(manifest[depType] ?? {})\n for (const [depName, depSpec] of deps) {\n const edge = node.edgesOut.get(depName)\n\n // skip if the edge exists and already uses the same spec\n if (edge?.to && depSpec === edge.spec.bareSpec) continue\n\n // add the dependency to the addDeps map\n const dependency = asDependency({\n spec: Spec.parse(depName, depSpec, options),\n type: shorten(depType, depName, manifest),\n })\n addDeps.set(depName, dependency)\n }\n }\n\n // store in transientAdd if there are any dependencies\n if (addDeps.size > 0) {\n transientAdd.set(node.id, addDeps)\n }\n\n // store in transientRemove if there are any to remove\n if (removeDeps.size > 0) {\n transientRemove.set(node.id, removeDeps)\n }\n }\n }\n\n // merges any provided specs to add to the current found results\n for (const [id, addDeps] of add.entries()) {\n const deps = addResult.get(id)\n if (!deps) {\n // Not an importer - only store file-type deps for later injection\n if (id.startsWith('file')) {\n transientAdd.set(id, addDeps)\n }\n continue\n }\n for (const [name, dep] of addDeps.entries()) {\n deps.set(name, dep)\n }\n }\n\n // Merges results from user-provided `remove` option with any remove\n // results found from comparing the manifest with the loaded graph\n for (const [key, removeSet] of remove) {\n const importerRemoveItem = removeResult.get(key)\n if (importerRemoveItem) {\n for (const depName of removeSet) {\n importerRemoveItem.add(depName)\n }\n } else if (key.startsWith('file')) {\n // Not an importer - only store file-type deps in transientRemove\n const existing = transientRemove.get(key)\n if (existing) {\n for (const depName of removeSet) {\n existing.add(depName)\n }\n } else {\n transientRemove.set(key, new Set(removeSet))\n }\n }\n }\n\n // Removes any references to an importer that no longer has specs\n for (const [key, removeItem] of removeResult) {\n if (removeItem.size === 0) {\n removeResult.delete(key)\n }\n }\n\n // removes already satisfied dependencies from the dependencies list\n removeSatisfiedSpecs({\n add: addResult,\n graph,\n })\n\n // set the modifiedDependencies flag if any\n // of the importers have modified dependencies\n for (const addDeps of addResult.values()) {\n if (addDeps.size > 0) {\n addResult.modifiedDependencies = true\n break\n }\n }\n\n return {\n add: addResult,\n remove: removeResult,\n transientAdd,\n transientRemove,\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Node } from '../node.ts';
2
+ import type { Dependency } from '../dependencies.ts';
3
+ import type { BuildIdealAddOptions, BuildIdealRemoveOptions } from './types.ts';
4
+ /**
5
+ * Computes the ordered list of dependencies for an given node,
6
+ * taking into account additions and removals.
7
+ */
8
+ export declare const getNodeOrderedDependencies: (fromNode: Node, options?: BuildIdealAddOptions & BuildIdealRemoveOptions) => Dependency[];
9
+ export declare const getOrderedDependencies: (deps: Dependency[]) => Dependency[];
10
+ //# sourceMappingURL=get-ordered-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ordered-dependencies.d.ts","sourceRoot":"","sources":["../../src/ideal/get-ordered-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAEnB;;;GAGG;AACH,eAAO,MAAM,0BAA0B,aAC3B,IAAI,YACJ,oBAAoB,GAAG,uBAAuB,KACvD,UAAU,EAyBZ,CAAA;AAED,eAAO,MAAM,sBAAsB,SAC3B,UAAU,EAAE,KACjB,UAAU,EAiBZ,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Computes the ordered list of dependencies for an given node,
3
+ * taking into account additions and removals.
4
+ */
5
+ export const getNodeOrderedDependencies = (fromNode, options) => {
6
+ // using a map here instead of an array helps us get simpler
7
+ // deduplication while iterating through all the items at hand:
8
+ // existing dependencies in the graph, dependencies to be added, etc.
9
+ const deps = new Map();
10
+ for (const [name, { spec, type }] of fromNode.edgesOut.entries()) {
11
+ deps.set(name, { spec, type });
12
+ }
13
+ // next iterate through the list of dependencies to be added
14
+ const addedDeps = options?.add.get(fromNode.id);
15
+ if (addedDeps) {
16
+ for (const [name, { spec, type }] of addedDeps.entries()) {
17
+ deps.set(name, { spec, type });
18
+ }
19
+ }
20
+ // finally iterate through the list of dependencies to be removed
21
+ const removedDeps = options?.remove.get(fromNode.id);
22
+ if (removedDeps) {
23
+ for (const name of removedDeps) {
24
+ deps.delete(name);
25
+ }
26
+ }
27
+ // now turn the map into a sorted array
28
+ return getOrderedDependencies([...deps.values()]);
29
+ };
30
+ export const getOrderedDependencies = (deps) => {
31
+ const orderedDeps = [...deps].sort(({ spec: aSpec, type: aType }, { spec: bSpec, type: bType }) => {
32
+ const aIsPeer = aType === 'peer' || aType === 'peerOptional' ? 1 : 0;
33
+ const bIsPeer = bType === 'peer' || bType === 'peerOptional' ? 1 : 0;
34
+ // regular dependencies first, peer dependencies last
35
+ if (aIsPeer !== bIsPeer) {
36
+ return aIsPeer - bIsPeer;
37
+ }
38
+ return aSpec.name.localeCompare(bSpec.name, 'en');
39
+ });
40
+ return orderedDeps;
41
+ };
42
+ //# sourceMappingURL=get-ordered-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ordered-dependencies.js","sourceRoot":"","sources":["../../src/ideal/get-ordered-dependencies.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,QAAc,EACd,OAAwD,EAC1C,EAAE;IAChB,4DAA4D;IAC5D,+DAA+D;IAC/D,qEAAqE;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,4DAA4D;IAC5D,MAAM,SAAS,GAAG,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/C,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IACD,iEAAiE;IACjE,MAAM,WAAW,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,OAAO,sBAAsB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAkB,EACJ,EAAE;IAChB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAChC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GACX,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,MAAM,OAAO,GACX,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtD,qDAAqD;QACrD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC,CACF,CAAA;IACD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA","sourcesContent":["import type { Node } from '../node.ts'\nimport type { Dependency } from '../dependencies.ts'\nimport type {\n BuildIdealAddOptions,\n BuildIdealRemoveOptions,\n} from './types.ts'\n\n/**\n * Computes the ordered list of dependencies for an given node,\n * taking into account additions and removals.\n */\nexport const getNodeOrderedDependencies = (\n fromNode: Node,\n options?: BuildIdealAddOptions & BuildIdealRemoveOptions,\n): Dependency[] => {\n // using a map here instead of an array helps us get simpler\n // deduplication while iterating through all the items at hand:\n // existing dependencies in the graph, dependencies to be added, etc.\n const deps = new Map<string, Dependency>()\n for (const [name, { spec, type }] of fromNode.edgesOut.entries()) {\n deps.set(name, { spec, type })\n }\n // next iterate through the list of dependencies to be added\n const addedDeps = options?.add.get(fromNode.id)\n if (addedDeps) {\n for (const [name, { spec, type }] of addedDeps.entries()) {\n deps.set(name, { spec, type })\n }\n }\n // finally iterate through the list of dependencies to be removed\n const removedDeps = options?.remove.get(fromNode.id)\n if (removedDeps) {\n for (const name of removedDeps) {\n deps.delete(name)\n }\n }\n\n // now turn the map into a sorted array\n return getOrderedDependencies([...deps.values()])\n}\n\nexport const getOrderedDependencies = (\n deps: Dependency[],\n): Dependency[] => {\n const orderedDeps = [...deps].sort(\n ({ spec: aSpec, type: aType }, { spec: bSpec, type: bType }) => {\n const aIsPeer =\n aType === 'peer' || aType === 'peerOptional' ? 1 : 0\n const bIsPeer =\n bType === 'peer' || bType === 'peerOptional' ? 1 : 0\n\n // regular dependencies first, peer dependencies last\n if (aIsPeer !== bIsPeer) {\n return aIsPeer - bIsPeer\n }\n\n return aSpec.name.localeCompare(bSpec.name, 'en')\n },\n )\n return orderedDeps\n}\n"]}
@@ -0,0 +1,76 @@
1
+ import type { PeerContext, PeerContextEntry, PeerContextEntryInput, ProcessPlacementResult } from './types.ts';
2
+ import type { Spec, SpecOptions } from '@vltpkg/spec';
3
+ import type { DependencySaveType, Manifest } from '@vltpkg/types';
4
+ import type { Monorepo } from '@vltpkg/workspaces';
5
+ import type { Dependency } from '../dependencies.ts';
6
+ import type { Graph } from '../graph.ts';
7
+ import type { Node } from '../node.ts';
8
+ /**
9
+ * Retrieve a unique hash value for a given peer context set.
10
+ */
11
+ export declare const retrievePeerContextHash: (peerContext: PeerContext | undefined) => string | undefined;
12
+ /**
13
+ * Checks if a given spec is compatible with the specs already
14
+ * assigned to a peer context entry.
15
+ *
16
+ * Returns true if compatible, false otherwise.
17
+ */
18
+ export declare const incompatibleSpecs: (spec: Spec, entry: PeerContextEntry) => boolean;
19
+ /**
20
+ * Sort peer context entry inputs for deterministic processing.
21
+ * Orders: non-peer dependencies first, then peer dependencies, alphabetically by name.
22
+ */
23
+ export declare const getOrderedPeerContextEntries: (entries: PeerContextEntryInput[]) => PeerContextEntryInput[];
24
+ export declare const checkEntriesToPeerContext: (peerContext: PeerContext, entries: PeerContextEntryInput[]) => boolean;
25
+ /**
26
+ * Add or update dependencies in a given peer context making sure to check
27
+ * for compatibility with existing dependencies already resolved by a given
28
+ * peer context set. Extra info such as a target or dependent nodes is
29
+ * optional.
30
+ *
31
+ * Returns true if forking is needed, false otherwise.
32
+ */
33
+ export declare const addEntriesToPeerContext: (peerContext: PeerContext, entries: PeerContextEntryInput[], fromNode: Node, monorepo?: Monorepo) => boolean;
34
+ /**
35
+ * Create and returns a forked copy of a given peer context set.
36
+ */
37
+ export declare const forkPeerContext: (graph: Graph, peerContext: PeerContext, entries: PeerContextEntryInput[]) => PeerContext;
38
+ /**
39
+ * Starts the peer dependency placement process
40
+ * for a given node being processed and placed.
41
+ */
42
+ export declare const startPeerPlacement: (peerContext: PeerContext, manifest: Manifest, fromNode: Node, options: SpecOptions) => {
43
+ peerSetHash: string | undefined;
44
+ queuedEntries: PeerContextEntryInput[];
45
+ };
46
+ /**
47
+ * Ends the peer dependency placement process, returning the functions that
48
+ * are going to be used to update the peer context set, forking when needed
49
+ * and resolving peer dependencies if possible.
50
+ */
51
+ export declare const endPeerPlacement: (peerContext: PeerContext, nextDeps: Dependency[], nextPeerDeps: Map<string, Dependency> & {
52
+ id?: number;
53
+ }, graph: Graph, spec: Spec, fromNode: Node, node: Node, type: DependencySaveType, queuedEntries: PeerContextEntryInput[]) => {
54
+ /**
55
+ * Add the new entries to the current peer context set.
56
+ */
57
+ putEntries: () => {
58
+ dependent: Node;
59
+ spec: import("@vltpkg/spec/browser").Spec;
60
+ type: DependencySaveType;
61
+ }[] | undefined;
62
+ /**
63
+ * Try to resolve peer dependencies using already seen target
64
+ * values from the current peer context set.
65
+ */
66
+ resolvePeerDeps: () => void;
67
+ };
68
+ /**
69
+ * Given an array of processed results for the current level dependencies
70
+ * being placed in the currently building ideal graph, traverse its direct
71
+ * dependencies and track peer dependencies in their appropriate peer context
72
+ * sets, forking as needed and resolving peer dependencies using suitable
73
+ * nodes already present in the graph if possible.
74
+ */
75
+ export declare const postPlacementPeerCheck: (graph: Graph, sortedLevelResults: ProcessPlacementResult[]) => void;
76
+ //# sourceMappingURL=peers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peers.d.ts","sourceRoot":"","sources":["../../src/ideal/peers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,uBAAuB,gBACrB,WAAW,GAAG,SAAS,KACnC,MAAM,GAAG,SAKX,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,SACtB,IAAI,SACH,gBAAgB,KACtB,OAkBF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,YAC9B,qBAAqB,EAAE,KAC/B,qBAAqB,EAUpB,CAAA;AAQJ,eAAO,MAAM,yBAAyB,gBACvB,WAAW,WACf,qBAAqB,EAAE,KAC/B,OAgBF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,gBACrB,WAAW,WACf,qBAAqB,EAAE,YACtB,IAAI,aACH,QAAQ,KAClB,OAsEF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,UACnB,KAAK,eACC,WAAW,WACf,qBAAqB,EAAE,KAC/B,WAqCF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gBAChB,WAAW,YACd,QAAQ,YACR,IAAI,WACL,WAAW;;;CA4CrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gBACd,WAAW,YACd,UAAU,EAAE,gBACR,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,SAChD,KAAK,QACN,IAAI,YACA,IAAI,QACR,IAAI,QACJ,kBAAkB,iBACT,qBAAqB,EAAE;IAEtC;;OAEG;;;;;;IA2CH;;;OAGG;;CAsCH,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,UAC1B,KAAK,sBACQ,sBAAsB,EAAE,SAiE7C,CAAA"}