@backendsystems/nibble 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/install.js +24 -99
- package/package.json +4 -1
package/bin/install.js
CHANGED
|
@@ -1,121 +1,46 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const os = require('os');
|
|
5
3
|
const path = require('path');
|
|
6
|
-
const
|
|
7
|
-
const { spawnSync } = require('child_process');
|
|
4
|
+
const BinWrapper = require('bin-wrapper');
|
|
8
5
|
|
|
9
6
|
const PROJECT = 'nibble';
|
|
10
7
|
const OWNER = 'backendsystems';
|
|
11
|
-
const REPO = 'nibble';
|
|
12
8
|
const ROOT = path.resolve(__dirname, '..');
|
|
13
9
|
const VENDOR_DIR = path.join(ROOT, 'vendor');
|
|
14
10
|
const PACKAGE_JSON = require(path.join(ROOT, 'package.json'));
|
|
15
11
|
|
|
16
|
-
function
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const arch = archMap[process.arch];
|
|
30
|
-
if (!osName || !arch) {
|
|
31
|
-
throw new Error(`unsupported platform: ${process.platform}/${process.arch}`);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return { osName, arch };
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function download(url, outFile) {
|
|
38
|
-
return new Promise((resolve, reject) => {
|
|
39
|
-
const req = https.get(url, (res) => {
|
|
40
|
-
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
41
|
-
res.resume();
|
|
42
|
-
return resolve(download(res.headers.location, outFile));
|
|
43
|
-
}
|
|
12
|
+
function buildWrapper() {
|
|
13
|
+
const tag = `v${PACKAGE_JSON.version}`;
|
|
14
|
+
const base = `https://github.com/${OWNER}/${PROJECT}/releases/download/${tag}`;
|
|
15
|
+
const binName = process.platform === 'win32' ? `${PROJECT}.exe` : PROJECT;
|
|
16
|
+
const supportedOs = ['linux', 'darwin', 'win32'];
|
|
17
|
+
const supportedArch = ['x64', 'arm64'];
|
|
18
|
+
|
|
19
|
+
const wrapper = new BinWrapper({ skipCheck: true });
|
|
20
|
+
for (const os of supportedOs) {
|
|
21
|
+
let osTarget = os;
|
|
22
|
+
if (os === 'win32') {
|
|
23
|
+
osTarget = 'windows';
|
|
24
|
+
}
|
|
44
25
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
for (const arch of supportedArch) {
|
|
27
|
+
let archTarget = arch;
|
|
28
|
+
if (arch === 'x64') {
|
|
29
|
+
archTarget = 'amd64';
|
|
48
30
|
}
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
res.pipe(file);
|
|
52
|
-
file.on('finish', () => file.close(() => resolve()));
|
|
53
|
-
file.on('error', reject);
|
|
54
|
-
});
|
|
55
|
-
req.on('error', reject);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function run(cmd, args) {
|
|
60
|
-
const result = spawnSync(cmd, args, { stdio: 'inherit' });
|
|
61
|
-
if (result.status !== 0) {
|
|
62
|
-
throw new Error(`command failed: ${cmd} ${args.join(' ')}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function installFromArchive(archivePath, osName) {
|
|
67
|
-
fs.mkdirSync(VENDOR_DIR, { recursive: true });
|
|
68
|
-
|
|
69
|
-
const binName = osName === 'windows' ? `${PROJECT}.exe` : PROJECT;
|
|
70
|
-
const destBinary = path.join(VENDOR_DIR, binName);
|
|
71
|
-
|
|
72
|
-
if (archivePath.endsWith('.zip')) {
|
|
73
|
-
if (process.platform === 'win32') {
|
|
74
|
-
run('powershell', [
|
|
75
|
-
'-NoProfile',
|
|
76
|
-
'-Command',
|
|
77
|
-
`Expand-Archive -Path \"${archivePath}\" -DestinationPath \"${VENDOR_DIR}\" -Force`,
|
|
78
|
-
]);
|
|
79
|
-
} else {
|
|
80
|
-
run('unzip', ['-o', archivePath, '-d', VENDOR_DIR]);
|
|
32
|
+
wrapper.src(`${base}/${PROJECT}_${osTarget}_${archTarget}.tar.gz`, os, arch);
|
|
81
33
|
}
|
|
82
|
-
} else {
|
|
83
|
-
run('tar', ['-xzf', archivePath, '-C', VENDOR_DIR]);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (!fs.existsSync(destBinary)) {
|
|
87
|
-
throw new Error(`binary not found after extraction: ${destBinary}`);
|
|
88
34
|
}
|
|
89
35
|
|
|
90
|
-
|
|
91
|
-
fs.chmodSync(destBinary, 0o755);
|
|
92
|
-
}
|
|
36
|
+
return wrapper.dest(VENDOR_DIR).use(binName);
|
|
93
37
|
}
|
|
94
38
|
|
|
95
39
|
async function main() {
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const ext = 'tar.gz';
|
|
101
|
-
const asset = `${assetBase}.${ext}`;
|
|
102
|
-
const url = `https://github.com/${OWNER}/${REPO}/releases/download/${tag}/${asset}`;
|
|
103
|
-
|
|
104
|
-
const cacheDir = fs.mkdtempSync(path.join(os.tmpdir(), 'nibble-npm-'));
|
|
105
|
-
const archivePath = path.join(cacheDir, asset);
|
|
106
|
-
|
|
107
|
-
try {
|
|
108
|
-
console.log(`Downloading ${asset} from ${url}`);
|
|
109
|
-
await download(url, archivePath);
|
|
110
|
-
installFromArchive(archivePath, osName);
|
|
111
|
-
console.log('Installed nibble binary successfully');
|
|
112
|
-
} finally {
|
|
113
|
-
if (fs.rmSync) {
|
|
114
|
-
fs.rmSync(cacheDir, { recursive: true, force: true });
|
|
115
|
-
} else {
|
|
116
|
-
fs.rmdirSync(cacheDir, { recursive: true });
|
|
117
|
-
}
|
|
118
|
-
}
|
|
40
|
+
console.log(`Installing ${PROJECT} ${PACKAGE_JSON.version}...`);
|
|
41
|
+
const bin = buildWrapper();
|
|
42
|
+
await bin.run();
|
|
43
|
+
console.log('Installed nibble binary successfully');
|
|
119
44
|
}
|
|
120
45
|
|
|
121
46
|
main().catch((err) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backendsystems/nibble",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Fast local network scanner with hardware identification and a terminal UI",
|
|
5
5
|
"bin": {
|
|
6
6
|
"nibble": "bin/nibble.js"
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"postinstall": "node bin/install.js"
|
|
10
10
|
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"bin-wrapper": "^4.1.0"
|
|
13
|
+
},
|
|
11
14
|
"repository": {
|
|
12
15
|
"type": "git",
|
|
13
16
|
"url": "https://github.com/backendsystems/nibble"
|