81 lines
2.0 KiB
JavaScript
81 lines
2.0 KiB
JavaScript
import { writeFileSync } from 'fs'
|
|
import checker from 'license-checker'
|
|
import { readFileSync } from 'fs'
|
|
import { dirname, resolve } from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
const exclude = [
|
|
/^@types\//,
|
|
'esbuild',
|
|
'rimraf',
|
|
'jest',
|
|
'prettier',
|
|
'typescript',
|
|
'license-checker',
|
|
]
|
|
|
|
function isExcluded(name) {
|
|
for (let pattern of exclude) {
|
|
if (typeof pattern === 'string') {
|
|
if (name === pattern) {
|
|
return true
|
|
}
|
|
} else if (pattern.test(name)) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
function getDeps(dir, dev = false) {
|
|
return Object.entries(
|
|
JSON.parse(readFileSync(resolve(dir, 'package.json'), 'utf-8'))[
|
|
dev ? 'devDependencies' : 'dependencies'
|
|
]
|
|
).map(([name, version]) => `${name}@${version}`)
|
|
}
|
|
|
|
function getLicenses(dir) {
|
|
return new Promise((resolve, reject) => {
|
|
checker.init({ start: dir }, (err, packages) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve(packages)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
;(async function () {
|
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
let contents = []
|
|
|
|
let serverDeps = getDeps(resolve(__dirname, '..'), true)
|
|
let serviceDeps = getDeps(resolve(__dirname, '../../tailwindcss-language-service'))
|
|
let allDeps = [...serverDeps, ...serviceDeps]
|
|
|
|
let serverLicenses = await getLicenses(resolve(__dirname, '../'))
|
|
let serviceLicenses = await getLicenses(resolve(__dirname, '../../tailwindcss-language-service'))
|
|
let allLicenses = { ...serverLicenses, ...serviceLicenses }
|
|
|
|
for (let pkg in allLicenses) {
|
|
let parts = pkg.split('@')
|
|
let name = parts.slice(0, parts.length - 1).join('@')
|
|
if (allDeps.includes(pkg) && !isExcluded(name)) {
|
|
let license = allLicenses[pkg].licenseFile
|
|
? readFileSync(allLicenses[pkg].licenseFile, 'utf-8').trim()
|
|
: undefined
|
|
if (license) {
|
|
contents.push(`${pkg}\n\n${license}`)
|
|
}
|
|
}
|
|
}
|
|
|
|
writeFileSync(
|
|
resolve(__dirname, '../ThirdPartyNotices.txt'),
|
|
contents.join(`\n\n${'='.repeat(80)}\n\n`),
|
|
'utf-8'
|
|
)
|
|
})()
|