From 923a496ee722e2b6127e51db1eeb5d5ae037efc9 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Thu, 31 Dec 2020 17:53:13 +0100 Subject: [PATCH] 0.0.5 w/ cli fixes --- README.md | 10 +++---- bin/exporter.js | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ exporter.js | 73 +---------------------------------------------- package.json | 56 +++++++++++++++++++----------------- 4 files changed, 112 insertions(+), 103 deletions(-) create mode 100644 bin/exporter.js diff --git a/README.md b/README.md index c9c2829..22985a4 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,13 @@ yarn add @odit/license-exporter npm i @odit/license-exporter ``` -## Use +## CLI Usage -Export only your dependencies to json: `license-exporter --json` -Export all dependencies to json: `license-exporter --json --recursive` +Export only your dependencies to json: `licenseexporter --json` +Export all dependencies to json: `licenseexporter --json --recursive` -Export only your dependencies to markdown: `license-exporter --md` -Export all dependencies to markdown: `license-exporter --md --recursive` +Export only your dependencies to markdown: `licenseexporter --md` +Export all dependencies to markdown: `licenseexporter --md --recursive` ## Arguments Arg | Description diff --git a/bin/exporter.js b/bin/exporter.js new file mode 100644 index 0000000..20ddd9b --- /dev/null +++ b/bin/exporter.js @@ -0,0 +1,76 @@ +#!/usr/bin/env node +'use strict'; + +const fs = require('fs'); + +const args = process.argv.slice(2); +if (args.includes('--help')) { + console.log(`Arguments: + --help: View this help page + --recursive: Include all dependencies' subdependencies + --json: Exports the license information into ./licenses.json as json + --md: Exports the license information into ./licenses.md as markdown`); +} + +function parsePackageInfo(path) { + const packagecontents = JSON.parse(fs.readFileSync(path, { encoding: 'utf-8' })); + packagecontents.dependencies = Object.entries(packagecontents.dependencies || {}); + packagecontents.devDependencies = Object.entries(packagecontents.devDependencies || {}); + return packagecontents; +} + +function mergeDependencies(packageInfo) { + return [].concat(packageInfo.dependencies, packageInfo.devDependencies); +} + +function getDependencyLicenseInfo(all_dependencies, recursive) { + let all = []; + + all_dependencies.forEach((p) => { + const packageinfo = parsePackageInfo(`./node_modules/${p[0]}/package.json`); + let licensetext = ''; + if (fs.existsSync(`./node_modules/${p[0]}/LICENSE.md`)) { + licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE.md`, { encoding: 'utf-8' }); + } + if (fs.existsSync(`./node_modules/${p[0]}/LICENSE`)) { + licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE`, { encoding: 'utf-8' }); + } + if (fs.existsSync(`./node_modules/${p[0]}/LICENSE.txt`)) { + licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE.txt`, { encoding: 'utf-8' }); + } + const info = { + author: packageinfo.author, + repo: packageinfo.repository || packageinfo.repository.url, + description: packageinfo.description, + name: packageinfo.name, + license: packageinfo.license, + licensetext + }; + all.push(info); + if (recursive == true) { + all.push(...getDependencyLicenseInfo(packageinfo.dependencies, true)); + } + }); + return all; +} +const packageInfo = parsePackageInfo(`./package.json`); +const all = getDependencyLicenseInfo(mergeDependencies(packageInfo), args.includes('--recursive')); + +if (args.includes('--json')) { + if (args.includes('--pretty')) { + fs.writeFileSync('./licenses.json', JSON.stringify(all, null, 4)); + } else { + fs.writeFileSync('./licenses.json', JSON.stringify(all)); + } +} +if (args.includes('--md')) { + fs.writeFileSync('./licenses.md', ''); + all.forEach((p) => { + fs.appendFileSync( + './licenses.md', + `# ${p.name}\n**Author**: ${p.author}\n**Repo**: ${p.repo}\n**License**: ${p.license}\n**Description**: ${p.description}\n## License Text\n${p.licensetext} \n\n` + ); + }); +} else { + return all; +} diff --git a/exporter.js b/exporter.js index 90258c1..ce8536a 100644 --- a/exporter.js +++ b/exporter.js @@ -1,72 +1 @@ -const fs = require('fs'); - -const args = process.argv.slice(2); -if(args.includes("--help")){ - console.log(`Arguments: - --help: View this help page - --recursive: Include all dependencies' subdependencies - --json: Exports the license information into ./licenses.json as json - --md: Exports the license information into ./licenses.md as markdown`); -} - -function parsePackageInfo(path) { - const packagecontents = JSON.parse(fs.readFileSync(path, { encoding: 'utf-8' })); - packagecontents.dependencies = Object.entries(packagecontents.dependencies || {}); - packagecontents.devDependencies = Object.entries(packagecontents.devDependencies || {}); - return packagecontents; -} - -function mergeDependencies(packageInfo) { - return [].concat(packageInfo.dependencies, packageInfo.devDependencies); -} - -function getDependencyLicenseInfo(all_dependencies, recursive) { - let all = []; - - all_dependencies.forEach((p) => { - const packageinfo = parsePackageInfo(`./node_modules/${p[0]}/package.json`); - let licensetext = ''; - if (fs.existsSync(`./node_modules/${p[0]}/LICENSE.md`)) { - licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE.md`, { encoding: 'utf-8' }); - } - if (fs.existsSync(`./node_modules/${p[0]}/LICENSE`)) { - licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE`, { encoding: 'utf-8' }); - } - if (fs.existsSync(`./node_modules/${p[0]}/LICENSE.txt`)) { - licensetext = fs.readFileSync(`./node_modules/${p[0]}/LICENSE.txt`, { encoding: 'utf-8' }); - } - const info = { - author: packageinfo.author, - repo: packageinfo.repository || packageinfo.repository.url, - description: packageinfo.description, - name: packageinfo.name, - license: packageinfo.license, - licensetext - }; - all.push(info); - if (recursive == true) { - all.push(...getDependencyLicenseInfo(packageinfo.dependencies, true)); - } - }); - return all; -} -const packageInfo = parsePackageInfo(`./package.json`); -const all = getDependencyLicenseInfo(mergeDependencies(packageInfo), args.includes("--recursive")); - -if (args.includes("--json")) { - if (args.includes("--pretty")) { - fs.writeFileSync('./licenses.json', JSON.stringify(all, null, 4)); - } - else { - fs.writeFileSync('./licenses.json', JSON.stringify(all)); - } -} -if (args.includes("--md")) { - fs.writeFileSync('./licenses.md', ""); - all.forEach((p) => { - fs.appendFileSync("./licenses.md", `# ${p.name}\n**Author**: ${p.author}\n**Repo**: ${p.repo}\n**License**: ${p.license}\n**Description**: ${p.description}\n## License Text\n${p.licensetext} \n\n`) - }); -} -else { - return all; -} \ No newline at end of file +console.log('API usage not implemented yet...'); diff --git a/package.json b/package.json index 734ceac..a44cde2 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,32 @@ { - "name": "@odit/license-exporter", - "version": "0.0.3", - "description": "A simple license crawler", - "main": "./export.js", - "bin": "./export.js", - "author": "ODIT.Services", - "license": "MIT", - "contributors": [ - { - "name": "Philipp Dormann", - "email": "philipp@philippdormann.de", - "url": "https://philippdormann.de" - }, - { - "name": "Nicolai Ort", - "email": "info@nicolai-ort.com", - "url": "https://nicolai-ort.com" - } - ], - "keywords": [ - "license" - ], - "repository": { - "type": "git", - "url": "https://git.odit.services/odit/license-exporter" - } + "name": "@odit/license-exporter", + "version": "0.0.5", + "description": "A simple license crawler", + "keywords": [ "license", "ODIT.Services", "cli" ], + "repository": { + "type": "git", + "url": "https://git.odit.services/odit/license-exporter" + }, + "author": "ODIT.Services", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "contributors": [ + { + "name": "Philipp Dormann", + "email": "philipp@philippdormann.de", + "url": "https://philippdormann.de" + }, + { + "name": "Nicolai Ort", + "email": "info@nicolai-ort.com", + "url": "https://nicolai-ort.com" + } + ], + "main": "exporter.js", + "bin": { + "licenseexport": "./bin/exporter.js" + }, + "files": [ "bin" ] }