Skip to content

Commit 285b39f

Browse files
nlfwraithgar
authored andcommitted
docs: add documentation for expanded :semver selector
1 parent 09c46e8 commit 285b39f

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

docs/content/using-npm/dependency-selectors.md

+17-1
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,26 @@ The [`npm query`](/commands/npm-query) commmand exposes a new dependency selecto
5858
- `:extraneous` when a dependency exists but is not defined as a dependency of any node
5959
- `:invalid` when a dependency version is out of its ancestors specified range
6060
- `:missing` when a dependency is not found on disk
61-
- `:semver(<spec>)` matching a valid [`node-semver`](https://github.com/npm/node-semver) spec
61+
- `:semver(<spec>, [selector], [function])` match a valid [`node-semver`](https://github.com/npm/node-semver) version or range to a selector
6262
- `:path(<path>)` [glob](https://www.npmjs.com/package/glob) matching based on dependencies path relative to the project
6363
- `:type(<type>)` [based on currently recognized types](https://github.com/npm/npm-package-arg#result-object)
6464

65+
##### `:semver(<spec>, [selector], [function])`
66+
67+
The `:semver()` pseudo selector allows comparing fields from each node's `package.json` using [semver](https://github.com/npm/node-semver#readme) methods. It accepts up to 3 parameters, all but the first of which are optional.
68+
69+
- `spec` a semver version or range
70+
- `selector` an attribute selector for each node (default `[version]`)
71+
- `function` a semver method to apply, one of: `satisfies`, `intersects`, `subset`, `gt`, `gte`, `gtr`, `lt`, `lte`, `ltr`, `eq`, `neq` or the special function `infer` (default `infer`)
72+
73+
When the special `infer` function is used the `spec` and the actual value from the node are compared. If both are versions, according to `semver.valid()`, `eq` is used. If both values are ranges, according to `!semver.valid()`, `intersects` is used. If the values are mixed types `satisfies` is used.
74+
75+
Some examples:
76+
77+
- `:semver(^1.0.0)` returns every node that has a `version` satisfied by the provided range `^1.0.0`
78+
- `:semver(16.0.0, :attr(engines, [node]))` returns every node which has an `engines.node` property satisfying the version `16.0.0`
79+
- `:semver(1.0.0, [version], lt)` every node with a `version` less than `1.0.0`
80+
6581
#### [Attribute Selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors)
6682

6783
The attribute selector evaluates the key/value pairs in `package.json` if they are `String`s.

0 commit comments

Comments
 (0)