Skip to content

Utility package that collects licenses from your node_modules and spits out the license texts to then be viewed on your web page.

License

Notifications You must be signed in to change notification settings

iver-wharf/wharf-collect-licenses-js

Repository files navigation

wharf-collect-licenses-js

NPM package

Collects licenses from node_modules and GitHub and outputs license texts and metadata in JSON format.

Extends license-checker with better filtering, validation, and fetching licenses from GitHub.com if the license text is missing from the node_modules folder.

Usage

  1. First install:

    $ npm install --save-dev @iver-wharf/wharf-collect-licenses@2
  2. Then write a simple JavaScript file to use it:

    // collect-licenses.mjs
    
    const { collectLicenses } = require('@iver-wharf/wharf-collect-licenses');
    
    collectLicenses({
      outputFilePath: 'src/assets/licenses.json',
      licenseOverridesPath: 'deploy/collect-licenses/licenses_override',
    
      excludedSPDXLicenses: [
        '0BSD', // The 0BSD license requires no attribution.
      ],
    
      excludedPackages: [
        '@fortawesome/[email protected]', // already contains license notice in stylesheets
      ],
    
      errorOnPackageNames: [
        { name: '@fortawesome/fontawesome-free', error: 'not sure version also embeds license in stylesheets' },
      ],
    });
  3. Then run it via Node:

    $ node collect-licenses.mjs
    
    Checking packages in package: /home/me/code/wharf/wharf-web
    Using license overrides from: /home/me/code/wharf/wharf-web/deploy/collect-licenses/licenses_override
    Excluding packages: [ '@fortawesome/[email protected]' ]
    Excluding licenses: [ '0BSD' ]
    Error on non-excluded package names: [
      {
        name: '@fortawesome/fontawesome-free',
        error: 'not sure version also embeds license in stylesheets'
      }
    ]
    Resulting JSON will be written to: /home/me/code/wharf/wharf-web/src/assets/licenses.json
    
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for @angular/[email protected]: https://raw.githubusercontent.com/angular/angular/12.1.1/LICENSE
    Found remote license for [email protected]: https://raw.githubusercontent.com/primefaces/primeng/12.0.0/LICENSE.md
    
    Found licenses:
    ┌─────────┬────────────────────────────────────────────┬────────────────────────────────────────────┬──────────────┐
    │ (index) │                  package                   │                    repo                    │   licenses   │
    ├─────────┼────────────────────────────────────────────┼────────────────────────────────────────────┼──────────────┤
    │    0    │        '@angular/[email protected]'        │    'https://github.com/angular/angular'    │    'MIT'     │
    │    1    │           '@angular/[email protected]'            │  'https://github.com/angular/components'   │    'MIT'     │
    │    2    │          '@angular/[email protected]'          │    'https://github.com/angular/angular'    │    'MIT'     │
    │    3    │         '@angular/[email protected]'         │    'https://github.com/angular/angular'    │    'MIT'     │
    │    4    │           '@angular/[email protected]'           │    'https://github.com/angular/angular'    │    'MIT'     │
    │    5    │          '@angular/[email protected]'           │    'https://github.com/angular/angular'    │    'MIT'     │
    │    6    │ '@angular/[email protected]' │    'https://github.com/angular/angular'    │    'MIT'     │
    │    7    │     '@angular/[email protected]'     │    'https://github.com/angular/angular'    │    'MIT'     │
    │    8    │          '@angular/[email protected]'          │    'https://github.com/angular/angular'    │    'MIT'     │
    │    9    │          '[email protected]'          │ 'https://github.com/sguiheux/EventSource'  │    'MIT'     │
    │   10    │               '[email protected]'               │    'https://github.com/inikulin/parse5'    │    'MIT'     │
    │   11    │             '[email protected]'             │ 'https://github.com/primefaces/primeicons' │    'MIT'     │
    │   12    │              '[email protected]'              │  'https://github.com/primefaces/primeng'   │    'MIT'     │
    │   13    │              '[email protected]'              │     'https://github.com/PrismJS/prism'     │    'MIT'     │
    │   14    │                '[email protected]'                │    'https://github.com/reactivex/rxjs'     │ 'Apache-2.0' │
    │   15    │              '[email protected]'              │    'https://github.com/angular/angular'    │    'MIT'     │
    └─────────┴────────────────────────────────────────────┴────────────────────────────────────────────┴──────────────┘
    
    Written to: /home/me/code/wharf/wharf-web/src/assets/licenses.json

The resulting JSON file contains the following format:

[
  {
    "name": "string",
    "version": "string",
    "description": "string or undefined",
    "repository": "string or undefined",
    "url": "string or undefined",
    "licenses": [ "string" ],
    "licenseText": "string"
  }
]

Linting

make deps # download linting dependencies

make lint

make lint-ts # only lint TypeScript code
make lint-md # only lint Markdown files

Some errors can be fixed automatically. Keep in mind that this updates the files in place.

make lint-fix

make lint-fix-ts # only lint and fix TypeScript files
make lint-fix-md # only lint and fix Markdown files

Maintained by Iver. Licensed under the MIT license.

About

Utility package that collects licenses from your node_modules and spits out the license texts to then be viewed on your web page.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •