114 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | validate-npm-package-license | ||
|  | ============================ | ||
|  | 
 | ||
|  | Give me a string and I'll tell you if it's a valid npm package license string. | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var valid = require('validate-npm-package-license'); | ||
|  | ``` | ||
|  | 
 | ||
|  | SPDX license identifiers are valid license strings: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | 
 | ||
|  | var assert = require('assert'); | ||
|  | var validSPDXExpression = { | ||
|  |   validForNewPackages: true, | ||
|  |   validForOldPackages: true, | ||
|  |   spdx: true | ||
|  | }; | ||
|  | 
 | ||
|  | assert.deepEqual(valid('MIT'), validSPDXExpression); | ||
|  | assert.deepEqual(valid('BSD-2-Clause'), validSPDXExpression); | ||
|  | assert.deepEqual(valid('Apache-2.0'), validSPDXExpression); | ||
|  | assert.deepEqual(valid('ISC'), validSPDXExpression); | ||
|  | ``` | ||
|  | The function will return a warning and suggestion for nearly-correct license identifiers: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | assert.deepEqual( | ||
|  |   valid('Apache 2.0'), | ||
|  |   { | ||
|  |     validForOldPackages: false, | ||
|  |     validForNewPackages: false, | ||
|  |     warnings: [ | ||
|  |       'license should be ' + | ||
|  |       'a valid SPDX license expression (without "LicenseRef"), ' + | ||
|  |       '"UNLICENSED", or ' + | ||
|  |       '"SEE LICENSE IN <filename>"', | ||
|  |       'license is similar to the valid expression "Apache-2.0"' | ||
|  |     ] | ||
|  |   } | ||
|  | ); | ||
|  | ``` | ||
|  | 
 | ||
|  | SPDX expressions are valid, too ... | ||
|  | 
 | ||
|  | ```javascript | ||
|  | // Simple SPDX license expression for dual licensing | ||
|  | assert.deepEqual( | ||
|  |   valid('(GPL-3.0-only OR BSD-2-Clause)'), | ||
|  |   validSPDXExpression | ||
|  | ); | ||
|  | ``` | ||
|  | 
 | ||
|  | ... except if they contain `LicenseRef`: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var warningAboutLicenseRef = { | ||
|  |   validForOldPackages: false, | ||
|  |   validForNewPackages: false, | ||
|  |   spdx: true, | ||
|  |   warnings: [ | ||
|  |     'license should be ' + | ||
|  |     'a valid SPDX license expression (without "LicenseRef"), ' + | ||
|  |     '"UNLICENSED", or ' + | ||
|  |     '"SEE LICENSE IN <filename>"', | ||
|  |   ] | ||
|  | }; | ||
|  | 
 | ||
|  | assert.deepEqual( | ||
|  |   valid('LicenseRef-Made-Up'), | ||
|  |   warningAboutLicenseRef | ||
|  | ); | ||
|  | 
 | ||
|  | assert.deepEqual( | ||
|  |   valid('(MIT OR LicenseRef-Made-Up)'), | ||
|  |   warningAboutLicenseRef | ||
|  | ); | ||
|  | ``` | ||
|  | 
 | ||
|  | If you can't describe your licensing terms with standardized SPDX identifiers, put the terms in a file in the package and point users there: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | assert.deepEqual( | ||
|  |   valid('SEE LICENSE IN LICENSE.txt'), | ||
|  |   { | ||
|  |     validForNewPackages: true, | ||
|  |     validForOldPackages: true, | ||
|  |     inFile: 'LICENSE.txt' | ||
|  |   } | ||
|  | ); | ||
|  | 
 | ||
|  | assert.deepEqual( | ||
|  |   valid('SEE LICENSE IN license.md'), | ||
|  |   { | ||
|  |     validForNewPackages: true, | ||
|  |     validForOldPackages: true, | ||
|  |     inFile: 'license.md' | ||
|  |   } | ||
|  | ); | ||
|  | ``` | ||
|  | 
 | ||
|  | If there aren't any licensing terms, use `UNLICENSED`: | ||
|  | 
 | ||
|  | ```javascript | ||
|  | var unlicensed = { | ||
|  |   validForNewPackages: true, | ||
|  |   validForOldPackages: true, | ||
|  |   unlicensed: true | ||
|  | }; | ||
|  | assert.deepEqual(valid('UNLICENSED'), unlicensed); | ||
|  | assert.deepEqual(valid('UNLICENCED'), unlicensed); | ||
|  | ``` |