@vltpkg/query 0.0.0-2 → 0.0.0-20

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 (234) hide show
  1. package/README.md +39 -82
  2. package/dist/esm/attribute.d.ts.map +1 -1
  3. package/dist/esm/attribute.js +8 -13
  4. package/dist/esm/attribute.js.map +1 -1
  5. package/dist/esm/combinator.d.ts.map +1 -1
  6. package/dist/esm/combinator.js +5 -2
  7. package/dist/esm/combinator.js.map +1 -1
  8. package/dist/esm/id.d.ts.map +1 -1
  9. package/dist/esm/id.js +23 -7
  10. package/dist/esm/id.js.map +1 -1
  11. package/dist/esm/index.d.ts +35 -3
  12. package/dist/esm/index.d.ts.map +1 -1
  13. package/dist/esm/index.js +280 -16
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/parser.d.ts +15 -0
  16. package/dist/esm/parser.d.ts.map +1 -0
  17. package/dist/esm/parser.js +93 -0
  18. package/dist/esm/parser.js.map +1 -0
  19. package/dist/esm/pseudo/abandoned.d.ts +7 -0
  20. package/dist/esm/pseudo/abandoned.d.ts.map +1 -0
  21. package/dist/esm/pseudo/abandoned.js +6 -0
  22. package/dist/esm/pseudo/abandoned.js.map +1 -0
  23. package/dist/esm/pseudo/attr.d.ts +2 -1
  24. package/dist/esm/pseudo/attr.d.ts.map +1 -1
  25. package/dist/esm/pseudo/attr.js +10 -2
  26. package/dist/esm/pseudo/attr.js.map +1 -1
  27. package/dist/esm/pseudo/confused.d.ts +9 -0
  28. package/dist/esm/pseudo/confused.d.ts.map +1 -0
  29. package/dist/esm/pseudo/confused.js +19 -0
  30. package/dist/esm/pseudo/confused.js.map +1 -0
  31. package/dist/esm/pseudo/cve.d.ts +13 -0
  32. package/dist/esm/pseudo/cve.d.ts.map +1 -0
  33. package/dist/esm/pseudo/cve.js +44 -0
  34. package/dist/esm/pseudo/cve.js.map +1 -0
  35. package/dist/esm/pseudo/cwe.d.ts +13 -0
  36. package/dist/esm/pseudo/cwe.d.ts.map +1 -0
  37. package/dist/esm/pseudo/cwe.js +43 -0
  38. package/dist/esm/pseudo/cwe.js.map +1 -0
  39. package/dist/esm/pseudo/debug.d.ts +7 -0
  40. package/dist/esm/pseudo/debug.d.ts.map +1 -0
  41. package/dist/esm/pseudo/debug.js +6 -0
  42. package/dist/esm/pseudo/debug.js.map +1 -0
  43. package/dist/esm/pseudo/deprecated.d.ts +7 -0
  44. package/dist/esm/pseudo/deprecated.d.ts.map +1 -0
  45. package/dist/esm/pseudo/deprecated.js +6 -0
  46. package/dist/esm/pseudo/deprecated.js.map +1 -0
  47. package/dist/esm/pseudo/dev.d.ts +6 -0
  48. package/dist/esm/pseudo/dev.d.ts.map +1 -0
  49. package/dist/esm/pseudo/dev.js +15 -0
  50. package/dist/esm/pseudo/dev.js.map +1 -0
  51. package/dist/esm/pseudo/dynamic.d.ts +7 -0
  52. package/dist/esm/pseudo/dynamic.d.ts.map +1 -0
  53. package/dist/esm/pseudo/dynamic.js +6 -0
  54. package/dist/esm/pseudo/dynamic.js.map +1 -0
  55. package/dist/esm/pseudo/empty.d.ts +7 -0
  56. package/dist/esm/pseudo/empty.d.ts.map +1 -0
  57. package/dist/esm/pseudo/empty.js +14 -0
  58. package/dist/esm/pseudo/empty.js.map +1 -0
  59. package/dist/esm/pseudo/entropic.d.ts +7 -0
  60. package/dist/esm/pseudo/entropic.d.ts.map +1 -0
  61. package/dist/esm/pseudo/entropic.js +6 -0
  62. package/dist/esm/pseudo/entropic.js.map +1 -0
  63. package/dist/esm/pseudo/env.d.ts +7 -0
  64. package/dist/esm/pseudo/env.d.ts.map +1 -0
  65. package/dist/esm/pseudo/env.js +6 -0
  66. package/dist/esm/pseudo/env.js.map +1 -0
  67. package/dist/esm/pseudo/eval.d.ts +7 -0
  68. package/dist/esm/pseudo/eval.d.ts.map +1 -0
  69. package/dist/esm/pseudo/eval.js +6 -0
  70. package/dist/esm/pseudo/eval.js.map +1 -0
  71. package/dist/esm/pseudo/fs.d.ts +7 -0
  72. package/dist/esm/pseudo/fs.d.ts.map +1 -0
  73. package/dist/esm/pseudo/fs.js +6 -0
  74. package/dist/esm/pseudo/fs.js.map +1 -0
  75. package/dist/esm/pseudo/helpers.d.ts +25 -1
  76. package/dist/esm/pseudo/helpers.d.ts.map +1 -1
  77. package/dist/esm/pseudo/helpers.js +53 -0
  78. package/dist/esm/pseudo/helpers.js.map +1 -1
  79. package/dist/esm/pseudo/license.d.ts +13 -0
  80. package/dist/esm/pseudo/license.d.ts.map +1 -0
  81. package/dist/esm/pseudo/license.js +58 -0
  82. package/dist/esm/pseudo/license.js.map +1 -0
  83. package/dist/esm/pseudo/link.d.ts +9 -0
  84. package/dist/esm/pseudo/link.d.ts.map +1 -0
  85. package/dist/esm/pseudo/link.js +25 -0
  86. package/dist/esm/pseudo/link.js.map +1 -0
  87. package/dist/esm/pseudo/malware.d.ts +15 -0
  88. package/dist/esm/pseudo/malware.d.ts.map +1 -0
  89. package/dist/esm/pseudo/malware.js +165 -0
  90. package/dist/esm/pseudo/malware.js.map +1 -0
  91. package/dist/esm/pseudo/minified.d.ts +7 -0
  92. package/dist/esm/pseudo/minified.d.ts.map +1 -0
  93. package/dist/esm/pseudo/minified.js +6 -0
  94. package/dist/esm/pseudo/minified.js.map +1 -0
  95. package/dist/esm/pseudo/missing.d.ts +8 -0
  96. package/dist/esm/pseudo/missing.d.ts.map +1 -0
  97. package/dist/esm/pseudo/missing.js +15 -0
  98. package/dist/esm/pseudo/missing.js.map +1 -0
  99. package/dist/esm/pseudo/native.d.ts +7 -0
  100. package/dist/esm/pseudo/native.d.ts.map +1 -0
  101. package/dist/esm/pseudo/native.js +6 -0
  102. package/dist/esm/pseudo/native.js.map +1 -0
  103. package/dist/esm/pseudo/network.d.ts +7 -0
  104. package/dist/esm/pseudo/network.d.ts.map +1 -0
  105. package/dist/esm/pseudo/network.js +6 -0
  106. package/dist/esm/pseudo/network.js.map +1 -0
  107. package/dist/esm/pseudo/obfuscated.d.ts +7 -0
  108. package/dist/esm/pseudo/obfuscated.d.ts.map +1 -0
  109. package/dist/esm/pseudo/obfuscated.js +6 -0
  110. package/dist/esm/pseudo/obfuscated.js.map +1 -0
  111. package/dist/esm/pseudo/optional.d.ts +6 -0
  112. package/dist/esm/pseudo/optional.d.ts.map +1 -0
  113. package/dist/esm/pseudo/optional.js +15 -0
  114. package/dist/esm/pseudo/optional.js.map +1 -0
  115. package/dist/esm/pseudo/outdated.d.ts +3 -2
  116. package/dist/esm/pseudo/outdated.d.ts.map +1 -1
  117. package/dist/esm/pseudo/outdated.js +42 -31
  118. package/dist/esm/pseudo/outdated.js.map +1 -1
  119. package/dist/esm/pseudo/overridden.d.ts +8 -0
  120. package/dist/esm/pseudo/overridden.d.ts.map +1 -0
  121. package/dist/esm/pseudo/overridden.js +17 -0
  122. package/dist/esm/pseudo/overridden.js.map +1 -0
  123. package/dist/esm/pseudo/path.d.ts +19 -0
  124. package/dist/esm/pseudo/path.d.ts.map +1 -0
  125. package/dist/esm/pseudo/path.js +113 -0
  126. package/dist/esm/pseudo/path.js.map +1 -0
  127. package/dist/esm/pseudo/peer.d.ts +6 -0
  128. package/dist/esm/pseudo/peer.d.ts.map +1 -0
  129. package/dist/esm/pseudo/peer.js +15 -0
  130. package/dist/esm/pseudo/peer.js.map +1 -0
  131. package/dist/esm/pseudo/prerelease.d.ts +18 -0
  132. package/dist/esm/pseudo/prerelease.d.ts.map +1 -0
  133. package/dist/esm/pseudo/prerelease.js +41 -0
  134. package/dist/esm/pseudo/prerelease.js.map +1 -0
  135. package/dist/esm/pseudo/private.d.ts +7 -0
  136. package/dist/esm/pseudo/private.d.ts.map +1 -0
  137. package/dist/esm/pseudo/private.js +16 -0
  138. package/dist/esm/pseudo/private.js.map +1 -0
  139. package/dist/esm/pseudo/prod.d.ts +6 -0
  140. package/dist/esm/pseudo/prod.d.ts.map +1 -0
  141. package/dist/esm/pseudo/prod.js +15 -0
  142. package/dist/esm/pseudo/prod.js.map +1 -0
  143. package/dist/esm/pseudo/published.d.ts +41 -0
  144. package/dist/esm/pseudo/published.d.ts.map +1 -0
  145. package/dist/esm/pseudo/published.js +158 -0
  146. package/dist/esm/pseudo/published.js.map +1 -0
  147. package/dist/esm/pseudo/root.d.ts +8 -0
  148. package/dist/esm/pseudo/root.d.ts.map +1 -0
  149. package/dist/esm/pseudo/root.js +22 -0
  150. package/dist/esm/pseudo/root.js.map +1 -0
  151. package/dist/esm/pseudo/scanned.d.ts +9 -0
  152. package/dist/esm/pseudo/scanned.d.ts.map +1 -0
  153. package/dist/esm/pseudo/scanned.js +17 -0
  154. package/dist/esm/pseudo/scanned.js.map +1 -0
  155. package/dist/esm/pseudo/score.d.ts +16 -0
  156. package/dist/esm/pseudo/score.d.ts.map +1 -0
  157. package/dist/esm/pseudo/score.js +119 -0
  158. package/dist/esm/pseudo/score.js.map +1 -0
  159. package/dist/esm/pseudo/scripts.d.ts +7 -0
  160. package/dist/esm/pseudo/scripts.d.ts.map +1 -0
  161. package/dist/esm/pseudo/scripts.js +6 -0
  162. package/dist/esm/pseudo/scripts.js.map +1 -0
  163. package/dist/esm/pseudo/semver.d.ts +2 -1
  164. package/dist/esm/pseudo/semver.d.ts.map +1 -1
  165. package/dist/esm/pseudo/semver.js +11 -24
  166. package/dist/esm/pseudo/semver.js.map +1 -1
  167. package/dist/esm/pseudo/severity.d.ts +15 -0
  168. package/dist/esm/pseudo/severity.d.ts.map +1 -0
  169. package/dist/esm/pseudo/severity.js +160 -0
  170. package/dist/esm/pseudo/severity.js.map +1 -0
  171. package/dist/esm/pseudo/shell.d.ts +7 -0
  172. package/dist/esm/pseudo/shell.d.ts.map +1 -0
  173. package/dist/esm/pseudo/shell.js +6 -0
  174. package/dist/esm/pseudo/shell.js.map +1 -0
  175. package/dist/esm/pseudo/shrinkwrap.d.ts +7 -0
  176. package/dist/esm/pseudo/shrinkwrap.d.ts.map +1 -0
  177. package/dist/esm/pseudo/shrinkwrap.js +6 -0
  178. package/dist/esm/pseudo/shrinkwrap.js.map +1 -0
  179. package/dist/esm/pseudo/squat.d.ts +15 -0
  180. package/dist/esm/pseudo/squat.d.ts.map +1 -0
  181. package/dist/esm/pseudo/squat.js +161 -0
  182. package/dist/esm/pseudo/squat.js.map +1 -0
  183. package/dist/esm/pseudo/suspicious.d.ts +7 -0
  184. package/dist/esm/pseudo/suspicious.d.ts.map +1 -0
  185. package/dist/esm/pseudo/suspicious.js +6 -0
  186. package/dist/esm/pseudo/suspicious.js.map +1 -0
  187. package/dist/esm/pseudo/tracker.d.ts +7 -0
  188. package/dist/esm/pseudo/tracker.d.ts.map +1 -0
  189. package/dist/esm/pseudo/tracker.js +6 -0
  190. package/dist/esm/pseudo/tracker.js.map +1 -0
  191. package/dist/esm/pseudo/trivial.d.ts +7 -0
  192. package/dist/esm/pseudo/trivial.d.ts.map +1 -0
  193. package/dist/esm/pseudo/trivial.js +6 -0
  194. package/dist/esm/pseudo/trivial.js.map +1 -0
  195. package/dist/esm/pseudo/type.d.ts +8 -0
  196. package/dist/esm/pseudo/type.d.ts.map +1 -0
  197. package/dist/esm/pseudo/type.js +22 -0
  198. package/dist/esm/pseudo/type.js.map +1 -0
  199. package/dist/esm/pseudo/undesirable.d.ts +7 -0
  200. package/dist/esm/pseudo/undesirable.d.ts.map +1 -0
  201. package/dist/esm/pseudo/undesirable.js +6 -0
  202. package/dist/esm/pseudo/undesirable.js.map +1 -0
  203. package/dist/esm/pseudo/unknown.d.ts +7 -0
  204. package/dist/esm/pseudo/unknown.d.ts.map +1 -0
  205. package/dist/esm/pseudo/unknown.js +6 -0
  206. package/dist/esm/pseudo/unknown.js.map +1 -0
  207. package/dist/esm/pseudo/unmaintained.d.ts +7 -0
  208. package/dist/esm/pseudo/unmaintained.d.ts.map +1 -0
  209. package/dist/esm/pseudo/unmaintained.js +6 -0
  210. package/dist/esm/pseudo/unmaintained.js.map +1 -0
  211. package/dist/esm/pseudo/unpopular.d.ts +7 -0
  212. package/dist/esm/pseudo/unpopular.d.ts.map +1 -0
  213. package/dist/esm/pseudo/unpopular.js +6 -0
  214. package/dist/esm/pseudo/unpopular.js.map +1 -0
  215. package/dist/esm/pseudo/unstable.d.ts +7 -0
  216. package/dist/esm/pseudo/unstable.d.ts.map +1 -0
  217. package/dist/esm/pseudo/unstable.js +6 -0
  218. package/dist/esm/pseudo/unstable.js.map +1 -0
  219. package/dist/esm/pseudo/workspace.d.ts +6 -0
  220. package/dist/esm/pseudo/workspace.d.ts.map +1 -0
  221. package/dist/esm/pseudo/workspace.js +18 -0
  222. package/dist/esm/pseudo/workspace.js.map +1 -0
  223. package/dist/esm/pseudo.d.ts.map +1 -1
  224. package/dist/esm/pseudo.js +141 -106
  225. package/dist/esm/pseudo.js.map +1 -1
  226. package/dist/esm/types.d.ts +86 -23
  227. package/dist/esm/types.d.ts.map +1 -1
  228. package/dist/esm/types.js +1 -106
  229. package/dist/esm/types.js.map +1 -1
  230. package/package.json +19 -15
  231. package/dist/esm/class.d.ts +0 -6
  232. package/dist/esm/class.d.ts.map +0 -1
  233. package/dist/esm/class.js +0 -128
  234. package/dist/esm/class.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ import { createSecuritySelectorFilter } from "./helpers.js";
