@vltpkg/query 0.0.0-3 → 0.0.0-31

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 (247) hide show
  1. package/README.md +39 -82
  2. package/dist/esm/attribute.d.ts +1 -1
  3. package/dist/esm/attribute.d.ts.map +1 -1
  4. package/dist/esm/attribute.js +8 -13
  5. package/dist/esm/attribute.js.map +1 -1
  6. package/dist/esm/combinator.d.ts.map +1 -1
  7. package/dist/esm/combinator.js +5 -2
  8. package/dist/esm/combinator.js.map +1 -1
  9. package/dist/esm/id.d.ts.map +1 -1
  10. package/dist/esm/id.js +23 -7
  11. package/dist/esm/id.js.map +1 -1
  12. package/dist/esm/index.d.ts +40 -7
  13. package/dist/esm/index.d.ts.map +1 -1
  14. package/dist/esm/index.js +302 -23
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/parser.d.ts +15 -0
  17. package/dist/esm/parser.d.ts.map +1 -0
  18. package/dist/esm/parser.js +93 -0
  19. package/dist/esm/parser.js.map +1 -0
  20. package/dist/esm/pseudo/abandoned.d.ts +7 -0
  21. package/dist/esm/pseudo/abandoned.d.ts.map +1 -0
  22. package/dist/esm/pseudo/abandoned.js +6 -0
  23. package/dist/esm/pseudo/abandoned.js.map +1 -0
  24. package/dist/esm/pseudo/attr.d.ts +2 -1
  25. package/dist/esm/pseudo/attr.d.ts.map +1 -1
  26. package/dist/esm/pseudo/attr.js +10 -2
  27. package/dist/esm/pseudo/attr.js.map +1 -1
  28. package/dist/esm/pseudo/built.d.ts +8 -0
  29. package/dist/esm/pseudo/built.d.ts.map +1 -0
  30. package/dist/esm/pseudo/built.js +16 -0
  31. package/dist/esm/pseudo/built.js.map +1 -0
  32. package/dist/esm/pseudo/confused.d.ts +9 -0
  33. package/dist/esm/pseudo/confused.d.ts.map +1 -0
  34. package/dist/esm/pseudo/confused.js +19 -0
  35. package/dist/esm/pseudo/confused.js.map +1 -0
  36. package/dist/esm/pseudo/cve.d.ts +13 -0
  37. package/dist/esm/pseudo/cve.d.ts.map +1 -0
  38. package/dist/esm/pseudo/cve.js +44 -0
  39. package/dist/esm/pseudo/cve.js.map +1 -0
  40. package/dist/esm/pseudo/cwe.d.ts +13 -0
  41. package/dist/esm/pseudo/cwe.d.ts.map +1 -0
  42. package/dist/esm/pseudo/cwe.js +43 -0
  43. package/dist/esm/pseudo/cwe.js.map +1 -0
  44. package/dist/esm/pseudo/debug.d.ts +7 -0
  45. package/dist/esm/pseudo/debug.d.ts.map +1 -0
  46. package/dist/esm/pseudo/debug.js +6 -0
  47. package/dist/esm/pseudo/debug.js.map +1 -0
  48. package/dist/esm/pseudo/deprecated.d.ts +7 -0
  49. package/dist/esm/pseudo/deprecated.d.ts.map +1 -0
  50. package/dist/esm/pseudo/deprecated.js +6 -0
  51. package/dist/esm/pseudo/deprecated.js.map +1 -0
  52. package/dist/esm/pseudo/dev.d.ts +6 -0
  53. package/dist/esm/pseudo/dev.d.ts.map +1 -0
  54. package/dist/esm/pseudo/dev.js +15 -0
  55. package/dist/esm/pseudo/dev.js.map +1 -0
  56. package/dist/esm/pseudo/dynamic.d.ts +7 -0
  57. package/dist/esm/pseudo/dynamic.d.ts.map +1 -0
  58. package/dist/esm/pseudo/dynamic.js +6 -0
  59. package/dist/esm/pseudo/dynamic.js.map +1 -0
  60. package/dist/esm/pseudo/empty.d.ts +7 -0
  61. package/dist/esm/pseudo/empty.d.ts.map +1 -0
  62. package/dist/esm/pseudo/empty.js +14 -0
  63. package/dist/esm/pseudo/empty.js.map +1 -0
  64. package/dist/esm/pseudo/entropic.d.ts +7 -0
  65. package/dist/esm/pseudo/entropic.d.ts.map +1 -0
  66. package/dist/esm/pseudo/entropic.js +6 -0
  67. package/dist/esm/pseudo/entropic.js.map +1 -0
  68. package/dist/esm/pseudo/env.d.ts +7 -0
  69. package/dist/esm/pseudo/env.d.ts.map +1 -0
  70. package/dist/esm/pseudo/env.js +6 -0
  71. package/dist/esm/pseudo/env.js.map +1 -0
  72. package/dist/esm/pseudo/eval.d.ts +7 -0
  73. package/dist/esm/pseudo/eval.d.ts.map +1 -0
  74. package/dist/esm/pseudo/eval.js +6 -0
  75. package/dist/esm/pseudo/eval.js.map +1 -0
  76. package/dist/esm/pseudo/fs.d.ts +7 -0
  77. package/dist/esm/pseudo/fs.d.ts.map +1 -0
  78. package/dist/esm/pseudo/fs.js +6 -0
  79. package/dist/esm/pseudo/fs.js.map +1 -0
  80. package/dist/esm/pseudo/helpers.d.ts +25 -1
  81. package/dist/esm/pseudo/helpers.d.ts.map +1 -1
  82. package/dist/esm/pseudo/helpers.js +53 -0
  83. package/dist/esm/pseudo/helpers.js.map +1 -1
  84. package/dist/esm/pseudo/host.d.ts +20 -0
  85. package/dist/esm/pseudo/host.d.ts.map +1 -0
  86. package/dist/esm/pseudo/host.js +80 -0
  87. package/dist/esm/pseudo/host.js.map +1 -0
  88. package/dist/esm/pseudo/license.d.ts +13 -0
  89. package/dist/esm/pseudo/license.d.ts.map +1 -0
  90. package/dist/esm/pseudo/license.js +75 -0
  91. package/dist/esm/pseudo/license.js.map +1 -0
  92. package/dist/esm/pseudo/link.d.ts +9 -0
  93. package/dist/esm/pseudo/link.d.ts.map +1 -0
  94. package/dist/esm/pseudo/link.js +25 -0
  95. package/dist/esm/pseudo/link.js.map +1 -0
  96. package/dist/esm/pseudo/malware.d.ts +24 -0
  97. package/dist/esm/pseudo/malware.d.ts.map +1 -0
  98. package/dist/esm/pseudo/malware.js +187 -0
  99. package/dist/esm/pseudo/malware.js.map +1 -0
  100. package/dist/esm/pseudo/minified.d.ts +7 -0
  101. package/dist/esm/pseudo/minified.d.ts.map +1 -0
  102. package/dist/esm/pseudo/minified.js +6 -0
  103. package/dist/esm/pseudo/minified.js.map +1 -0
  104. package/dist/esm/pseudo/missing.d.ts +8 -0
  105. package/dist/esm/pseudo/missing.d.ts.map +1 -0
  106. package/dist/esm/pseudo/missing.js +15 -0
  107. package/dist/esm/pseudo/missing.js.map +1 -0
  108. package/dist/esm/pseudo/native.d.ts +7 -0
  109. package/dist/esm/pseudo/native.d.ts.map +1 -0
  110. package/dist/esm/pseudo/native.js +6 -0
  111. package/dist/esm/pseudo/native.js.map +1 -0
  112. package/dist/esm/pseudo/network.d.ts +7 -0
  113. package/dist/esm/pseudo/network.d.ts.map +1 -0
  114. package/dist/esm/pseudo/network.js +6 -0
  115. package/dist/esm/pseudo/network.js.map +1 -0
  116. package/dist/esm/pseudo/obfuscated.d.ts +7 -0
  117. package/dist/esm/pseudo/obfuscated.d.ts.map +1 -0
  118. package/dist/esm/pseudo/obfuscated.js +6 -0
  119. package/dist/esm/pseudo/obfuscated.js.map +1 -0
  120. package/dist/esm/pseudo/optional.d.ts +6 -0
  121. package/dist/esm/pseudo/optional.d.ts.map +1 -0
  122. package/dist/esm/pseudo/optional.js +15 -0
  123. package/dist/esm/pseudo/optional.js.map +1 -0
  124. package/dist/esm/pseudo/outdated.d.ts +4 -4
  125. package/dist/esm/pseudo/outdated.d.ts.map +1 -1
  126. package/dist/esm/pseudo/outdated.js +44 -33
  127. package/dist/esm/pseudo/outdated.js.map +1 -1
  128. package/dist/esm/pseudo/overridden.d.ts +8 -0
  129. package/dist/esm/pseudo/overridden.d.ts.map +1 -0
  130. package/dist/esm/pseudo/overridden.js +17 -0
  131. package/dist/esm/pseudo/overridden.js.map +1 -0
  132. package/dist/esm/pseudo/path.d.ts +19 -0
  133. package/dist/esm/pseudo/path.d.ts.map +1 -0
  134. package/dist/esm/pseudo/path.js +113 -0
  135. package/dist/esm/pseudo/path.js.map +1 -0
  136. package/dist/esm/pseudo/peer.d.ts +6 -0
  137. package/dist/esm/pseudo/peer.d.ts.map +1 -0
  138. package/dist/esm/pseudo/peer.js +15 -0
  139. package/dist/esm/pseudo/peer.js.map +1 -0
  140. package/dist/esm/pseudo/prerelease.d.ts +18 -0
  141. package/dist/esm/pseudo/prerelease.d.ts.map +1 -0
  142. package/dist/esm/pseudo/prerelease.js +41 -0
  143. package/dist/esm/pseudo/prerelease.js.map +1 -0
  144. package/dist/esm/pseudo/private.d.ts +7 -0
  145. package/dist/esm/pseudo/private.d.ts.map +1 -0
  146. package/dist/esm/pseudo/private.js +16 -0
  147. package/dist/esm/pseudo/private.js.map +1 -0
  148. package/dist/esm/pseudo/prod.d.ts +6 -0
  149. package/dist/esm/pseudo/prod.d.ts.map +1 -0
  150. package/dist/esm/pseudo/prod.js +15 -0
  151. package/dist/esm/pseudo/prod.js.map +1 -0
  152. package/dist/esm/pseudo/published.d.ts +40 -0
  153. package/dist/esm/pseudo/published.d.ts.map +1 -0
  154. package/dist/esm/pseudo/published.js +180 -0
  155. package/dist/esm/pseudo/published.js.map +1 -0
  156. package/dist/esm/pseudo/root.d.ts +7 -0
  157. package/dist/esm/pseudo/root.d.ts.map +1 -0
  158. package/dist/esm/pseudo/root.js +18 -0
  159. package/dist/esm/pseudo/root.js.map +1 -0
  160. package/dist/esm/pseudo/scanned.d.ts +9 -0
  161. package/dist/esm/pseudo/scanned.d.ts.map +1 -0
  162. package/dist/esm/pseudo/scanned.js +17 -0
  163. package/dist/esm/pseudo/scanned.js.map +1 -0
  164. package/dist/esm/pseudo/score.d.ts +16 -0
  165. package/dist/esm/pseudo/score.d.ts.map +1 -0
  166. package/dist/esm/pseudo/score.js +133 -0
  167. package/dist/esm/pseudo/score.js.map +1 -0
  168. package/dist/esm/pseudo/scripts.d.ts +10 -0
  169. package/dist/esm/pseudo/scripts.d.ts.map +1 -0
  170. package/dist/esm/pseudo/scripts.js +44 -0
  171. package/dist/esm/pseudo/scripts.js.map +1 -0
  172. package/dist/esm/pseudo/semver.d.ts +2 -1
  173. package/dist/esm/pseudo/semver.d.ts.map +1 -1
  174. package/dist/esm/pseudo/semver.js +11 -24
  175. package/dist/esm/pseudo/semver.js.map +1 -1
  176. package/dist/esm/pseudo/severity.d.ts +15 -0
  177. package/dist/esm/pseudo/severity.d.ts.map +1 -0
  178. package/dist/esm/pseudo/severity.js +160 -0
  179. package/dist/esm/pseudo/severity.js.map +1 -0
  180. package/dist/esm/pseudo/shell.d.ts +7 -0
  181. package/dist/esm/pseudo/shell.d.ts.map +1 -0
  182. package/dist/esm/pseudo/shell.js +6 -0
  183. package/dist/esm/pseudo/shell.js.map +1 -0
  184. package/dist/esm/pseudo/shrinkwrap.d.ts +7 -0
  185. package/dist/esm/pseudo/shrinkwrap.d.ts.map +1 -0
  186. package/dist/esm/pseudo/shrinkwrap.js +6 -0
  187. package/dist/esm/pseudo/shrinkwrap.js.map +1 -0
  188. package/dist/esm/pseudo/spec.d.ts +17 -0
  189. package/dist/esm/pseudo/spec.d.ts.map +1 -0
  190. package/dist/esm/pseudo/spec.js +102 -0
  191. package/dist/esm/pseudo/spec.js.map +1 -0
  192. package/dist/esm/pseudo/squat.d.ts +15 -0
  193. package/dist/esm/pseudo/squat.d.ts.map +1 -0
  194. package/dist/esm/pseudo/squat.js +172 -0
  195. package/dist/esm/pseudo/squat.js.map +1 -0
  196. package/dist/esm/pseudo/suspicious.d.ts +7 -0
  197. package/dist/esm/pseudo/suspicious.d.ts.map +1 -0
  198. package/dist/esm/pseudo/suspicious.js +6 -0
  199. package/dist/esm/pseudo/suspicious.js.map +1 -0
  200. package/dist/esm/pseudo/tracker.d.ts +7 -0
  201. package/dist/esm/pseudo/tracker.d.ts.map +1 -0
  202. package/dist/esm/pseudo/tracker.js +6 -0
  203. package/dist/esm/pseudo/tracker.js.map +1 -0
  204. package/dist/esm/pseudo/trivial.d.ts +7 -0
  205. package/dist/esm/pseudo/trivial.d.ts.map +1 -0
  206. package/dist/esm/pseudo/trivial.js +6 -0
  207. package/dist/esm/pseudo/trivial.js.map +1 -0
  208. package/dist/esm/pseudo/type.d.ts +8 -0
  209. package/dist/esm/pseudo/type.d.ts.map +1 -0
  210. package/dist/esm/pseudo/type.js +22 -0
  211. package/dist/esm/pseudo/type.js.map +1 -0
  212. package/dist/esm/pseudo/undesirable.d.ts +7 -0
  213. package/dist/esm/pseudo/undesirable.d.ts.map +1 -0
  214. package/dist/esm/pseudo/undesirable.js +6 -0
  215. package/dist/esm/pseudo/undesirable.js.map +1 -0
  216. package/dist/esm/pseudo/unknown.d.ts +7 -0
  217. package/dist/esm/pseudo/unknown.d.ts.map +1 -0
  218. package/dist/esm/pseudo/unknown.js +6 -0
  219. package/dist/esm/pseudo/unknown.js.map +1 -0
  220. package/dist/esm/pseudo/unmaintained.d.ts +7 -0
  221. package/dist/esm/pseudo/unmaintained.d.ts.map +1 -0
  222. package/dist/esm/pseudo/unmaintained.js +6 -0
  223. package/dist/esm/pseudo/unmaintained.js.map +1 -0
  224. package/dist/esm/pseudo/unpopular.d.ts +7 -0
  225. package/dist/esm/pseudo/unpopular.d.ts.map +1 -0
  226. package/dist/esm/pseudo/unpopular.js +6 -0
  227. package/dist/esm/pseudo/unpopular.js.map +1 -0
  228. package/dist/esm/pseudo/unstable.d.ts +7 -0
  229. package/dist/esm/pseudo/unstable.d.ts.map +1 -0
  230. package/dist/esm/pseudo/unstable.js +6 -0
  231. package/dist/esm/pseudo/unstable.js.map +1 -0
  232. package/dist/esm/pseudo/workspace.d.ts +6 -0
  233. package/dist/esm/pseudo/workspace.d.ts.map +1 -0
  234. package/dist/esm/pseudo/workspace.js +20 -0
  235. package/dist/esm/pseudo/workspace.js.map +1 -0
  236. package/dist/esm/pseudo.d.ts.map +1 -1
  237. package/dist/esm/pseudo.js +153 -108
  238. package/dist/esm/pseudo.js.map +1 -1
  239. package/dist/esm/types.d.ts +98 -26
  240. package/dist/esm/types.d.ts.map +1 -1
  241. package/dist/esm/types.js +1 -106
  242. package/dist/esm/types.js.map +1 -1
  243. package/package.json +20 -15
  244. package/dist/esm/class.d.ts +0 -6
  245. package/dist/esm/class.d.ts.map +0 -1
  246. package/dist/esm/class.js +0 -128
  247. package/dist/esm/class.js.map +0 -1
