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