# `NPM.Engines`
[🔗](https://github.com/elixir-volt/npm_ex/blob/v0.7.4/lib/npm/engines.ex#L1)

Parses and analyzes the `engines` field from package.json.

# `extract`

```elixir
@spec extract(map()) :: map()
```

Extracts engines from package.json data.

# `has_engines?`

```elixir
@spec has_engines?(map()) :: boolean()
```

Checks if a package specifies any engine constraints.

# `node_range`

```elixir
@spec node_range(map()) :: String.t() | nil
```

Returns the node version constraint.

# `npm_range`

```elixir
@spec npm_range(map()) :: String.t() | nil
```

Returns the npm version constraint.

# `strictest_node`

```elixir
@spec strictest_node([map()]) :: String.t() | nil
```

Returns the most restrictive node range across packages.

# `summary`

```elixir
@spec summary([map()]) :: map()
```

Summarizes engine constraints across all packages.

# `unknown_engines`

```elixir
@spec unknown_engines(map()) :: [String.t()]
```

Returns unknown (non-standard) engine constraints.

# `used_engines`

```elixir
@spec used_engines([map()]) :: [String.t()]
```

Lists all unique engine names used across packages.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
