Merge branch 'v2' of https://github.com/certd/certd into v2

This commit is contained in:
xiaojunnuo
2025-10-17 09:25:31 +08:00
89 changed files with 2065 additions and 574 deletions

View File

@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.37.2](https://github.com/certd/certd/compare/v1.37.1...v1.37.2) (2025-10-14)
### Performance Improvements
* 支持网络测试 ([2bef608](https://github.com/certd/certd/commit/2bef608e07ceb56d52007f290667e0afef401b22))
## [1.37.1](https://github.com/certd/certd/compare/v1.37.0...v1.37.1) (2025-09-29)
**Note:** Version bump only for package @certd/basic

View File

@@ -1 +1 @@
20:32
22:48

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/basic",
"private": false,
"version": "1.37.1",
"version": "1.37.2",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -13,7 +13,8 @@
"dev-build": "npm run build",
"preview": "vite preview",
"test": "mocha --loader=ts-node/esm",
"pub": "npm publish"
"pub": "npm publish",
"compile": "tsc --skipLibCheck --watch"
},
"dependencies": {
"axios": "^1.7.2",
@@ -45,5 +46,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "c725cee0445dbe1ebd1b6588373bde31697113da"
"gitHead": "e1daaf07ce2fda6ce44998d65f8a989fc6af88db"
}

View File

@@ -1,8 +1,10 @@
//转换为import
import childProcess from 'child_process';
import { safePromise } from './util.promise.js';
import { ILogger, logger } from './util.log.js';
import iconv from 'iconv-lite';
//@ts-ignore
import childProcess from "child_process";
import { safePromise } from "./util.promise.js";
import { ILogger, logger } from "./util.log.js";
//@ts-ignore
import iconv from "iconv-lite";
export type ExecOption = {
cmd: string | string[];
env: any;
@@ -11,12 +13,12 @@ export type ExecOption = {
};
async function exec(opts: ExecOption): Promise<string> {
let cmd = '';
let cmd = "";
const log = opts.logger || logger;
if (opts.cmd instanceof Array) {
for (const item of opts.cmd) {
if (cmd) {
cmd += ' && ' + item;
cmd += " && " + item;
} else {
cmd = item;
}
@@ -28,17 +30,18 @@ async function exec(opts: ExecOption): Promise<string> {
cmd,
{
env: {
//@ts-ignore
...process.env,
...opts.env,
},
...opts.options,
},
(error, stdout, stderr) => {
(error: any, stdout: { toString: (arg0: string) => any }, stderr: any) => {
if (error) {
log.error(`exec error: ${error}`);
reject(error);
} else {
const res = stdout.toString('utf-8');
const res = stdout.toString("utf-8");
log.info(`stdout: ${res}`);
resolve(res);
}
@@ -57,11 +60,12 @@ export type SpawnOption = {
};
function isWindows() {
return process.platform === 'win32';
// @ts-ignore
return process.platform === "win32";
}
function convert(buffer: any) {
if (isWindows()) {
const decoded = iconv.decode(buffer, 'GBK');
const decoded = iconv.decode(buffer, "GBK");
// 检查是否有有效字符
return decoded && decoded.trim().length > 0 ? decoded : buffer.toString();
} else {
@@ -74,12 +78,12 @@ function convert(buffer: any) {
// }
async function spawn(opts: SpawnOption): Promise<string> {
let cmd = '';
let cmd = "";
const log = opts.logger || logger;
if (opts.cmd instanceof Array) {
for (const item of opts.cmd) {
if (cmd) {
cmd += ' && ' + item;
cmd += " && " + item;
} else {
cmd = item;
}
@@ -88,37 +92,47 @@ async function spawn(opts: SpawnOption): Promise<string> {
cmd = opts.cmd;
}
log.info(`执行命令: ${cmd}`);
let stdout = '';
let stderr = '';
let stdout = "";
let stderr = "";
return safePromise((resolve, reject) => {
const ls = childProcess.spawn(cmd, {
shell: true,
env: {
//@ts-ignore
...process.env,
...opts.env,
},
...opts.options,
});
ls.stdout.on('data', data => {
ls.stdout.on("data", (data: string) => {
data = convert(data);
log.info(`stdout: ${data}`);
stdout += data;
});
ls.stderr.on('data', data => {
ls.stderr.on("data", (data: string) => {
data = convert(data);
log.warn(`stderr: ${data}`);
stderr += data;
});
ls.on('error', error => {
ls.on("error", (error: any) => {
log.error(`child process error: ${error}`);
//@ts-ignore
error.stderr = stderr;
//@ts-ignore
error.stdout = stdout;
reject(error);
});
ls.on('close', (code: number) => {
ls.on("close", (code: number) => {
if (code !== 0) {
log.error(`child process exited with code ${code}`);
reject(new Error(stderr));
const e = new Error(stderr || "return " + code);
//@ts-ignore
e.stderr = stderr;
//@ts-ignore
e.stdout = stdout;
reject(e);
} else {
resolve(stdout);
}