2
+ /**
3
+ * Filters out any node that does not have a **unmaintained** report alert.
4
+ */
5
+ export const unmaintained = createSecuritySelectorFilter('unmaintained', 'unmaintained');
6
+ //# sourceMappingURL=unmaintained.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unmaintained.js","sourceRoot":"","sources":["../../../src/pseudo/unmaintained.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CACtD,cAAc,EACd,cAAc,CACf,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have a **unmaintained** report alert.\n */\nexport const unmaintained = createSecuritySelectorFilter(\n 'unmaintained',\n 'unmaintained',\n)\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Filters out any node that does not have a **unpopularPackage** report alert.
3
+ */
4
+ export declare const unpopular: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
+ securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
+ }>;
7
+ //# sourceMappingURL=unpopular.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpopular.d.ts","sourceRoot":"","sources":["../../../src/pseudo/unpopular.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS;;EAGrB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { createSecuritySelectorFilter } from "./helpers.js";
2
+ /**
3
+ * Filters out any node that does not have a **unpopularPackage** report alert.
4
+ */
5
+ export const unpopular = createSecuritySelectorFilter('unpopular', 'unpopularPackage');
6
+ //# sourceMappingURL=unpopular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpopular.js","sourceRoot":"","sources":["../../../src/pseudo/unpopular.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,4BAA4B,CACnD,WAAW,EACX,kBAAkB,CACnB,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have a **unpopularPackage** report alert.\n */\nexport const unpopular = createSecuritySelectorFilter(\n 'unpopular',\n 'unpopularPackage',\n)\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Filters out any node that does not have a **unstableOwnership** report alert.
3
+ */
4
+ export declare const unstable: (state: import("../types.ts").ParserState) => Promise<import("../types.ts").ParserState & {
5
+ securityArchive: NonNullable<import("../types.ts").ParserState["securityArchive"]>;
6
+ }>;
7
+ //# sourceMappingURL=unstable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unstable.d.ts","sourceRoot":"","sources":["../../../src/pseudo/unstable.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;;EAGpB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { createSecuritySelectorFilter } from "./helpers.js";
2
+ /**
3
+ * Filters out any node that does not have a **unstableOwnership** report alert.
4
+ */
5
+ export const unstable = createSecuritySelectorFilter('unstable', 'unstableOwnership');
6
+ //# sourceMappingURL=unstable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unstable.js","sourceRoot":"","sources":["../../../src/pseudo/unstable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,4BAA4B,CAClD,UAAU,EACV,mBAAmB,CACpB,CAAA","sourcesContent":["import { createSecuritySelectorFilter } from './helpers.ts'\n\n/**\n * Filters out any node that does not have a **unstableOwnership** report alert.\n */\nexport const unstable = createSecuritySelectorFilter(\n 'unstable',\n 'unstableOwnership',\n)\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ParserState } from '../types.ts';
2
+ /**
3
+ * :workspace Pseudo-Selector will only match workspace dependencies.
4
+ */
5
+ export declare const workspace: (state: ParserState) => Promise<ParserState>;
6
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/pseudo/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C;;GAEG;AACH,eAAO,MAAM,SAAS,UAAiB,WAAW,yBAcjD,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { removeNode } from "./helpers.js";
2
+ /**
3
+ * :workspace Pseudo-Selector will only match workspace dependencies.
4
+ */
5
+ export const workspace = async (state) => {
6
+ // Filter out the root node and any nodes that are not marked as workspaces
7
+ for (const node of state.partial.nodes) {
8
+ if (!node.importer || node.mainImporter) {
9
+ removeNode(state, node);
10
+ }
11
+ }
12
+ // Clears up all edges so that the :workspace pseudo-selector never matches
13
+ // edges that are possibly coming from other packages, this way we can only
14
+ // have a single workspace result per workspace name.
15
+ state.partial.edges.clear();
16
+ return state;
17
+ };
18
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/pseudo/workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;IACpD,2EAA2E;IAC3E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,2EAA2E;IAC3E,qDAAqD;IACrD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAE3B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { ParserState } from '../types.ts'\nimport { removeNode } from './helpers.ts'\n\n/**\n * :workspace Pseudo-Selector will only match workspace dependencies.\n */\nexport const workspace = async (state: ParserState) => {\n // Filter out the root node and any nodes that are not marked as workspaces\n for (const node of state.partial.nodes) {\n if (!node.importer || node.mainImporter) {\n removeNode(state, node)\n }\n }\n\n // Clears up all edges so that the :workspace pseudo-selector never matches\n // edges that are possibly coming from other packages, this way we can only\n // have a single workspace result per workspace name.\n state.partial.edges.clear()\n\n return state\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pseudo.d.ts","sourceRoot":"","sources":["../../src/pseudo.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,YAAY,CAAA;AA6TvD;;GAEG;AACH,eAAO,MAAM,MAAM,UAAiB,WAAW,yBAiB9C,CAAA"}
1
+ {"version":3,"file":"pseudo.d.ts","sourceRoot":"","sources":["../../src/pseudo.ts"],"names":[],"mappings":"AA6DA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,YAAY,CAAA;AA8RvD;;GAEG;AACH,eAAO,MAAM,MAAM,UAAiB,WAAW,yBAkC9C,CAAA"}
@@ -1,22 +1,57 @@
1
- import { splitDepID } from '@vltpkg/dep-id/browser';
2
1
  import { error } from '@vltpkg/error-cause';
3
- import { asManifest } from '@vltpkg/types';
2
+ import { removeDanglingEdges, removeNode } from "./pseudo/helpers.js";
3
+ import { asPostcssNodeWithChildren, asPseudoNode, isSelectorNode, } from '@vltpkg/dss-parser';
4
+ // imported pseudo selectors
5
+ import { abandoned } from "./pseudo/abandoned.js";
4
6
  import { attr } from "./pseudo/attr.js";
7
+ import { confused } from "./pseudo/confused.js";
8
+ import { cve } from "./pseudo/cve.js";
9
+ import { cwe } from "./pseudo/cwe.js";
10
+ import { debug } from "./pseudo/debug.js";
11
+ import { deprecated } from "./pseudo/deprecated.js";
12
+ import { dev } from "./pseudo/dev.js";
13
+ import { dynamic } from "./pseudo/dynamic.js";
14
+ import { empty } from "./pseudo/empty.js";
15
+ import { entropic } from "./pseudo/entropic.js";
16
+ import { env } from "./pseudo/env.js";
17
+ import { evalParser } from "./pseudo/eval.js";
18
+ import { fs } from "./pseudo/fs.js";
19
+ import { license } from "./pseudo/license.js";
20
+ import { link } from "./pseudo/link.js";
21
+ import { malware } from "./pseudo/malware.js";
22
+ import { minified } from "./pseudo/minified.js";
23
+ import { missing } from "./pseudo/missing.js";
24
+ import { nativeParser } from "./pseudo/native.js";
25
+ import { network } from "./pseudo/network.js";
26
+ import { obfuscated } from "./pseudo/obfuscated.js";
27
+ import { optional } from "./pseudo/optional.js";
5
28
  import { outdated } from "./pseudo/outdated.js";
29
+ import { overridden } from "./pseudo/overridden.js";
30
+ import { path } from "./pseudo/path.js";
31
+ import { peer } from "./pseudo/peer.js";
32
+ import { prerelease } from "./pseudo/prerelease.js";
33
+ import { published } from "./pseudo/published.js";
34
+ import { privateParser } from "./pseudo/private.js";
35
+ import { prod } from "./pseudo/prod.js";
36
+ import { root } from "./pseudo/root.js";
37
+ import { scanned } from "./pseudo/scanned.js";
38
+ import { score } from "./pseudo/score.js";
39
+ import { scripts } from "./pseudo/scripts.js";
40
+ import { shell } from "./pseudo/shell.js";
6
41
  import { semverParser as semver } from "./pseudo/semver.js";
7
- import { removeDanglingEdges, removeNode } from "./pseudo/helpers.js";
8
- import { asPostcssNodeWithChildren, asPseudoNode, asTagNode, isSelectorNode, } from "./types.js";
9
- /**
10
- * :empty Pseudo-Selector, matches only nodes that have no children.
11
- */
12
- const empty = async (state) => {
13
- for (const node of state.partial.nodes) {
14
- if (node.edgesOut.size > 0) {
15
- removeNode(state, node);
16
- }
17
- }
18
- return state;
19
- };
42
+ import { severity } from "./pseudo/severity.js";
43
+ import { shrinkwrap } from "./pseudo/shrinkwrap.js";
44
+ import { squat } from "./pseudo/squat.js";
45
+ import { suspicious } from "./pseudo/suspicious.js";
46
+ import { tracker } from "./pseudo/tracker.js";
47
+ import { trivial } from "./pseudo/trivial.js";
48
+ import { type } from "./pseudo/type.js";
49
+ import { undesirable } from "./pseudo/undesirable.js";
50
+ import { unknown } from "./pseudo/unknown.js";
51
+ import { unmaintained } from "./pseudo/unmaintained.js";
52
+ import { unpopular } from "./pseudo/unpopular.js";
53
+ import { unstable } from "./pseudo/unstable.js";
54
+ import { workspace } from "./pseudo/workspace.js";
20
55
  /**
21
56
  * :has Pseudo-Selector, matches only nodes that have valid results
22
57
  * for its nested selector expressions.
@@ -43,7 +78,13 @@ const has = async (state) => {
43
78
  edges: new Set(state.partial.edges),
44
79
  nodes: new Set(state.partial.nodes),
45
80
  },
81
+ retries: state.retries,
82
+ securityArchive: state.securityArchive,
46
83
  specOptions: state.specOptions,
84
+ signal: state.signal,
85
+ scopeIDs: state.scopeIDs,
86
+ comment: state.comment,
87
+ specificity: { ...state.specificity },
47
88
  });
48
89
  for (const n of nestedState.collect.nodes) {
49
90
  collectNodes.add(n);
@@ -117,7 +158,13 @@ const is = async (state) => {
117
158
  edges: new Set(state.partial.edges),
118
159
  },
119
160
  walk: state.walk,
161
+ retries: state.retries,
162
+ securityArchive: state.securityArchive,
120
163
  specOptions: state.specOptions,
164
+ signal: state.signal,
165
+ scopeIDs: state.scopeIDs,
166
+ comment: state.comment,
167
+ specificity: { ...state.specificity },
121
168
  });
122
169
  for (const n of nestedState.collect.nodes) {
123
170
  collect.add(n);
@@ -131,19 +178,6 @@ const is = async (state) => {
131
178
  }
132
179
  return state;
133
180
  };
134
- /**
135
- * :missing Pseudo-Selector, matches only
136
- * edges that are not linked to any node.
137
- */
138
- const missing = async (state) => {
139
- for (const edge of state.partial.edges) {
140
- if (edge.to) {
141
- state.partial.edges.delete(edge);
142
- }
143
- }
144
- state.partial.nodes.clear();
145
- return state;
146
- };
147
181
  /**
148
182
  * :not Pseudo-class, serves to create negate expressions, anything that
149
183
  * matches selectors declared inside the `:not()` expression is going to be
@@ -167,7 +201,13 @@ const not = async (state) => {
167
201
  edges: new Set(state.partial.edges),
168
202
  },
169
203
  walk: state.walk,
204
+ retries: state.retries,
205
+ securityArchive: state.securityArchive,
170
206
  specOptions: state.specOptions,
207
+ signal: state.signal,
208
+ scopeIDs: state.scopeIDs,
209
+ comment: state.comment,
210
+ specificity: { ...state.specificity },
171
211
  });
172
212
  for (const n of nestedState.collect.nodes) {
173
213
  collect.add(n);
@@ -190,113 +230,94 @@ const not = async (state) => {
190
230
  return state;
191
231
  };
192
232
  /**
193
- * :private Pseudo-Selector will only match packages that have
194
- * a `private: true` key set in their `package.json` metadata.
195
- */
196
- const privateFn = async (state) => {
197
- for (const node of state.partial.nodes) {
198
- if (!node.manifest || !asManifest(node.manifest).private) {
199
- removeNode(state, node);
200
- }
201
- }
202
- removeDanglingEdges(state);
203
- return state;
204
- };
205
- /**
206
- * :root Pseudo-Element will return the project root node for the graph.
207
- */
208
- const root = async (state) => {
209
- const [anyNode] = state.initial.nodes.values();
210
- const mainImporter = anyNode?.graph.mainImporter;
211
- if (!mainImporter) {
212
- throw error(':root pseudo-element works on local graphs only');
213
- }
214
- for (const edge of state.partial.edges) {
215
- if (edge.to !== mainImporter) {
216
- state.partial.edges.delete(edge);
217
- }
218
- }
219
- state.partial.nodes.clear();
220
- state.partial.nodes.add(mainImporter);
221
- return state;
222
- };
223
- /**
224
- * :project Pseudo-Element, returns all graph importers (e.g: the
233
+ * :project Pseudo-Class, matches only graph importers (e.g: the
225
234
  * root node along with any configured workspace)
226
235
  */
227
236
  const project = async (state) => {
228
- const [anyNode] = state.initial.nodes.values();
229
- const importers = anyNode?.graph.importers;
230
- if (!importers?.size) {
231
- throw error(':project pseudo-element works on local graphs only');
232
- }
233
- // make a list of all edges that are coming from importers
234
- // so that we can filter out any edges that are not direct
235
- // dependencies of the importers
236
- const importersEdgesIn = new Set();
237
- for (const importer of importers) {
238
- for (const edge of importer.edgesIn) {
239
- importersEdgesIn.add(edge);
237
+ for (const node of state.partial.nodes) {
238
+ if (!node.importer) {
239
+ removeNode(state, node);
240
240
  }
241
241
  }
242
242
  for (const edge of state.partial.edges) {
243
- if (!edge.to || !importersEdgesIn.has(edge)) {
243
+ if (!edge.to?.importer) {
244
244
  state.partial.edges.delete(edge);
245
245
  }
246
246
  }
247
- state.partial.nodes.clear();
248
- for (const importer of importers) {
249
- state.partial.nodes.add(importer);
250
- }
251
247
  return state;
252
248
  };
253
249
  /**
254
- * :scope Pseudo-Element, returns the original scope of items
255
- * at the start of a given selector.
250
+ * :scope Pseudo-Element, returns only the nodes that match the provided scopeIDs
251
+ * from the Query.search method.
256
252
  */
257
253
  const scope = async (state) => {
258
- state.partial.edges.clear();
259
- state.partial.nodes.clear();
260
- for (const edge of state.initial.edges) {
261
- state.partial.edges.add(edge);
262
- }
263
- for (const node of state.initial.nodes) {
264
- state.partial.nodes.add(node);
265
- }
266
- return state;
267
- };
268
- /**
269
- * :type(str) Pseudo-Element will match only nodes that are of
270
- * the same type as the value used
271
- */
272
- const typeFn = async (state) => {
273
- const type = asPostcssNodeWithChildren(state.current);
274
- const selector = asPostcssNodeWithChildren(type.nodes[0]);
275
- const name = asTagNode(selector.nodes[0]).value;
254
+ const scopeIDSet = new Set(state.scopeIDs);
276
255
  for (const node of state.partial.nodes) {
277
- const nodeType = splitDepID(node.id)[0];
278
- if (nodeType !== name) {
256
+ if (!scopeIDSet.has(node.id)) {
279
257
  removeNode(state, node);
280
258
  }
281
259
  }
260
+ removeDanglingEdges(state);
282
261
  return state;
283
262
  };
284
263
  const pseudoSelectors = new Map(Object.entries({
264
+ abandoned,
285
265
  attr,
266
+ confused,
267
+ cve,
268
+ cwe,
269
+ debug,
270
+ deprecated,
271
+ dev,
272
+ dynamic,
273
+ eval: evalParser,
286
274
  empty,
275
+ entropic,
276
+ env,
277
+ fs,
287
278
  has,
288
279
  is,
289
- // TODO: link
280
+ license,
281
+ link,
282
+ malware,
283
+ minified,
290
284
  missing,
285
+ native: nativeParser,
286
+ network,
291
287
  not,
292
- // TODO: overridden
293
- private: privateFn,
288
+ obfuscated,
289
+ optional,
290
+ outdated,
291
+ overridden,
292
+ path,
293
+ peer,
294
+ prerelease,
295
+ published,
296
+ private: privateParser,
297
+ prod,
294
298
  project,
295
299
  root,
300
+ scanned,
296
301
  scope,
297
- type: typeFn,
302
+ score,
303
+ scripts,
298
304
  semver,
299
- outdated,
305
+ sev: severity,
306
+ severity,
307
+ shell,
308
+ shrinkwrap,
309
+ squat,
310
+ suspicious,
311
+ tracker,
312
+ trivial,
313
+ type,
314
+ undesirable,
315
+ unknown,
316
+ unmaintained,
317
+ unpopular,
318
+ unstable,
319
+ v: semver,
320
+ workspace,
300
321
  }));
301
322
  /**
302
323
  * Parsers the `pseudo` node types.
@@ -307,10 +328,24 @@ export const pseudo = async (state) => {
307
328
  const parserFn = curr.value && pseudoSelectors.get(curr.value.slice(1));
308
329
  if (!parserFn) {
309
330
  if (state.loose) {
331
+ state.partial.edges.clear();
332
+ state.partial.nodes.clear();
310
333
  return state;
311
334
  }
312
- throw new Error(`Unsupported pseudo-class: ${state.current.value}`);
335
+ throw error(`Unsupported pseudo-class: ${state.current.value}`, {
336
+ found: state.current,
337
+ });
338
+ }
339
+ const result = await parserFn(state);
340
+ // Increment the commonCounter for specificity, except for
341
+ // nesting selectors which don't contribute to specificity
342
+ const pseudoValue = curr.value.slice(1);
343
+ if (pseudoValue &&
344
+ pseudoValue !== 'not' &&
345
+ pseudoValue !== 'is' &&
346
+ pseudoValue !== 'has') {
347
+ result.specificity.commonCounter += 1;
313
348
  }
314
- return parserFn(state);
349
+ return result;
315
350
  };
316
351
  //# sourceMappingURL=pseudo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pseudo.js","sourceRoot":"","sources":["../../src/pseudo.ts"],"names":[],"mappings":"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","sourcesContent":["import { splitDepID } from '@vltpkg/dep-id/browser'\nimport { error } from '@vltpkg/error-cause'\nimport type { EdgeLike, NodeLike } from '@vltpkg/graph'\nimport { asManifest } from '@vltpkg/types'\nimport { attr } from './pseudo/attr.ts'\nimport { outdated } from './pseudo/outdated.ts'\nimport { semverParser as semver } from './pseudo/semver.ts'\nimport { removeDanglingEdges, removeNode } from './pseudo/helpers.ts'\nimport {\n asPostcssNodeWithChildren,\n asPseudoNode,\n asTagNode,\n isSelectorNode,\n} from './types.ts'\nimport type { ParserFn, ParserState } from './types.ts'\n\n/**\n * :empty Pseudo-Selector, matches only nodes that have no children.\n */\nconst empty = async (state: ParserState) => {\n for (const node of state.partial.nodes) {\n if (node.edgesOut.size > 0) {\n removeNode(state, node)\n }\n }\n return state\n}\n\n/**\n * :has Pseudo-Selector, matches only nodes that have valid results\n * for its nested selector expressions.\n */\nconst has = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collectNodes = new Set<NodeLike>()\n const collectEdges = new Set<EdgeLike>()\n\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n initial: {\n edges: new Set(state.initial.edges),\n nodes: new Set(state.initial.nodes),\n },\n current: node,\n walk: state.walk,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n partial: {\n edges: new Set(state.partial.edges),\n nodes: new Set(state.partial.nodes),\n },\n specOptions: state.specOptions,\n })\n for (const n of nestedState.collect.nodes) {\n collectNodes.add(n)\n }\n for (const e of nestedState.partial.edges) {\n collectEdges.add(e)\n }\n }\n }\n\n // if the nested selector did not match anything, that means\n // no current node has any matches\n if (collectNodes.size === 0) {\n state.partial.edges.clear()\n state.partial.nodes.clear()\n return state\n }\n\n // handles transitive dependencies\n // compareNodes collects a list of all ancestor nodes\n // from the resulting nodes of the nested selector\n const compareNodes = new Set<NodeLike>()\n const traverse = new Set(collectNodes)\n for (const node of traverse) {\n for (const edge of node.edgesIn) {\n compareNodes.add(edge.from)\n if (edge.from.edgesIn.size) {\n traverse.add(edge.from)\n }\n }\n }\n\n // for each node in the current list checks to see if\n // it has a node in the resulting nested state that is\n // a transitive dependency / children.\n nodesLoop: for (const node of state.partial.nodes) {\n if (node.edgesOut.size === 0 || !compareNodes.has(node)) {\n removeNode(state, node)\n continue\n }\n\n for (const edge of node.edgesOut.values()) {\n if (collectEdges.has(edge)) {\n continue nodesLoop\n }\n }\n removeNode(state, node)\n }\n\n removeDanglingEdges(state)\n\n return state\n}\n\n/**\n * :is Pseudo-selector, acts as a shortcut for writing more compact expressions\n * by allowing multiple nested selectors to match on the previous results.\n *\n * It also enables the loose parsing mode, skipping instead of erroring usage\n * of non-existing classes, identifiers, pseudo-classes, etc.\n */\nconst is = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collect = new Set()\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n current: node,\n initial: state.initial,\n loose: true,\n partial: {\n nodes: new Set(state.partial.nodes),\n edges: new Set(state.partial.edges),\n },\n walk: state.walk,\n specOptions: state.specOptions,\n })\n for (const n of nestedState.collect.nodes) {\n collect.add(n)\n }\n }\n }\n for (const node of state.partial.nodes) {\n if (!collect.has(node)) {\n removeNode(state, node)\n }\n }\n return state\n}\n\n/**\n * :missing Pseudo-Selector, matches only\n * edges that are not linked to any node.\n */\nconst missing = async (state: ParserState) => {\n for (const edge of state.partial.edges) {\n if (edge.to) {\n state.partial.edges.delete(edge)\n }\n }\n state.partial.nodes.clear()\n return state\n}\n\n/**\n * :not Pseudo-class, serves to create negate expressions, anything that\n * matches selectors declared inside the `:not()` expression is going to be\n * filtered out in the final result.\n */\nconst not = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collect = new Set()\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n current: node,\n initial: state.initial,\n partial: {\n nodes: new Set(state.partial.nodes),\n edges: new Set(state.partial.edges),\n },\n walk: state.walk,\n specOptions: state.specOptions,\n })\n for (const n of nestedState.collect.nodes) {\n collect.add(n)\n }\n /* c8 ignore start - should be impossible */\n } else {\n throw error('Error parsing :not() selectors', {\n wanted: { type: 'selector' },\n found: node,\n })\n }\n /* c8 ignore stop */\n }\n for (const node of state.partial.nodes) {\n if (collect.has(node)) {\n removeNode(state, node)\n }\n }\n return state\n}\n\n/**\n * :private Pseudo-Selector will only match packages that have\n * a `private: true` key set in their `package.json` metadata.\n */\nconst privateFn = async (state: ParserState) => {\n for (const node of state.partial.nodes) {\n if (!node.manifest || !asManifest(node.manifest).private) {\n removeNode(state, node)\n }\n }\n\n removeDanglingEdges(state)\n\n return state\n}\n\n/**\n * :root Pseudo-Element will return the project root node for the graph.\n */\nconst root = async (state: ParserState) => {\n const [anyNode] = state.initial.nodes.values()\n const mainImporter = anyNode?.graph.mainImporter\n if (!mainImporter) {\n throw error(':root pseudo-element works on local graphs only')\n }\n for (const edge of state.partial.edges) {\n if (edge.to !== mainImporter) {\n state.partial.edges.delete(edge)\n }\n }\n state.partial.nodes.clear()\n state.partial.nodes.add(mainImporter)\n return state\n}\n\n/**\n * :project Pseudo-Element, returns all graph importers (e.g: the\n * root node along with any configured workspace)\n */\nconst project = async (state: ParserState) => {\n const [anyNode] = state.initial.nodes.values()\n const importers = anyNode?.graph.importers\n if (!importers?.size) {\n throw error(':project pseudo-element works on local graphs only')\n }\n\n // make a list of all edges that are coming from importers\n // so that we can filter out any edges that are not direct\n // dependencies of the importers\n const importersEdgesIn = new Set<EdgeLike>()\n for (const importer of importers) {\n for (const edge of importer.edgesIn) {\n importersEdgesIn.add(edge)\n }\n }\n\n for (const edge of state.partial.edges) {\n if (!edge.to || !importersEdgesIn.has(edge)) {\n state.partial.edges.delete(edge)\n }\n }\n state.partial.nodes.clear()\n for (const importer of importers) {\n state.partial.nodes.add(importer)\n }\n return state\n}\n\n/**\n * :scope Pseudo-Element, returns the original scope of items\n * at the start of a given selector.\n */\nconst scope = async (state: ParserState) => {\n state.partial.edges.clear()\n state.partial.nodes.clear()\n for (const edge of state.initial.edges) {\n state.partial.edges.add(edge)\n }\n for (const node of state.initial.nodes) {\n state.partial.nodes.add(node)\n }\n return state\n}\n\n/**\n * :type(str) Pseudo-Element will match only nodes that are of\n * the same type as the value used\n */\nconst typeFn = async (state: ParserState) => {\n const type = asPostcssNodeWithChildren(state.current)\n const selector = asPostcssNodeWithChildren(type.nodes[0])\n const name = asTagNode(selector.nodes[0]).value\n for (const node of state.partial.nodes) {\n const nodeType = splitDepID(node.id)[0]\n if (nodeType !== name) {\n removeNode(state, node)\n }\n }\n return state\n}\n\nconst pseudoSelectors = new Map<string, ParserFn>(\n Object.entries({\n attr,\n empty,\n has,\n is,\n // TODO: link\n missing,\n not,\n // TODO: overridden\n private: privateFn,\n project,\n root,\n scope,\n type: typeFn,\n semver,\n outdated,\n }),\n)\n\n/**\n * Parsers the `pseudo` node types.\n */\nexport const pseudo = async (state: ParserState) => {\n await state.cancellable()\n\n const curr = asPseudoNode(state.current)\n const parserFn =\n curr.value && pseudoSelectors.get(curr.value.slice(1))\n\n if (!parserFn) {\n if (state.loose) {\n return state\n }\n\n throw new Error(\n `Unsupported pseudo-class: ${state.current.value}`,\n )\n }\n return parserFn(state)\n}\n"]}
1
+ {"version":3,"file":"pseudo.js","sourceRoot":"","sources":["../../src/pseudo.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { removeDanglingEdges, removeNode } from './pseudo/helpers.ts'\nimport {\n asPostcssNodeWithChildren,\n asPseudoNode,\n isSelectorNode,\n} from '@vltpkg/dss-parser'\n\n// imported pseudo selectors\nimport { abandoned } from './pseudo/abandoned.ts'\nimport { attr } from './pseudo/attr.ts'\nimport { confused } from './pseudo/confused.ts'\nimport { cve } from './pseudo/cve.ts'\nimport { cwe } from './pseudo/cwe.ts'\nimport { debug } from './pseudo/debug.ts'\nimport { deprecated } from './pseudo/deprecated.ts'\nimport { dev } from './pseudo/dev.ts'\nimport { dynamic } from './pseudo/dynamic.ts'\nimport { empty } from './pseudo/empty.ts'\nimport { entropic } from './pseudo/entropic.ts'\nimport { env } from './pseudo/env.ts'\nimport { evalParser } from './pseudo/eval.ts'\nimport { fs } from './pseudo/fs.ts'\nimport { license } from './pseudo/license.ts'\nimport { link } from './pseudo/link.ts'\nimport { malware } from './pseudo/malware.ts'\nimport { minified } from './pseudo/minified.ts'\nimport { missing } from './pseudo/missing.ts'\nimport { nativeParser } from './pseudo/native.ts'\nimport { network } from './pseudo/network.ts'\nimport { obfuscated } from './pseudo/obfuscated.ts'\nimport { optional } from './pseudo/optional.ts'\nimport { outdated } from './pseudo/outdated.ts'\nimport { overridden } from './pseudo/overridden.ts'\nimport { path } from './pseudo/path.ts'\nimport { peer } from './pseudo/peer.ts'\nimport { prerelease } from './pseudo/prerelease.ts'\nimport { published } from './pseudo/published.ts'\nimport { privateParser } from './pseudo/private.ts'\nimport { prod } from './pseudo/prod.ts'\nimport { root } from './pseudo/root.ts'\nimport { scanned } from './pseudo/scanned.ts'\nimport { score } from './pseudo/score.ts'\nimport { scripts } from './pseudo/scripts.ts'\nimport { shell } from './pseudo/shell.ts'\nimport { semverParser as semver } from './pseudo/semver.ts'\nimport { severity } from './pseudo/severity.ts'\nimport { shrinkwrap } from './pseudo/shrinkwrap.ts'\nimport { squat } from './pseudo/squat.ts'\nimport { suspicious } from './pseudo/suspicious.ts'\nimport { tracker } from './pseudo/tracker.ts'\nimport { trivial } from './pseudo/trivial.ts'\nimport { type } from './pseudo/type.ts'\nimport { undesirable } from './pseudo/undesirable.ts'\nimport { unknown } from './pseudo/unknown.ts'\nimport { unmaintained } from './pseudo/unmaintained.ts'\nimport { unpopular } from './pseudo/unpopular.ts'\nimport { unstable } from './pseudo/unstable.ts'\nimport { workspace } from './pseudo/workspace.ts'\n\nimport type { EdgeLike, NodeLike } from '@vltpkg/graph'\nimport type { ParserFn, ParserState } from './types.ts'\n\n/**\n * :has Pseudo-Selector, matches only nodes that have valid results\n * for its nested selector expressions.\n */\nconst has = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collectNodes = new Set<NodeLike>()\n const collectEdges = new Set<EdgeLike>()\n\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n initial: {\n edges: new Set(state.initial.edges),\n nodes: new Set(state.initial.nodes),\n },\n current: node,\n walk: state.walk,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n partial: {\n edges: new Set(state.partial.edges),\n nodes: new Set(state.partial.nodes),\n },\n retries: state.retries,\n securityArchive: state.securityArchive,\n specOptions: state.specOptions,\n signal: state.signal,\n scopeIDs: state.scopeIDs,\n comment: state.comment,\n specificity: { ...state.specificity },\n })\n for (const n of nestedState.collect.nodes) {\n collectNodes.add(n)\n }\n for (const e of nestedState.partial.edges) {\n collectEdges.add(e)\n }\n }\n }\n\n // if the nested selector did not match anything, that means\n // no current node has any matches\n if (collectNodes.size === 0) {\n state.partial.edges.clear()\n state.partial.nodes.clear()\n return state\n }\n\n // handles transitive dependencies\n // compareNodes collects a list of all ancestor nodes\n // from the resulting nodes of the nested selector\n const compareNodes = new Set<NodeLike>()\n const traverse = new Set(collectNodes)\n for (const node of traverse) {\n for (const edge of node.edgesIn) {\n compareNodes.add(edge.from)\n if (edge.from.edgesIn.size) {\n traverse.add(edge.from)\n }\n }\n }\n\n // for each node in the current list checks to see if\n // it has a node in the resulting nested state that is\n // a transitive dependency / children.\n nodesLoop: for (const node of state.partial.nodes) {\n if (node.edgesOut.size === 0 || !compareNodes.has(node)) {\n removeNode(state, node)\n continue\n }\n\n for (const edge of node.edgesOut.values()) {\n if (collectEdges.has(edge)) {\n continue nodesLoop\n }\n }\n removeNode(state, node)\n }\n\n removeDanglingEdges(state)\n\n return state\n}\n\n/**\n * :is Pseudo-selector, acts as a shortcut for writing more compact expressions\n * by allowing multiple nested selectors to match on the previous results.\n *\n * It also enables the loose parsing mode, skipping instead of erroring usage\n * of non-existing classes, identifiers, pseudo-classes, etc.\n */\nconst is = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collect = new Set()\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n current: node,\n initial: state.initial,\n loose: true,\n partial: {\n nodes: new Set(state.partial.nodes),\n edges: new Set(state.partial.edges),\n },\n walk: state.walk,\n retries: state.retries,\n securityArchive: state.securityArchive,\n specOptions: state.specOptions,\n signal: state.signal,\n scopeIDs: state.scopeIDs,\n comment: state.comment,\n specificity: { ...state.specificity },\n })\n for (const n of nestedState.collect.nodes) {\n collect.add(n)\n }\n }\n }\n for (const node of state.partial.nodes) {\n if (!collect.has(node)) {\n removeNode(state, node)\n }\n }\n return state\n}\n\n/**\n * :not Pseudo-class, serves to create negate expressions, anything that\n * matches selectors declared inside the `:not()` expression is going to be\n * filtered out in the final result.\n */\nconst not = async (state: ParserState) => {\n const top = asPostcssNodeWithChildren(state.current)\n const collect = new Set()\n for (const node of top.nodes) {\n if (isSelectorNode(node)) {\n const nestedState = await state.walk({\n cancellable: state.cancellable,\n collect: {\n edges: new Set(),\n nodes: new Set(),\n },\n current: node,\n initial: state.initial,\n partial: {\n nodes: new Set(state.partial.nodes),\n edges: new Set(state.partial.edges),\n },\n walk: state.walk,\n retries: state.retries,\n securityArchive: state.securityArchive,\n specOptions: state.specOptions,\n signal: state.signal,\n scopeIDs: state.scopeIDs,\n comment: state.comment,\n specificity: { ...state.specificity },\n })\n for (const n of nestedState.collect.nodes) {\n collect.add(n)\n }\n /* c8 ignore start - should be impossible */\n } else {\n throw error('Error parsing :not() selectors', {\n wanted: { type: 'selector' },\n found: node,\n })\n }\n /* c8 ignore stop */\n }\n for (const node of state.partial.nodes) {\n if (collect.has(node)) {\n removeNode(state, node)\n }\n }\n return state\n}\n\n/**\n * :project Pseudo-Class, matches only graph importers (e.g: the\n * root node along with any configured workspace)\n */\nconst project = async (state: ParserState) => {\n for (const node of state.partial.nodes) {\n if (!node.importer) {\n removeNode(state, node)\n }\n }\n for (const edge of state.partial.edges) {\n if (!edge.to?.importer) {\n state.partial.edges.delete(edge)\n }\n }\n return state\n}\n\n/**\n * :scope Pseudo-Element, returns only the nodes that match the provided scopeIDs\n * from the Query.search method.\n */\nconst scope = async (state: ParserState) => {\n const scopeIDSet = new Set(state.scopeIDs)\n\n for (const node of state.partial.nodes) {\n if (!scopeIDSet.has(node.id)) {\n removeNode(state, node)\n }\n }\n\n removeDanglingEdges(state)\n\n return state\n}\n\nconst pseudoSelectors = new Map<string, ParserFn>(\n Object.entries({\n abandoned,\n attr,\n confused,\n cve,\n cwe,\n debug,\n deprecated,\n dev,\n dynamic,\n eval: evalParser,\n empty,\n entropic,\n env,\n fs,\n has,\n is,\n license,\n link,\n malware,\n minified,\n missing,\n native: nativeParser,\n network,\n not,\n obfuscated,\n optional,\n outdated,\n overridden,\n path,\n peer,\n prerelease,\n published,\n private: privateParser,\n prod,\n project,\n root,\n scanned,\n scope,\n score,\n scripts,\n semver,\n sev: severity,\n severity,\n shell,\n shrinkwrap,\n squat,\n suspicious,\n tracker,\n trivial,\n type,\n undesirable,\n unknown,\n unmaintained,\n unpopular,\n unstable,\n v: semver,\n workspace,\n }),\n)\n\n/**\n * Parsers the `pseudo` node types.\n */\nexport const pseudo = async (state: ParserState) => {\n await state.cancellable()\n\n const curr = asPseudoNode(state.current)\n const parserFn =\n curr.value && pseudoSelectors.get(curr.value.slice(1))\n\n if (!parserFn) {\n if (state.loose) {\n state.partial.edges.clear()\n state.partial.nodes.clear()\n return state\n }\n\n throw error(`Unsupported pseudo-class: ${state.current.value}`, {\n found: state.current,\n })\n }\n\n const result = await parserFn(state)\n\n // Increment the commonCounter for specificity, except for\n // nesting selectors which don't contribute to specificity\n const pseudoValue = curr.value.slice(1)\n if (\n pseudoValue &&\n pseudoValue !== 'not' &&\n pseudoValue !== 'is' &&\n pseudoValue !== 'has'\n ) {\n result.specificity.commonCounter += 1\n }\n\n return result\n}\n"]}