@baishancloud/fnedge 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of @baishancloud/fnedge might be problematic. Click here for more details.
- package/README.md +0 -0
- package/fnedge.js +112 -0
- package/install.js +5 -0
- package/package.json +47 -0
- package/run.js +6 -0
- package/uninstall.js +5 -0
package/README.md
ADDED
File without changes
|
package/fnedge.js
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
import { join } from "path"
|
2
|
+
import os from "os";
|
3
|
+
import fs from "fs"
|
4
|
+
import { existsSync, mkdirSync } from "fs";
|
5
|
+
import fetch from 'node-fetch';
|
6
|
+
import { spawnSync } from "child_process";
|
7
|
+
import rimraf from "rimraf";
|
8
|
+
|
9
|
+
class App {
|
10
|
+
constructor(props) {
|
11
|
+
const type = os.type();
|
12
|
+
const arch = os.arch();
|
13
|
+
if (arch !== "x64" && arch !== "arm64") {
|
14
|
+
throw new Error(`Unsupported arch: ${type} ${arch}`);
|
15
|
+
}
|
16
|
+
switch (type) {
|
17
|
+
case "Windows_NT":
|
18
|
+
this.osType = "windows"
|
19
|
+
break
|
20
|
+
case "Linux":
|
21
|
+
this.osType = "linux"
|
22
|
+
break
|
23
|
+
case "Darwin":
|
24
|
+
this.osType = "darwin"
|
25
|
+
break
|
26
|
+
default:
|
27
|
+
throw new Error(`Unsupported os type: ${type} ${arch}`);
|
28
|
+
}
|
29
|
+
this.fnedgeDir = join(os.homedir(), ".fnedge")
|
30
|
+
}
|
31
|
+
|
32
|
+
async install() {
|
33
|
+
try {
|
34
|
+
await this.downloadBinary()
|
35
|
+
}catch (e) {}
|
36
|
+
}
|
37
|
+
|
38
|
+
async downloadBinary() {
|
39
|
+
if (!existsSync(this.fnedgeDir)) {
|
40
|
+
mkdirSync(this.fnedgeDir, { recursive: true, mode: '0755'});
|
41
|
+
}else{
|
42
|
+
rimraf.sync(this.fnedgeDir)
|
43
|
+
}
|
44
|
+
|
45
|
+
const binaryDir = join(this.fnedgeDir, "bin")
|
46
|
+
if (!existsSync(binaryDir)) {
|
47
|
+
mkdirSync(binaryDir, { recursive: true, mode: '0755'});
|
48
|
+
}
|
49
|
+
|
50
|
+
const url = this.getReleaseUrl(this.osType)
|
51
|
+
await this.fetchBinary(url, binaryDir)
|
52
|
+
}
|
53
|
+
|
54
|
+
uninstall() {
|
55
|
+
try {
|
56
|
+
rimraf.sync(join(this.fnedgeDir, "bin"));
|
57
|
+
rimraf.sync(this.fnedgeDir);
|
58
|
+
}catch (e){}
|
59
|
+
}
|
60
|
+
|
61
|
+
async run() {
|
62
|
+
if (this.osType != "windows") {
|
63
|
+
const binaryPath = join(this.fnedgeDir, "/bin/" + this.getBinaryName())
|
64
|
+
if (!existsSync(binaryPath)) {
|
65
|
+
await this.downloadBinary()
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
const binaryPath = join(this.fnedgeDir, "bin", this.getBinaryName())
|
70
|
+
const [, , ...args] = process.argv;
|
71
|
+
const options = { cwd: process.cwd(), stdio: "inherit" };
|
72
|
+
const result = spawnSync(binaryPath, args, options);
|
73
|
+
if (result.error) {
|
74
|
+
console.log(result.error)
|
75
|
+
process.exit(1);
|
76
|
+
}
|
77
|
+
process.exit(result.status);
|
78
|
+
}
|
79
|
+
|
80
|
+
getReleaseUrl(osType) {
|
81
|
+
return `https://fnedge-api.console.baishan.com/api/v1/cli/download?os=${osType}`
|
82
|
+
}
|
83
|
+
|
84
|
+
async fetchBinary(url, binaryDir) {
|
85
|
+
const response = await fetch(url, { method: 'GET' });
|
86
|
+
if (response.status == 200) {
|
87
|
+
const fileStream = fs.createWriteStream(join(binaryDir, this.getBinaryName()), { mode: 755 });
|
88
|
+
await new Promise((resolve, reject) => {
|
89
|
+
response.body.pipe(fileStream);
|
90
|
+
response.body.on("error", reject);
|
91
|
+
fileStream.on("finish", resolve);
|
92
|
+
});
|
93
|
+
return;
|
94
|
+
} else if (response.status == 403) {
|
95
|
+
throw new Error("403 forbidden")
|
96
|
+
console.log(response.status)
|
97
|
+
}else{
|
98
|
+
let json = await response.json()
|
99
|
+
console.log(JSON.stringify(json))
|
100
|
+
throw new Error("download fnedge binary failed")
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
getBinaryName() {
|
105
|
+
let name = "fnedge"
|
106
|
+
if (this.osType == "windows") {
|
107
|
+
name += ".exe"
|
108
|
+
}
|
109
|
+
return name
|
110
|
+
}
|
111
|
+
}
|
112
|
+
export default App
|
package/install.js
ADDED
package/package.json
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
{
|
2
|
+
"name": "@baishancloud/fnedge",
|
3
|
+
"version": "0.1.1",
|
4
|
+
"description": "command line tool for function@edge",
|
5
|
+
"main": "fnedge.js",
|
6
|
+
"bin": {
|
7
|
+
"fnedge": "run.js"
|
8
|
+
},
|
9
|
+
"type": "module",
|
10
|
+
"scripts": {
|
11
|
+
"postinstall": "node ./install.js",
|
12
|
+
"preuninstall": "node ./uninstall.js"
|
13
|
+
},
|
14
|
+
"repository": {
|
15
|
+
"type": "git",
|
16
|
+
"url": "git+https://github.com/baishanyun/fnedge.git"
|
17
|
+
},
|
18
|
+
"author": "",
|
19
|
+
"license": "ISC",
|
20
|
+
"keywords": [
|
21
|
+
"fnedge",
|
22
|
+
"baishanyun",
|
23
|
+
"function@edge",
|
24
|
+
"function edge",
|
25
|
+
"edge",
|
26
|
+
"compute",
|
27
|
+
"serverless",
|
28
|
+
"serverless application",
|
29
|
+
"serverless module",
|
30
|
+
"wasm",
|
31
|
+
"web",
|
32
|
+
"assembly",
|
33
|
+
"webassembly",
|
34
|
+
"rust",
|
35
|
+
"emscripten",
|
36
|
+
"typescript",
|
37
|
+
"router",
|
38
|
+
"http",
|
39
|
+
"cli"
|
40
|
+
],
|
41
|
+
"dependencies": {
|
42
|
+
"md5": "^2.3.0",
|
43
|
+
"node-fetch": "^3.0.0",
|
44
|
+
"rimraf": "^3.0.2",
|
45
|
+
"url-parse": "^1.5.3"
|
46
|
+
}
|
47
|
+
}
|
package/run.js
ADDED