@vltpkg/query 0.0.0-0.1730724342581 → 0.0.0-11

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 (218) hide show
  1. package/README.md +8 -74
  2. package/dist/esm/attribute.d.ts +2 -2
  3. package/dist/esm/attribute.d.ts.map +1 -1
  4. package/dist/esm/attribute.js +14 -5
  5. package/dist/esm/attribute.js.map +1 -1
  6. package/dist/esm/combinator.d.ts +1 -1
  7. package/dist/esm/combinator.d.ts.map +1 -1
  8. package/dist/esm/combinator.js +6 -2
  9. package/dist/esm/combinator.js.map +1 -1
  10. package/dist/esm/id.d.ts +1 -1
  11. package/dist/esm/id.d.ts.map +1 -1
  12. package/dist/esm/id.js +21 -7
  13. package/dist/esm/id.js.map +1 -1
  14. package/dist/esm/index.d.ts +23 -5
  15. package/dist/esm/index.d.ts.map +1 -1
  16. package/dist/esm/index.js +250 -17
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/parser.d.ts +15 -0
  19. package/dist/esm/parser.d.ts.map +1 -0
  20. package/dist/esm/parser.js +92 -0
  21. package/dist/esm/parser.js.map +1 -0
  22. package/dist/esm/pseudo/abandoned.d.ts +7 -0
  23. package/dist/esm/pseudo/abandoned.d.ts.map +1 -0
  24. package/dist/esm/pseudo/abandoned.js +6 -0
  25. package/dist/esm/pseudo/abandoned.js.map +1 -0
  26. package/dist/esm/pseudo/attr.d.ts +18 -0
  27. package/dist/esm/pseudo/attr.d.ts.map +1 -0
  28. package/dist/esm/pseudo/attr.js +58 -0
  29. package/dist/esm/pseudo/attr.js.map +1 -0
  30. package/dist/esm/pseudo/confused.d.ts +9 -0
  31. package/dist/esm/pseudo/confused.d.ts.map +1 -0
  32. package/dist/esm/pseudo/confused.js +19 -0
  33. package/dist/esm/pseudo/confused.js.map +1 -0
  34. package/dist/esm/pseudo/cve.d.ts +12 -0
  35. package/dist/esm/pseudo/cve.d.ts.map +1 -0
  36. package/dist/esm/pseudo/cve.js +44 -0
  37. package/dist/esm/pseudo/cve.js.map +1 -0
  38. package/dist/esm/pseudo/cwe.d.ts +12 -0
  39. package/dist/esm/pseudo/cwe.d.ts.map +1 -0
  40. package/dist/esm/pseudo/cwe.js +43 -0
  41. package/dist/esm/pseudo/cwe.js.map +1 -0
  42. package/dist/esm/pseudo/debug.d.ts +7 -0
  43. package/dist/esm/pseudo/debug.d.ts.map +1 -0
  44. package/dist/esm/pseudo/debug.js +6 -0
  45. package/dist/esm/pseudo/debug.js.map +1 -0
  46. package/dist/esm/pseudo/deprecated.d.ts +7 -0
  47. package/dist/esm/pseudo/deprecated.d.ts.map +1 -0
  48. package/dist/esm/pseudo/deprecated.js +6 -0
  49. package/dist/esm/pseudo/deprecated.js.map +1 -0
  50. package/dist/esm/pseudo/dev.d.ts +6 -0
  51. package/dist/esm/pseudo/dev.d.ts.map +1 -0
  52. package/dist/esm/pseudo/dev.js +15 -0
  53. package/dist/esm/pseudo/dev.js.map +1 -0
  54. package/dist/esm/pseudo/dynamic.d.ts +7 -0
  55. package/dist/esm/pseudo/dynamic.d.ts.map +1 -0
  56. package/dist/esm/pseudo/dynamic.js +6 -0
  57. package/dist/esm/pseudo/dynamic.js.map +1 -0
  58. package/dist/esm/pseudo/empty.d.ts +7 -0
  59. package/dist/esm/pseudo/empty.d.ts.map +1 -0
  60. package/dist/esm/pseudo/empty.js +14 -0
  61. package/dist/esm/pseudo/empty.js.map +1 -0
  62. package/dist/esm/pseudo/entropic.d.ts +7 -0
  63. package/dist/esm/pseudo/entropic.d.ts.map +1 -0
  64. package/dist/esm/pseudo/entropic.js +6 -0
  65. package/dist/esm/pseudo/entropic.js.map +1 -0
  66. package/dist/esm/pseudo/env.d.ts +7 -0
  67. package/dist/esm/pseudo/env.d.ts.map +1 -0
  68. package/dist/esm/pseudo/env.js +6 -0
  69. package/dist/esm/pseudo/env.js.map +1 -0
  70. package/dist/esm/pseudo/eval.d.ts +7 -0
  71. package/dist/esm/pseudo/eval.d.ts.map +1 -0
  72. package/dist/esm/pseudo/eval.js +6 -0
  73. package/dist/esm/pseudo/eval.js.map +1 -0
  74. package/dist/esm/pseudo/fs.d.ts +7 -0
  75. package/dist/esm/pseudo/fs.d.ts.map +1 -0
  76. package/dist/esm/pseudo/fs.js +6 -0
  77. package/dist/esm/pseudo/fs.js.map +1 -0
  78. package/dist/esm/pseudo/helpers.d.ts +35 -0
  79. package/dist/esm/pseudo/helpers.d.ts.map +1 -0
  80. package/dist/esm/pseudo/helpers.js +69 -0
  81. package/dist/esm/pseudo/helpers.js.map +1 -0
  82. package/dist/esm/pseudo/license.d.ts +12 -0
  83. package/dist/esm/pseudo/license.d.ts.map +1 -0
  84. package/dist/esm/pseudo/license.js +58 -0
  85. package/dist/esm/pseudo/license.js.map +1 -0
  86. package/dist/esm/pseudo/link.d.ts +9 -0
  87. package/dist/esm/pseudo/link.d.ts.map +1 -0
  88. package/dist/esm/pseudo/link.js +25 -0
  89. package/dist/esm/pseudo/link.js.map +1 -0
  90. package/dist/esm/pseudo/malware.d.ts +14 -0
  91. package/dist/esm/pseudo/malware.d.ts.map +1 -0
  92. package/dist/esm/pseudo/malware.js +165 -0
  93. package/dist/esm/pseudo/malware.js.map +1 -0
  94. package/dist/esm/pseudo/minified.d.ts +7 -0
  95. package/dist/esm/pseudo/minified.d.ts.map +1 -0
  96. package/dist/esm/pseudo/minified.js +6 -0
  97. package/dist/esm/pseudo/minified.js.map +1 -0
  98. package/dist/esm/pseudo/missing.d.ts +8 -0
  99. package/dist/esm/pseudo/missing.d.ts.map +1 -0
  100. package/dist/esm/pseudo/missing.js +15 -0
  101. package/dist/esm/pseudo/missing.js.map +1 -0
  102. package/dist/esm/pseudo/native.d.ts +7 -0
  103. package/dist/esm/pseudo/native.d.ts.map +1 -0
  104. package/dist/esm/pseudo/native.js +6 -0
  105. package/dist/esm/pseudo/native.js.map +1 -0
  106. package/dist/esm/pseudo/network.d.ts +7 -0
  107. package/dist/esm/pseudo/network.d.ts.map +1 -0
  108. package/dist/esm/pseudo/network.js +6 -0
  109. package/dist/esm/pseudo/network.js.map +1 -0
  110. package/dist/esm/pseudo/obfuscated.d.ts +7 -0
  111. package/dist/esm/pseudo/obfuscated.d.ts.map +1 -0
  112. package/dist/esm/pseudo/obfuscated.js +6 -0
  113. package/dist/esm/pseudo/obfuscated.js.map +1 -0
  114. package/dist/esm/pseudo/optional.d.ts +6 -0
  115. package/dist/esm/pseudo/optional.d.ts.map +1 -0
  116. package/dist/esm/pseudo/optional.js +15 -0
  117. package/dist/esm/pseudo/optional.js.map +1 -0
  118. package/dist/esm/pseudo/outdated.d.ts +54 -0
  119. package/dist/esm/pseudo/outdated.d.ts.map +1 -0
  120. package/dist/esm/pseudo/outdated.js +212 -0
  121. package/dist/esm/pseudo/outdated.js.map +1 -0
  122. package/dist/esm/pseudo/peer.d.ts +6 -0
  123. package/dist/esm/pseudo/peer.d.ts.map +1 -0
  124. package/dist/esm/pseudo/peer.js +15 -0
  125. package/dist/esm/pseudo/peer.js.map +1 -0
  126. package/dist/esm/pseudo/private.d.ts +7 -0
  127. package/dist/esm/pseudo/private.d.ts.map +1 -0
  128. package/dist/esm/pseudo/private.js +16 -0
  129. package/dist/esm/pseudo/private.js.map +1 -0
  130. package/dist/esm/pseudo/prod.d.ts +6 -0
  131. package/dist/esm/pseudo/prod.d.ts.map +1 -0
  132. package/dist/esm/pseudo/prod.js +15 -0
  133. package/dist/esm/pseudo/prod.js.map +1 -0
  134. package/dist/esm/pseudo/published.d.ts +40 -0
  135. package/dist/esm/pseudo/published.d.ts.map +1 -0
  136. package/dist/esm/pseudo/published.js +159 -0
  137. package/dist/esm/pseudo/published.js.map +1 -0
  138. package/dist/esm/pseudo/scanned.d.ts +9 -0
  139. package/dist/esm/pseudo/scanned.d.ts.map +1 -0
  140. package/dist/esm/pseudo/scanned.js +17 -0
  141. package/dist/esm/pseudo/scanned.js.map +1 -0
  142. package/dist/esm/pseudo/score.d.ts +15 -0
  143. package/dist/esm/pseudo/score.d.ts.map +1 -0
  144. package/dist/esm/pseudo/score.js +119 -0
  145. package/dist/esm/pseudo/score.js.map +1 -0
  146. package/dist/esm/pseudo/scripts.d.ts +7 -0
  147. package/dist/esm/pseudo/scripts.d.ts.map +1 -0
  148. package/dist/esm/pseudo/scripts.js +6 -0
  149. package/dist/esm/pseudo/scripts.js.map +1 -0
  150. package/dist/esm/pseudo/semver.d.ts +16 -0
  151. package/dist/esm/pseudo/semver.d.ts.map +1 -0
  152. package/dist/esm/pseudo/semver.js +166 -0
  153. package/dist/esm/pseudo/semver.js.map +1 -0
  154. package/dist/esm/pseudo/severity.d.ts +14 -0
  155. package/dist/esm/pseudo/severity.d.ts.map +1 -0
  156. package/dist/esm/pseudo/severity.js +160 -0
  157. package/dist/esm/pseudo/severity.js.map +1 -0
  158. package/dist/esm/pseudo/shell.d.ts +7 -0
  159. package/dist/esm/pseudo/shell.d.ts.map +1 -0
  160. package/dist/esm/pseudo/shell.js +6 -0
  161. package/dist/esm/pseudo/shell.js.map +1 -0
  162. package/dist/esm/pseudo/shrinkwrap.d.ts +7 -0
  163. package/dist/esm/pseudo/shrinkwrap.d.ts.map +1 -0
  164. package/dist/esm/pseudo/shrinkwrap.js +6 -0
  165. package/dist/esm/pseudo/shrinkwrap.js.map +1 -0
  166. package/dist/esm/pseudo/squat.d.ts +14 -0
  167. package/dist/esm/pseudo/squat.d.ts.map +1 -0
  168. package/dist/esm/pseudo/squat.js +161 -0
  169. package/dist/esm/pseudo/squat.js.map +1 -0
  170. package/dist/esm/pseudo/suspicious.d.ts +7 -0
  171. package/dist/esm/pseudo/suspicious.d.ts.map +1 -0
  172. package/dist/esm/pseudo/suspicious.js +6 -0
  173. package/dist/esm/pseudo/suspicious.js.map +1 -0
  174. package/dist/esm/pseudo/tracker.d.ts +7 -0
  175. package/dist/esm/pseudo/tracker.d.ts.map +1 -0
  176. package/dist/esm/pseudo/tracker.js +6 -0
  177. package/dist/esm/pseudo/tracker.js.map +1 -0
  178. package/dist/esm/pseudo/trivial.d.ts +7 -0
  179. package/dist/esm/pseudo/trivial.d.ts.map +1 -0
  180. package/dist/esm/pseudo/trivial.js +6 -0
  181. package/dist/esm/pseudo/trivial.js.map +1 -0
  182. package/dist/esm/pseudo/undesirable.d.ts +7 -0
  183. package/dist/esm/pseudo/undesirable.d.ts.map +1 -0
  184. package/dist/esm/pseudo/undesirable.js +6 -0
  185. package/dist/esm/pseudo/undesirable.js.map +1 -0
  186. package/dist/esm/pseudo/unknown.d.ts +7 -0
  187. package/dist/esm/pseudo/unknown.d.ts.map +1 -0
  188. package/dist/esm/pseudo/unknown.js +6 -0
  189. package/dist/esm/pseudo/unknown.js.map +1 -0
  190. package/dist/esm/pseudo/unmaintained.d.ts +7 -0
  191. package/dist/esm/pseudo/unmaintained.d.ts.map +1 -0
  192. package/dist/esm/pseudo/unmaintained.js +6 -0
  193. package/dist/esm/pseudo/unmaintained.js.map +1 -0
  194. package/dist/esm/pseudo/unpopular.d.ts +7 -0
  195. package/dist/esm/pseudo/unpopular.d.ts.map +1 -0
  196. package/dist/esm/pseudo/unpopular.js +6 -0
  197. package/dist/esm/pseudo/unpopular.js.map +1 -0
  198. package/dist/esm/pseudo/unstable.d.ts +7 -0
  199. package/dist/esm/pseudo/unstable.d.ts.map +1 -0
  200. package/dist/esm/pseudo/unstable.js +6 -0
  201. package/dist/esm/pseudo/unstable.js.map +1 -0
  202. package/dist/esm/pseudo/workspace.d.ts +6 -0
  203. package/dist/esm/pseudo/workspace.d.ts.map +1 -0
  204. package/dist/esm/pseudo/workspace.js +15 -0
  205. package/dist/esm/pseudo/workspace.js.map +1 -0
  206. package/dist/esm/pseudo.d.ts +1 -8
  207. package/dist/esm/pseudo.d.ts.map +1 -1
  208. package/dist/esm/pseudo.js +115 -122
  209. package/dist/esm/pseudo.js.map +1 -1
  210. package/dist/esm/types.d.ts +83 -6
  211. package/dist/esm/types.d.ts.map +1 -1
  212. package/dist/esm/types.js +25 -13
  213. package/dist/esm/types.js.map +1 -1
  214. package/package.json +29 -19
  215. package/dist/esm/class.d.ts +0 -6
  216. package/dist/esm/class.d.ts.map +0 -1
  217. package/dist/esm/class.js +0 -127
  218. package/dist/esm/class.js.map +0 -1
