Skip to content

Commit 316bbfa

Browse files
committed
Always generate notices after build
1 parent a4245f1 commit 316bbfa

File tree

5 files changed

+95
-84
lines changed

5 files changed

+95
-84
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"

packages/tailwindcss-language-server/package.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
"_esbuild": "node ../../esbuild.mjs src/server.ts --outfile=bin/tailwindcss-language-server --minify",
1818
"_esbuild:css": "node ../../esbuild.mjs src/language/css.ts --outfile=bin/css-language-server --minify",
1919
"clean": "rimraf bin",
20-
"create-notices-file": "node scripts/createNoticesFile.mjs",
2120
"prepublishOnly": "pnpm run build",
2221
"test": "vitest",
2322
"pretest": "node tests/prepare.mjs"
@@ -55,7 +54,6 @@
5554
"@types/debounce": "1.2.0",
5655
"@types/dlv": "^1.1.4",
5756
"@types/find-up": "^4.0.0",
58-
"@types/license-checker": "^25.0.6",
5957
"@types/node": "^18.19.33",
6058
"@types/normalize-path": "^3.0.2",
6159
"@types/picomatch": "^2.3.3",
@@ -77,7 +75,6 @@
7775
"find-up": "5.0.0",
7876
"jiti": "^2.3.3",
7977
"klona": "2.0.4",
80-
"license-checker": "25.0.1",
8178
"minimist": "^1.2.8",
8279
"normalize-path": "3.0.0",
8380
"picomatch": "^4.0.1",

packages/tailwindcss-language-server/scripts/createNoticesFile.mjs

Lines changed: 0 additions & 72 deletions
This file was deleted.

pnpm-lock.yaml

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)