@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
@@ -0,0 +1,266 @@
1
+ import { joinDepIDTuple } from '@vltpkg/dep-id'
2
+ import type { EdgeLike, NodeLike } from '@vltpkg/types'
3
+ import type { Attribute } from 'postcss-selector-parser'
4
+ import t from 'tap'
5
+ import {
6
+ attribute,
7
+ filterAttributes,
8
+ getManifestPropertyValues,
9
+ } from '../src/attribute.ts'
10
+ import {
11
+ getMissingNodeGraph,
12
+ getSimpleGraph,
13
+ } from './fixtures/graph.ts'
14
+ import {
15
+ copyGraphSelectionState,
16
+ getGraphSelectionState,
17
+ selectorFixture,
18
+ } from './fixtures/selector.ts'
19
+ import type { TestCase } from './fixtures/types.ts'
20
+ import type {
21
+ GraphSelectionState,
22
+ ParserState,
23
+ } from '../src/types.ts'
24
+
25
+ type ManifestLike = Record<string, any>
26
+
27
+ const testAttr = selectorFixture(attribute)
28
+
29
+ t.test('attribute', async t => {
30
+ const simpleGraph = getSimpleGraph()
31
+ const all: GraphSelectionState = {
32
+ edges: new Set<EdgeLike>(simpleGraph.edges),
33
+ nodes: new Set<NodeLike>(simpleGraph.nodes.values()),
34
+ }
35
+ const b = getGraphSelectionState(simpleGraph, 'b')
36
+ const empty: GraphSelectionState = {
37
+ edges: new Set(),
38
+ nodes: new Set(),
39
+ }
40
+
41
+ const queryToExpected = new Set<TestCase>([
42
+ [
43
+ '[version="1.0.0"]',
44
+ all,
45
+ ['my-project', 'a', 'c', 'd', 'e', 'f', '@x/y'],
46
+ ], // attribute matches all
47
+ [
48
+ '[name]',
49
+ all,
50
+ ['my-project', 'a', 'b', 'c', 'd', 'e', 'f', '@x/y'],
51
+ ], // attribute has any content
52
+ ['[nonexistingattribute]', all, []], // non existing attribute
53
+ ['[name="@x/y"]', all, ['@x/y']], // attribute matches scoped quoted
54
+ ['[name^=m]', all, ['my-project']], // attribute starts with value
55
+ ['[name^="m"]', all, ['my-project']], // attribute starts with value
56
+ ['[name^=@x]', all, ['@x/y']], // attribute starts with scope
57
+ ['[name^="@x"]', all, ['@x/y']], // attribute starts with scope
58
+ ['[name$=project]', all, ['my-project']], // attribute ends with value
59
+ ['[name$="project"]', all, ['my-project']], // attribute ends with value
60
+ ['[name~=project]', all, ['my-project']], // attribute contains word
61
+ ['[name~="project"]', all, ['my-project']], // attribute contains word
62
+ ['[name~=notfound]', all, []], // attribute contains not found
63
+ ['[name~="notfound"]', all, []], // attribute contains not found
64
+ ['[name*=pro]', all, ['my-project']], // attribute contains string
65
+ ['[name*="pro"]', all, ['my-project']], // attribute contains string
66
+ ['[name|=my]', all, ['my-project']], // attribute starts with hyphened string
67
+ ['[name|="my"]', all, ['my-project']], // attribute starts with hyphened string
68
+ ['[name|="a"]', all, ['a']], // also matches on exact match
69
+ ['[name="A"]', all, []], // case sensitive by default
70
+ ['[name="A" i]', all, ['a']], // case insensitive flag
71
+ ['[name="A" s]', all, []], // case insensitive flag
72
+ ['[name="a"]', empty, []], // no matches if starting from empty partial
73
+ ['[name="a"]', b, []], // no matches if node can't be find in partial
74
+ ['[name="b"]', b, ['b']], // matches single node found
75
+ ['[keywords=something]', all, ['c']], // matches item in array prop
76
+ ['[keywords=missing]', all, []], // can not match missing item in array
77
+ ])
78
+ const initial = {
79
+ edges: new Set(all.edges),
80
+ nodes: new Set(all.nodes),
81
+ }
82
+ for (const [query, partial, expected] of queryToExpected) {
83
+ const res = await testAttr(
84
+ query,
85
+ initial,
86
+ copyGraphSelectionState(partial),
87
+ )
88
+ t.strictSame(
89
+ res.nodes.map(i => i.name),
90
+ expected,
91
+ `query > "${query}"`,
92
+ )
93
+ t.matchSnapshot(
94
+ {
95
+ edges: res.edges.map(i => i.name).sort(),
96
+ nodes: res.nodes.map(i => i.name).sort(),
97
+ },
98
+ `query > "${query}"`,
99
+ )
100
+ }
101
+
102
+ await t.test('missing node', async t => {
103
+ const missingNodeGraph = getMissingNodeGraph()
104
+ const all: GraphSelectionState = {
105
+ edges: new Set<EdgeLike>(missingNodeGraph.edges),
106
+ nodes: new Set<NodeLike>(missingNodeGraph.nodes.values()),
107
+ }
108
+ const queryToExpected = new Set<TestCase>([
109
+ ['[name]', all, ['node-missing-project']], // root node has a name
110
+ ['[name=a]', all, []], // can't match missing node
111
+ ])
112
+ const initial = copyGraphSelectionState(all)
113
+ for (const [query, partial, expected] of queryToExpected) {
114
+ const res = await testAttr(
115
+ query,
116
+ initial,
117
+ copyGraphSelectionState(partial),
118
+ )
119
+ t.strictSame(
120
+ res.nodes.map(i => i.name),
121
+ expected,
122
+ `query > "${query}"`,
123
+ )
124
+ t.matchSnapshot(
125
+ {
126
+ edges: res.edges.map(i => i.name).sort(),
127
+ nodes: res.nodes.map(i => i.name).sort(),
128
+ },
129
+ `query > "${query}"`,
130
+ )
131
+ }
132
+ })
133
+ })
134
+
135
+ t.test('bad selector type', async t => {
136
+ await t.rejects(
137
+ testAttr(':dev'),
138
+ /Mismatching query node/,
139
+ 'should throw an error',
140
+ )
141
+ })
142
+
143
+ t.test('bad operator', async t => {
144
+ await t.rejects(
145
+ testAttr('[name==foo]'),
146
+ /Unsupported attribute operator: +=/,
147
+ 'should throw an error',
148
+ )
149
+ })
150
+
151
+ t.test('bad operator [loose mode]', async t => {
152
+ await t.resolves(
153
+ testAttr('[name==foo]', undefined, undefined, true),
154
+ 'should resolve with no error',
155
+ )
156
+ })
157
+
158
+ t.test(
159
+ 'unquotted scoped names are not supported by the parser',
160
+ async t => {
161
+ await t.rejects(
162
+ testAttr('[name=@x/y]'),
163
+ /Unexpected "\/" found./,
164
+ 'should throw an error',
165
+ )
166
+ },
167
+ )
168
+
169
+ t.test('getManifestPropertyValues', async t => {
170
+ const simpleGraph = getSimpleGraph()
171
+ const b = simpleGraph.nodes.get(
172
+ joinDepIDTuple(['registry', '', 'b@1.0.0']),
173
+ )!
174
+
175
+ t.strictSame(
176
+ getManifestPropertyValues(
177
+ b,
178
+ ['scripts', 'postinstall'],
179
+ 'postinstall',
180
+ ),
181
+ ['postinstall'],
182
+ 'should return the postinstall script value',
183
+ )
184
+
185
+ t.strictSame(
186
+ getManifestPropertyValues(b, ['contributors'], 'contributors'),
187
+ ['[object Object]'],
188
+ 'should return a stringified object value',
189
+ )
190
+
191
+ t.strictSame(
192
+ getManifestPropertyValues(b, ['contributors', 'name'], 'name'),
193
+ ['Ruy Adorno'],
194
+ 'should return the value from a array-nested object',
195
+ )
196
+
197
+ b.manifest = { foo: 1 } as ManifestLike
198
+ t.strictSame(
199
+ getManifestPropertyValues(b, ['foo'], 'foo'),
200
+ ['1'],
201
+ 'should return values as strings',
202
+ )
203
+
204
+ b.manifest = { keywords: [undefined, 'foo'] } as ManifestLike
205
+ t.strictSame(
206
+ getManifestPropertyValues(b, ['keywords'], 'keywords'),
207
+ ['', 'foo'],
208
+ 'should turn falsy values into empty strings',
209
+ )
210
+
211
+ b.manifest = 'bad manifest' as unknown as ManifestLike
212
+ t.strictSame(
213
+ getManifestPropertyValues(b, ['name'], 'name'),
214
+ undefined,
215
+ 'should not return results from a bad manifest',
216
+ )
217
+
218
+ delete b.manifest
219
+ t.strictSame(
220
+ getManifestPropertyValues(b, ['name'], 'name'),
221
+ undefined,
222
+ 'should not return results from a missing manifest',
223
+ )
224
+ })
225
+
226
+ t.test('filterAttributes', async t => {
227
+ const simpleGraph = getSimpleGraph()
228
+ const all: GraphSelectionState = {
229
+ edges: new Set<EdgeLike>(simpleGraph.edges),
230
+ nodes: new Set<NodeLike>(simpleGraph.nodes.values()),
231
+ }
232
+ const state = {
233
+ cancellable: async () => {},
234
+ collect: {
235
+ edges: new Set<EdgeLike>(),
236
+ nodes: new Set<NodeLike>(),
237
+ },
238
+ comment: '',
239
+ current: { type: 'attribute', value: 'postinstall' } as Attribute,
240
+ initial: copyGraphSelectionState(all),
241
+ partial: all,
242
+ loose: false,
243
+ importers: simpleGraph.importers,
244
+ hostContexts: new Map(),
245
+ walk: async (state: ParserState) => state,
246
+ retries: 0,
247
+ securityArchive: undefined,
248
+ signal: new AbortController().signal,
249
+ specificity: { idCounter: 0, commonCounter: 0 },
250
+ }
251
+ filterAttributes(
252
+ state,
253
+ (attr: string) => !!attr,
254
+ 'postinstall',
255
+ 'scripts',
256
+ false,
257
+ ['scripts', 'postinstall'],
258
+ )
259
+ t.matchSnapshot(
260
+ {
261
+ edges: [...state.partial.edges].map(i => i.name).sort(),
262
+ nodes: [...state.partial.nodes].map(i => i.name).sort(),
263
+ },
264
+ 'should have filtered out nodes with postinstall script only',
265
+ )
266
+ })
@@ -0,0 +1,168 @@
1
+ import t from 'tap'
2
+ import { combinator } from '../src/combinator.ts'
3
+ import { walk } from '../src/index.ts'
4
+ import { getCycleGraph, getSimpleGraph } from './fixtures/graph.ts'
5
+ import {
6
+ copyGraphSelectionState,
7
+ getGraphSelectionState,
8
+ selectorFixture,
9
+ } from './fixtures/selector.ts'
10
+ import type { TestCase } from './fixtures/types.ts'
11
+ import type { EdgeLike, NodeLike } from '@vltpkg/types'
12
+ import type { GraphSelectionState } from '../src/types.ts'
13
+
14
+ const testCombinator = selectorFixture(combinator)
15
+
16
+ t.test('combinator', async t => {
17
+ const simpleGraph = getSimpleGraph()
18
+ const all: GraphSelectionState = {
19
+ edges: new Set<EdgeLike>(simpleGraph.edges),
20
+ nodes: new Set<NodeLike>(simpleGraph.nodes.values()),
21
+ }
22
+ const root = {
23
+ edges: new Set<EdgeLike>(),
24
+ nodes: new Set<NodeLike>([simpleGraph.mainImporter]),
25
+ }
26
+ const b = getGraphSelectionState(simpleGraph, 'b')
27
+ const d = getGraphSelectionState(simpleGraph, 'd')
28
+ const bd: GraphSelectionState = {
29
+ edges: new Set<EdgeLike>([...b.edges, ...d.edges]),
30
+ nodes: new Set<NodeLike>([...b.nodes, ...d.nodes]),
31
+ }
32
+ const e = getGraphSelectionState(simpleGraph, 'e')
33
+ const f = getGraphSelectionState(simpleGraph, 'f')
34
+ const empty: GraphSelectionState = {
35
+ edges: new Set(),
36
+ nodes: new Set(),
37
+ }
38
+ const queryToExpected = new Set<TestCase>([
39
+ // child combinator
40
+ ['>', all, ['a', 'b', 'e', '@x/y', 'c', 'd', 'f']], // direct children of all nodes
41
+ ['>', root, ['a', 'b', 'e', '@x/y']], // from root
42
+ ['>', d, ['e', 'f']], // from transitive dep
43
+ ['>', bd, ['c', 'd', 'e', 'f']], // from mutiple deps
44
+ ['>', e, []], // from node with no deps
45
+ ['>', empty, []], // from empty nodes
46
+ // subsequent sibling combinator
47
+ ['~', all, ['b', 'e', '@x/y', 'a', 'd', 'c', 'f']], // siblings of all nodes
48
+ ['~', f, ['e']], // leaf node with a sibling
49
+ ['~', d, ['c']], // transitive node
50
+ ['~', e, ['a', 'b', '@x/y', 'f']], // node with siblings at multiple locations
51
+ ['~', root, []], // root has no siblings
52
+ ['~', empty, []], // sibling of empty nodes
53
+ // descendent combinator
54
+ [' ', root, ['a', 'b', 'e', '@x/y', 'c', 'd', 'f']], // from root
55
+ [' ', f, []], // leaf node
56
+ [' ', empty, []], // empty list of nodes
57
+ [' ', d, ['e', 'f']], // transitive node
58
+ [' ', b, ['c', 'd', 'e', 'f']], // direct dep
59
+ ])
60
+ const initial = copyGraphSelectionState(all)
61
+ for (const [query, partial, expected] of queryToExpected) {
62
+ const res = await testCombinator(
63
+ { value: query, type: 'combinator' },
64
+ initial,
65
+ copyGraphSelectionState(partial),
66
+ )
67
+ t.strictSame(
68
+ res.nodes.map(i => i.name),
69
+ expected,
70
+ `query > "${query}"`,
71
+ )
72
+ t.matchSnapshot(
73
+ {
74
+ edges: res.edges.map(i => i.name).sort(),
75
+ nodes: res.nodes.map(i => i.name).sort(),
76
+ },
77
+ `query > "${query}"`,
78
+ )
79
+ }
80
+
81
+ await t.test('cycle', async t => {
82
+ const cycleGraph = getCycleGraph()
83
+ const all: GraphSelectionState = {
84
+ edges: new Set<EdgeLike>(cycleGraph.edges),
85
+ nodes: new Set<NodeLike>(cycleGraph.nodes.values()),
86
+ }
87
+ const root = {
88
+ edges: new Set<EdgeLike>(),
89
+ nodes: new Set<NodeLike>([cycleGraph.mainImporter]),
90
+ }
91
+ const a = getGraphSelectionState(cycleGraph, 'a')
92
+ const b = getGraphSelectionState(cycleGraph, 'b')
93
+ const queryToExpected = new Set<TestCase>([
94
+ ['>', all, ['a', 'b']], // direct children of all nodes
95
+ ['>', a, ['b']], // direct children of a
96
+ ['>', b, ['a']], // direct children of b
97
+ [' ', root, ['a', 'b']], // descendents of :root
98
+ [' ', a, ['b', 'a']], // descendents of a
99
+ [' ', b, ['a', 'b']], // descendents of b
100
+ ['~', root, []], // siblings of :root
101
+ ['~', a, []], // siblings of a
102
+ ['~', b, []], // siblings of b
103
+ ])
104
+ const initial = copyGraphSelectionState(all)
105
+ for (const [query, partial, expected] of queryToExpected) {
106
+ const result = await testCombinator(
107
+ { value: query, type: 'combinator' },
108
+ initial,
109
+ copyGraphSelectionState(partial),
110
+ )
111
+ t.strictSame(
112
+ result.nodes.map(i => i.name),
113
+ expected,
114
+ `query > "${query}"`,
115
+ )
116
+ t.matchSnapshot(
117
+ {
118
+ edges: result.edges.map(i => i.name).sort(),
119
+ nodes: result.nodes.map(i => i.name).sort(),
120
+ },
121
+ `query > "${query}"`,
122
+ )
123
+ }
124
+ })
125
+
126
+ // space between tags are not descendent combinators
127
+ await t.test('ignore spaces between tags', async t => {
128
+ const test = selectorFixture(walk)
129
+ const result = await test(
130
+ '* { * }',
131
+ all,
132
+ copyGraphSelectionState(all),
133
+ )
134
+ t.strictSame(
135
+ result.nodes.map(i => i.name),
136
+ [...all.nodes].map(i => i.name),
137
+ 'should not treat spaces between tags as descendent combinators',
138
+ )
139
+ })
140
+ })
141
+
142
+ t.test('bad selector type', async t => {
143
+ await t.rejects(
144
+ testCombinator(':dev'),
145
+ /Mismatching query node/,
146
+ 'should throw an error',
147
+ )
148
+ })
149
+
150
+ t.test('usnupported combinator', async t => {
151
+ await t.rejects(
152
+ testCombinator({ value: '+', type: 'combinator' }),
153
+ /Unsupported combinator: \+/,
154
+ 'should throw an error',
155
+ )
156
+ })
157
+
158
+ t.test('usnupported combinator [loose mode]', async t => {
159
+ await t.resolves(
160
+ testCombinator(
161
+ { value: '+', type: 'combinator' },
162
+ undefined,
163
+ undefined,
164
+ true,
165
+ ),
166
+ 'should resolve with no error',
167
+ )
168
+ })