@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,146 @@
1
+ import { minimatch } from 'minimatch'
2
+ import { error } from '@vltpkg/error-cause'
3
+ import { splitDepID } from '@vltpkg/dep-id/browser'
4
+ import { asError } from '@vltpkg/types'
5
+ import {
6
+ asPostcssNodeWithChildren,
7
+ asStringNode,
8
+ isStringNode,
9
+ } from '@vltpkg/dss-parser'
10
+ import {
11
+ removeNode,
12
+ removeDanglingEdges,
13
+ removeQuotes,
14
+ clear,
15
+ } from './helpers.ts'
16
+ import type { ParserState } from '../types.ts'
17
+
18
+ /**
19
+ * Normalizes a path by trimming whitespace and removing leading './' or '.' prefix.
20
+ * This ensures consistent path comparison regardless of how paths are specified.
21
+ */
22
+ export function normalizePath(path: string): string {
23
+ const trimmed = path.trim().replaceAll('\\', '/')
24
+
25
+ if (trimmed === '.') {
26
+ return ''
27
+ }
28
+
29
+ if (trimmed.startsWith('./')) {
30
+ return trimmed.slice(2)
31
+ }
32
+
33
+ return trimmed
34
+ }
35
+
36
+ /**
37
+ * Creates a path matcher function that tests if
38
+ * a given path matches a glob pattern.
39
+ */
40
+ export function createPathMatcher(pattern: string, loose = false) {
41
+ const normalizedPattern = normalizePath(pattern)
42
+ const isRoot = normalizedPattern === '' || pattern.trim() === '.'
43
+
44
+ return (path: string) => {
45
+ const normalizedPath = normalizePath(path)
46
+
47
+ if (isRoot) {
48
+ return normalizedPath === '' || normalizedPath === '.'
49
+ }
50
+ try {
51
+ return minimatch(normalizedPath, normalizedPattern, {
52
+ dot: true,
53
+ nocase: false,
54
+ matchBase: normalizedPattern === '*',
55
+ })
56
+ } catch (err) {
57
+ // In loose mode, return false for invalid patterns
58
+ if (loose) {
59
+ return false
60
+ }
61
+ // In strict mode, throw an error
62
+ throw error(
63
+ 'Invalid glob pattern in :path selector',
64
+ asError(err),
65
+ )
66
+ }
67
+ }
68
+ }
69
+
70
+ /**
71
+ * :path("glob") Pseudo-Selector will match only workspace & file
72
+ * nodes whose file path matches the provided glob pattern relative
73
+ * to the project root. Path patterns must be quoted strings to avoid
74
+ * parser conflicts with special characters.
75
+ */
76
+ export const path = async (state: ParserState) => {
77
+ // Extract path container and handle empty parameters
78
+ const pathContainer = asPostcssNodeWithChildren(state.current)
79
+ if (!pathContainer.nodes[0]) {
80
+ return clear(state)
81
+ }
82
+
83
+ // Extract the selector node and handle empty selectors
84
+ const selector = asPostcssNodeWithChildren(pathContainer.nodes[0])
85
+ if (!selector.nodes[0]) {
86
+ return clear(state)
87
+ }
88
+
89
+ // Extract and validate the path pattern
90
+ let pathPattern = ''
91
+ if (isStringNode(selector.nodes[0])) {
92
+ pathPattern = removeQuotes(asStringNode(selector.nodes[0]).value)
93
+ } else {
94
+ if (state.loose) {
95
+ return clear(state)
96
+ }
97
+ throw error(
98
+ 'Failed to parse path pattern in :path selector',
99
+ new Error('Path pattern must be a quoted string'),
100
+ )
101
+ }
102
+
103
+ // If no pattern provided, match nothing
104
+ if (!pathPattern) {
105
+ return clear(state)
106
+ }
107
+
108
+ // Check for unmatched brackets
109
+ if (
110
+ pathPattern === '[' ||
111
+ (pathPattern.includes('[') && !pathPattern.includes(']'))
112
+ ) {
113
+ if (state.loose) {
114
+ return clear(state)
115
+ }
116
+ throw error(
117
+ 'Invalid glob pattern in :path selector',
118
+ new Error(`Unmatched bracket in pattern: ${pathPattern}`),
119
+ )
120
+ }
121
+
122
+ // Create path matcher function
123
+ const matchPath = createPathMatcher(pathPattern, state.loose)
124
+
125
+ // Filter nodes by path
126
+ for (const node of state.partial.nodes) {
127
+ /* c8 ignore next */
128
+ const nodePath = node.location || ''
129
+ const [type] = splitDepID(node.id)
130
+
131
+ // Special case for main importer with root path pattern
132
+ if (pathPattern === '.' && node.mainImporter) {
133
+ continue // Keep main importer node for root path pattern
134
+ }
135
+
136
+ // Only match workspace or file nodes with matching paths
137
+ const pathBased = type === 'workspace' || type === 'file'
138
+ if (!pathBased || !matchPath(nodePath)) {
139
+ removeNode(state, node)
140
+ }
141
+ }
142
+
143
+ // Clean up any dangling edges
144
+ removeDanglingEdges(state)
145
+ return state
146
+ }
@@ -0,0 +1,18 @@
1
+ import type { ParserState } from '../types.ts'
2
+ import { removeEdge, removeUnlinkedNodes } from './helpers.ts'
3
+
4
+ /**
5
+ * :peer Pseudo-Selector will only match peer dependencies.
6
+ */
7
+ export const peer = async (state: ParserState) => {
8
+ // filter edges that aren't marked as peer
9
+ for (const edge of state.partial.edges) {
10
+ if (!edge.peer) {
11
+ removeEdge(state, edge)
12
+ }
13
+ }
14
+
15
+ removeUnlinkedNodes(state)
16
+
17
+ return state
18
+ }
@@ -0,0 +1,47 @@
1
+ import { parse } from '@vltpkg/semver'
2
+ import { removeNode, removeDanglingEdges } from './helpers.ts'
3
+ import type { ParserState } from '../types.ts'
4
+
5
+ /**
6
+ * :prerelease Pseudo-selector, matches only nodes that have prerelease
7
+ * elements in their parsed semver value.
8
+ *
9
+ * Examples of versions that should match:
10
+ * - 19.2.0-canary-fa3feba6-20250623
11
+ * - 1.0.0-beta.0
12
+ * - 0.0.0-16
13
+ * - 1.2.3-rc.1+rev.2
14
+ *
15
+ * Examples of versions that should NOT match:
16
+ * - 1.0.0
17
+ * - 99.9.9
18
+ * - 0.0.1
19
+ */
20
+ export const prerelease = async (state: ParserState) => {
21
+ for (const node of state.partial.nodes) {
22
+ const version = node.manifest?.version
23
+
24
+ // Skip nodes without a version (like root/importer nodes)
25
+ if (!version) {
26
+ removeNode(state, node)
27
+ continue
28
+ }
29
+
30
+ const parsedVersion = parse(version)
31
+ if (!parsedVersion) {
32
+ // Remove nodes with invalid semver versions
33
+ removeNode(state, node)
34
+ continue
35
+ }
36
+
37
+ // Check if the version has prerelease identifiers
38
+ if (!parsedVersion.prerelease?.length) {
39
+ // Remove nodes that don't have prerelease identifiers
40
+ removeNode(state, node)
41
+ }
42
+ }
43
+
44
+ removeDanglingEdges(state)
45
+
46
+ return state
47
+ }
@@ -0,0 +1,19 @@
1
+ import { asManifest } from '@vltpkg/types'
2
+ import type { ParserState } from '../types.ts'
3
+ import { removeNode, removeDanglingEdges } from './helpers.ts'
4
+
5
+ /**
6
+ * :private Pseudo-Selector will only match packages that have
7
+ * a `private: true` key set in their `package.json` metadata.
8
+ */
9
+ export const privateParser = async (state: ParserState) => {
10
+ for (const node of state.partial.nodes) {
11
+ if (!node.manifest || !asManifest(node.manifest).private) {
12
+ removeNode(state, node)
13
+ }
14
+ }
15
+
16
+ removeDanglingEdges(state)
17
+
18
+ return state
19
+ }
@@ -0,0 +1,18 @@
1
+ import type { ParserState } from '../types.ts'
2
+ import { removeEdge, removeUnlinkedNodes } from './helpers.ts'
3
+
4
+ /**
5
+ * :prod Pseudo-Selector will only match production dependencies.
6
+ */
7
+ export const prod = async (state: ParserState) => {
8
+ // filter edges that don't have type 'prod'
9
+ for (const edge of state.partial.edges) {
10
+ if (edge.type !== 'prod') {
11
+ removeEdge(state, edge)
12
+ }
13
+ }
14
+
15
+ removeUnlinkedNodes(state)
16
+
17
+ return state
18
+ }
@@ -0,0 +1,248 @@
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 { asError } from '@vltpkg/types'
5
+ import {
6
+ asPostcssNodeWithChildren,
7
+ asStringNode,
8
+ asTagNode,
9
+ isStringNode,
10
+ isTagNode,
11
+ } from '@vltpkg/dss-parser'
12
+ import {
13
+ removeDanglingEdges,
14
+ removeNode,
15
+ removeQuotes,
16
+ } from './helpers.ts'
17
+ import type { NodeLike, Packument } from '@vltpkg/types'
18
+ import type { ParserState } from '../types.ts'
19
+ import type { PostcssNode } from '@vltpkg/dss-parser'
20
+
21
+ /**
22
+ * The possible comparator values accepted by the :published() pseudo selector.
23
+ */
24
+ export type PublishedComparator = '>' | '<' | '>=' | '<=' | undefined
25
+
26
+ /**
27
+ * Result of the internal parsing of the :published() pseudo selector.
28
+ */
29
+ export type PublishedInternals = {
30
+ relativeDate: string
31
+ comparator: PublishedComparator
32
+ }
33
+
34
+ /**
35
+ * Fetches the published date of a package version from the npm registry.
36
+ */
37
+ export const retrieveRemoteDate = async (
38
+ node: NodeLike,
39
+ signal?: AbortSignal,
40
+ ): Promise<string | undefined> => {
41
+ const spec = hydrate(node.id, String(node.name), node.options)
42
+ if (!spec.registry || !node.name || !node.version) {
43
+ return undefined
44
+ }
45
+
46
+ const url = new URL(spec.registry)
47
+ url.pathname = `/${node.name}`
48
+
49
+ const response = await fetch(String(url), {
50
+ signal,
51
+ })
52
+ // on missing valid auth or API, it should abort the retry logic
53
+ if (response.status === 404) {
54
+ throw new AbortError('Missing API')
55
+ }
56
+ if (!response.ok) {
57
+ throw error('Failed to fetch packument', {
58
+ name: node.name,
59
+ spec,
60
+ response,
61
+ })
62
+ }
63
+ const packument = (await response.json()) as Packument
64
+ const res = packument.time?.[node.version]
65
+ return res
66
+ }
67
+
68
+ /**
69
+ * Retrieves what kind of check the :published selector should perform.
70
+ */
71
+ export const parseInternals = (
72
+ nodes: PostcssNode[],
73
+ ): PublishedInternals => {
74
+ let value = ''
75
+
76
+ if (isStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])) {
77
+ value = removeQuotes(
78
+ asStringNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])
79
+ .value,
80
+ )
81
+ } else if (
82
+ isTagNode(asPostcssNodeWithChildren(nodes[0]).nodes[0])
83
+ ) {
84
+ const tagNode = asTagNode(
85
+ asPostcssNodeWithChildren(nodes[0]).nodes[0],
86
+ )
87
+ value = tagNode.value
88
+ }
89
+
90
+ // Check if the value starts with a comparator
91
+ let comparator: PublishedComparator
92
+ let relativeDate = value
93
+
94
+ if (value.startsWith('>=')) {
95
+ comparator = '>='
96
+ relativeDate = value.slice(2)
97
+ } else if (value.startsWith('<=')) {
98
+ comparator = '<='
99
+ relativeDate = value.slice(2)
100
+ } else if (value.startsWith('>')) {
101
+ comparator = '>'
102
+ relativeDate = value.slice(1)
103
+ } else if (value.startsWith('<')) {
104
+ comparator = '<'
105
+ relativeDate = value.slice(1)
106
+ }
107
+
108
+ return { relativeDate, comparator }
109
+ }
110
+
111
+ /**
112
+ * Filter nodes by queueing up for removal those that don't match the date criteria.
113
+ */
114
+ export const queueNode = async (
115
+ state: ParserState,
116
+ node: NodeLike,
117
+ relativeDate: string,
118
+ comparator: PublishedComparator,
119
+ ): Promise<NodeLike | undefined> => {
120
+ if (!node.name || !node.version) {
121
+ return node
122
+ }
123
+
124
+ let publishedDate: string | undefined
125
+ try {
126
+ publishedDate = await pRetry(
127
+ () => retrieveRemoteDate(node, state.signal),
128
+ {
129
+ retries: state.retries,
130
+ signal: state.signal,
131
+ },
132
+ )
133
+ } catch (err) {
134
+ // eslint-disable-next-line no-console
135
+ console.warn(
136
+ error('Could not retrieve registry publish date', {
137
+ name: node.name,
138
+ cause: err,
139
+ }),
140
+ )
141
+ return node
142
+ }
143
+
144
+ if (!publishedDate) {
145
+ return node
146
+ }
147
+
148
+ // only matches the same amount of date information
149
+ // as provided in the relative date
150
+ const nodeDate = new Date(
151
+ publishedDate.slice(0, relativeDate.length),
152
+ )
153
+ const compareDate = new Date(relativeDate)
154
+
155
+ switch (comparator) {
156
+ case '>':
157
+ return nodeDate > compareDate ? undefined : node
158
+ case '<':
159
+ return nodeDate < compareDate ? undefined : node
160
+ case '>=':
161
+ return nodeDate >= compareDate ? undefined : node
162
+ case '<=':
163
+ return nodeDate <= compareDate ? undefined : node
164
+ default:
165
+ return nodeDate.getTime() === compareDate.getTime() ?
166
+ undefined
167
+ : node
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Filters out nodes that don't match the published date criteria.
173
+ *
174
+ * The :published() pseudo selector supports a date parameter that can be prefixed
175
+ * with a comparator (>, <, >=, <=). If no comparator is provided, it will match
176
+ * exact dates.
177
+ *
178
+ * Examples:
179
+ * - :published("2024-01-01") - Matches packages published exactly on January 1st, 2024
180
+ * - :published(">2024-01-01") - Matches packages published after January 1st, 2024
181
+ * - :published("<=2023-12-31") - Matches packages published on or before December 31st, 2023
182
+ */
183
+ export const published = async (state: ParserState) => {
184
+ let internals
185
+ try {
186
+ internals = parseInternals(
187
+ asPostcssNodeWithChildren(state.current).nodes,
188
+ )
189
+ } catch (err) {
190
+ if (asError(err).message === 'Expected a query node') {
191
+ // No parameters provided - pseudo state form: match ANY published metadata
192
+ for (const node of state.partial.nodes) {
193
+ // filter out nodes that are always ignored by the published selector
194
+ if (
195
+ node.mainImporter ||
196
+ node.manifest?.private ||
197
+ splitDepID(node.id)[0] !== 'registry'
198
+ ) {
199
+ removeNode(state, node)
200
+ continue
201
+ }
202
+
203
+ // For pseudo state form, we just check if the node has published metadata
204
+ // This is equivalent to checking if it's a registry package with version info
205
+ if (!node.name || !node.version) {
206
+ removeNode(state, node)
207
+ }
208
+ }
209
+ removeDanglingEdges(state)
210
+ return state
211
+ } else {
212
+ throw error('Failed to parse :published selector', {
213
+ cause: err,
214
+ })
215
+ }
216
+ }
217
+
218
+ const { relativeDate, comparator } = internals
219
+ const queue = []
220
+
221
+ for (const node of state.partial.nodes) {
222
+ // filter out nodes that are always ignored by the published selector
223
+ if (
224
+ node.mainImporter ||
225
+ node.manifest?.private ||
226
+ splitDepID(node.id)[0] !== 'registry'
227
+ ) {
228
+ removeNode(state, node)
229
+ continue
230
+ }
231
+
232
+ // fetch published date info and perform checks to define
233
+ // whether or not a node should be filtered out
234
+ queue.push(queueNode(state, node, relativeDate, comparator))
235
+ }
236
+
237
+ // nodes queued for removal are then finally removed
238
+ const removeNodeQueue = await Promise.all(queue)
239
+ for (const node of removeNodeQueue) {
240
+ if (node) {
241
+ removeNode(state, node)
242
+ }
243
+ }
244
+
245
+ removeDanglingEdges(state)
246
+
247
+ return state
248
+ }
@@ -0,0 +1,29 @@
1
+ import { splitDepID } from '@vltpkg/dep-id/browser'
2
+ import {
3
+ asPostcssNodeWithChildren,
4
+ asTagNode,
5
+ } from '@vltpkg/dss-parser'
6
+ import { removeDanglingEdges, removeNode } from './helpers.ts'
7
+ import type { ParserState } from '../types.ts'
8
+
9
+ /**
10
+ * :registry(name) Pseudo-Selector, matches only nodes that
11
+ * belong to the specified registry configuration alias.
12
+ *
13
+ * For example, `:registry(npm)` matches deps from the default
14
+ * npm registry, and `:registry(custom)` matches deps from a
15
+ * custom-named registry.
16
+ */
17
+ export const registry = async (state: ParserState) => {
18
+ const top = asPostcssNodeWithChildren(state.current)
19
+ const selector = asPostcssNodeWithChildren(top.nodes[0])
20
+ const name = asTagNode(selector.nodes[0]).value
21
+ for (const node of state.partial.nodes) {
22
+ const tuple = splitDepID(node.id)
23
+ if (tuple[0] !== 'registry' || tuple[1] !== name) {
24
+ removeNode(state, node)
25
+ }
26
+ }
27
+ removeDanglingEdges(state)
28
+ return state
29
+ }
@@ -0,0 +1,19 @@
1
+ import type { ParserState } from '../types.ts'
2
+
3
+ /**
4
+ * :root Pseudo-Element will return the project root node for the graph.
5
+ * It matches only nodes marked as `mainImporter`.
6
+ */
7
+ export const root = async (state: ParserState) => {
8
+ for (const edge of state.partial.edges) {
9
+ if (!edge.to?.mainImporter) {
10
+ state.partial.edges.delete(edge)
11
+ }
12
+ }
13
+ for (const node of state.partial.nodes) {
14
+ if (!node.mainImporter) {
15
+ state.partial.nodes.delete(node)
16
+ }
17
+ }
18
+ return state
19
+ }
@@ -0,0 +1,20 @@
1
+ import { removeDanglingEdges, removeNode } from './helpers.ts'
2
+ import type { ParserState } from '../types.ts'
3
+
4
+ /**
5
+ * :scanned pseudo selector.
6
+ *
7
+ * Remove all nodes that do not have available metadata
8
+ * in the security archive.
9
+ */
10
+ export const scanned = async (state: ParserState) => {
11
+ for (const node of state.partial.nodes) {
12
+ if (!state.securityArchive?.has(node.id)) {
13
+ removeNode(state, node)
14
+ }
15
+ }
16
+
17
+ removeDanglingEdges(state)
18
+
19
+ return state
20
+ }