@maiyunnet/kebab 9.3.6 → 9.3.8
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/doc/kebab-rag.md +57 -21
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/lib/core.d.ts +6 -0
- package/lib/core.js +39 -0
- package/lib/turnstile.js +2 -2
- package/lib/undici/response.d.ts +1 -1
- package/package.json +8 -8
- package/sys/master.js +51 -2
package/doc/kebab-rag.md
CHANGED
|
@@ -1360,7 +1360,7 @@ index/variables/VER.md
|
|
|
1360
1360
|
|
|
1361
1361
|
# Variable: VER
|
|
1362
1362
|
|
|
1363
|
-
> `const` **VER**: `"9.3.
|
|
1363
|
+
> `const` **VER**: `"9.3.8"` = `'9.3.8'`
|
|
1364
1364
|
|
|
1365
1365
|
Defined in: [index.ts:10](https://github.com/maiyunnet/kebab/blob/master/index.ts#L10)
|
|
1366
1366
|
|
|
@@ -3258,7 +3258,7 @@ lib/core/functions/clone.md
|
|
|
3258
3258
|
|
|
3259
3259
|
> **clone**\<`T`\>(`obj`): `T`
|
|
3260
3260
|
|
|
3261
|
-
Defined in: [lib/core.ts:
|
|
3261
|
+
Defined in: [lib/core.ts:1102](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1102)
|
|
3262
3262
|
|
|
3263
3263
|
完整的克隆一份数组/对象
|
|
3264
3264
|
|
|
@@ -3322,7 +3322,7 @@ lib/core/functions/debug.md
|
|
|
3322
3322
|
|
|
3323
3323
|
> **debug**(`message?`, ...`optionalParams`): `void`
|
|
3324
3324
|
|
|
3325
|
-
Defined in: [lib/core.ts:
|
|
3325
|
+
Defined in: [lib/core.ts:1136](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1136)
|
|
3326
3326
|
|
|
3327
3327
|
打印调试信息,线上环境不会打印
|
|
3328
3328
|
|
|
@@ -3357,7 +3357,7 @@ lib/core/functions/display.md
|
|
|
3357
3357
|
|
|
3358
3358
|
> **display**(`message?`, ...`optionalParams`): `void`
|
|
3359
3359
|
|
|
3360
|
-
Defined in: [lib/core.ts:
|
|
3360
|
+
Defined in: [lib/core.ts:1149](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1149)
|
|
3361
3361
|
|
|
3362
3362
|
向控制台直接显示内容,一般情况下禁止使用
|
|
3363
3363
|
|
|
@@ -3462,7 +3462,7 @@ lib/core/functions/getLog.md
|
|
|
3462
3462
|
|
|
3463
3463
|
> **getLog**(`opt`): `Promise`\<`false` \| `string`[][] \| `null`\>
|
|
3464
3464
|
|
|
3465
|
-
Defined in: [lib/core.ts:
|
|
3465
|
+
Defined in: [lib/core.ts:1009](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1009)
|
|
3466
3466
|
|
|
3467
3467
|
获取日志内容为一个数组
|
|
3468
3468
|
|
|
@@ -3568,7 +3568,7 @@ lib/core/functions/loadEnv.md
|
|
|
3568
3568
|
|
|
3569
3569
|
> **loadEnv**(`dir`): `Promise`\<`void`\>
|
|
3570
3570
|
|
|
3571
|
-
Defined in: [lib/core.ts:
|
|
3571
|
+
Defined in: [lib/core.ts:1201](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1201)
|
|
3572
3572
|
|
|
3573
3573
|
加载 .env 文件到 process.env,若文件不存在则跳过
|
|
3574
3574
|
|
|
@@ -3597,7 +3597,7 @@ lib/core/functions/log.md
|
|
|
3597
3597
|
|
|
3598
3598
|
> **log**(`opt`, `msg`, `fend?`): `void`
|
|
3599
3599
|
|
|
3600
|
-
Defined in: [lib/core.ts:
|
|
3600
|
+
Defined in: [lib/core.ts:903](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L903)
|
|
3601
3601
|
|
|
3602
3602
|
写入文件日志
|
|
3603
3603
|
|
|
@@ -3638,7 +3638,7 @@ lib/core/functions/ls.md
|
|
|
3638
3638
|
|
|
3639
3639
|
> **ls**(`opt`): `Promise`\<`object`[]\>
|
|
3640
3640
|
|
|
3641
|
-
Defined in: [lib/core.ts:
|
|
3641
|
+
Defined in: [lib/core.ts:1063](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1063)
|
|
3642
3642
|
|
|
3643
3643
|
获取目录内文件/文件夹列表
|
|
3644
3644
|
|
|
@@ -3999,7 +3999,7 @@ lib/core/functions/resolveEnvVars.md
|
|
|
3999
3999
|
|
|
4000
4000
|
> **resolveEnvVars**(`obj`): `void`
|
|
4001
4001
|
|
|
4002
|
-
Defined in: [lib/core.ts:
|
|
4002
|
+
Defined in: [lib/core.ts:1231](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1231)
|
|
4003
4003
|
|
|
4004
4004
|
将配置对象中的 ${ENV_VAR} 占位符替换为 process.env 的值
|
|
4005
4005
|
|
|
@@ -4050,6 +4050,41 @@ Defined in: [lib/core.ts:649](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4050
4050
|
|
|
4051
4051
|
`Promise`\<`string`[]\>
|
|
4052
4052
|
|
|
4053
|
+
lib/core/functions/sendPackage.md
|
|
4054
|
+
---
|
|
4055
|
+
|
|
4056
|
+
[**Documents for @maiyunnet/kebab**](../../../index.md)
|
|
4057
|
+
|
|
4058
|
+
***
|
|
4059
|
+
|
|
4060
|
+
[Documents for @maiyunnet/kebab](../../../index.md) / [lib/core](../index.md) / sendPackage
|
|
4061
|
+
|
|
4062
|
+
# Function: sendPackage()
|
|
4063
|
+
|
|
4064
|
+
> **sendPackage**(`content`, `hosts?`): `Promise`\<`string`[]\>
|
|
4065
|
+
|
|
4066
|
+
Defined in: [lib/core.ts:848](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L848)
|
|
4067
|
+
|
|
4068
|
+
向本机或局域网 RPC 发送 package.json 更新操作
|
|
4069
|
+
|
|
4070
|
+
## Parameters
|
|
4071
|
+
|
|
4072
|
+
### content
|
|
4073
|
+
|
|
4074
|
+
`string`
|
|
4075
|
+
|
|
4076
|
+
package.json 文件内容
|
|
4077
|
+
|
|
4078
|
+
### hosts?
|
|
4079
|
+
|
|
4080
|
+
`string`[] \| `"config"`
|
|
4081
|
+
|
|
4082
|
+
局域网列表
|
|
4083
|
+
|
|
4084
|
+
## Returns
|
|
4085
|
+
|
|
4086
|
+
`Promise`\<`string`[]\>
|
|
4087
|
+
|
|
4053
4088
|
lib/core/functions/sendPm2.md
|
|
4054
4089
|
---
|
|
4055
4090
|
|
|
@@ -4406,7 +4441,7 @@ lib/core/functions/writeEventStreamHead.md
|
|
|
4406
4441
|
|
|
4407
4442
|
> **writeEventStreamHead**(`res`): `void`
|
|
4408
4443
|
|
|
4409
|
-
Defined in: [lib/core.ts:
|
|
4444
|
+
Defined in: [lib/core.ts:1171](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1171)
|
|
4410
4445
|
|
|
4411
4446
|
## Parameters
|
|
4412
4447
|
|
|
@@ -4431,7 +4466,7 @@ lib/core/functions/writeHead.md
|
|
|
4431
4466
|
|
|
4432
4467
|
> **writeHead**(`res`, `statusCode`, `headers?`): `void`
|
|
4433
4468
|
|
|
4434
|
-
Defined in: [lib/core.ts:
|
|
4469
|
+
Defined in: [lib/core.ts:1160](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1160)
|
|
4435
4470
|
|
|
4436
4471
|
让 res 发送头部(前提是头部没有被发送才能调用本方法
|
|
4437
4472
|
|
|
@@ -4472,7 +4507,7 @@ lib/core/functions/write.md
|
|
|
4472
4507
|
|
|
4473
4508
|
> **write**(`res`, `data`): `void`
|
|
4474
4509
|
|
|
4475
|
-
Defined in: [lib/core.ts:
|
|
4510
|
+
Defined in: [lib/core.ts:1183](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L1183)
|
|
4476
4511
|
|
|
4477
4512
|
向 res 发送数据
|
|
4478
4513
|
|
|
@@ -4555,6 +4590,7 @@ lib/core/index.md
|
|
|
4555
4590
|
- [removeGlobal](functions/removeGlobal.md)
|
|
4556
4591
|
- [resolveEnvVars](functions/resolveEnvVars.md)
|
|
4557
4592
|
- [sendNpm](functions/sendNpm.md)
|
|
4593
|
+
- [sendPackage](functions/sendPackage.md)
|
|
4558
4594
|
- [sendPm2](functions/sendPm2.md)
|
|
4559
4595
|
- [sendProject](functions/sendProject.md)
|
|
4560
4596
|
- [sendReload](functions/sendReload.md)
|
|
@@ -4642,7 +4678,7 @@ lib/core/interfaces/ILogOptions.md
|
|
|
4642
4678
|
|
|
4643
4679
|
# Interface: ILogOptions
|
|
4644
4680
|
|
|
4645
|
-
Defined in: [lib/core.ts:
|
|
4681
|
+
Defined in: [lib/core.ts:886](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L886)
|
|
4646
4682
|
|
|
4647
4683
|
log 设置的选项
|
|
4648
4684
|
|
|
@@ -4652,7 +4688,7 @@ log 设置的选项
|
|
|
4652
4688
|
|
|
4653
4689
|
> `optional` **cookie?**: `Record`\<`string`, `string`\>
|
|
4654
4690
|
|
|
4655
|
-
Defined in: [lib/core.ts:
|
|
4691
|
+
Defined in: [lib/core.ts:892](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L892)
|
|
4656
4692
|
|
|
4657
4693
|
***
|
|
4658
4694
|
|
|
@@ -4660,7 +4696,7 @@ Defined in: [lib/core.ts:850](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4660
4696
|
|
|
4661
4697
|
> `optional` **get?**: `Record`\<`string`, `any`\>
|
|
4662
4698
|
|
|
4663
|
-
Defined in: [lib/core.ts:
|
|
4699
|
+
Defined in: [lib/core.ts:891](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L891)
|
|
4664
4700
|
|
|
4665
4701
|
***
|
|
4666
4702
|
|
|
@@ -4668,7 +4704,7 @@ Defined in: [lib/core.ts:849](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4668
4704
|
|
|
4669
4705
|
> `optional` **headers?**: `IncomingHttpHeaders`
|
|
4670
4706
|
|
|
4671
|
-
Defined in: [lib/core.ts:
|
|
4707
|
+
Defined in: [lib/core.ts:894](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L894)
|
|
4672
4708
|
|
|
4673
4709
|
***
|
|
4674
4710
|
|
|
@@ -4676,7 +4712,7 @@ Defined in: [lib/core.ts:852](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4676
4712
|
|
|
4677
4713
|
> `optional` **hostname?**: `string`
|
|
4678
4714
|
|
|
4679
|
-
Defined in: [lib/core.ts:
|
|
4715
|
+
Defined in: [lib/core.ts:889](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L889)
|
|
4680
4716
|
|
|
4681
4717
|
***
|
|
4682
4718
|
|
|
@@ -4684,7 +4720,7 @@ Defined in: [lib/core.ts:847](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4684
4720
|
|
|
4685
4721
|
> `optional` **path?**: `string`
|
|
4686
4722
|
|
|
4687
|
-
Defined in: [lib/core.ts:
|
|
4723
|
+
Defined in: [lib/core.ts:887](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L887)
|
|
4688
4724
|
|
|
4689
4725
|
***
|
|
4690
4726
|
|
|
@@ -4692,7 +4728,7 @@ Defined in: [lib/core.ts:845](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4692
4728
|
|
|
4693
4729
|
> `optional` **req?**: `IncomingMessage` \| `Http2ServerRequest` \| `null`
|
|
4694
4730
|
|
|
4695
|
-
Defined in: [lib/core.ts:
|
|
4731
|
+
Defined in: [lib/core.ts:890](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L890)
|
|
4696
4732
|
|
|
4697
4733
|
***
|
|
4698
4734
|
|
|
@@ -4700,7 +4736,7 @@ Defined in: [lib/core.ts:848](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4700
4736
|
|
|
4701
4737
|
> `optional` **session?**: `Record`\<`string`, `any`\>
|
|
4702
4738
|
|
|
4703
|
-
Defined in: [lib/core.ts:
|
|
4739
|
+
Defined in: [lib/core.ts:893](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L893)
|
|
4704
4740
|
|
|
4705
4741
|
***
|
|
4706
4742
|
|
|
@@ -4708,7 +4744,7 @@ Defined in: [lib/core.ts:851](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
4708
4744
|
|
|
4709
4745
|
> `optional` **urlFull?**: `string`
|
|
4710
4746
|
|
|
4711
|
-
Defined in: [lib/core.ts:
|
|
4747
|
+
Defined in: [lib/core.ts:888](https://github.com/maiyunnet/kebab/blob/master/lib/core.ts#L888)
|
|
4712
4748
|
|
|
4713
4749
|
lib/core/type-aliases/TPm2Action.md
|
|
4714
4750
|
---
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* --- 本文件用来定义每个目录实体地址的常量 ---
|
|
7
7
|
*/
|
|
8
8
|
/** --- 当前系统版本号 --- */
|
|
9
|
-
export const VER = '9.3.
|
|
9
|
+
export const VER = '9.3.8';
|
|
10
10
|
// --- 服务端用的路径 ---
|
|
11
11
|
const imu = decodeURIComponent(import.meta.url).replace('file://', '').replace(/^\/(\w:)/, '$1');
|
|
12
12
|
/** --- /xxx/xxx --- */
|
package/lib/core.d.ts
CHANGED
|
@@ -218,6 +218,12 @@ export declare function updateCode(sourcePath: string, path: string, hosts?: str
|
|
|
218
218
|
* @param hosts 局域网列表
|
|
219
219
|
*/
|
|
220
220
|
export declare function sendProject(path: string, key: string, value: string, hosts?: string[] | 'config'): Promise<string[]>;
|
|
221
|
+
/**
|
|
222
|
+
* --- 向本机或局域网 RPC 发送 package.json 更新操作 ---
|
|
223
|
+
* @param content package.json 文件内容
|
|
224
|
+
* @param hosts 局域网列表
|
|
225
|
+
*/
|
|
226
|
+
export declare function sendPackage(content: string, hosts?: string[] | 'config'): Promise<string[]>;
|
|
221
227
|
/** --- log 设置的选项 --- */
|
|
222
228
|
export interface ILogOptions {
|
|
223
229
|
'path'?: string;
|
package/lib/core.js
CHANGED
|
@@ -743,6 +743,45 @@ export async function sendProject(path, key, value, hosts) {
|
|
|
743
743
|
}
|
|
744
744
|
return rtn;
|
|
745
745
|
}
|
|
746
|
+
/**
|
|
747
|
+
* --- 向本机或局域网 RPC 发送 package.json 更新操作 ---
|
|
748
|
+
* @param content package.json 文件内容
|
|
749
|
+
* @param hosts 局域网列表
|
|
750
|
+
*/
|
|
751
|
+
export async function sendPackage(content, hosts) {
|
|
752
|
+
if (hosts === 'config') {
|
|
753
|
+
hosts = globalConfig.hosts;
|
|
754
|
+
}
|
|
755
|
+
// --- 未传或 config 展开后为空数组,均回退到本机 ---
|
|
756
|
+
if (!hosts?.length) {
|
|
757
|
+
hosts = ['127.0.0.1'];
|
|
758
|
+
}
|
|
759
|
+
// --- 局域网模式 ---
|
|
760
|
+
const time = lTime.stamp();
|
|
761
|
+
/** --- 返回成功的 host --- */
|
|
762
|
+
const rtn = [];
|
|
763
|
+
for (const host of hosts) {
|
|
764
|
+
const res = await lUndici.get('http://' + host + ':' + globalConfig.rpcPort.toString() + '/' + lCrypto.aesEncrypt(lText.stringifyJson({
|
|
765
|
+
'action': 'package',
|
|
766
|
+
'time': time,
|
|
767
|
+
'content': content
|
|
768
|
+
}), globalConfig.rpcSecret), {
|
|
769
|
+
'timeout': 2
|
|
770
|
+
});
|
|
771
|
+
const resContent = await res.getContent();
|
|
772
|
+
if (!resContent) {
|
|
773
|
+
continue;
|
|
774
|
+
}
|
|
775
|
+
const str = resContent.toString();
|
|
776
|
+
if (str === 'Done') {
|
|
777
|
+
rtn.push(host);
|
|
778
|
+
}
|
|
779
|
+
else {
|
|
780
|
+
debug('[CORE][sendPackage] rpc server content error:', str);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
return rtn;
|
|
784
|
+
}
|
|
746
785
|
/**
|
|
747
786
|
* --- 写入文件日志 ---
|
|
748
787
|
* @param opt 选项
|
package/lib/turnstile.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Date: 2025-6-11
|
|
4
4
|
* Last: 2025-6-11 21:50:31
|
|
5
5
|
*/
|
|
6
|
-
import * as
|
|
6
|
+
import * as tcc from 'tencentcloud-sdk-nodejs';
|
|
7
7
|
// --- 库和定义 ---
|
|
8
8
|
import * as lUndici from '#kebab/lib/undici.js';
|
|
9
9
|
import * as lText from '#kebab/lib/text.js';
|
|
@@ -40,7 +40,7 @@ export async function verify(ctr, opt) {
|
|
|
40
40
|
}
|
|
41
41
|
case EFACTORY.TENCENT: {
|
|
42
42
|
// --- 腾讯云验证 ---
|
|
43
|
-
const client = new
|
|
43
|
+
const client = new tcc.captcha.v20190722.Client({
|
|
44
44
|
'credential': {
|
|
45
45
|
'secretId': config.turnstile['TENCENT'].sid,
|
|
46
46
|
'secretKey': config.turnstile['TENCENT'].skey,
|
package/lib/undici/response.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export declare class Response {
|
|
|
31
31
|
/**
|
|
32
32
|
* --- 获取响应读取流对象 ---
|
|
33
33
|
*/
|
|
34
|
-
getStream(): (import("undici/types/readable").default & undici.Dispatcher.BodyMixin) |
|
|
34
|
+
getStream(): zlib.BrotliDecompress | zlib.Gunzip | zlib.Inflate | (import("undici/types/readable").default & undici.Dispatcher.BodyMixin) | null;
|
|
35
35
|
/**
|
|
36
36
|
* --- 获取原生响应读取流对象 ---
|
|
37
37
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maiyunnet/kebab",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.8",
|
|
4
4
|
"description": "Simple, easy-to-use, and fully-featured Node.js framework that is ready-to-use out of the box.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"#kebab/*": "./*"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@aws-sdk/client-s3": "^3.
|
|
26
|
-
"@aws-sdk/lib-storage": "^3.
|
|
25
|
+
"@aws-sdk/client-s3": "^3.1047.0",
|
|
26
|
+
"@aws-sdk/lib-storage": "^3.1047.0",
|
|
27
27
|
"@litert/http-client": "^1.1.2",
|
|
28
28
|
"@litert/mime": "^0.1.3",
|
|
29
29
|
"@litert/redis": "^3.2.1",
|
|
@@ -48,17 +48,17 @@
|
|
|
48
48
|
"pg": "^8.20.0",
|
|
49
49
|
"react": "^19.2.6",
|
|
50
50
|
"react-dom": "^19.2.6",
|
|
51
|
-
"react-router-dom": "^7.15.
|
|
51
|
+
"react-router-dom": "^7.15.1",
|
|
52
52
|
"ssh2": "^1.17.0",
|
|
53
53
|
"svg-captcha": "^1.4.0",
|
|
54
|
-
"tailwind-merge": "^3.
|
|
55
|
-
"tencentcloud-sdk-nodejs": "^4.1.
|
|
56
|
-
"undici": "^8.
|
|
54
|
+
"tailwind-merge": "^3.6.0",
|
|
55
|
+
"tencentcloud-sdk-nodejs": "^4.1.232",
|
|
56
|
+
"undici": "^8.3.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@litert/eslint-plugin-rules": "^0.3.1",
|
|
60
60
|
"@types/ejs": "^3.1.5",
|
|
61
|
-
"@types/node": "^25.
|
|
61
|
+
"@types/node": "^25.8.0",
|
|
62
62
|
"@types/pg": "^8.20.0",
|
|
63
63
|
"@types/react": "^19.2.14",
|
|
64
64
|
"@types/react-dom": "^19.2.3",
|
package/sys/master.js
CHANGED
|
@@ -186,10 +186,16 @@ function createRpcListener() {
|
|
|
186
186
|
res.end('Path not found');
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
189
|
-
|
|
189
|
+
let rtn = await lCore.exec('npm i --omit=dev --omit=optional', {
|
|
190
190
|
'cwd': msg.path,
|
|
191
191
|
});
|
|
192
|
-
if (
|
|
192
|
+
if (rtn === false) {
|
|
193
|
+
// --- 部分项目可能存在 peerDependencies 冲突,失败后降级为 legacy-peer-deps 再试一次 ---
|
|
194
|
+
rtn = await lCore.exec('npm i --omit=dev --omit=optional --legacy-peer-deps', {
|
|
195
|
+
'cwd': msg.path,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (rtn === false) {
|
|
193
199
|
res.end('Exec failed');
|
|
194
200
|
return;
|
|
195
201
|
}
|
|
@@ -252,6 +258,24 @@ function createRpcListener() {
|
|
|
252
258
|
}
|
|
253
259
|
break;
|
|
254
260
|
}
|
|
261
|
+
case 'package': {
|
|
262
|
+
// --- 将用户的 package.json 的内容替换掉项目根的 package.json ---
|
|
263
|
+
if (!msg.content || typeof msg.content !== 'string') {
|
|
264
|
+
res.end('Invalid content');
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const packageFile = kebab.ROOT_CWD + 'package.json';
|
|
268
|
+
if (!await lFs.isFile(packageFile)) {
|
|
269
|
+
res.end('package.json not found');
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const wrtn = await lFs.putContent(packageFile, msg.content);
|
|
273
|
+
if (!wrtn) {
|
|
274
|
+
res.end('Failed to write package.json');
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
255
279
|
case 'code': {
|
|
256
280
|
// --- 更新 code 代码包 ---
|
|
257
281
|
const rtn = await sRoute.getFormData(req);
|
|
@@ -323,6 +347,27 @@ function createRpcListener() {
|
|
|
323
347
|
}
|
|
324
348
|
/** --- kebab 子项目中仅允许部署的子文件夹名集合 --- */
|
|
325
349
|
const KEBAB_ALLOWED_DIRS = new Set(['ctr', 'data', 'stc', 'view', 'lib']);
|
|
350
|
+
/** --- 常见开发、依赖、缓存、构建产物目录不参与部署 --- */
|
|
351
|
+
const DEPLOY_EXCLUDE_DIRS = new Set([
|
|
352
|
+
'.git',
|
|
353
|
+
'.svn',
|
|
354
|
+
'.hg',
|
|
355
|
+
'.vscode',
|
|
356
|
+
'.idea',
|
|
357
|
+
'.history',
|
|
358
|
+
'node_modules',
|
|
359
|
+
'bower_components',
|
|
360
|
+
'.cache',
|
|
361
|
+
'.parcel-cache',
|
|
362
|
+
'.turbo',
|
|
363
|
+
'.next',
|
|
364
|
+
'.nuxt',
|
|
365
|
+
'.vite',
|
|
366
|
+
'coverage',
|
|
367
|
+
'.nyc_output',
|
|
368
|
+
'tmp',
|
|
369
|
+
'temp',
|
|
370
|
+
]);
|
|
326
371
|
for (const path in ls) {
|
|
327
372
|
/** --- 带 / 开头的 zip 中文件完整路径,例如 "/www/pika/ctr/api.js" --- */
|
|
328
373
|
const fpath = path.startsWith('/') ? path : '/' + path;
|
|
@@ -332,6 +377,10 @@ function createRpcListener() {
|
|
|
332
377
|
const pat = fpath.slice(1, lio + 1);
|
|
333
378
|
/** --- 纯文件名,例如 "api.js" --- */
|
|
334
379
|
const fname = fpath.slice(lio + 1);
|
|
380
|
+
if (fpath.slice(1).split('/').slice(0, -1).some(seg => DEPLOY_EXCLUDE_DIRS.has(seg))) {
|
|
381
|
+
// --- 开发、依赖、缓存、构建产物目录不覆盖 ---
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
335
384
|
if ((pat === 'conf/' && fname === 'config.json') || fname === 'kebab.json') {
|
|
336
385
|
// --- 特殊文件不能覆盖 ---
|
|
337
386
|
continue;
|