@@ -1,22 +1,60 @@
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 { built } from "./pseudo/built.js";
8
+ import { confused } from "./pseudo/confused.js";
9
+ import { cve } from "./pseudo/cve.js";
10
+ import { cwe } from "./pseudo/cwe.js";
11
+ import { debug } from "./pseudo/debug.js";
12
+ import { deprecated } from "./pseudo/deprecated.js";
13
+ import { dev } from "./pseudo/dev.js";
14
+ import { dynamic } from "./pseudo/dynamic.js";
15
+ import { empty } from "./pseudo/empty.js";
16
+ import { entropic } from "./pseudo/entropic.js";
17
+ import { env } from "./pseudo/env.js";
18
+ import { evalParser } from "./pseudo/eval.js";
19
+ import { fs } from "./pseudo/fs.js";
20
+ import { hostContext } from "./pseudo/host.js";
21
+ import { license } from "./pseudo/license.js";
22
+ import { link } from "./pseudo/link.js";
23
+ import { malware } from "./pseudo/malware.js";
24
+ import { minified } from "./pseudo/minified.js";
25
+ import { missing } from "./pseudo/missing.js";
26
+ import { nativeParser } from "./pseudo/native.js";
27
+ import { network } from "./pseudo/network.js";
28
+ import { obfuscated } from "./pseudo/obfuscated.js";
29
+ import { optional } from "./pseudo/optional.js";
5
30
  import { outdated } from "./pseudo/outdated.js";
