Initial commit
[yaffs-website] / node_modules / spdx-expression-parse / README.md
1 This package parses SPDX license expression strings describing license terms, like [package.json license strings](https://docs.npmjs.com/files/package.json#license), into consistently structured ECMAScript objects.  The npm command-line interface depends on this package, as do many automatic license-audit tools.
2
3 In a nutshell:
4
5 ```javascript
6 var parse = require('spdx-expression-parse')
7 var assert = require('assert')
8
9 assert.deepEqual(
10   // Licensed under the terms of the Two-Clause BSD License.
11   parse('BSD-2-Clause'),
12   {license: 'BSD-2-Clause'}
13 )
14
15 assert.throws(function () {
16   // An invalid SPDX license expression.
17   // Should be `Apache-2.0`.
18   parse('Apache 2')
19 })
20
21 assert.deepEqual(
22   // Dual licensed under LGPL 2.1 or a combination of the Three-Clause
23   // BSD License and the MIT License.
24   parse('(LGPL-2.1 OR BSD-3-Clause AND MIT)'),
25   {
26     left: {license: 'LGPL-2.1'},
27     conjunction: 'or',
28     right: {
29       left: {license: 'BSD-3-Clause'},
30       conjunction: 'and',
31       right: {license: 'MIT'}
32     }
33   }
34 )
35 ```
36
37 The syntax comes from the [Software Package Data eXchange (SPDX)](https://spdx.org/), a standard from the [Linux Foundation](https://www.linuxfoundation.org) for shareable data about software package license terms.  SPDX aims to make sharing and auditing license data easy, especially for users of open-source software.
38
39 The bulk of the SPDX standard describes syntax and semantics of XML metadata files.  This package implements two lightweight, plain-text components of that larger standard:
40
41 1.  The [license list](https://spdx.org/licenses), a mapping from specific string identifiers, like `Apache-2.0`, to standard form license texts and bolt-on license exceptions.  The [spdx-license-ids](https://www.npmjs.com/package/spdx-exceptions) and [spdx-exceptions](https://www.npmjs.com/package/spdx-license-ids) packages implement the license list.  They are development dependencies of this package.
42
43     Any license identifier from the license list is a valid license expression:
44
45     ```javascript
46     require('spdx-license-ids').forEach(function (id) {
47       assert.deepEqual(parse(id), {license: id})
48     })
49     ```
50
51     So is any license identifier `WITH` a standardized license exception:
52
53     ```javascript
54     require('spdx-license-ids').forEach(function (id) {
55       require('spdx-exceptions').forEach(function (e) {
56         assert.deepEqual(
57           parse(id + ' WITH ' + e),
58           {license: id, exception: e}
59         )
60       })
61     })
62     ```
63
64 2.  The license expression language, for describing simple and complex license terms, like `MIT` for MIT-licensed and `(GPL-2.0 OR Apache-2.0)` for dual-licensing under GPL 2.0 and Apache 2.0.  This package implements the license expression language.
65
66     ```javascript
67     assert.deepEqual(
68       // Licensed under a combination of the MIT License and a combination
69       // of LGPL 2.1 (or a later version) and the Three-Clause BSD License.
70       parse('(MIT AND (LGPL-2.1+ AND BSD-3-Clause))'),
71       {
72         left: {license: 'MIT'},
73         conjunction: 'and',
74         right: {
75           left: {license: 'LGPL-2.1', plus: true},
76           conjunction: 'and',
77           right: {license: 'BSD-3-Clause'}
78         }
79       }
80     )
81     ```
82
83 The Linux Foundation and its contributors license the SPDX standard under the terms of [the Creative Commons Attribution License 3.0 Unported (SPDX: "CC-BY-3.0")](http://spdx.org/licenses/CC-BY-3.0).  "SPDX" is a United States federally registered trademark of the Linux Foundation.  The authors of this package license their work under the terms of the MIT License.