@volcengine/tls-observer-opencode-install 0.0.3 → 0.0.4
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/CHANGELOG.md +6 -0
- package/dist/index.js +110 -28
- package/package.json +5 -3
- package/src/installer/installer-runner.ts +18 -20
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,12 +1,105 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
2
|
import { homedir, tmpdir } from "node:os";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
|
-
import { promisify } from "node:util";
|
|
5
4
|
import promises from "node:readline/promises";
|
|
6
5
|
import { randomInt } from "node:crypto";
|
|
6
|
+
import * as __rspack_external_cross_spawn_96b24ecb from "cross-spawn";
|
|
7
7
|
import * as __rspack_external_node_fs_promises_153e37e0 from "node:fs/promises";
|
|
8
8
|
import * as __rspack_external_node_path_c5b9b54f from "node:path";
|
|
9
|
-
|
|
9
|
+
var __webpack_modules__ = {};
|
|
10
|
+
var __webpack_module_cache__ = {};
|
|
11
|
+
function __webpack_require__(moduleId) {
|
|
12
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
13
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
14
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
15
|
+
exports: {}
|
|
16
|
+
};
|
|
17
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
18
|
+
return module.exports;
|
|
19
|
+
}
|
|
20
|
+
__webpack_require__.m = __webpack_modules__;
|
|
21
|
+
(()=>{
|
|
22
|
+
__webpack_require__.add = function(modules) {
|
|
23
|
+
Object.assign(__webpack_require__.m, modules);
|
|
24
|
+
};
|
|
25
|
+
})();
|
|
26
|
+
__webpack_require__.add({
|
|
27
|
+
"cross-spawn" (module) {
|
|
28
|
+
module.exports = __rspack_external_cross_spawn_96b24ecb;
|
|
29
|
+
},
|
|
30
|
+
"../tls-observer-shared/src/cross-platform-spawn.cjs" (__unused_rspack_module, exports, __webpack_require__) {
|
|
31
|
+
const crossSpawnModule = __webpack_require__("cross-spawn");
|
|
32
|
+
const crossSpawn = crossSpawnModule.default ?? crossSpawnModule;
|
|
33
|
+
const DEFAULT_MAX_BUFFER = 1048576;
|
|
34
|
+
function outputTooLargeError(command, maxBuffer) {
|
|
35
|
+
const error = new Error(`${command} output exceeded ${maxBuffer} bytes`);
|
|
36
|
+
error.code = 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER';
|
|
37
|
+
return error;
|
|
38
|
+
}
|
|
39
|
+
async function runCommand(command, args, options = {}) {
|
|
40
|
+
return new Promise((resolve, reject)=>{
|
|
41
|
+
const child = crossSpawn(command, args, {
|
|
42
|
+
cwd: options.cwd,
|
|
43
|
+
env: options.env,
|
|
44
|
+
stdio: 'inherit' === options.stdio ? 'inherit' : [
|
|
45
|
+
'ignore',
|
|
46
|
+
'pipe',
|
|
47
|
+
'pipe'
|
|
48
|
+
],
|
|
49
|
+
windowsHide: true
|
|
50
|
+
});
|
|
51
|
+
const maxBuffer = options.maxBuffer ?? DEFAULT_MAX_BUFFER;
|
|
52
|
+
let stdout = '';
|
|
53
|
+
let stderr = '';
|
|
54
|
+
let outputBytes = 0;
|
|
55
|
+
let settled = false;
|
|
56
|
+
let timer;
|
|
57
|
+
const finish = (error)=>{
|
|
58
|
+
if (settled) return;
|
|
59
|
+
settled = true;
|
|
60
|
+
if (timer) clearTimeout(timer);
|
|
61
|
+
if (error) {
|
|
62
|
+
error.stdout ??= stdout;
|
|
63
|
+
error.stderr ??= stderr;
|
|
64
|
+
reject(error);
|
|
65
|
+
} else resolve({
|
|
66
|
+
stdout,
|
|
67
|
+
stderr
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const appendOutput = (target, chunk)=>{
|
|
71
|
+
const text = String(chunk);
|
|
72
|
+
outputBytes += Buffer.byteLength(text);
|
|
73
|
+
if (outputBytes > maxBuffer) {
|
|
74
|
+
child.kill();
|
|
75
|
+
finish(outputTooLargeError(command, maxBuffer));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if ('stdout' === target) stdout += text;
|
|
79
|
+
else stderr += text;
|
|
80
|
+
};
|
|
81
|
+
child.stdout?.on('data', (chunk)=>appendOutput('stdout', chunk));
|
|
82
|
+
child.stderr?.on('data', (chunk)=>appendOutput('stderr', chunk));
|
|
83
|
+
child.once('error', finish);
|
|
84
|
+
child.once('close', (code, signal)=>{
|
|
85
|
+
if (0 === code) return void finish();
|
|
86
|
+
const detail = signal ? `signal ${signal}` : `code ${code}`;
|
|
87
|
+
const error = new Error(`${command} exited with ${detail}`);
|
|
88
|
+
error.code = code;
|
|
89
|
+
finish(error);
|
|
90
|
+
});
|
|
91
|
+
if (options.timeoutMs && options.timeoutMs > 0) timer = setTimeout(()=>{
|
|
92
|
+
child.kill();
|
|
93
|
+
const error = new Error(`${command} timed out after ${options.timeoutMs}ms`);
|
|
94
|
+
error.code = 'ETIMEDOUT';
|
|
95
|
+
finish(error);
|
|
96
|
+
}, options.timeoutMs);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
exports.d = runCommand;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
const cross_platform_spawn = __webpack_require__("../tls-observer-shared/src/cross-platform-spawn.cjs");
|
|
10
103
|
const PLUGIN_NAME = 'tls-observer-opencode';
|
|
11
104
|
const PLUGIN_PACKAGE_NAME = '@volcengine/tls-observer-opencode';
|
|
12
105
|
const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
|
|
@@ -480,7 +573,6 @@ function pluginPackageSpec(options) {
|
|
|
480
573
|
async function installPluginPackageToTemp(options) {
|
|
481
574
|
const root = await __rspack_external_node_fs_promises_153e37e0.mkdtemp(__rspack_external_node_path_c5b9b54f.join(tmpdir(), 'tls-observer-opencode-plugin-'));
|
|
482
575
|
const packageSpec = pluginPackageSpec(options);
|
|
483
|
-
const npm = 'win32' === process.platform ? 'npm.cmd' : 'npm';
|
|
484
576
|
const args = [
|
|
485
577
|
'install',
|
|
486
578
|
'--prefix',
|
|
@@ -494,8 +586,8 @@ async function installPluginPackageToTemp(options) {
|
|
|
494
586
|
packageSpec
|
|
495
587
|
];
|
|
496
588
|
try {
|
|
497
|
-
await
|
|
498
|
-
|
|
589
|
+
await (0, cross_platform_spawn.d)('npm', args, {
|
|
590
|
+
timeoutMs: 120000
|
|
499
591
|
});
|
|
500
592
|
} catch (error) {
|
|
501
593
|
const detail = error && 'object' == typeof error && 'stderr' in error ? String(error.stderr || '') : error instanceof Error ? error.message : String(error);
|
|
@@ -553,30 +645,20 @@ async function installPlugin(options) {
|
|
|
553
645
|
for (const entry of runtimeEntries)await __rspack_external_node_fs_promises_153e37e0.cp(__rspack_external_node_path_c5b9b54f.join(source, entry), __rspack_external_node_path_c5b9b54f.join(options.pluginTarget, entry), {
|
|
554
646
|
recursive: true
|
|
555
647
|
});
|
|
556
|
-
const npm = 'win32' === process.platform ? 'npm.cmd' : 'npm';
|
|
557
648
|
console.log('插件依赖安装中,请稍后...');
|
|
558
649
|
try {
|
|
559
|
-
await
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
child.kill();
|
|
572
|
-
reject(new Error("npm install timed out after 120s"));
|
|
573
|
-
}, 120000);
|
|
574
|
-
child.on('exit', (code)=>{
|
|
575
|
-
clearTimeout(timer);
|
|
576
|
-
if (0 === code) resolve();
|
|
577
|
-
else reject(new Error(`npm install exited with code ${code}`));
|
|
578
|
-
});
|
|
579
|
-
child.on('error', reject);
|
|
650
|
+
await (0, cross_platform_spawn.d)('npm', [
|
|
651
|
+
'install',
|
|
652
|
+
'--omit=dev',
|
|
653
|
+
"--ignore-scripts",
|
|
654
|
+
'--no-audit',
|
|
655
|
+
'--no-fund',
|
|
656
|
+
'--registry',
|
|
657
|
+
options.registry
|
|
658
|
+
], {
|
|
659
|
+
cwd: options.pluginTarget,
|
|
660
|
+
stdio: 'inherit',
|
|
661
|
+
timeoutMs: 120000
|
|
580
662
|
});
|
|
581
663
|
} catch (error) {
|
|
582
664
|
const detail = error && 'object' == typeof error && 'stderr' in error ? String(error.stderr || '') : error instanceof Error ? error.message : String(error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volcengine/tls-observer-opencode-install",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "One-step installer for the TLS Observer OpenCode plugin.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,13 +19,15 @@
|
|
|
19
19
|
"node": ">=18"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@volcengine/openapi": "^1.36.1"
|
|
22
|
+
"@volcengine/openapi": "^1.36.1",
|
|
23
|
+
"cross-spawn": "7.0.6"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@rslib/core": "^0.21.5",
|
|
26
27
|
"@types/node": "^24.10.9",
|
|
27
28
|
"prettier": "^3.4.2",
|
|
28
|
-
"typescript": "^6.0.3"
|
|
29
|
+
"typescript": "^6.0.3",
|
|
30
|
+
"@volcengine/tls-observer-shared": "0.0.1"
|
|
29
31
|
},
|
|
30
32
|
"publishConfig": {
|
|
31
33
|
"access": "public"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
4
|
import { homedir, tmpdir } from 'node:os';
|
|
5
5
|
import { pathToFileURL } from 'node:url';
|
|
6
|
-
import { promisify } from 'node:util';
|
|
7
6
|
import readline from 'node:readline/promises';
|
|
8
7
|
import { randomInt } from 'node:crypto';
|
|
8
|
+
import { runCommand } from '@volcengine/tls-observer-shared/cross-platform-spawn';
|
|
9
9
|
|
|
10
10
|
type AnyRecord = Record<string, any>;
|
|
11
11
|
|
|
@@ -68,7 +68,6 @@ type PluginInstallResult = {
|
|
|
68
68
|
version?: string;
|
|
69
69
|
};
|
|
70
70
|
|
|
71
|
-
const execFileAsync = promisify(execFile);
|
|
72
71
|
const PLUGIN_NAME = 'tls-observer-opencode';
|
|
73
72
|
const PLUGIN_PACKAGE_NAME = '@volcengine/tls-observer-opencode';
|
|
74
73
|
const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
|
|
@@ -620,7 +619,6 @@ async function installPluginPackageToTemp(options: InstallOptions): Promise<{
|
|
|
620
619
|
}> {
|
|
621
620
|
const root = await fs.mkdtemp(path.join(tmpdir(), 'tls-observer-opencode-plugin-'));
|
|
622
621
|
const packageSpec = pluginPackageSpec(options);
|
|
623
|
-
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
624
622
|
const args = [
|
|
625
623
|
'install',
|
|
626
624
|
'--prefix',
|
|
@@ -635,7 +633,7 @@ async function installPluginPackageToTemp(options: InstallOptions): Promise<{
|
|
|
635
633
|
];
|
|
636
634
|
|
|
637
635
|
try {
|
|
638
|
-
await
|
|
636
|
+
await runCommand('npm', args, { timeoutMs: 120_000 });
|
|
639
637
|
} catch (error) {
|
|
640
638
|
const detail =
|
|
641
639
|
error && typeof error === 'object' && 'stderr' in error
|
|
@@ -695,25 +693,25 @@ async function installPlugin(options: InstallOptions): Promise<PluginInstallResu
|
|
|
695
693
|
for (const entry of runtimeEntries) {
|
|
696
694
|
await fs.cp(path.join(source, entry), path.join(options.pluginTarget, entry), { recursive: true });
|
|
697
695
|
}
|
|
698
|
-
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
699
696
|
console.log('插件依赖安装中,请稍后...');
|
|
700
697
|
try {
|
|
701
|
-
await
|
|
702
|
-
|
|
698
|
+
await runCommand(
|
|
699
|
+
'npm',
|
|
700
|
+
[
|
|
701
|
+
'install',
|
|
702
|
+
'--omit=dev',
|
|
703
|
+
'--ignore-scripts',
|
|
704
|
+
'--no-audit',
|
|
705
|
+
'--no-fund',
|
|
706
|
+
'--registry',
|
|
707
|
+
options.registry,
|
|
708
|
+
],
|
|
709
|
+
{
|
|
703
710
|
cwd: options.pluginTarget,
|
|
704
711
|
stdio: 'inherit',
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
reject(new Error(`npm install timed out after 120s`));
|
|
709
|
-
}, 120_000);
|
|
710
|
-
child.on('exit', (code) => {
|
|
711
|
-
clearTimeout(timer);
|
|
712
|
-
if (code === 0) resolve();
|
|
713
|
-
else reject(new Error(`npm install exited with code ${code}`));
|
|
714
|
-
});
|
|
715
|
-
child.on('error', reject);
|
|
716
|
-
});
|
|
712
|
+
timeoutMs: 120_000,
|
|
713
|
+
},
|
|
714
|
+
);
|
|
717
715
|
} catch (error) {
|
|
718
716
|
const detail =
|
|
719
717
|
error && typeof error === 'object' && 'stderr' in error
|