9a170d4da59ae35c023ca60e454fe1f7ee85743e
[oweals/peertube.git] / server / tools / cli.ts
1 const config = require('application-config')('PeerTube/CLI')
2 const netrc = require('netrc-parser').default
3
4 const version = () => {
5   const tag = require('child_process')
6     .execSync('[[ ! -d .git ]] || git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || true', { stdio: [0,1,2] })
7   if (tag) return tag
8
9   const version = require('child_process')
10     .execSync('[[ ! -d .git ]] || git rev-parse --short HEAD').toString().trim()
11   if (version) return version
12
13   return require('../../../package.json').version
14 }
15
16 let settings = {
17   remotes: [],
18   default: 0
19 }
20
21 interface Settings {
22   remotes: any[],
23   default: number
24 }
25
26 async function getSettings () {
27   return new Promise<Settings>((res, rej) => {
28     let settings = {
29       remotes: [],
30       default: 0
31     } as Settings
32     config.read((err, data) => {
33       if (err) {
34         return rej(err)
35       }
36       return res(data || settings)
37     })
38   })
39 }
40
41 async function writeSettings (settings) {
42   return new Promise((res, rej) => {
43     config.write(settings, function (err) {
44       if (err) {
45         return rej(err)
46       }
47       return res()
48     })
49   })
50 }
51
52 netrc.loadSync()
53
54 // ---------------------------------------------------------------------------
55
56 export {
57   version,
58   config,
59   settings,
60   getSettings,
61   writeSettings,
62   netrc
63 }