1validate-npm-package-license 2============================ 3 4Give me a string and I'll tell you if it's a valid npm package license string. 5 6```javascript 7var valid = require('validate-npm-package-license'); 8``` 9 10SPDX license identifiers are valid license strings: 11 12```javascript 13 14var assert = require('assert'); 15var validSPDXExpression = { 16 validForNewPackages: true, 17 validForOldPackages: true, 18 spdx: true 19}; 20 21assert.deepEqual(valid('MIT'), validSPDXExpression); 22assert.deepEqual(valid('BSD-2-Clause'), validSPDXExpression); 23assert.deepEqual(valid('Apache-2.0'), validSPDXExpression); 24assert.deepEqual(valid('ISC'), validSPDXExpression); 25``` 26The function will return a warning and suggestion for nearly-correct license identifiers: 27 28```javascript 29assert.deepEqual( 30 valid('Apache 2.0'), 31 { 32 validForOldPackages: false, 33 validForNewPackages: false, 34 warnings: [ 35 'license should be ' + 36 'a valid SPDX license expression (without "LicenseRef"), ' + 37 '"UNLICENSED", or ' + 38 '"SEE LICENSE IN <filename>"', 39 'license is similar to the valid expression "Apache-2.0"' 40 ] 41 } 42); 43``` 44 45SPDX expressions are valid, too ... 46 47```javascript 48// Simple SPDX license expression for dual licensing 49assert.deepEqual( 50 valid('(GPL-3.0-only OR BSD-2-Clause)'), 51 validSPDXExpression 52); 53``` 54 55... except if they contain `LicenseRef`: 56 57```javascript 58var warningAboutLicenseRef = { 59 validForOldPackages: false, 60 validForNewPackages: false, 61 spdx: true, 62 warnings: [ 63 'license should be ' + 64 'a valid SPDX license expression (without "LicenseRef"), ' + 65 '"UNLICENSED", or ' + 66 '"SEE LICENSE IN <filename>"', 67 ] 68}; 69 70assert.deepEqual( 71 valid('LicenseRef-Made-Up'), 72 warningAboutLicenseRef 73); 74 75assert.deepEqual( 76 valid('(MIT OR LicenseRef-Made-Up)'), 77 warningAboutLicenseRef 78); 79``` 80 81If you can't describe your licensing terms with standardized SPDX identifiers, put the terms in a file in the package and point users there: 82 83```javascript 84assert.deepEqual( 85 valid('SEE LICENSE IN LICENSE.txt'), 86 { 87 validForNewPackages: true, 88 validForOldPackages: true, 89 inFile: 'LICENSE.txt' 90 } 91); 92 93assert.deepEqual( 94 valid('SEE LICENSE IN license.md'), 95 { 96 validForNewPackages: true, 97 validForOldPackages: true, 98 inFile: 'license.md' 99 } 100); 101``` 102 103If there aren't any licensing terms, use `UNLICENSED`: 104 105```javascript 106var unlicensed = { 107 validForNewPackages: true, 108 validForOldPackages: true, 109 unlicensed: true 110}; 111assert.deepEqual(valid('UNLICENSED'), unlicensed); 112assert.deepEqual(valid('UNLICENCED'), unlicensed); 113``` 114