@vltpkg/query 1.0.0-rc.9 → 1.0.1

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 (463) hide show
  1. package/dist/{esm/attribute.d.ts → attribute.d.ts} +0 -1
  2. package/dist/{esm/attribute.js → attribute.js} +0 -1
  3. package/dist/{esm/combinator.d.ts → combinator.d.ts} +0 -1
  4. package/dist/{esm/combinator.js → combinator.js} +0 -1
  5. package/dist/{esm/id.d.ts → id.d.ts} +0 -1
  6. package/dist/{esm/id.js → id.js} +0 -1
  7. package/dist/{esm/index.d.ts → index.d.ts} +3 -3
  8. package/dist/{esm/index.js → index.js} +14 -8
  9. package/dist/{esm/parser.d.ts → parser.d.ts} +0 -1
  10. package/dist/{esm/parser.js → parser.js} +2 -2
  11. package/dist/{esm/pseudo → pseudo}/abandoned.d.ts +0 -1
  12. package/dist/{esm/pseudo → pseudo}/abandoned.js +0 -1
  13. package/dist/{esm/pseudo → pseudo}/attr.d.ts +0 -1
  14. package/dist/{esm/pseudo → pseudo}/attr.js +0 -1
  15. package/dist/{esm/pseudo → pseudo}/built.d.ts +0 -1
  16. package/dist/{esm/pseudo → pseudo}/built.js +0 -1
  17. package/dist/{esm/pseudo → pseudo}/confused.d.ts +0 -1
  18. package/dist/{esm/pseudo → pseudo}/confused.js +0 -1
  19. package/dist/{esm/pseudo → pseudo}/cve.d.ts +6 -3
  20. package/dist/pseudo/cve.js +61 -0
  21. package/dist/{esm/pseudo → pseudo}/cwe.d.ts +6 -3
  22. package/dist/pseudo/cwe.js +61 -0
  23. package/dist/{esm/pseudo → pseudo}/debug.d.ts +0 -1
  24. package/dist/{esm/pseudo → pseudo}/debug.js +0 -1
  25. package/dist/{esm/pseudo → pseudo}/deprecated.d.ts +0 -1
  26. package/dist/{esm/pseudo → pseudo}/deprecated.js +0 -1
  27. package/dist/{esm/pseudo → pseudo}/dev.d.ts +0 -1
  28. package/dist/{esm/pseudo → pseudo}/dev.js +0 -1
  29. package/dist/pseudo/diff.d.ts +26 -0
  30. package/dist/pseudo/diff.js +75 -0
  31. package/dist/pseudo/dist.d.ts +22 -0
  32. package/dist/pseudo/dist.js +110 -0
  33. package/dist/{esm/pseudo → pseudo}/dynamic.d.ts +0 -1
  34. package/dist/{esm/pseudo → pseudo}/dynamic.js +0 -1
  35. package/dist/{esm/pseudo → pseudo}/empty.d.ts +0 -1
  36. package/dist/{esm/pseudo → pseudo}/empty.js +0 -1
  37. package/dist/{esm/pseudo → pseudo}/entropic.d.ts +0 -1
  38. package/dist/{esm/pseudo → pseudo}/entropic.js +0 -1
  39. package/dist/{esm/pseudo → pseudo}/env.d.ts +0 -1
  40. package/dist/{esm/pseudo → pseudo}/env.js +0 -1
  41. package/dist/{esm/pseudo → pseudo}/eval.d.ts +0 -1
  42. package/dist/{esm/pseudo → pseudo}/eval.js +0 -1
  43. package/dist/{esm/pseudo → pseudo}/fs.d.ts +0 -1
  44. package/dist/{esm/pseudo → pseudo}/fs.js +0 -1
  45. package/dist/{esm/pseudo → pseudo}/helpers.d.ts +0 -1
  46. package/dist/{esm/pseudo → pseudo}/helpers.js +1 -2
  47. package/dist/{esm/pseudo → pseudo}/host.d.ts +0 -1
  48. package/dist/{esm/pseudo → pseudo}/host.js +0 -1
  49. package/dist/pseudo/hostname.d.ts +11 -0
  50. package/dist/pseudo/hostname.js +140 -0
  51. package/dist/{esm/pseudo → pseudo}/license.d.ts +0 -1
  52. package/dist/{esm/pseudo → pseudo}/license.js +0 -1
  53. package/dist/{esm/pseudo → pseudo}/link.d.ts +0 -1
  54. package/dist/{esm/pseudo → pseudo}/link.js +0 -1
  55. package/dist/pseudo/malware.d.ts +10 -0
  56. package/dist/pseudo/malware.js +26 -0
  57. package/dist/{esm/pseudo → pseudo}/minified.d.ts +0 -1
  58. package/dist/{esm/pseudo → pseudo}/minified.js +0 -1
  59. package/dist/{esm/pseudo → pseudo}/missing.d.ts +0 -1
  60. package/dist/{esm/pseudo → pseudo}/missing.js +0 -1
  61. package/dist/{esm/pseudo → pseudo}/native.d.ts +0 -1
  62. package/dist/{esm/pseudo → pseudo}/native.js +0 -1
  63. package/dist/{esm/pseudo → pseudo}/network.d.ts +0 -1
  64. package/dist/{esm/pseudo → pseudo}/network.js +0 -1
  65. package/dist/{esm/pseudo → pseudo}/obfuscated.d.ts +0 -1
  66. package/dist/{esm/pseudo → pseudo}/obfuscated.js +0 -1
  67. package/dist/{esm/pseudo → pseudo}/optional.d.ts +0 -1
  68. package/dist/{esm/pseudo → pseudo}/optional.js +0 -1
  69. package/dist/{esm/pseudo → pseudo}/outdated.d.ts +0 -1
  70. package/dist/{esm/pseudo → pseudo}/outdated.js +0 -1
  71. package/dist/{esm/pseudo → pseudo}/overridden.d.ts +0 -1
  72. package/dist/{esm/pseudo → pseudo}/overridden.js +0 -1
  73. package/dist/{esm/pseudo → pseudo}/path.d.ts +0 -1
  74. package/dist/{esm/pseudo → pseudo}/path.js +1 -4
  75. package/dist/{esm/pseudo → pseudo}/peer.d.ts +0 -1
  76. package/dist/{esm/pseudo → pseudo}/peer.js +0 -1
  77. package/dist/{esm/pseudo → pseudo}/prerelease.d.ts +0 -1
  78. package/dist/{esm/pseudo → pseudo}/prerelease.js +0 -1
  79. package/dist/{esm/pseudo → pseudo}/private.d.ts +0 -1
  80. package/dist/{esm/pseudo → pseudo}/private.js +0 -1
  81. package/dist/{esm/pseudo → pseudo}/prod.d.ts +0 -1
  82. package/dist/{esm/pseudo → pseudo}/prod.js +0 -1
  83. package/dist/{esm/pseudo → pseudo}/published.d.ts +0 -1
  84. package/dist/{esm/pseudo → pseudo}/published.js +0 -1
  85. package/dist/pseudo/registry.d.ts +10 -0
  86. package/dist/pseudo/registry.js +24 -0
  87. package/dist/{esm/pseudo → pseudo}/root.d.ts +0 -1
  88. package/dist/{esm/pseudo → pseudo}/root.js +0 -1
  89. package/dist/{esm/pseudo → pseudo}/scanned.d.ts +0 -1
  90. package/dist/{esm/pseudo → pseudo}/scanned.js +0 -1
  91. package/dist/{esm/pseudo → pseudo}/score.d.ts +0 -1
  92. package/dist/{esm/pseudo → pseudo}/score.js +0 -1
  93. package/dist/{esm/pseudo → pseudo}/scripts.d.ts +0 -1
  94. package/dist/{esm/pseudo → pseudo}/scripts.js +1 -2
  95. package/dist/{esm/pseudo → pseudo}/semver.d.ts +3 -2
  96. package/dist/{esm/pseudo → pseudo}/semver.js +43 -7
  97. package/dist/{esm/pseudo → pseudo}/severity.d.ts +0 -1
  98. package/dist/{esm/pseudo → pseudo}/severity.js +0 -1
  99. package/dist/{esm/pseudo → pseudo}/shell.d.ts +0 -1
  100. package/dist/{esm/pseudo → pseudo}/shell.js +0 -1
  101. package/dist/{esm/pseudo → pseudo}/shrinkwrap.d.ts +0 -1
  102. package/dist/{esm/pseudo → pseudo}/shrinkwrap.js +0 -1
  103. package/dist/{esm/pseudo → pseudo}/spec.d.ts +0 -1
  104. package/dist/{esm/pseudo → pseudo}/spec.js +0 -1
  105. package/dist/{esm/pseudo → pseudo}/squat.d.ts +0 -1
  106. package/dist/{esm/pseudo → pseudo}/squat.js +0 -1
  107. package/dist/{esm/pseudo → pseudo}/suspicious.d.ts +0 -1
  108. package/dist/{esm/pseudo → pseudo}/suspicious.js +0 -1
  109. package/dist/{esm/pseudo → pseudo}/tracker.d.ts +0 -1
  110. package/dist/{esm/pseudo → pseudo}/tracker.js +0 -1
  111. package/dist/{esm/pseudo → pseudo}/trivial.d.ts +0 -1
  112. package/dist/{esm/pseudo → pseudo}/trivial.js +0 -1
  113. package/dist/{esm/pseudo → pseudo}/type.d.ts +0 -1
  114. package/dist/{esm/pseudo → pseudo}/type.js +0 -1
  115. package/dist/{esm/pseudo → pseudo}/undesirable.d.ts +0 -1
  116. package/dist/{esm/pseudo → pseudo}/undesirable.js +0 -1
  117. package/dist/{esm/pseudo → pseudo}/unknown.d.ts +0 -1
  118. package/dist/{esm/pseudo → pseudo}/unknown.js +0 -1
  119. package/dist/{esm/pseudo → pseudo}/unmaintained.d.ts +0 -1
  120. package/dist/{esm/pseudo → pseudo}/unmaintained.js +0 -1
  121. package/dist/{esm/pseudo → pseudo}/unpopular.d.ts +0 -1
  122. package/dist/{esm/pseudo → pseudo}/unpopular.js +0 -1
  123. package/dist/{esm/pseudo → pseudo}/unstable.d.ts +0 -1
  124. package/dist/{esm/pseudo → pseudo}/unstable.js +0 -1
  125. package/dist/pseudo/vuln.d.ts +22 -0
  126. package/dist/pseudo/vuln.js +220 -0
  127. package/dist/{esm/pseudo → pseudo}/workspace.d.ts +0 -1
  128. package/dist/{esm/pseudo → pseudo}/workspace.js +0 -1
  129. package/dist/{esm/pseudo.d.ts → pseudo.d.ts} +0 -1
  130. package/dist/{esm/pseudo.js → pseudo.js} +16 -1
  131. package/dist/{esm/types.d.ts → types.d.ts} +10 -3
  132. package/dist/types.js +1 -0
  133. package/package.json +46 -47
  134. package/skills/dss-query/REFERENCE.md +123 -0
  135. package/skills/dss-query/SKILL.md +190 -0
  136. package/skills/dss-query/evals/README.md +79 -0
  137. package/skills/dss-query/evals/evals.json +89 -0
  138. package/skills/dss-query/evals/grade.mjs +480 -0
  139. package/src/attribute.ts +186 -0
  140. package/src/combinator.ts +132 -0
  141. package/src/id.ts +46 -0
  142. package/src/index.ts +620 -0
  143. package/src/parser.ts +122 -0
  144. package/src/pseudo/abandoned.ts +9 -0
  145. package/src/pseudo/attr.ts +92 -0
  146. package/src/pseudo/built.ts +19 -0
  147. package/src/pseudo/confused.ts +29 -0
  148. package/src/pseudo/cve.ts +93 -0
  149. package/src/pseudo/cwe.ts +97 -0
  150. package/src/pseudo/debug.ts +9 -0
  151. package/src/pseudo/deprecated.ts +9 -0
  152. package/src/pseudo/dev.ts +18 -0
  153. package/src/pseudo/diff.ts +90 -0
  154. package/src/pseudo/dist.ts +144 -0
  155. package/src/pseudo/dynamic.ts +9 -0
  156. package/src/pseudo/empty.ts +15 -0
  157. package/src/pseudo/entropic.ts +9 -0
  158. package/src/pseudo/env.ts +6 -0
  159. package/src/pseudo/eval.ts +9 -0
  160. package/src/pseudo/fs.ts +9 -0
  161. package/src/pseudo/helpers.ts +106 -0
  162. package/src/pseudo/host.ts +111 -0
  163. package/src/pseudo/hostname.ts +156 -0
  164. package/src/pseudo/license.ts +134 -0
  165. package/src/pseudo/link.ts +30 -0
  166. package/src/pseudo/malware.ts +41 -0
  167. package/src/pseudo/minified.ts +9 -0
  168. package/src/pseudo/missing.ts +16 -0
  169. package/src/pseudo/native.ts +9 -0
  170. package/src/pseudo/network.ts +9 -0
  171. package/src/pseudo/obfuscated.ts +9 -0
  172. package/src/pseudo/optional.ts +18 -0
  173. package/src/pseudo/outdated.ts +305 -0
  174. package/src/pseudo/overridden.ts +20 -0
  175. package/src/pseudo/path.ts +146 -0
  176. package/src/pseudo/peer.ts +18 -0
  177. package/src/pseudo/prerelease.ts +47 -0
  178. package/src/pseudo/private.ts +19 -0
  179. package/src/pseudo/prod.ts +18 -0
  180. package/src/pseudo/published.ts +248 -0
  181. package/src/pseudo/registry.ts +29 -0
  182. package/src/pseudo/root.ts +19 -0
  183. package/src/pseudo/scanned.ts +20 -0
  184. package/src/pseudo/score.ts +186 -0
  185. package/src/pseudo/scripts.ts +54 -0
  186. package/src/pseudo/semver.ts +320 -0
  187. package/src/pseudo/severity.ts +231 -0
  188. package/src/pseudo/shell.ts +9 -0
  189. package/src/pseudo/shrinkwrap.ts +9 -0
  190. package/src/pseudo/spec.ts +131 -0
  191. package/src/pseudo/squat.ts +225 -0
  192. package/src/pseudo/suspicious.ts +9 -0
  193. package/src/pseudo/tracker.ts +9 -0
  194. package/src/pseudo/trivial.ts +9 -0
  195. package/src/pseudo/type.ts +26 -0
  196. package/src/pseudo/undesirable.ts +9 -0
  197. package/src/pseudo/unknown.ts +9 -0
  198. package/src/pseudo/unmaintained.ts +9 -0
  199. package/src/pseudo/unpopular.ts +9 -0
  200. package/src/pseudo/unstable.ts +9 -0
  201. package/src/pseudo/vuln.ts +273 -0
  202. package/src/pseudo/workspace.ts +22 -0
  203. package/src/pseudo.ts +413 -0
  204. package/src/types.ts +165 -0
  205. package/tap-snapshots/test/attribute.ts.test.cjs +304 -0
  206. package/tap-snapshots/test/combinator.ts.test.cjs +333 -0
  207. package/tap-snapshots/test/id.ts.test.cjs +118 -0
  208. package/tap-snapshots/test/parser.ts.test.cjs +344 -0
  209. package/tap-snapshots/test/pseudo/abandoned.ts.test.cjs +18 -0
  210. package/tap-snapshots/test/pseudo/attr.ts.test.cjs +161 -0
  211. package/tap-snapshots/test/pseudo/built.ts.test.cjs +70 -0
  212. package/tap-snapshots/test/pseudo/confused.ts.test.cjs +32 -0
  213. package/tap-snapshots/test/pseudo/cve.ts.test.cjs +49 -0
  214. package/tap-snapshots/test/pseudo/cwe.ts.test.cjs +49 -0
  215. package/tap-snapshots/test/pseudo/debug.ts.test.cjs +18 -0
  216. package/tap-snapshots/test/pseudo/deprecated.ts.test.cjs +18 -0
  217. package/tap-snapshots/test/pseudo/dist.ts.test.cjs +30 -0
  218. package/tap-snapshots/test/pseudo/dynamic.ts.test.cjs +18 -0
  219. package/tap-snapshots/test/pseudo/empty.ts.test.cjs +50 -0
  220. package/tap-snapshots/test/pseudo/entropic.ts.test.cjs +18 -0
  221. package/tap-snapshots/test/pseudo/env.ts.test.cjs +18 -0
  222. package/tap-snapshots/test/pseudo/eval.ts.test.cjs +18 -0
  223. package/tap-snapshots/test/pseudo/fs.ts.test.cjs +18 -0
  224. package/tap-snapshots/test/pseudo/helpers.ts.test.cjs +18 -0
  225. package/tap-snapshots/test/pseudo/hostname.ts.test.cjs +148 -0
  226. package/tap-snapshots/test/pseudo/license.ts.test.cjs +41 -0
  227. package/tap-snapshots/test/pseudo/link.ts.test.cjs +36 -0
  228. package/tap-snapshots/test/pseudo/malware.ts.test.cjs +22 -0
  229. package/tap-snapshots/test/pseudo/minified.ts.test.cjs +18 -0
  230. package/tap-snapshots/test/pseudo/missing.ts.test.cjs +30 -0
  231. package/tap-snapshots/test/pseudo/native.ts.test.cjs +18 -0
  232. package/tap-snapshots/test/pseudo/network.ts.test.cjs +18 -0
  233. package/tap-snapshots/test/pseudo/obfuscated.ts.test.cjs +18 -0
  234. package/tap-snapshots/test/pseudo/outdated.ts.test.cjs +130 -0
  235. package/tap-snapshots/test/pseudo/overridden.ts.test.cjs +75 -0
  236. package/tap-snapshots/test/pseudo/prerelease.ts.test.cjs +101 -0
  237. package/tap-snapshots/test/pseudo/private.ts.test.cjs +38 -0
  238. package/tap-snapshots/test/pseudo/published.ts.test.cjs +171 -0
  239. package/tap-snapshots/test/pseudo/registry.ts.test.cjs +68 -0
  240. package/tap-snapshots/test/pseudo/root.ts.test.cjs +24 -0
  241. package/tap-snapshots/test/pseudo/scanned.ts.test.cjs +18 -0
  242. package/tap-snapshots/test/pseudo/score.ts.test.cjs +239 -0
  243. package/tap-snapshots/test/pseudo/scripts.ts.test.cjs +61 -0
  244. package/tap-snapshots/test/pseudo/semver.ts.test.cjs +575 -0
  245. package/tap-snapshots/test/pseudo/severity.ts.test.cjs +95 -0
  246. package/tap-snapshots/test/pseudo/shell.ts.test.cjs +18 -0
  247. package/tap-snapshots/test/pseudo/shrinkwrap.ts.test.cjs +18 -0
  248. package/tap-snapshots/test/pseudo/spec.ts.test.cjs +148 -0
  249. package/tap-snapshots/test/pseudo/squat.ts.test.cjs +129 -0
  250. package/tap-snapshots/test/pseudo/suspicious.ts.test.cjs +18 -0
  251. package/tap-snapshots/test/pseudo/tracker.ts.test.cjs +18 -0
  252. package/tap-snapshots/test/pseudo/trivial.ts.test.cjs +18 -0
  253. package/tap-snapshots/test/pseudo/type.ts.test.cjs +51 -0
  254. package/tap-snapshots/test/pseudo/undesirable.ts.test.cjs +18 -0
  255. package/tap-snapshots/test/pseudo/unknown.ts.test.cjs +18 -0
  256. package/tap-snapshots/test/pseudo/unmaintained.ts.test.cjs +18 -0
  257. package/tap-snapshots/test/pseudo/unpopular.ts.test.cjs +18 -0
  258. package/tap-snapshots/test/pseudo/unstable.ts.test.cjs +18 -0
  259. package/tap-snapshots/test/pseudo/vuln.ts.test.cjs +208 -0
  260. package/tap-snapshots/test/pseudo/vulnerable.ts.test.cjs +20 -0
  261. package/tap-snapshots/test/pseudo/workspace.ts.test.cjs +19 -0
  262. package/tap-snapshots/test/pseudo.ts.test.cjs +1247 -0
  263. package/test/attribute.ts +266 -0
  264. package/test/combinator.ts +168 -0
  265. package/test/fixtures/graph.ts +999 -0
  266. package/test/fixtures/selector.ts +103 -0
  267. package/test/fixtures/types.ts +7 -0
  268. package/test/id.ts +102 -0
  269. package/test/index.ts +1000 -0
  270. package/test/parser.ts +117 -0
  271. package/test/pseudo/abandoned.ts +98 -0
  272. package/test/pseudo/attr.ts +298 -0
  273. package/test/pseudo/built.ts +214 -0
  274. package/test/pseudo/confused.ts +160 -0
  275. package/test/pseudo/cve.ts +249 -0
  276. package/test/pseudo/cwe.ts +255 -0
  277. package/test/pseudo/debug.ts +98 -0
  278. package/test/pseudo/deprecated.ts +98 -0
  279. package/test/pseudo/dev.ts +61 -0
  280. package/test/pseudo/diff.ts +417 -0
  281. package/test/pseudo/dist.ts +215 -0
  282. package/test/pseudo/dynamic.ts +98 -0
  283. package/test/pseudo/empty.ts +108 -0
  284. package/test/pseudo/entropic.ts +101 -0
  285. package/test/pseudo/env.ts +98 -0
  286. package/test/pseudo/eval.ts +98 -0
  287. package/test/pseudo/fs.ts +98 -0
  288. package/test/pseudo/helpers.ts +370 -0
  289. package/test/pseudo/host-context.ts +276 -0
  290. package/test/pseudo/hostname.ts +314 -0
  291. package/test/pseudo/license.ts +265 -0
  292. package/test/pseudo/link.ts +94 -0
  293. package/test/pseudo/malware.ts +184 -0
  294. package/test/pseudo/minified.ts +98 -0
  295. package/test/pseudo/missing.ts +111 -0
  296. package/test/pseudo/native.ts +98 -0
  297. package/test/pseudo/network.ts +98 -0
  298. package/test/pseudo/obfuscated.ts +98 -0
  299. package/test/pseudo/optional.ts +73 -0
  300. package/test/pseudo/outdated.ts +331 -0
  301. package/test/pseudo/overridden.ts +317 -0
  302. package/test/pseudo/path.ts +680 -0
  303. package/test/pseudo/peer.ts +101 -0
  304. package/test/pseudo/prerelease.ts +279 -0
  305. package/test/pseudo/private.ts +108 -0
  306. package/test/pseudo/prod.ts +61 -0
  307. package/test/pseudo/published.ts +557 -0
  308. package/test/pseudo/registry.ts +122 -0
  309. package/test/pseudo/root.ts +66 -0
  310. package/test/pseudo/scanned.ts +78 -0
  311. package/test/pseudo/score.ts +591 -0
  312. package/test/pseudo/scripts.ts +294 -0
  313. package/test/pseudo/semver.ts +822 -0
  314. package/test/pseudo/severity.ts +310 -0
  315. package/test/pseudo/shell.ts +98 -0
  316. package/test/pseudo/shrinkwrap.ts +98 -0
  317. package/test/pseudo/spec.ts +525 -0
  318. package/test/pseudo/squat.ts +565 -0
  319. package/test/pseudo/suspicious.ts +98 -0
  320. package/test/pseudo/tracker.ts +98 -0
  321. package/test/pseudo/trivial.ts +98 -0
  322. package/test/pseudo/type.ts +105 -0
  323. package/test/pseudo/undesirable.ts +98 -0
  324. package/test/pseudo/unknown.ts +98 -0
  325. package/test/pseudo/unmaintained.ts +98 -0
  326. package/test/pseudo/unpopular.ts +98 -0
  327. package/test/pseudo/unstable.ts +98 -0
  328. package/test/pseudo/vuln.ts +625 -0
  329. package/test/pseudo/vulnerable.ts +137 -0
  330. package/test/pseudo/workspace.ts +111 -0
  331. package/test/pseudo.ts +558 -0
  332. package/tsconfig.json +3 -0
  333. package/tsconfig.publish.json +19 -0
  334. package/tsconfig.publish.tsbuildinfo +1 -0
  335. package/typedoc.mjs +2 -0
  336. package/dist/esm/attribute.d.ts.map +0 -1
  337. package/dist/esm/attribute.js.map +0 -1
  338. package/dist/esm/combinator.d.ts.map +0 -1
  339. package/dist/esm/combinator.js.map +0 -1
  340. package/dist/esm/id.d.ts.map +0 -1
  341. package/dist/esm/id.js.map +0 -1
  342. package/dist/esm/index.d.ts.map +0 -1
  343. package/dist/esm/index.js.map +0 -1
  344. package/dist/esm/package.json +0 -3
  345. package/dist/esm/parser.d.ts.map +0 -1
  346. package/dist/esm/parser.js.map +0 -1
  347. package/dist/esm/pseudo/abandoned.d.ts.map +0 -1
  348. package/dist/esm/pseudo/abandoned.js.map +0 -1
  349. package/dist/esm/pseudo/attr.d.ts.map +0 -1
  350. package/dist/esm/pseudo/attr.js.map +0 -1
  351. package/dist/esm/pseudo/built.d.ts.map +0 -1
  352. package/dist/esm/pseudo/built.js.map +0 -1
  353. package/dist/esm/pseudo/confused.d.ts.map +0 -1
  354. package/dist/esm/pseudo/confused.js.map +0 -1
  355. package/dist/esm/pseudo/cve.d.ts.map +0 -1
  356. package/dist/esm/pseudo/cve.js +0 -44
  357. package/dist/esm/pseudo/cve.js.map +0 -1
  358. package/dist/esm/pseudo/cwe.d.ts.map +0 -1
  359. package/dist/esm/pseudo/cwe.js +0 -43
  360. package/dist/esm/pseudo/cwe.js.map +0 -1
  361. package/dist/esm/pseudo/debug.d.ts.map +0 -1
  362. package/dist/esm/pseudo/debug.js.map +0 -1
  363. package/dist/esm/pseudo/deprecated.d.ts.map +0 -1
  364. package/dist/esm/pseudo/deprecated.js.map +0 -1
  365. package/dist/esm/pseudo/dev.d.ts.map +0 -1
  366. package/dist/esm/pseudo/dev.js.map +0 -1
  367. package/dist/esm/pseudo/dynamic.d.ts.map +0 -1
  368. package/dist/esm/pseudo/dynamic.js.map +0 -1
  369. package/dist/esm/pseudo/empty.d.ts.map +0 -1
  370. package/dist/esm/pseudo/empty.js.map +0 -1
  371. package/dist/esm/pseudo/entropic.d.ts.map +0 -1
  372. package/dist/esm/pseudo/entropic.js.map +0 -1
  373. package/dist/esm/pseudo/env.d.ts.map +0 -1
  374. package/dist/esm/pseudo/env.js.map +0 -1
  375. package/dist/esm/pseudo/eval.d.ts.map +0 -1
  376. package/dist/esm/pseudo/eval.js.map +0 -1
  377. package/dist/esm/pseudo/fs.d.ts.map +0 -1
  378. package/dist/esm/pseudo/fs.js.map +0 -1
  379. package/dist/esm/pseudo/helpers.d.ts.map +0 -1
  380. package/dist/esm/pseudo/helpers.js.map +0 -1
  381. package/dist/esm/pseudo/host.d.ts.map +0 -1
  382. package/dist/esm/pseudo/host.js.map +0 -1
  383. package/dist/esm/pseudo/license.d.ts.map +0 -1
  384. package/dist/esm/pseudo/license.js.map +0 -1
  385. package/dist/esm/pseudo/link.d.ts.map +0 -1
  386. package/dist/esm/pseudo/link.js.map +0 -1
  387. package/dist/esm/pseudo/malware.d.ts +0 -24
  388. package/dist/esm/pseudo/malware.d.ts.map +0 -1
  389. package/dist/esm/pseudo/malware.js +0 -187
  390. package/dist/esm/pseudo/malware.js.map +0 -1
  391. package/dist/esm/pseudo/minified.d.ts.map +0 -1
  392. package/dist/esm/pseudo/minified.js.map +0 -1
  393. package/dist/esm/pseudo/missing.d.ts.map +0 -1
  394. package/dist/esm/pseudo/missing.js.map +0 -1
  395. package/dist/esm/pseudo/native.d.ts.map +0 -1
  396. package/dist/esm/pseudo/native.js.map +0 -1
  397. package/dist/esm/pseudo/network.d.ts.map +0 -1
  398. package/dist/esm/pseudo/network.js.map +0 -1
  399. package/dist/esm/pseudo/obfuscated.d.ts.map +0 -1
  400. package/dist/esm/pseudo/obfuscated.js.map +0 -1
  401. package/dist/esm/pseudo/optional.d.ts.map +0 -1
  402. package/dist/esm/pseudo/optional.js.map +0 -1
  403. package/dist/esm/pseudo/outdated.d.ts.map +0 -1
  404. package/dist/esm/pseudo/outdated.js.map +0 -1
  405. package/dist/esm/pseudo/overridden.d.ts.map +0 -1
  406. package/dist/esm/pseudo/overridden.js.map +0 -1
  407. package/dist/esm/pseudo/path.d.ts.map +0 -1
  408. package/dist/esm/pseudo/path.js.map +0 -1
  409. package/dist/esm/pseudo/peer.d.ts.map +0 -1
  410. package/dist/esm/pseudo/peer.js.map +0 -1
  411. package/dist/esm/pseudo/prerelease.d.ts.map +0 -1
  412. package/dist/esm/pseudo/prerelease.js.map +0 -1
  413. package/dist/esm/pseudo/private.d.ts.map +0 -1
  414. package/dist/esm/pseudo/private.js.map +0 -1
  415. package/dist/esm/pseudo/prod.d.ts.map +0 -1
  416. package/dist/esm/pseudo/prod.js.map +0 -1
  417. package/dist/esm/pseudo/published.d.ts.map +0 -1
  418. package/dist/esm/pseudo/published.js.map +0 -1
  419. package/dist/esm/pseudo/root.d.ts.map +0 -1
  420. package/dist/esm/pseudo/root.js.map +0 -1
  421. package/dist/esm/pseudo/scanned.d.ts.map +0 -1
  422. package/dist/esm/pseudo/scanned.js.map +0 -1
  423. package/dist/esm/pseudo/score.d.ts.map +0 -1
  424. package/dist/esm/pseudo/score.js.map +0 -1
  425. package/dist/esm/pseudo/scripts.d.ts.map +0 -1
  426. package/dist/esm/pseudo/scripts.js.map +0 -1
  427. package/dist/esm/pseudo/semver.d.ts.map +0 -1
  428. package/dist/esm/pseudo/semver.js.map +0 -1
  429. package/dist/esm/pseudo/severity.d.ts.map +0 -1
  430. package/dist/esm/pseudo/severity.js.map +0 -1
  431. package/dist/esm/pseudo/shell.d.ts.map +0 -1
  432. package/dist/esm/pseudo/shell.js.map +0 -1
  433. package/dist/esm/pseudo/shrinkwrap.d.ts.map +0 -1
  434. package/dist/esm/pseudo/shrinkwrap.js.map +0 -1
  435. package/dist/esm/pseudo/spec.d.ts.map +0 -1
  436. package/dist/esm/pseudo/spec.js.map +0 -1
  437. package/dist/esm/pseudo/squat.d.ts.map +0 -1
  438. package/dist/esm/pseudo/squat.js.map +0 -1
  439. package/dist/esm/pseudo/suspicious.d.ts.map +0 -1
  440. package/dist/esm/pseudo/suspicious.js.map +0 -1
  441. package/dist/esm/pseudo/tracker.d.ts.map +0 -1
  442. package/dist/esm/pseudo/tracker.js.map +0 -1
  443. package/dist/esm/pseudo/trivial.d.ts.map +0 -1
  444. package/dist/esm/pseudo/trivial.js.map +0 -1
  445. package/dist/esm/pseudo/type.d.ts.map +0 -1
  446. package/dist/esm/pseudo/type.js.map +0 -1
  447. package/dist/esm/pseudo/undesirable.d.ts.map +0 -1
  448. package/dist/esm/pseudo/undesirable.js.map +0 -1
  449. package/dist/esm/pseudo/unknown.d.ts.map +0 -1
  450. package/dist/esm/pseudo/unknown.js.map +0 -1
  451. package/dist/esm/pseudo/unmaintained.d.ts.map +0 -1
  452. package/dist/esm/pseudo/unmaintained.js.map +0 -1
  453. package/dist/esm/pseudo/unpopular.d.ts.map +0 -1
  454. package/dist/esm/pseudo/unpopular.js.map +0 -1
  455. package/dist/esm/pseudo/unstable.d.ts.map +0 -1
  456. package/dist/esm/pseudo/unstable.js.map +0 -1
  457. package/dist/esm/pseudo/workspace.d.ts.map +0 -1
  458. package/dist/esm/pseudo/workspace.js.map +0 -1
  459. package/dist/esm/pseudo.d.ts.map +0 -1
  460. package/dist/esm/pseudo.js.map +0 -1
  461. package/dist/esm/types.d.ts.map +0 -1
  462. package/dist/esm/types.js +0 -2
  463. package/dist/esm/types.js.map +0 -1
@@ -12,4 +12,3 @@ export declare const attributeSelectorsMap: Map<string, ComparatorFn>;
12
12
  * Parse attributes selectors, e.g: `[name]`, `[name=value]`, etc
13
13
  */
14
14
  export declare const attribute: (state: ParserState) => Promise<ParserState>;
15
- //# sourceMappingURL=attribute.d.ts.map
@@ -130,4 +130,3 @@ export const attribute = async (state) => {
130
130
  state.specificity.commonCounter += 1;
131
131
  return filterAttributes(state, operatorFn, value, propertyName, insensitive);
132
132
  };
133
- //# sourceMappingURL=attribute.js.map
@@ -3,4 +3,3 @@ import type { ParserState } from './types.ts';
3
3
  * Parse css-style combinators, e.g: `>`, `~` and ` `
4
4
  */
5
5
  export declare const combinator: (state: ParserState) => Promise<ParserState>;
6
- //# sourceMappingURL=combinator.d.ts.map
@@ -109,4 +109,3 @@ export const combinator = async (state) => {
109
109
  }
110
110
  return parserFn(state);
111
111
  };
112
- //# sourceMappingURL=combinator.js.map
@@ -3,4 +3,3 @@ import type { ParserState } from './types.ts';
3
3
  * Parse ids, e.g: `#foo`
