]>
Commit | Line | Data |
---|---|---|
8b03e2ce | 1 | import { execSync } from 'child_process' |
2 | import depcheck, { PackageDependencies } from 'depcheck' | |
077f3448 C |
3 | import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra' |
4 | import { resolve } from 'path' | |
5 | import { cwd } from 'process' | |
8b03e2ce | 6 | |
7 | run() | |
8 | .then(() => process.exit(0)) | |
9 | .catch(err => { | |
10 | console.error(err) | |
11 | process.exit(-1) | |
12 | }) | |
13 | ||
14 | async function run () { | |
8b03e2ce | 15 | const typesPath = resolve(cwd(), './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 C |
24 | await remove(typesDistPath) |
25 | execSync('npm run tsc -- -b --verbose 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 | ||
45 | const { dependencies: unusedDependencies } = await depcheck(resolve(cwd(), './types/'), depcheckOptions) | |
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 | } |