@vltpkg/query 1.0.0-rc.8 → 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
@@ -1,10 +1,10 @@
1
- import { satisfies, gt, gte, lt, lte, eq, neq, parse, parseRange, } from '@vltpkg/semver';
1
+ import { satisfies, gt, gte, lt, lte, eq, neq, intersects, subset, parse, parseRange, } from '@vltpkg/semver';
2
2
  import { error } from '@vltpkg/error-cause';
3
3
  import { asError } from '@vltpkg/types';
4
4
  import { parseInternals as parseAttrInternals } from "./attr.js";
5
5
  import { getManifestPropertyValues } from "../attribute.js";
6
6
  import { asAttributeNode, asPostcssNodeWithChildren, asPseudoNode, asStringNode, asTagNode, isAttributeNode, isPseudoNode, isStringNode, isTagNode, } from '@vltpkg/dss-parser';
7
- import { removeNode, removeQuotes } from "./helpers.js";
7
+ import { removeEdge, removeNode, removeQuotes, removeUnlinkedNodes, } from "./helpers.js";
8
8
  const semverFunctionNames = new Set([
9
9
  'satisfies',
10
10
  'gt',
@@ -13,6 +13,8 @@ const semverFunctionNames = new Set([
13
13
  'lte',
14
14
  'eq',
15
15
  'neq',
16
+ 'intersects',
17
+ 'subset',
16
18
  ]);
17
19
  export const isSemverFunctionName = (name) => semverFunctionNames.has(name);
18
20
  export const asSemverFunctionName = (name) => {
@@ -33,6 +35,10 @@ const semverFunctions = new Map([
33
35
  ['eq', eq],
34
36
  ['neq', neq],
35
37
  ]);
38
+ const semverRangeFunctions = new Map([
39
+ ['intersects', intersects],
40
+ ['subset', subset],
41
+ ]);
36
42
  export const parseInternals = (nodes, loose) => {
37
43
  // tries to parse the first param as a string node, otherwise defaults
38
44
  // to reading all postcss nodes as just strings, since it just means
@@ -82,13 +88,17 @@ export const parseInternals = (nodes, loose) => {
82
88
  }
83
89
  }
84
90
  const semverFunction = semverFunctions.get(fnName);
91
+ const semverRangeFunction = semverRangeFunctions.get(fnName);
85
92
  // the following should never happen as long as the semver function names
86
93
  // type and Set are correctly mirroring each other values
87
94
  /* c8 ignore start */
88
- if (!semverFunction) {
95
+ if (!semverFunction && !semverRangeFunction) {
89
96
  throw error('Invalid semver function name', {
90
97
  found: fnName,
91
- validOptions: Array.from(semverFunctions.keys()),
98
+ validOptions: [
99
+ ...Array.from(semverFunctions.keys()),
100
+ ...Array.from(semverRangeFunctions.keys()),
101
+ ],
92
102
  });
93
103
  }
94
104
  /* c8 ignore stop */
@@ -117,7 +127,8 @@ export const parseInternals = (nodes, loose) => {
117
127
  }
118
128
  return {
119
129
  semverValue,
120
- semverFunction,
130
+ semverFunction: semverFunction ?? satisfies,
131
+ semverRangeFunction,
121
132
  compareAttribute,
122
133
  };
123
134
  };
@@ -131,7 +142,33 @@ export const semverParser = async (state) => {
131
142
  cause: err,
132
143
  });
133
144
  }
134
- const { semverValue, semverFunction, compareAttribute } = internals;
145
+ const { semverValue, semverFunction, semverRangeFunction, compareAttribute, } = internals;
146
+ // Range-vs-range functions (subset, intersects) operate on edges by default
147
+ if (semverRangeFunction) {
148
+ if (compareAttribute) {
149
+ // Compare the semverValue against a manifest property value as ranges
150
+ for (const node of state.partial.nodes) {
151
+ const compareValues = getManifestPropertyValues(node, compareAttribute.properties, compareAttribute.attribute);
152
+ const compareValue = compareValues?.[0];
153
+ if (!compareValue ||
154
+ !semverRangeFunction(compareValue, semverValue)) {
155
+ removeNode(state, node);
156
+ }
157
+ }
158
+ }
159
+ else {
160
+ // Default: operate on edges using bareSpec
161
+ for (const edge of state.partial.edges) {
162
+ const edgeRange = edge.spec.semver ?? edge.spec.bareSpec;
163
+ if (!edgeRange ||
164
+ !semverRangeFunction(edgeRange, semverValue)) {
165
+ removeEdge(state, edge);
166
+ }
167
+ }
168
+ removeUnlinkedNodes(state);
169
+ }
170
+ return state;
171
+ }
135
172
  for (const node of state.partial.nodes) {
136
173
  if (compareAttribute) {
137
174
  const compareValues = getManifestPropertyValues(node, compareAttribute.properties, compareAttribute.attribute);
@@ -164,4 +201,3 @@ export const semverParser = async (state) => {
164
201
  }
165
202
  return state;
166
203
  };
167
- //# sourceMappingURL=semver.js.map
@@ -12,4 +12,3 @@ export declare const parseInternals: (nodes: PostcssNode[]) => {
12
12
  export declare const severity: (state: ParserState) => Promise<ParserState & {
13
13
  securityArchive: NonNullable<ParserState["securityArchive"]>;
14
14
  }>;
15
- //# sourceMappingURL=severity.d.ts.map
@@ -157,4 +157,3 @@ export const severity = async (state) => {
157
157
  removeDanglingEdges(state);
158
158
  return state;
159
159
  };
160
- //# sourceMappingURL=severity.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const shell: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=shell.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **shellAccess** report alert.
4
4
  */
5
5
  export const shell = createSecuritySelectorFilter('shell', 'shellAccess');
6
- //# sourceMappingURL=shell.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const shrinkwrap: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=shrinkwrap.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **shrinkwrap** report alert.
4
4
  */
5
5
  export const shrinkwrap = createSecuritySelectorFilter('shrinkwrap', 'shrinkwrap');
6
- //# sourceMappingURL=shrinkwrap.js.map
@@ -14,4 +14,3 @@ export declare const parseInternals: (nodes: PostcssNode[]) => SpecInternals;
14
14
  * - :spec("workspace:dev") matches edges with a package specifier equal to "workspace:dev"
15
15
  */
16
16
  export declare const spec: (state: ParserState) => Promise<ParserState>;
17
- //# sourceMappingURL=spec.d.ts.map
@@ -99,4 +99,3 @@ export const spec = async (state) => {
99
99
  removeUnlinkedNodes(state);
100
100
  return state;
101
101
  };
102
- //# sourceMappingURL=spec.js.map
@@ -12,4 +12,3 @@ export declare const parseInternals: (nodes: PostcssNode[]) => {
12
12
  export declare const squat: (state: ParserState) => Promise<ParserState & {
13
13
  securityArchive: NonNullable<ParserState["securityArchive"]>;
14
14
  }>;
15
- //# sourceMappingURL=squat.d.ts.map
@@ -169,4 +169,3 @@ export const squat = async (state) => {
169
169
  removeDanglingEdges(state);
170
170
  return state;
171
171
  };
172
- //# sourceMappingURL=squat.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const suspicious: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=suspicious.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **suspiciousStarActivity** report alert.
4
4
  */
5
5
  export const suspicious = createSecuritySelectorFilter('suspicious', 'suspiciousStarActivity');
6
- //# sourceMappingURL=suspicious.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const tracker: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=tracker.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **telemetry** report alert.
4
4
  */
5
5
  export const tracker = createSecuritySelectorFilter('tracker', 'telemetry');
6
- //# sourceMappingURL=tracker.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const trivial: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=trivial.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **trivialPackage** report alert.
4
4
  */
5
5
  export const trivial = createSecuritySelectorFilter('trivial', 'trivialPackage');
6
- //# sourceMappingURL=trivial.js.map
@@ -5,4 +5,3 @@ import type { ParserState } from '../types.ts';
5
5
  * first part of the dependency ID.
6
6
  */
7
7
  export declare const type: (state: ParserState) => Promise<ParserState>;
8
- //# sourceMappingURL=type.d.ts.map
@@ -19,4 +19,3 @@ export const type = async (state) => {
19
19
  removeDanglingEdges(state);
20
20
  return state;
21
21
  };
22
- //# sourceMappingURL=type.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const undesirable: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=undesirable.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **troll** report alert.
4
4
  */
5
5
  export const undesirable = createSecuritySelectorFilter('undesirable', 'troll');
6
- //# sourceMappingURL=undesirable.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const unknown: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=unknown.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **newAuthor** report alert.
4
4
  */
5
5
  export const unknown = createSecuritySelectorFilter('unknown', 'newAuthor');
6
- //# sourceMappingURL=unknown.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const unmaintained: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=unmaintained.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **unmaintained** report alert.
4
4
  */
5
5
  export const unmaintained = createSecuritySelectorFilter('unmaintained', 'unmaintained');
6
- //# sourceMappingURL=unmaintained.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const unpopular: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=unpopular.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **unpopularPackage** report alert.
4
4
  */
5
5
  export const unpopular = createSecuritySelectorFilter('unpopular', 'unpopularPackage');
6
- //# sourceMappingURL=unpopular.js.map
@@ -4,4 +4,3 @@
4
4
  export declare const unstable: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
5
  securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
6
  }>;
7
- //# sourceMappingURL=unstable.d.ts.map
@@ -3,4 +3,3 @@ import { createSecuritySelectorFilter } from "./helpers.js";
3
3
  * Filters out any node that does not have a **unstableOwnership** report alert.
4
4
  */
5
5
  export const unstable = createSecuritySelectorFilter('unstable', 'unstableOwnership');
6
- //# sourceMappingURL=unstable.js.map
@@ -0,0 +1,22 @@
1
+ import type { ParserState } from '../types.ts';
2
+ import type { PostcssNode } from '@vltpkg/dss-parser';
3
+ export type VulnKinds = '0' | '1' | '2' | '3' | 'critical' | 'high' | 'medium' | 'low' | undefined;
4
+ export type VulnComparator = '>' | '<' | '>=' | '<=' | undefined;
5
+ export declare const isVulnKind: (value?: string) => value is VulnKinds;
6
+ export declare const asVulnKind: (value?: string) => VulnKinds;
7
+ export declare const parseInternals: (nodes: PostcssNode[]) => {
8
+ kind: VulnKinds;
9
+ comparator: VulnComparator;
10
+ };
11
+ /**
12
+ * :vuln / :vulnerable Pseudo-Selector, matches nodes with vulnerability alerts.
13
+ *
14
+ * Usage:
15
+ * - :vuln - matches vulnerabilities with severity >= medium (critical, high, medium but not low)
16
+ * - :vuln(critical) - matches specific vulnerability kind
17
+ * - :vuln(>1) - matches vulnerabilities with severity greater than 1
18
+ * - :vuln(">=medium") - matches vulnerabilities with severity >= medium
19
+ */
20
+ export declare const vuln: (state: ParserState) => Promise<ParserState & {
21
+ securityArchive: NonNullable<ParserState["securityArchive"]>;
22
+ }>;
@@ -0,0 +1,220 @@
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
+ // Valid vulnerability kind names
5
+ const kinds = new Set([
6
+ 'critical',
7
+ 'high',
8
+ 'medium',
9
+ 'low',
10
+ '0',
11
+ '1',
12
+ '2',
13
+ '3',
14
+ ]);
15
+ // Map numerical values to their respective kinds for comparison operations
16
+ const kindLevelMap = new Map([
17
+ ['critical', 0],
18
+ ['high', 1],
19
+ ['medium', 2],
20
+ ['low', 3],
21
+ ['0', 0],
22
+ ['1', 1],
23
+ ['2', 2],
24
+ ['3', 3],
25
+ ]);
26
+ // Maps alert types to their severity level for comparison operations.
27
+ // gptSecurity maps to medium (2), gptAnomaly maps to low (3).
28
+ const alertLevelMap = new Map([
29
+ ['criticalCVE', 0],
30
+ ['cve', 1],
31
+ ['potentialVulnerability', 2],
32
+ ['gptSecurity', 2],
33
+ ['mildCVE', 3],
34
+ ['gptAnomaly', 3],
35
+ ]);
36
+ // Maps alert.severity strings to numeric levels for cveId-bearing alerts
37
+ // whose type may not be in alertLevelMap.
38
+ const severityLevelMap = new Map([
39
+ ['critical', 0],
40
+ ['high', 1],
41
+ ['medium', 2],
42
+ ['low', 3],
43
+ ]);
44
+ /**
45
+ * Returns the severity level for an alert, considering both its type
46
+ * (via alertLevelMap) and its cveId + severity fields. Alerts with a
47
+ * cveId are treated as vulnerability alerts even if their type is not
48
+ * in the closed set.
49
+ */
50
+ const getAlertLevel = (alert) => {
51
+ const level = alertLevelMap.get(alert.type);
52
+ if (level != null)
53
+ return level;
54
+ // Fall back to severity field for alerts carrying a CVE id
55
+ if (alert.props?.cveId && alert.severity) {
56
+ return severityLevelMap.get(alert.severity);
57
+ }
58
+ return undefined;
59
+ };
60
+ export const isVulnKind = (value) => kinds.has(value);
61
+ export const asVulnKind = (value) => {
62
+ if (!isVulnKind(value)) {
63
+ throw error('Expected a valid vuln kind', {
64
+ found: value,
65
+ validOptions: Array.from(kinds),
66
+ });
67
+ }
68
+ return value;
69
+ };
70
+ export const parseInternals = (nodes) => {
71
+ // Handle case where no parameters are provided (parameterless :vuln)
72
+ if (!nodes[0]) {
73
+ return { kind: undefined, comparator: undefined };
74
+ }
75
+ const selectorNode = asPostcssNodeWithChildren(nodes[0]);
76
+ if (!selectorNode.nodes[0]) {
77
+ return { kind: undefined, comparator: undefined };
78
+ }
79
+ let kindValue = '';
80
+ let comparator = undefined;
81
+ let kind;
82
+ // Parse the parameter (kind with optional comparator)
83
+ if (isStringNode(selectorNode.nodes[0])) {
84
+ kindValue = removeQuotes(asStringNode(selectorNode.nodes[0]).value);
85
+ }
86
+ else if (isTagNode(selectorNode.nodes[0])) {
87
+ kindValue = asTagNode(selectorNode.nodes[0]).value;
88
+ }
89
+ // Extract comparator if present
90
+ if (kindValue.startsWith('>=')) {
91
+ comparator = '>=';
92
+ kindValue = kindValue.substring(2);
93
+ }
94
+ else if (kindValue.startsWith('<=')) {
95
+ comparator = '<=';
96
+ kindValue = kindValue.substring(2);
97
+ }
98
+ else if (kindValue.startsWith('>')) {
99
+ comparator = '>';
100
+ kindValue = kindValue.substring(1);
101
+ }
102
+ else if (kindValue.startsWith('<')) {
103
+ comparator = '<';
104
+ kindValue = kindValue.substring(1);
105
+ }
106
+ // Validate the kind without comparator
107
+ if (!comparator) {
108
+ kind = asVulnKind(kindValue);
109
+ }
110
+ else {
111
+ // For comparisons, just make sure it's a valid numeric value or a valid kind
112
+ if (isVulnKind(kindValue)) {
113
+ kind = kindValue;
114
+ }
115
+ else {
116
+ throw error('Expected a valid vuln kind or number between 0-3', {
117
+ found: kindValue,
118
+ });
119
+ }
120
+ }
121
+ return { kind, comparator };
122
+ };
123
+ /**
124
+ * :vuln / :vulnerable Pseudo-Selector, matches nodes with vulnerability alerts.
125
+ *
126
+ * Usage:
127
+ * - :vuln - matches vulnerabilities with severity >= medium (critical, high, medium but not low)
128
+ * - :vuln(critical) - matches specific vulnerability kind
129
+ * - :vuln(>1) - matches vulnerabilities with severity greater than 1
130
+ * - :vuln(">=medium") - matches vulnerabilities with severity >= medium
131
+ */
132
+ export const vuln = async (state) => {
133
+ assertSecurityArchive(state, 'vuln');
134
+ let internals;
135
+ try {
136
+ internals = parseInternals(asPostcssNodeWithChildren(state.current).nodes);
137
+ }
138
+ catch (err) {
139
+ throw error('Failed to parse :vuln selector', { cause: err });
140
+ }
141
+ const { kind, comparator } = internals;
142
+ for (const node of state.partial.nodes) {
143
+ const report = state.securityArchive.get(node.id);
144
+ // Always exclude nodes that don't have security data or alerts
145
+ if (!report?.alerts || report.alerts.length === 0) {
146
+ removeNode(state, node);
147
+ }
148
+ }
149
+ for (const node of state.partial.nodes) {
150
+ const report = state.securityArchive.get(node.id);
151
+ let exclude = true;
152
+ if (report) {
153
+ if (kind === undefined && comparator === undefined) {
154
+ // Parameterless :vuln - match vuln alerts with severity >= medium
155
+ // Includes: criticalCVE, cve, potentialVulnerability, gptSecurity,
156
+ // and any alert carrying a cveId prop
157
+ // Excludes: mildCVE, gptAnomaly (low severity)
158
+ exclude = !report.alerts.some(alert => {
159
+ const level = getAlertLevel(alert);
160
+ return level != null && level <= 2;
161
+ });
162
+ }
163
+ else if (comparator) {
164
+ // retrieve the value to compare against
165
+ const kindLevel = kindLevelMap.get(kind);
166
+ // the kindLevel value has already been validated at this point
167
+ // and thus can never return an undefined/falsy value but ts doesn't
168
+ // know about that, so we have the extra check here
169
+ /* c8 ignore next - impossible */
170
+ if (kindLevel == null)
171
+ break;
172
+ // Check each alert to find any that match our comparison criteria
173
+ for (const alert of report.alerts) {
174
+ const currentAlertLevel = getAlertLevel(alert);
175
+ if (currentAlertLevel == null)
176
+ continue;
177
+ switch (comparator) {
178
+ case '>':
179
+ if (currentAlertLevel > kindLevel) {
180
+ exclude = false;
181
+ }
182
+ break;
183
+ case '<':
184
+ if (currentAlertLevel < kindLevel) {
185
+ exclude = false;
186
+ }
187
+ break;
188
+ case '>=':
189
+ if (currentAlertLevel >= kindLevel) {
190
+ exclude = false;
191
+ }
192
+ break;
193
+ case '<=':
194
+ if (currentAlertLevel <= kindLevel) {
195
+ exclude = false;
196
+ }
197
+ break;
198
+ }
199
+ // If we've found a match, no need to check other alerts
200
+ if (!exclude)
201
+ break;
202
+ }
203
+ }
204
+ else {
205
+ // Exact match behavior — also matches gptSecurity/gptAnomaly
206
+ // at the same level as their mapped kind, and cveId-bearing alerts
207
+ const targetLevel = kindLevelMap.get(kind);
208
+ exclude = !report.alerts.some(alert => {
209
+ const level = getAlertLevel(alert);
210
+ return level != null && level === targetLevel;
211
+ });
212
+ }
213
+ }
214
+ if (exclude) {
215
+ removeNode(state, node);
216
+ }
217
+ }
218
+ removeDanglingEdges(state);
219
+ return state;
220
+ };
@@ -3,4 +3,3 @@ import type { ParserState } from '../types.ts';
3
3
  * :workspace Pseudo-Selector will only match workspace dependencies.
4
4
  */
5
5
  export declare const workspace: (state: ParserState) => Promise<ParserState>;
6
- //# sourceMappingURL=workspace.d.ts.map
@@ -17,4 +17,3 @@ export const workspace = async (state) => {
17
17
  }
18
18
  return state;
19
19
  };
20
- //# sourceMappingURL=workspace.js.map
@@ -3,4 +3,3 @@ import type { ParserState } from './types.ts';
3
3
  * Parsers the `pseudo` node types.
4
4
  */
5
5
  export declare const pseudo: (state: ParserState) => Promise<ParserState>;
6
- //# sourceMappingURL=pseudo.d.ts.map
@@ -11,6 +11,8 @@ import { cwe } from "./pseudo/cwe.js";
11
11
  import { debug } from "./pseudo/debug.js";
12
12
  import { deprecated } from "./pseudo/deprecated.js";
13
13
  import { dev } from "./pseudo/dev.js";
14
+ import { diff } from "./pseudo/diff.js";
15
+ import { dist } from "./pseudo/dist.js";
14
16
  import { dynamic } from "./pseudo/dynamic.js";
15
17
  import { empty } from "./pseudo/empty.js";
16
18
  import { entropic } from "./pseudo/entropic.js";
@@ -18,6 +20,7 @@ import { env } from "./pseudo/env.js";
18
20
  import { evalParser } from "./pseudo/eval.js";
19
21
  import { fs } from "./pseudo/fs.js";
20
22
  import { hostContext } from "./pseudo/host.js";
23
+ import { hostname } from "./pseudo/hostname.js";
21
24
  import { license } from "./pseudo/license.js";
22
25
  import { link } from "./pseudo/link.js";
23
26
  import { malware } from "./pseudo/malware.js";
@@ -34,6 +37,7 @@ import { peer } from "./pseudo/peer.js";
34
37
  import { prerelease } from "./pseudo/prerelease.js";
35
38
  import { published } from "./pseudo/published.js";
36
39
  import { privateParser } from "./pseudo/private.js";
40
+ import { registry } from "./pseudo/registry.js";
37
41
  import { prod } from "./pseudo/prod.js";
38
42
  import { root } from "./pseudo/root.js";
39
43
  import { scanned } from "./pseudo/scanned.js";
@@ -54,6 +58,7 @@ import { unknown } from "./pseudo/unknown.js";
54
58
  import { unmaintained } from "./pseudo/unmaintained.js";
55
59
  import { unpopular } from "./pseudo/unpopular.js";
56
60
  import { unstable } from "./pseudo/unstable.js";
61
+ import { vuln } from "./pseudo/vuln.js";
57
62
  import { workspace } from "./pseudo/workspace.js";
58
63
  /**
59
64
  * :has Pseudo-Selector, matches only nodes that have valid results
@@ -81,6 +86,8 @@ const has = async (state) => {
81
86
  edges: new Set(state.partial.edges),
82
87
  nodes: new Set(state.partial.nodes),
83
88
  },
89
+ diffFiles: state.diffFiles,
90
+ loose: state.loose,
84
91
  hostContexts: state.hostContexts,
85
92
  importers: state.importers,
86
93
  retries: state.retries,
@@ -155,6 +162,7 @@ const is = async (state) => {
155
162
  nodes: new Set(),
156
163
  },
157
164
  current: node,
165
+ diffFiles: state.diffFiles,
158
166
  initial: state.initial,
159
167
  loose: true,
160
168
  partial: {
@@ -200,7 +208,9 @@ const not = async (state) => {
200
208
  nodes: new Set(),
201
209
  },
202
210
  current: node,
211
+ diffFiles: state.diffFiles,
203
212
  initial: state.initial,
213
+ loose: state.loose,
204
214
  partial: {
205
215
  nodes: new Set(state.partial.nodes),
206
216
  edges: new Set(state.partial.edges),
@@ -277,6 +287,8 @@ const pseudoSelectors = new Map(Object.entries({
277
287
  debug,
278
288
  deprecated,
279
289
  dev,
290
+ diff,
291
+ dist,
280
292
  dynamic,
281
293
  eval: evalParser,
282
294
  empty,
@@ -285,6 +297,7 @@ const pseudoSelectors = new Map(Object.entries({
285
297
  fs,
286
298
  has,
287
299
  host: hostContext,
300
+ hostname,
288
301
  is,
289
302
  license,
290
303
  link,
@@ -304,6 +317,7 @@ const pseudoSelectors = new Map(Object.entries({
304
317
  published,
305
318
  private: privateParser,
306
319
  prod,
320
+ registry,
307
321
  project,
308
322
  root,
309
323
  scanned,
@@ -327,6 +341,8 @@ const pseudoSelectors = new Map(Object.entries({
327
341
  unpopular,
328
342
  unstable,
329
343
  v: semver,
344
+ vuln,
345
+ vulnerable: vuln,
330
346
  workspace,
331
347
  }));
332
348
  /**
@@ -358,4 +374,3 @@ export const pseudo = async (state) => {
358
374
  }
359
375
  return result;
360
376
  };
361
- //# sourceMappingURL=pseudo.js.map