This directory contains a tool to produce json file with information about licenses for npm
workspace.

The tool consists of:
* Command-line tool (entry point license-map-generator.ts) which gets as input a list of files in
    a node_modules folder, licenses config and produces a json file with packages grouped by their
    licenses.
  If the tool finds a file with an inappropriate license, then it returns error.

  Exact format for input and output data of the tool can be found in the source code.

* Bazel rule node_modules_licenses (in the node_modules_licenses.bzl file), which wraps
  command-line tool and allows to call it
    during the build
