import fs from "node:fs" import path from "node:path" async function main() { const cwd = process.cwd() const outputFilePath = path.resolve(process.cwd(), "public", "oss-licenses.json") if (await fs.promises.stat(outputFilePath).then(() => true, () => false)) { fs.unlinkSync(outputFilePath) } const rootPkgJson = JSON.parse(fs.readFileSync(path.resolve(cwd, "package.json"))) const modules = Object.entries(rootPkgJson.dependencies).map(([name, version]) => ({ name, version })) let licenses = [] for await (const mod of modules) { const pkgJsonPath = path.resolve(cwd, "node_modules", mod.name, "package.json") if (!await fs.promises.stat(pkgJsonPath).then(() => true, () => false)) { continue } const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath)) console.log(`Computing license for [${mod}]`) licenses.push({ name: pkgJson.name, version: pkgJson.version, license: pkgJson.license, author: pkgJson.author, }) } licenses = licenses.sort((a, b) => a.name.localeCompare(b.name)) fs.writeFileSync(outputFilePath, JSON.stringify(licenses, null, 4)) console.log(`Wrote [${licenses.length}] licenses to > ${outputFilePath}`) } main()