@maiyunnet/kebab 9.12.1 → 9.13.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/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.12.1"` = `'9.12.1'`
1363
+ > `const` **VER**: `"9.13.0"` = `'9.13.0'`
1364
1364
 
1365
1365
  Defined in: [index.ts:10](https://github.com/maiyunnet/kebab/blob/master/index.ts#L10)
1366
1366
 
@@ -12555,7 +12555,7 @@ lib/s3/classes/S3.md
12555
12555
 
12556
12556
  # Class: S3
12557
12557
 
12558
- Defined in: [lib/s3.ts:43](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L43)
12558
+ Defined in: [lib/s3.ts:79](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L79)
12559
12559
 
12560
12560
  ## Constructors
12561
12561
 
@@ -12563,7 +12563,7 @@ Defined in: [lib/s3.ts:43](https://github.com/maiyunnet/kebab/blob/master/lib/s3
12563
12563
 
12564
12564
  > **new S3**(`ctr`, `opt`): `S3`
12565
12565
 
12566
- Defined in: [lib/s3.ts:52](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L52)
12566
+ Defined in: [lib/s3.ts:88](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L88)
12567
12567
 
12568
12568
  #### Parameters
12569
12569
 
@@ -12585,7 +12585,7 @@ Defined in: [lib/s3.ts:52](https://github.com/maiyunnet/kebab/blob/master/lib/s3
12585
12585
 
12586
12586
  > **deleteObject**(`key`, `bucket?`): `Promise`\<`boolean`\>
12587
12587
 
12588
- Defined in: [lib/s3.ts:169](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L169)
12588
+ Defined in: [lib/s3.ts:255](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L255)
12589
12589
 
12590
12590
  删除对象
12591
12591
 
@@ -12613,7 +12613,7 @@ bucket 名
12613
12613
 
12614
12614
  > **deleteObjects**(`keys`, `bucket?`): `Promise`\<`boolean`\>
12615
12615
 
12616
- Defined in: [lib/s3.ts:189](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L189)
12616
+ Defined in: [lib/s3.ts:275](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L275)
12617
12617
 
12618
12618
  批量删除对象
12619
12619
 
@@ -12641,7 +12641,7 @@ bucket 名
12641
12641
 
12642
12642
  > **destroy**(): `void`
12643
12643
 
12644
- Defined in: [lib/s3.ts:231](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L231)
12644
+ Defined in: [lib/s3.ts:317](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L317)
12645
12645
 
12646
12646
  销毁连接,释放资源
12647
12647
  一般会自动垃圾回收,但高频接口也可主动调用
@@ -12656,7 +12656,7 @@ Defined in: [lib/s3.ts:231](https://github.com/maiyunnet/kebab/blob/master/lib/s
12656
12656
 
12657
12657
  > **getObject**(`key`, `bucket?`): `Promise`\<`false` \| `Readable` & `SdkStreamMixin` \| `Blob` & `SdkStreamMixin` \| `ReadableStream`\<`any`\> & `SdkStreamMixin` \| `undefined`\>
12658
12658
 
12659
- Defined in: [lib/s3.ts:149](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L149)
12659
+ Defined in: [lib/s3.ts:235](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L235)
12660
12660
 
12661
12661
  获取对象流,可通过流获取 buffer 或 text
12662
12662
 
@@ -12684,7 +12684,7 @@ bucket 名
12684
12684
 
12685
12685
  > **headObject**(`key`, `bucket?`): `Promise`\<`false` \| `HeadObjectCommandOutput`\>
12686
12686
 
12687
- Defined in: [lib/s3.ts:211](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L211)
12687
+ Defined in: [lib/s3.ts:297](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L297)
12688
12688
 
12689
12689
  检测对象是否存在
12690
12690
 
@@ -12712,7 +12712,7 @@ bucket 名
12712
12712
 
12713
12713
  > **putObject**(`key`, `content`, `length?`, `bucket?`): `Promise`\<`false` \| `CompleteMultipartUploadCommandOutput`\>
12714
12714
 
12715
- Defined in: [lib/s3.ts:103](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L103)
12715
+ Defined in: [lib/s3.ts:139](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L139)
12716
12716
 
12717
12717
  上传对象(可传流且也可无需设置 length) --
12718
12718
 
@@ -12776,11 +12776,39 @@ bucket 名
12776
12776
 
12777
12777
  ***
12778
12778
 
12779
+ ### putObjects()
12780
+
12781
+ > **putObjects**(`items`, `options?`): `Promise`\<[`IPutObjectsItemResult`](../interfaces/IPutObjectsItemResult.md)[]\>
12782
+
12783
+ Defined in: [lib/s3.ts:184](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L184)
12784
+
12785
+ 批量上传对象,并发控制,单次失败不影响其他项
12786
+
12787
+ #### Parameters
12788
+
12789
+ ##### items
12790
+
12791
+ [`IPutObjectItem`](../interfaces/IPutObjectItem.md)[]
12792
+
12793
+ 上传项列表
12794
+
12795
+ ##### options?
12796
+
12797
+ [`IPutObjectsOptions`](../interfaces/IPutObjectsOptions.md)
12798
+
12799
+ 批量上传选项
12800
+
12801
+ #### Returns
12802
+
12803
+ `Promise`\<[`IPutObjectsItemResult`](../interfaces/IPutObjectsItemResult.md)[]\>
12804
+
12805
+ ***
12806
+
12779
12807
  ### setBucket()
12780
12808
 
12781
12809
  > **setBucket**(`bucket`): `void`
12782
12810
 
12783
- Defined in: [lib/s3.ts:92](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L92)
12811
+ Defined in: [lib/s3.ts:128](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L128)
12784
12812
 
12785
12813
  修改预定义 bucket
12786
12814
 
@@ -12856,7 +12884,7 @@ lib/s3/functions/get.md
12856
12884
 
12857
12885
  > **get**(`ctr`, `opt`): [`S3`](../classes/S3.md)
12858
12886
 
12859
- Defined in: [lib/s3.ts:241](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L241)
12887
+ Defined in: [lib/s3.ts:327](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L327)
12860
12888
 
12861
12889
  创建一个对象存储对象
12862
12890
 
@@ -12898,6 +12926,9 @@ lib/s3/index.md
12898
12926
  ## Interfaces
12899
12927
 
12900
12928
  - [IOptions](interfaces/IOptions.md)
12929
+ - [IPutObjectItem](interfaces/IPutObjectItem.md)
12930
+ - [IPutObjectsItemResult](interfaces/IPutObjectsItemResult.md)
12931
+ - [IPutObjectsOptions](interfaces/IPutObjectsOptions.md)
12901
12932
 
12902
12933
  ## Functions
12903
12934
 
@@ -12978,6 +13009,171 @@ Defined in: [lib/s3.ts:30](https://github.com/maiyunnet/kebab/blob/master/lib/s3
12978
13009
 
12979
13010
  服务商 -
12980
13011
 
13012
+ lib/s3/interfaces/IPutObjectItem.md
13013
+ ---
13014
+
13015
+ [**Documents for @maiyunnet/kebab**](../../../index.md)
13016
+
13017
+ ***
13018
+
13019
+ [Documents for @maiyunnet/kebab](../../../index.md) / [lib/s3](../index.md) / IPutObjectItem
13020
+
13021
+ # Interface: IPutObjectItem
13022
+
13023
+ Defined in: [lib/s3.ts:44](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L44)
13024
+
13025
+ 批量上传单项
13026
+
13027
+ ## Properties
13028
+
13029
+ ### bucket?
13030
+
13031
+ > `optional` **bucket?**: `string`
13032
+
13033
+ Defined in: [lib/s3.ts:56](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L56)
13034
+
13035
+ bucket 名,优先级高于 options.bucket
13036
+
13037
+ ***
13038
+
13039
+ ### content
13040
+
13041
+ > **content**: `string` \| `Buffer`\<`ArrayBufferLike`\> \| `Readable`
13042
+
13043
+ Defined in: [lib/s3.ts:48](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L48)
13044
+
13045
+ 内容
13046
+
13047
+ ***
13048
+
13049
+ ### disposition?
13050
+
13051
+ > `optional` **disposition?**: `string`
13052
+
13053
+ Defined in: [lib/s3.ts:54](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L54)
13054
+
13055
+ content-disposition
13056
+
13057
+ ***
13058
+
13059
+ ### key
13060
+
13061
+ > **key**: `string`
13062
+
13063
+ Defined in: [lib/s3.ts:46](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L46)
13064
+
13065
+ 对象路径
13066
+
13067
+ ***
13068
+
13069
+ ### length?
13070
+
13071
+ > `optional` **length?**: `number`
13072
+
13073
+ Defined in: [lib/s3.ts:50](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L50)
13074
+
13075
+ contentLength,流模式需要设置
13076
+
13077
+ ***
13078
+
13079
+ ### type?
13080
+
13081
+ > `optional` **type?**: `string`
13082
+
13083
+ Defined in: [lib/s3.ts:52](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L52)
13084
+
13085
+ content-type,如 application/javascript
13086
+
13087
+ lib/s3/interfaces/IPutObjectsItemResult.md
13088
+ ---
13089
+
13090
+ [**Documents for @maiyunnet/kebab**](../../../index.md)
13091
+
13092
+ ***
13093
+
13094
+ [Documents for @maiyunnet/kebab](../../../index.md) / [lib/s3](../index.md) / IPutObjectsItemResult
13095
+
13096
+ # Interface: IPutObjectsItemResult
13097
+
13098
+ Defined in: [lib/s3.ts:68](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L68)
13099
+
13100
+ 批量上传单项结果
13101
+
13102
+ ## Properties
13103
+
13104
+ ### error?
13105
+
13106
+ > `optional` **error?**: `string`
13107
+
13108
+ Defined in: [lib/s3.ts:76](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L76)
13109
+
13110
+ 错误信息,失败时返回
13111
+
13112
+ ***
13113
+
13114
+ ### key
13115
+
13116
+ > **key**: `string`
13117
+
13118
+ Defined in: [lib/s3.ts:70](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L70)
13119
+
13120
+ 对象路径
13121
+
13122
+ ***
13123
+
13124
+ ### location?
13125
+
13126
+ > `optional` **location?**: `string`
13127
+
13128
+ Defined in: [lib/s3.ts:74](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L74)
13129
+
13130
+ 对象访问地址,成功时返回
13131
+
13132
+ ***
13133
+
13134
+ ### success
13135
+
13136
+ > **success**: `boolean`
13137
+
13138
+ Defined in: [lib/s3.ts:72](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L72)
13139
+
13140
+ 是否成功
13141
+
13142
+ lib/s3/interfaces/IPutObjectsOptions.md
13143
+ ---
13144
+
13145
+ [**Documents for @maiyunnet/kebab**](../../../index.md)
13146
+
13147
+ ***
13148
+
13149
+ [Documents for @maiyunnet/kebab](../../../index.md) / [lib/s3](../index.md) / IPutObjectsOptions
13150
+
13151
+ # Interface: IPutObjectsOptions
13152
+
13153
+ Defined in: [lib/s3.ts:60](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L60)
13154
+
13155
+ 批量上传选项
13156
+
13157
+ ## Properties
13158
+
13159
+ ### bucket?
13160
+
13161
+ > `optional` **bucket?**: `string`
13162
+
13163
+ Defined in: [lib/s3.ts:64](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L64)
13164
+
13165
+ bucket 名
13166
+
13167
+ ***
13168
+
13169
+ ### concurrency?
13170
+
13171
+ > `optional` **concurrency?**: `number`
13172
+
13173
+ Defined in: [lib/s3.ts:62](https://github.com/maiyunnet/kebab/blob/master/lib/s3.ts#L62)
13174
+
13175
+ 并发数,默认 5
13176
+
12981
13177
  lib/scan/classes/Scan.md
12982
13178
  ---
12983
13179
 
@@ -13741,7 +13937,7 @@ Defined in: [lib/sql.ts:69](https://github.com/maiyunnet/kebab/blob/master/lib/s
13741
13937
 
13742
13938
  > **append**(`sql`): `this`
13743
13939
 
13744
- Defined in: [lib/sql.ts:1005](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1005)
13940
+ Defined in: [lib/sql.ts:1006](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1006)
13745
13941
 
13746
13942
  在 sql 最后追加字符串
13747
13943
 
@@ -13761,7 +13957,7 @@ Defined in: [lib/sql.ts:1005](https://github.com/maiyunnet/kebab/blob/master/lib
13761
13957
 
13762
13958
  > **by**(`c`, `d?`): `this`
13763
13959
 
13764
- Defined in: [lib/sql.ts:761](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L761)
13960
+ Defined in: [lib/sql.ts:762](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L762)
13765
13961
 
13766
13962
  ORDER BY
13767
13963
 
@@ -13789,7 +13985,7 @@ ORDER BY
13789
13985
 
13790
13986
  > **copy**(`f?`, `opt?`): `Sql`
13791
13987
 
13792
- Defined in: [lib/sql.ts:829](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L829)
13988
+ Defined in: [lib/sql.ts:830](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L830)
13793
13989
 
13794
13990
  创建一个本对象的一个新的 sql 对象拷贝
13795
13991
 
@@ -13817,7 +14013,7 @@ Defined in: [lib/sql.ts:829](https://github.com/maiyunnet/kebab/blob/master/lib/
13817
14013
 
13818
14014
  > **crossJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
13819
14015
 
13820
- Defined in: [lib/sql.ts:490](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L490)
14016
+ Defined in: [lib/sql.ts:491](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L491)
13821
14017
 
13822
14018
  cross join 方法
13823
14019
 
@@ -13857,7 +14053,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅在 join 非默认前
13857
14053
 
13858
14054
  > **delete**(`f`): `this`
13859
14055
 
13860
- Defined in: [lib/sql.ts:378](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L378)
14056
+ Defined in: [lib/sql.ts:379](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L379)
13861
14057
 
13862
14058
  'xx'
13863
14059
 
@@ -13879,7 +14075,7 @@ Defined in: [lib/sql.ts:378](https://github.com/maiyunnet/kebab/blob/master/lib/
13879
14075
 
13880
14076
  > **field**(`str`, `pre?`, `suf?`): `string`
13881
14077
 
13882
- Defined in: [lib/sql.ts:1016](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1016)
14078
+ Defined in: [lib/sql.ts:1017](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1017)
13883
14079
 
13884
14080
  对字段进行包裹
13885
14081
 
@@ -13911,7 +14107,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅请在 field 表名时
13911
14107
 
13912
14108
  > **format**(`sql?`, `data?`): `string`
13913
14109
 
13914
- Defined in: [lib/sql.ts:995](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L995)
14110
+ Defined in: [lib/sql.ts:996](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L996)
13915
14111
 
13916
14112
  获取带 data 的 sql 语句
13917
14113
 
@@ -13935,7 +14131,7 @@ Defined in: [lib/sql.ts:995](https://github.com/maiyunnet/kebab/blob/master/lib/
13935
14131
 
13936
14132
  > **fullJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
13937
14133
 
13938
- Defined in: [lib/sql.ts:479](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L479)
14134
+ Defined in: [lib/sql.ts:480](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L480)
13939
14135
 
13940
14136
  full join 方法
13941
14137
 
@@ -13975,7 +14171,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅在 join 非默认前
13975
14171
 
13976
14172
  > **getData**(): [`DbValue`](../../../index/type-aliases/DbValue.md)[]
13977
14173
 
13978
- Defined in: [lib/sql.ts:979](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L979)
14174
+ Defined in: [lib/sql.ts:980](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L980)
13979
14175
 
13980
14176
  获取全部 data
13981
14177
 
@@ -13989,7 +14185,7 @@ Defined in: [lib/sql.ts:979](https://github.com/maiyunnet/kebab/blob/master/lib/
13989
14185
 
13990
14186
  > **getPre**(): `string`
13991
14187
 
13992
- Defined in: [lib/sql.ts:986](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L986)
14188
+ Defined in: [lib/sql.ts:987](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L987)
13993
14189
 
13994
14190
  获取定义的 pre
13995
14191
 
@@ -14003,7 +14199,7 @@ Defined in: [lib/sql.ts:986](https://github.com/maiyunnet/kebab/blob/master/lib/
14003
14199
 
14004
14200
  > **getSql**(): `string`
14005
14201
 
14006
- Defined in: [lib/sql.ts:963](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L963)
14202
+ Defined in: [lib/sql.ts:964](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L964)
14007
14203
 
14008
14204
  获取 sql 语句
14009
14205
 
@@ -14017,7 +14213,7 @@ Defined in: [lib/sql.ts:963](https://github.com/maiyunnet/kebab/blob/master/lib/
14017
14213
 
14018
14214
  > **group**(`c`): `this`
14019
14215
 
14020
- Defined in: [lib/sql.ts:785](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L785)
14216
+ Defined in: [lib/sql.ts:786](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L786)
14021
14217
 
14022
14218
  GROUP BY
14023
14219
 
@@ -14039,7 +14235,7 @@ GROUP BY
14039
14235
 
14040
14236
  > **having**(`s?`): `this`
14041
14237
 
14042
- Defined in: [lib/sql.ts:497](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L497)
14238
+ Defined in: [lib/sql.ts:498](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L498)
14043
14239
 
14044
14240
  having 后置筛选器,用法类似 where
14045
14241
 
@@ -14059,7 +14255,7 @@ having 后置筛选器,用法类似 where
14059
14255
 
14060
14256
  > **innerJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
14061
14257
 
14062
- Defined in: [lib/sql.ts:468](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L468)
14258
+ Defined in: [lib/sql.ts:469](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L469)
14063
14259
 
14064
14260
  inner join 方法
14065
14261
 
@@ -14127,7 +14323,7 @@ Defined in: [lib/sql.ts:99](https://github.com/maiyunnet/kebab/blob/master/lib/s
14127
14323
 
14128
14324
  > **join**(`f`, `s?`, `type?`, `suf?`, `pre?`): `this`
14129
14325
 
14130
- Defined in: [lib/sql.ts:420](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L420)
14326
+ Defined in: [lib/sql.ts:421](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L421)
14131
14327
 
14132
14328
  join 方法
14133
14329
 
@@ -14173,7 +14369,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅在 join 非默认前
14173
14369
 
14174
14370
  > **leftJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
14175
14371
 
14176
- Defined in: [lib/sql.ts:446](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L446)
14372
+ Defined in: [lib/sql.ts:447](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L447)
14177
14373
 
14178
14374
  left join 方法
14179
14375
 
@@ -14213,7 +14409,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅在 join 非默认前
14213
14409
 
14214
14410
  > **limit**(`a`, `b?`): `this`
14215
14411
 
14216
- Defined in: [lib/sql.ts:805](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L805)
14412
+ Defined in: [lib/sql.ts:806](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L806)
14217
14413
 
14218
14414
  LIMIT(limit、offset, limit)
14219
14415
 
@@ -14241,7 +14437,7 @@ LIMIT(limit、offset, limit)
14241
14437
 
14242
14438
  > **lock**(): `this`
14243
14439
 
14244
- Defined in: [lib/sql.ts:820](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L820)
14440
+ Defined in: [lib/sql.ts:821](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L821)
14245
14441
 
14246
14442
  追加消极锁,通常不建议使用
14247
14443
 
@@ -14255,7 +14451,7 @@ Defined in: [lib/sql.ts:820](https://github.com/maiyunnet/kebab/blob/master/lib/
14255
14451
 
14256
14452
  > **rightJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
14257
14453
 
14258
- Defined in: [lib/sql.ts:457](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L457)
14454
+ Defined in: [lib/sql.ts:458](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L458)
14259
14455
 
14260
14456
  right join 方法
14261
14457
 
@@ -14295,7 +14491,7 @@ MySQL 时为表前缀,PostgreSQL 时为 Schema 名,仅在 join 非默认前
14295
14491
 
14296
14492
  > **select**(`c`, `f`): `this`
14297
14493
 
14298
- Defined in: [lib/sql.ts:269](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L269)
14494
+ Defined in: [lib/sql.ts:270](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L270)
14299
14495
 
14300
14496
  '*', 'xx'
14301
14497
 
@@ -14323,7 +14519,7 @@ Defined in: [lib/sql.ts:269](https://github.com/maiyunnet/kebab/blob/master/lib/
14323
14519
 
14324
14520
  > **union**(`lsql`, `type?`): `this`
14325
14521
 
14326
- Defined in: [lib/sql.ts:390](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L390)
14522
+ Defined in: [lib/sql.ts:391](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L391)
14327
14523
 
14328
14524
  联查另一个 sql 对象
14329
14525
 
@@ -14351,7 +14547,7 @@ sql 对象
14351
14547
 
14352
14548
  > **unionAll**(`lsql`): `this`
14353
14549
 
14354
- Defined in: [lib/sql.ts:408](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L408)
14550
+ Defined in: [lib/sql.ts:409](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L409)
14355
14551
 
14356
14552
  所有联查另一个 sql 对象
14357
14553
 
@@ -14373,7 +14569,7 @@ sql 对象
14373
14569
 
14374
14570
  > **update**(`f`, `s`): `this`
14375
14571
 
14376
- Defined in: [lib/sql.ts:310](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L310)
14572
+ Defined in: [lib/sql.ts:311](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L311)
14377
14573
 
14378
14574
  UPDATE SQL 方法
14379
14575
 
@@ -14500,7 +14696,7 @@ Defined in: [lib/sql.ts:118](https://github.com/maiyunnet/kebab/blob/master/lib/
14500
14696
 
14501
14697
  > **where**(`s`): `this`
14502
14698
 
14503
- Defined in: [lib/sql.ts:531](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L531)
14699
+ Defined in: [lib/sql.ts:532](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L532)
14504
14700
 
14505
14701
  筛选器
14506
14702
  1. 'city': 'bj', 'type': '2'
@@ -14643,7 +14839,7 @@ lib/sql/functions/aoMix.md
14643
14839
 
14644
14840
  > **aoMix**(`arr`): `Record`\<`string`, `string` \| `number` \| [`Json`](../../../index/type-aliases/Json.md)\>
14645
14841
 
14646
- Defined in: [lib/sql.ts:1401](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1401)
14842
+ Defined in: [lib/sql.ts:1402](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1402)
14647
14843
 
14648
14844
  将数组兑换为组合的对象(Array/Object mix)
14649
14845
 
@@ -14672,7 +14868,7 @@ lib/sql/functions/column.md
14672
14868
 
14673
14869
  > **column**(`field`): `object`
14674
14870
 
14675
- Defined in: [lib/sql.ts:1422](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1422)
14871
+ Defined in: [lib/sql.ts:1423](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1423)
14676
14872
 
14677
14873
  创建字段对象
14678
14874
 
@@ -14711,7 +14907,7 @@ lib/sql/functions/format.md
14711
14907
 
14712
14908
  > **format**(`sql`, `data`, `service?`): `string`
14713
14909
 
14714
- Defined in: [lib/sql.ts:1363](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1363)
14910
+ Defined in: [lib/sql.ts:1364](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1364)
14715
14911
 
14716
14912
  返回代入后的完整 SQL 字符串,这并不安全不能直接执行,只是用来调试打印 sql 语句
14717
14913
 
@@ -14752,7 +14948,7 @@ lib/sql/functions/get.md
14752
14948
 
14753
14949
  > **get**(`opt`): [`Sql`](../classes/Sql.md)
14754
14950
 
14755
- Defined in: [lib/sql.ts:1335](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1335)
14951
+ Defined in: [lib/sql.ts:1336](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1336)
14756
14952
 
14757
14953
  创建 sql 对象
14758
14954
 
@@ -14805,7 +15001,7 @@ lib/sql/functions/json.md
14805
15001
 
14806
15002
  > **json**(`obj`): `any`
14807
15003
 
14808
- Defined in: [lib/sql.ts:1460](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1460)
15004
+ Defined in: [lib/sql.ts:1461](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1461)
14809
15005
 
14810
15006
  将对象转换为 JSON 字符串并避开类型检查,用于适配 PostgreSQL 的 jsonb 字段
14811
15007
 
@@ -14834,7 +15030,7 @@ lib/sql/functions/value.md
14834
15030
 
14835
15031
  > **value**(`val`): `object`
14836
15032
 
14837
- Defined in: [lib/sql.ts:1441](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1441)
15033
+ Defined in: [lib/sql.ts:1442](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1442)
14838
15034
 
14839
15035
  创建字面量值对象,用于 where 条件中 v[0] 需要是值而非字段名的场景
14840
15036
  例:[value('hello'), 'IN', column('tags')]
package/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * --- 本文件用来定义每个目录实体地址的常量 ---
6
6
  */
7
7
  /** --- 当前系统版本号 --- */
8
- export declare const VER = "9.12.1";
8
+ export declare const VER = "9.13.0";
9
9
  /** --- 框架根目录,以 / 结尾 --- */
10
10
  export declare const ROOT_PATH: string;
11
11
  /** --- 框架的 LIB,以 / 结尾 --- */
package/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * --- 本文件用来定义每个目录实体地址的常量 ---
7
7
  */
8
8
  /** --- 当前系统版本号 --- */
9
- export const VER = '9.12.1';
9
+ export const VER = '9.13.0';
10
10
  // --- 服务端用的路径 ---
11
11
  const imu = decodeURIComponent(import.meta.url).replace('file://', '').replace(/^\/(\w:)/, '$1');
12
12
  /** --- /xxx/xxx --- */
package/lib/net.js CHANGED
@@ -445,8 +445,8 @@ export function getFormData() {
445
445
  }
446
446
  /** --- proxy 要剔除的基础头部 --- */
447
447
  const proxyContinueHeaders = [
448
- 'host', 'connection', 'http-version', 'http-code', 'http-url',
449
- 'transfer-encoding'
448
+ 'host', 'connection', 'keep-alive', 'http-version', 'http-code', 'http-url',
449
+ 'transfer-encoding', 'upgrade', 'proxy-connection'
450
450
  ];
451
451
  /**
452
452
  * --- 剔除不代理的 header,返回新的 header ---
package/lib/s3.d.ts CHANGED
@@ -31,6 +31,39 @@ export interface IOptions {
31
31
  /** --- 预定义 bucket --- */
32
32
  'bucket'?: string;
33
33
  }
34
+ /** --- 批量上传单项 --- */
35
+ export interface IPutObjectItem {
36
+ /** --- 对象路径 --- */
37
+ 'key': string;
38
+ /** --- 内容 --- */
39
+ 'content': string | Buffer | stream.Readable;
40
+ /** --- contentLength,流模式需要设置 --- */
41
+ 'length'?: number;
42
+ /** --- content-type,如 application/javascript --- */
43
+ 'type'?: string;
44
+ /** --- content-disposition --- */
45
+ 'disposition'?: string;
46
+ /** --- bucket 名,优先级高于 options.bucket --- */
47
+ 'bucket'?: string;
48
+ }
49
+ /** --- 批量上传选项 --- */
50
+ export interface IPutObjectsOptions {
51
+ /** --- 并发数,默认 5 --- */
52
+ 'concurrency'?: number;
53
+ /** --- bucket 名 --- */
54
+ 'bucket'?: string;
55
+ }
56
+ /** --- 批量上传单项结果 --- */
57
+ export interface IPutObjectsItemResult {
58
+ /** --- 对象路径 --- */
59
+ 'key': string;
60
+ /** --- 是否成功 --- */
61
+ 'success': boolean;
62
+ /** --- 对象访问地址,成功时返回 --- */
63
+ 'location'?: string;
64
+ /** --- 错误信息,失败时返回 --- */
65
+ 'error'?: string;
66
+ }
34
67
  export declare class S3 {
35
68
  private readonly _link;
36
69
  /** --- bucket 名 --- */
@@ -56,6 +89,12 @@ export declare class S3 {
56
89
  'disposition'?: string;
57
90
  'bucket'?: string;
58
91
  }, bucket?: string): Promise<s3.CompleteMultipartUploadCommandOutput | false>;
92
+ /**
93
+ * --- 批量上传对象,并发控制,单次失败不影响其他项 ---
94
+ * @param items 上传项列表
95
+ * @param options 批量上传选项
96
+ */
97
+ putObjects(items: IPutObjectItem[], options?: IPutObjectsOptions): Promise<IPutObjectsItemResult[]>;
59
98
  /**
60
99
  * --- 获取对象流,可通过流获取 buffer 或 text ---
61
100
  * @param key 对象路径
package/lib/s3.js CHANGED
@@ -104,12 +104,51 @@ export class S3 {
104
104
  return false;
105
105
  }
106
106
  }
107
+ /**
108
+ * --- 批量上传对象,并发控制,单次失败不影响其他项 ---
109
+ * @param items 上传项列表
110
+ * @param options 批量上传选项
111
+ */
112
+ async putObjects(items, options) {
113
+ const concurrency = options?.concurrency ?? 5;
114
+ const sharedBucket = options?.bucket;
115
+ const results = new Array(items.length);
116
+ let cursor = 0;
117
+ const worker = async () => {
118
+ while (cursor < items.length) {
119
+ const i = cursor++;
120
+ const item = items[i];
121
+ const bucket = item.bucket ?? sharedBucket;
122
+ const res = await this.putObject(item.key, item.content, {
123
+ 'length': item.length,
124
+ 'type': item.type,
125
+ 'disposition': item.disposition,
126
+ }, bucket);
127
+ if (res) {
128
+ results[i] = {
129
+ 'key': item.key,
130
+ 'success': true,
131
+ 'location': res.Location,
132
+ };
133
+ }
134
+ else {
135
+ results[i] = {
136
+ 'key': item.key,
137
+ 'success': false,
138
+ 'error': 'upload failed',
139
+ };
140
+ }
141
+ }
142
+ };
143
+ const workers = Array.from({ 'length': Math.min(concurrency, items.length) }, () => worker());
144
+ await Promise.all(workers);
145
+ return results;
146
+ }
107
147
  /**
108
148
  * --- 获取对象流,可通过流获取 buffer 或 text ---
109
149
  * @param key 对象路径
110
150
  * @param bucket bucket 名
111
151
  */
112
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
113
152
  async getObject(key, bucket) {
114
153
  try {
115
154
  const go = new s3.GetObjectCommand({
package/lib/sql.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Project: Kebab, User: JianSuoQiYue
3
3
  * Date: 2019-5-27 20:18:50
4
- * Last: 2020-3-29 19:37:25, 2022-07-24 22:38:11, 2023-5-24 18:49:18, 2023-6-13 22:20:21, 2023-12-11 13:58:54, 2023-12-14 13:14:40, 2023-12-21 00:04:40, 2024-4-11 19:29:29, 2024-9-2 17:15:28, 2025-8-3 21:28:18, 2025-11-9 16:20:23, 2026-4-30 13:49:44
4
+ * Last: 2020-3-29 19:37:25, 2022-07-24 22:38:11, 2023-5-24 18:49:18, 2023-6-13 22:20:21, 2023-12-11 13:58:54, 2023-12-14 13:14:40, 2023-12-21 00:04:40, 2024-4-11 19:29:29, 2024-9-2 17:15:28, 2025-8-3 21:28:18, 2025-11-9 16:20:23, 2026-4-30 13:49:44, 2026-6-1 11:30:00
5
5
  */
6
6
  import * as kebab from '#kebab/index.js';
7
7
  import * as ctr from '#kebab/sys/ctr.js';
package/lib/sql.js CHANGED
@@ -183,25 +183,26 @@ export class Sql {
183
183
  const quotedTable = this.field(table, this._pre);
184
184
  const quotedKey = this.field(key);
185
185
  if (this._service === ESERVICE.MYSQL) {
186
- // --- MySQL 8.0.19+ VALUES ROW() 派生表语法 ---
186
+ // --- MySQL UNION ALL SELECT 派生表语法 ---
187
187
  // --- 必须把 tmp 放在 UPDATE 的 table_references 最前面,并使用 STRAIGHT_JOIN:
188
188
  // 1. tmp 是小数据集,作为驱动表逐行查找目标表
189
189
  // 2. STRAIGHT_JOIN 强制目标表按 key 条件被查找,避免优化器反向全表扫描
190
- // 3. 相比 CASE WHENkey 只出现一次,SQL 和参数量都更小 ---
191
- const valueParts = [];
192
- for (const row of rows) {
193
- const parts = row.map(v => {
190
+ // 3. 相比 VALUES ROW()UNION ALL SELECT 不会将派生表列强制转换为目标表类型,
191
+ // 避免 "Data too long for column" 错误 ---
192
+ const selectParts = [];
193
+ for (let ri = 0; ri < rows.length; ri++) {
194
+ const row = rows[ri];
195
+ const parts = row.map((v, ci) => {
194
196
  const result = this._processValue(v);
195
197
  if (result.data.length > 0) {
196
198
  this._data.push(...result.data);
197
199
  }
198
- return result.sql;
200
+ return ri === 0 ? `${result.sql} AS ${this.field(allCols[ci])}` : result.sql;
199
201
  });
200
- valueParts.push(`ROW(${parts.join(', ')})`);
202
+ selectParts.push(`SELECT ${parts.join(', ')}`);
201
203
  }
202
- const tmpCols = allCols.map(c => this.field(c)).join(', ');
203
204
  const setClauses = cols.map(c => `t.${this.field(c)} = tmp.${this.field(c)}`).join(', ');
204
- this._sql = [`UPDATE (VALUES ${valueParts.join(', ')}) AS tmp(${tmpCols}) STRAIGHT_JOIN ${quotedTable} t ON t.${quotedKey} = tmp.${quotedKey} SET ${setClauses}`];
205
+ this._sql = [`UPDATE (${selectParts.join(' UNION ALL ')}) AS tmp STRAIGHT_JOIN ${quotedTable} t ON t.${quotedKey} = tmp.${quotedKey} SET ${setClauses}`];
205
206
  }
206
207
  else {
207
208
  // --- PostgreSQL 使用 UPDATE FROM (VALUES ...) ---
package/lib/undici.js CHANGED
@@ -333,7 +333,7 @@ export async function request(u, data, opt = {}) {
333
333
  headers['content-length'] = data.getLength();
334
334
  }
335
335
  }
336
- headers['accept-encoding'] = 'gzip, deflate';
336
+ headers['accept-encoding'] ??= 'gzip, deflate';
337
337
  // --- cookie 托管 ---
338
338
  if (opt.cookie) {
339
339
  headers['cookie'] = lCookie.buildCookieQuery(opt.cookie, uri);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maiyunnet/kebab",
3
- "version": "9.12.1",
3
+ "version": "9.13.0",
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": [
package/sys/child.js CHANGED
@@ -188,7 +188,7 @@ async function requestHandler(req, res, https) {
188
188
  'timer': {},
189
189
  'timeout': 30_000,
190
190
  'callback': () => {
191
- if (!req.socket.writable) {
191
+ if (!req.socket?.writable) {
192
192
  // --- 用户连接已中断 ---
193
193
  return;
194
194
  }
package/sys/mod.js CHANGED
@@ -1184,7 +1184,7 @@ export default class Mod {
1184
1184
  sql = sql
1185
1185
  .replace(/ LIMIT [0-9 ,]+(OFFSET [0-9]+)?/ig, '')
1186
1186
  .replace(/ ORDER BY [\w`",. ]+(DESC|ASC)?/ig, '');
1187
- if (sql.includes(' GROUP BY ')) {
1187
+ if (sql.includes(' GROUP BY ') || /\bUNION\b/i.test(sql)) {
1188
1188
  return `SELECT COUNT(0) AS ${q}count${q} FROM(` + sql + `) AS ${q}f${q}`;
1189
1189
  }
1190
1190
  return sql