#!/usr/bin/env node const fs = require("fs") const { resolve } = require("path") const root = resolve(__dirname, "../../..") const packages = [ root, resolve(root, "packages/web"), resolve(root, "packages/opvault.js"), ] const readJSON = path => JSON.parse(fs.readFileSync(path, "utf-8")) const infoMap = Object.fromEntries( packages.flatMap(dir => { const rootPkg = readJSON(resolve(dir, "package.json")) const dependencies = Object.keys(rootPkg.dependencies || {}) return dependencies.map(dependency => { const pkgDir = resolve(dir, "node_modules", dependency) const pkg = readJSON(resolve(pkgDir, "package.json")) const licenseFile = fs .readdirSync(pkgDir) .filter(x => x.toLowerCase().startsWith("license")) if (licenseFile.length !== 1) { console.error(fs.readdirSync(pkgDir)) throw new Error(`Cannot determine license file for ${pkg.name}`) } return [ pkg.name, { name: pkg.name, author: pkg.author?.name ?? pkg.author, license: fs.readFileSync(resolve(pkgDir, licenseFile[0]), "utf-8"), }, ] }) }) ) fs.writeFileSync( resolve(__dirname, "../src/third-party-licenses.json"), JSON.stringify(infoMap, null, 2) )