12 lines
1.2 KiB
JavaScript
12 lines
1.2 KiB
JavaScript
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'))
|