-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.ts
More file actions
72 lines (60 loc) · 1.79 KB
/
install.ts
File metadata and controls
72 lines (60 loc) · 1.79 KB
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
import * as fs from "fs";
import * as path from "path";
import * as mkdirp from "mkdirp";
const
downloadRelease = require("download-github-release").default,
GITHUB_USER = "touchifyapp",
GITHUB_REPO = "sfx",
DEST_PATH = path.resolve(__dirname, "sfx-bin");
downloadTarget("x64")
.then(() => downloadTarget("i386"))
.then(() => {
if (process.arch === "arm") {
return downloadTarget("arm");
}
})
.then(() => {
const bundlerPath = sfxbundler();
if (bundlerPath) {
return chmod(bundlerPath, "755");
}
});
function downloadTarget(target: string): Promise<void> {
const
platform = process.platform,
dest = path.join(DEST_PATH, target);
mkdirp.sync(dest);
return downloadRelease(
GITHUB_USER,
GITHUB_REPO,
dest,
() => true,
(asset: { name: string }) => asset.name === `sfx-${target}.zip`
);
}
function chmod(path: string | Buffer, mode: number | string): Promise<void> {
return new Promise<void>((resolve, reject) => {
fs.chmod(path, <any>mode, err => {
err ?
reject(err) :
resolve();
});
});
}
function sfxbundler(): string {
const bin = process.platform === "win32"
? "bundler.exe"
: process.platform === "darwin"
? "bundlerosx"
: "bundler";
switch(process.arch) {
case "ia32":
return path.join(__dirname, "sfx-bin", "i386", bin);
case "x64":
return path.join(__dirname, "sfx-bin", "x64", bin);
case "arm":
return path.join(__dirname, "sfx-bin", "arm", bin);
default:
throw new Error("SFX is not supported in this environment");
}
}