@@ -1,78 +1,53 @@
1
1
  import { splitDepID } from '@vltpkg/dep-id/browser';
2
2
  import { error } from '@vltpkg/error-cause';
3
- import { asManifest } from '@vltpkg/types';
4
- import { attributeSelectorsMap, filterAttributes, } from './attribute.js';
5
- import { asAttributeNode, asPostcssNodeWithChildren, asPseudoNode, asTagNode, isSelectorNode, } from './types.js';
6
- const removeNode = (state, node) => {
7
- for (const edge of node.edgesIn) {
8
- state.partial.edges.delete(edge);
9
- }
10
- state.partial.nodes.delete(node);
11
- };
12
- const removeDanglingEdges = (state) => {
13
- for (const edge of state.partial.edges) {
14
- if (!edge.to) {
15
- state.partial.edges.delete(edge);
16
- }
17
- }
18
- };
19
- /**
20
- * Parses the internal / nested selectors of a `:attr` selector.
21
- */
22
- const parseAttrInternals = (nodes) => {
23
- // the last part is the attribute selector
24
- const attributeSelector = asAttributeNode(asPostcssNodeWithChildren(nodes.pop()).nodes[0]);
25
- // all preppending selectors are naming nested properties
26
- const properties = [];
27
- for (const selector of nodes) {
28
- properties.push(asTagNode(asPostcssNodeWithChildren(selector).nodes[0]).value);
29
- }
30
- // include the attribute selector as the last part of the property lookup
31
- properties.push(attributeSelector.attribute);
32
- return {
33
- attribute: attributeSelector.attribute,
34
- insensitive: attributeSelector.insensitive || false,
35
- operator: attributeSelector.operator,
36
- value: attributeSelector.value,
37
- properties,
38
- };
39
- };
40
- /**
41
- * :attr Pseudo-Selector, allows for retrieving nodes based on nested
42
- * properties of the `package.json` metadata.
43
- */
44
- const attr = async (state) => {
45
- // Parses and retrieves the values for the nested selectors
46
- let internals;
47
- try {
48
- internals = parseAttrInternals(asPostcssNodeWithChildren(state.current).nodes);
49
- }
50
- catch (err) {
51
- throw error('Failed to parse :attr selector', {
52
- cause: err,
53
- });
54
- }
55
- // reuses the attribute selector logic to filter the nodes
56
- const comparator = internals.operator ?
57
- attributeSelectorsMap.get(internals.operator)
58
- : undefined;
59
- const value = internals.value || '';
60
- const propertyName = internals.attribute;
61
- const insensitive = internals.insensitive;
62
- const prefixProperties = internals.properties;
63
- return filterAttributes(state, comparator, value, propertyName, insensitive, prefixProperties);
64
- };
65
- /**
66
- * :empty Pseudo-Selector, matches only nodes that have no children.
67
- */
68
- const empty = async (state) => {
69
- for (const node of state.partial.nodes) {
70
- if (node.edgesOut.size > 0) {
71
- removeNode(state, node);
72
- }
73
- }
74
- return state;
75
- };
3
+ import { removeDanglingEdges, removeNode } from "./pseudo/helpers.js";
4
+ import { asPostcssNodeWithChildren, asPseudoNode, asTagNode, isSelectorNode, } from "./types.js";
5
+ // imported pseudo selectors
6
+ import { abandoned } from "./pseudo/abandoned.js";
7
+ import { attr } from "./pseudo/attr.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 { license } from "./pseudo/license.js";
21
+ import { link } from "./pseudo/link.js";
22
+ import { malware } from "./pseudo/malware.js";
23
+ import { minified } from "./pseudo/minified.js";
24
+ import { missing } from "./pseudo/missing.js";
25
+ import { nativeParser } from "./pseudo/native.js";
26
+ import { network } from "./pseudo/network.js";
27
+ import { obfuscated } from "./pseudo/obfuscated.js";
28
+ import { optional } from "./pseudo/optional.js";
29
+ import { outdated } from "./pseudo/outdated.js";
30
+ import { peer } from "./pseudo/peer.js";
31
+ import { published } from "./pseudo/published.js";
32
+ import { privateParser } from "./pseudo/private.js";
33
+ import { prod } from "./pseudo/prod.js";
34
+ import { scanned } from "./pseudo/scanned.js";
35
+ import { score } from "./pseudo/score.js";
36
+ import { scripts } from "./pseudo/scripts.js";
37
+ import { shell } from "./pseudo/shell.js";
38
+ import { semverParser as semver } from "./pseudo/semver.js";
39
+ import { severity } from "./pseudo/severity.js";
40
+ import { shrinkwrap } from "./pseudo/shrinkwrap.js";
41
+ import { squat } from "./pseudo/squat.js";
42
+ import { suspicious } from "./pseudo/suspicious.js";
43
+ import { tracker } from "./pseudo/tracker.js";
44
+ import { trivial } from "./pseudo/trivial.js";
45
+ import { undesirable } from "./pseudo/undesirable.js";
46
+ import { unknown } from "./pseudo/unknown.js";
47
+ import { unmaintained } from "./pseudo/unmaintained.js";
48
+ import { unpopular } from "./pseudo/unpopular.js";
49
+ import { unstable } from "./pseudo/unstable.js";
50
+ import { workspace } from "./pseudo/workspace.js";
76
51
  /**
77
52
  * :has Pseudo-Selector, matches only nodes that have valid results
78
53
  * for its nested selector expressions.
@@ -84,6 +59,7 @@ const has = async (state) => {
84
59
  for (const node of top.nodes) {
85
60
  if (isSelectorNode(node)) {
86
61
  const nestedState = await state.walk({
62
+ cancellable: state.cancellable,
87
63
  initial: {
88
64
  edges: new Set(state.initial.edges),
89
65
  nodes: new Set(state.initial.nodes),
@@ -98,6 +74,9 @@ const has = async (state) => {
98
74
  edges: new Set(state.partial.edges),
99
75
  nodes: new Set(state.partial.nodes),
100
76
  },
77
+ retries: state.retries,
78
+ securityArchive: state.securityArchive,
79
+ specOptions: state.specOptions,
101
80
  });
102
81
  for (const n of nestedState.collect.nodes) {
103
82
  collectNodes.add(n);
@@ -158,6 +137,7 @@ const is = async (state) => {
158
137
  for (const node of top.nodes) {
159
138
  if (isSelectorNode(node)) {
160
139
  const nestedState = await state.walk({
140
+ cancellable: state.cancellable,
161
141
  collect: {
162
142
  edges: new Set(),
163
143
  nodes: new Set(),
@@ -170,6 +150,9 @@ const is = async (state) => {
170
150
  edges: new Set(state.partial.edges),
171
151
  },
172
152
  walk: state.walk,
153
+ retries: state.retries,
154
+ securityArchive: state.securityArchive,
155
+ specOptions: state.specOptions,
173
156
  });
174
157
  for (const n of nestedState.collect.nodes) {
175
158
  collect.add(n);
@@ -183,19 +166,6 @@ const is = async (state) => {
183
166
  }
184
167
  return state;
185
168
  };
186
- /**
187
- * :missing Pseudo-Selector, matches only
188
- * edges that are not linked to any node.
189
- */
190
- const missing = async (state) => {
191
- for (const edge of state.partial.edges) {
192
- if (edge.to) {
193
- state.partial.edges.delete(edge);
194
- }
195
- }
196
- state.partial.nodes.clear();
197
- return state;
198
- };
199
169
  /**
200
170
  * :not Pseudo-class, serves to create negate expressions, anything that
201
171
  * matches selectors declared inside the `:not()` expression is going to be
@@ -207,6 +177,7 @@ const not = async (state) => {
207
177
  for (const node of top.nodes) {
208
178
  if (isSelectorNode(node)) {
209
179
  const nestedState = await state.walk({
180
+ cancellable: state.cancellable,
210
181
  collect: {
211
182
  edges: new Set(),
212
183
  nodes: new Set(),
@@ -218,6 +189,9 @@ const not = async (state) => {
218
189
  edges: new Set(state.partial.edges),
219
190
  },
220
191
  walk: state.walk,
192
+ retries: state.retries,
193
+ securityArchive: state.securityArchive,
194
+ specOptions: state.specOptions,
221
195
  });
222
196
  for (const n of nestedState.collect.nodes) {
223
197
  collect.add(n);
@@ -239,19 +213,6 @@ const not = async (state) => {
239
213
  }
240
214
  return state;
241
215
  };
242
- /**
243
- * :private Pseudo-Selector will only match packages that have
244
- * a `private: true` key set in their `package.json` metadata.
245
- */
246
- const privateFn = async (state) => {
247
- for (const node of state.partial.nodes) {
248
- if (!node.manifest || !asManifest(node.manifest).private) {
249
- removeNode(state, node);
250
- }
251
- }
252
- removeDanglingEdges(state);
253
- return state;
254
- };
255
216
  /**
256
217
  * :root Pseudo-Element will return the project root node for the graph.
257
218
  */
