]>
Commit | Line | Data |
---|---|---|
1 | import { execSync } from 'child_process' | |
2 | import depcheck, { PackageDependencies } from 'depcheck' | |
3 | import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra' | |
4 | import { join, resolve } from 'path' | |
5 | import { root } from '../../shared/core-utils' | |
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 = __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') | |
29 | const distTsConfig = await readJson(distTsConfigPath) | |
30 | const clientPackageJson = await readJson(join(root(), '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.devDependencies, | |
39 | clientPackageJson.dependencies, | |
40 | clientPackageJson.devDependencies | |
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 | ], | |
50 | ignoreMatches: Object.keys(distTsConfig?.compilerOptions?.paths || []), | |
51 | package: { dependencies: allDependencies } | |
52 | } | |
53 | ||
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 | ||
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 | ||
77 | const { description, licence, engines, author, repository } = mainPackageJson | |
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 | } | |
89 | console.log(`Writing package.json to ${typesDistPackageJsonPath}`) | |
90 | await writeJSON(typesDistPackageJsonPath, typesPackageJson, { spaces: 2 }) | |
91 | ||
92 | console.log(`Writing git ignore to ${typesDistGitIgnorePath}`) | |
93 | await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo') | |
94 | ||
95 | await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md')) | |
96 | } |