@vltpkg/graph 1.0.0-rc.10 → 1.0.0-rc.12

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 (326) hide show
  1. package/dist/actual/load.d.ts.map +1 -0
  2. package/dist/actual/load.js.map +1 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/build.d.ts.map +1 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/dependencies.d.ts.map +1 -0
  8. package/dist/dependencies.js.map +1 -0
  9. package/dist/diff.d.ts.map +1 -0
  10. package/dist/diff.js.map +1 -0
  11. package/dist/edge.d.ts.map +1 -0
  12. package/dist/edge.js.map +1 -0
  13. package/dist/fixup-added-names.d.ts.map +1 -0
  14. package/dist/fixup-added-names.js.map +1 -0
  15. package/dist/graph.d.ts.map +1 -0
  16. package/dist/graph.js.map +1 -0
  17. package/dist/ideal/append-nodes.d.ts.map +1 -0
  18. package/dist/{esm/ideal → ideal}/append-nodes.js +3 -1
  19. package/dist/ideal/append-nodes.js.map +1 -0
  20. package/dist/ideal/build-ideal-from-starting-graph.d.ts.map +1 -0
  21. package/dist/ideal/build-ideal-from-starting-graph.js.map +1 -0
  22. package/dist/ideal/build.d.ts.map +1 -0
  23. package/dist/ideal/build.js.map +1 -0
  24. package/dist/ideal/get-importer-specs.d.ts.map +1 -0
  25. package/dist/ideal/get-importer-specs.js.map +1 -0
  26. package/dist/ideal/get-ordered-dependencies.d.ts.map +1 -0
  27. package/dist/ideal/get-ordered-dependencies.js.map +1 -0
  28. package/dist/{esm/ideal → ideal}/peers.d.ts +6 -1
  29. package/dist/ideal/peers.d.ts.map +1 -0
  30. package/dist/{esm/ideal → ideal}/peers.js +49 -6
  31. package/dist/ideal/peers.js.map +1 -0
  32. package/dist/ideal/refresh-ideal-graph.d.ts.map +1 -0
  33. package/dist/ideal/refresh-ideal-graph.js.map +1 -0
  34. package/dist/ideal/remove-satisfied-specs.d.ts.map +1 -0
  35. package/dist/ideal/remove-satisfied-specs.js.map +1 -0
  36. package/dist/ideal/types.d.ts.map +1 -0
  37. package/dist/ideal/types.js.map +1 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/install.d.ts.map +1 -0
  41. package/dist/install.js.map +1 -0
  42. package/dist/lockfile/load-edges.d.ts.map +1 -0
  43. package/dist/lockfile/load-edges.js.map +1 -0
  44. package/dist/lockfile/load-nodes.d.ts.map +1 -0
  45. package/dist/lockfile/load-nodes.js.map +1 -0
  46. package/dist/lockfile/load.d.ts.map +1 -0
  47. package/dist/lockfile/load.js.map +1 -0
  48. package/dist/lockfile/save.d.ts.map +1 -0
  49. package/dist/lockfile/save.js.map +1 -0
  50. package/dist/lockfile/types.d.ts.map +1 -0
  51. package/dist/lockfile/types.js.map +1 -0
  52. package/dist/modifiers.d.ts.map +1 -0
  53. package/dist/modifiers.js.map +1 -0
  54. package/dist/node.d.ts.map +1 -0
  55. package/dist/node.js.map +1 -0
  56. package/dist/non-empty-list.d.ts.map +1 -0
  57. package/dist/non-empty-list.js.map +1 -0
  58. package/dist/reify/add-edge.d.ts.map +1 -0
  59. package/dist/reify/add-edge.js.map +1 -0
  60. package/dist/reify/add-edges.d.ts.map +1 -0
  61. package/dist/reify/add-edges.js.map +1 -0
  62. package/dist/reify/add-nodes.d.ts.map +1 -0
  63. package/dist/reify/add-nodes.js.map +1 -0
  64. package/dist/reify/bin-chmod.d.ts.map +1 -0
  65. package/dist/reify/bin-chmod.js.map +1 -0
  66. package/dist/reify/build.d.ts.map +1 -0
  67. package/dist/{esm/reify → reify}/build.js +12 -3
  68. package/dist/reify/build.js.map +1 -0
  69. package/dist/reify/calculate-save-value.d.ts.map +1 -0
  70. package/dist/reify/calculate-save-value.js.map +1 -0
  71. package/dist/{esm/reify → reify}/check-needed-build.d.ts +5 -0
  72. package/dist/reify/check-needed-build.d.ts.map +1 -0
  73. package/dist/{esm/reify → reify}/check-needed-build.js +16 -5
  74. package/dist/reify/check-needed-build.js.map +1 -0
  75. package/dist/reify/delete-edge.d.ts.map +1 -0
  76. package/dist/reify/delete-edge.js.map +1 -0
  77. package/dist/reify/delete-edges.d.ts.map +1 -0
  78. package/dist/reify/delete-edges.js.map +1 -0
  79. package/dist/reify/delete-nodes.d.ts.map +1 -0
  80. package/dist/reify/delete-nodes.js.map +1 -0
  81. package/dist/reify/extract-node.d.ts.map +1 -0
  82. package/dist/reify/extract-node.js.map +1 -0
  83. package/dist/reify/index.d.ts.map +1 -0
  84. package/dist/{esm/reify → reify}/index.js +1 -1
  85. package/dist/reify/index.js.map +1 -0
  86. package/dist/reify/internal-hoist.d.ts.map +1 -0
  87. package/dist/reify/internal-hoist.js.map +1 -0
  88. package/dist/reify/optional-fail.d.ts.map +1 -0
  89. package/dist/reify/optional-fail.js.map +1 -0
  90. package/dist/reify/rollback.d.ts.map +1 -0
  91. package/dist/reify/rollback.js.map +1 -0
  92. package/dist/reify/update-importers-package-json.d.ts.map +1 -0
  93. package/dist/reify/update-importers-package-json.js.map +1 -0
  94. package/dist/remove-optional-subgraph.d.ts.map +1 -0
  95. package/dist/remove-optional-subgraph.js.map +1 -0
  96. package/dist/resolve-save-type.d.ts.map +1 -0
  97. package/dist/resolve-save-type.js.map +1 -0
  98. package/dist/stringify-node.d.ts.map +1 -0
  99. package/dist/stringify-node.js.map +1 -0
  100. package/dist/transfer-data/load.d.ts.map +1 -0
  101. package/dist/transfer-data/load.js.map +1 -0
  102. package/dist/uninstall.d.ts.map +1 -0
  103. package/dist/uninstall.js.map +1 -0
  104. package/dist/update.d.ts.map +1 -0
  105. package/dist/update.js.map +1 -0
  106. package/dist/virtual-root.d.ts.map +1 -0
  107. package/dist/virtual-root.js.map +1 -0
  108. package/dist/visualization/human-readable-output.d.ts.map +1 -0
  109. package/dist/visualization/human-readable-output.js.map +1 -0
  110. package/dist/visualization/json-output.d.ts.map +1 -0
  111. package/dist/visualization/json-output.js.map +1 -0
  112. package/dist/visualization/mermaid-output.d.ts.map +1 -0
  113. package/dist/visualization/mermaid-output.js.map +1 -0
  114. package/dist/visualization/object-like-output.d.ts.map +1 -0
  115. package/dist/visualization/object-like-output.js.map +1 -0
  116. package/package.json +25 -41
  117. package/dist/esm/actual/load.d.ts.map +0 -1
  118. package/dist/esm/actual/load.js.map +0 -1
  119. package/dist/esm/browser.d.ts.map +0 -1
  120. package/dist/esm/browser.js.map +0 -1
  121. package/dist/esm/build.d.ts.map +0 -1
  122. package/dist/esm/build.js.map +0 -1
  123. package/dist/esm/dependencies.d.ts.map +0 -1
  124. package/dist/esm/dependencies.js.map +0 -1
  125. package/dist/esm/diff.d.ts.map +0 -1
  126. package/dist/esm/diff.js.map +0 -1
  127. package/dist/esm/edge.d.ts.map +0 -1
  128. package/dist/esm/edge.js.map +0 -1
  129. package/dist/esm/fixup-added-names.d.ts.map +0 -1
  130. package/dist/esm/fixup-added-names.js.map +0 -1
  131. package/dist/esm/graph.d.ts.map +0 -1
  132. package/dist/esm/graph.js.map +0 -1
  133. package/dist/esm/ideal/append-nodes.d.ts.map +0 -1
  134. package/dist/esm/ideal/append-nodes.js.map +0 -1
  135. package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts.map +0 -1
  136. package/dist/esm/ideal/build-ideal-from-starting-graph.js.map +0 -1
  137. package/dist/esm/ideal/build.d.ts.map +0 -1
  138. package/dist/esm/ideal/build.js.map +0 -1
  139. package/dist/esm/ideal/get-importer-specs.d.ts.map +0 -1
  140. package/dist/esm/ideal/get-importer-specs.js.map +0 -1
  141. package/dist/esm/ideal/get-ordered-dependencies.d.ts.map +0 -1
  142. package/dist/esm/ideal/get-ordered-dependencies.js.map +0 -1
  143. package/dist/esm/ideal/peers.d.ts.map +0 -1
  144. package/dist/esm/ideal/peers.js.map +0 -1
  145. package/dist/esm/ideal/refresh-ideal-graph.d.ts.map +0 -1
  146. package/dist/esm/ideal/refresh-ideal-graph.js.map +0 -1
  147. package/dist/esm/ideal/remove-satisfied-specs.d.ts.map +0 -1
  148. package/dist/esm/ideal/remove-satisfied-specs.js.map +0 -1
  149. package/dist/esm/ideal/types.d.ts.map +0 -1
  150. package/dist/esm/ideal/types.js.map +0 -1
  151. package/dist/esm/index.d.ts.map +0 -1
  152. package/dist/esm/index.js.map +0 -1
  153. package/dist/esm/install.d.ts.map +0 -1
  154. package/dist/esm/install.js.map +0 -1
  155. package/dist/esm/lockfile/load-edges.d.ts.map +0 -1
  156. package/dist/esm/lockfile/load-edges.js.map +0 -1
  157. package/dist/esm/lockfile/load-nodes.d.ts.map +0 -1
  158. package/dist/esm/lockfile/load-nodes.js.map +0 -1
  159. package/dist/esm/lockfile/load.d.ts.map +0 -1
  160. package/dist/esm/lockfile/load.js.map +0 -1
  161. package/dist/esm/lockfile/save.d.ts.map +0 -1
  162. package/dist/esm/lockfile/save.js.map +0 -1
  163. package/dist/esm/lockfile/types.d.ts.map +0 -1
  164. package/dist/esm/lockfile/types.js.map +0 -1
  165. package/dist/esm/modifiers.d.ts.map +0 -1
  166. package/dist/esm/modifiers.js.map +0 -1
  167. package/dist/esm/node.d.ts.map +0 -1
  168. package/dist/esm/node.js.map +0 -1
  169. package/dist/esm/non-empty-list.d.ts.map +0 -1
  170. package/dist/esm/non-empty-list.js.map +0 -1
  171. package/dist/esm/package.json +0 -3
  172. package/dist/esm/reify/add-edge.d.ts.map +0 -1
  173. package/dist/esm/reify/add-edge.js.map +0 -1
  174. package/dist/esm/reify/add-edges.d.ts.map +0 -1
  175. package/dist/esm/reify/add-edges.js.map +0 -1
  176. package/dist/esm/reify/add-nodes.d.ts.map +0 -1
  177. package/dist/esm/reify/add-nodes.js.map +0 -1
  178. package/dist/esm/reify/bin-chmod.d.ts.map +0 -1
  179. package/dist/esm/reify/bin-chmod.js.map +0 -1
  180. package/dist/esm/reify/build.d.ts.map +0 -1
  181. package/dist/esm/reify/build.js.map +0 -1
  182. package/dist/esm/reify/calculate-save-value.d.ts.map +0 -1
  183. package/dist/esm/reify/calculate-save-value.js.map +0 -1
  184. package/dist/esm/reify/check-needed-build.d.ts.map +0 -1
  185. package/dist/esm/reify/check-needed-build.js.map +0 -1
  186. package/dist/esm/reify/delete-edge.d.ts.map +0 -1
  187. package/dist/esm/reify/delete-edge.js.map +0 -1
  188. package/dist/esm/reify/delete-edges.d.ts.map +0 -1
  189. package/dist/esm/reify/delete-edges.js.map +0 -1
  190. package/dist/esm/reify/delete-nodes.d.ts.map +0 -1
  191. package/dist/esm/reify/delete-nodes.js.map +0 -1
  192. package/dist/esm/reify/extract-node.d.ts.map +0 -1
  193. package/dist/esm/reify/extract-node.js.map +0 -1
  194. package/dist/esm/reify/index.d.ts.map +0 -1
  195. package/dist/esm/reify/index.js.map +0 -1
  196. package/dist/esm/reify/internal-hoist.d.ts.map +0 -1
  197. package/dist/esm/reify/internal-hoist.js.map +0 -1
  198. package/dist/esm/reify/optional-fail.d.ts.map +0 -1
  199. package/dist/esm/reify/optional-fail.js.map +0 -1
  200. package/dist/esm/reify/rollback.d.ts.map +0 -1
  201. package/dist/esm/reify/rollback.js.map +0 -1
  202. package/dist/esm/reify/update-importers-package-json.d.ts.map +0 -1
  203. package/dist/esm/reify/update-importers-package-json.js.map +0 -1
  204. package/dist/esm/remove-optional-subgraph.d.ts.map +0 -1
  205. package/dist/esm/remove-optional-subgraph.js.map +0 -1
  206. package/dist/esm/resolve-save-type.d.ts.map +0 -1
  207. package/dist/esm/resolve-save-type.js.map +0 -1
  208. package/dist/esm/stringify-node.d.ts.map +0 -1
  209. package/dist/esm/stringify-node.js.map +0 -1
  210. package/dist/esm/transfer-data/load.d.ts.map +0 -1
  211. package/dist/esm/transfer-data/load.js.map +0 -1
  212. package/dist/esm/uninstall.d.ts.map +0 -1
  213. package/dist/esm/uninstall.js.map +0 -1
  214. package/dist/esm/update.d.ts.map +0 -1
  215. package/dist/esm/update.js.map +0 -1
  216. package/dist/esm/virtual-root.d.ts.map +0 -1
  217. package/dist/esm/virtual-root.js.map +0 -1
  218. package/dist/esm/visualization/human-readable-output.d.ts.map +0 -1
  219. package/dist/esm/visualization/human-readable-output.js.map +0 -1
  220. package/dist/esm/visualization/json-output.d.ts.map +0 -1
  221. package/dist/esm/visualization/json-output.js.map +0 -1
  222. package/dist/esm/visualization/mermaid-output.d.ts.map +0 -1
  223. package/dist/esm/visualization/mermaid-output.js.map +0 -1
  224. package/dist/esm/visualization/object-like-output.d.ts.map +0 -1
  225. package/dist/esm/visualization/object-like-output.js.map +0 -1
  226. /package/dist/{esm/actual → actual}/load.d.ts +0 -0
  227. /package/dist/{esm/actual → actual}/load.js +0 -0
  228. /package/dist/{esm/browser.d.ts → browser.d.ts} +0 -0
  229. /package/dist/{esm/browser.js → browser.js} +0 -0
  230. /package/dist/{esm/build.d.ts → build.d.ts} +0 -0
  231. /package/dist/{esm/build.js → build.js} +0 -0
  232. /package/dist/{esm/dependencies.d.ts → dependencies.d.ts} +0 -0
  233. /package/dist/{esm/dependencies.js → dependencies.js} +0 -0
  234. /package/dist/{esm/diff.d.ts → diff.d.ts} +0 -0
  235. /package/dist/{esm/diff.js → diff.js} +0 -0
  236. /package/dist/{esm/edge.d.ts → edge.d.ts} +0 -0
  237. /package/dist/{esm/edge.js → edge.js} +0 -0
  238. /package/dist/{esm/fixup-added-names.d.ts → fixup-added-names.d.ts} +0 -0
  239. /package/dist/{esm/fixup-added-names.js → fixup-added-names.js} +0 -0
  240. /package/dist/{esm/graph.d.ts → graph.d.ts} +0 -0
  241. /package/dist/{esm/graph.js → graph.js} +0 -0
  242. /package/dist/{esm/ideal → ideal}/append-nodes.d.ts +0 -0
  243. /package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.d.ts +0 -0
  244. /package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.js +0 -0
  245. /package/dist/{esm/ideal → ideal}/build.d.ts +0 -0
  246. /package/dist/{esm/ideal → ideal}/build.js +0 -0
  247. /package/dist/{esm/ideal → ideal}/get-importer-specs.d.ts +0 -0
  248. /package/dist/{esm/ideal → ideal}/get-importer-specs.js +0 -0
  249. /package/dist/{esm/ideal → ideal}/get-ordered-dependencies.d.ts +0 -0
  250. /package/dist/{esm/ideal → ideal}/get-ordered-dependencies.js +0 -0
  251. /package/dist/{esm/ideal → ideal}/refresh-ideal-graph.d.ts +0 -0
  252. /package/dist/{esm/ideal → ideal}/refresh-ideal-graph.js +0 -0
  253. /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.d.ts +0 -0
  254. /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.js +0 -0
  255. /package/dist/{esm/ideal → ideal}/types.d.ts +0 -0
  256. /package/dist/{esm/ideal → ideal}/types.js +0 -0
  257. /package/dist/{esm/index.d.ts → index.d.ts} +0 -0
  258. /package/dist/{esm/index.js → index.js} +0 -0
  259. /package/dist/{esm/install.d.ts → install.d.ts} +0 -0
  260. /package/dist/{esm/install.js → install.js} +0 -0
  261. /package/dist/{esm/lockfile → lockfile}/load-edges.d.ts +0 -0
  262. /package/dist/{esm/lockfile → lockfile}/load-edges.js +0 -0
  263. /package/dist/{esm/lockfile → lockfile}/load-nodes.d.ts +0 -0
  264. /package/dist/{esm/lockfile → lockfile}/load-nodes.js +0 -0
  265. /package/dist/{esm/lockfile → lockfile}/load.d.ts +0 -0
  266. /package/dist/{esm/lockfile → lockfile}/load.js +0 -0
  267. /package/dist/{esm/lockfile → lockfile}/save.d.ts +0 -0
  268. /package/dist/{esm/lockfile → lockfile}/save.js +0 -0
  269. /package/dist/{esm/lockfile → lockfile}/types.d.ts +0 -0
  270. /package/dist/{esm/lockfile → lockfile}/types.js +0 -0
  271. /package/dist/{esm/modifiers.d.ts → modifiers.d.ts} +0 -0
  272. /package/dist/{esm/modifiers.js → modifiers.js} +0 -0
  273. /package/dist/{esm/node.d.ts → node.d.ts} +0 -0
  274. /package/dist/{esm/node.js → node.js} +0 -0
  275. /package/dist/{esm/non-empty-list.d.ts → non-empty-list.d.ts} +0 -0
  276. /package/dist/{esm/non-empty-list.js → non-empty-list.js} +0 -0
  277. /package/dist/{esm/reify → reify}/add-edge.d.ts +0 -0
  278. /package/dist/{esm/reify → reify}/add-edge.js +0 -0
  279. /package/dist/{esm/reify → reify}/add-edges.d.ts +0 -0
  280. /package/dist/{esm/reify → reify}/add-edges.js +0 -0
  281. /package/dist/{esm/reify → reify}/add-nodes.d.ts +0 -0
  282. /package/dist/{esm/reify → reify}/add-nodes.js +0 -0
  283. /package/dist/{esm/reify → reify}/bin-chmod.d.ts +0 -0
  284. /package/dist/{esm/reify → reify}/bin-chmod.js +0 -0
  285. /package/dist/{esm/reify → reify}/build.d.ts +0 -0
  286. /package/dist/{esm/reify → reify}/calculate-save-value.d.ts +0 -0
  287. /package/dist/{esm/reify → reify}/calculate-save-value.js +0 -0
  288. /package/dist/{esm/reify → reify}/delete-edge.d.ts +0 -0
  289. /package/dist/{esm/reify → reify}/delete-edge.js +0 -0
  290. /package/dist/{esm/reify → reify}/delete-edges.d.ts +0 -0
  291. /package/dist/{esm/reify → reify}/delete-edges.js +0 -0
  292. /package/dist/{esm/reify → reify}/delete-nodes.d.ts +0 -0
  293. /package/dist/{esm/reify → reify}/delete-nodes.js +0 -0
  294. /package/dist/{esm/reify → reify}/extract-node.d.ts +0 -0
  295. /package/dist/{esm/reify → reify}/extract-node.js +0 -0
  296. /package/dist/{esm/reify → reify}/index.d.ts +0 -0
  297. /package/dist/{esm/reify → reify}/internal-hoist.d.ts +0 -0
  298. /package/dist/{esm/reify → reify}/internal-hoist.js +0 -0
  299. /package/dist/{esm/reify → reify}/optional-fail.d.ts +0 -0
  300. /package/dist/{esm/reify → reify}/optional-fail.js +0 -0
  301. /package/dist/{esm/reify → reify}/rollback.d.ts +0 -0
  302. /package/dist/{esm/reify → reify}/rollback.js +0 -0
  303. /package/dist/{esm/reify → reify}/update-importers-package-json.d.ts +0 -0
  304. /package/dist/{esm/reify → reify}/update-importers-package-json.js +0 -0
  305. /package/dist/{esm/remove-optional-subgraph.d.ts → remove-optional-subgraph.d.ts} +0 -0
  306. /package/dist/{esm/remove-optional-subgraph.js → remove-optional-subgraph.js} +0 -0
  307. /package/dist/{esm/resolve-save-type.d.ts → resolve-save-type.d.ts} +0 -0
  308. /package/dist/{esm/resolve-save-type.js → resolve-save-type.js} +0 -0
  309. /package/dist/{esm/stringify-node.d.ts → stringify-node.d.ts} +0 -0
  310. /package/dist/{esm/stringify-node.js → stringify-node.js} +0 -0
  311. /package/dist/{esm/transfer-data → transfer-data}/load.d.ts +0 -0
  312. /package/dist/{esm/transfer-data → transfer-data}/load.js +0 -0
  313. /package/dist/{esm/uninstall.d.ts → uninstall.d.ts} +0 -0
  314. /package/dist/{esm/uninstall.js → uninstall.js} +0 -0
  315. /package/dist/{esm/update.d.ts → update.d.ts} +0 -0
  316. /package/dist/{esm/update.js → update.js} +0 -0
  317. /package/dist/{esm/virtual-root.d.ts → virtual-root.d.ts} +0 -0
  318. /package/dist/{esm/virtual-root.js → virtual-root.js} +0 -0
  319. /package/dist/{esm/visualization → visualization}/human-readable-output.d.ts +0 -0
  320. /package/dist/{esm/visualization → visualization}/human-readable-output.js +0 -0
  321. /package/dist/{esm/visualization → visualization}/json-output.d.ts +0 -0
  322. /package/dist/{esm/visualization → visualization}/json-output.js +0 -0
  323. /package/dist/{esm/visualization → visualization}/mermaid-output.d.ts +0 -0
  324. /package/dist/{esm/visualization → visualization}/mermaid-output.js +0 -0
  325. /package/dist/{esm/visualization → visualization}/object-like-output.d.ts +0 -0
  326. /package/dist/{esm/visualization → visualization}/object-like-output.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edge.d.ts","sourceRoot":"","sources":["../../src/reify/add-edge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAoCtC;;;;GAIG;AACH,eAAO,MAAM,OAAO,SACZ,IAAI,UACF,UAAU,WACT,cAAc,SAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAqC9B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edge.js","sourceRoot":"","sources":["../../src/reify/add-edge.ts"],"names":[],"mappings":"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","sourcesContent":["import { cmdShimIfExists } from '@vltpkg/cmd-shim'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { mkdir, symlink } from 'node:fs/promises'\nimport { dirname, relative } from 'node:path'\nimport type { PathScurry } from 'path-scurry'\nimport type { Edge } from '../edge.ts'\n\nconst clobberSymlink = async (\n target: string,\n link: string,\n remover: RollbackRemove,\n type = 'file',\n) => {\n await mkdir(dirname(link), { recursive: true })\n try {\n await symlink(target, link, type)\n } catch (er) {\n /* c8 ignore start */\n if ((er as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw er\n }\n /* c8 ignore stop */\n\n // if the symlink exists, remove it\n await remover.rm(link)\n\n try {\n // then try to create it again\n await symlink(target, link, type)\n /* c8 ignore start */\n } catch (er) {\n // if the symlink still exists, then multiple paths could be writing to it\n // so now just ignore that error. See https://github.com/vltpkg/vltpkg/issues/797\n if ((er as NodeJS.ErrnoException).code !== 'EEXIST') {\n throw er\n }\n }\n /* c8 ignore stop */\n }\n}\n\n/**\n * reify an edge into a node_modules folder, with bins linked\n * this does NOT chmod the bins to 0o777, because they might not exist\n * until scripts are run, in the case of non-store deps like workspaces\n */\nexport const addEdge = async (\n edge: Edge,\n scurry: PathScurry,\n remover: RollbackRemove,\n bins?: Record<string, string>,\n) => {\n if (!edge.to) return\n const binRoot = scurry.resolve(\n edge.from.nodeModules(scurry),\n '.bin',\n )\n const path = scurry.resolve(\n edge.from.nodeModules(scurry),\n edge.spec.name,\n )\n const promises: Promise<unknown>[] = []\n const target = relative(\n dirname(path),\n edge.to.resolvedLocation(scurry),\n )\n\n // can only parallelize this on posix, because the win32 shims\n // need to know that they will exist before being created.\n const p = clobberSymlink(target, path, remover, 'dir')\n if (process.platform === 'win32') await p\n else promises.push(p)\n\n if (bins) {\n for (const [key, val] of Object.entries(bins)) {\n const link = scurry.resolve(binRoot, key)\n const absTarget = scurry.resolve(path, val)\n const target = relative(binRoot, absTarget)\n // TODO: bash/cmd/ps1 shims on Windows\n promises.push(\n process.platform === 'win32' ?\n cmdShimIfExists(absTarget, link, remover)\n : clobberSymlink(target, link, remover),\n )\n }\n }\n if (promises.length) await Promise.all(promises)\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edges.d.ts","sourceRoot":"","sources":["../../src/reify/add-edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,eAAO,MAAM,QAAQ,SACb,IAAI,UACF,UAAU,WACT,cAAc,KACtB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAS1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edges.js","sourceRoot":"","sources":["../../src/reify/add-edges.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAU,EACV,MAAkB,EAClB,OAAuB,EACK,EAAE;IAC9B,MAAM,OAAO,GAA+B,EAAE,CAAA;IAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,EAAE;YAAE,SAAQ;QACjB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAA;QACpB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA","sourcesContent":["import type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport { addEdge } from './add-edge.ts'\n\nexport const addEdges = (\n diff: Diff,\n scurry: PathScurry,\n remover: RollbackRemove,\n): (() => Promise<unknown>)[] => {\n const actions: (() => Promise<unknown>)[] = []\n for (const edge of diff.edges.add) {\n const { to } = edge\n if (!to) continue\n const bins = to.bins\n actions.push(() => addEdge(edge, scurry, remover, bins))\n }\n return actions\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-nodes.d.ts","sourceRoot":"","sources":["../../src/reify/add-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,eAAO,MAAM,QAAQ,SACb,IAAI,UACF,UAAU,WACT,cAAc,WACd,WAAW,eACP,iBAAiB,KAC7B,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAgB1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-nodes.js","sourceRoot":"","sources":["../../src/reify/add-nodes.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAU,EACV,MAAkB,EAClB,OAAuB,EACvB,OAAoB,EACpB,WAA8B,EACF,EAAE;IAC9B,MAAM,OAAO,GAA+B,EAAE,CAAA;IAC9C,2DAA2D;IAC3D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,iEAAiE;QACjE,wDAAwD;QACxD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,SAAQ;QAEhC,8CAA8C;QAC9C,IAAI,IAAI,CAAC,SAAS;YAAE,SAAQ;QAE5B,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAChB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAC/D,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA","sourcesContent":["import type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport { extractNode } from './extract-node.ts'\n\nexport const addNodes = (\n diff: Diff,\n scurry: PathScurry,\n remover: RollbackRemove,\n options: SpecOptions,\n packageInfo: PackageInfoClient,\n): (() => Promise<unknown>)[] => {\n const actions: (() => Promise<unknown>)[] = []\n // fetch and extract all the nodes, removing any in the way\n for (const node of diff.nodes.add) {\n // if it's not in the store, we don't have to extract it, because\n // we're just linking to a location that already exists.\n if (!node.inVltStore()) continue\n\n // skip nodes that have already been extracted\n if (node.extracted) continue\n\n actions.push(() =>\n extractNode(node, scurry, remover, options, packageInfo, diff),\n )\n }\n return actions\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-chmod.d.ts","sourceRoot":"","sources":["../../src/reify/bin-chmod.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,WAAW,UACf,QAAQ,CAAC,IAAI,CAAC,UACb,UAAU,KACjB,OAAO,CAAC,IAAI,CAMd,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,SACb,IAAI,UACF,UAAU,KACjB,OAAO,CAAC,IAAI,CAad,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-chmod.js","sourceRoot":"","sources":["../../src/reify/bin-chmod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAIxC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,KAAqB,EACrB,MAAkB,EACH,EAAE;IACjB,MAAM,MAAM,GAAoB,EAAE,CAAA;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IACrC,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAAU,EACV,MAAkB,EACH,EAAE;IACjB,MAAM,MAAM,GAAoB,EAAE,CAAA;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAM;IACtB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CACzB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAC1C,CAAA;QACD,iDAAiD;QACjD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED,qBAAqB;AACrB,4DAA4D;AAC5D,oEAAoE;AACpE,IAAI,QAAQ,GAAG,CAAC,CAAA;AAChB,MAAM,cAAc,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IAClD,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC7B,CAAC,CAAA","sourcesContent":["import { statSync, existsSync } from 'node:fs'\nimport { chmod } from 'node:fs/promises'\nimport type { PathScurry } from 'path-scurry'\nimport type { Node } from '../node.ts'\n\n/**\n * Make all the packages' bins executable.\n */\nexport const binChmodAll = async (\n nodes: Iterable<Node>,\n scurry: PathScurry,\n): Promise<void> => {\n const chmods: Promise<void>[] = []\n for (const node of nodes) {\n chmods.push(binChmod(node, scurry))\n }\n await Promise.all(chmods)\n}\n\n/**\n * Make all the package's bins executable.\n */\nexport const binChmod = async (\n node: Node,\n scurry: PathScurry,\n): Promise<void> => {\n const chmods: Promise<void>[] = []\n if (!node.bins) return\n for (const bin of Object.values(node.bins)) {\n const path = scurry.resolve(\n `${node.resolvedLocation(scurry)}/${bin}`,\n )\n // only try to make executable if the file exists\n if (existsSync(path)) {\n chmods.push(makeExecutable(path))\n }\n }\n await Promise.all(chmods)\n}\n\n// 0 is \"not yet set\"\n// This is defined by doing `0o111 | <mode>` so that systems\n// that create files group-writable result in 0o775 instead of 0o755\nlet execMode = 0\nconst makeExecutable = async (path: string) => {\n if (!execMode) {\n execMode = (statSync(path).mode & 0o777) | 0o111\n }\n await chmod(path, execMode)\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/reify/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAKtC;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,IAAI,EAAE,CAAA;IACf,OAAO,EAAE,IAAI,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,KAAK,SACV,IAAI,eACG,WAAW,UAChB,UAAU,qBACC,GAAG,CAAC,KAAK,CAAC,KAC5B,OAAO,CAAC,WAAW,CA6DrB,CAAA"}
@@ -1,8 +1,9 @@
1
1
  // walk the graph of added nodes, building and chmoding their bins
2
2
  // at the end, we get back to the importers, and run their prepare
3
3
  // script as well as install script.
4
+ import { join } from 'node:path';
4
5
  import { run } from '@vltpkg/run';
5
- import { graphRun } from 'graph-run';
6
+ import { graphRun } from '@vltpkg/graph-run';
6
7
  import { nonEmptyList } from "../non-empty-list.js";
7
8
  import { optionalFail } from "./optional-fail.js";
8
9
  import { binChmod } from "./bin-chmod.js";
@@ -71,8 +72,16 @@ const visit = async (packageJson, scurry, node, signal, _path) => {
71
72
  const { manifest } = node;
72
73
  const { scripts = {} } = manifest;
73
74
  const { install, preinstall, postinstall, prepare, preprepare, postprepare, } = scripts;
74
- // if it has install script, run it
75
- const runInstall = !!(install || preinstall || postinstall);
75
+ // Check for binding.gyp file (npm's implicit install detection)
76
+ // "If there is a binding.gyp file in the root of your package and you
77
+ // haven't defined your own install or preinstall scripts, npm will default
78
+ // the install command to compile using node-gyp via node-gyp rebuild"
79
+ const hasBindingGyp = scurry
80
+ .lstatSync(join(node.resolvedLocation(scurry), 'binding.gyp'))
81
+ ?.isFile() ?? false;
82
+ const hasImplicitInstall = hasBindingGyp && !install && !preinstall;
83
+ // if it has install script or binding.gyp (implicit install), run it
84
+ const runInstall = !!(install || preinstall || postinstall) || hasImplicitInstall;
76
85
  if (runInstall) {
77
86
  await run({
78
87
  signal,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/reify/build.ts"],"names":[],"mappings":"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","sourcesContent":["// walk the graph of added nodes, building and chmoding their bins\n// at the end, we get back to the importers, and run their prepare\n// script as well as install script.\n\nimport { join } from 'node:path'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport { run } from '@vltpkg/run'\nimport { graphRun } from '@vltpkg/graph-run'\nimport type { PathScurry } from 'path-scurry'\nimport type { DepID } from '@vltpkg/dep-id'\nimport type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { nonEmptyList } from '../non-empty-list.ts'\nimport { optionalFail } from './optional-fail.ts'\nimport { binChmod } from './bin-chmod.ts'\n\n/**\n * Returns an object mapping registries to the names of the packages built.\n */\nexport type BuildResult = {\n success: Node[]\n failure: Node[]\n}\n\nexport const build = async (\n diff: Diff,\n packageJson: PackageJson,\n scurry: PathScurry,\n allowScriptsNodes: Set<DepID>,\n): Promise<BuildResult> => {\n const graph = diff.to\n const nodes = nonEmptyList([...graph.importers])\n const res: BuildResult = { success: [], failure: [] }\n\n // determine if scripts should run - check if node is in allowed set\n const shouldRunScripts = (node: Node): boolean =>\n allowScriptsNodes.has(node.id)\n\n /* c8 ignore next - all graphs have at least one importer */\n if (!nodes) return res\n\n await graphRun<Node, unknown>({\n graph: nodes,\n visit: async (node: Node, signal, path) => {\n // if it's not an importer or an added node, nothing to do.\n // TODO: only build importers if it has changed deps, there's never\n // been a previous build, or it contains something newer than the\n // most recent build.\n // For now, just always build all importers, because we don't\n // track all that other stuff.\n\n if (\n !node.importer &&\n (!diff.nodes.add.has(node) || !shouldRunScripts(node))\n )\n return\n\n try {\n await visit(packageJson, scurry, node, signal, path)\n if (!node.importer) {\n node.buildState = 'built'\n res.success.push(node)\n }\n /* c8 ignore start - windows on CI is missing those tests */\n } catch (err) {\n // Check if this is an optional failure that was handled\n if (node.optional) {\n node.buildState = 'failed'\n res.failure.push(node)\n // Let optionalFail handle the error\n await Promise.reject(err).catch(optionalFail(diff, node))\n } else {\n // Re-throw non-optional failures\n throw err\n }\n }\n /* c8 ignore stop */\n },\n\n getDeps: node => {\n const deps: Node[] = []\n for (const { to } of node.edgesOut.values()) {\n /* c8 ignore next - vanishingly unlikely in practice */\n if (to) deps.push(to)\n }\n return deps\n },\n })\n\n return res\n}\n\nconst visit = async (\n packageJson: PackageJson,\n scurry: PathScurry,\n node: Node,\n signal: AbortSignal,\n _path: Node[],\n): Promise<void> => {\n // at this point we might have to read the manifest from disk if it's\n // currently nullish, that could happen in a scenario where the ideal\n // graph is from a lockfile and there's no actual graph available\n // to hydrate the manifest data from.\n node.manifest ??= packageJson.read(node.resolvedLocation(scurry))\n const { manifest } = node\n const { scripts = {} } = manifest\n\n const {\n install,\n preinstall,\n postinstall,\n prepare,\n preprepare,\n postprepare,\n } = scripts\n\n // Check for binding.gyp file (npm's implicit install detection)\n // \"If there is a binding.gyp file in the root of your package and you\n // haven't defined your own install or preinstall scripts, npm will default\n // the install command to compile using node-gyp via node-gyp rebuild\"\n const hasBindingGyp =\n scurry\n .lstatSync(join(node.resolvedLocation(scurry), 'binding.gyp'))\n ?.isFile() ?? false\n const hasImplicitInstall = hasBindingGyp && !install && !preinstall\n\n // if it has install script or binding.gyp (implicit install), run it\n const runInstall =\n !!(install || preinstall || postinstall) || hasImplicitInstall\n if (runInstall) {\n await run({\n signal,\n arg0: 'install',\n ignoreMissing: true,\n packageJson,\n cwd: node.resolvedLocation(scurry),\n projectRoot: node.projectRoot,\n manifest,\n })\n }\n\n // if it's an importer or git, run prepare\n const prepable =\n node.id.startsWith('git') || node.importer || !node.inVltStore()\n const runPrepare =\n !!(prepare || preprepare || postprepare) && prepable\n\n if (runPrepare) {\n await run({\n signal,\n arg0: 'prepare',\n ignoreMissing: true,\n packageJson,\n cwd: node.resolvedLocation(scurry),\n projectRoot: node.projectRoot,\n manifest,\n })\n }\n\n await binChmod(node, scurry)\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-save-value.d.ts","sourceRoot":"","sources":["../../src/reify/calculate-save-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAGxC,eAAO,MAAM,kBAAkB,aACnB,MAAM,QACV,IAAI,YACA,MAAM,GAAG,SAAS,eACf,MAAM,GAAG,SAAS,KAC9B,MAoDF,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-save-value.js","sourceRoot":"","sources":["../../src/reify/calculate-save-value.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,GAAG,GAAG,CAAA;AAEvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgB,EAChB,IAAU,EACV,QAA4B,EAC5B,WAA+B,EACvB,EAAE;IACV;IACE,uDAAuD;IACvD,QAAQ,KAAK,UAAU;QACvB,qEAAqE;QACrE,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAC1B,kEAAkE;QAClE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAC3B,CAAC;QACD,yDAAyD;QACzD,kBAAkB;QAClB,IAAI,QAAQ,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YACzC,6CAA6C;YAC7C,OAAO,QAAQ,CAAA;QACjB,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,wDAAwD;YACxD,4DAA4D;YAC5D,OAAO,QAAQ,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC1C,GAAG,WAAW,GAAG,WAAW,EAAE,CAAA;YAChC,+DAA+D;YAC/D,4DAA4D;YAC5D,+DAA+D;YAC/D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,CAAA;YACvE,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAChC,sDAAsD;gBACtD,8DAA8D;gBAC9D,4DAA4D;gBAC5D,OAAO,IAAI,CAAC,QAAQ;qBACjB,OAAO,CACN,IAAI,MAAM,CACR,aAAa,IAAI,CAAC,KAAK,CAAC,gBAAgB,yBAAyB,CAClE,EACD,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,OAAO,UAAU,EAAE,CAClD;qBACA,OAAO;gBACN,2DAA2D;gBAC3D,IAAI,MAAM,CACR,aAAa,IAAI,CAAC,KAAK,CAAC,gBAAgB,cAAc,CACvD,EACD,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,UAAU,EAAE,CAC/C,CAAA;YACL,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAA;AACtB,CAAC,CAAA","sourcesContent":["import type { Spec } from '@vltpkg/spec'\nconst SAVE_PREFIX = '^'\n\nexport const calculateSaveValue = (\n nodeType: string,\n spec: Spec,\n existing: string | undefined,\n nodeVersion: string | undefined,\n): string => {\n if (\n // if not from the registry, save whatever we requested\n nodeType === 'registry' &&\n // if we installed exactly what we already wanted, leave it untouched\n spec.bareSpec !== existing &&\n // if we installed a specific version, keep that specific version.\n !spec.final.range?.isSingle\n ) {\n // if we had a single version, and got that version, then\n // leave it as-is.\n if (existing && existing === nodeVersion) {\n // depend on 1.2.3, got 1.2.3, keep unchanged\n return existing\n } else if (existing && !spec.bareSpec) {\n // if we had `\"express\": \"5.1\"` and did `vlt i express`,\n // then leave it as-is, because we just installed our pj dep\n return existing\n } else {\n const finalRange =\n (spec.final.semver && spec.final.bareSpec) ||\n `${SAVE_PREFIX}${nodeVersion}`\n // didn't have dep previously, or depended on a different thing\n // than what was requested. Update with the ^ range based on\n // the node that landed in the graph, but preserve alias prefix\n if (spec.subspec && spec.final.namedRegistry) {\n return `${spec.final.namedRegistry}:${spec.final.name}@${finalRange}`\n }\n\n if (spec.final.namedJsrRegistry) {\n // if we were given an alternative name, preserve that\n // do this with a regexp because the Spec objects get a little\n // weird here, and the string is relatively straightforward.\n return spec.bareSpec\n .replace(\n new RegExp(\n `^(?:.*?@)?${spec.final.namedJsrRegistry}:(@[^/]+/[^@]+)(@.*?)?$`,\n ),\n `${spec.final.namedJsrRegistry}:$1@${finalRange}`,\n )\n .replace(\n // otherwise, swap out the final version for the save range\n new RegExp(\n `^(?:.*?@)?${spec.final.namedJsrRegistry}:([^@].*?)?$`,\n ),\n `${spec.final.namedJsrRegistry}:${finalRange}`,\n )\n }\n return finalRange\n }\n }\n return spec.bareSpec\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { PathScurry } from 'path-scurry';
1
2
  import type { Diff } from '../diff.ts';
2
3
  import type { Node } from '../node.ts';
3
4
  /**
@@ -14,6 +15,10 @@ export type CheckNeededBuildOptions = {
14
15
  * The diff object containing nodes to process
15
16
  */
16
17
  diff: Diff;
18
+ /**
19
+ * PathScurry instance for filesystem access
20
+ */
21
+ scurry: PathScurry;
17
22
  };
18
23
  /**
19
24
  * Check which nodes need to be built and set buildState accordingly
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-needed-build.d.ts","sourceRoot":"","sources":["../../src/reify/check-needed-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,eAAe,EAAE,IAAI,EAAE,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IACV;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;CACnB,CAAA;AAmDD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAClB,uBAAuB,KAC/B,SAkBF,CAAA"}
@@ -1,10 +1,12 @@
1
+ import { join } from 'node:path';
1
2
  /**
2
3
  * Checks if a node needs to be built based on the conditions from build.ts:
3
4
  * 1. Has install lifecycle scripts (install, preinstall, postinstall)
4
- * 2. Is an importer or git dependency with prepare scripts (prepare, preprepare, postprepare)
5
- * 3. Has binary files that need to be linked
5
+ * 2. Has binding.gyp file with no install/preinstall scripts (implicit install)
6
+ * 3. Is an importer or git dependency with prepare scripts (prepare, preprepare, postprepare)
7
+ * 4. Has binary files that need to be linked
6
8
  */
7
- const nodeNeedsBuild = (node) => {
9
+ const nodeNeedsBuild = (node, scurry) => {
8
10
  // If the node has already been built during reify, no need to build again
9
11
  if (node.built)
10
12
  return false;
@@ -19,6 +21,15 @@ const nodeNeedsBuild = (node) => {
19
21
  scripts.postinstall);
20
22
  if (runInstall)
21
23
  return true;
24
+ // Check for binding.gyp file (npm's implicit install detection)
25
+ // "If there is a binding.gyp file in the root of your package and you
26
+ // haven't defined your own install or preinstall scripts, npm will default
27
+ // the install command to compile using node-gyp via node-gyp rebuild"
28
+ const hasBindingGyp = scurry
29
+ .lstatSync(join(node.resolvedLocation(scurry), 'binding.gyp'))
30
+ ?.isFile() ?? false;
31
+ if (hasBindingGyp && !scripts.install && !scripts.preinstall)
32
+ return true;
22
33
  // Check for prepare scripts on importers or git dependencies
23
34
  const prepable = node.id.startsWith('git') || node.importer || !node.inVltStore();
24
35
  const runPrepare = !!((scripts.prepare || scripts.preprepare || scripts.postprepare)
@@ -35,9 +46,9 @@ const nodeNeedsBuild = (node) => {
35
46
  * @returns {BuildData} The BuildData object containing Node objects that need building
36
47
  */
37
48
  export const checkNeededBuild = (options) => {
38
- const { diff } = options;
49
+ const { diff, scurry } = options;
39
50
  // Filter nodes to only include those that actually need to be built
40
- const nodesToBuild = [...diff.nodes.add].filter(nodeNeedsBuild);
51
+ const nodesToBuild = [...diff.nodes.add].filter(node => nodeNeedsBuild(node, scurry));
41
52
  // Set buildState = 'needed' on all nodes that require building
42
53
  for (const node of nodesToBuild) {
43
54
  node.buildState = 'needed';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-needed-build.js","sourceRoot":"","sources":["../../src/reify/check-needed-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAuBhC;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,CAAC,IAAU,EAAE,MAAkB,EAAW,EAAE;IACjE,0EAA0E;IAC1E,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IACzB,oBAAoB;IACpB,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3B,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAA;IAEjC,sCAAsC;IACtC,MAAM,UAAU,GAAG,CAAC,CAAC,CACnB,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,WAAW,CACpB,CAAA;IACD,IAAI,UAAU;QAAE,OAAO,IAAI,CAAA;IAE3B,gEAAgE;IAChE,sEAAsE;IACtE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,aAAa,GACjB,MAAM;SACH,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;QAC9D,EAAE,MAAM,EAAE,IAAI,KAAK,CAAA;IACvB,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;QAC1D,OAAO,IAAI,CAAA;IAEb,6DAA6D;IAC7D,MAAM,QAAQ,GACZ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;IAClE,MAAM,UAAU,GACd,CAAC,CAAC,CACA,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAC9D,sBAAsB;KACvB,IAAI,QAAQ,CAAA;IACf,IAAI,UAAU;QAAE,OAAO,IAAI,CAAA;IAE3B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgC,EACrB,EAAE;IACb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAEhC,oEAAoE;IACpE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACrD,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAC7B,CAAA;IAED,+DAA+D;IAC/D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,MAAM,SAAS,GAAc;QAC3B,eAAe,EAAE,YAAY;KAC9B,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { join } from 'node:path'\n\n/**\n * Build data containing the queue of DepIDs that need building\n */\nexport type BuildData = {\n needsBuildNodes: Node[]\n}\n\n/**\n * Options for checking needed build data\n */\nexport type CheckNeededBuildOptions = {\n /**\n * The diff object containing nodes to process\n */\n diff: Diff\n /**\n * PathScurry instance for filesystem access\n */\n scurry: PathScurry\n}\n\n/**\n * Checks if a node needs to be built based on the conditions from build.ts:\n * 1. Has install lifecycle scripts (install, preinstall, postinstall)\n * 2. Has binding.gyp file with no install/preinstall scripts (implicit install)\n * 3. Is an importer or git dependency with prepare scripts (prepare, preprepare, postprepare)\n * 4. Has binary files that need to be linked\n */\nconst nodeNeedsBuild = (node: Node, scurry: PathScurry): boolean => {\n // If the node has already been built during reify, no need to build again\n if (node.built) return false\n\n const { manifest } = node\n /* c8 ignore next */\n if (!manifest) return false\n\n const { scripts = {} } = manifest\n\n // Check for install lifecycle scripts\n const runInstall = !!(\n scripts.install ||\n scripts.preinstall ||\n scripts.postinstall\n )\n if (runInstall) return true\n\n // Check for binding.gyp file (npm's implicit install detection)\n // \"If there is a binding.gyp file in the root of your package and you\n // haven't defined your own install or preinstall scripts, npm will default\n // the install command to compile using node-gyp via node-gyp rebuild\"\n const hasBindingGyp =\n scurry\n .lstatSync(join(node.resolvedLocation(scurry), 'binding.gyp'))\n ?.isFile() ?? false\n if (hasBindingGyp && !scripts.install && !scripts.preinstall)\n return true\n\n // Check for prepare scripts on importers or git dependencies\n const prepable =\n node.id.startsWith('git') || node.importer || !node.inVltStore()\n const runPrepare =\n !!(\n (scripts.prepare || scripts.preprepare || scripts.postprepare)\n /* c8 ignore next 2 */\n ) && prepable\n if (runPrepare) return true\n\n return false\n}\n\n/**\n * Check which nodes need to be built and set buildState accordingly\n * Marks nodes with buildState = 'needed' for those that require\n * install lifecycle scripts as part of `vlt build`\n * @returns {BuildData} The BuildData object containing Node objects that need building\n */\nexport const checkNeededBuild = (\n options: CheckNeededBuildOptions,\n): BuildData => {\n const { diff, scurry } = options\n\n // Filter nodes to only include those that actually need to be built\n const nodesToBuild = [...diff.nodes.add].filter(node =>\n nodeNeedsBuild(node, scurry),\n )\n\n // Set buildState = 'needed' on all nodes that require building\n for (const node of nodesToBuild) {\n node.buildState = 'needed'\n }\n\n const buildData: BuildData = {\n needsBuildNodes: nodesToBuild,\n }\n\n return buildData\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-edge.d.ts","sourceRoot":"","sources":["../../src/reify/delete-edge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAgBtC,eAAO,MAAM,UAAU,SACf,IAAI,UACF,UAAU,WACT,cAAc,kBAmBxB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-edge.js","sourceRoot":"","sources":["../../src/reify/delete-edge.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,CAAC,OAAuB,EAAE,GAAW,EAAE,EAAE;IAC1D,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,OAAuB,EAAE,GAAW,EAAE,EAAE;IAC1D,OAAO;QACL,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;QACf,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;KACzB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAA;AAEpE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,IAAU,EACV,MAAkB,EAClB,OAAuB,EACvB,EAAE;IACF,MAAM,EACJ,IAAI,EAAE,EAAE,IAAI,EAAE,EACd,EAAE,GACH,GAAG,IAAI,CAAA;IACR,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAuB,EAAE,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,EAAE,EAAE,IAAI,CAAA;IACrB,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC7B,CAAC,CAAA","sourcesContent":["import type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { PathScurry } from 'path-scurry'\nimport type { Edge } from '../edge.ts'\n\nconst rmBinPosix = (remover: RollbackRemove, bin: string) => {\n return [remover.rm(bin)]\n}\n\nconst rmBinWin32 = (remover: RollbackRemove, bin: string) => {\n return [\n remover.rm(bin),\n remover.rm(bin + '.cmd'),\n remover.rm(bin + '.ps1'),\n ]\n}\n\nconst rmBin = process.platform === 'win32' ? rmBinWin32 : rmBinPosix\n\nexport const deleteEdge = async (\n edge: Edge,\n scurry: PathScurry,\n remover: RollbackRemove,\n) => {\n const {\n spec: { name },\n to,\n } = edge\n const nm = edge.from.nodeModules(scurry)\n const path = scurry.resolve(nm, name)\n const binRoot = scurry.cwd.resolve(`${nm}/.bin`)\n const promises: Promise<unknown>[] = []\n promises.push(remover.rm(path))\n const bins = to?.bins\n if (bins) {\n for (const key of Object.keys(bins)) {\n const bin = binRoot.resolve(key).fullpath()\n promises.push(...rmBin(remover, bin))\n }\n }\n await Promise.all(promises)\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-edges.d.ts","sourceRoot":"","sources":["../../src/reify/delete-edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,eAAO,MAAM,WAAW,SAChB,IAAI,UACF,UAAU,WACT,cAAc,KACtB,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAW1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-edges.js","sourceRoot":"","sources":["../../src/reify/delete-edges.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAU,EACV,MAAkB,EAClB,OAAuB,EACK,EAAE;IAC9B,MAAM,QAAQ,GAA+B,EAAE,CAAA;IAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACrC,2DAA2D;QAC3D,kDAAkD;QAClD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAC/D,SAAQ;QACV,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA","sourcesContent":["import type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport { deleteEdge } from './delete-edge.ts'\n\nexport const deleteEdges = (\n diff: Diff,\n scurry: PathScurry,\n remover: RollbackRemove,\n): (() => Promise<unknown>)[] => {\n const promises: (() => Promise<unknown>)[] = []\n for (const edge of diff.edges.delete) {\n // if the edge.from is a deleted node in the store, no need\n // the entire dir will be removed in a later step.\n if (diff.nodes.delete.has(edge.from) && edge.from.inVltStore()) {\n continue\n }\n promises.push(() => deleteEdge(edge, scurry, remover))\n }\n return promises\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-nodes.d.ts","sourceRoot":"","sources":["../../src/reify/delete-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,eAAO,MAAM,WAAW,SAChB,IAAI,WACD,cAAc,UACf,UAAU,KACjB,OAAO,CAAC,OAAO,CAAC,EAYlB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-nodes.js","sourceRoot":"","sources":["../../src/reify/delete-nodes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAU,EACV,OAAuB,EACvB,MAAkB,EACE,EAAE;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACjD,MAAM,SAAS,GAAuB,EAAE,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACrC,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,SAAQ;QAChC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport { deleteEdge } from './delete-edge.ts'\n\nexport const deleteNodes = (\n diff: Diff,\n remover: RollbackRemove,\n scurry: PathScurry,\n): Promise<unknown>[] => {\n const store = scurry.resolve('node_modules/.vlt')\n const rmActions: Promise<unknown>[] = []\n for (const node of diff.nodes.delete) {\n // do not delete workspaces or link targets\n if (!node.inVltStore()) continue\n rmActions.push(remover.rm(scurry.resolve(store, node.id)))\n for (const edge of node.edgesIn) {\n rmActions.push(deleteEdge(edge, scurry, remover))\n }\n }\n return rmActions\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-node.d.ts","sourceRoot":"","sources":["../../src/reify/extract-node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAItC;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX,GACD;IACE,OAAO,EAAE,KAAK,CAAA;IACd,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAgBL;;;GAGG;AACH,eAAO,MAAM,WAAW,SAChB,IAAI,UACF,UAAU,WACT,cAAc,WACd,WAAW,eACP,iBAAiB,SACvB,IAAI,KACV,OAAO,CAAC,aAAa,CA0EvB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-node.js","sourceRoot":"","sources":["../../src/reify/extract-node.ts"],"names":[],"mappings":"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","sourcesContent":["import { hydrate } from '@vltpkg/dep-id'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport { platformCheck } from '@vltpkg/pick-manifest'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { optionalFail } from './optional-fail.ts'\nimport { removeOptionalSubgraph } from '../remove-optional-subgraph.ts'\n\n/**\n * Result of the extraction operation.\n * Either the extracted package data or an error if extraction failed.\n */\nexport type ExtractResult =\n | {\n success: true\n node: Node\n }\n | {\n success: false\n node: Node\n error: unknown\n }\n\n/**\n * Returns a function that handles removing\n * a failed optional node from its graph.\n * Returns undefined for non-optional nodes when no diff is provided.\n */\nconst getOptionalFailedNodeRemover = (node: Node, diff?: Diff) => {\n return (\n diff ? optionalFail(diff, node)\n : node.isOptional() ?\n () => removeOptionalSubgraph(node.graph, node)\n : undefined\n )\n}\n\n/**\n * Extract a single node to the file system.\n * Returns a promise that resolves when the extraction is complete.\n */\nexport const extractNode = async (\n node: Node,\n scurry: PathScurry,\n remover: RollbackRemove,\n options: SpecOptions,\n packageInfo: PackageInfoClient,\n diff?: Diff,\n): Promise<ExtractResult> => {\n node.extracted = true\n const { manifest = {} } = node\n const target = node.resolvedLocation(scurry)\n const from = scurry.resolve('')\n const spec = hydrate(node.id, node.name, options)\n const removeOptionalFailedNode = getOptionalFailedNodeRemover(\n node,\n diff,\n )\n const { integrity, resolved } = node\n\n // Use platform data from node if available (from lockfile), otherwise fall back to manifest\n const platformData = node.platform ?? manifest\n\n // Check if we should skip this node due to platform incompatibility or deprecation\n if (\n removeOptionalFailedNode &&\n (manifest.deprecated ||\n !platformCheck(\n platformData,\n process.version,\n process.platform,\n process.arch,\n ))\n ) {\n removeOptionalFailedNode()\n return {\n success: false,\n node,\n error: new Error('Platform check failed or package deprecated'),\n }\n }\n\n try {\n await remover.rm(target)\n\n if (removeOptionalFailedNode) {\n try {\n const result = await packageInfo.extract(spec, target, {\n from,\n integrity,\n resolved,\n })\n // Store computed integrity for git/remote deps\n if (result.integrity && !node.integrity) {\n node.integrity = result.integrity\n }\n return { success: true, node }\n } catch (error) {\n removeOptionalFailedNode()\n return { success: false, node, error }\n }\n } else {\n const result = await packageInfo.extract(spec, target, {\n from,\n integrity,\n resolved,\n })\n // Store computed integrity for git/remote deps\n if (result.integrity && !node.integrity) {\n node.integrity = result.integrity\n }\n return { success: true, node }\n }\n } catch (error) {\n /* c8 ignore start */\n if (removeOptionalFailedNode) {\n removeOptionalFailedNode()\n return { success: false, node, error }\n }\n /* c8 ignore stop */\n throw error\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reify/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EACV,2BAA2B,EAC3B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AA0EpD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,GAAG,CAAC,EAAE,2BAA2B,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,8BAA8B,CAAA;IACvC,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,WAAW,EAAE,iBAAiB,CAAA;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IACV;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,YACP,YAAY,KACpB,OAAO,CAAC,WAAW,CAyCrB,CAAA"}
@@ -119,7 +119,7 @@ const reify_ = async (options, diff, remover) => {
119
119
  await internalHoist(diff.to, options, remover);
120
120
  // looks up all nodes setting buildState = 'needed'
121
121
  // on nodes that require building
122
- checkNeededBuild({ diff });
122
+ checkNeededBuild({ diff, scurry });
123
123
  // Filter nodes allowed to run scripts if allowScripts query is provided
124
124
  const allowScriptsNodes = await filterNodesByQuery(diff.to, allowScripts);
125
125
  // ensure that all added bins are chmod +x
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reify/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { graphStep } from '@vltpkg/output'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { availableParallelism } from 'node:os'\nimport { callLimit } from 'promise-call-limit'\nimport type { DepID } from '@vltpkg/dep-id'\nimport type { LoadOptions } from '../actual/load.ts'\nimport { load as loadActual } from '../actual/load.ts'\nimport type {\n AddImportersDependenciesMap,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport { Diff } from '../diff.ts'\nimport type { Graph } from '../graph.ts'\nimport type { GraphModifier } from '../modifiers.ts'\nimport {\n lockfileData,\n saveData,\n saveHidden,\n} from '../lockfile/save.ts'\nimport { addEdges } from './add-edges.ts'\nimport { addNodes } from './add-nodes.ts'\nimport { build } from './build.ts'\nimport { deleteEdges } from './delete-edges.ts'\nimport { checkNeededBuild } from './check-needed-build.ts'\nimport { deleteNodes } from './delete-nodes.ts'\nimport { internalHoist } from './internal-hoist.ts'\nimport { rollback } from './rollback.ts'\nimport { updatePackageJson } from './update-importers-package-json.ts'\nimport { copyFileSync } from 'node:fs'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport type { NodeLike } from '@vltpkg/types'\nimport { binChmodAll } from './bin-chmod.ts'\n\nconst limit = Math.max(availableParallelism() - 1, 1) * 8\n\n/**\n * Filter nodes using a DSS query string\n */\nconst filterNodesByQuery = async (\n graph: Graph,\n allowScriptsQuery?: string,\n): Promise<Set<DepID>> => {\n // shortcut no packages included\n if (\n allowScriptsQuery === ':not(*)' /* c8 ignore next */ ||\n !allowScriptsQuery\n ) {\n return new Set()\n }\n // shortcut all packages included\n if (allowScriptsQuery === '*') {\n return new Set(graph.nodes.keys())\n }\n /* c8 ignore start */\n const securityArchive =\n Query.hasSecuritySelectors(allowScriptsQuery) ?\n await SecurityArchive.start({\n nodes: [...graph.nodes.values()],\n })\n : undefined\n /* c8 ignore stop */\n\n const edges = graph.edges\n const nodes = new Set<NodeLike>(graph.nodes.values())\n const importers = graph.importers\n\n const query = new Query({\n edges,\n nodes,\n importers,\n securityArchive,\n })\n\n const { nodes: resultNodes } = await query.search(\n allowScriptsQuery,\n {\n signal: new AbortController().signal,\n },\n )\n\n return new Set(resultNodes.map(node => node.id))\n}\n\n// - [ ] depid's with peer resolutions\n// - [ ] depid shortening\n\nexport type ReifyOptions = LoadOptions & {\n add?: AddImportersDependenciesMap\n allowScripts: string\n remove?: RemoveImportersDependenciesMap\n graph: Graph\n actual?: Graph\n packageInfo: PackageInfoClient\n modifiers?: GraphModifier\n remover: RollbackRemove\n}\n\nexport type ReifyResult = {\n /**\n * The diff object that was used to reify the project.\n */\n diff: Diff\n /**\n * Optional queue of DepIDs that requires building (running lifecycle scripts\n * and binary linking) after the reification is complete.\n */\n buildQueue?: DepID[]\n}\n\n/**\n * Make the current project match the supplied graph.\n */\nexport const reify = async (\n options: ReifyOptions,\n): Promise<ReifyResult> => {\n const done = graphStep('reify')\n\n const { graph, scurry, remover } = options\n\n const actual =\n options.actual ??\n loadActual({\n ...options,\n loadManifests: true,\n })\n\n const diff = new Diff(actual, graph)\n const noModifiedDependencies =\n !options.add?.modifiedDependencies &&\n !options.remove?.modifiedDependencies\n const skipOptionalOnly = noModifiedDependencies && diff.optionalOnly\n const res: ReifyResult = { diff }\n if (!diff.hasChanges() || skipOptionalOnly) {\n // nothing to do, so just return the diff\n done()\n return res\n }\n\n let success = false\n try {\n const { buildQueue } = await reify_(options, diff, remover)\n remover.confirm()\n success = true\n res.buildQueue = buildQueue\n } finally {\n /* c8 ignore start */\n if (!success) {\n await rollback(remover, diff, scurry).catch(() => {})\n }\n /* c8 ignore stop */\n }\n\n done()\n\n return res\n}\n\nconst reify_ = async (\n options: ReifyOptions,\n diff: Diff,\n remover: RollbackRemove,\n): Promise<Omit<ReifyResult, 'diff'>> => {\n const res: Omit<ReifyResult, 'diff'> = {}\n const {\n add,\n remove,\n packageInfo,\n packageJson,\n scurry,\n allowScripts,\n } = options\n const saveImportersPackageJson =\n /* c8 ignore next */\n add?.modifiedDependencies || remove?.modifiedDependencies ?\n updatePackageJson({\n add,\n remove,\n graph: options.graph,\n packageJson,\n })\n : undefined\n\n // before anything else happens, grab the ideal tree as it was resolved\n // so that we can store it in the lockfile. We do this here so that\n // any failed/removed optional deps are not reflected in the lockfile\n // data as it is saved.\n const lfData = lockfileData(options)\n const actions: (() => Promise<unknown>)[] = addNodes(\n diff,\n scurry,\n remover,\n options,\n packageInfo,\n ).concat(deleteEdges(diff, scurry, remover))\n\n // need to wait, so that the nodes exist to link to\n if (actions.length) await callLimit(actions, { limit })\n\n // create all node_modules symlinks, and link bins to nm/.bin\n const edgeActions = addEdges(diff, scurry, remover)\n if (edgeActions.length) await callLimit(edgeActions, { limit })\n\n await internalHoist(diff.to, options, remover)\n\n // looks up all nodes setting buildState = 'needed'\n // on nodes that require building\n checkNeededBuild({ diff, scurry })\n\n // Filter nodes allowed to run scripts if allowScripts query is provided\n const allowScriptsNodes = await filterNodesByQuery(\n diff.to,\n allowScripts,\n )\n\n // ensure that all added bins are chmod +x\n await binChmodAll(diff.nodes.add, scurry)\n\n // run install lifecycle scripts and link any binary files\n await build(diff, packageJson, scurry, allowScriptsNodes)\n\n // set the buildQueue on the result object containing\n // an array with all the ids of nodes that need building\n res.buildQueue = [...diff.nodes.add]\n .filter(node => node.buildState === 'needed')\n .map(node => node.id)\n\n // if we had to change the actual graph along the way,\n // make sure we do not leave behind any unreachable nodes\n // TODO: add tests to cover this\n /* c8 ignore start */\n if (diff.hadOptionalFailures) {\n for (const node of options.graph.gc().values()) {\n diff.nodes.add.delete(node)\n diff.nodes.delete.add(node)\n }\n }\n /* c8 ignore stop */\n saveHidden(options)\n\n // delete garbage from the store.\n const rmActions: Promise<unknown>[] = deleteNodes(\n diff,\n remover,\n scurry,\n )\n if (rmActions.length) await Promise.all(rmActions)\n\n // updates package.json files if anything was added / removed\n saveImportersPackageJson?.()\n\n // write the ideal graph data to the lockfile\n saveData(lfData, scurry.resolve('vlt-lock.json'), false)\n\n // update the store config reference if a config file was used\n if (scurry.lstatSync('vlt.json')) {\n copyFileSync(\n scurry.resolve('vlt.json'),\n scurry.resolve('node_modules/.vlt/vlt.json'),\n )\n }\n\n // returns the result object\n return res\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-hoist.d.ts","sourceRoot":"","sources":["../../src/reify/internal-hoist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAK7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,oBAAoB,GAAG,IAAI,CAC9B,YAAY,EACZ,aAAa,GAAG,QAAQ,CACzB,CAAA;AAED,eAAO,MAAM,eAAe,UACnB,GAAG,CAAC,IAAI,CAAC,KACf,IAAI,GAAG,SAmET,CAAA;AAED,eAAO,MAAM,aAAa,UACjB,KAAK,WACH,oBAAoB,WACpB,cAAc,kBAgFxB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-hoist.js","sourceRoot":"","sources":["../../src/reify/internal-hoist.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DepID, DepIDTuple } from '@vltpkg/dep-id'\nimport { splitDepID } from '@vltpkg/dep-id'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { Version } from '@vltpkg/semver'\nimport { mkdir, symlink } from 'node:fs/promises'\nimport { dirname, relative } from 'node:path'\nimport type { PathBase, PathScurry } from 'path-scurry'\nimport type { Graph } from '../graph.ts'\nimport type { Node } from '../node.ts'\nimport type { ReifyOptions } from './index.ts'\n\ntype InternalHoistOptions = Pick<\n ReifyOptions,\n 'projectRoot' | 'scurry'\n>\n\nexport const pickNodeToHoist = (\n nodes: Set<Node>,\n): Node | undefined => {\n let pick: DepIDTuple | undefined = undefined\n let pickNode: Node | undefined = undefined\n for (const node of nodes) {\n if (node.importer || !node.inVltStore()) {\n continue\n }\n const id = splitDepID(node.id)\n if (!pick || !pickNode) {\n pick = id\n pickNode = node\n continue\n }\n\n // if one is a dep of an importer, privilege that one\n const impDep = [...node.edgesIn].some(n => n.from.importer)\n const pickImpDep = [...pickNode.edgesIn].some(\n n => n.from.importer,\n )\n if (impDep !== pickImpDep) {\n if (!pickImpDep) {\n pick = id\n pickNode = node\n }\n continue\n }\n\n if (id[0] === 'registry') {\n if (pick[0] !== 'registry') {\n pick = id\n pickNode = node\n continue\n }\n\n // both registry.\n\n // otherwise, privilege the higher-version dependency\n const pickVersion = pickNode.version\n const nodeVersion = node.version\n if (pickVersion) {\n if (!nodeVersion) continue\n if (\n Version.parse(nodeVersion).greaterThan(\n Version.parse(pickVersion),\n )\n ) {\n pick = id\n pickNode = node\n }\n continue\n } else if (nodeVersion) {\n pick = id\n pickNode = node\n continue\n }\n } else {\n // current node is not registry\n if (pick[0] === 'registry') continue\n // neither is pick node, select highest lexically sorted\n if (pickNode.id.localeCompare(node.id, 'en') > 0) {\n pick = id\n pickNode = node\n }\n }\n }\n\n return pickNode\n}\n\nexport const internalHoist = async (\n graph: Graph,\n options: InternalHoistOptions,\n remover: RollbackRemove,\n) => {\n // create a list of all the nodes that we need to hoist.\n // For each name, we prioritize registry deps over other types,\n // and higher versions over lower ones. In the case of non-registry\n // deps, we just pick the first item by sorting the DepIDs.\n const links = new Map<string, { id: DepID; name: string }>()\n for (const [name, nodes] of graph.nodesByName) {\n const pickNode = pickNodeToHoist(nodes)\n if (pickNode) {\n let picked = false\n if (pickNode.edgesIn.size > 0) {\n for (const edgeIn of pickNode.edgesIn) {\n const otherName = edgeIn.name\n if (otherName !== name && !links.has(otherName)) {\n picked = true\n links.set(otherName, pickNode)\n }\n }\n }\n if (!picked) {\n links.set(name, pickNode)\n }\n }\n }\n\n // now we have a list of everything to hoist\n // first, remove anything that is not what we want, and skip\n // anything that would be linking what we already indend to link.\n const { scurry } = options\n\n const hoistDir = scurry.cwd.resolve(\n 'node_modules/.vlt/node_modules',\n )\n await mkdir(hoistDir.fullpath(), { recursive: true })\n\n const removes: Promise<void>[] = []\n for (const entry of await hoistDir.readdir()) {\n const name = entry.name\n // scoped package namespace\n if (name.startsWith('@')) {\n for (const pkg of await entry.readdir()) {\n await checkExisting(\n `${name}/${pkg.name}`,\n pkg,\n links,\n removes,\n scurry,\n remover,\n )\n }\n } else {\n await checkExisting(\n name,\n entry,\n links,\n removes,\n scurry,\n remover,\n )\n }\n }\n await Promise.all(removes)\n\n const symlinks: Promise<void>[] = []\n for (const [name, { name: nodeName, id }] of links) {\n const target = scurry.resolve(\n `node_modules/.vlt/${id}/node_modules/${nodeName}`,\n )\n const path = scurry.resolve(\n `node_modules/.vlt/node_modules/${name}`,\n )\n if (name.includes('/')) {\n await mkdir(dirname(path), { recursive: true })\n }\n symlinks.push(\n symlink(relative(dirname(path), target), path, 'dir'),\n )\n }\n await Promise.all(symlinks)\n}\n\nconst checkExisting = async (\n name: string,\n entry: PathBase,\n links: Map<string, { name: string; id: DepID }>,\n removes: Promise<void>[],\n scurry: PathScurry,\n remover: RollbackRemove,\n) => {\n const target = await entry.readlink()\n const { id } = links.get(name) /* c8 ignore next */ ?? {}\n if (\n !target ||\n !id ||\n target !==\n scurry.cwd.resolve(\n `node_modules/.vlt/${id}/node_modules/${name}`,\n )\n ) {\n removes.push(remover.rm(entry.fullpath()))\n } else {\n links.delete(name)\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-fail.d.ts","sourceRoot":"","sources":["../../src/reify/optional-fail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAC9B,MAAM,IAAI,CAAA;AACb,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GAC/B,SAAS,CAAA;AACZ,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GACT,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-fail.js","sourceRoot":"","sources":["../../src/reify/optional-fail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAoBvE,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,IAAU;IAEV,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9D,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,IAAU,EAAE,IAA+B,EAAE,EAAE;IAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;IAC/B,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACxD,2CAA2C;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,8CAA8C;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC,CAAA","sourcesContent":["import type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { removeOptionalSubgraph } from '../remove-optional-subgraph.ts'\n\n/**\n * If the node is optional, then returns an error handler that removes\n * the node and its connected optional subgraph, by moving them into the\n * \"deleted\" portion of the Diff object.\n * Otherwise, it returns `undefined` so that the promise will simply reject.\n */\nexport function optionalFail(\n diff: Diff,\n node: Node & { optional: true },\n): () => void\nexport function optionalFail(\n diff: Diff,\n node: Node & { optional: false },\n): undefined\nexport function optionalFail(\n diff: Diff,\n node: Node,\n): (() => void) | undefined\nexport function optionalFail(\n diff: Diff,\n node: Node,\n): (() => void) | undefined {\n return node.isOptional() ? () => del(diff, node) : undefined\n}\n\nconst del = (diff: Diff, node: Node & { optional: true }) => {\n diff.hadOptionalFailures = true\n for (const del of removeOptionalSubgraph(diff.to, node)) {\n // add it to the set of nodes being deleted\n diff.nodes.delete.add(del)\n // delete it from the set of nodes being added\n diff.nodes.add.delete(del)\n }\n diff.nodes.add.delete(node)\n diff.nodes.delete.add(node)\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/reify/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGtC,eAAO,MAAM,QAAQ,YACV,cAAc,QACjB,IAAI,UACF,UAAU,kBAwBnB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/reify/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAAuB,EACvB,IAAU,EACV,MAAkB,EAClB,EAAE;IACF,MAAM,QAAQ,GAAuB,EAAE,CAAA;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAEjD,0CAA0C;IAC1C,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE,CAAA;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,SAAQ;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3C,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAE3C,UAAU,CAAC,OAAO,EAAE,CAAA;IAEpB,oBAAoB;IACpB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC1C,CAAC,CAAA","sourcesContent":["import { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport { deleteEdge } from './delete-edge.ts'\n\nexport const rollback = async (\n remover: RollbackRemove,\n diff: Diff,\n scurry: PathScurry,\n) => {\n const promises: Promise<unknown>[] = []\n const store = scurry.resolve('node_modules/.vlt')\n\n // remove everything the diff tried to add\n const backRoller = new RollbackRemove()\n for (const node of diff.nodes.add) {\n if (!node.inVltStore()) continue\n const path = scurry.resolve(store, node.id)\n /* c8 ignore next */\n promises.push(backRoller.rm(path).catch(() => {}))\n }\n for (const edge of diff.edges.add) {\n promises.push(deleteEdge(edge, scurry, backRoller))\n }\n\n /* c8 ignore next */\n await Promise.all(promises).catch(() => {})\n\n backRoller.confirm()\n\n /* c8 ignore next */\n await remover.rollback().catch(() => {})\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-importers-package-json.d.ts","sourceRoot":"","sources":["../../src/reify/update-importers-package-json.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAOvD,OAAO,KAAK,EACV,2BAA2B,EAE3B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAYxC,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,2BAA2B,CAAA;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,8BAA8B,CAAA;IACvC;;;;OAIG;IACH,KAAK,EAAE,KAAK,CAAA;IACZ;;;;OAIG;IACH,WAAW,EAAE,WAAW,CAAA;CACzB,CAAA;AAiGD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,yCAK3B,wBAAwB,eAyB1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-importers-package-json.js","sourceRoot":"","sources":["../../src/reify/update-importers-package-json.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DepID } from '@vltpkg/dep-id'\nimport { splitDepID } from '@vltpkg/dep-id'\nimport { error } from '@vltpkg/error-cause'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport type {\n DependencyTypeLong,\n DependencyTypeShort,\n NormalizedManifest,\n} from '@vltpkg/types'\nimport { longDependencyTypes } from '@vltpkg/types'\nimport type {\n AddImportersDependenciesMap,\n Dependency,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport type { Graph } from '../graph.ts'\nimport { resolveSaveType } from '../resolve-save-type.ts'\nimport { calculateSaveValue } from './calculate-save-value.ts'\n\nconst depTypesMap = new Map<DependencyTypeShort, DependencyTypeLong>([\n ['prod', 'dependencies'],\n ['dev', 'devDependencies'],\n ['peer', 'peerDependencies'],\n ['peerOptional', 'peerDependencies'],\n ['optional', 'optionalDependencies'],\n])\n\nexport type UpdatePackageJsonOptions = {\n /**\n * A `Map` in which keys are {@link DepID} linking to another `Map` in which\n * keys are the dependency names and values are {@link Dependency}. This\n * structure represents dependencies that need to be added to the importer\n * represented by {@link DepID}.\n */\n add?: AddImportersDependenciesMap\n /**\n * A `Map` object representing nodes to be removed from the ideal graph.\n * Each {@link DepID} key represents an importer node and the `Set` of\n * dependency names to be removed from its dependency list.\n */\n remove?: RemoveImportersDependenciesMap\n /**\n * The {@link Graph} instance that contain the importer nodes to which\n * the manifest data (and it's corresponding `package.json` file) are\n * going to be updated.\n */\n graph: Graph\n /**\n * An instance of {@link PackageJson} to use when writing updated manifest\n * data to `package.json` files. It's necessary that this is the same\n * instance used to load these `package.json` files previously.\n */\n packageJson: PackageJson\n}\n\nconst addOrRemoveDeps = (\n nodeId: DepID,\n graph: Graph,\n addOrRemove?:\n | AddImportersDependenciesMap\n | RemoveImportersDependenciesMap,\n): NormalizedManifest | undefined => {\n const node = graph.nodes.get(nodeId)\n if (!node) {\n throw error('Failed to retrieve node', {\n found: nodeId,\n })\n }\n const manifest = node.manifest\n if (!manifest) {\n throw error('Could not find manifest data for node', {\n found: nodeId,\n })\n }\n const deps = addOrRemove?.get(nodeId)\n /* c8 ignore start -- impossible but TS doesn't know that */\n if (!deps) {\n throw error('Failed to retrieve added deps info', {\n manifest,\n })\n }\n let manifestChanged = false\n /* c8 ignore stop */\n for (const deleteNameOrAddItem of deps) {\n if (typeof deleteNameOrAddItem === 'string') {\n const name = deleteNameOrAddItem\n for (const depType of longDependencyTypes) {\n if (manifest[depType]?.[name]) {\n delete manifest[depType][name]\n manifestChanged = true\n }\n }\n if (manifest.peerDependenciesMeta?.[name]) {\n delete manifest.peerDependenciesMeta[name]\n manifestChanged = true\n }\n } else {\n const [name, dep] = deleteNameOrAddItem\n // peerOptional also needs to add peerDependenciesMeta entry\n const depTypeShort = resolveSaveType(node, name, dep.type)\n const depType = depTypesMap.get(depTypeShort)\n if (!depType) {\n throw error('Failed to retrieve dependency type', {\n validOptions: [...depTypesMap.keys()],\n found: dep.type,\n })\n }\n const n = node.edgesOut.get(name)?.to\n if (!n) {\n throw error('Dependency node could not be found')\n }\n const [nodeType] = splitDepID(n.id)\n\n for (const dtype of longDependencyTypes) {\n if (dtype === depType || !manifest[dtype]) continue\n delete manifest[dtype][name]\n }\n if (depTypeShort === 'peerOptional') {\n manifest.peerDependenciesMeta ??= {}\n manifest.peerDependenciesMeta[name] = { optional: true }\n } else if (manifest.peerDependenciesMeta?.[name]) {\n delete manifest.peerDependenciesMeta[name]\n }\n\n const dependencies =\n manifest[depType] ?? (manifest[depType] = {})\n // check to see if we need to save a different version\n // - If you install a single specific version, that is deliberate,\n // we save that exact version, no matter what.\n // - If the requested spec matches the manifest, make no change\n // If the requested spec had no bareSpec, and the manifest has\n // a dependency entry, make no change.\n // If the requested spec has a bareSpec that did NOT match the manifest,\n // then update it.\n // If the manifest does not contain anything, then update it.\n // Only for registry dependencies\n const existing = dependencies[name]\n const saveValue = calculateSaveValue(\n nodeType,\n dep.spec,\n existing,\n n.version,\n )\n dependencies[name] = saveValue\n manifestChanged = manifestChanged || saveValue !== existing\n }\n }\n return manifestChanged ? manifest : undefined\n}\n\n/**\n * Updates nodes of a provided {@link Graph} accordingly to the\n * provided add or remove arguments.\n */\nexport const updatePackageJson = ({\n add,\n graph,\n packageJson,\n remove,\n}: UpdatePackageJsonOptions) => {\n const manifestsToUpdate = new Set<NormalizedManifest>()\n const operations = new Set([add, remove])\n\n for (const operation of operations) {\n if (operation) {\n // These node ids are from either importer nodes or dependencies\n // that are nested folders from which the user can also add new\n // dependencies to\n for (const nodeId of operation.keys()) {\n const manifest = addOrRemoveDeps(nodeId, graph, operation)\n if (manifest) {\n manifestsToUpdate.add(manifest)\n }\n }\n }\n }\n\n const commit = () => {\n for (const manifest of manifestsToUpdate) {\n packageJson.save(manifest)\n }\n }\n\n return commit\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-optional-subgraph.d.ts","sourceRoot":"","sources":["../src/remove-optional-subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,UAC1B,KAAK,gBACE,IAAI,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,cAQxC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAiB,oBAAoB,CACnC,IAAI,EAAE,IAAI,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,EAC/B,IAAI;cAA8B,IAAI;EAAK,GAC1C,SAAS,CAAC,IAAI,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,EAAE,IAAI,CAAC,CAiB5C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-optional-subgraph.js","sourceRoot":"","sources":["../src/remove-optional-subgraph.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAY,EACZ,YAAuC,EACvC,EAAE;IACF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,SAAS,CAAC,CAAC,oBAAoB,CACnC,IAA+B,EAC/B,OAAO,IAAI,GAAG,EAA6B;IAE3C,mCAAmC;IACnC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAM;IAE1B,qDAAqD;IACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACd,MAAM,IAAI,CAAA;IAEV,mDAAmD;IACnD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9C,qEAAqE;QACrE,oEAAoE;QACpE,2CAA2C;QAC3C,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,MAAM,GAAG,CAAA;QAC/D,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type { Graph } from './graph.ts'\nimport type { Node } from './node.ts'\n\n/**\n * Remove the affected optional nodes starting from a given optional node\n * that failed to resolve/install.\n *\n * Removing these dependents will frequently leave optional *dependencies*\n * behind that are made unreachable from any project importer. For performance\n * reasons, `graph.gc()` is not called automatically by this method, since\n * multiple optional subgraphs may need to be removed in a single operation,\n * and the mark-and-sweep garbage collection (a) can be excessively expensive,\n * and (b) may need to communicate the set of garbage-collected nodes\n * for cleanup (as in the case of optional node build failures during\n * reification).\n */\nexport const removeOptionalSubgraph = (\n graph: Graph,\n startingNode: Node & { optional: true },\n) => {\n const removed = new Set<Node>()\n for (const node of findOptionalSubgraph(startingNode)) {\n graph.removeNode(node, undefined, true)\n removed.add(node)\n }\n return removed\n}\n\n/**\n * Given a starting node, this generator will walk back from the optional node\n * to all of its optional dependents, emitting each one, and skipping any\n * cycles.\n *\n * Note that when these are removed, it may create unreachable nodes in the\n * graph! Be sure to call `graph.gc()` if these are removed.\n */\nexport function* findOptionalSubgraph(\n node: Node & { optional: true },\n seen = new Set<Node & { optional: true }>(),\n): Generator<Node & { optional: true }, void> {\n // already visited, prevent looping\n if (seen.has(node)) return\n\n // the node itself is part of the subgraph, of course\n seen.add(node)\n yield node\n\n // and any of its dependents that are also optional\n for (const { from, optional } of node.edgesIn) {\n // if it's an optional *edge*, we don't need to remove it, because it\n // doesn't need the node anyway. But if the node is optional and the\n // dep isn't, then we do need to remove it.\n if (from.isOptional() && !optional) {\n for (const dep of findOptionalSubgraph(from, seen)) yield dep\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-save-type.d.ts","sourceRoot":"","sources":["../src/resolve-save-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACT,MAAM,eAAe,CAAA;AAEtB;;GAEG;AACH,eAAO,MAAM,eAAe,SACpB,QAAQ,QACR,MAAM,YACF,kBAAkB,KAC3B,mBAGA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-save-type.js","sourceRoot":"","sources":["../src/resolve-save-type.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAc,EACd,IAAY,EACZ,QAA4B,EACP,EAAE,CACvB,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,CAC1C,CAAA","sourcesContent":["import type {\n DependencySaveType,\n DependencyTypeShort,\n NodeLike,\n} from '@vltpkg/types'\n\n/**\n * Resolve a {@link DependencySaveType} to a {@link DependencyTypeShort}\n */\nexport const resolveSaveType = (\n node: NodeLike,\n name: string,\n saveType: DependencySaveType,\n): DependencyTypeShort =>\n saveType !== 'implicit' ? saveType : (\n (node.edgesOut.get(name)?.type ?? 'prod')\n )\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-node.d.ts","sourceRoot":"","sources":["../src/stringify-node.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,eAAO,MAAM,aAAa,UAAW,QAAQ,WA0B5C,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-node.js","sourceRoot":"","sources":["../src/stringify-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAe,EAAE,EAAE;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEpD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,IAAI,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAA;QACtC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,GAAG,YAAY,GAAG,GAAG,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,GAAG,GAAG,CAAA;YACpB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,MAAM,GAAG,WAAW,EAAE,CAAA;IAClC,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,aAAa,IAAI,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAA;IAC5B,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,yEAAyE;QACzE,MAAM,WAAW,GACf,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACxD,OAAO,GAAG,IAAI,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;IACxC,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { splitDepID } from '@vltpkg/dep-id/browser'\nimport { defaultRegistryName } from '@vltpkg/spec/browser'\nimport type { NodeLike } from '@vltpkg/types'\n\nexport const stringifyNode = (node?: NodeLike) => {\n if (!node) return ''\n const version = node.version ? `@${node.version}` : ''\n const [type, ref, nameVersion] = splitDepID(node.id)\n\n if (type === 'registry') {\n let prefix = `${defaultRegistryName}:`\n if (ref) {\n if (/^https?:\\/\\//.test(ref)) {\n prefix = `registry:${ref}#`\n } else {\n prefix = `${ref}:`\n }\n }\n return `${prefix}${nameVersion}`\n } else if (type === 'workspace') {\n return `workspace:${node.name}`\n } else if (type === 'file' && node.mainImporter) {\n return `root:${node.name}`\n } else {\n // node.name getter will return the id if the package has no name\n // property so here we check for that in order to return `type(ref)` only\n const nameVersion =\n node.name !== node.id ? `:${node.name}${version}` : ''\n return `${type}(${ref})${nameVersion}`\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/transfer-data/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAWlE,OAAO,KAAK,EAEV,SAAS,EAGT,kBAAkB,EACnB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAQ,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AA8CnE;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,EAAE,iBAAiB,CAAA;IAC9B,eAAe,EAAE,eAAe,GAAG,SAAS,CAAA;CAC7C,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE;QACT,QAAQ,EAAE,OAAO,CAAA;QACjB,YAAY,EAAE,OAAO,CAAA;QACrB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,kBAAkB,CAAA;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,EAAE,CAAA;IACH,QAAQ,EAAE,YAAY,CAAA;IACtB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,mBAAmB,EAAE,MAAM,CAAA;QAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;IACD,eAAe,CAAC,EAAE,GAAG,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,IAAI,eAAgB,YAAY,KAAG,UAsK/C,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/transfer-data/load.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { SecurityArchive } from '@vltpkg/security-archive/browser'\nimport {\n defaultGitHostArchives,\n defaultGitHosts,\n defaultRegistries,\n defaultRegistry,\n defaultScopeRegistries,\n} from '@vltpkg/spec/browser'\nimport { stringifyNode } from '../stringify-node.ts'\nimport { loadEdges } from '../lockfile/load-edges.ts'\nimport { loadNodes } from '../lockfile/load-nodes.ts'\nimport type {\n EdgeLike,\n GraphLike,\n NodeLike,\n DependencyTypeShort,\n NormalizedManifest,\n} from '@vltpkg/types'\nimport type { LockfileData } from '../lockfile/types.ts'\nimport type { DepID } from '@vltpkg/dep-id/browser'\nimport type { Spec, SpecOptionsFilled } from '@vltpkg/spec/browser'\n\nconst loadSpecOptions = (\n lockfile: LockfileData,\n): SpecOptionsFilled => {\n const {\n catalog = {},\n catalogs = {},\n registries,\n registry,\n 'git-hosts': gitHosts,\n 'git-host-archives': gitHostArchives,\n 'scope-registries': scopeRegistries,\n 'jsr-registries': jsrRegistries,\n } = lockfile.options\n return {\n catalog,\n catalogs,\n registries: { ...defaultRegistries, ...registries },\n registry: registry || defaultRegistry,\n 'jsr-registries': { ...jsrRegistries },\n 'git-hosts': { ...defaultGitHosts, ...gitHosts },\n 'git-host-archives': {\n ...defaultGitHostArchives,\n ...gitHostArchives,\n },\n 'scope-registries': {\n ...defaultScopeRegistries,\n ...scopeRegistries,\n },\n }\n}\n\ntype MaybeGraphLike = Pick<\n GraphLike,\n | 'importers'\n | 'edges'\n | 'nodes'\n | 'nodesByName'\n | 'projectRoot'\n | 'addEdge'\n | 'addNode'\n> & {\n mainImporter?: NodeLike\n}\n\n/**\n * The returned object when loading a graph from a transfer data structure,\n * including the graph itself, the spec options used to create it, and\n * the security archive (if any).\n */\nexport type LoadResult = {\n graph: GraphLike\n specOptions: SpecOptionsFilled\n securityArchive: SecurityArchive | undefined\n}\n\n/**\n * A data structure defining a complete graph to be transfered, including\n * extra information to the lockfile such as project info and importers.\n */\nexport type TransferData = {\n importers: {\n importer: boolean\n mainImporter: boolean\n id: string\n name: string\n version: string\n location: string\n manifest: NormalizedManifest\n projectRoot?: string\n integrity?: string\n resolved?: string\n dev?: boolean\n optional?: boolean\n }[]\n lockfile: LockfileData\n projectInfo: {\n root: string\n homedirRelativeRoot: string\n tools?: string[]\n vltInstalled?: boolean\n }\n securityArchive?: any\n}\n\nexport const load = (transfered: TransferData): LoadResult => {\n const [mainImporter] = transfered.importers\n const maybeGraph: MaybeGraphLike = {\n importers: new Set<NodeLike>(),\n edges: new Set<EdgeLike>(),\n nodes: new Map<DepID, NodeLike>(),\n nodesByName: new Map<string, Set<NodeLike>>(),\n projectRoot: transfered.projectInfo.root,\n addEdge(\n type: DependencyTypeShort,\n spec: Spec,\n from: NodeLike,\n to?: NodeLike,\n ) {\n const existing = from.edgesOut.get(spec.name)\n if (existing) {\n const edge = existing\n if (\n edge.type === type &&\n edge.spec.bareSpec === spec.bareSpec\n ) {\n if (to && to !== edge.to) {\n edge.to = to\n edge.to.edgesIn.add(edge)\n }\n return edge\n }\n this.edges.delete(edge)\n }\n const edge: EdgeLike = {\n from,\n name: spec.name,\n spec,\n to,\n type,\n }\n from.edgesOut.set(spec.name, edge)\n to?.edgesIn.add(edge)\n this.edges.add(edge)\n return edge\n },\n addNode(id?: DepID, manifest?: NormalizedManifest) {\n const graph = this as GraphLike\n if (!id) throw error('id is required', { manifest })\n if (!manifest) throw error('manifest is required')\n const node: NodeLike = {\n id,\n name: manifest.name,\n version: manifest.version,\n manifest,\n edgesIn: new Set(),\n edgesOut: new Map(),\n workspaces: undefined,\n graph,\n importer: false,\n mainImporter: false,\n projectRoot: graph.projectRoot,\n dev: false,\n optional: false,\n options: transfered.lockfile.options,\n confused: false,\n setResolved() {},\n setConfusedManifest(\n fixed: NormalizedManifest,\n confused?: NormalizedManifest,\n ) {\n this.manifest = fixed\n this.rawManifest = confused\n this.confused = true\n },\n maybeSetConfusedManifest() {},\n toJSON() {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n location: this.location,\n importer: this.importer,\n manifest: this.manifest,\n projectRoot: this.projectRoot,\n integrity: this.integrity,\n resolved: this.resolved,\n dev: this.dev,\n optional: this.optional,\n confused: this.confused,\n ...(this.confused ?\n { rawManifest: this.rawManifest }\n : undefined),\n }\n },\n toString() {\n return stringifyNode(this)\n },\n }\n this.nodes.set(node.id, node)\n if (node.name) {\n const allNodesWithThisName =\n this.nodesByName.get(node.name) ?? new Set()\n allNodesWithThisName.add(node)\n this.nodesByName.set(node.name, allNodesWithThisName)\n }\n return node\n },\n }\n\n // configure importer nodes\n for (const importer of transfered.importers) {\n const id = importer.id as DepID\n const graph = maybeGraph\n const node: NodeLike = graph.addNode(id, importer.manifest)\n node.importer = true\n node.mainImporter = importer.id === mainImporter?.id\n node.location = importer.location\n node.integrity = importer.integrity\n node.resolved = importer.resolved\n /* c8 ignore next 2 */\n node.dev = importer.dev ?? false\n node.optional = importer.optional ?? false\n node.confused = false\n node.toJSON = () => ({\n id: node.id,\n name: node.name,\n version: node.version,\n location: node.location,\n importer: node.importer,\n manifest: node.manifest,\n projectRoot: node.projectRoot,\n integrity: node.integrity,\n resolved: node.resolved,\n dev: node.dev,\n optional: node.optional,\n confused: node.confused,\n })\n node.toString = () => stringifyNode(node)\n // should set the main importer in the first iteration\n graph.mainImporter ??= node\n graph.importers.add(node)\n }\n\n // populate nodes and edges from loaded data\n const graph = maybeGraph as GraphLike\n const specOptions = loadSpecOptions(transfered.lockfile)\n\n loadNodes(graph, transfered.lockfile.nodes, specOptions, graph)\n loadEdges(graph, transfered.lockfile.edges, specOptions)\n\n const securityArchive = SecurityArchive.load(\n transfered.securityArchive,\n )\n\n // validates that all nodes have a security archive entry\n if (securityArchive) {\n securityArchive.ok = true\n for (const node of graph.nodes.values()) {\n if (!securityArchive.has(node.id)) {\n securityArchive.ok = false\n break\n }\n }\n }\n\n return {\n graph,\n specOptions,\n securityArchive,\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAUvE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,SAAS,YACX,gBAAgB,WAChB,8BAA8B;;;;;;EA+DxC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,OAAyB,EACzB,MAAuC,EACvC,EAAE;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IAEpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC;YAC7B,GAAG,OAAO;YACV,MAAM;YACN,YAAY;YACZ,aAAa,EAAE,IAAI;YACnB,OAAO;SACR,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,UAAU,CAAC;YACrB,GAAG,OAAO;YACV,YAAY;YACZ,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,oEAAoE;QACpE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,8DAA8D;YAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACnC,MAAM,wBAAwB;YAC5B,oBAAoB;YACpB,MAAM,EAAE,oBAAoB,CAAC,CAAC;gBAC5B,iBAAiB,CAAC;oBAChB,GAAG,OAAO;oBACV,MAAM;oBACN,KAAK;iBACN,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAA;YACb,wBAAwB,EAAE,EAAE,CAAA;YAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;YACvB,GAAG,OAAO;YACV,MAAM;YACN,MAAM,EAAE,GAAG;YACX,KAAK;YACL,aAAa,EAAE,IAAI;YACnB,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACtB,qBAAqB;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACxC,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,OAAO,CAC5B,OAAO,CAAC,WAAW,EACnB,6BAA6B,CAC9B,CAAA;YACD,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,GAAG,CAAA;IACX,CAAC;IACD,oBAAoB;AACtB,CAAC,CAAA","sourcesContent":["import type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { LoadOptions } from './actual/load.ts'\nimport { load as actualLoad } from './actual/load.ts'\nimport type { RemoveImportersDependenciesMap } from './dependencies.ts'\nimport { GraphModifier } from './modifiers.ts'\nimport { build as idealBuild } from './ideal/build.ts'\nimport { reify } from './reify/index.ts'\nimport { lockfile } from './index.ts'\nimport { updatePackageJson } from './reify/update-importers-package-json.ts'\nimport { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { existsSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nexport type UninstallOptions = LoadOptions & {\n packageInfo: PackageInfoClient\n allowScripts: string\n}\n\nexport const uninstall = async (\n options: UninstallOptions,\n remove?: RemoveImportersDependenciesMap,\n) => {\n const mainManifest = options.packageJson.read(options.projectRoot)\n const modifiers = GraphModifier.maybeLoad(options)\n const remover = new RollbackRemove()\n\n try {\n const graph = await idealBuild({\n ...options,\n remove,\n mainManifest,\n loadManifests: true,\n remover,\n })\n const act = actualLoad({\n ...options,\n mainManifest,\n loadManifests: true,\n })\n\n // If lockfileOnly is enabled, skip reify and only save the lockfile\n if (options.lockfileOnly) {\n // Save only the main lockfile, skip all filesystem operations\n lockfile.save({ graph, modifiers })\n const saveImportersPackageJson =\n /* c8 ignore next */\n remove?.modifiedDependencies ?\n updatePackageJson({\n ...options,\n remove,\n graph,\n })\n : undefined\n saveImportersPackageJson?.()\n return { graph, diff: undefined }\n }\n\n const diff = await reify({\n ...options,\n remove,\n actual: act,\n graph,\n loadManifests: true,\n remover,\n })\n\n return { graph, diff }\n /* c8 ignore start */\n } catch (err) {\n await remover.rollback().catch(() => {})\n // Remove hidden lockfile on failure\n try {\n const hiddenLockfile = resolve(\n options.projectRoot,\n 'node_modules/.vlt-lock.json',\n )\n if (existsSync(hiddenLockfile)) {\n rmSync(hiddenLockfile, { force: true })\n }\n } catch {}\n throw err\n }\n /* c8 ignore stop */\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMlC,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACxC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,MAAM,YAAmB,aAAa;;;;EAgElD,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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","sourcesContent":["import { load as actualLoad } from './actual/load.ts'\nimport { buildIdealFromStartingGraph } from './ideal/build-ideal-from-starting-graph.ts'\nimport { reify } from './reify/index.ts'\nimport { GraphModifier } from './modifiers.ts'\nimport { init } from '@vltpkg/init'\nimport { asError } from '@vltpkg/types'\nimport type { NormalizedManifest } from '@vltpkg/types'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { LoadOptions } from './actual/load.ts'\nimport { Graph } from './graph.ts'\nimport { graphStep } from '@vltpkg/output'\nimport { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { existsSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nexport type UpdateOptions = LoadOptions & {\n packageInfo: PackageInfoClient\n allowScripts: string\n}\n\nexport const update = async (options: UpdateOptions) => {\n let mainManifest: NormalizedManifest | undefined = undefined\n try {\n mainManifest = options.packageJson.read(options.projectRoot)\n } catch (err) {\n if (asError(err).message === 'Could not read package.json file') {\n await init({ cwd: options.projectRoot })\n mainManifest = options.packageJson.read(options.projectRoot, {\n reload: true,\n })\n } else {\n throw err\n }\n }\n\n const modifiers = GraphModifier.maybeLoad(options)\n const remover = new RollbackRemove()\n\n try {\n const done = graphStep('build')\n const graph = await buildIdealFromStartingGraph({\n ...options,\n add: Object.assign(new Map(), { modifiedDependencies: false }),\n remove: Object.assign(new Map(), {\n modifiedDependencies: false,\n }),\n graph: new Graph({ ...options, mainManifest }),\n modifiers,\n remover,\n })\n done()\n\n const act = actualLoad({\n ...options,\n mainManifest,\n loadManifests: true,\n })\n\n const { buildQueue, diff } = await reify({\n ...options,\n actual: act,\n graph,\n loadManifests: true,\n modifiers,\n remover,\n })\n\n return { buildQueue, graph, diff }\n /* c8 ignore start */\n } catch (err) {\n await remover.rollback().catch(() => {})\n // Remove hidden lockfile on failure\n try {\n const hiddenLockfile = resolve(\n options.projectRoot,\n 'node_modules/.vlt-lock.json',\n )\n if (existsSync(hiddenLockfile)) {\n rmSync(hiddenLockfile, { force: true })\n }\n } catch {}\n throw err\n }\n /* c8 ignore stop */\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-root.d.ts","sourceRoot":"","sources":["../src/virtual-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAY,QAAQ,EAAa,MAAM,eAAe,CAAA;AAElE;;GAEG;AACH,eAAO,MAAM,eAAe,wCAG1B,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,sCAEnB,WAAW,iBACL,QAAQ,EAAE,KACxB,QAAQ,GAAG,SA8Db,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-root.js","sourceRoot":"","sources":["../src/virtual-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAIvD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;IAC5C,MAAM;IACN,kBAAkB;CACnB,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAI,GAAG,cAAc,EACrB,OAAoB,EACpB,aAAyB,EACH,EAAE;IACxB,MAAM,GAAG,GAAG;QACV,EAAE,EAAE,eAAe;QACnB,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE;YACR,IAAI;YACJ,OAAO,EAAE,OAAO;SACjB;QACD,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI,GAAG,CAAmB,EAAE,CAAC;QACvC,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAe;QAC5C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,KAAK;QACf,OAAO;QACP,mBAAmB,KAAI,CAAC;QACxB,WAAW,KAAI,CAAC;QAChB,wBAAwB,KAAI,CAAC;QAC7B,UAAU,EAAE,SAAS;QACrB,MAAM;YACJ,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;aAChB,CAAA;QACH,CAAC;KACiB,CAAA;IAEpB,mBAAmB;IACnB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAA;IAE9C,6CAA6C;IAC7C,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAA;QACzC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;YAChD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,GAAG;gBACT,EAAE,EAAE,QAAQ;gBACZ,IAAI;gBACJ,IAAI,EAAE,MAAM;aACM,CAAA;YACpB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA","sourcesContent":["import { Spec } from '@vltpkg/spec/browser'\nimport { joinDepIDTuple } from '@vltpkg/dep-id/browser'\nimport type { SpecOptions } from '@vltpkg/spec/browser'\nimport type { EdgeLike, NodeLike, GraphLike } from '@vltpkg/types'\n\n/**\n * An unique DepID to identify the virtual root node.\n */\nexport const VIRTUAL_ROOT_ID = joinDepIDTuple([\n 'file',\n '__virtual%root__',\n])\n\n/**\n * A virtual root used to aggregate multiple importers into a single graph.\n *\n * This is meant to be used with visual tools that want a single root node\n * starting point to represent the graph.\n *\n * Returns undefined if a virtual root is not needed.\n */\nexport const createVirtualRoot = (\n name = 'virtual-root',\n options: SpecOptions,\n mainImporters: NodeLike[],\n): NodeLike | undefined => {\n const res = {\n id: VIRTUAL_ROOT_ID,\n name,\n version: '1.0.0',\n manifest: {\n name,\n version: '1.0.0',\n },\n edgesIn: new Set(),\n edgesOut: new Map<string, EdgeLike>([]),\n confused: false,\n importer: true,\n mainImporter: true,\n location: '.',\n graph: { importers: new Set() } as GraphLike,\n projectRoot: '',\n dev: false,\n optional: false,\n options,\n setConfusedManifest() {},\n setResolved() {},\n maybeSetConfusedManifest() {},\n workspaces: undefined,\n toJSON() {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n location: this.location,\n importer: this.importer,\n manifest: this.manifest,\n projectRoot: this.projectRoot,\n integrity: this.integrity,\n resolved: this.resolved,\n dev: this.dev,\n optional: this.optional,\n confused: false,\n }\n },\n } satisfies NodeLike\n\n // @ts-expect-error\n res[Symbol.toStringTag] = '@vltpkg/graph.Node'\n\n // link all mainImporters to the virtual root\n for (const importer of mainImporters) {\n const name = importer.name || '(unknown)'\n if (importer.mainImporter) {\n const spec = Spec.parse(name, 'file:.', options)\n const edge = {\n name: spec.name,\n from: res,\n to: importer,\n spec,\n type: 'prod',\n } satisfies EdgeLike\n res.edgesOut.set(name, edge)\n importer.edgesIn.add(edge)\n }\n }\n return res\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-readable-output.d.ts","sourceRoot":"","sources":["../../src/visualization/human-readable-output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAkBvD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAA;AAEzD,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,SAAS,EAAE,OAAO,CAAC,CAAA;AAoExD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,wBAAwB,EACjC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,UA4HjC"}