4
4
  */
5
5
  export declare const id: (state: ParserState) => Promise<ParserState>;
6
- //# sourceMappingURL=id.d.ts.map
@@ -33,4 +33,3 @@ export const id = async (state) => {
33
33
  state.specificity.idCounter += 1;
34
34
  return state;
35
35
  };
36
- //# sourceMappingURL=id.js.map
@@ -1,6 +1,6 @@
1
1
  import type { EdgeLike, NodeLike } from '@vltpkg/types';
2
2
  import type { SecurityArchiveLike } from '@vltpkg/security-archive';
3
- import type { HostContextsMap, ParsedSelectorToken, ParserState, QueryResponse } from './types.ts';
3
+ import type { DiffFilesProvider, HostContextsMap, ParsedSelectorToken, ParserState, QueryResponse } from './types.ts';
4
4
  import type { DepID } from '@vltpkg/dep-id';
5
5
  export * from './types.ts';
6
6
  export type SearchOptions = {
@@ -15,6 +15,7 @@ export type QueryOptions = {
15
15
  retries?: number;
16
16
  securityArchive: SecurityArchiveLike | undefined;
17
17
  hostContexts?: HostContextsMap;
18
+ diffFiles?: DiffFilesProvider;
18
19
  };
19
20
  /**
20
21
  * The Query class is used to search the graph for nodes and edges
@@ -35,7 +36,7 @@ export declare class Query {
35
36
  * the original order is preserved.
36
37
  */
37
38
  static specificitySort(responses: QueryResponse[]): QueryResponse[];
38
- constructor({ edges, nodes, importers, retries, securityArchive, hostContexts, }: QueryOptions);
39
+ constructor({ edges, nodes, importers, retries, securityArchive, hostContexts, diffFiles, }: QueryOptions);
39
40
  /**
40
41
  * Search the graph for nodes and edges that match the given query.
41
42
  */
@@ -45,4 +46,3 @@ export declare class Query {
45
46
  */
46
47
  static getQueryTokens(query: string): ParsedSelectorToken[];
47
48
  }
48
- //# sourceMappingURL=index.d.ts.map
@@ -124,6 +124,8 @@ const securitySelectors = new Set([
124
124
  ':unmaintained',
125
125
  ':unpopular',
126
126
  ':unstable',
127
+ ':vuln',
128
+ ':vulnerable',
127
129
  ]);
128
130
  const setMethodToJSON = (node) => {
129
131
  const { toJSON } = node;
@@ -139,6 +141,7 @@ const setMethodToJSON = (node) => {
139
141
  */
140
142
  export class Query {
141
143
  #cache;
144
+ #diffFiles;
142
145
  #edges;
143
146
  #nodes;
144
147
  #importers;
@@ -178,8 +181,9 @@ export class Query {
178
181
  return 0;
179
182
  });
180
183
  }
181
- constructor({ edges, nodes, importers, retries, securityArchive, hostContexts, }) {
184
+ constructor({ edges, nodes, importers, retries, securityArchive, hostContexts, diffFiles, }) {
182
185
  this.#cache = new Map();
186
+ this.#diffFiles = diffFiles;
183
187
  this.#edges = edges;
184
188
  this.#nodes = nodes;
185
189
  this.#importers = importers;
@@ -232,12 +236,7 @@ export class Query {
232
236
  none: securityArchiveEntry.alerts.some(i => i.type === 'noLicenseFound'),
233
237
  exception: securityArchiveEntry.alerts.some(i => i.type === 'licenseException'),
234
238
  },
235
- malware: {
236
- low: securityArchiveEntry.alerts.some(i => i.type === 'gptAnomaly'),
237
- medium: securityArchiveEntry.alerts.some(i => i.type === 'gptSecurity'),
238
- high: securityArchiveEntry.alerts.some(i => i.type === 'gptMalware'),
239
- critical: securityArchiveEntry.alerts.some(i => i.type === 'malware'),
240
- },
239
+ malware: securityArchiveEntry.alerts.some(i => i.type === 'malware' || i.type === 'gptMalware'),
241
240
  minified: securityArchiveEntry.alerts.some(i => i.type === 'minifiedFile'),
242
241
  native: securityArchiveEntry.alerts.some(i => i.type === 'hasNativeCode'),
243
242
  network: securityArchiveEntry.alerts.some(i => i.type === 'networkAccess'),
@@ -263,6 +262,13 @@ export class Query {
263
262
  unmaintained: securityArchiveEntry.alerts.some(i => i.type === 'unmaintained'),
264
263
  unpopular: securityArchiveEntry.alerts.some(i => i.type === 'unpopularPackage'),
265
264
  unstable: securityArchiveEntry.alerts.some(i => i.type === 'unstableOwnership'),
265
+ vuln: {
266
+ low: securityArchiveEntry.alerts.some(i => i.type === 'mildCVE' || i.type === 'gptAnomaly'),
267
+ medium: securityArchiveEntry.alerts.some(i => i.type === 'potentialVulnerability' ||
268
+ i.type === 'gptSecurity'),
269
+ high: securityArchiveEntry.alerts.some(i => i.type === 'cve'),
270
+ critical: securityArchiveEntry.alerts.some(i => i.type === 'criticalCVE'),
271
+ },
266
272
  };
267
273
  setMethodToJSON(node);
268
274
  }
@@ -322,6 +328,7 @@ export class Query {
322
328
  edges: new Set(),
323
329
  },
324
330
  comment: '',
331
+ diffFiles: this.#diffFiles,
325
332
  loose,
326
333
  importers,
327
334
  partial: { nodes, edges },
@@ -405,4 +412,3 @@ export class Query {
405
412
  return tokens;
406
413
  }
407
414
  }
408
- //# sourceMappingURL=index.js.map
@@ -12,4 +12,3 @@ export declare const unescapeDots: (query: string) => string;
12
12
  * Handles escaping of forward slashes in specific patterns
13
13
  */
14
14
  export declare const parse: (query: string) => Root;
15
- //# sourceMappingURL=parser.d.ts.map
@@ -11,12 +11,13 @@ export const unescapeDots = (query) => query.replaceAll('\\.', '.');
11
11
  const pseudoCleanUpNeeded = new Set([
12
12
  ':published',
13
13
  ':score',
14
- ':malware',
15
14
  ':severity',
16
15
  ':sev',
17
16
  ':squat',
18
17
  ':semver',
19
18
  ':v',
19
+ ':vuln',
20
+ ':vulnerable',
20
21
  ':path',
21
22
  ]);
22
23
  const hasParamsToEscape = (node) => pseudoCleanUpNeeded.has(node.value);
@@ -90,4 +91,3 @@ export const parse = (query) => {
90
91
  };
91
92
  return postcssSelectorParser(transformAst).astSync(escapedQuery);
92
93
  };
93
- //# sourceMappingURL=parser.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const abandoned: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=abandoned.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **missingAuthor** report alert.
4
4
  */
5
5
  export const abandoned = createSecuritySelectorFilter('abandoned', 'missingAuthor');
6
- //# sourceMappingURL=abandoned.js.map
@@ -16,4 +16,3 @@ export declare const parseInternals: (nodes: PostcssNode[]) => AttrInternals;
16
16
  * properties of the `package.json` metadata.
17
17
  */
18
18
  export declare const attr: (state: ParserState) => Promise<ParserState>;
19
- //# sourceMappingURL=attr.d.ts.map
@@ -55,4 +55,3 @@ export const attr = async (state) => {
55
55
  const prefixProperties = internals.properties;
56
56
  return filterAttributes(state, comparator, value, propertyName, insensitive, prefixProperties);
57
57
  };
58
- //# sourceMappingURL=attr.js.map
@@ -5,4 +5,3 @@ import type { ParserState } from '../types.ts';
5
5
  * been successfully built during the reify process.
6
6
  */
7
7
  export declare const built: (state: ParserState) => Promise<ParserState>;
8
- //# sourceMappingURL=built.d.ts.map
@@ -13,4 +13,3 @@ export const built = async (state) => {
13
13
  removeDanglingEdges(state);
14
14
  return state;
15
15
  };
16
- //# sourceMappingURL=built.js.map
@@ -6,4 +6,3 @@ import type { ParserState } from '../types.js';
6
6
  export declare const confused: (state: ParserState) => Promise<ParserState & {
7
7
  securityArchive: NonNullable<ParserState["securityArchive"]>;
8
8
  }>;
9
- //# sourceMappingURL=confused.d.ts.map
@@ -16,4 +16,3 @@ export const confused = async (state) => {
16
16
  removeDanglingEdges(state);
17
17
  return state;
18
18
  };
19
- //# sourceMappingURL=confused.js.map
@@ -1,13 +1,16 @@
1
1
  import type { ParserState } from '../types.ts';
2
2
  import type { PostcssNode } from '@vltpkg/dss-parser';
3
3
  export type CveInternals = {
4
- cveId: string;
4
+ cveId: string | undefined;
5
5
  };
6
6
  export declare const parseInternals: (nodes: PostcssNode[]) => CveInternals;
7
7
  /**
8
- * Filters out any node that does not have a CVE alert with the specified CVE ID.
8
+ * Filters out any node that does not have a CVE alert.
9
+ *
10
+ * Usage:
11
+ * - :cve - matches any package with at least one CVE alert
12
+ * - :cve(CVE-2023-1234) - matches only the specific CVE ID
9
13
  */
10
14
  export declare const cve: (state: ParserState) => Promise<ParserState & {
11
15
  securityArchive: NonNullable<ParserState["securityArchive"]>;
12
16
  }>;
13
- //# sourceMappingURL=cve.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { error } from '@vltpkg/error-cause';
2
+ import { asPostcssNodeWithChildren, asStringNode, asTagNode, isStringNode, isTagNode, } from '@vltpkg/dss-parser';
3
+ import { assertSecurityArchive, removeDanglingEdges, removeNode, removeQuotes, } from "./helpers.js";
4
+ export const parseInternals = (nodes) => {
5
+ if (!nodes[0]) {
6
+ return { cveId: undefined };
7
+ }
8
+ const selectorNode = asPostcssNodeWithChildren(nodes[0]);
9
+ if (!selectorNode.nodes[0]) {
10
+ return { cveId: undefined };
11
+ }
12
+ let cveId = '';
13
+ if (isStringNode(selectorNode.nodes[0])) {
14
+ cveId = removeQuotes(asStringNode(selectorNode.nodes[0]).value);
15
+ }
16
+ else if (isTagNode(selectorNode.nodes[0])) {
17
+ cveId = asTagNode(selectorNode.nodes[0]).value;
18
+ }
19
+ /* c8 ignore start - unreachable via normal parser */
20
+ if (!cveId) {
21
+ throw error('Expected a CVE ID', {
22
+ found: selectorNode.nodes[0],
23
+ });
24
+ }
25
+ /* c8 ignore stop */
26
+ return { cveId };
27
+ };
28
+ /**
29
+ * Filters out any node that does not have a CVE alert.
30
+ *
31
+ * Usage:
32
+ * - :cve - matches any package with at least one CVE alert
33
+ * - :cve(CVE-2023-1234) - matches only the specific CVE ID
34
+ */
35
+ export const cve = async (state) => {
36
+ assertSecurityArchive(state, 'cve');
37
+ let internals;
38
+ try {
39
+ internals = parseInternals(asPostcssNodeWithChildren(state.current).nodes);
40
+ }
41
+ catch (err) /* c8 ignore start */ {
42
+ throw error('Failed to parse :cve selector', { cause: err });
43
+ } /* c8 ignore stop */
44
+ const { cveId } = internals;
45
+ for (const node of state.partial.nodes) {
46
+ const report = state.securityArchive.get(node.id);
47
+ let exclude;
48
+ if (cveId === undefined) {
49
+ exclude = !report?.alerts.some(alert => alert.props?.cveId);
50
+ }
51
+ else {
52
+ exclude = !report?.alerts.some(alert => alert.props?.cveId?.trim().toLowerCase() ===
53
+ cveId.trim().toLowerCase());
54
+ }
55
+ if (exclude) {
56
+ removeNode(state, node);
57
+ }
58
+ }
59
+ removeDanglingEdges(state);
60
+ return state;
61
+ };
@@ -1,13 +1,16 @@
1
1
  import type { ParserState } from '../types.ts';
2
2
  import type { PostcssNode } from '@vltpkg/dss-parser';
3
3
  export type CweInternals = {
4
- cweId: string;
4
+ cweId: string | undefined;
5
5
  };
6
6
  export declare const parseInternals: (nodes: PostcssNode[]) => CweInternals;
7
7
  /**
8
- * Filters out any node that does not have a CWE alert with the specified CWE ID.
8
+ * Filters out any node that does not have a CWE alert.
9
+ *
10
+ * Usage:
11
+ * - :cwe - matches any package with at least one CWE alert
12
+ * - :cwe(CWE-79) - matches only the specific CWE ID
9
13
  */
10
14
  export declare const cwe: (state: ParserState) => Promise<ParserState & {
11
15
  securityArchive: NonNullable<ParserState["securityArchive"]>;
12
16
  }>;
13
- //# sourceMappingURL=cwe.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { error } from '@vltpkg/error-cause';
2
+ import { asPostcssNodeWithChildren, asStringNode, asTagNode, isStringNode, isTagNode, } from '@vltpkg/dss-parser';
3
+ import { assertSecurityArchive, removeDanglingEdges, removeNode, removeQuotes, } from "./helpers.js";
4
+ export const parseInternals = (nodes) => {
5
+ if (!nodes[0]) {
6
+ return { cweId: undefined };
7
+ }
8
+ const selectorNode = asPostcssNodeWithChildren(nodes[0]);
9
+ if (!selectorNode.nodes[0]) {
10
+ return { cweId: undefined };
11
+ }
12
+ let cweId = '';
13
+ if (isStringNode(selectorNode.nodes[0])) {
14
+ cweId = removeQuotes(asStringNode(selectorNode.nodes[0]).value);
15
+ }
16
+ else if (isTagNode(selectorNode.nodes[0])) {
17
+ cweId = asTagNode(selectorNode.nodes[0]).value;
18
+ }
19
+ /* c8 ignore start - unreachable via normal parser */
20
+ if (!cweId) {
21
+ throw error('Expected a CWE ID', {
22
+ found: selectorNode.nodes[0],
23
+ });
24
+ }
25
+ /* c8 ignore stop */
26
+ return { cweId };
27
+ };
28
+ /**
29
+ * Filters out any node that does not have a CWE alert.
30
+ *
31
+ * Usage:
32
+ * - :cwe - matches any package with at least one CWE alert
33
+ * - :cwe(CWE-79) - matches only the specific CWE ID
34
+ */
35
+ export const cwe = async (state) => {
36
+ assertSecurityArchive(state, 'cwe');
37
+ let internals;
38
+ try {
39
+ internals = parseInternals(asPostcssNodeWithChildren(state.current).nodes);
40
+ }
41
+ catch (err) /* c8 ignore start */ {
42
+ throw error('Failed to parse :cwe selector', { cause: err });
43
+ } /* c8 ignore stop */
44
+ const { cweId } = internals;
45
+ for (const node of state.partial.nodes) {
46
+ const report = state.securityArchive.get(node.id);
47
+ let exclude;
48
+ if (cweId === undefined) {
49
+ exclude = !report?.alerts.some(alert => alert.props?.cwes && alert.props.cwes.length > 0);
50
+ }
51
+ else {
52
+ exclude = !report?.alerts.some(alert => alert.props?.cwes?.some(cwe => cwe.id.trim().toLowerCase() ===
53
+ cweId.trim().toLowerCase()));
54
+ }
55
+ if (exclude) {
56
+ removeNode(state, node);
57
+ }
58
+ }
59
+ removeDanglingEdges(state);
60
+ return state;
61
+ };
@@ -4,4 +4,3 @@
4
4
  export declare const debug: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=debug.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **debugAccess** report alert.
4
4
  */
5
5
  export const debug = createSecuritySelectorFilter('debug', 'debugAccess');
6
- //# sourceMappingURL=debug.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const deprecated: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=deprecated.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **deprecated** report alert.
4
4
  */
5
5
  export const deprecated = createSecuritySelectorFilter('deprecated', 'deprecated');
6
- //# sourceMappingURL=deprecated.js.map
@@ -3,4 +3,3 @@ import type { ParserState } from '../types.ts';
3
3
  * :dev Pseudo-Selector will only match devDependencies.
4
4
  */
5
5
  export declare const dev: (state: ParserState) => Promise<ParserState>;
6
- //# sourceMappingURL=dev.d.ts.map
@@ -12,4 +12,3 @@ export const dev = async (state) => {
12
12
  removeUnlinkedNodes(state);
13
13
  return state;
14
14
  };
15
- //# sourceMappingURL=dev.js.map
@@ -0,0 +1,26 @@
1
+ import type { ParserState } from '../types.ts';
2
+ /**
3
+ * Given a set of changed file paths and a package location
4
+ * (relative to the project root), returns true if any changed
5
+ * file belongs to that package.
6
+ */
7
+ export declare const packageHasChanges: (changedFiles: Set<string>, packageLocation: string) => boolean;
8
+ /**
9
+ * :diff(<commitish>) Pseudo-Selector, matches only nodes
10
+ * whose files have changed between the current state and
11
+ * the specified commitish reference.
12
+ *
13
+ * Requires a `diffFiles` provider to be set on the
14
+ * {@link ParserState}. The provider is a callback that
15
+ * takes a commitish string and returns a Set of changed
16
+ * file paths relative to the project root.
17
+ *
18
+ * When called with no argument, defaults to HEAD (uncommitted changes).
19
+ *
20
+ * Examples:
21
+ * - :diff() — packages with uncommitted changes (defaults to HEAD)
22
+ * - :diff(main) — packages changed since main branch
23
+ * - :diff(HEAD~1) — packages changed since last commit
24
+ * - :diff("v1.0.0") — packages changed since tag v1.0.0
25
+ */
26
+ export declare const diff: (state: ParserState) => Promise<ParserState>;
@@ -0,0 +1,75 @@
1
+ import { error } from '@vltpkg/error-cause';
2
+ import { asPostcssNodeWithChildren } from '@vltpkg/dss-parser';
3
+ import { removeDanglingEdges, removeNode } from "./helpers.js";
4
+ import { parseInternals } from "./spec.js";
5
+ /**
6
+ * Given a set of changed file paths and a package location
7
+ * (relative to the project root), returns true if any changed
8
+ * file belongs to that package.
9
+ */
10
+ export const packageHasChanges = (changedFiles, packageLocation) => {
11
+ // Normalize the package location — remove leading './'
12
+ const normalized = packageLocation.startsWith('./') ?
13
+ packageLocation.slice(2)
14
+ : packageLocation;
15
+ // Root package — check if any file at root level changed
16
+ // (not inside a subdirectory that is another package)
17
+ if (!normalized || normalized === '.') {
18
+ // Any changed file means the root package changed
19
+ return changedFiles.size > 0;
20
+ }
21
+ // Check if any changed file starts with the package path
22
+ for (const file of changedFiles) {
23
+ if (file === normalized || file.startsWith(normalized + '/')) {
24
+ return true;
25
+ }
26
+ }
27
+ return false;
28
+ };
29
+ /**
30
+ * :diff(<commitish>) Pseudo-Selector, matches only nodes
31
+ * whose files have changed between the current state and
32
+ * the specified commitish reference.
33
+ *
34
+ * Requires a `diffFiles` provider to be set on the
35
+ * {@link ParserState}. The provider is a callback that
36
+ * takes a commitish string and returns a Set of changed
37
+ * file paths relative to the project root.
38
+ *
39
+ * When called with no argument, defaults to HEAD (uncommitted changes).
40
+ *
41
+ * Examples:
42
+ * - :diff() — packages with uncommitted changes (defaults to HEAD)
43
+ * - :diff(main) — packages changed since main branch
44
+ * - :diff(HEAD~1) — packages changed since last commit
45
+ * - :diff("v1.0.0") — packages changed since tag v1.0.0
46
+ */
47
+ export const diff = async (state) => {
48
+ const currentNodes = asPostcssNodeWithChildren(state.current).nodes;
49
+ const hasArg = currentNodes.length > 0 &&
50
+ asPostcssNodeWithChildren(currentNodes[0]).nodes.length > 0;
51
+ let commitish = 'HEAD';
52
+ if (hasArg) {
53
+ try {
54
+ commitish = parseInternals(currentNodes).specValue;
55
+ }
56
+ catch (err) {
57
+ throw error('Failed to parse :diff selector', {
58
+ cause: err,
59
+ });
60
+ }
61
+ }
62
+ if (!state.diffFiles) {
63
+ throw error('The :diff() selector requires a diffFiles provider');
64
+ }
65
+ const changedFiles = state.diffFiles(commitish);
66
+ for (const node of state.partial.nodes) {
67
+ /* c8 ignore next -- location is always set on real nodes */
68
+ const location = node.location ?? '';
69
+ if (!packageHasChanges(changedFiles, location)) {
70
+ removeNode(state, node);
71
+ }
72
+ }
73
+ removeDanglingEdges(state);
74
+ return state;
75
+ };
@@ -0,0 +1,22 @@
1
+ import type { NodeLike } from '@vltpkg/types';
2
+ import type { ParserState } from '../types.ts';
3
+ /**
4
+ * Fetches the dist-tags of a package from the registry.
5
+ */
6
+ export declare const retrieveDistTags: (node: NodeLike, signal?: AbortSignal) => Promise<Record<string, string>>;
7
+ /**
8
+ * Checks whether a node's installed version matches the version
9
+ * associated with the given dist-tag. Returns the node if it should
10
+ * be removed (does NOT match), or undefined if it matches.
11
+ */
12
+ export declare const queueNode: (state: ParserState, node: NodeLike, tagName: string) => Promise<NodeLike | undefined>;
13
+ /**
14
+ * :dist(tag) Pseudo-Selector, matches only nodes whose installed
15
+ * version corresponds to the given dist-tag in the registry.
16
+ *
17
+ * Examples:
18
+ * - :dist(latest) — matches packages at the `latest` dist-tag version
19
+ * - :dist(nightly) — matches packages at the `nightly` dist-tag version
20
+ * - :not(:dist(nightly)) — excludes nightly-tagged versions
21
+ */
22
+ export declare const dist: (state: ParserState) => Promise<ParserState>;
@@ -0,0 +1,110 @@
1
+ import pRetry, { AbortError } from 'p-retry';
2
+ import { hydrate, splitDepID } from '@vltpkg/dep-id/browser';
3
+ import { error } from '@vltpkg/error-cause';
4
+ import { asPostcssNodeWithChildren, asTagNode, asStringNode, isTagNode, } from '@vltpkg/dss-parser';
5
+ import { removeDanglingEdges, removeNode, removeQuotes, } from "./helpers.js";
6
+ /**
7
+ * Fetches the dist-tags of a package from the registry.
8
+ */
9
+ export const retrieveDistTags = async (node, signal) => {
10
+ const spec = hydrate(node.id, String(node.name), node.options);
11
+ if (!spec.registry || !node.name) {
12
+ return {};
13
+ }
14
+ const url = new URL(spec.registry);
15
+ url.pathname = `/${node.name}`;
16
+ const response = await fetch(String(url), {
17
+ headers: {
18
+ Accept: 'application/vnd.npm.install-v1+json',
19
+ },
20
+ signal,
21
+ });
22
+ if (response.status === 404) {
23
+ throw new AbortError('Missing API');
24
+ }
25
+ if (!response.ok) {
26
+ throw error('Failed to fetch packument', {
27
+ name: node.name,
28
+ spec,
29
+ response,
30
+ });
31
+ }
32
+ const packument = (await response.json());
33
+ return packument['dist-tags'];
34
+ };
35
+ /**
36
+ * Checks whether a node's installed version matches the version
37
+ * associated with the given dist-tag. Returns the node if it should
38
+ * be removed (does NOT match), or undefined if it matches.
39
+ */
40
+ export const queueNode = async (state, node, tagName) => {
41
+ if (!node.name || !node.version) {
42
+ return node;
43
+ }
44
+ let distTags;
45
+ try {
46
+ distTags = await pRetry(() => retrieveDistTags(node, state.signal), {
47
+ retries: state.retries,
48
+ signal: state.signal,
49
+ });
50
+ }
51
+ catch (err) {
52
+ // eslint-disable-next-line no-console
53
+ console.warn(error('Could not retrieve dist-tags', {
54
+ name: node.name,
55
+ cause: err,
56
+ }));
57
+ return node;
58
+ }
59
+ const tagVersion = distTags[tagName];
60
+ if (tagVersion !== node.version) {
61
+ return node;
62
+ }
63
+ return undefined;
64
+ };
65
+ /**
66
+ * :dist(tag) Pseudo-Selector, matches only nodes whose installed
67
+ * version corresponds to the given dist-tag in the registry.
68
+ *
69
+ * Examples:
70
+ * - :dist(latest) — matches packages at the `latest` dist-tag version
71
+ * - :dist(nightly) — matches packages at the `nightly` dist-tag version
72
+ * - :not(:dist(nightly)) — excludes nightly-tagged versions
73
+ */
74
+ export const dist = async (state) => {
75
+ const top = asPostcssNodeWithChildren(state.current);
76
+ const selector = asPostcssNodeWithChildren(top.nodes[0]);
77
+ const firstChild = selector.nodes[0];
78
+ let tagName;
79
+ try {
80
+ tagName = removeQuotes(asStringNode(firstChild).value);
81
+ }
82
+ catch {
83
+ if (isTagNode(firstChild)) {
84
+ tagName = asTagNode(firstChild).value;
85
+ /* c8 ignore start */
86
+ }
87
+ else {
88
+ throw error('Failed to parse :dist selector', {
89
+ found: firstChild,
90
+ });
91
+ }
92
+ /* c8 ignore stop */
93
+ }
94
+ const queue = [];
95
+ for (const node of state.partial.nodes) {
96
+ if (splitDepID(node.id)[0] !== 'registry') {
97
+ removeNode(state, node);
98
+ continue;
99
+ }
100
+ queue.push(queueNode(state, node, tagName));
101
+ }
102
+ const removeNodeQueue = await Promise.all(queue);
103
+ for (const node of removeNodeQueue) {
104
+ if (node) {
105
+ removeNode(state, node);
106
+ }
107
+ }
108
+ removeDanglingEdges(state);
109
+ return state;
110
+ };
@@ -4,4 +4,3 @@
4
4
  export declare const dynamic: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=dynamic.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **dynamicRequire** report alert.
4
4
  */
5
5
  export const dynamic = createSecuritySelectorFilter('dynamic', 'dynamicRequire');
6
- //# sourceMappingURL=dynamic.js.map