-
Notifications
You must be signed in to change notification settings - Fork 0
/
check-version.ts
67 lines (63 loc) · 2.08 KB
/
check-version.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
import type { Server } from 'yues-client';
// assuming we're using only latest patches
const checkTable = [
['0.4.4', 'return gui.TextEdit ~= nil and gui.TextEdit.gettextbounds ~= nil'],
['0.5.4', 'return gui.Slider ~= nil'],
['0.6.3', 'return gui.Table ~= nil'],
['0.8.8', 'return gui.Tray.remove ~= nil'],
['0.9.8', 'return gui.Notification ~= nil'],
['0.10.3', 'return gui.Scroll.setscrollposition ~= nil'],
['0.11.0', 'return gui.DatePicker ~= nil'],
];
const checkLibVersionFunction = `
local version = '0.0.0'
for _, v in pairs(checkTable) do
local ver, funcbody = unpack(v)
local func = loadstring(funcbody)
if not func() then return version end
version = ver
end
return version
`.slice(1, -1);
function parseVersion(version: string) {
const [ major, minor, patch ] = version.split('.').map(v => +v);
return { major, minor, patch };
}
export async function assertLibVersion(server: Server, minimum: string, maximum?: string) {
const libVersion = await server.exec(
checkLibVersionFunction,
['checkTable'],
[checkTable],
);
const lib = parseVersion(libVersion);
let errString = 'This app requires libyue version to be greater or equal ' + minimum;
if (maximum) errString += ' and less or equal ' + maximum;
errString += ' but installed version is ' + libVersion;
const min = parseVersion(minimum);
if (
(
min.major > lib.major
) || (
min.major === lib.major && min.minor > lib.minor
) || (
min.major === lib.major && min.minor === lib.minor && min.patch > lib.patch
)
) {
await server.destroy();
throw new EvalError(errString);
}
if (!maximum) return;
const max = parseVersion(maximum);
if (
(
max.major < lib.major
) || (
max.major === lib.major && max.minor < lib.minor
) || (
max.major === lib.major && max.minor === lib.minor && max.patch < lib.patch
)
) {
await server.destroy();
throw new EvalError(errString);
}
}