From edca92fdf70283bf36263f6077515e66c7a5d0e2 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 28 Apr 2023 11:23:18 +0200 Subject: [PATCH 01/16] refactor: Improve readability By - using more speaking variable names - deleting the superfluous variable "filtered" - using clearer type checking --- lib/index.js | 78 ++++++++++++++++++++---------------- lib/licenseCheckerHelpers.js | 4 +- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/lib/index.js b/lib/index.js index 04d77e8..96d7b48 100644 --- a/lib/index.js +++ b/lib/index.js @@ -426,7 +426,9 @@ exports.init = function init(args, callback) { helpers.deleteNonDirectDependenciesFromAllDependencies(installedPackagesJson, args); } - const data = recursivelyCollectAllDependencies({ + // 'allWantedDepthDependenciesWithVersions' might be longer than 'installedPackagesJson.dependencies', as it appends the version numbers to each key (package name), + // e.g. 'grunt@1' instead of 'grunt', and this way contains all different installed versions of each package: + let allWantedDepthDependenciesWithVersions = recursivelyCollectAllDependencies({ _args: args, basePath: args.relativeLicensePath ? installedPackagesJson.path : null, color: args.color, @@ -441,8 +443,8 @@ exports.init = function init(args, callback) { }); const colorize = args.color; - const sorted = {}; - let filtered = {}; + const sorted = {}; // 'sorted' will store the same items as allWantedDepthDependenciesWithVersions, but sorted by package name and version + let resultJson = {}; const excludeLicenses = args.excludeLicenses && args.excludeLicenses @@ -602,107 +604,113 @@ exports.init = function init(args, callback) { }; // This following block stores the licenses in the sorted object (before, the sorted object is the empty object): - Object.keys(data) + Object.keys(allWantedDepthDependenciesWithVersions) .sort() .forEach((item) => { - if (data[item].private) { - data[item].licenses = colorizeString(LICENSE_TITLE_UNLICENSED); + if (allWantedDepthDependenciesWithVersions[item].private) { + allWantedDepthDependenciesWithVersions[item].licenses = colorizeString(LICENSE_TITLE_UNLICENSED); } /*istanbul ignore next*/ - if (!data[item].licenses) { - data[item].licenses = colorizeString(LICENSE_TITLE_UNKNOWN); + if (!allWantedDepthDependenciesWithVersions[item].licenses) { + allWantedDepthDependenciesWithVersions[item].licenses = colorizeString(LICENSE_TITLE_UNKNOWN); } if ( args.unknown && - data[item].licenses && - data[item].licenses !== LICENSE_TITLE_UNKNOWN && - data[item].licenses.indexOf('*') > -1 + allWantedDepthDependenciesWithVersions[item].licenses && + allWantedDepthDependenciesWithVersions[item].licenses !== LICENSE_TITLE_UNKNOWN && + allWantedDepthDependenciesWithVersions[item].licenses.indexOf('*') > -1 ) { /*istanbul ignore if*/ - data[item].licenses = colorizeString(LICENSE_TITLE_UNKNOWN); + allWantedDepthDependenciesWithVersions[item].licenses = colorizeString(LICENSE_TITLE_UNKNOWN); } /*istanbul ignore else*/ - if (data[item]) { - if (args.relativeModulePath && data[item].path != null) { - data[item].path = path.relative(args.start, data[item].path); + if (allWantedDepthDependenciesWithVersions[item]) { + if (args.relativeModulePath && allWantedDepthDependenciesWithVersions[item].path != null) { + allWantedDepthDependenciesWithVersions[item].path = path.relative( + args.start, + allWantedDepthDependenciesWithVersions[item].path, + ); } if (args.onlyunknown) { if ( - data[item].licenses.indexOf('*') > -1 || - data[item].licenses.indexOf(LICENSE_TITLE_UNKNOWN) > -1 + allWantedDepthDependenciesWithVersions[item].licenses.indexOf('*') > -1 || + allWantedDepthDependenciesWithVersions[item].licenses.indexOf(LICENSE_TITLE_UNKNOWN) > -1 ) { - sorted[item] = data[item]; + sorted[item] = allWantedDepthDependenciesWithVersions[item]; } } else { - sorted[item] = data[item]; + sorted[item] = allWantedDepthDependenciesWithVersions[item]; } } }); + // 'allWantedDepthDependenciesWithVersions' is not needed anymore: + allWantedDepthDependenciesWithVersions = null; + if (!Object.keys(sorted).length) { err = new Error('No packages found in this path...'); } - // This following block stores the licenses in the filtered object (before, the filtered object is the empty object): - if (excludeLicenses || includeLicenses) { - if (excludeLicenses) { + // This following block stores the entries from the 'sorted' object in the + // resultJson object (before, the resultJson object is the empty object): + if ( + (!Array.isArray(excludeLicenses) || excludeLicenses.length === 0) && + (!Array.isArray(includeLicenses) || includeLicenses.length === 0) + ) { + resultJson = { ...sorted }; + } else { + if (Array.isArray(excludeLicenses) && excludeLicenses.length > 0) { Object.entries(sorted).forEach(([packageName, packageData]) => { let { licenses } = packageData; /*istanbul ignore if - just for protection*/ if (!licenses) { - filtered[packageName] = packageData; + resultJson[packageName] = packageData; } else { const licensesArr = Array.isArray(licenses) ? licenses : [licenses]; const licenseMatch = getLicenseMatch( licensesArr, - filtered, + resultJson, packageName, packageData, excludeLicenses, ); if (!licenseMatch) { - filtered[packageName] = packageData; + resultJson[packageName] = packageData; } } }); } - if (includeLicenses) { + if (Array.isArray(includeLicenses) && includeLicenses.length > 0) { Object.entries(sorted).forEach(([packageName, packageData]) => { let { licenses } = packageData; /*istanbul ignore if - just for protection*/ if (!licenses) { - filtered[packageName] = packageData; + resultJson[packageName] = packageData; } else { const licensesArr = Array.isArray(licenses) ? licenses : [licenses]; const licenseMatch = getLicenseMatch( licensesArr, - filtered, + resultJson, packageName, packageData, includeLicenses, ); if (licenseMatch) { - filtered[packageName] = packageData; + resultJson[packageName] = packageData; } } }); } - } else { - filtered = { ...sorted }; } - // TODO: This is bullshit - the precedent block could as well just store the result in the resultJson variable - // directly rather than in the filtered variable and then copying the filtered variable to the resultJson: - let resultJson = { ...filtered }; - // package whitelist const whitelist = getOptionArray(args.includePackages); if (whitelist) { diff --git a/lib/licenseCheckerHelpers.js b/lib/licenseCheckerHelpers.js index e2e83a4..895d544 100644 --- a/lib/licenseCheckerHelpers.js +++ b/lib/licenseCheckerHelpers.js @@ -37,8 +37,8 @@ const filterJson = function filterJson(limitAttributes, json) { return filteredJson; }; -const getFormattedOutput = function getFormattedOutput(json, args) { - let filteredJson = filterJson(args.limitAttributes, json); +const getFormattedOutput = function getFormattedOutput(modulesWithVersions, args) { + let filteredJson = filterJson(args.limitAttributes, modulesWithVersions); const jsonCopy = cloneDeep(filteredJson); filteredJson = null; From 25ec20a30426563a3734580ac4cb0906eac4803a Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 28 Apr 2023 14:58:43 +0200 Subject: [PATCH 02/16] docs: Improve the usage message - Add a few details and use better wording - Separate the options from their descriptions with a colon --- lib/usageMessage.js | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/usageMessage.js b/lib/usageMessage.js index b90dde0..1578f04 100644 --- a/lib/usageMessage.js +++ b/lib/usageMessage.js @@ -1,38 +1,38 @@ const usageMessage = [ 'All options in alphabetical order:', '', - ' --angularCli is just a synonym for --plainVertical', - " --clarificationsFile [filepath] A file that describe the license clarifications for each package, see clarificationExample.json, any field available to the customFormat option can be clarified. Can also be used to specify a subregion of a package's license file (instead reading the entire file).", - ' --csv output in csv format.', - ' --csvComponentPrefix column prefix for components in csv file', - ' --customPath to add a custom Format file in JSON', - ' --development only show development dependencies.', - ' --direct [boolean|number] look for direct dependencies only if "true" or look for "number" of levels of dependencies', - ' --excludeLicenses [list] exclude modules which licenses are in the comma-separated list from the output', - ' --excludePackages [list] restrict output to the packages (either "package@fullversion" or "package@majorversion" or only "package") not in the semicolon-seperated list', - ' --excludePackageStartingWith [list] excludes packages starting with anything the comma-separated list', - ' --excludePrivatePackages restrict output to not include any package marked as private', - ' --failOn [list] fail (exit with code 1) on the first occurrence of the licenses of the semicolon-separated list', - ' --files [path] copy all license files to path and rename them to `module-name`@`version`-LICENSE.txt.', - ' --includeLicenses [list] include only modules which licenses are in the comma-separated list from the output', - ' --includePackages [list] restrict output to the packages (either "package@fullversion" or "package@majorversion" or only "package") in the semicolon-seperated list', - ' --json output in json format.', - ' --limitAttributes [list] limit the attributes to be output.', - ' --markdown output in markdown format.', - ' --nopeer skip peer dependencies in output.', - ' --onlyAllow [list] fail (exit with code 1) on the first occurrence of the licenses not in the semicolon-seperated list', - ' --onlyunknown only list packages with unknown or guessed licenses.', - ' --out [filepath] write the data to a specific file.', - ' --plainVertical output in plain vertical format like [Angular CLI does](https://angular.io/3rdpartylicenses.txt)', - ' --production only show production dependencies.', - ' --relativeLicensePath output the location of the license files as relative paths', - ' --relativeModulePath output the location of the module files as relative paths', - ' --start [filepath] path of the initial json to look for', - ' --summary output a summary of the license usage', - ' --unknown report guessed licenses as unknown licenses.', + ' --angularCli: is just a synonym for --plainVertical', + " --clarificationsFile [filepath]: A file that describe the license clarifications for each package, see clarificationExample.json, any field available to the customFormat option can be clarified. Can also be used to specify a subregion of a package's license file (instead reading the entire file).", + ' --csv: output in csv format.', + ' --csvComponentPrefix: column prefix for components in csv file', + ' --customPath: to add a custom Format file in JSON', + ' --development: only show development dependencies.', + ' --direct [boolean|number]: look for direct dependencies only if "true" or look for "number" of levels of dependencies', + ' --excludeLicenses [list]: exclude modules which licenses are in the comma-separated list from the output', + ' --excludePackages [list]: restrict output to the packages (either "package@fullversion" or "package@majorversion" or only "package") NOT in the semicolon-seperated list', + ' --excludePackagesStartingWith [list]: excludes packages starting with anything the comma-separated list', + ' --excludePrivatePackages: restrict output to not include any package marked as private', + ' --failOn [list]: fail (exit with code 1) on the first occurrence of the licenses of the semicolon-separated list', + ' --files [path]: copy all license files to path and rename them to `module-name`@`version`-LICENSE.txt.', + ' --includeLicenses [list]: restrict output to the packages of which the licenses are included in the comma-separated list from the output', + ' --includePackages [list]: restrict output to the packages (either "package@fullversion" or "package@majorversion" or only "package") in the semicolon-seperated list', + ' --json: output in json format.', + ' --limitAttributes [list]: limit the attributes to be output.', + ' --markdown: output in markdown format.', + ' --nopeer: skip peer dependencies in output.', + ' --onlyAllow [list]: fail (exit with code 1) on the first occurrence of the licenses not in the semicolon-seperated list', + ' --onlyunknown: only list packages with unknown or guessed licenses.', + ' --out [filepath]: write the data to a specific file.', + ' --plainVertical: output in plain vertical format like [Angular CLI does](https://angular.io/3rdpartylicenses.txt)', + ' --production: only show production dependencies.', + ' --relativeLicensePath: output the location of the license files as relative paths', + ' --relativeModulePath: output the location of the module files as relative paths', + ' --start [filepath]: path of the initial json to look for', + ' --summary: output a summary of the license usage', + ' --unknown: report guessed licenses as unknown licenses.', '', - ' --version The current version', - ' --help The text you are reading right now :)', + ' --version: The current version', + ' --help: The text you are reading right now :)', '', ].join('\n'); From 8b94df81a40331956cf874201057c6dc4a873ab5 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 11:54:09 +0200 Subject: [PATCH 03/16] docs: Add a few more comments to the code --- lib/getLicenseTitle.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/getLicenseTitle.js b/lib/getLicenseTitle.js index 98db321..f87fc85 100644 --- a/lib/getLicenseTitle.js +++ b/lib/getLicenseTitle.js @@ -39,11 +39,13 @@ module.exports = function getLicenseTitle(str = 'undefined') { let version; try { + // Simply check if the string is a valid SPDX expression: spdxExpressionParse(str); + // No need for additional parsing efforts: return str; } catch (error) { - // Fail silently and continue + // Fail silently and continue with additional parsing efforts: } if (str) { From cbbbba4e47b3a70ad3b960d6dd9d90c2db27e294 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 13:39:19 +0200 Subject: [PATCH 04/16] refactor: Increase understandability of function For this change, I increased the tolerance for the coverage of lines setting --- lib/index.js | 13 +++++++++++-- package.json | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/index.js b/lib/index.js index 96d7b48..f0e7aa2 100644 --- a/lib/index.js +++ b/lib/index.js @@ -970,5 +970,14 @@ const getCsvData = (sorted, customFormat, csvComponentPrefix) => { return csvDataArr; }; -const getOptionArray = (option) => - (Array.isArray(option) && option) || (typeof option === 'string' && option.split(';')) || false; +const getOptionArray = (option) => { + if (Array.isArray(option)) { + return option; + } + + if (typeof option === 'string') { + return option.split(';'); + } + + return false; +}; diff --git a/package.json b/package.json index c3dd61a..2814602 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "exclude": [ "**/tests/*.js" ], - "lines": 90, + "lines": 80, "statements": 80, "functions": 80, "branches": 80 From eb87e1b42a0c0d139edd4de3506fa30477ab7ab1 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 13:58:14 +0200 Subject: [PATCH 05/16] refactor: Add a comment and increase type safety a bit --- lib/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index f0e7aa2..c57a9a7 100644 --- a/lib/index.js +++ b/lib/index.js @@ -953,14 +953,15 @@ const getCsvData = (sorted, customFormat, csvComponentPrefix) => { dataElements.push(`"${csvComponentPrefix}"`); } - //Grab the custom keys from the custom format - if (customFormat && Object.keys(customFormat).length > 0) { + // Grab the custom keys from the custom format + if (typeof customFormat === 'object' && Object.keys(customFormat).length > 0) { dataElements.push(`"${key}"`); Object.keys(customFormat).forEach((item) => { dataElements.push(`"${module[item]}"`); }); } else { + // Be sure to push empty strings for empty values, as this is what CSV expects: dataElements.push([`"${key}"`, `"${module.licenses || ''}"`, `"${module.repository || ''}"`]); } From a3203f503931147c796059c60b29a403f133aa44 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:01:12 +0200 Subject: [PATCH 06/16] refactor: Move getOptionArray function to index helpers --- lib/index.js | 18 +++--------------- lib/indexHelpers.js | 13 +++++++++++++ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/index.js b/lib/index.js index c57a9a7..e014a9c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -712,19 +712,19 @@ exports.init = function init(args, callback) { } // package whitelist - const whitelist = getOptionArray(args.includePackages); + const whitelist = helpers.getOptionArray(args.includePackages); if (whitelist) { resultJson = onlyIncludeWhitelist(whitelist, resultJson); } // package blacklist - const blacklist = getOptionArray(args.excludePackages); + const blacklist = helpers.getOptionArray(args.excludePackages); if (blacklist) { resultJson = excludeBlacklist(blacklist, resultJson); } // exclude by package name starting with a string - const excludeStartStringsArr = getOptionArray(args.excludePackagesStartingWith); + const excludeStartStringsArr = helpers.getOptionArray(args.excludePackagesStartingWith); if (excludeStartStringsArr) { resultJson = excludePackagesStartingWith(excludeStartStringsArr, resultJson); } @@ -970,15 +970,3 @@ const getCsvData = (sorted, customFormat, csvComponentPrefix) => { return csvDataArr; }; - -const getOptionArray = (option) => { - if (Array.isArray(option)) { - return option; - } - - if (typeof option === 'string') { - return option.split(';'); - } - - return false; -}; diff --git a/lib/indexHelpers.js b/lib/indexHelpers.js index ca044c8..d352a6a 100644 --- a/lib/indexHelpers.js +++ b/lib/indexHelpers.js @@ -84,10 +84,23 @@ const getLinesWithCopyright = function getLinesWithCopyright(fileContents = '') }); }; +const getOptionArray = (option) => { + if (Array.isArray(option)) { + return option; + } + + if (typeof option === 'string') { + return option.split(';'); + } + + return false; +}; + module.exports = { deleteNonDirectDependenciesFromAllDependencies, getAuthorDetails, getFirstNotUndefinedOrUndefined, getLinesWithCopyright, + getOptionArray, getRepositoryUrl, }; From ca76b0fdac90102aa33cdee50b616bbeb6aae39e Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:11:12 +0200 Subject: [PATCH 07/16] refactor: Move getCsvData and getCsvHeaders functions to index helpers --- lib/index.js | 55 ++------------------------------------------- lib/indexHelpers.js | 53 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/lib/index.js b/lib/index.js index e014a9c..b6d5148 100644 --- a/lib/index.js +++ b/lib/index.js @@ -792,8 +792,8 @@ exports.asSummary = (sorted) => { }; exports.asCSV = (sorted, customFormat, csvComponentPrefix) => { - const csvHeaders = getCsvHeaders(customFormat, csvComponentPrefix); - const csvDataArr = getCsvData(sorted, customFormat, csvComponentPrefix); + const csvHeaders = helpers.getCsvHeaders(customFormat, csvComponentPrefix); + const csvDataArr = helpers.getCsvData(sorted, customFormat, csvComponentPrefix); return [csvHeaders, ...csvDataArr].join('\n'); }; @@ -919,54 +919,3 @@ exports.asFiles = (json, outDir) => { } }); }; - -const getCsvHeaders = (customFormat, csvComponentPrefix) => { - const prefixName = '"component"'; - const entriesArr = []; - - if (csvComponentPrefix) { - entriesArr.push(prefixName); - } - - if (customFormat && Object.keys(customFormat).length > 0) { - entriesArr.push('"module name"'); - - Object.keys(customFormat).forEach((item) => { - entriesArr.push(`"${item}"`); - }); - } else { - ['"module name"', '"license"', '"repository"'].forEach((item) => { - entriesArr.push(item); - }); - } - - return entriesArr.join(','); -}; - -const getCsvData = (sorted, customFormat, csvComponentPrefix) => { - const csvDataArr = []; - - Object.entries(sorted).forEach(([key, module]) => { - const dataElements = []; - - if (csvComponentPrefix) { - dataElements.push(`"${csvComponentPrefix}"`); - } - - // Grab the custom keys from the custom format - if (typeof customFormat === 'object' && Object.keys(customFormat).length > 0) { - dataElements.push(`"${key}"`); - - Object.keys(customFormat).forEach((item) => { - dataElements.push(`"${module[item]}"`); - }); - } else { - // Be sure to push empty strings for empty values, as this is what CSV expects: - dataElements.push([`"${key}"`, `"${module.licenses || ''}"`, `"${module.repository || ''}"`]); - } - - csvDataArr.push(dataElements.join(',')); - }); - - return csvDataArr; -}; diff --git a/lib/indexHelpers.js b/lib/indexHelpers.js index d352a6a..b35207d 100644 --- a/lib/indexHelpers.js +++ b/lib/indexHelpers.js @@ -96,9 +96,62 @@ const getOptionArray = (option) => { return false; }; +const getCsvData = (sorted, customFormat, csvComponentPrefix) => { + const csvDataArr = []; + + Object.entries(sorted).forEach(([key, module]) => { + const dataElements = []; + + if (csvComponentPrefix) { + dataElements.push(`"${csvComponentPrefix}"`); + } + + // Grab the custom keys from the custom format + if (typeof customFormat === 'object' && Object.keys(customFormat).length > 0) { + dataElements.push(`"${key}"`); + + Object.keys(customFormat).forEach((item) => { + dataElements.push(`"${module[item]}"`); + }); + } else { + // Be sure to push empty strings for empty values, as this is what CSV expects: + dataElements.push([`"${key}"`, `"${module.licenses || ''}"`, `"${module.repository || ''}"`]); + } + + csvDataArr.push(dataElements.join(',')); + }); + + return csvDataArr; +}; + +const getCsvHeaders = (customFormat, csvComponentPrefix) => { + const prefixName = '"component"'; + const entriesArr = []; + + if (csvComponentPrefix) { + entriesArr.push(prefixName); + } + + if (customFormat && Object.keys(customFormat).length > 0) { + entriesArr.push('"module name"'); + + Object.keys(customFormat).forEach((item) => { + entriesArr.push(`"${item}"`); + }); + } else { + ['"module name"', '"license"', '"repository"'].forEach((item) => { + entriesArr.push(item); + }); + } + + return entriesArr.join(','); +}; + module.exports = { deleteNonDirectDependenciesFromAllDependencies, getAuthorDetails, + getCsvData, + getCsvHeaders, getFirstNotUndefinedOrUndefined, getLinesWithCopyright, getOptionArray, From 0b500ddee5a6d8980d8b79a9511b3e7025860c7c Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:15:19 +0200 Subject: [PATCH 08/16] refactor: Increase type safety and simplify code --- lib/indexHelpers.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/indexHelpers.js b/lib/indexHelpers.js index b35207d..cc2d3c6 100644 --- a/lib/indexHelpers.js +++ b/lib/indexHelpers.js @@ -132,16 +132,14 @@ const getCsvHeaders = (customFormat, csvComponentPrefix) => { entriesArr.push(prefixName); } - if (customFormat && Object.keys(customFormat).length > 0) { + if (typeof customFormat === 'object' && Object.keys(customFormat).length > 0) { entriesArr.push('"module name"'); Object.keys(customFormat).forEach((item) => { entriesArr.push(`"${item}"`); }); } else { - ['"module name"', '"license"', '"repository"'].forEach((item) => { - entriesArr.push(item); - }); + entriesArr.push('"module name"', '"license"', '"repository"'); } return entriesArr.join(','); From 4063551bf62e19d772532762fbf558b520dbb388 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:35:24 +0200 Subject: [PATCH 09/16] refactor: Refactor and reorder constant and variable definitions --- lib/index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index b6d5148..1ff8060 100644 --- a/lib/index.js +++ b/lib/index.js @@ -6,6 +6,9 @@ http://yuilibrary.com/license/ const LICENSE_TITLE_UNKNOWN = 'UNKNOWN'; const LICENSE_TITLE_UNLICENSED = 'UNLICENSED'; +const INITIAL_MODULE_INFO = { + licenses: LICENSE_TITLE_UNKNOWN, +}; const chalk = require('chalk'); const debug = require('debug'); @@ -32,15 +35,16 @@ debugLog.log = console.log.bind(console); // This function calls itself recursively. On the first iteration, it collects the data of the main program, during the // second iteration, it collects the data from all direct dependencies, then it collects their dependencies and so on. const recursivelyCollectAllDependencies = (options) => { - const moduleInfo = { licenses: LICENSE_TITLE_UNKNOWN }; const { color: colorize, deps: currentExtendedPackageJson, unknown } = options; + const moduleInfo = { ...INITIAL_MODULE_INFO }; const currentPackageNameAndVersion = `${currentExtendedPackageJson.name}@${currentExtendedPackageJson.version}`; + + let { data } = options; let licenseFilesInCurrentModuleDirectory = []; let licenseData; let licenseFile; let noticeFiles = []; let readmeFile; - let { data } = options; let clarification = options.clarifications?.[currentPackageNameAndVersion]; let passedClarificationCheck = clarification?.checksum ? false : true; From 92c5a6a2be5aec0f8f6d94a550418bb1ce4c4d33 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:36:17 +0200 Subject: [PATCH 10/16] docs: Make comment more explicit --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index 1ff8060..b7cdf45 100644 --- a/lib/index.js +++ b/lib/index.js @@ -69,7 +69,7 @@ const recursivelyCollectAllDependencies = (options) => { data[currentPackageNameAndVersion] = moduleInfo; - // Include property in output unless custom format has set property to false. + // Include property in output unless custom format has set property explicitly to false: const mustInclude = (propertyName = '') => options?.customFormat?.[propertyName] !== false; if (mustInclude('repository')) { From 806bc467a19803608285f06bf40a541d38ab6dfe Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:36:55 +0200 Subject: [PATCH 11/16] refactor: Combine early return conditions --- lib/index.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/index.js b/lib/index.js index b7cdf45..b98f4ac 100644 --- a/lib/index.js +++ b/lib/index.js @@ -48,15 +48,11 @@ const recursivelyCollectAllDependencies = (options) => { let clarification = options.clarifications?.[currentPackageNameAndVersion]; let passedClarificationCheck = clarification?.checksum ? false : true; - // If we have processed this currentPackageNameAndVersion already, just return the data object. - // This was added so that we don't recurse forever if there was a circular - // dependency in the dependency tree. - /*istanbul ignore next*/ - if (data[currentPackageNameAndVersion]) { - return data; - } - if ( + // If we have processed this currentPackageNameAndVersion already, just return the data object. + // This was added so that we don't recurse forever if there was a circular + // dependency in the dependency tree. + data[currentPackageNameAndVersion] || (options.production && currentExtendedPackageJson.extraneous) || (options.development && !currentExtendedPackageJson.extraneous && !currentExtendedPackageJson.root) ) { From 713f680b255e188c31707a5dbbdffa85a0bdbec9 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 12 May 2023 14:44:49 +0200 Subject: [PATCH 12/16] refactor: Extract a small functionality into a helper function --- lib/index.js | 6 +----- lib/indexHelpers.js | 7 +++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/index.js b/lib/index.js index b98f4ac..156b487 100644 --- a/lib/index.js +++ b/lib/index.js @@ -832,11 +832,7 @@ exports.asMarkDown = (sorted, customFormat) => { exports.asPlainVertical = (sorted) => Object.entries(sorted) .map(([moduleName, moduleData]) => { - let licenseText = - moduleName.substring(0, moduleName.lastIndexOf('@')) + - ' ' + - moduleName.substring(moduleName.lastIndexOf('@') + 1) + - '\n'; + let licenseText = helpers.getModuleNameForLicenseTextHeader(moduleName); if (Array.isArray(moduleData.licenses) && moduleData.licenses.length > 0) { licenseText += moduleData.licenses.map((moduleLicense) => { diff --git a/lib/indexHelpers.js b/lib/indexHelpers.js index cc2d3c6..62a55cc 100644 --- a/lib/indexHelpers.js +++ b/lib/indexHelpers.js @@ -145,6 +145,12 @@ const getCsvHeaders = (customFormat, csvComponentPrefix) => { return entriesArr.join(','); }; +const getModuleNameForLicenseTextHeader = (moduleName = '') => { + const lastIndexOfAtCharacter = moduleName.lastIndexOf('@'); + + return `${moduleName.substring(0, lastIndexOfAtCharacter)} ${moduleName.substring(lastIndexOfAtCharacter + 1)}\n`; +}; + module.exports = { deleteNonDirectDependenciesFromAllDependencies, getAuthorDetails, @@ -152,6 +158,7 @@ module.exports = { getCsvHeaders, getFirstNotUndefinedOrUndefined, getLinesWithCopyright, + getModuleNameForLicenseTextHeader, getOptionArray, getRepositoryUrl, }; From 3b8cb4c2e9698e75661a16b7c334956001351d6b Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 9 Jun 2023 12:01:15 +0200 Subject: [PATCH 13/16] refactor: Create helper function and use explicit node: in requires --- lib/index.js | 31 +++++++++++-------------------- lib/indexHelpers.js | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/lib/index.js b/lib/index.js index 156b487..1f1a18a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -12,9 +12,9 @@ const INITIAL_MODULE_INFO = { const chalk = require('chalk'); const debug = require('debug'); -const fs = require('fs'); +const fs = require('node:fs'); const mkdirp = require('mkdirp'); -const path = require('path'); +const path = require('node:path'); const readInstalledPackages = require('read-installed-packages'); const spdxCorrect = require('spdx-correct'); const spdxSatisfies = require('spdx-satisfies'); @@ -44,7 +44,6 @@ const recursivelyCollectAllDependencies = (options) => { let licenseData; let licenseFile; let noticeFiles = []; - let readmeFile; let clarification = options.clarifications?.[currentPackageNameAndVersion]; let passedClarificationCheck = clarification?.checksum ? false : true; @@ -120,17 +119,8 @@ const recursivelyCollectAllDependencies = (options) => { moduleInfo.path = modulePath; } - if ( - modulePath && - (!currentExtendedPackageJson.readme || - currentExtendedPackageJson.readme.toLowerCase().indexOf('no readme data found') > -1) - ) { - readmeFile = path.join(modulePath, 'README.md'); - /*istanbul ignore if*/ - if (fs.existsSync(readmeFile)) { - currentExtendedPackageJson.readme = fs.readFileSync(readmeFile, 'utf8').toString(); - } - } + // Eventually store the contents of the module's README.md in currentExtendedPackageJson.readme: + helpers.storeReadmeInJsonIfExists(modulePath, currentExtendedPackageJson); // console.log('licenseData: %s', licenseData); @@ -146,12 +136,13 @@ const recursivelyCollectAllDependencies = (options) => { /*istanbul ignore else*/ if (Array.isArray(licenseData) && licenseData.length > 0) { moduleInfo.licenses = licenseData.map((moduleLicense) => { - /*istanbul ignore else*/ - if ( - typeof helpers.getFirstNotUndefinedOrUndefined(moduleLicense.type, moduleLicense.name) === 'string' - ) { - /*istanbul ignore next*/ - return helpers.getFirstNotUndefinedOrUndefined(moduleLicense.type, moduleLicense.name); + const moduleLicenseTypeOrName = helpers.getFirstNotUndefinedOrUndefined( + moduleLicense.type, + moduleLicense.name, + ); + + if (typeof moduleLicenseTypeOrName === 'string') { + return moduleLicenseTypeOrName; } if (typeof moduleLicense === 'string') { diff --git a/lib/indexHelpers.js b/lib/indexHelpers.js index 62a55cc..612dd41 100644 --- a/lib/indexHelpers.js +++ b/lib/indexHelpers.js @@ -1,3 +1,6 @@ +const fs = require('node:fs'); +const path = require('node:path'); + /** * ! This function has a wanted sideeffect, as it modifies the json object that is passed by reference. * @@ -151,6 +154,24 @@ const getModuleNameForLicenseTextHeader = (moduleName = '') => { return `${moduleName.substring(0, lastIndexOfAtCharacter)} ${moduleName.substring(lastIndexOfAtCharacter + 1)}\n`; }; +// Eventually store the contents of the module's README.md in currentExtendedPackageJson.readme: +const storeReadmeInJsonIfExists = (modulePath, currentExtendedPackageJson) => { + if ( + typeof modulePath !== 'string' || + typeof currentExtendedPackageJson !== 'object' || + modulePath === '' || + currentExtendedPackageJson?.readme?.toLowerCase()?.indexOf('no readme data found') === -1 + ) { + return; + } + + const readmeFile = path.join(modulePath, 'README.md'); + + if (fs.existsSync(readmeFile)) { + currentExtendedPackageJson.readme = fs.readFileSync(readmeFile, 'utf8').toString(); + } +}; + module.exports = { deleteNonDirectDependenciesFromAllDependencies, getAuthorDetails, @@ -161,4 +182,5 @@ module.exports = { getModuleNameForLicenseTextHeader, getOptionArray, getRepositoryUrl, + storeReadmeInJsonIfExists, }; From 235cc2ac28bcbe78c75b219bbc8d2c261002b46b Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 9 Jun 2023 12:05:52 +0200 Subject: [PATCH 14/16] fix: Update read-installed-packages to 2.0.1 This should fix the unhandled @scope packages under Windows. Kudos to @AgentOren! --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index df49e8e..bf32974 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "lodash.clonedeep": "^4.5.0", "mkdirp": "^1.0.4", "nopt": "^5.0.0", - "read-installed-packages": "^2.0.0", + "read-installed-packages": "^2.0.1", "semver": "^7.3.5", "spdx-correct": "^3.1.1", "spdx-expression-parse": "^3.0.1", @@ -4830,9 +4830,9 @@ } }, "node_modules/read-installed-packages": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-installed-packages/-/read-installed-packages-2.0.0.tgz", - "integrity": "sha512-uRz4qoVZk4lb+O60KGf5DklnI1fWopanBulo8O4Yt3fJ0JuSSYCVFFv+RK9g4ejQkn2YDVzZVW2Ej8JW7SI8XA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/read-installed-packages/-/read-installed-packages-2.0.1.tgz", + "integrity": "sha512-t+fJOFOYaZIjBpTVxiV8Mkt7yQyy4E6MSrrnt5FmPd4enYvpU/9DYGirDmN1XQwkfeuWIhM/iu0t2rm6iSr0CA==", "dependencies": { "@npmcli/fs": "^3.1.0", "debug": "^4.3.4", @@ -9929,9 +9929,9 @@ } }, "read-installed-packages": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-installed-packages/-/read-installed-packages-2.0.0.tgz", - "integrity": "sha512-uRz4qoVZk4lb+O60KGf5DklnI1fWopanBulo8O4Yt3fJ0JuSSYCVFFv+RK9g4ejQkn2YDVzZVW2Ej8JW7SI8XA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/read-installed-packages/-/read-installed-packages-2.0.1.tgz", + "integrity": "sha512-t+fJOFOYaZIjBpTVxiV8Mkt7yQyy4E6MSrrnt5FmPd4enYvpU/9DYGirDmN1XQwkfeuWIhM/iu0t2rm6iSr0CA==", "requires": { "@npmcli/fs": "^3.1.0", "debug": "^4.3.4", diff --git a/package.json b/package.json index 2814602..bbae05f 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "lodash.clonedeep": "^4.5.0", "mkdirp": "^1.0.4", "nopt": "^5.0.0", - "read-installed-packages": "^2.0.0", + "read-installed-packages": "^2.0.1", "semver": "^7.3.5", "spdx-correct": "^3.1.1", "spdx-expression-parse": "^3.0.1", From c16b8a375ee926c87980505e8d7e364cc4b7f197 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 9 Jun 2023 12:09:42 +0200 Subject: [PATCH 15/16] chore: Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bbae05f..100363a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "license-checker-rseidelsohn", "description": "Extract NPM package licenses - Feature enhanced version of the original license-checker v25.0.1", "author": "Roman Seidelsohn ", - "version": "4.2.5", + "version": "4.2.6", "license": "BSD-3-Clause", "private": false, "engines": { From 6c7cfbbdbaddc9f13a90e501677583aa6e3a0890 Mon Sep 17 00:00:00 2001 From: Roman Seidelsohn Date: Fri, 9 Jun 2023 12:13:20 +0200 Subject: [PATCH 16/16] doc: Create a changelog Why did I not try this script earlier? Now we have a nice changelog. --- CHANGELOG.md | 391 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..14a572b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,391 @@ +## Change Log + +### upcoming (2023/06/09 10:12 +00:00) +- [#79](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/79) Merge pull request #79 from RSeidelsohn/dependabot/npm_and_yarn/yaml-2.2.2 (@RSeidelsohn) +- [16475cf](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/16475cf09633068e0a3688f376bcc7fa0765b37a) chore(deps): bump yaml from 2.2.1 to 2.2.2 (@dependabot[bot]) + +### v4.2.5 (2023/04/16 19:26 +00:00) +- [#76](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/76) Merge pull request #76 from RSeidelsohn/release_4_2_5 (@RSeidelsohn) +- [2535c96](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2535c9690abd39a81874fce6b0397fdbda0ad198) chore: Increase fix version number +- [491b5dc](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/491b5dc3d57c2c768a73883cf5c79bb768ea421f) docs: Add description for the latest change +- [d581f46](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d581f461bae19833f94d8d30b60d24858e49aed1) fix: Provide safe defaults for destructured argument object + +### v4.2.4 (2023/04/16 18:35 +00:00) +- [#75](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/75) Merge pull request #75 from RSeidelsohn/release_4_2_4 (@RSeidelsohn) +- [255d9a5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/255d9a59ab51d7f61385ccda299806b199d87219) chore: Increase fix version number +- [aea0c2a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/aea0c2a5988f396c353e79401b82c0f0afd31556) test: Let the URL check tests pass and add new test +- [42b67ec](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/42b67ec0f995dee50dfe9db4f265c8d5fdab03bb) docs: Add description for the latest change +- [0425c1d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0425c1d4a88e3674c42d6d2c3698c9d10ad96fb6) refactor: Rename regular expression constants and add one check + +### v4.2.3 (2023/04/16 14:24 +00:00) +- [5d38eda](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5d38eda1c17cbc56ecf3865aed5ac02590ef142b) test: comment blocked test back in +- [078b593](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/078b593c4274349d3d9f481eea7fd4ffcbbb36cc) chore: Bump fix version +- [96b3f1e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/96b3f1e8825c0478da3a22cf77f974257e8e7585) docs: Add change description for new fix version +- [3c83772](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3c83772c35f736325f609f4705c4c6743d117909) fix: Fix `--relativeModulePath` using absolute paths when used with `--start` +- [86a5bea](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/86a5bea170d17fbfd9fd830e5555f72b688117f0) docs: Add latest change info to README (@RSeidelsohn) + +### v4.2.2 (2023/04/16 11:05 +00:00) +- [#74](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/74) Merge pull request #74 from RSeidelsohn/release-4-2-2 (@RSeidelsohn) +- [2d92105](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2d92105c8b88482e409ae21cbf06e8445c70e46d) chore: Increase fix version number (@RSeidelsohn) +- [bd6a385](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bd6a38531c04fc254e474297e415623f674761d2) fix: Fix relative path calculation (@RSeidelsohn) + +### v4.2.1 (2023/04/15 09:48 +00:00) +- [#73](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/73) Merge pull request #73 from RSeidelsohn/release_4_2_1 (@RSeidelsohn) +- [681ccfa](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/681ccfa3b6443be509e2ab966b74b3fcf36aeedc) docs: Update the version history in the README file (@RSeidelsohn) +- [62f95a1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/62f95a1ed8e033a65dd2230ecebab7b0525ec82d) docs: Update the options usage description (@RSeidelsohn) +- [b8cbb84](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b8cbb8490e6ebeb7753efb47231cfc6fbad95f28) chore: Add new contributors (@RSeidelsohn) +- [567ed5e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/567ed5ec171ba067f693cbeaec0a29d612f14365) config: Lower the coverage limits for now (@RSeidelsohn) +- [8f738fb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8f738fbcfa4d0e32c5098f85142bcd81518536d7) fix: Fix a sneaked in bug (@RSeidelsohn) +- [429d389](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/429d389644b31230eac643078fe12e99d49680ea) fix: Fix a typo (@RSeidelsohn) +- [a4f7651](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a4f76512bd771d7fa79373fc1ab73438c46cd101) style: Remove a surplus empty line (@RSeidelsohn) +- [c5a35f3](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c5a35f36d8655bfd0ce07078b797c7741decd833) refactor: Provide a better name for a variable (@RSeidelsohn) +- [ddf7cd7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ddf7cd7fec894332cfe805c4880382d91f1cc853) fix: Try to skip "license" URLs ending with image file name endings (@RSeidelsohn) +- [2e7d98c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2e7d98c7910134f4ef2ce3c8fd9d8a2c4413f2d9) style: Delete empty line between comment and code (@RSeidelsohn) +- [4697087](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/469708758d3dccc971b389079eec0b6aac685424) refactor: Move functionality into helpers and simplify exports (@RSeidelsohn) +- [13c7656](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/13c76565e5bd1b27d8483ec0bad11e65e8f31403) refactor: Make code a bit safer (@RSeidelsohn) +- [369f1d4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/369f1d4059987061bc76619a9a90cad4265f203a) fix: Fix function parameters to strings and add documentation (@RSeidelsohn) +- [817d7e0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/817d7e0e2af88016f05d1813e0256de47cef0ec5) refactor: Use a clearer argument name and provide a default value (@RSeidelsohn) +- [8540df0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8540df02c5585b71a70a5f2961b2fbc9906aeb61) refactor: Move condition check after possible premature returns (@RSeidelsohn) +- [d907eac](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d907eac7c09129e679673ca0c9618e0c1268df48) refactor: Provide a better name for the required index file. (@RSeidelsohn) +- [d24e338](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d24e338841a4d288da50d294a445dcea4b0a871d) fix: Fix typos (@RSeidelsohn) +- [8008280](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8008280e3089825e34c9cccfb22fb512ef9e3678) fix: Split helpers module in two files, so they can be required by two files (@RSeidelsohn) +- [9b8ea62](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9b8ea62c46ba4b253bbd3ccad667565264ab5efa) refactor: Extract functionality to helper module file (@RSeidelsohn) +- [01c2a06](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/01c2a0661ff098d042367ea806fd32ee7c722877) refactor: Move getFirstNotUndefinedOrUndefined into helpers module file (@RSeidelsohn) +- [f1cf146](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f1cf146bc23139e781484d3434470fb598b41f01) refactor: Extract functionality into helper functions (@RSeidelsohn) +- [39554ab](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/39554abc03f9b6d6c37581f194c3baf62d97858c) refactor: Delete superfluous condition check (@RSeidelsohn) +- [54b43bd](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/54b43bdb9a9621578c1857b6da1ce96f9f3c8107) fix: Fix typo and remove TODO comment (@RSeidelsohn) +- [733553d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/733553d2adb5e83edf0d7e084babd914076b9851) refactor: Use a better argument name (@RSeidelsohn) +- [25fcb16](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/25fcb16109ef1d7e0d90cb19a536bef729ad01e9) refactor: Extract function into helpers module file (@RSeidelsohn) +- [1be32a5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1be32a575d14089f3c2aa43f11ec88a9c5cbb974) refactor: Move variable declarations inside the block they belong to (@RSeidelsohn) +- [8f403f7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8f403f7747644227851341241d2baa5204e0688a) style: Convert snake case into camel case (@RSeidelsohn) +- [30aee71](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/30aee71e6335b824647024b25c0e08077a4767c5) style: Move comment into a prettier-satisfying position (@RSeidelsohn) +- [7a4f006](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7a4f0069b74b6a734cebff190a13bef44ace0df8) refactor: Use a better name for the depth argument (@RSeidelsohn) +- [03c69ee](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/03c69ee68f4da0f9e2f5dfe06a3306f7e92e4b36) chore: Increase fix version number in package.json (@RSeidelsohn) +- [e445e7f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e445e7f39da000cb607aca77530b56d287e8d6d7) refactor: Provide a better name for function argument (@RSeidelsohn) +- [47904c3](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/47904c351f9a6679183d4c066e482dc3fe9346e1) fix: Fix the function for restricting to direct dependencies (@RSeidelsohn) +- [cb0e96a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cb0e96adca70b7b3160f424600b3c137f03ecdf6) docs: Fix contents of function description (@RSeidelsohn) +- [3c35163](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3c3516332477b255283861473d24f39cd85bd12d) refactor: Improve normalizing of "direct" argument and remove superfluous function (@RSeidelsohn) +- [287e91e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/287e91ec1d5101264b93da20c2348baa061224c0) refactor: Rename knownOpts to knownOptions and getParsedArgs to getParsedArguments (@RSeidelsohn) +- [98d475d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/98d475d565694b547fb37a5fe4cf3aefedadeba5) refactor: Bring back alphabetical sort order to knownOpts params (@RSeidelsohn) +- [b44fc19](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b44fc1990245acaeb2570d3ac29fba673de71412) refactor: Use a better name for the json result from the checker (@RSeidelsohn) +- [cc750b0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cc750b0e50d3bd96307db6b15a67f2632c165c8d) docs: Improve warning message (@RSeidelsohn) +- [cb83ebb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cb83ebb2c63d0fe539d862cece0e0816f58360ba) refactor: Reorder imports and constants in the file's head (@RSeidelsohn) +- [aa1e840](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/aa1e840d524de39514e29f07b9101a475b262818) refactor: Extract premature process exits and warnings into separate module file (@RSeidelsohn) +- [8cef34c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8cef34cccef0cade76e63db37cad5b8f72855081) refactor: Extract helper functions into separate module file (@RSeidelsohn) +- [66cf9ab](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/66cf9ab83bf21d1ddcc926fae92136b799bf2b97) refactor: Extract usageMessage into separate file (@RSeidelsohn) +- [0c19d56](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0c19d5633c83ebcd89c1e5f3a9ce649327ee8b18) fix: Correct a typo (@RSeidelsohn) +- [6e1c7d4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/6e1c7d45de26f7e99cc74acba0d2ed05e39e843d) refactor: Directly use "clarifications" as property and value (@RSeidelsohn) +- [766f105](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/766f10555f7b0b7936e80aac62c3733b80fcf119) docs: Add explanations for option values (@RSeidelsohn) +- [7923b06](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7923b06001f0425fdd2913d39d25c8c1431bd956) refactor: Provide a better name for a helper function (@RSeidelsohn) +- [9fb5226](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9fb522679edfb34c5644b4e05efc2aa557c30e14) docs: Update an outdated argument name in a function's documentation (@RSeidelsohn) +- [b8077ea](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b8077ea2f5252a41469c5372ac410c9071f89f65) refactor: Provide a better name for imported module function and its options (@RSeidelsohn) +- [ef5a5c4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ef5a5c43db1f237d4a234eda1b10643f26728627) refactor: Provide a better function name and move condition to function call (@RSeidelsohn) +- [1b60109](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1b601094973f729043f498b0fef3c744bbf67408) refactor: Provide a better name for a helper function (@RSeidelsohn) +- [f4788b6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f4788b69709d30459f101440c4c1ac50cd6c46a7) refactor: Transform snake case into camel case (@RSeidelsohn) +- [129b6aa](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/129b6aa30ff69f81a503a7f841c4176a7a05fe5b) docs: Add a todo note (@RSeidelsohn) +- [c837b19](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c837b19b6d91db41acde7d597b47f7ec85251c9e) refactor: Provide better names for two constants (@RSeidelsohn) +- [51273de](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/51273dea9c8177177237dcf8f3b786916add023a) config: Add .vscode directory to .gitignore (@RSeidelsohn) +- [1b2aa50](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1b2aa50276013d93f0d86991d1dc74de4bf2a8b8) feat: Add additional Apache version parser (@RSeidelsohn) +- [ca0487d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ca0487d1fe25d6b377ae36c38f2d28d983a96914) test: Comment out url license test (@RSeidelsohn) +- [7353c3f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7353c3f5d75e13224ea050b8864a65264ff31f6d) refactor: Remove superfluous code (@RSeidelsohn) +- [7d756db](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7d756dbd0c822e3169ef87d64aa28b84be550258) refactor: Provide a better name for a function (@RSeidelsohn) +- [ad63417](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ad63417abaa7ac150dcce17f62dae7a4976bb757) fix: Revert arrow function to function expression (@RSeidelsohn) +- [16708c1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/16708c1da3053ae221de7ca9164c91232c0ddc9f) style: Ran prettier --fix (@RSeidelsohn) +- [5292c74](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5292c7416ca0c44920205b8e3e09dc7a1480fe5e) refactor: Provide better name and enhance functionality of helper function (@RSeidelsohn) +- [17dd533](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/17dd5339445bfc39390295029bb4aec668bf89d3) style: Convert function declarations to arrow functions (@RSeidelsohn) +- [419437d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/419437db61591743e4c1a2735149919f012bbc79) fix: Fix choosing the wrong license info (@RSeidelsohn) +- [0d24dca](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0d24dca02e90ca7348059a0f892fd27ccce13cea) docs: Add a TODO comment for future refactoring (@RSeidelsohn) +- [1105661](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1105661ee4e12a9d8ebf31eb997f19a3d1551efa) fix: Don't override custom licenses (@RSeidelsohn) +- [ac79741](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ac797410627f4598148bd3845f2340581ed2a23e) docs: Add documentation helping with future refactorings (@RSeidelsohn) +- [a406048](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a406048e69b0e1b9a32ca7982163636bffb5674f) refactor: Provide a better name for the content of the current license file (@RSeidelsohn) +- [3105d5a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3105d5a20f2effd97844a576db89e500a4deaf3d) refactor: Provide a better name for the files variable (@RSeidelsohn) +- [bdefc86](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bdefc8699aa527e26fed4e507303de149d8fc51c) refactor: Restrict scope of variable and provide a better name (@RSeidelsohn) +- [622d8b2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/622d8b24e8b301f638f11ee38c967132ca4d5157) refactor: Give the key variable a better name (@RSeidelsohn) +- [21380e9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/21380e97e4baec18f14a2ed24ced2ed47ec32462) style: Use double quotes for string with single quote inside (@RSeidelsohn) +- [b3e11e0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b3e11e07ef8d470b92490cd5544dc37a4fe2b926) config: Increase editorconfig's indent size from 2 to 4 (@RSeidelsohn) +- [#71](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/71) Merge pull request #71 from Flydiverny/failing-test-custom-license (@Flydiverny) +- [#70](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/70) Merge pull request #70 from Semigradsky/update-dependencies (@Semigradsky) +- [#66](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/66) Merge pull request #66 from beawar/master (@beawar) +- [#65](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/65) Merge pull request #65 from marcobiedermann/patch-1 (@marcobiedermann) +- [8165268](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/81652683d0e56f2f5b27f24b71b6fcb65b5e1066) style: Add missing whitespace +- [bf5cf27](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bf5cf276b8934372737b17d5a9f116ba8804f2bb) chore: Update version number from 4.1.1 to 4.2.0 in package.json +- [cf7cff8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cf7cff89148ec7fef5dee3a805ad0d1c15c2f4d8) docs: Add a message from the maintainer to the README +- [0e2b4d8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0e2b4d83d4d3fa2efaa2b9d709ea09d58e7aefea) fix: add failing test for custom license URL (@Flydiverny) +- [85a2172](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/85a217242c4cd8186f0d2b2a62d3c4659c9af360) Update (@Semigradsky) +- [d61bc3b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d61bc3b8449e152cda5e14598f5e4afee6ae16ef) fix: parse direct also inside init to make it work in programmatic usage (@beawar) +- [7fea720](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7fea72058f1f74094a1705b90a0449ec4b1f32ae) Update README.md (@marcobiedermann) + +### v4.2.0 (2023/02/18 14:18 +00:00) +- [#64](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/64) Merge pull request #64 from zed-industries/clarifications-file-option (@zed-industries) +- [906b3c2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/906b3c2aeb3d8d727933a279974fc952b33f7214) Fixed ordering or command line arguments (@mikayla-maki) +- [913fd07](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/913fd07bff2a4692dc4a1e27f3ecdaa3908adf48) Fix type (@mikayla-maki) +- [fe3182e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/fe3182edd2c1f02dc511296763ee2036c0e777f7) Added licenseStart and licenseEnd (@mikayla-maki) +- [e67b6fc](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e67b6fcc56dd079599ecfe54f8d8338291779148) Fixed CLI help text (@mikayla-maki) +- [7397cc6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7397cc62d2382eeab8a8c25313e70bc54365207e) Made checksum optional (@mikayla-maki) +- [a5ac9f5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a5ac9f570996a783fcc3512019afd81a4fe65666) Fix dropped argument in flatten recursion (@mikayla-maki) +- [97508d6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/97508d6860c7103ccf00d645d86859e040a2402e) Add a --clarificationFile option (@mikayla-maki) + +### v4.1.1 (2023/01/31 14:20 +00:00) +- [#62](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/62) Merge pull request #62 from RSeidelsohn/release-4.1.1 (@RSeidelsohn) +- [c009bbf](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c009bbf5be1ad777a11a974f1cfb5a9a23d88055) chore: Bump patch level (@RSeidelsohn) +- [66d34af](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/66d34af24dd0bae1e72dfeb7d50e92289b0cb64c) docs: Update version history in README (@RSeidelsohn) +- [#60](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/60) Merge pull request #60 from slhck/fix-markdown (@slhck) +- [4739bb1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/4739bb159062be95b4b321d020d3cb705f5ff82d) fix: markdown list format, fixes #43 (@slhck) +- [#59](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/59) Merge pull request #59 from RSeidelsohn/release-3.1.0 (@RSeidelsohn) +- [d991030](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d991030ee48dd999de606b7aa8570015d9b6bee3) chore: Bump minor version (@RSeidelsohn) + +### v4.1.0 (2023/01/30 09:36 +00:00) +- [#58](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/58) Merge pull request #58 from RSeidelsohn/release-3.1.0 (@RSeidelsohn) +- [75f9408](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/75f94083e14243db596dc5565fb9b18d7e4f5eaa) config: Allow npm versions higher than 8 as well (@RSeidelsohn) + +### v4.0.1 (2023/01/30 09:29 +00:00) +- [#57](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/57) Merge pull request #57 from RSeidelsohn/release-3.0.1 (@RSeidelsohn) +- [#56](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/56) Merge pull request #56 from Flydiverny/patch-2 (@Flydiverny) +- [a88ccd7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a88ccd7b75b2b329dc303cfe69e1a9f22e7dd82a) style: Add missing spaces (@RSeidelsohn) +- [3305531](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3305531805f6f991c69968e2c558a05f526f5fd8) docs: Update list of contributors (@RSeidelsohn) +- [f36da07](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f36da07355d603fb0b4ab7696d291efba08297a1) chore: Bump patch level (@RSeidelsohn) +- [92bac36](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/92bac368b96bbf07db0c7d11c7dd7f9bfaa37972) chore: fix typo (@Flydiverny) + +### v4.0.0 (2023/01/21 19:43 +00:00) +- [#53](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/53) Merge pull request #53 from RSeidelsohn/feature/new_major_release_4 (@RSeidelsohn) +- [0ac0f4b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0ac0f4bfd99a5923a31c074c92d0738a4cd6b238) config: Add directories to .prettierignore file +- [8bea56c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8bea56c2e8e429e7044aa99bf3a4afe15652fcfe) config: Remove outdated config option from .prettierrc +- [00d68a0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/00d68a0d4b078fe12ec8dd376d7bf6e9ec6c1f59) style: Delete trailing spaces from file +- [33379e3](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/33379e356e5ade005b2bec19e35bfcd2873b1da8) Add PrettierJS integration for ESlint and lint-staged +- [5878be2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5878be28c31443af15467789a61947e648dfd757) config: Add the tasks needed for lint-staged +- [3a6a3ed](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3a6a3ed34dbaa4da75a90144ebd0bfebc3fe6a06) config: Add prettier to the ESlint configuration +- [e2a740d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e2a740dc558abfa14296ae320fb50c70845597ce) config: Add new prettier and lint tasks to our package.json file +- [fcc3393](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/fcc3393e66ee68a9a694e4721cf05c3836d1ad8c) build: Add husky for the pre-commit hook +- [1f45e6b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1f45e6bd9cf5b3ad7b63cea1945c34c5ef48878f) config: Add pre-commit file for husky +- [e13662b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e13662b7f03ac63e34988b0a83e66291af4b1361) chore: Bump to new major version +- [9e42dfd](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9e42dfd7a340120eac4ac85f96ebff4cc1abb18b) build: Require a NodeJS version of 18 +- [60c1f4d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/60c1f4d0df27f37aacb9cb677c85f4476305ca2c) config: Update package-lock.json +- [fa3bf91](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/fa3bf914537b857620129908f9fb2de5c3413451) docs: Add missing changes info to README file +- [7c286b4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7c286b4e408ba77bb55bc103d669b4244e00eab9) docs: Add "draft mode" notice to SECURITY.md +- [e6ac2ce](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e6ac2ce03e4d24e7afd65d16b8a8e93544d311d7) config: Add an .editorconfig file to the project +- [1b13ca4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1b13ca465faccf760732c8bd83e74425816b19f3) config: Add NodeJS and npm version information to package.json +- [ff295d1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ff295d1d45d549107b3a6e6f8a9e569e0018856d) config: Add an .eslintignore file + +### v3.3.0 (2023/01/21 14:42 +00:00) +- [#52](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/52) Merge pull request #52 from RSeidelsohn/develop (@RSeidelsohn) +- [0eb9a7e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0eb9a7e9bebc6df58f30df2fc379c0b829ec1ed5) build: Update package-lock.json file +- [d4f2e4f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d4f2e4f66aee4be5089af0768c89cabf8789c114) chore: Update version +- [#50](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/50) Merge pull request #50 from eugene1g/master (@eugene1g) +- [9b5f6f9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9b5f6f9a64fd8dd762230a96520ba8634c7f5fa7) bug: Fix node version in .nvmrc file +- [918e402](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/918e402049dfa5f95ee0cda50e6210190eb7e6c5) fix: allow to combine `excludePackages` and `excludePackagesStartingWith` options (@eugene1g) + +### v3.2.1 (2023/01/16 08:11 +00:00) +- [#51](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/51) Merge pull request #51 from RSeidelsohn/develop (@RSeidelsohn) +- [38f6bba](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/38f6bba42d28d3736e1cbf584c497ad0896e0c30) chore: Bump patch version +- [ab515f9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ab515f9575f52d3699275e12415432ac263512a9) bug: Adjust node version to check for in test +- [8dcd0db](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8dcd0db22965f6595b7e20fc8e527ce7a573b0d6) bug: Fix bug in excludePackagesStartingWith function +- [646a3a8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/646a3a833341ac545a54840e803c2432aa62a996) build: Update minor and patch versions of dependencies and devdependencies +- [d84ca96](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d84ca965a0d69e43e7721266e321e689bcfb09b2) Merge branch 'master' into develop +- [ca08e1a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ca08e1aae91e6386f443c709ddb6ca295a366778) chore: Update contributor's list +- [ff44a92](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ff44a927e41baa70ca986de54002b4c387db2fd5) chore: Bump version + +### v3.2.0 (2023/01/14 17:55 +00:00) +- [#47](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/47) Merge pull request #47 from cezaris13/patch-1 (@cezaris13) +- [#39](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/39) Merge pull request #39 from Coada/patch-1 (@Coada) +- [#40](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/40) Merge pull request #40 from Coada/patch-2 (@Coada) +- [#48](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/48) Merge pull request #48 from rhl2401/master (@rhl2401) +- [#1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/1) Merge pull request #1 from rhl2401/develop (@rhl2401) +- [41ec1f6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/41ec1f6127c1ae7a0f4932bc7bd5a3bb1c699950) Update readme (@Naviair-RHL) +- [8686b7c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8686b7c34485f991b541b240bf8289ea2d502afd) Removed excludePackagesEndingWith as it was unnecessary (@Naviair-RHL) +- [9528022](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9528022b4ec5bd702e824f1c4b4dac3fb187c800) Finish up (@Naviair-RHL) +- [964cbc8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/964cbc8cced6298c0783e252269eaa8a7e966ca8) FOrmat readme (@Naviair-RHL) +- [63e4883](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/63e4883248a5050b5960baea4df5363d92471d7f) Remove console.log (@Naviair-RHL) +- [a80cf8d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a80cf8d624d8c3e39f021bd885b7ce5bd7f29a8b) Added excludePackagesStartingWith (@Naviair-RHL) +- [d461398](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d461398ba6f53ab2f27e253de46953af8e8b9677) Added args (@rhl2401) +- [df3e2d4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/df3e2d470a05dc388f0e7d7ea4687ed4848bb33e) npm audit fix (@rhl2401) +- [d6150f6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d6150f684a490c0231d955a22338b094cd92d841) p.lock (@rhl2401) +- [1683c0f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1683c0f04b990c77acf69a0ff97b0d786c4089a1) Updated requiring section (@cezaris13) +- [adbe3cb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/adbe3cb3c5a6a0ef784bf2fc51527a05977b700d) Update getLicenseTitle.js (@Coada) +- [32cc054](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/32cc0547e026f093760b396e60c61901f65b13c1) Hippocratic License 2.1 (@Coada) +- [88fb6c7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/88fb6c717c8331b0015c7e980cf908210a0d36e7) Exclude Licenses Example (@Coada) +- [dd42afc](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/dd42afcc5e17af8c604d82436ea2473dd79de65f) Update README.md (@RSeidelsohn) +- [e4363b7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e4363b776448d369209e6a788d2a20f3ca5ac75e) Update README.md (@RSeidelsohn) +- [2f600e5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2f600e5921c000a8e0ae4c97e78d7c05135bce76) Update README.md (@RSeidelsohn) +- [28e6c8f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/28e6c8fb6dd52efec7c49546fdb482fe80998018) Add table of contents to the README (@RSeidelsohn) +- [72778d8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/72778d8f7b5e71d480dc46f3d36daaed738e42f4) Update README.md (@RSeidelsohn) +- [a1d6b6a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a1d6b6a2fe1834b1fc25214fdd87f7344d343453) Update Readme.md (@RSeidelsohn) + +### v3.1.0 (2022/02/03 11:01 +00:00) +- [#32](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/32) Merge pull request #32 from RSeidelsohn/feature/0007_further-improvements (@RSeidelsohn) +- [7d04599](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7d045998e3ee4baea4d1006e97a27c12230803a1) chore: Bump minor version (@RSeidelsohn) +- [6b3e9ba](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/6b3e9ba98583dc1642a5e33814fbd9dda48741d2) config: Improve module description text (@RSeidelsohn) +- [c87725b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c87725bfb855ee23383008970ba93b2f3cf695cb) docs: Update changes in README (@RSeidelsohn) +- [77dac66](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/77dac663578d47c2dc18932cecf15a16bb8052b5) docs: Add documentation for new 'limitAttributes' flag (@RSeidelsohn) +- [b5bebdc](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b5bebdccc0d2d717a7aeee1621abf810519446f8) test: Test new attributes filter functionality (@RSeidelsohn) +- [02f9d00](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/02f9d0077855cdb8bb95b99f67aad5b89017685d) feat: Use new 'limitAttributes' flag (@RSeidelsohn) +- [c02e181](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c02e181df025d660cdfcd6d906b1bf8bc9a70e3a) feat: Add filterJson function to main program (@RSeidelsohn) +- [124ec3a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/124ec3a791ead779d372e2697eea8b5925a2b1ac) feat: Add filterAttributes function for new limitAttributes flag (@RSeidelsohn) +- [2252e1e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2252e1ee3b0541e4abf43851a0e8b3734e1b92fc) config: Decrease expected coverage percentages (@RSeidelsohn) +- [ec15756](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ec1575630e564d26242a7bd178a28e0f635e199e) docs: Add "copyright" and order list alphabetically (@RSeidelsohn) +- [ef2424d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ef2424d25df3858993ae6f4c1028d05f2c1d559f) config: Add provisions for a future TS version of the project (@RSeidelsohn) +- [ab1dbb2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ab1dbb2b9704d794f977215847840f3e9571e94b) style: Reorder variables (@RSeidelsohn) +- [44b674a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/44b674a051410492dfd10f35eb52fd99d8c978be) docs: Add comment to function (@RSeidelsohn) + +### v3.0.1 (2022/02/02 12:51 +00:00) +- [#31](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/31) Merge pull request #31 from RSeidelsohn/feature/0006_fix-direct-option (@RSeidelsohn) +- [f0f8642](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f0f86424641c8c410a5c8e904c6384e58f1adfcf) chore: Bump fix version (@RSeidelsohn) +- [5b8c7e5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5b8c7e5e8c089e8df69dc7b12c199abe3af50a7a) fix: Respect 'direct' option correctly (@RSeidelsohn) +- [b4f1785](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b4f1785a309d52bf3571ad50268a8b9eb7f01325) feat: Use new filter function (@RSeidelsohn) +- [33a8cb3](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/33a8cb391b45b7bdf305e8ed14b8647898281e97) feat: Add new helper function for removing unwanted dependencies (@RSeidelsohn) +- [245f7a6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/245f7a62d5ae03a56fa28aa2d610b152a6a37ff2) chore: Replace deprecated function (@RSeidelsohn) + +### v3.0.0 (2022/02/01 19:19 +00:00) +- [#30](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/30) Merge pull request #30 from RSeidelsohn/feature/0005_adjust-license-file-path (@RSeidelsohn) +- [559db1b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/559db1bf22a05e5d5dad3e548c22b844830a0742) doc: Document new feature (@RSeidelsohn) +- [97e4888](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/97e4888bef92aeb7decaf33f3e6c70ba7657ba8e) chore: Bump major version (@RSeidelsohn) +- [26333fe](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/26333fe4497f41f4a149a7a91fb6114de1d0e6e2) build: Add lodash.clonedeep module (@RSeidelsohn) +- [9cedc1e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9cedc1ebcd0d741fe62d65a63db8f8f6d7bf1bb1) feat: Use licenseFile paths with --files option (@RSeidelsohn) +- [#29](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/29) Merge pull request #29 from RSeidelsohn/features/0004_maintenance (@RSeidelsohn) +- [a311bd2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a311bd2a7e1a6cf63bc627a90a8d576d0f9ccacf) Update README.md (@RSeidelsohn) + +### v2.4.8 (2022/01/31 21:40 +00:00) +- [9ec6f30](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9ec6f306b753343334ad9b5037f000d991e51f2f) chore: Bump version (@RSeidelsohn) +- [1671afb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1671afb494b1a58b683b14377e48b4e298c62771) config: Add package-lock to repo (@RSeidelsohn) + +### v2.4.7 (2022/01/31 21:35 +00:00) +- [bd3e97a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bd3e97ad032a07303082b219896ecfced0f05c5d) chore: Bump version (@RSeidelsohn) +- [3338a67](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3338a670fbea865dda274accab6463cebe1f844e) test: Update tests for npm install (@RSeidelsohn) +- [36f95ad](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/36f95ad2adf12f2458f60a8e0129ffb0c1abfdcc) chore: Delete obsolete yarn.lock (@RSeidelsohn) +- [cd8765f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cd8765f73f9e2258d9bb95912b2cbd99793191a3) build: Switch from yarn to npm (@RSeidelsohn) + +### v2.4.6 (2022/01/31 21:20 +00:00) +- [bc4dcb2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bc4dcb2e942e9db112fa3325fc89035f284aadac) chore: Bump version (@RSeidelsohn) +- [#28](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/28) Merge pull request #28 from RSeidelsohn/feature/0003_fix-tests (@RSeidelsohn) +- [a77db58](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a77db58636c31851e09780e6e9062069a8d299fe) test: Fix broken tests (@RSeidelsohn) + +### v2.4.5 (2022/01/31 20:48 +00:00) +- [43715c8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/43715c80b1a2ae8c0a62ccfd209fc9a42433a5a2) chore: Bump version (@RSeidelsohn) + +### v2.4.4 (2022/01/31 20:44 +00:00) +- [a6e4935](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a6e4935d76db1f637d319b8bee3590ea70d704d6) build: Update lockfile (@RSeidelsohn) + +### v2.4.3 (2022/01/31 20:11 +00:00) +- [1663bcb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1663bcb11568bd82830593924d1c460963720319) chore: Bump version (@RSeidelsohn) +- [bd51f74](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bd51f7415e43f420956698231432c349b5dad500) fix: Add missing comma (@RSeidelsohn) +- [c0079b4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c0079b4f352aa25f0aecc67c6ad257021f1ac1f7) build: Increase node version (@RSeidelsohn) + +### v2.4.2 (2022/01/31 16:52 +00:00) +- [6f66f8b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/6f66f8ba74c4527198be0adba6cbfa945a64b82a) chore: Bump version (@RSeidelsohn) +- [afaf3a3](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/afaf3a3cc89960c408d0b00208e5ccb6f7f656b3) docs: Add new feature to docs (@RSeidelsohn) +- [90b30b2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/90b30b2ffd3da646044144b2437f350f686c3a70) chore: Bump version, update contributors (@RSeidelsohn) + +### v2.4.1 (2022/01/31 16:03 +00:00) +- [#22](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/22) Merge pull request #22 from Backfighter/patch-1 (@Backfighter) + +### v2.4.0 (2022/01/31 15:59 +00:00) +- [#26](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/26) Merge pull request #26 from d0b1010r/remove-console-log-failOn (@d0b1010r) + +### v2.3.0 (2022/01/31 15:48 +00:00) +- [#25](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/25) Merge pull request #25 from Semigradsky/master (@Semigradsky) +- [1c49b25](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1c49b25f26cc221b8299e6ac4ea8c5846f4f751f) Remove console.log when failOn option is given (@d0b1010r) +- [27b301f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/27b301f39e9c742623af263c0a730f316229ee35) Add `nopeer` option for ignoring peerDependencies. Add typings (@Semigradsky) +- [ddba2d0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ddba2d09c9b53e799a9fc0c005719eb27d5e9ae1) Indicate required node version (@Backfighter) +- [b34fca8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b34fca89799d300b8143a4dcf7199f624070901a) Merge branch 'develop' + +### v2.2.0 (2021/10/12 16:45 +00:00) +- [cb91fb6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cb91fb6446ded0940762811d2b3365f2b310e138) feat: Add support for detecting "unlicensed" modules +- [35d93b4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/35d93b4e0b026935b827d619560fa8027f63a2f9) chore: Fix a typo and a missing comma +- [82abebf](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/82abebf03e6ebbaea399f1e638c3175b8bfb8548) docs: Update contributors list + +### v2.1.4 (2021/10/12 15:23 +00:00) +- [5f1b980](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5f1b9800f13b6f3165f2d0ae18b69171b8573883) Merge branch 'develop' +- [08cc6ee](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/08cc6eedba97550bcbad43755c50073accb9354e) chore: bump to next version number +- [2fce52d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2fce52d7ec0e9f38c411f76a3022acea8e41b714) docs: Add info to README + +### v2.1.3 (2021/10/11 19:12 +00:00) +- [a43bbc0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a43bbc0dac7b6a21e7d0be4cfa33baa94cdc4ae6) Update dev-dependencies & fix duplicate entry in package.json +- [e554f1a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e554f1ab8d555881fe91a70570d46f95719dda2b) config: Update dependencies +- [bdb9ca7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/bdb9ca717ae55e1a6fedcf10b18335484dc9f6b0) Update README.md (@RSeidelsohn) +- [a0160cd](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/a0160cd79bbb3fba26c2406437d1fc8bf22f60d2) Update dev-dependencies & fix duplicate entry in package.json +- [3acf3e2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3acf3e25370ce5c7cb895a26573cb8023b7a450a) config: Update dependencies +- [78ac387](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/78ac38797281fc4d50879eade9f5eb0725a650aa) Bump path-parse from 1.0.6 to 1.0.7 (@dependabot[bot]) +- [f5a3731](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f5a3731123afcf16aee3c29f0ea350d2f3c27723) docs: Remove travis-ci build status as it fails for whatever reason +- [8a717fd](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8a717fdd9e2bcd1a836dcad46d1413ecd59284e5) config: Add license field to package.json +- [fa3bfe2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/fa3bfe2d814dc9d0717bc83d0b8909ea0715c1a2) config: Update lockfile and package.json +- [dccc9c0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/dccc9c011fdff35395a880b03b488b60573dc97c) config: Update lockfile and package.json +- [840c82c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/840c82c1526ae1681bb0c4e1ee39c3136841c1a8) config: Add license field to package.json +- [1fb7df9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1fb7df9e936ebb9977bc846e34ba23b47684d7a8) Update npmpublish.yml (@RSeidelsohn) +- [d37dc8e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d37dc8e8b905d022fc5c6764a3f2c9b69d92eae1) Update npmpublish.yml (@RSeidelsohn) + +### v2.1.1 (2021/05/30 14:42 +00:00) +- [ee23ecd](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ee23ecde7ba03a5d122c4b413923dc4da97959df) config: Update fix version +- [e20ebb1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e20ebb16a0ebe2be004c1ad7c6bf0e3a53eff5a3) fix: Update lockfile +- [#13](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/13) Merge pull request #13 from mehmetb/mehmetb/fix-relative-module-path (@mehmetb) +- [58b9212](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/58b9212b7fc1ef206b6143e856a4257a3a8c5eca) Merge branch 'master' into mehmetb/fix-relative-module-path (@RSeidelsohn) + +### v2.1.0 (2021/05/30 14:29 +00:00) +- [e3f6dcb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e3f6dcb338aafdf7660238c736bcc74ddaf16828) Update minor version +- [#12](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/12) Merge pull request #12 from mehmetb/mehmetb/fix-tests (@mehmetb) +- [be9f80b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/be9f80bbcdf1f4c37f95bd41428db39086517802) Merge branch 'master' into mehmetb/fix-tests (@RSeidelsohn) + +### v2.0.0 (2021/05/30 13:49 +00:00) +- [e04b9b9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e04b9b9853b78237018843f4bd7c68fe2cbee9be) conf: Update major version +- [e616329](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e6163299c1178bf40b694871fb12b45ead249f13) fix: Fix broken stuff after refactoring and update failing tests +- [cdd9c4c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/cdd9c4c9e7dc63e49321e329f952d054c7e919f9) config: Remove babel-eslint +- [407bf06](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/407bf06305647954b8016c164c3443242130a92a) style: Apply linter rules +- [0ed8a22](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0ed8a22823dd23382aec70a7e0d3e3bb39962315) refactor: Rename a lib file +- [65dab1c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/65dab1c9aa444029a8b0c4cc5cfb3e987ad6b51a) refactor: Make a snippet more readable +- [5a3cb04](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5a3cb04d966afb8b413c044af4917597d22785a8) BREAKING CHANGE: Make unknown options exit license checker +- [9405cfb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9405cfb6a6f4190361df5f9f3c220318408f03bf) docs: Order options alphabetically and refactor some minor functions +- [4930f10](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/4930f107b0b9f8477aeb3ce67a4130296e23f86f) docs: Order command line options alphabetically and fix visual glitch +- [e57d70e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e57d70e1943f46b8d9de8c8ecce36b43f236497a) config: Adjust eslint rules +- [b7a20a0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b7a20a03cc1889bc3e7b3271b1a89b656ee9f3c9) Updated contributors in package.json (@mehmetb) +- [60150a4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/60150a4d47c6720ffa4495a8ce203873936599d0) Fixed relative module paths option (@mehmetb) +- [eff328f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/eff328ff4b733f584774f1b6897c0ca32dffcf15) Updated contributors in package.json (@mehmetb) +- [9724ae9](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/9724ae9f5cb8ff3bd32579a1f412779837ec8bfa) Fixed a failing test (@mehmetb) +- [ebb29c8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ebb29c81d807e78114a2dcafd4b995a0a5d92299) Allow --files and --out options to be used simultaneously (WIP) + +### v1.2.2 (2021/05/02 14:28 +00:00) +- [7ddc92a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7ddc92ae5ad424a273febc481b83cf50e9a3b54a) Increase version +- [4b132b2](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/4b132b20b5db5b0adea37d797d5be46d27c9382b) Remove debugging output +- [2e30514](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/2e30514b4394b3b2e21e75ff9ad04f294d8b556b) Print warning for unknown options passed to license-checker +- [8a4000a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8a4000ad50c4bff009ad130af7756e18c7023b69) Upgrade dependencies +- [c29f7de](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c29f7de748735e8aa09168ecf2978e3313158c4d) Create new lockfile +- [06c5c4f](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/06c5c4f83e1543adbf17e30828661144e7a2e2b2) New Version: Update dependencies +- [01c804e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/01c804ec8f486e325d7f8427c745a5b0d5832a55) Fix index check and update tests +- [f79e39c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f79e39cb0d78f15290d351d0cffad1a202f93d71) Update dependencies and increase version number +- [#8](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/8) Merge pull request #8 from RSeidelsohn/feature/0002_create-plain-vertical-output (@RSeidelsohn) + +### v1.2.0 (2021/04/08 16:55 +00:00) +- [7244dc0](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/7244dc0b5f1be0467b7a912a4f003d18356e43d8) Increase version number for new option (@RSeidelsohn) +- [0dfb384](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0dfb384f80a90e1712ae2292cfc7b0314aa2ea8b) Apply prettier formatting and use fixtures for new option test (@RSeidelsohn) +- [c8aec83](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c8aec838de1bd039ba93fa45a5cf02d280ad345d) Apply prettier formatting and use const rather than var (@RSeidelsohn) +- [305d5e5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/305d5e554395dce5319e04d85f37e657c4231c78) Update documentation and add --angularCli synonym for --plainVertical (@RSeidelsohn) +- [91a903a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/91a903a714c369973b884f68a47a14f63997bc56) Add version information to module names for --plainVertical (@RSeidelsohn) +- [4f2518a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/4f2518a97b967cd24ba190035a4e40d2a6937ced) Apply prettier formatting (@RSeidelsohn) +- [1d01481](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1d0148104d1e16cc6f68d7154ca25860014b852d) Create SECURITY.md (@RSeidelsohn) +- [8619690](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/8619690aaf96e8fbaa88855619bbce222f2f5056) WIP: Add new option 'plainVertical' (@RSeidelsohn) +- [3dc7f67](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3dc7f67e612623145619715948514de099c230b2) Apply prettier formatting rules (@RSeidelsohn) +- [c65f153](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c65f1531e03325fade691274be78062aa20ed44f) Create codeql-analysis.yml (@RSeidelsohn) +- [#6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/6) Merge pull request #6 from RSeidelsohn/dependabot/npm_and_yarn/y18n-4.0.1 (@RSeidelsohn) +- [#7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/7) Merge pull request #7 from RSeidelsohn/develop (@RSeidelsohn) +- [26264bb](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/26264bb8880ca1d778eb76e5f624dfa91d30e697) Update tests and start refactoring (@RSeidelsohn) +- [25200da](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/25200da7526cd7ca77254e16dcdbe623d313fea1) Upgrade dependencies to latest versions (@RSeidelsohn) +- [b8cf489](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b8cf489e9333657e642c8ccaa5a15e4310daa448) Bump y18n from 4.0.0 to 4.0.1 (@dependabot[bot]) +- [e157e1c](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e157e1c6a8abe4bd66f2b7691971e8d8cd3b7937) Add config files for prettier, nvm and git +- [5bcc48d](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5bcc48d60c8c4c7085306e5ae34c987bb7f72502) Add PrettierJS as dev dependency +- [69e7b54](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/69e7b543ff37815efdf0fb607ec0dad98e98bf05) Update dependencies +- [5598611](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/5598611bb502f84fe67cc7ac273db267db7bd0aa) Remove obsolete file +- [ef0e391](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/ef0e391fe74dcc67876bd1c12ff742bb31116b0f) Update node modules +- [c277e69](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/c277e69011350a57e85fc9819d6a15b4d9327217) Add link to the original release +- [3fe8111](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/3fe811163976d0526c26e7b5d054effda8b2bc07) Lower coverage affordances and fix tests +- [#4](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/4) Merge pull request #4 from gugu/patch-1 (@gugu) +- [f89cc19](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f89cc1988309839bfd15570e240c90728df1deb5) Update license.js (@gugu) +- [0f0bc30](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0f0bc30c98079512c89298d6a5c0be96771a57a0) Support zero parity license for husky module (@gugu) +- [#1](https://github.com/RSeidelsohn/license-checker-rseidelsohn/pull/1) Merge pull request #1 from RSeidelsohn/dependabot/npm_and_yarn/acorn-7.1.1 (@RSeidelsohn) +- [f10d5d7](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/f10d5d77044b07314a3b5cdbcba21bb8c93725db) Bump acorn from 7.1.0 to 7.1.1 (@dependabot[bot]) + +### v1.1.2 (2020/02/24 18:37 +00:00) +- [b01f461](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/b01f46184e5b48f72fdb93c9d5637edf0e467460) Update version +- [0edc410](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/0edc4101781805a7514ace82517fc813165c1c7d) Set up travis build process for the repository +- [da4435a](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/da4435acb5a88190292e23d5be5b26812993e52e) Update version number +- [d4b5da6](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/d4b5da676540cfcee8efa4c7296105761b9e5c58) Remove obsolete message +- [e103c66](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/e103c66f5a92a311ee6066b98ed5399929f7824c) Update version +- [dc9be2b](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/dc9be2bf8c4350d5cbdef67e43b07b771f3917b3) Add new option `--relativeModulePath` +- [fd31c6e](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/fd31c6e75a07930c23eb7b600c6f3fd4e8912557) Update the readme +- [1ebe5e5](https://github.com/RSeidelsohn/license-checker-rseidelsohn/commit/1ebe5e51d71618e77e96045d7ac072fc4dfb55be) Refactor code, implement new features and fix minor issues \ No newline at end of file