]>
Commit | Line | Data |
---|---|---|
8b03e2ce | 1 | import { execSync } from 'child_process' |
2 | import depcheck, { PackageDependencies } from 'depcheck' | |
077f3448 | 3 | import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra' |
81d02aac C |
4 | import { join, resolve } from 'path' |
5 | import { root } from '../../shared/core-utils' | |
8b03e2ce | 6 | |
21d68e68 C |
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 | ||
8b03e2ce | 15 | run() |
16 | .then(() => process.exit(0)) | |
17 | .catch(err => { | |
18 | console.error(err) | |
19 | process.exit(-1) | |
20 | }) | |
21 | ||
22 | async 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 | } |