forked from Heroic-Games-Launcher/heroic-website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgithub.ts
107 lines (96 loc) · 3.08 KB
/
github.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const githubApi =
'https://api.github.com/repos/Heroic-Games-Launcher/HeroicGamesLauncher/releases'
interface Asset {
browser_download_url: string
name: string
size: number
}
export interface Release {
assets: Asset[]
name: string
tag_name: string
published_at: string
prerelease: boolean
id: number
}
export interface ReleaseUrls {
Linux: string
Windows: string
WindowsArm: string
Mac: string
MacArm: string
LinuxBeta?: string | null
WindowsBeta?: string | null
WindowsArmBeta?: string | null
MacBeta?: string | null
MacArmBeta?: string | null
}
const defaultUrl =
'https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/releases/latest'
export const getLatestReleases = async (): Promise<ReleaseUrls> => {
try {
const data = await fetch(githubApi)
const releases: Release[] = await data.json()
const { assets: assetsStable, tag_name: tagStable } = releases.filter(
(rel) => rel.prerelease === false
)[0]
const { assets: assetsBeta, tag_name: tagBeta } = releases.filter(
(rel) => rel.prerelease === true
)[0]
console.log({ assetsStable, assetsBeta, tagStable, tagBeta })
const appImageStable =
assetsStable.filter((a) => a.name.endsWith('.AppImage'))[0]
?.browser_download_url || defaultUrl
const windowsSetupStable =
assetsStable.filter((a) => a.name.includes('Setup-x64'))[0]
?.browser_download_url || defaultUrl
const WindowsSetupArmStable =
assetsStable.filter((a) => a.name.includes('Setup-arm64'))[0]
?.browser_download_url || defaultUrl
const dmgStable =
assetsStable.filter((a) => a.name.includes('macOS-x64'))[0]
?.browser_download_url || defaultUrl
const dmgArmStable =
assetsStable.filter((a) => a.name.includes('macOS-arm64'))[0]
?.browser_download_url || defaultUrl
let appImageBeta,
windowsPortableBeta,
windowsSetupBeta,
windowsSetupArmBeta,
dmgBeta = null,
dmgArmBeta = null
const isSameMajor = tagStable >= tagBeta.split('-')[0]
/* if (!isSameMajor) {
appImageBeta = assetsBeta.filter((a) => a.name.endsWith('.AppImage'))[0]
.browser_download_url
windowsSetupBeta = assetsBeta.filter((a) => a.name.includes('Setup'))[0]
.browser_download_url
windowsSetupArmBeta = assetsBeta.filter((a) =>
a.name.includes('Setup-arm64')
)[0].browser_download_url
dmgBeta = assetsBeta.filter((a) => a.name.endsWith('.dmg'))[0]
.browser_download_url
dmgArmBeta = assetsBeta.filter((a) => a.name.includes('macOS-arm64'))[0]
} */
return {
Linux: appImageStable,
LinuxBeta: appImageBeta,
Windows: windowsSetupStable,
WindowsArm: WindowsSetupArmStable,
WindowsBeta: windowsSetupBeta,
WindowsArmBeta: windowsSetupArmBeta,
Mac: dmgStable,
MacArm: dmgArmStable,
MacBeta: dmgBeta
}
} catch (error) {
console.error({ error })
return {
Linux: defaultUrl,
Windows: defaultUrl,
WindowsArm: defaultUrl,
Mac: defaultUrl,
MacArm: defaultUrl
}
}
}