-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
util.ts
78 lines (67 loc) · 2.15 KB
/
util.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Copyright 2019-2021 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { sync as crossSpawnSync } from 'cross-spawn'
import { resolve as appResolve } from '../../helpers/app-paths'
import { existsSync } from 'fs'
// import semver from 'semver'
import { IManager, NpmManager, YarnManager, PnpmManager } from './managers'
const getManager = (): IManager => {
if (existsSync(appResolve.app('yarn.lock'))) {
return new YarnManager()
} else if (existsSync(appResolve.app('pnpm-lock.yaml'))) {
return new PnpmManager()
} else {
return new NpmManager()
}
}
function getCrateLatestVersion(crateName: string): string | null {
const child = crossSpawnSync('cargo', ['search', crateName, '--limit', '1'])
const output = String(child.output[1])
// eslint-disable-next-line security/detect-non-literal-regexp
const matches = new RegExp(crateName + ' = "(\\S+)"', 'g').exec(output)
if (matches?.[1]) {
return matches[1]
} else {
return null
}
}
function getNpmLatestVersion(packageName: string): string {
return getManager().getLatestVersion(packageName)
}
function getNpmPackageVersion(packageName: string): string | null {
return getManager().getPackageVersion(packageName)
}
function installNpmPackage(packageName: string): void {
return getManager().installPackage(packageName)
}
function installNpmDevPackage(packageName: string): void {
return getManager().installDevPackage(packageName)
}
function updateNpmPackage(packageName: string): void {
return getManager().updatePackage(packageName)
}
function padVersion(version: string): string {
let count = (version.match(/\./g) ?? []).length
while (count < 2) {
count++
version += '.0'
}
return version
}
function semverLt(first: string, second: string): boolean {
return first !== second
// TODO: When version 1.0.0 is released this code should work again
// return semver.lt(padVersion(first), padVersion(second))
}
export {
getManager,
getCrateLatestVersion,
getNpmLatestVersion,
getNpmPackageVersion,
installNpmPackage,
installNpmDevPackage,
updateNpmPackage,
padVersion,
semverLt
}