tailwind-ctp-intellisense/packages/tailwindcss-language-server/scripts/createNoticesFile.mjs

73 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', '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'
)
})()