import { readFileSync, readdirSync, writeFileSync } from 'node:fs' import { join } from 'node:path' import { execFileSync } from 'node:child_process' const notices=['蓝鸟第三方组件许可声明\nGenerated from pinned dependency sources. Some development/test dependencies are included.'] function include(label,dir){if(!dir)return;let files;try{files=readdirSync(dir)}catch{return}for(const file of files){if(/^(LICENSE|COPYING)([.\-_]|$)/i.test(file)){try{notices.push(`\n${'='.repeat(72)}\n${label} / ${file}\n${readFileSync(join(dir,file),'utf8')}`)}catch{}}}} const modules=execFileSync('go',['list','-m','-json','all'],{encoding:'utf8'}).trim().split(/\n(?=\{)/).map(s=>JSON.parse(s)) for(const module of modules){if(!module.Main)include(`${module.Path}@${module.Version}`,module.Dir)} include('Go runtime / standard library',execFileSync('go',['env','GOROOT'],{encoding:'utf8'}).trim()) const lock=JSON.parse(readFileSync('web/package-lock.json','utf8')) for(const [path,entry] of Object.entries(lock.packages)){if(path.startsWith('node_modules/'))include(`${path.slice(13)}@${entry.version}`,join('web',path))} writeFileSync('THIRD_PARTY_NOTICES.txt',notices.join('\n'))