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

Discovers and aggregates funding information from installed packages.

Reads the `funding` field from package manifests to help users
support open source maintainers.

# `funding_info`

```elixir
@type funding_info() :: %{
  package: String.t(),
  version: String.t(),
  type: String.t() | nil,
  url: String.t()
}
```

# `collect`

```elixir
@spec collect(String.t()) :: [funding_info()]
```

Collects funding info from all packages in a node_modules directory.

# `extract`

```elixir
@spec extract(map()) :: [funding_info()]
```

Extracts funding info from a package.json data map.

The `funding` field can be a string (URL), a map with `type` and `url`,
or a list of such entries.

# `group_by_url`

```elixir
@spec group_by_url([funding_info()]) :: %{required(String.t()) =&gt; [funding_info()]}
```

Groups funding entries by funding URL.

# `summary`

```elixir
@spec summary([funding_info()]) :: %{
  packages_with_funding: non_neg_integer(),
  unique_urls: non_neg_integer(),
  types: [String.t()]
}
```

Returns a summary of funding information.

---

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