31
+ import { overridden } from "./pseudo/overridden.js";
32
+ import { path } from "./pseudo/path.js";
33
+ import { peer } from "./pseudo/peer.js";
34
+ import { prerelease } from "./pseudo/prerelease.js";
35
+ import { published } from "./pseudo/published.js";
36
+ import { privateParser } from "./pseudo/private.js";
37
+ import { prod } from "./pseudo/prod.js";
38
+ import { root } from "./pseudo/root.js";
39
+ import { scanned } from "./pseudo/scanned.js";
40
+ import { score } from "./pseudo/score.js";
41
+ import { scripts } from "./pseudo/scripts.js";
42
+ import { shell } from "./pseudo/shell.js";
6
43
  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
- };
44
+ import { severity } from "./pseudo/severity.js";
45
+ import { spec } from "./pseudo/spec.js";
46
+ import { shrinkwrap } from "./pseudo/shrinkwrap.js";
47
+ import { squat } from "./pseudo/squat.js";
48
+ import { suspicious } from "./pseudo/suspicious.js";
49
+ import { tracker } from "./pseudo/tracker.js";
50
+ import { trivial } from "./pseudo/trivial.js";
51
+ import { type } from "./pseudo/type.js";
52
+ import { undesirable } from "./pseudo/undesirable.js";
53
+ import { unknown } from "./pseudo/unknown.js";
54
+ import { unmaintained } from "./pseudo/unmaintained.js";
55
+ import { unpopular } from "./pseudo/unpopular.js";
56
+ import { unstable } from "./pseudo/unstable.js";
57
+ import { workspace } from "./pseudo/workspace.js";
20
58
  /**
21
59
  * :has Pseudo-Selector, matches only nodes that have valid results
22
60
  * for its nested selector expressions.
@@ -43,7 +81,14 @@ const has = async (state) => {
43
81
  edges: new Set(state.partial.edges),
44
82
  nodes: new Set(state.partial.nodes),
45
83
  },
46
- specOptions: state.specOptions,
84
+ hostContexts: state.hostContexts,
85
+ importers: state.importers,
86
+ retries: state.retries,
87
+ securityArchive: state.securityArchive,
88
+ signal: state.signal,
89
+ scopeIDs: state.scopeIDs,
90
+ comment: state.comment,
91
+ specificity: { ...state.specificity },
47
92
  });
48
93
  for (const n of nestedState.collect.nodes) {
49
94
  collectNodes.add(n);
@@ -116,8 +161,15 @@ const is = async (state) => {
116
161
  nodes: new Set(state.partial.nodes),
117
162
  edges: new Set(state.partial.edges),
118
163
  },
164
+ importers: state.importers,
165
+ hostContexts: state.hostContexts,
119
166
  walk: state.walk,
120
- specOptions: state.specOptions,
167
+ retries: state.retries,
168
+ securityArchive: state.securityArchive,
169
+ signal: state.signal,
170
+ scopeIDs: state.scopeIDs,
171
+ comment: state.comment,
172
+ specificity: { ...state.specificity },
121
173
  });
122
174
  for (const n of nestedState.collect.nodes) {
123
175
  collect.add(n);
@@ -131,19 +183,6 @@ const is = async (state) => {
131
183
  }
132
184
  return state;
133
185
  };
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
186
  /**
148
187
  * :not Pseudo-class, serves to create negate expressions, anything that
149
188
  * matches selectors declared inside the `:not()` expression is going to be
@@ -166,8 +205,15 @@ const not = async (state) => {
166
205
  nodes: new Set(state.partial.nodes),
167
206
  edges: new Set(state.partial.edges),
168
207
  },
208
+ importers: state.importers,
209
+ hostContexts: state.hostContexts,
169
210
  walk: state.walk,
170
- specOptions: state.specOptions,
211
+ retries: state.retries,
212
+ securityArchive: state.securityArchive,
213
+ signal: state.signal,
214
+ scopeIDs: state.scopeIDs,
215
+ comment: state.comment,
216
+ specificity: { ...state.specificity },
171
217
  });
172
218
  for (const n of nestedState.collect.nodes) {
173
219
  collect.add(n);
@@ -187,116 +233,101 @@ const not = async (state) => {
187
233
  removeNode(state, node);
188
234
  }
189
235
  }
190
- return state;
191
- };
192
- /**
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
236
  removeDanglingEdges(state);
203
237
  return state;
204
238
  };
205
239
  /**
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
240
+ * :project Pseudo-Class, matches only graph importers (e.g: the
225
241
  * root node along with any configured workspace)
226
242
  */
