Passed
Pull Request — develop (#34)
by Bjarn
01:38
created

src/utils/phpFpm.ts   A

Complexity

Total Complexity 4
Complexity/F 0

Size

Lines of Code 69
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 57
dl 0
loc 69
c 0
b 0
f 0
rs 10
mnd 4
bc 4
fnc 0
bpm 0
cpm 0
noi 0
1
import * as fs from 'fs'
2
import PhpFpm from '../services/phpFpm'
3
import PhpFpm72 from '../services/phpFpm72'
4
import PhpFpm73 from '../services/phpFpm73'
5
import PhpFpm74 from '../services/phpFpm74'
6
import PhpFpm80 from '../services/phpFpm80'
7
8
const supportedPhpVersions: string[] = [
9
    (new PhpFpm80).versionName,
10
    (new PhpFpm74).versionName,
11
    (new PhpFpm73).versionName,
12
    (new PhpFpm72).versionName,
13
]
14
15
const getPhpFpmByName = (phpVersion: string): PhpFpm => {
16
    let phpService: PhpFpm
17
18
    switch (phpVersion) {
19
    case (new PhpFpm72).service:
20
        phpService = new PhpFpm72()
21
        break
22
    case (new PhpFpm73).service:
23
        phpService = new PhpFpm73()
24
        break
25
    case (new PhpFpm74).service:
26
        phpService = new PhpFpm74()
27
        break
28
    case (new PhpFpm80).service:
29
        phpService = new PhpFpm80()
30
        break
31
    default:
32
        throw Error('Invalid PHP version: ' + phpVersion)
33
    }
34
35
    return phpService
36
}
37
38
/**
39
 * Get the currently linked Php Fpm binary.
40
 */
41
const getLinkedPhpVersion = async (): Promise<PhpFpm> => {
42
    const phpLink = await fs.lstatSync('/usr/local/bin/php')
43
44
    if (!phpLink.isSymbolicLink()) {
45
        throw Error('Php executable is not found.')
46
    }
47
48
    const phpBinary = await fs.realpathSync('/usr/local/bin/php')
49
50
    let linkedPhpVersion: PhpFpm | undefined
51
52
    supportedPhpVersions.forEach((versionName) => {
53
        if (phpBinary.includes(versionName)) {
54
            linkedPhpVersion = getPhpFpmByName(`php@${versionName}`)
55
        }
56
    })
57
58
    if (linkedPhpVersion) {
59
        return linkedPhpVersion
60
    } else {
61
        throw Error('Unable to determine linked PHP version')
62
    }
63
}
64
65
export {
66
    supportedPhpVersions,
67
    getPhpFpmByName,
68
    getLinkedPhpVersion
69
}