An open API service indexing awesome lists of open source software.

https://github.com/silverwind/rolldown-license-plugin

Rolldown plugin to extract dependency licenses and optionally validate them. Zero dependencies, optimized for performance.
https://github.com/silverwind/rolldown-license-plugin

Last synced: 16 days ago
JSON representation

Rolldown plugin to extract dependency licenses and optionally validate them. Zero dependencies, optimized for performance.

Awesome Lists containing this project

README

          

# rolldown-license-plugin

[![](https://img.shields.io/npm/v/rolldown-license-plugin.svg?style=flat)](https://www.npmjs.org/package/rolldown-license-plugin) [![](https://img.shields.io/npm/dm/rolldown-license-plugin.svg)](https://www.npmjs.org/package/rolldown-license-plugin) [![](https://packagephobia.com/badge?p=rolldown-license-plugin)](https://packagephobia.com/result?p=rolldown-license-plugin) [![](https://depx.co/api/badge/rolldown-license-plugin)](https://depx.co/pkg/rolldown-license-plugin)

Rolldown plugin to extract dependency licenses and optionally validate them. Zero dependencies, optimized for performance.

## Usage

```js
import {defineConfig} from "rolldown";
import {licensePlugin} from "rolldown-license-plugin";

export default defineConfig({
plugins: [
licensePlugin({
done(deps, context) {
context.emitFile({
type: "asset",
fileName: "licenses.txt",
source: deps.map(({name, version, license, licenseText}) => {
return `${name}@${version} - ${license}\n${licenseText}`;
}).join("\n\n"),
});
},
}),
],
});
```

This also works with Vite, using `defineConfig` from `vite`.

## API

### `licensePlugin(opts)`

Returns the plugin.

#### `opts.done`

Type: `(licenses: LicenseInfo[], context: PluginContext) => void | Promise`

Callback invoked during `generateBundle` with the collected license data. The `context` parameter provides access to rolldown's plugin context, including `emitFile`.

#### `opts.match`

Type: `RegExp`\
Default: `/^((UN)?LICEN(S|C)E|COPYING).*$/i`

Regex to match license filenames in package directories.

#### `opts.wrapLicenseText`

Type: `number`\
Default: `undefined` (no wrapping)

When set, word-wrap `licenseText` to this column width.

#### `opts.allow`

Type: `(license: LicenseInfo) => boolean`\
Default: `undefined` (no validation)

Validate each dependency's license. Return `false` to reject it. By default, rejected dependencies are reported via the rolldown plugin context's `warn`. Use `failOnViolation` and `failOnUnlicensed` to throw build errors instead.

#### `opts.failOnViolation`

Type: `boolean`\
Default: `false`

Throw a build error when a dependency has an incompatible license.

#### `opts.failOnUnlicensed`

Type: `boolean`\
Default: `false`

Throw a build error when a dependency does not specify any license.

### `LicenseInfo`

```typescript
type LicenseInfo = {
name: string; // package name
version: string; // package version, or ""
license: string; // SPDX license identifier from package.json, or ""
licenseText: string; // contents of LICENSE/COPYING file, or ""
};
```

### `wrap(text, width)`

Function to word-wrap `text` to a certain column `width`. Returns the wrapped string.

## License

© [silverwind](https://github.com/silverwind), distributed under BSD-2-Clause.