@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
@@ -0,0 +1,214 @@
1
+ import t from 'tap'
2
+ import postcssSelectorParser from 'postcss-selector-parser'
3
+ import type { ParserState } from '../../src/types.ts'
4
+ import { built } from '../../src/pseudo/built.ts'
5
+ import {
6
+ getSimpleGraph,
7
+ getSingleWorkspaceGraph,
8
+ getCycleGraph,
9
+ } from '../fixtures/graph.ts'
10
+
11
+ t.test('selects packages with built buildState', async t => {
12
+ const getState = (query: string, graph = getSimpleGraph()) => {
13
+ const ast = postcssSelectorParser().astSync(query)
14
+ const current = ast.first.first
15
+ const state: ParserState = {
16
+ comment: '',
17
+ current,
18
+ initial: {
19
+ edges: new Set(graph.edges.values()),
20
+ nodes: new Set(graph.nodes.values()),
21
+ },
22
+ partial: {
23
+ edges: new Set(graph.edges.values()),
24
+ nodes: new Set(graph.nodes.values()),
25
+ },
26
+ collect: {
27
+ edges: new Set(),
28
+ nodes: new Set(),
29
+ },
30
+ cancellable: async () => {},
31
+ walk: async i => i,
32
+ retries: 0,
33
+ securityArchive: undefined,
34
+ importers: new Set(graph.importers),
35
+ signal: new AbortController().signal,
36
+ specificity: { idCounter: 0, commonCounter: 0 },
37
+ }
38
+ return state
39
+ }
40
+
41
+ await t.test(
42
+ 'selects nodes with built buildState in simple graph',
43
+ async t => {
44
+ const graph = getSimpleGraph()
45
+ // Set some nodes to have buildState 'built'
46
+ const nodes = [...graph.nodes.values()]
47
+ if (nodes.length >= 5) {
48
+ nodes[0]!.buildState = 'built'
49
+ nodes[1]!.buildState = 'needed'
50
+ nodes[2]!.buildState = 'built'
51
+ nodes[3]!.buildState = 'failed'
52
+ nodes[4]!.buildState = 'none'
53
+
54
+ const res = await built(getState(':built', graph))
55
+ const resultNames = [...res.partial.nodes].map(n => n.name)
56
+
57
+ t.ok(
58
+ resultNames.includes(nodes[0]!.name),
59
+ 'should include first node with built state',
60
+ )
61
+ t.ok(
62
+ resultNames.includes(nodes[2]!.name),
63
+ 'should include second node with built state',
64
+ )
65
+ t.notOk(
66
+ resultNames.includes(nodes[1]!.name),
67
+ 'should not include node with needed state',
68
+ )
69
+ t.notOk(
70
+ resultNames.includes(nodes[3]!.name),
71
+ 'should not include node with failed state',
72
+ )
73
+ t.notOk(
74
+ resultNames.includes(nodes[4]!.name),
75
+ 'should not include node with none state',
76
+ )
77
+
78
+ t.matchSnapshot({
79
+ nodes: [...res.partial.nodes].map(n => n.name).sort(),
80
+ edges: [...res.partial.edges].map(e => e.name).sort(),
81
+ })
82
+ }
83
+ },
84
+ )
85
+
86
+ await t.test(
87
+ 'selects no nodes when none have built state',
88
+ async t => {
89
+ const graph = getSingleWorkspaceGraph()
90
+ // Set all nodes to have non-built buildState
91
+ for (const node of graph.nodes.values()) {
92
+ node.buildState = 'needed'
93
+ }
94
+
95
+ const res = await built(getState(':built', graph))
96
+ t.strictSame(
97
+ [...res.partial.nodes].map(n => n.name),
98
+ [],
99
+ 'should not select any nodes when none have built state',
100
+ )
101
+ t.matchSnapshot({
102
+ nodes: [...res.partial.nodes].map(n => n.name).sort(),
103
+ edges: [...res.partial.edges].map(e => e.name).sort(),
104
+ })
105
+ },
106
+ )
107
+
108
+ await t.test(
109
+ 'selects all nodes when all have built state',
110
+ async t => {
111
+ const graph = getCycleGraph()
112
+ // Set all nodes to have built buildState
113
+ for (const node of graph.nodes.values()) {
114
+ node.buildState = 'built'
115
+ }
116
+
117
+ const res = await built(getState(':built', graph))
118
+ const allNodeNames = [...graph.nodes.values()].map(n => n.name)
119
+ const resultNodeNames = [...res.partial.nodes].map(n => n.name)
120
+
121
+ t.strictSame(
122
+ resultNodeNames.sort(),
123
+ allNodeNames.sort(),
124
+ 'should select all nodes when all have built state',
125
+ )
126
+ t.matchSnapshot({
127
+ nodes: [...res.partial.nodes].map(n => n.name).sort(),
128
+ edges: [...res.partial.edges].map(e => e.name).sort(),
129
+ })
130
+ },
131
+ )
132
+
133
+ await t.test('handles an empty partial state', async t => {
134
+ // Create a state with empty partial nodes
135
+ const state = getState(':built')
136
+ state.partial.nodes.clear()
137
+ state.partial.edges.clear()
138
+
139
+ const res = await built(state)
140
+ t.strictSame(
141
+ [...res.partial.nodes].map(n => n.name),
142
+ [],
143
+ 'should return empty array when starting with empty partial state',
144
+ )
145
+ t.matchSnapshot({
146
+ nodes: [...res.partial.nodes].map(n => n.name),
147
+ edges: [...res.partial.edges].map(e => e.name),
148
+ })
149
+ })
150
+
151
+ await t.test('properly removes dangling edges', async t => {
152
+ const graph = getSimpleGraph()
153
+ const nodes = [...graph.nodes.values()]
154
+
155
+ // Set only one node to be built
156
+ if (nodes[0]) {
157
+ nodes[0].buildState = 'built'
158
+ for (let i = 1; i < nodes.length; i++) {
159
+ if (nodes[i]) {
160
+ nodes[i]!.buildState = 'none'
161
+ }
162
+ }
163
+ }
164
+
165
+ const res = await built(getState(':built', graph))
166
+
167
+ // Check that edges pointing to removed nodes are also removed
168
+ for (const edge of res.partial.edges) {
169
+ t.ok(
170
+ edge.to?.buildState === 'built' || !edge.to,
171
+ 'edges should only point to built nodes or be missing',
172
+ )
173
+ }
174
+
175
+ t.matchSnapshot({
176
+ nodes: [...res.partial.nodes].map(n => n.name).sort(),
177
+ edges: [...res.partial.edges].map(e => e.name).sort(),
178
+ })
179
+ })
180
+
181
+ await t.test(
182
+ 'filters mixed buildState values correctly',
183
+ async t => {
184
+ const graph = getSimpleGraph()
185
+ const nodes = [...graph.nodes.values()]
186
+
187
+ // Create a realistic scenario with mixed buildStates
188
+ if (nodes.length >= 5) {
189
+ nodes[0]!.buildState = 'built'
190
+ nodes[1]!.buildState = 'needed'
191
+ nodes[2]!.buildState = 'built'
192
+ nodes[3]!.buildState = 'failed'
193
+ nodes[4]!.buildState = 'built'
194
+ }
195
+
196
+ const res = await built(getState(':built', graph))
197
+ const resultNodes = [...res.partial.nodes]
198
+
199
+ // All resulting nodes should have buildState === 'built'
200
+ for (const node of resultNodes) {
201
+ t.equal(
202
+ node.buildState,
203
+ 'built',
204
+ `node ${node.name} should have buildState 'built'`,
205
+ )
206
+ }
207
+
208
+ t.matchSnapshot({
209
+ nodes: [...res.partial.nodes].map(n => n.name).sort(),
210
+ edges: [...res.partial.edges].map(e => e.name).sort(),
211
+ })
212
+ },
213
+ )
214
+ })
@@ -0,0 +1,160 @@
1
+ import t from 'tap'
2
+ import { joinDepIDTuple } from '@vltpkg/dep-id'
3
+ import { asSecurityArchiveLike } from '@vltpkg/security-archive'
4
+ import { getSimpleGraph } from '../fixtures/graph.ts'
5
+ import type { ParserState } from '../../src/types.ts'
6
+ import { parse } from '../../src/parser.ts'
7
+ import { confused } from '../../src/pseudo/confused.ts'
8
+
9
+ t.test('selects packages with a manifestConfusion alert', async t => {
10
+ const getState = (query: string, graph = getSimpleGraph()) => {
11
+ const ast = parse(query)
12
+ const current = ast.first.first
13
+ const state: ParserState = {
14
+ comment: '',
15
+ current,
16
+ initial: {
17
+ edges: new Set(graph.edges.values()),
18
+ nodes: new Set(graph.nodes.values()),
19
+ },
20
+ partial: {
21
+ edges: new Set(graph.edges.values()),
22
+ nodes: new Set(graph.nodes.values()),
23
+ },
24
+ collect: {
25
+ edges: new Set(),
26
+ nodes: new Set(),
27
+ },
28
+ cancellable: async () => {},
29
+ walk: async i => i,
30
+ retries: 0,
31
+ securityArchive: asSecurityArchiveLike(
32
+ new Map([
33
+ [
34
+ joinDepIDTuple(['registry', '', 'e@1.0.0']),
35
+ { alerts: [{ type: 'manifestConfusion' }] },
36
+ ],
37
+ ]),
38
+ ),
39
+ importers: new Set(graph.importers),
40
+ signal: new AbortController().signal,
41
+ specificity: { idCounter: 0, commonCounter: 0 },
42
+ }
43
+ return state
44
+ }
45
+
46
+ await t.test(
47
+ 'filter out any node that does not have the alert',
48
+ async t => {
49
+ const res = await confused(getState(':confused'))
50
+ t.strictSame(
51
+ [...res.partial.nodes].map(n => n.name),
52
+ ['e'],
53
+ 'should select only confused packages',
54
+ )
55
+ t.matchSnapshot({
56
+ nodes: [...res.partial.nodes].map(n => n.name),
57
+ edges: [...res.partial.edges].map(e => e.name),
58
+ })
59
+ },
60
+ )
61
+ })
62
+
63
+ t.test('missing security archive', async t => {
64
+ const getState = (query: string) => {
65
+ const ast = parse(query)
66
+ const current = ast.first.first
67
+ const state: ParserState = {
68
+ comment: '',
69
+ current,
70
+ initial: {
71
+ edges: new Set(),
72
+ nodes: new Set(),
73
+ },
74
+ partial: {
75
+ edges: new Set(),
76
+ nodes: new Set(),
77
+ },
78
+ collect: {
79
+ edges: new Set(),
80
+ nodes: new Set(),
81
+ },
82
+ cancellable: async () => {},
83
+ walk: async i => i,
84
+ retries: 0,
85
+ securityArchive: undefined,
86
+ importers: new Set(),
87
+ signal: new AbortController().signal,
88
+ specificity: { idCounter: 0, commonCounter: 0 },
89
+ }
90
+ return state
91
+ }
92
+
93
+ await t.rejects(
94
+ confused(getState(':confused')),
95
+ { message: /Missing security archive/ },
96
+ 'should throw an error',
97
+ )
98
+ })
99
+
100
+ t.test('nodes with confused=true flag', async t => {
101
+ const getState = (query: string) => {
102
+ const ast = parse(query)
103
+ const current = ast.first.first
104
+ const graph = getSimpleGraph()
105
+
106
+ // Find node 'a' and set confused=true
107
+ const nodeA = [...graph.nodes.values()].find(n => n.name === 'a')
108
+ if (nodeA) {
109
+ nodeA.confused = true
110
+ t.teardown(() => {
111
+ nodeA.confused = false // Reset the flag after the test
112
+ })
113
+ }
114
+
115
+ const state: ParserState = {
116
+ comment: '',
117
+ current,
118
+ initial: {
119
+ edges: new Set(graph.edges.values()),
120
+ nodes: new Set(graph.nodes.values()),
121
+ },
122
+ partial: {
123
+ edges: new Set(graph.edges.values()),
124
+ nodes: new Set(graph.nodes.values()),
125
+ },
126
+ collect: {
127
+ edges: new Set(),
128
+ nodes: new Set(),
129
+ },
130
+ cancellable: async () => {},
131
+ walk: async i => i,
132
+ retries: 0,
133
+ securityArchive: asSecurityArchiveLike(
134
+ new Map([
135
+ [
136
+ joinDepIDTuple(['registry', '', 'e@1.0.0']),
137
+ { alerts: [{ type: 'manifestConfusion' }] },
138
+ ],
139
+ ]),
140
+ ),
141
+ importers: new Set(graph.importers),
142
+ signal: new AbortController().signal,
143
+ specificity: { idCounter: 0, commonCounter: 0 },
144
+ }
145
+ return state
146
+ }
147
+
148
+ await t.test('filter out nodes that are not confused', async t => {
149
+ const res = await confused(getState(':confused'))
150
+ t.strictSame(
151
+ [...res.partial.nodes].map(n => n.name),
152
+ ['a', 'e'],
153
+ 'should select both confused=true nodes and nodes with manifestConfusion alert',
154
+ )
155
+ t.matchSnapshot({
156
+ nodes: [...res.partial.nodes].map(n => n.name),
157
+ edges: [...res.partial.edges].map(e => e.name),
158
+ })
159
+ })
160
+ })
@@ -0,0 +1,249 @@
1
+ import t from 'tap'
2
+ import { joinDepIDTuple } from '@vltpkg/dep-id'
3
+ import {
4
+ asPackageReportData,
5
+ asSecurityArchiveLike,
6
+ } from '@vltpkg/security-archive'
7
+ import { getSimpleGraph } from '../fixtures/graph.ts'
8
+ import type { ParserState } from '../../src/types.ts'
9
+ import { parse } from '../../src/parser.ts'
10
+ import { cve } from '../../src/pseudo/cve.ts'
11
+
12
+ t.test('selects packages with a CVE alert', async t => {
13
+ const getState = (query: string, graph = getSimpleGraph()) => {
14
+ const ast = parse(query)
15
+ const current = ast.first.first
16
+ const state: ParserState = {
17
+ comment: '',
18
+ current,
19
+ initial: {
20
+ edges: new Set(graph.edges.values()),
21
+ nodes: new Set(graph.nodes.values()),
22
+ },
23
+ partial: {
24
+ edges: new Set(graph.edges.values()),
25
+ nodes: new Set(graph.nodes.values()),
26
+ },
27
+ collect: {
28
+ edges: new Set(),
29
+ nodes: new Set(),
30
+ },
31
+ cancellable: async () => {},
32
+ walk: async i => i,
33
+ retries: 0,
34
+ securityArchive: asSecurityArchiveLike(
35
+ new Map([
36
+ [
37
+ joinDepIDTuple(['registry', '', 'e@1.0.0']),
38
+ asPackageReportData({
39
+ id: 'e@1.0.0',
40
+ author: [],
41
+ size: 0,
42
+ type: 'npm',
43
+ name: 'e',
44
+ version: '1.0.0',
45
+ license: 'MIT',
46
+ score: {
47
+ overall: 0,
48
+ license: 0,
49
+ maintenance: 0,
50
+ quality: 0,
51
+ supplyChain: 0,
52
+ vulnerability: 0,
53
+ signal: new AbortController().signal,
54
+ specificity: { idCounter: 0, commonCounter: 0 },
55
+ },
56
+ alerts: [
57
+ {
58
+ key: '12314320948130',
59
+ type: 'cve',
60
+ severity: 'high',
61
+ category: 'security',
62
+ props: {
63
+ cveId: 'CVE-2023-1234',
64
+ lastPublish: '2023-01-01',
65
+ },
66
+ },
67
+ ],
68
+ }),
69
+ ],
70
+ ]),
71
+ ),
72
+ importers: new Set(graph.importers),
73
+ signal: new AbortController().signal,
74
+ specificity: { idCounter: 0, commonCounter: 0 },
75
+ }
76
+ return state
77
+ }
78
+
79
+ await t.test(
80
+ 'filter out any node that does not have the alert',
81
+ async t => {
82
+ const res = await cve(getState(':cve(CVE-2023-1234)'))
83
+ t.strictSame(
84
+ [...res.partial.nodes].map(n => n.name),
85
+ ['e'],
86
+ 'should select only packages with matching CVE ID',
87
+ )
88
+ t.matchSnapshot({
89
+ nodes: [...res.partial.nodes].map(n => n.name),
90
+ edges: [...res.partial.edges].map(e => e.name),
91
+ })
92
+ },
93
+ )
94
+
95
+ await t.test('should not match an unseen CVE ID', async t => {
96
+ const res = await cve(getState(':cve(CVE-2023-5678)'))
97
+ t.strictSame(
98
+ [...res.partial.nodes].map(n => n.name),
99
+ [],
100
+ 'should not select any packages when CVE ID does not match',
101
+ )
102
+ t.matchSnapshot({
103
+ nodes: [...res.partial.nodes].map(n => n.name),
104
+ edges: [...res.partial.edges].map(e => e.name),
105
+ })
106
+ })
107
+
108
+ await t.test(
109
+ 'filter out any node that does not match the quoted CVE ID',
110
+ async t => {
111
+ const res = await cve(getState(':cve("CVE-2023-1234")'))
112
+ t.strictSame(
113
+ [...res.partial.nodes].map(n => n.name),
114
+ ['e'],
115
+ 'should select only packages with matching CVE ID',
116
+ )
117
+ t.matchSnapshot({
118
+ nodes: [...res.partial.nodes].map(n => n.name),
119
+ edges: [...res.partial.edges].map(e => e.name),
120
+ })
121
+ },
122
+ )
123
+
124
+ await t.test(
125
+ 'parameterless :cve matches any package with a CVE',
126
+ async t => {
127
+ const res = await cve(getState(':cve'))
128
+ t.strictSame(
129
+ [...res.partial.nodes].map(n => n.name),
130
+ ['e'],
131
+ 'should select packages with any CVE alert',
132
+ )
133
+ t.matchSnapshot({
134
+ nodes: [...res.partial.nodes].map(n => n.name),
135
+ edges: [...res.partial.edges].map(e => e.name),
136
+ })
137
+ },
138
+ )
139
+ })
140
+
141
+ t.test(':cve() with empty parens matches any CVE', async t => {
142
+ const graph = getSimpleGraph()
143
+ const ast = parse(':cve()')
144
+ const current = ast.first.first
145
+ const state: ParserState = {
146
+ comment: '',
147
+ current,
148
+ initial: {
149
+ edges: new Set(graph.edges.values()),
150
+ nodes: new Set(graph.nodes.values()),
151
+ },
152
+ partial: {
153
+ edges: new Set(graph.edges.values()),
154
+ nodes: new Set(graph.nodes.values()),
155
+ },
156
+ collect: {
157
+ edges: new Set(),
158
+ nodes: new Set(),
159
+ },
160
+ cancellable: async () => {},
161
+ walk: async i => i,
162
+ retries: 0,
163
+ securityArchive: asSecurityArchiveLike(
164
+ new Map([
165
+ [
166
+ joinDepIDTuple(['registry', '', 'e@1.0.0']),
167
+ asPackageReportData({
168
+ id: 'e@1.0.0',
169
+ author: [],
170
+ size: 0,
171
+ type: 'npm',
172
+ name: 'e',
173
+ version: '1.0.0',
174
+ license: 'MIT',
175
+ score: {
176
+ overall: 0,
177
+ license: 0,
178
+ maintenance: 0,
179
+ quality: 0,
180
+ supplyChain: 0,
181
+ vulnerability: 0,
182
+ signal: new AbortController().signal,
183
+ specificity: { idCounter: 0, commonCounter: 0 },
184
+ },
185
+ alerts: [
186
+ {
187
+ key: '12314320948130',
188
+ type: 'cve',
189
+ severity: 'high',
190
+ category: 'security',
191
+ props: {
192
+ cveId: 'CVE-2023-1234',
193
+ lastPublish: '2023-01-01',
194
+ },
195
+ },
196
+ ],
197
+ }),
198
+ ],
199
+ ]),
200
+ ),
201
+ importers: new Set(graph.importers),
202
+ signal: new AbortController().signal,
203
+ specificity: { idCounter: 0, commonCounter: 0 },
204
+ }
205
+
206
+ const res = await cve(state)
207
+ t.strictSame(
208
+ [...res.partial.nodes].map(n => n.name),
209
+ ['e'],
210
+ 'should select packages with any CVE alert',
211
+ )
212
+ })
213
+
214
+ t.test('missing security archive', async t => {
215
+ const getState = (query: string) => {
216
+ const ast = parse(query)
217
+ const current = ast.first.first
218
+ const state: ParserState = {
219
+ comment: '',
220
+ current,
221
+ initial: {
222
+ edges: new Set(),
223
+ nodes: new Set(),
224
+ },
225
+ partial: {
226
+ edges: new Set(),
227
+ nodes: new Set(),
228
+ },
229
+ collect: {
230
+ edges: new Set(),
231
+ nodes: new Set(),
232
+ },
233
+ cancellable: async () => {},
234
+ walk: async i => i,
235
+ retries: 0,
236
+ securityArchive: undefined,
237
+ importers: new Set(),
238
+ signal: new AbortController().signal,
239
+ specificity: { idCounter: 0, commonCounter: 0 },
240
+ }
241
+ return state
242
+ }
243
+
244
+ await t.rejects(
245
+ cve(getState(':cve(CVE-2023-1234)')),
246
+ /Missing security archive/,
247
+ 'should throw an error',
248
+ )
249
+ })