227
243
  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);
244
+ for (const node of state.partial.nodes) {
245
+ if (!node.importer) {
246
+ removeNode(state, node);
240
247
  }
241
248
  }
242
249
  for (const edge of state.partial.edges) {
243
- if (!edge.to || !importersEdgesIn.has(edge)) {
250
+ if (!edge.to?.importer) {
244
251
  state.partial.edges.delete(edge);
245
252
  }
246
253
  }
247
- state.partial.nodes.clear();
248
- for (const importer of importers) {
249
- state.partial.nodes.add(importer);
250
- }
251
254
  return state;
252
255
  };
253
256
  /**
254
- * :scope Pseudo-Element, returns the original scope of items
255
- * at the start of a given selector.
257
+ * :scope Pseudo-Element, returns only the nodes that match the provided scopeIDs
258
+ * from the Query.search method.
256
259
  */
257
260
  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;
261
+ const scopeIDSet = new Set(state.scopeIDs);
276
262
  for (const node of state.partial.nodes) {
277
- const nodeType = splitDepID(node.id)[0];
278
- if (nodeType !== name) {
263
+ if (!scopeIDSet.has(node.id)) {
279
264
  removeNode(state, node);
280
265
  }
281
266
  }
267
+ removeDanglingEdges(state);
282
268
  return state;
283
269
  };
