|
@ -0,0 +1,107 @@ |
|
|
|
|
|
//@ts-check
|
|
|
|
|
|
/* eslint-disable @typescript-eslint/no-var-requires */ |
|
|
|
|
|
const fs = require('fs'); |
|
|
|
|
|
const path = require('path'); |
|
|
|
|
|
const util = require('util'); |
|
|
|
|
|
const exec = util.promisify(require('child_process').exec); |
|
|
|
|
|
const fetch = require('node-fetch'); |
|
|
|
|
|
|
|
|
|
|
|
/** @typedef { { licenses: string; repository: string; licenseFile: string } } PackageInfo **/ |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @param { string } file |
|
|
|
|
|
*/ |
|
|
|
|
|
async function generateThirdpartyNotices(file) { |
|
|
|
|
|
file = path.join(process.cwd(), file); |
|
|
|
|
|
const data = fs.readFileSync(file, 'utf8'); |
|
|
|
|
|
fs.rmSync(file); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @type { { [key: string]: PackageInfo } } |
|
|
|
|
|
*/ |
|
|
|
|
|
const packages = JSON.parse(data); |
|
|
|
|
|
|
|
|
|
|
|
// Add any packages used in directly in the code
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @type [string, PackageInfo][] |
|
|
|
|
|
*/ |
|
|
|
|
|
const codeOnlyPackages = [ |
|
|
|
|
|
[ |
|
|
|
|
|
'microsoft/vscode', |
|
|
|
|
|
{ |
|
|
|
|
|
licenses: 'MIT', |
|
|
|
|
|
repository: 'https://github.com/microsoft/vscode', |
|
|
|
|
|
licenseFile: 'https://raw.github.com/microsoft/vscode/main/LICENSE.txt', |
|
|
|
|
|
}, |
|
|
|
|
|
], |
|
|
|
|
|
[ |
|
|
|
|
|
'chalk/ansi-regex', |
|
|
|
|
|
{ |
|
|
|
|
|
licenses: 'MIT', |
|
|
|
|
|
repository: 'https://github.com/chalk/ansi-regex', |
|
|
|
|
|
licenseFile: 'https://raw.github.com/chalk/ansi-regex/main/license', |
|
|
|
|
|
}, |
|
|
|
|
|
], |
|
|
|
|
|
[ |
|
|
|
|
|
'sindresorhus/string-width', |
|
|
|
|
|
{ |
|
|
|
|
|
licenses: 'MIT', |
|
|
|
|
|
repository: 'https://github.com/sindresorhus/string-width', |
|
|
|
|
|
licenseFile: 'https://raw.github.com/sindresorhus/string-width/main/license', |
|
|
|
|
|
}, |
|
|
|
|
|
], |
|
|
|
|
|
[ |
|
|
|
|
|
'sindresorhus/is-fullwidth-code-point', |
|
|
|
|
|
{ |
|
|
|
|
|
licenses: 'MIT', |
|
|
|
|
|
repository: 'https://github.com/sindresorhus/is-fullwidth-code-point', |
|
|
|
|
|
licenseFile: 'https://raw.github.com/sindresorhus/is-fullwidth-code-point/main/license', |
|
|
|
|
|
}, |
|
|
|
|
|
], |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
const packageOutputs = []; |
|
|
|
|
|
const licenseOutputs = []; |
|
|
|
|
|
|
|
|
|
|
|
let count = 0; |
|
|
|
|
|
for (const [key, data] of Object.entries(packages).concat(codeOnlyPackages)) { |
|
|
|
|
|
let name; |
|
|
|
|
|
let version; |
|
|
|
|
|
|
|
|
|
|
|
const index = key.lastIndexOf('@'); |
|
|
|
|
|
if (index !== -1) { |
|
|
|
|
|
name = key.substr(0, index); |
|
|
|
|
|
version = key.substr(index + 1); |
|
|
|
|
|
} else { |
|
|
|
|
|
name = key; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (name === 'gitlens') continue; |
|
|
|
|
|
|
|
|
|
|
|
let license; |
|
|
|
|
|
if (data.licenseFile.startsWith('https://')) { |
|
|
|
|
|
const response = await fetch(data.licenseFile); |
|
|
|
|
|
license = await response.text(); |
|
|
|
|
|
} else { |
|
|
|
|
|
license = fs.readFileSync(data.licenseFile, 'utf8'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
packageOutputs.push(`${++count}. ${name}${version ? ` version ${version}` : ''} (${data.repository})`); |
|
|
|
|
|
licenseOutputs.push( |
|
|
|
|
|
`\n%% ${name} NOTICES AND INFORMATION BEGIN HERE\n=========================================\n${license}\n=========================================\nEND OF ${name} NOTICES AND INFORMATION`, |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const content = `GitLens\n\nTHIRD-PARTY SOFTWARE NOTICES AND INFORMATION\nThis project incorporates components from the projects listed below.\n\n${packageOutputs.join( |
|
|
|
|
|
'\n', |
|
|
|
|
|
)}\n${licenseOutputs.join('\n')}`;
|
|
|
|
|
|
fs.writeFileSync(path.join(process.cwd(), 'ThirdPartyNotices.txt'), content, 'utf8'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function generate() { |
|
|
|
|
|
await exec('npx license-checker --json --production --relativeLicensePath > thirdparty.json'); |
|
|
|
|
|
void generateThirdpartyNotices('thirdparty.json'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void generate(); |