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