]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - packages/types/generate-package.ts
Move types package in packages/
[github/Chocobozzz/PeerTube.git] / packages / types / generate-package.ts
CommitLineData
8b03e2ce 1import { execSync } from 'child_process'
2import depcheck, { PackageDependencies } from 'depcheck'
077f3448
C
3import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra'
4import { resolve } from 'path'
5import { cwd } from 'process'
8b03e2ce 6
7run()
8 .then(() => process.exit(0))
9 .catch(err => {
10 console.error(err)
11 process.exit(-1)
12 })
13
14async function run () {
6627dbc9 15 const typesPath = resolve(cwd(), './packages/types/')
b8fa3e8c 16 const typesDistPath = resolve(cwd(), typesPath, './dist/')
17 const typesDistPackageJsonPath = resolve(typesDistPath, './package.json')
18 const typesDistGitIgnorePath = resolve(typesDistPath, './.gitignore')
8b03e2ce 19 const mainPackageJson = await readJson(resolve(cwd(), './package.json'))
b8fa3e8c 20 const distTsConfigPath = resolve(cwd(), typesPath, './tsconfig.dist.json')
21 const distTsConfig = await readJson(distTsConfigPath)
8b03e2ce 22 const clientPackageJson = await readJson(resolve(cwd(), './client/package.json'))
23
077f3448 24 await remove(typesDistPath)
6627dbc9 25 execSync('npm run tsc -- -b --verbose packages/types', { stdio: 'inherit' })
b969539c 26 execSync(`npm run resolve-tspaths -- --project ${distTsConfigPath} --src ${typesDistPath} --out ${typesDistPath}`, { stdio: 'inherit' })
077f3448 27
8b03e2ce 28 const allDependencies = Object.assign(
29 mainPackageJson.dependencies,
30 mainPackageJson.devDepencies,
31 clientPackageJson.dependencies
32 ) as PackageDependencies
33
34 // https://github.com/depcheck/depcheck#api
35 const depcheckOptions = {
36 parsers: { '**/*.ts': depcheck.parser.typescript },
37 detectors: [
38 depcheck.detector.requireCallExpression,
39 depcheck.detector.importDeclaration
40 ],
b8fa3e8c 41 ignoreMatches: Object.keys(distTsConfig?.compilerOptions?.paths || []),
8b03e2ce 42 package: { dependencies: allDependencies }
43 }
44
6627dbc9 45 const { dependencies: unusedDependencies } = await depcheck(resolve(typesPath), depcheckOptions)
8b03e2ce 46 console.log(`Removing ${Object.keys(unusedDependencies).length} unused dependencies.`)
47 const dependencies = Object
48 .keys(allDependencies)
49 .filter(dependencyName => !unusedDependencies.includes(dependencyName))
50 .reduce((dependencies, dependencyName) => {
51 dependencies[dependencyName] = allDependencies[dependencyName]
52 return dependencies
53 }, {})
54
55 const { description, version, licence, engines, author, repository } = mainPackageJson
56 const typesPackageJson = {
57 name: '@peertube/peertube-types',
58 description,
59 version,
60 private: false,
61 license: licence,
62 engines,
63 author,
64 repository,
65 dependencies
66 }
b8fa3e8c 67 console.log(`Writing package.json to ${typesDistPackageJsonPath}`)
68 await writeJSON(typesDistPackageJsonPath, typesPackageJson, { spaces: 2 })
8b03e2ce 69
b8fa3e8c 70 console.log(`Writing git ignore to ${typesDistGitIgnorePath}`)
71 await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo')
8b03e2ce 72
b8fa3e8c 73 await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md'))
8b03e2ce 74}