Skip to content

Commit 932d23d

Browse files
Update build scripts (#1438)
1 parent 816a175 commit 932d23d

File tree

8 files changed

+336
-126
lines changed

8 files changed

+336
-126
lines changed

esbuild.mjs

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
import * as fs from 'node:fs/promises'
2+
import * as path from 'node:path'
3+
import { createRequire } from 'node:module'
4+
import { fileURLToPath } from 'node:url'
15
import esbuild from 'esbuild'
2-
import fs from 'fs'
3-
import { createRequire } from 'module'
46
import minimist from 'minimist'
7+
import checker from 'license-checker'
58

69
const require = createRequire(import.meta.url)
10+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
711

812
const args = minimist(process.argv.slice(2), {
913
boolean: ['watch', 'minify'],
@@ -31,7 +35,7 @@ let ctx = await esbuild.context({
3135

3236
build.onLoad({ filter: /.*/, namespace: 'css' }, async (args) => ({
3337
contents: `
34-
export default ${JSON.stringify(await fs.promises.readFile(args.path, 'utf8'))}
38+
export default ${JSON.stringify(await fs.readFile(args.path, 'utf8'))}
3539
`,
3640
}))
3741
},
@@ -72,6 +76,86 @@ let ctx = await esbuild.context({
7276
opts.loader['.node'] = 'file'
7377
},
7478
},
79+
{
80+
name: 'generate-notices',
81+
async setup() {
82+
let exclude = [
83+
/^@types\//,
84+
'esbuild',
85+
'rimraf',
86+
'prettier',
87+
'typescript',
88+
'license-checker',
89+
]
90+
91+
let allLicenses = {
92+
...(await getLicenses(path.resolve(__dirname, 'packages/tailwindcss-language-server'))),
93+
...(await getLicenses(path.resolve(__dirname, 'packages/tailwindcss-language-service'))),
94+
}
95+
96+
let allDeps = [
97+
...(await getDeps(path.resolve(__dirname, 'packages/tailwindcss-language-server'), true)),
98+
...(await getDeps(path.resolve(__dirname, 'packages/tailwindcss-language-service'))),
99+
]
100+
101+
function isExcluded(name) {
102+
for (let pattern of exclude) {
103+
if (typeof pattern === 'string') {
104+
if (name === pattern) {
105+
return true
106+
}
107+
} else if (pattern.test(name)) {
108+
return true
109+
}
110+
}
111+
112+
return false
113+
}
114+
115+
async function getDeps(dir, dev = false) {
116+
let pkg = JSON.parse(await fs.readFile(path.resolve(dir, 'package.json'), 'utf-8'))
117+
118+
let deps = Object.entries(pkg['dependencies'] ?? {})
119+
120+
if (dev) deps.push(...Object.entries(pkg['devDependencies'] ?? {}))
121+
122+
return deps.map(([name, version]) => `${name}@${version}`)
123+
}
124+
125+
function getLicenses(dir) {
126+
return new Promise((resolve, reject) => {
127+
checker.init({ start: dir }, (err, packages) => {
128+
if (err) return reject(err)
129+
return resolve(packages)
130+
})
131+
})
132+
}
133+
134+
let contents = []
135+
136+
for (let pkg in allLicenses) {
137+
if (!allDeps.includes(pkg)) continue
138+
139+
let parts = pkg.split('@')
140+
let name = parts.slice(0, parts.length - 1).join('@')
141+
if (isExcluded(name)) continue
142+
143+
let license = allLicenses[pkg].licenseFile
144+
? (await fs.readFile(allLicenses[pkg].licenseFile, 'utf-8')).trim()
145+
: undefined
146+
147+
if (!license) continue
148+
149+
contents.push(`${pkg}\n\n${license}`)
150+
}
151+
152+
await fs.writeFile(
153+
path.resolve(__dirname, 'packages/tailwindcss-language-server/ThirdPartyNotices.txt'),
154+
contents.join(`\n\n${'='.repeat(80)}\n\n`),
155+
'utf-8',
156+
)
157+
},
158+
},
75159
],
76160
})
77161

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
"devDependencies": {
55
"@npmcli/package-json": "^5.0.0",
66
"@types/culori": "^2.1.0",
7+
"@types/license-checker": "^25.0.6",
78
"culori": "^4.0.1",
89
"esbuild": "^0.25.5",
10+
"license-checker": "25.0.1",
911
"minimist": "^1.2.8",
1012
"prettier": "^3.2.5",
1113
"semver": "^7.7.1"

0 commit comments

Comments
 (0)