@@ -271,33 +232,20 @@ const root = async (state) => {
271
232
  return state;
272
233
  };
273
234
  /**
274
- * :project Pseudo-Element, returns all graph importers (e.g: the
235
+ * :project Pseudo-Class, matches only graph importers (e.g: the
275
236
  * root node along with any configured workspace)
276
237
  */
277
238
  const project = async (state) => {
278
- const [anyNode] = state.initial.nodes.values();
279
- const importers = anyNode?.graph.importers;
280
- if (!importers?.size) {
281
- throw error(':project pseudo-element works on local graphs only');
282
- }
283
- // make a list of all edges that are coming from importers
284
- // so that we can filter out any edges that are not direct
285
- // dependencies of the importers
286
- const importersEdgesIn = new Set();
287
- for (const importer of importers) {
288
- for (const edge of importer.edgesIn) {
289
- importersEdgesIn.add(edge);
239
+ for (const node of state.partial.nodes) {
240
+ if (!node.importer) {
241
+ removeNode(state, node);
290
242
  }
291
243
  }
292
244
  for (const edge of state.partial.edges) {
293
- if (!edge.to || !importersEdgesIn.has(edge)) {
245
+ if (!edge.to?.importer) {
294
246
  state.partial.edges.delete(edge);
295
247
  }
296
248
  }
297
- state.partial.nodes.clear();
298
- for (const importer of importers) {
299
- state.partial.nodes.add(importer);
300
- }
301
249
  return state;
302
250
  };
303
251
  /**
@@ -332,33 +280,78 @@ const typeFn = async (state) => {
332
280
  return state;
333
281
  };
334
282
  const pseudoSelectors = new Map(Object.entries({
283
+ abandoned,
335
284
  attr,
285
+ confused,
286
+ cve,
287
+ cwe,
288
+ debug,
289
+ deprecated,
290
+ dev,
291
+ dynamic,
292
+ eval: evalParser,
336
293
  empty,
294
+ entropic,
295
+ env,
296
+ fs,
337
297
  has,
338
298
  is,
339
- // TODO: link
299
+ license,
300
+ link,
301
+ malware,
302
+ minified,
340
303
  missing,
304
+ native: nativeParser,
305
+ network,
341
306
  not,
307
+ obfuscated,
308
+ optional,
309
+ outdated,
310
+ peer,
311
+ published,
342
312
  // TODO: overridden
343
- private: privateFn,
313
+ private: privateParser,
314
+ prod,
344
315
  project,
345
316
  root,
317
+ scanned,
346
318
  scope,
319
+ score,
320
+ scripts,
321
+ semver,
322
+ sev: severity,
323
+ severity,
324
+ shell,
325
+ shrinkwrap,
326
+ squat,
327
+ suspicious,
328
+ tracker,
329
+ trivial,
347
330
  type: typeFn,
348
- // TODO: semver
349
- // TODO: outdated
331
+ undesirable,
332
+ unknown,
333
+ unmaintained,
334
+ unpopular,
335
+ unstable,
336
+ v: semver,
337
+ workspace,
350
338
  }));
351
339
  /**
352
340
  * Parsers the `pseudo` node types.
353
341
  */
354
342
  export const pseudo = async (state) => {
343
+ await state.cancellable();
355
344
  const curr = asPseudoNode(state.current);
356
345
  const parserFn = curr.value && pseudoSelectors.get(curr.value.slice(1));
357
346
  if (!parserFn) {
358
347
  if (state.loose) {
348
+ state.partial.edges.clear();
349
+ state.partial.nodes.clear();
359
350
  return state;
360
351
  }
361
- throw new Error(`Unsupported pseudo-class: ${state.current.value}`);
352
+ throw error(`Unsupported pseudo-class: ${state.current.value}`, {
353
+ found: state.current,
354
+ });
362
355
  }
363
356
  return parserFn(state);
364
357
  };
@@ -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, type NodeLike } from '@vltpkg/graph'\nimport { asManifest } from '@vltpkg/types'\nimport {\n attributeSelectorsMap,\n filterAttributes,\n} from './attribute.js'\nimport {\n asAttributeNode,\n asPostcssNodeWithChildren,\n asPseudoNode,\n asTagNode,\n isSelectorNode,\n type ParserFn,\n type ParserState,\n type PostcssNode,\n} from './types.js'\n\nexport type AttrInternals = {\n attribute: string\n insensitive: boolean\n operator?: string\n value?: string\n properties: string[]\n}\n\nconst removeNode = (state: ParserState, node: NodeLike) => {\n for (const edge of node.edgesIn) {\n state.partial.edges.delete(edge)\n }\n state.partial.nodes.delete(node)\n}\n\nconst removeDanglingEdges = (state: ParserState) => {\n for (const edge of state.partial.edges) {\n if (!edge.to) {\n state.partial.edges.delete(edge)\n }\n }\n}\n\n/**\n * Parses the internal / nested selectors of a `:attr` selector.\n */\nconst parseAttrInternals = (nodes: PostcssNode[]): AttrInternals => {\n // the last part is the attribute selector\n const attributeSelector = asAttributeNode(\n asPostcssNodeWithChildren(nodes.pop()).nodes[0],\n )\n // all preppending selectors are naming nested properties\n const properties: string[] = []\n for (const selector of nodes) {\n properties.push(\n asTagNode(asPostcssNodeWithChildren(selector).nodes[0]).value,\n )\n }\n // include the attribute selector as the last part of the property lookup\n properties.push(attributeSelector.attribute)\n\n return {\n attribute: attributeSelector.attribute,\n insensitive: attributeSelector.insensitive || false,\n operator: attributeSelector.operator,\n value: attributeSelector.value,\n properties,\n }\n}\n\n/**\n * :attr Pseudo-Selector, allows for retrieving nodes based on nested\n * properties of the `package.json` metadata.\n */\nconst attr = async (state: ParserState) => {\n // Parses and retrieves the values for the nested selectors\n let internals\n try {\n internals = parseAttrInternals(\n asPostcssNodeWithChildren(state.current).nodes,\n )\n } catch (err) {\n throw error('Failed to parse :attr selector', {\n cause: err as Error,\n })\n }\n\n // reuses the attribute selector logic to filter the nodes\n const comparator =\n internals.operator ?\n attributeSelectorsMap.get(internals.operator)\n : undefined\n const value = internals.value || ''\n const propertyName = internals.attribute\n const insensitive = internals.insensitive\n const prefixProperties = internals.properties\n return filterAttributes(\n state,\n comparator,\n value,\n propertyName,\n insensitive,\n prefixProperties,\n )\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 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 })\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 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 })\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 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 })\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 // TODO: semver\n // TODO: outdated\n }),\n)\n\n/**\n * Parsers the `pseudo` node types.\n */\nexport const pseudo = async (state: ParserState) => {\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 { splitDepID } from '@vltpkg/dep-id/browser'\nimport { error } from '@vltpkg/error-cause'\nimport type { EdgeLike, NodeLike } from '@vltpkg/graph'\n\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// 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 { peer } from './pseudo/peer.ts'\nimport { published } from './pseudo/published.ts'\nimport { privateParser } from './pseudo/private.ts'\nimport { prod } from './pseudo/prod.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 { 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\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 })\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 })\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 })\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 * :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-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 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 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 peer,\n published,\n // TODO: overridden\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: typeFn,\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 return parserFn(state)\n}\n"]}
@@ -1,5 +1,7 @@
1
- import { type EdgeLike, type NodeLike } from '@vltpkg/graph';
2
- import { type Tag, type String, type Selector, type Root, type Pseudo, type Nesting, type Identifier, type Comment, type Combinator, type ClassName, type Attribute, type Universal } from 'postcss-selector-parser';
1
+ import type { EdgeLike, NodeLike } from '@vltpkg/graph';
2
+ import type { SpecOptions } from '@vltpkg/spec/browser';
3
+ import type { SecurityArchiveLike, PackageScore } from '@vltpkg/security-archive';
4
+ import type { Tag, String, Selector, Root, Pseudo, Nesting, Identifier, Comment, Combinator, ClassName, Attribute, Universal } from 'postcss-selector-parser';
3
5
  export type PostcssNode = Tag | String | Selector | Root | Pseudo | Nesting | Identifier | Comment | Combinator | ClassName | Attribute | Universal;
4
6
  export type PostcssNodeWithChildren = Selector | Root | Pseudo;
5
7
  export type GraphSelectionState = {
@@ -7,6 +9,7 @@ export type GraphSelectionState = {
7
9
  edges: Set<EdgeLike>;
8
10
  };
9
11
  export type ParserState = {
12
+ cancellable: () => Promise<void>;
10
13
  collect: GraphSelectionState;
11
14
  current: PostcssNode;
12
15
  initial: GraphSelectionState;
@@ -14,27 +17,101 @@ export type ParserState = {
14
17
  next?: PostcssNode;
15
18
  prev?: PostcssNode;
16
19
  result?: NodeLike[];
20
+ signal?: AbortSignal;
17
21
  walk: ParserFn;
18
22
  partial: GraphSelectionState;
23
+ retries: number;
24
+ securityArchive: SecurityArchiveLike | undefined;
25
+ specOptions: SpecOptions;
19
26
  };
20
27
  export type QueryResponse = {
21
- edges: EdgeLike[];
22
- nodes: NodeLike[];
28
+ edges: QueryResponseEdge[];
29
+ nodes: QueryResponseNode[];
30
+ };
31
+ export type QueryResponseEdge = Omit<EdgeLike, 'from' | 'to'> & {
32
+ from: QueryResponseNode;
33
+ to?: QueryResponseNode;
34
+ };
35
+ export type QueryResponseNode = Omit<NodeLike, 'edgesIn' | 'edgesOut'> & {
36
+ edgesIn: Set<QueryResponseEdge>;
37
+ edgesOut: Map<string, QueryResponseEdge>;
38
+ insights: Insights;
39
+ toJSON: () => Pick<QueryResponseNode, 'id' | 'name' | 'version' | 'location' | 'importer' | 'manifest' | 'projectRoot' | 'integrity' | 'resolved' | 'dev' | 'optional' | 'insights' | 'confused'>;
40
+ };
41
+ export type Insights = {
42
+ abandoned?: boolean;
43
+ confused?: boolean;
44
+ cve?: `CVE-${string}`[];
45
+ cwe?: `CWE-${string}`[];
46
+ debug?: boolean;
47
+ deprecated?: boolean;
48
+ dynamic?: boolean;
49
+ entropic?: boolean;
50
+ env?: boolean;
51
+ eval?: boolean;
52
+ fs?: boolean;
53
+ license?: LicenseInsights;
54
+ malware?: MalwareInsights;
55
+ minified?: boolean;
56
+ native?: boolean;
57
+ network?: boolean;
58
+ obfuscated?: boolean;
59
+ scanned: boolean;
60
+ score?: PackageScore;
61
+ scripts?: boolean;
62
+ severity?: SeverityInsights;
63
+ shell?: boolean;
64
+ shrinkwrap?: boolean;
65
+ squat?: SquatInsights;
66
+ suspicious?: boolean;
67
+ tracker?: boolean;
68
+ trivial?: boolean;
69
+ undesirable?: boolean;
70
+ unknown?: boolean;
71
+ unmaintained?: boolean;
72
+ unpopular?: boolean;
73
+ unstable?: boolean;
74
+ };
75
+ export type LicenseInsights = {
76
+ unlicensed: boolean;
77
+ misc: boolean;
78
+ restricted: boolean;
79
+ ambiguous: boolean;
80
+ copyleft: boolean;
81
+ unknown: boolean;
82
+ none: boolean;
83
+ exception: boolean;
84
+ };
85
+ export type LeveledInsights = {
86
+ low: boolean;
87
+ medium: boolean;
88
+ high: boolean;
89
+ critical: boolean;
90
+ };
91
+ export type MalwareInsights = LeveledInsights;
92
+ export type SeverityInsights = LeveledInsights;
93
+ export type SquatInsights = {
94
+ medium: boolean;
95
+ critical: boolean;
23
96
  };
24
97
  export type ParserFn = (opt: ParserState) => Promise<ParserState>;
98
+ export type ParsedSelectorToken = PostcssNode & {
99
+ token: string;
100
+ };
25
101
  export declare const isPostcssNodeWithChildren: (node: any) => node is PostcssNodeWithChildren;
26
102
  export declare const asPostcssNodeWithChildren: (node?: PostcssNode) => PostcssNodeWithChildren;
27
103
  export declare const isAttributeNode: (node: unknown) => node is Attribute;
28
104
  export declare const asAttributeNode: (node?: PostcssNode) => Attribute;
29
- export declare const isClassNode: (node: unknown) => node is ClassName;
30
- export declare const asClassNode: (node?: PostcssNode) => ClassName;
31
105
  export declare const isCombinatorNode: (node: unknown) => node is Combinator;
32
106
  export declare const asCombinatorNode: (node?: PostcssNode) => Combinator;
33
107
  export declare const isIdentifierNode: (node: any) => node is Identifier;
34
108
  export declare const asIdentifierNode: (node?: PostcssNode) => Identifier;
35
109
  export declare const isSelectorNode: (node: any) => node is Selector;
110
+ export declare const asSelectorNode: (node?: PostcssNode) => Selector;
36
111
  export declare const isPseudoNode: (node: unknown) => node is Pseudo;
37
112
  export declare const asPseudoNode: (node?: PostcssNode) => Pseudo;
38
113
  export declare const isTagNode: (node: unknown) => node is Tag;
39
114
  export declare const asTagNode: (node?: PostcssNode) => Tag;
115
+ export declare const isStringNode: (node: unknown) => node is String;
116
+ export declare const asStringNode: (node?: PostcssNode) => String;
40
117
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,KAAK,GAAG,EACR,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAA;AAEhC,MAAM,MAAM,WAAW,GACnB,GAAG,GACH,MAAM,GACN,QAAQ,GACR,IAAI,GACJ,MAAM,GACN,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,CAAA;AAEb,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAA;AAE9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;AAEjE,eAAO,MAAM,yBAAyB,SAC9B,GAAG,KACR,IAAI,IAAI,uBACwB,CAAA;AAEnC,eAAO,MAAM,yBAAyB,UAC7B,WAAW,KACjB,uBAWF,CAAA;AAKD,eAAO,MAAM,eAAe,SAAU,OAAO,KAAG,IAAI,IAAI,SACM,CAAA;AAE9D,eAAO,MAAM,eAAe,UAAW,WAAW,KAAG,SAYpD,CAAA;AAED,eAAO,MAAM,WAAW,SAAU,OAAO,KAAG,IAAI,IAAI,SACE,CAAA;AAEtD,eAAO,MAAM,WAAW,UAAW,WAAW,KAAG,SAYhD,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,OAAO,KAAG,IAAI,IAAI,UACE,CAAA;AAE3D,eAAO,MAAM,gBAAgB,UAAW,WAAW,KAAG,UAYrD,CAAA;AAED,eAAO,MAAM,gBAAgB,SAAU,GAAG,KAAG,IAAI,IAAI,UACF,CAAA;AAEnD,eAAO,MAAM,gBAAgB,UAAW,WAAW,KAAG,UAYrD,CAAA;AAED,eAAO,MAAM,cAAc,SAAU,GAAG,KAAG,IAAI,IAAI,QACU,CAAA;AAE7D,eAAO,MAAM,YAAY,SAAU,OAAO,KAAG,IAAI,IAAI,MACE,CAAA;AAEvD,eAAO,MAAM,YAAY,UAAW,WAAW,KAAG,MAYjD,CAAA;AAED,eAAO,MAAM,SAAS,SAAU,OAAO,KAAG,IAAI,IAAI,GACE,CAAA;AAEpD,eAAO,MAAM,SAAS,UAAW,WAAW,KAAG,GAa9C,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/dist/esm/types.js CHANGED
@@ -25,19 +25,6 @@ export const asAttributeNode = (node) => {
25
25
  }
26
26
  return node;
27
27
  };
28
- export const isClassNode = (node) => isObj(node) && !!node.value && node.type === 'class';
29
- export const asClassNode = (node) => {
30
- if (!node) {
31
- throw error('Expected a query node');
32
- }
33
- if (!isClassNode(node)) {
34
- throw error('Mismatching query node', {
35
- wanted: 'class',
36
- found: node.type,
37
- });
38
- }
39
- return node;
40
- };
41
28
  export const isCombinatorNode = (node) => isObj(node) && !!node.value && node.type === 'combinator';
42
29
  export const asCombinatorNode = (node) => {
43
30
  if (!node) {
@@ -65,6 +52,18 @@ export const asIdentifierNode = (node) => {
65
52
  return node;
66
53
  };
67
54
  export const isSelectorNode = (node) => isPostcssNodeWithChildren(node) && node.type === 'selector';
55
+ export const asSelectorNode = (node) => {
56
+ if (!node) {
57
+ throw error('Expected a query node');
58
+ }
59
+ if (!isSelectorNode(node)) {
60
+ throw error('Mismatching query node', {
61
+ wanted: 'selector',
62
+ found: node.type,
63
+ });
64
+ }
65
+ return node;
66
+ };
68
67
  export const isPseudoNode = (node) => isObj(node) && !!node.value && node.type === 'pseudo';
69
68
  export const asPseudoNode = (node) => {
70
69
  if (!node) {
@@ -91,4 +90,17 @@ export const asTagNode = (node) => {
91
90
  }
92
91
  return node;
93
92
  };
93
+ export const isStringNode = (node) => isObj(node) && !!node.value && node.type === 'string';
94
+ export const asStringNode = (node) => {
95
+ if (!node) {
96
+ throw error('Expected a query node');
97
+ }
98
+ if (!isStringNode(node)) {
99
+ throw error('Mismatching query node', {
100
+ wanted: 'string',
101
+ found: node.type,
102
+ });
103
+ }
104
+ return node;
105
+ };
94
106
  //# sourceMappingURL=types.js.map