284
270
  const pseudoSelectors = new Map(Object.entries({
271
+ abandoned,
285
272
  attr,
273
+ built,
274
+ confused,
275
+ cve,
276
+ cwe,
277
+ debug,
278
+ deprecated,
279
+ dev,
280
+ dynamic,
281
+ eval: evalParser,
286
282
  empty,
283
+ entropic,
284
+ env,
285
+ fs,
287
286
  has,
287
+ host: hostContext,
288
288
  is,
289
- // TODO: link
289
+ license,
290
+ link,
291
+ malware,
292
+ minified,
290
293
  missing,
294
+ native: nativeParser,
295
+ network,
291
296
  not,
292
- // TODO: overridden
293
- private: privateFn,
297
+ obfuscated,
298
+ optional,
299
+ outdated,
300
+ overridden,
301
+ path,
302
+ peer,
303
+ prerelease,
304
+ published,
305
+ private: privateParser,
306
+ prod,
294
307
  project,
295
308
  root,
309
+ scanned,
296
310
  scope,
297
- type: typeFn,
311
+ score,
312
+ scripts,
298
313
  semver,
299
- outdated,
314
+ sev: severity,
315
+ spec,
316
+ severity,
317
+ shell,
318
+ shrinkwrap,
319
+ squat,
320
+ suspicious,
321
+ tracker,
322
+ trivial,
323
+ type,
324
+ undesirable,
325
+ unknown,
326
+ unmaintained,
327
+ unpopular,
328
+ unstable,
329
+ v: semver,
330
+ workspace,
300
331
  }));
301
332
  /**
302
333
  * Parsers the `pseudo` node types.
@@ -307,10 +338,24 @@ export const pseudo = async (state) => {
307
338
  const parserFn = curr.value && pseudoSelectors.get(curr.value.slice(1));
308
339
  if (!parserFn) {
309
340
  if (state.loose) {
341
+ state.partial.edges.clear();
342
+ state.partial.nodes.clear();
310
343
  return state;
311
344
  }
312
- throw new Error(`Unsupported pseudo-class: ${state.current.value}`);
345
+ throw error(`Unsupported pseudo-class: ${state.current.value}`, {
346
+ found: state.current,
347
+ });
348
+ }
349
+ const result = await parserFn(state);
350
+ // Increment the commonCounter for specificity, except for
351
+ // nesting selectors which don't contribute to specificity
352
+ const pseudoValue = curr.value.slice(1);
353
+ if (pseudoValue &&
354
+ pseudoValue !== 'not' &&
355
+ pseudoValue !== 'is' &&
356
+ pseudoValue !== 'has') {
357
+ result.specificity.commonCounter += 1;
313
358
  }
314
- return parserFn(state);
359
+ return result;
315
360
  };
316
361
  //# 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 { built } from './pseudo/built.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 { hostContext } from './pseudo/host.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 { spec } from './pseudo/spec.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/types'\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 hostContexts: state.hostContexts,\n importers: state.importers,\n retries: state.retries,\n securityArchive: state.securityArchive,\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 importers: state.importers,\n hostContexts: state.hostContexts,\n walk: state.walk,\n retries: state.retries,\n securityArchive: state.securityArchive,\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 importers: state.importers,\n hostContexts: state.hostContexts,\n walk: state.walk,\n retries: state.retries,\n securityArchive: state.securityArchive,\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\n removeDanglingEdges(state)\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 built,\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 host: hostContext,\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 spec,\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"]}
@@ -1,8 +1,19 @@
1
- import type { EdgeLike, NodeLike } from '@vltpkg/graph';
2
- import type { SpecOptions } from '@vltpkg/spec/browser';
3
- import type { Tag, String, Selector, Root, Pseudo, Nesting, Identifier, Comment, Combinator, ClassName, Attribute, Universal } from 'postcss-selector-parser';
4
- export type PostcssNode = Tag | String | Selector | Root | Pseudo | Nesting | Identifier | Comment | Combinator | ClassName | Attribute | Universal;
5
- export type PostcssNodeWithChildren = Selector | Root | Pseudo;
1
+ import type { EdgeLike, NodeLike } from '@vltpkg/types';
2
+ import type { SecurityArchiveLike, PackageScore } from '@vltpkg/security-archive';
3
+ import type { DepID } from '@vltpkg/dep-id';
4
+ import type { PostcssNode } from '@vltpkg/dss-parser';
5
+ export type HostContextsMapResult = {
6
+ initialEdges: EdgeLike[];
7
+ initialNodes: NodeLike[];
8
+ edges: EdgeLike[];
9
+ nodes: NodeLike[];
10
+ securityArchive: SecurityArchiveLike | undefined;
11
+ };
12
+ export type HostContextsMap = Map<string, () => Promise<HostContextsMapResult>>;
13
+ export type Specificity = {
14
+ idCounter: number;
15
+ commonCounter: number;
16
+ };
6
17
  export type GraphSelectionState = {
7
18
  nodes: Set<NodeLike>;
8
19
  edges: Set<EdgeLike>;
@@ -10,37 +21,98 @@ export type GraphSelectionState = {
10
21
  export type ParserState = {
11
22
  cancellable: () => Promise<void>;
12
23
  collect: GraphSelectionState;
24
+ comment: string;
13
25
  current: PostcssNode;
26
+ hostContexts?: HostContextsMap;
27
+ importers: Set<NodeLike>;
14
28
  initial: GraphSelectionState;
15
29
  loose?: boolean;
16
30
  next?: PostcssNode;
17
31
  prev?: PostcssNode;
18
32
  result?: NodeLike[];
19
- signal?: AbortSignal;
33
+ signal: AbortSignal;
20
34
  walk: ParserFn;
21
35
  partial: GraphSelectionState;
22
- specOptions: SpecOptions;
36
+ retries: number;
37
+ securityArchive: SecurityArchiveLike | undefined;
38
+ scopeIDs?: DepID[];
39
+ specificity: Specificity;
23
40
  };
24
41
  export type QueryResponse = {
25
- edges: EdgeLike[];
26
- nodes: NodeLike[];
42
+ edges: QueryResponseEdge[];
43
+ nodes: QueryResponseNode[];
44
+ importers: QueryResponseNode[];
45
+ comment: string;
46
+ specificity: Specificity;
47
+ };
48
+ export type QueryResponseEdge = Omit<EdgeLike, 'from' | 'to'> & {
49
+ from: QueryResponseNode;
50
+ to?: QueryResponseNode;
51
+ };
52
+ export type QueryResponseNode = Omit<NodeLike, 'edgesIn' | 'edgesOut'> & {
53
+ edgesIn: Set<QueryResponseEdge>;
54
+ edgesOut: Map<string, QueryResponseEdge>;
55
+ insights: Insights;
56
+ toJSON: () => Pick<QueryResponseNode, 'id' | 'name' | 'version' | 'location' | 'importer' | 'manifest' | 'projectRoot' | 'integrity' | 'resolved' | 'dev' | 'optional' | 'insights' | 'confused'>;
57
+ };
58
+ export type Insights = {
59
+ abandoned?: boolean;
60
+ confused?: boolean;
61
+ cve?: `CVE-${string}`[];
62
+ cwe?: `CWE-${string}`[];
63
+ debug?: boolean;
64
+ deprecated?: boolean;
65
+ dynamic?: boolean;
66
+ entropic?: boolean;
67
+ env?: boolean;
68
+ eval?: boolean;
69
+ fs?: boolean;
70
+ license?: LicenseInsights;
71
+ malware?: MalwareInsights;
72
+ minified?: boolean;
73
+ native?: boolean;
74
+ network?: boolean;
75
+ obfuscated?: boolean;
76
+ scanned: boolean;
77
+ score?: PackageScore;
78
+ scripts?: boolean;
79
+ severity?: SeverityInsights;
80
+ shell?: boolean;
81
+ shrinkwrap?: boolean;
82
+ squat?: SquatInsights;
83
+ suspicious?: boolean;
84
+ tracker?: boolean;
85
+ trivial?: boolean;
86
+ undesirable?: boolean;
87
+ unknown?: boolean;
88
+ unmaintained?: boolean;
89
+ unpopular?: boolean;
90
+ unstable?: boolean;
91
+ };
92
+ export type LicenseInsights = {
93
+ unlicensed: boolean;
94
+ misc: boolean;
95
+ restricted: boolean;
96
+ ambiguous: boolean;
97
+ copyleft: boolean;
98
+ unknown: boolean;
99
+ none: boolean;
100
+ exception: boolean;
101
+ };
102
+ export type LeveledInsights = {
103
+ low: boolean;
104
+ medium: boolean;
105
+ high: boolean;
106
+ critical: boolean;
107
+ };
108
+ export type MalwareInsights = LeveledInsights;
109
+ export type SeverityInsights = LeveledInsights;
110
+ export type SquatInsights = {
111
+ medium: boolean;
112
+ critical: boolean;
27
113
  };
28
114
  export type ParserFn = (opt: ParserState) => Promise<ParserState>;
29
- export declare const isPostcssNodeWithChildren: (node: any) => node is PostcssNodeWithChildren;
30
- export declare const asPostcssNodeWithChildren: (node?: PostcssNode) => PostcssNodeWithChildren;
31
- export declare const isAttributeNode: (node: unknown) => node is Attribute;
32
- export declare const asAttributeNode: (node?: PostcssNode) => Attribute;
33
- export declare const isClassNode: (node: unknown) => node is ClassName;
34
- export declare const asClassNode: (node?: PostcssNode) => ClassName;
35
- export declare const isCombinatorNode: (node: unknown) => node is Combinator;
36
- export declare const asCombinatorNode: (node?: PostcssNode) => Combinator;
37
- export declare const isIdentifierNode: (node: any) => node is Identifier;
38
- export declare const asIdentifierNode: (node?: PostcssNode) => Identifier;
39
- export declare const isSelectorNode: (node: any) => node is Selector;
40
- export declare const isPseudoNode: (node: unknown) => node is Pseudo;
41
- export declare const asPseudoNode: (node?: PostcssNode) => Pseudo;
42
- export declare const isTagNode: (node: unknown) => node is Tag;
43
- export declare const asTagNode: (node?: PostcssNode) => Tag;
44
- export declare const isStringNode: (node: unknown) => node is String;
45
- export declare const asStringNode: (node?: PostcssNode) => String;
115
+ export type ParsedSelectorToken = PostcssNode & {
116
+ token: string;
117
+ };
46
118
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}