@maiyunnet/kebab 8.4.0 → 8.5.1
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 +81 -73
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/lib/net/response.js +18 -3
- package/lib/sql.d.ts +2 -0
- package/lib/sql.js +5 -1
- package/package.json +1 -1
- package/sys/child.js +39 -14
- package/sys/mod.js +16 -12
- package/www/example/ctr/test.d.ts +1 -0
- package/www/example/ctr/test.js +28 -2
package/doc/kebab-rag.md
CHANGED
|
@@ -1410,7 +1410,7 @@ index/variables/VER.md
|
|
|
1410
1410
|
|
|
1411
1411
|
# Variable: VER
|
|
1412
1412
|
|
|
1413
|
-
> `const` **VER**: `"8.
|
|
1413
|
+
> `const` **VER**: `"8.5.1"` = `'8.5.1'`
|
|
1414
1414
|
|
|
1415
1415
|
Defined in: [index.ts:10](https://github.com/maiyunnet/kebab/blob/master/index.ts#L10)
|
|
1416
1416
|
|
|
@@ -11882,7 +11882,7 @@ Defined in: [lib/net/response.ts:30](https://github.com/maiyunnet/kebab/blob/mas
|
|
|
11882
11882
|
|
|
11883
11883
|
> **getRawStream**(): `Readable` \| `null`
|
|
11884
11884
|
|
|
11885
|
-
Defined in: [lib/net/response.ts:
|
|
11885
|
+
Defined in: [lib/net/response.ts:65](https://github.com/maiyunnet/kebab/blob/master/lib/net/response.ts#L65)
|
|
11886
11886
|
|
|
11887
11887
|
获取原生响应读取流对象
|
|
11888
11888
|
|
|
@@ -11896,7 +11896,7 @@ Defined in: [lib/net/response.ts:55](https://github.com/maiyunnet/kebab/blob/mas
|
|
|
11896
11896
|
|
|
11897
11897
|
> **getStream**(): `Readable` \| `null`
|
|
11898
11898
|
|
|
11899
|
-
Defined in: [lib/net/response.ts:
|
|
11899
|
+
Defined in: [lib/net/response.ts:53](https://github.com/maiyunnet/kebab/blob/master/lib/net/response.ts#L53)
|
|
11900
11900
|
|
|
11901
11901
|
获取响应读取流对象
|
|
11902
11902
|
|
|
@@ -11910,7 +11910,7 @@ Defined in: [lib/net/response.ts:48](https://github.com/maiyunnet/kebab/blob/mas
|
|
|
11910
11910
|
|
|
11911
11911
|
> **setContent**(`v`): `void`
|
|
11912
11912
|
|
|
11913
|
-
Defined in: [lib/net/response.ts:
|
|
11913
|
+
Defined in: [lib/net/response.ts:46](https://github.com/maiyunnet/kebab/blob/master/lib/net/response.ts#L46)
|
|
11914
11914
|
|
|
11915
11915
|
用户自定义的 content 内容
|
|
11916
11916
|
|
|
@@ -13119,6 +13119,10 @@ Defined in: [lib/sql.ts:66](https://github.com/maiyunnet/kebab/blob/master/lib/s
|
|
|
13119
13119
|
|
|
13120
13120
|
##### opt
|
|
13121
13121
|
|
|
13122
|
+
###### alias?
|
|
13123
|
+
|
|
13124
|
+
`string`[]
|
|
13125
|
+
|
|
13122
13126
|
###### ctr?
|
|
13123
13127
|
|
|
13124
13128
|
[`Ctr`](../../../sys/ctr/classes/Ctr.md)
|
|
@@ -13149,7 +13153,7 @@ Defined in: [lib/sql.ts:66](https://github.com/maiyunnet/kebab/blob/master/lib/s
|
|
|
13149
13153
|
|
|
13150
13154
|
> **append**(`sql`): `this`
|
|
13151
13155
|
|
|
13152
|
-
Defined in: [lib/sql.ts:
|
|
13156
|
+
Defined in: [lib/sql.ts:879](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L879)
|
|
13153
13157
|
|
|
13154
13158
|
在 sql 最后追加字符串
|
|
13155
13159
|
|
|
@@ -13169,7 +13173,7 @@ Defined in: [lib/sql.ts:874](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13169
13173
|
|
|
13170
13174
|
> **by**(`c`, `d?`): `this`
|
|
13171
13175
|
|
|
13172
|
-
Defined in: [lib/sql.ts:
|
|
13176
|
+
Defined in: [lib/sql.ts:672](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L672)
|
|
13173
13177
|
|
|
13174
13178
|
ORDER BY
|
|
13175
13179
|
|
|
@@ -13197,7 +13201,7 @@ ORDER BY
|
|
|
13197
13201
|
|
|
13198
13202
|
> **copy**(`f?`, `opt?`): `Sql`
|
|
13199
13203
|
|
|
13200
|
-
Defined in: [lib/sql.ts:
|
|
13204
|
+
Defined in: [lib/sql.ts:740](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L740)
|
|
13201
13205
|
|
|
13202
13206
|
创建一个本对象的一个新的 sql 对象拷贝
|
|
13203
13207
|
|
|
@@ -13225,7 +13229,7 @@ Defined in: [lib/sql.ts:736](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13225
13229
|
|
|
13226
13230
|
> **crossJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
|
|
13227
13231
|
|
|
13228
|
-
Defined in: [lib/sql.ts:
|
|
13232
|
+
Defined in: [lib/sql.ts:427](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L427)
|
|
13229
13233
|
|
|
13230
13234
|
cross join 方法
|
|
13231
13235
|
|
|
@@ -13265,7 +13269,7 @@ ON 信息
|
|
|
13265
13269
|
|
|
13266
13270
|
> **delete**(`f`): `this`
|
|
13267
13271
|
|
|
13268
|
-
Defined in: [lib/sql.ts:
|
|
13272
|
+
Defined in: [lib/sql.ts:315](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L315)
|
|
13269
13273
|
|
|
13270
13274
|
'xx'
|
|
13271
13275
|
|
|
@@ -13287,7 +13291,7 @@ Defined in: [lib/sql.ts:311](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13287
13291
|
|
|
13288
13292
|
> **field**(`str`, `pre?`, `suf?`): `string`
|
|
13289
13293
|
|
|
13290
|
-
Defined in: [lib/sql.ts:
|
|
13294
|
+
Defined in: [lib/sql.ts:890](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L890)
|
|
13291
13295
|
|
|
13292
13296
|
对字段进行包裹
|
|
13293
13297
|
|
|
@@ -13319,7 +13323,7 @@ Defined in: [lib/sql.ts:885](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13319
13323
|
|
|
13320
13324
|
> **format**(`sql?`, `data?`): `string`
|
|
13321
13325
|
|
|
13322
|
-
Defined in: [lib/sql.ts:
|
|
13326
|
+
Defined in: [lib/sql.ts:869](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L869)
|
|
13323
13327
|
|
|
13324
13328
|
获取带 data 的 sql 语句
|
|
13325
13329
|
|
|
@@ -13343,7 +13347,7 @@ Defined in: [lib/sql.ts:864](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13343
13347
|
|
|
13344
13348
|
> **fullJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
|
|
13345
13349
|
|
|
13346
|
-
Defined in: [lib/sql.ts:
|
|
13350
|
+
Defined in: [lib/sql.ts:416](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L416)
|
|
13347
13351
|
|
|
13348
13352
|
full join 方法
|
|
13349
13353
|
|
|
@@ -13383,7 +13387,7 @@ ON 信息
|
|
|
13383
13387
|
|
|
13384
13388
|
> **getData**(): [`DbValue`](../../../index/type-aliases/DbValue.md)[]
|
|
13385
13389
|
|
|
13386
|
-
Defined in: [lib/sql.ts:
|
|
13390
|
+
Defined in: [lib/sql.ts:853](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L853)
|
|
13387
13391
|
|
|
13388
13392
|
获取全部 data
|
|
13389
13393
|
|
|
@@ -13397,7 +13401,7 @@ Defined in: [lib/sql.ts:848](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13397
13401
|
|
|
13398
13402
|
> **getPre**(): `string`
|
|
13399
13403
|
|
|
13400
|
-
Defined in: [lib/sql.ts:
|
|
13404
|
+
Defined in: [lib/sql.ts:860](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L860)
|
|
13401
13405
|
|
|
13402
13406
|
获取定义的 pre
|
|
13403
13407
|
|
|
@@ -13411,7 +13415,7 @@ Defined in: [lib/sql.ts:855](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13411
13415
|
|
|
13412
13416
|
> **getSql**(): `string`
|
|
13413
13417
|
|
|
13414
|
-
Defined in: [lib/sql.ts:
|
|
13418
|
+
Defined in: [lib/sql.ts:837](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L837)
|
|
13415
13419
|
|
|
13416
13420
|
获取 sql 语句
|
|
13417
13421
|
|
|
@@ -13425,7 +13429,7 @@ Defined in: [lib/sql.ts:832](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13425
13429
|
|
|
13426
13430
|
> **group**(`c`): `this`
|
|
13427
13431
|
|
|
13428
|
-
Defined in: [lib/sql.ts:
|
|
13432
|
+
Defined in: [lib/sql.ts:696](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L696)
|
|
13429
13433
|
|
|
13430
13434
|
GROUP BY
|
|
13431
13435
|
|
|
@@ -13447,7 +13451,7 @@ GROUP BY
|
|
|
13447
13451
|
|
|
13448
13452
|
> **having**(`s?`): `this`
|
|
13449
13453
|
|
|
13450
|
-
Defined in: [lib/sql.ts:
|
|
13454
|
+
Defined in: [lib/sql.ts:434](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L434)
|
|
13451
13455
|
|
|
13452
13456
|
having 后置筛选器,用法类似 where
|
|
13453
13457
|
|
|
@@ -13467,7 +13471,7 @@ having 后置筛选器,用法类似 where
|
|
|
13467
13471
|
|
|
13468
13472
|
> **innerJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
|
|
13469
13473
|
|
|
13470
|
-
Defined in: [lib/sql.ts:
|
|
13474
|
+
Defined in: [lib/sql.ts:405](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L405)
|
|
13471
13475
|
|
|
13472
13476
|
inner join 方法
|
|
13473
13477
|
|
|
@@ -13507,7 +13511,7 @@ ON 信息
|
|
|
13507
13511
|
|
|
13508
13512
|
> **insert**(`table`, `ignore?`): `this`
|
|
13509
13513
|
|
|
13510
|
-
Defined in: [lib/sql.ts:
|
|
13514
|
+
Defined in: [lib/sql.ts:95](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L95)
|
|
13511
13515
|
|
|
13512
13516
|
插入数据前导
|
|
13513
13517
|
|
|
@@ -13535,7 +13539,7 @@ Defined in: [lib/sql.ts:91](https://github.com/maiyunnet/kebab/blob/master/lib/s
|
|
|
13535
13539
|
|
|
13536
13540
|
> **join**(`f`, `s?`, `type?`, `suf?`, `pre?`): `this`
|
|
13537
13541
|
|
|
13538
|
-
Defined in: [lib/sql.ts:
|
|
13542
|
+
Defined in: [lib/sql.ts:357](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L357)
|
|
13539
13543
|
|
|
13540
13544
|
join 方法
|
|
13541
13545
|
|
|
@@ -13581,7 +13585,7 @@ ON 信息
|
|
|
13581
13585
|
|
|
13582
13586
|
> **leftJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
|
|
13583
13587
|
|
|
13584
|
-
Defined in: [lib/sql.ts:
|
|
13588
|
+
Defined in: [lib/sql.ts:383](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L383)
|
|
13585
13589
|
|
|
13586
13590
|
left join 方法
|
|
13587
13591
|
|
|
@@ -13621,7 +13625,7 @@ ON 信息
|
|
|
13621
13625
|
|
|
13622
13626
|
> **limit**(`a`, `b?`): `this`
|
|
13623
13627
|
|
|
13624
|
-
Defined in: [lib/sql.ts:
|
|
13628
|
+
Defined in: [lib/sql.ts:716](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L716)
|
|
13625
13629
|
|
|
13626
13630
|
LIMIT(limit、offset, limit)
|
|
13627
13631
|
|
|
@@ -13649,7 +13653,7 @@ LIMIT(limit、offset, limit)
|
|
|
13649
13653
|
|
|
13650
13654
|
> **lock**(): `this`
|
|
13651
13655
|
|
|
13652
|
-
Defined in: [lib/sql.ts:
|
|
13656
|
+
Defined in: [lib/sql.ts:731](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L731)
|
|
13653
13657
|
|
|
13654
13658
|
追加消极锁,通常不建议使用
|
|
13655
13659
|
|
|
@@ -13663,7 +13667,7 @@ Defined in: [lib/sql.ts:727](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13663
13667
|
|
|
13664
13668
|
> **rightJoin**(`f`, `s?`, `suf?`, `pre?`): `this`
|
|
13665
13669
|
|
|
13666
|
-
Defined in: [lib/sql.ts:
|
|
13670
|
+
Defined in: [lib/sql.ts:394](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L394)
|
|
13667
13671
|
|
|
13668
13672
|
right join 方法
|
|
13669
13673
|
|
|
@@ -13703,7 +13707,7 @@ ON 信息
|
|
|
13703
13707
|
|
|
13704
13708
|
> **select**(`c`, `f`): `this`
|
|
13705
13709
|
|
|
13706
|
-
Defined in: [lib/sql.ts:
|
|
13710
|
+
Defined in: [lib/sql.ts:206](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L206)
|
|
13707
13711
|
|
|
13708
13712
|
'*', 'xx'
|
|
13709
13713
|
|
|
@@ -13731,7 +13735,7 @@ Defined in: [lib/sql.ts:202](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13731
13735
|
|
|
13732
13736
|
> **union**(`lsql`, `type?`): `this`
|
|
13733
13737
|
|
|
13734
|
-
Defined in: [lib/sql.ts:
|
|
13738
|
+
Defined in: [lib/sql.ts:327](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L327)
|
|
13735
13739
|
|
|
13736
13740
|
联查另一个 sql 对象
|
|
13737
13741
|
|
|
@@ -13759,7 +13763,7 @@ sql 对象
|
|
|
13759
13763
|
|
|
13760
13764
|
> **unionAll**(`lsql`): `this`
|
|
13761
13765
|
|
|
13762
|
-
Defined in: [lib/sql.ts:
|
|
13766
|
+
Defined in: [lib/sql.ts:345](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L345)
|
|
13763
13767
|
|
|
13764
13768
|
所有联查另一个 sql 对象
|
|
13765
13769
|
|
|
@@ -13781,7 +13785,7 @@ sql 对象
|
|
|
13781
13785
|
|
|
13782
13786
|
> **update**(`f`, `s`): `this`
|
|
13783
13787
|
|
|
13784
|
-
Defined in: [lib/sql.ts:
|
|
13788
|
+
Defined in: [lib/sql.ts:247](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L247)
|
|
13785
13789
|
|
|
13786
13790
|
UPDATE SQL 方法
|
|
13787
13791
|
|
|
@@ -13809,7 +13813,7 @@ UPDATE SQL 方法
|
|
|
13809
13813
|
|
|
13810
13814
|
> **upsert**(`data`, `conflict?`): `this`
|
|
13811
13815
|
|
|
13812
|
-
Defined in: [lib/sql.ts:
|
|
13816
|
+
Defined in: [lib/sql.ts:172](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L172)
|
|
13813
13817
|
|
|
13814
13818
|
如果存在则更新不存在则插入(UPSERT)
|
|
13815
13819
|
|
|
@@ -13837,7 +13841,7 @@ Defined in: [lib/sql.ts:168](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13837
13841
|
|
|
13838
13842
|
> **values**(`cs`, `vs?`): `this`
|
|
13839
13843
|
|
|
13840
|
-
Defined in: [lib/sql.ts:
|
|
13844
|
+
Defined in: [lib/sql.ts:114](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L114)
|
|
13841
13845
|
|
|
13842
13846
|
实际插入数据的数据
|
|
13843
13847
|
|
|
@@ -13865,7 +13869,7 @@ Defined in: [lib/sql.ts:110](https://github.com/maiyunnet/kebab/blob/master/lib/
|
|
|
13865
13869
|
|
|
13866
13870
|
> **where**(`s`): `this`
|
|
13867
13871
|
|
|
13868
|
-
Defined in: [lib/sql.ts:
|
|
13872
|
+
Defined in: [lib/sql.ts:468](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L468)
|
|
13869
13873
|
|
|
13870
13874
|
筛选器
|
|
13871
13875
|
1. 'city': 'bj', 'type': '2'
|
|
@@ -14008,7 +14012,7 @@ lib/sql/functions/aoMix.md
|
|
|
14008
14012
|
|
|
14009
14013
|
> **aoMix**(`arr`): `Record`\<`string`, `string` \| `number` \| [`Json`](../../../index/type-aliases/Json.md)\>
|
|
14010
14014
|
|
|
14011
|
-
Defined in: [lib/sql.ts:
|
|
14015
|
+
Defined in: [lib/sql.ts:1216](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1216)
|
|
14012
14016
|
|
|
14013
14017
|
将数组兑换为组合的对象(Array/Object mix)
|
|
14014
14018
|
|
|
@@ -14037,7 +14041,7 @@ lib/sql/functions/column.md
|
|
|
14037
14041
|
|
|
14038
14042
|
> **column**(`field`): `object`
|
|
14039
14043
|
|
|
14040
|
-
Defined in: [lib/sql.ts:
|
|
14044
|
+
Defined in: [lib/sql.ts:1237](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1237)
|
|
14041
14045
|
|
|
14042
14046
|
创建字段对象
|
|
14043
14047
|
|
|
@@ -14076,7 +14080,7 @@ lib/sql/functions/format.md
|
|
|
14076
14080
|
|
|
14077
14081
|
> **format**(`sql`, `data`, `service?`): `string`
|
|
14078
14082
|
|
|
14079
|
-
Defined in: [lib/sql.ts:
|
|
14083
|
+
Defined in: [lib/sql.ts:1178](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1178)
|
|
14080
14084
|
|
|
14081
14085
|
返回代入后的完整 SQL 字符串,这并不安全不能直接执行,只是用来调试打印 sql 语句
|
|
14082
14086
|
|
|
@@ -14117,7 +14121,7 @@ lib/sql/functions/get.md
|
|
|
14117
14121
|
|
|
14118
14122
|
> **get**(`opt`): [`Sql`](../classes/Sql.md)
|
|
14119
14123
|
|
|
14120
|
-
Defined in: [lib/sql.ts:
|
|
14124
|
+
Defined in: [lib/sql.ts:1150](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1150)
|
|
14121
14125
|
|
|
14122
14126
|
创建 sql 对象
|
|
14123
14127
|
|
|
@@ -14127,6 +14131,10 @@ Defined in: [lib/sql.ts:1145](https://github.com/maiyunnet/kebab/blob/master/lib
|
|
|
14127
14131
|
|
|
14128
14132
|
参数
|
|
14129
14133
|
|
|
14134
|
+
#### alias?
|
|
14135
|
+
|
|
14136
|
+
`string`[]
|
|
14137
|
+
|
|
14130
14138
|
#### ctr?
|
|
14131
14139
|
|
|
14132
14140
|
[`Ctr`](../../../sys/ctr/classes/Ctr.md)
|
|
@@ -14164,7 +14172,7 @@ lib/sql/functions/json.md
|
|
|
14164
14172
|
|
|
14165
14173
|
> **json**(`obj`): `any`
|
|
14166
14174
|
|
|
14167
|
-
Defined in: [lib/sql.ts:
|
|
14175
|
+
Defined in: [lib/sql.ts:1256](https://github.com/maiyunnet/kebab/blob/master/lib/sql.ts#L1256)
|
|
14168
14176
|
|
|
14169
14177
|
将对象转换为 JSON 字符串并避开类型检查,用于适配 PostgreSQL 的 jsonb 字段
|
|
14170
14178
|
|
|
@@ -21146,7 +21154,7 @@ Defined in: [sys/mod.ts:68](https://github.com/maiyunnet/kebab/blob/master/sys/m
|
|
|
21146
21154
|
|
|
21147
21155
|
> `protected` **\_keyGenerator**(): `string`
|
|
21148
21156
|
|
|
21149
|
-
Defined in: [sys/mod.ts:
|
|
21157
|
+
Defined in: [sys/mod.ts:1767](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1767)
|
|
21150
21158
|
|
|
21151
21159
|
当 _key 不为空时,则依据继承此方法的方法自动生成填充 key
|
|
21152
21160
|
|
|
@@ -21204,7 +21212,7 @@ Defined in: [sys/mod.ts:1131](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21204
21212
|
|
|
21205
21213
|
> **allArray**(): `Promise`\<`false` \| `Record`\<`string`, `any`\>[]\>
|
|
21206
21214
|
|
|
21207
|
-
Defined in: [sys/mod.ts:
|
|
21215
|
+
Defined in: [sys/mod.ts:1306](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1306)
|
|
21208
21216
|
|
|
21209
21217
|
##### Returns
|
|
21210
21218
|
|
|
@@ -21214,7 +21222,7 @@ Defined in: [sys/mod.ts:1305](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21214
21222
|
|
|
21215
21223
|
> **allArray**(`key`): `Promise`\<`false` \| `Record`\<`string`, `Record`\<`string`, `any`\>\>\>
|
|
21216
21224
|
|
|
21217
|
-
Defined in: [sys/mod.ts:
|
|
21225
|
+
Defined in: [sys/mod.ts:1307](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1307)
|
|
21218
21226
|
|
|
21219
21227
|
##### Parameters
|
|
21220
21228
|
|
|
@@ -21232,7 +21240,7 @@ Defined in: [sys/mod.ts:1306](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21232
21240
|
|
|
21233
21241
|
> **append**(`sql`): `this`
|
|
21234
21242
|
|
|
21235
|
-
Defined in: [sys/mod.ts:
|
|
21243
|
+
Defined in: [sys/mod.ts:1676](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1676)
|
|
21236
21244
|
|
|
21237
21245
|
在 sql 最后追加字符串
|
|
21238
21246
|
|
|
@@ -21252,7 +21260,7 @@ Defined in: [sys/mod.ts:1672](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21252
21260
|
|
|
21253
21261
|
> **by**(`c`, `d?`): `this`
|
|
21254
21262
|
|
|
21255
|
-
Defined in: [sys/mod.ts:
|
|
21263
|
+
Defined in: [sys/mod.ts:1632](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1632)
|
|
21256
21264
|
|
|
21257
21265
|
ORDER BY
|
|
21258
21266
|
|
|
@@ -21280,7 +21288,7 @@ ORDER BY
|
|
|
21280
21288
|
|
|
21281
21289
|
> **contain**(`contain`): `this`
|
|
21282
21290
|
|
|
21283
|
-
Defined in: [sys/mod.ts:
|
|
21291
|
+
Defined in: [sys/mod.ts:1685](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1685)
|
|
21284
21292
|
|
|
21285
21293
|
设置闭包含数据
|
|
21286
21294
|
|
|
@@ -21308,7 +21316,7 @@ Defined in: [sys/mod.ts:1681](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21308
21316
|
|
|
21309
21317
|
> **count**(): `Promise`\<`number`\>
|
|
21310
21318
|
|
|
21311
|
-
Defined in: [sys/mod.ts:
|
|
21319
|
+
Defined in: [sys/mod.ts:1496](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1496)
|
|
21312
21320
|
|
|
21313
21321
|
根据当前条件,筛选出当前条目该有的数据条数
|
|
21314
21322
|
|
|
@@ -21322,7 +21330,7 @@ Defined in: [sys/mod.ts:1494](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21322
21330
|
|
|
21323
21331
|
> **countSql**(): `string`
|
|
21324
21332
|
|
|
21325
|
-
Defined in: [sys/mod.ts:
|
|
21333
|
+
Defined in: [sys/mod.ts:1517](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1517)
|
|
21326
21334
|
|
|
21327
21335
|
获取当前条件下的 count 的 SQL 语句
|
|
21328
21336
|
|
|
@@ -21352,7 +21360,7 @@ true-成功,false-报错,null-唯一键非 _$key 键冲突
|
|
|
21352
21360
|
|
|
21353
21361
|
> **crossJoin**(`f`, `s`, `index?`, `pre?`): `this`
|
|
21354
21362
|
|
|
21355
|
-
Defined in: [sys/mod.ts:
|
|
21363
|
+
Defined in: [sys/mod.ts:1592](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1592)
|
|
21356
21364
|
|
|
21357
21365
|
cross join 方法
|
|
21358
21366
|
|
|
@@ -21400,7 +21408,7 @@ ON 信息
|
|
|
21400
21408
|
|
|
21401
21409
|
> **explain**(`all?`): `Promise`\<`string` \| `false`\>
|
|
21402
21410
|
|
|
21403
|
-
Defined in: [sys/mod.ts:
|
|
21411
|
+
Defined in: [sys/mod.ts:1429](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1429)
|
|
21404
21412
|
|
|
21405
21413
|
##### Parameters
|
|
21406
21414
|
|
|
@@ -21416,7 +21424,7 @@ Defined in: [sys/mod.ts:1427](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21416
21424
|
|
|
21417
21425
|
> **explain**(`all`): `Promise`\<`false` \| `Record`\<`string`, `any`\>\>
|
|
21418
21426
|
|
|
21419
|
-
Defined in: [sys/mod.ts:
|
|
21427
|
+
Defined in: [sys/mod.ts:1430](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1430)
|
|
21420
21428
|
|
|
21421
21429
|
##### Parameters
|
|
21422
21430
|
|
|
@@ -21434,7 +21442,7 @@ Defined in: [sys/mod.ts:1428](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21434
21442
|
|
|
21435
21443
|
> **filter**(`s`): `this`
|
|
21436
21444
|
|
|
21437
|
-
Defined in: [sys/mod.ts:
|
|
21445
|
+
Defined in: [sys/mod.ts:1610](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1610)
|
|
21438
21446
|
|
|
21439
21447
|
筛选器
|
|
21440
21448
|
|
|
@@ -21532,7 +21540,7 @@ Defined in: [sys/mod.ts:1063](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21532
21540
|
|
|
21533
21541
|
> **format**(`sql?`, `data?`): `string`
|
|
21534
21542
|
|
|
21535
|
-
Defined in: [sys/mod.ts:
|
|
21543
|
+
Defined in: [sys/mod.ts:1712](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1712)
|
|
21536
21544
|
|
|
21537
21545
|
获取带 data 的 sql 语句
|
|
21538
21546
|
|
|
@@ -21560,7 +21568,7 @@ sql 语句
|
|
|
21560
21568
|
|
|
21561
21569
|
> **fullJoin**(`f`, `s`, `index?`, `pre?`): `this`
|
|
21562
21570
|
|
|
21563
|
-
Defined in: [sys/mod.ts:
|
|
21571
|
+
Defined in: [sys/mod.ts:1580](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1580)
|
|
21564
21572
|
|
|
21565
21573
|
full join 方法
|
|
21566
21574
|
|
|
@@ -21622,7 +21630,7 @@ Defined in: [sys/mod.ts:816](https://github.com/maiyunnet/kebab/blob/master/sys/
|
|
|
21622
21630
|
|
|
21623
21631
|
> **getData**(): `any`[]
|
|
21624
21632
|
|
|
21625
|
-
Defined in: [sys/mod.ts:
|
|
21633
|
+
Defined in: [sys/mod.ts:1703](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1703)
|
|
21626
21634
|
|
|
21627
21635
|
获取全部 data
|
|
21628
21636
|
|
|
@@ -21636,7 +21644,7 @@ Defined in: [sys/mod.ts:1699](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21636
21644
|
|
|
21637
21645
|
> **getSql**(): `string`
|
|
21638
21646
|
|
|
21639
|
-
Defined in: [sys/mod.ts:
|
|
21647
|
+
Defined in: [sys/mod.ts:1696](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1696)
|
|
21640
21648
|
|
|
21641
21649
|
获取 sql 语句
|
|
21642
21650
|
|
|
@@ -21650,7 +21658,7 @@ Defined in: [sys/mod.ts:1692](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21650
21658
|
|
|
21651
21659
|
> **group**(`c`): `this`
|
|
21652
21660
|
|
|
21653
|
-
Defined in: [sys/mod.ts:
|
|
21661
|
+
Defined in: [sys/mod.ts:1641](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1641)
|
|
21654
21662
|
|
|
21655
21663
|
GROUP BY
|
|
21656
21664
|
|
|
@@ -21672,7 +21680,7 @@ GROUP BY
|
|
|
21672
21680
|
|
|
21673
21681
|
> **having**(`s`): `this`
|
|
21674
21682
|
|
|
21675
|
-
Defined in: [sys/mod.ts:
|
|
21683
|
+
Defined in: [sys/mod.ts:1601](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1601)
|
|
21676
21684
|
|
|
21677
21685
|
筛选器
|
|
21678
21686
|
|
|
@@ -21694,7 +21702,7 @@ Defined in: [sys/mod.ts:1597](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21694
21702
|
|
|
21695
21703
|
> **innerJoin**(`f`, `s`, `index?`, `pre?`): `this`
|
|
21696
21704
|
|
|
21697
|
-
Defined in: [sys/mod.ts:
|
|
21705
|
+
Defined in: [sys/mod.ts:1568](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1568)
|
|
21698
21706
|
|
|
21699
21707
|
inner join 方法
|
|
21700
21708
|
|
|
@@ -21734,7 +21742,7 @@ ON 信息
|
|
|
21734
21742
|
|
|
21735
21743
|
> **join**(`f`, `s?`, `type?`, `index?`, `pre?`): `this`
|
|
21736
21744
|
|
|
21737
|
-
Defined in: [sys/mod.ts:
|
|
21745
|
+
Defined in: [sys/mod.ts:1532](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1532)
|
|
21738
21746
|
|
|
21739
21747
|
#### Parameters
|
|
21740
21748
|
|
|
@@ -21778,7 +21786,7 @@ ON 信息
|
|
|
21778
21786
|
|
|
21779
21787
|
> **langText**(`col`, `lang`): `string`
|
|
21780
21788
|
|
|
21781
|
-
Defined in: [sys/mod.ts:
|
|
21789
|
+
Defined in: [sys/mod.ts:1747](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1747)
|
|
21782
21790
|
|
|
21783
21791
|
获取字段的可用语种文本
|
|
21784
21792
|
|
|
@@ -21806,7 +21814,7 @@ Defined in: [sys/mod.ts:1743](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21806
21814
|
|
|
21807
21815
|
> **leftJoin**(`f`, `s`, `index?`, `pre?`): `this`
|
|
21808
21816
|
|
|
21809
|
-
Defined in: [sys/mod.ts:
|
|
21817
|
+
Defined in: [sys/mod.ts:1544](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1544)
|
|
21810
21818
|
|
|
21811
21819
|
left join 方法
|
|
21812
21820
|
|
|
@@ -21846,7 +21854,7 @@ ON 信息
|
|
|
21846
21854
|
|
|
21847
21855
|
> **limit**(`a`, `b?`): `this`
|
|
21848
21856
|
|
|
21849
|
-
Defined in: [sys/mod.ts:
|
|
21857
|
+
Defined in: [sys/mod.ts:1654](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1654)
|
|
21850
21858
|
|
|
21851
21859
|
LIMIT
|
|
21852
21860
|
|
|
@@ -21874,7 +21882,7 @@ LIMIT
|
|
|
21874
21882
|
|
|
21875
21883
|
> **page**(`count`, `page?`): `this`
|
|
21876
21884
|
|
|
21877
|
-
Defined in: [sys/mod.ts:
|
|
21885
|
+
Defined in: [sys/mod.ts:1665](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1665)
|
|
21878
21886
|
|
|
21879
21887
|
分页
|
|
21880
21888
|
|
|
@@ -21938,7 +21946,7 @@ Defined in: [sys/mod.ts:1001](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
21938
21946
|
|
|
21939
21947
|
> **rightJoin**(`f`, `s`, `index?`, `pre?`): `this`
|
|
21940
21948
|
|
|
21941
|
-
Defined in: [sys/mod.ts:
|
|
21949
|
+
Defined in: [sys/mod.ts:1556](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1556)
|
|
21942
21950
|
|
|
21943
21951
|
right join 方法
|
|
21944
21952
|
|
|
@@ -22070,7 +22078,7 @@ Defined in: [sys/mod.ts:778](https://github.com/maiyunnet/kebab/blob/master/sys/
|
|
|
22070
22078
|
|
|
22071
22079
|
> **toArray**\<`TC`\>(): [`TOnlyProperties`](../type-aliases/TOnlyProperties.md)\<`InstanceType`\<`TC`\>\> & `Record`\<`string`, `any`\>
|
|
22072
22080
|
|
|
22073
|
-
Defined in: [sys/mod.ts:
|
|
22081
|
+
Defined in: [sys/mod.ts:1719](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1719)
|
|
22074
22082
|
|
|
22075
22083
|
获取值对象,获取的是新创建的数组
|
|
22076
22084
|
|
|
@@ -22090,7 +22098,7 @@ Defined in: [sys/mod.ts:1715](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
22090
22098
|
|
|
22091
22099
|
> **total**(`f?`): `Promise`\<`number`\>
|
|
22092
22100
|
|
|
22093
|
-
Defined in: [sys/mod.ts:
|
|
22101
|
+
Defined in: [sys/mod.ts:1472](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1472)
|
|
22094
22102
|
|
|
22095
22103
|
获取总条数,自动抛弃 LIMIT,仅用于获取数据的情况(select)
|
|
22096
22104
|
|
|
@@ -22160,7 +22168,7 @@ Defined in: [sys/mod.ts:1104](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
22160
22168
|
|
|
22161
22169
|
> **unsaved**(): `boolean`
|
|
22162
22170
|
|
|
22163
|
-
Defined in: [sys/mod.ts:
|
|
22171
|
+
Defined in: [sys/mod.ts:1738](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1738)
|
|
22164
22172
|
|
|
22165
22173
|
当前是否设置了未保存 --=
|
|
22166
22174
|
|
|
@@ -22174,7 +22182,7 @@ Defined in: [sys/mod.ts:1734](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
22174
22182
|
|
|
22175
22183
|
> **updates**(): `Record`\<`string`, `any`\>
|
|
22176
22184
|
|
|
22177
|
-
Defined in: [sys/mod.ts:
|
|
22185
|
+
Defined in: [sys/mod.ts:1727](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1727)
|
|
22178
22186
|
|
|
22179
22187
|
获取当前设置要提交的数据
|
|
22180
22188
|
|
|
@@ -22210,7 +22218,7 @@ Defined in: [sys/mod.ts:914](https://github.com/maiyunnet/kebab/blob/master/sys/
|
|
|
22210
22218
|
|
|
22211
22219
|
> **where**(`s`): `this`
|
|
22212
22220
|
|
|
22213
|
-
Defined in: [sys/mod.ts:
|
|
22221
|
+
Defined in: [sys/mod.ts:1621](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1621)
|
|
22214
22222
|
|
|
22215
22223
|
是 filter 的别名
|
|
22216
22224
|
|
|
@@ -23333,7 +23341,7 @@ sys/mod/interfaces/IModUnionItem.md
|
|
|
23333
23341
|
|
|
23334
23342
|
# Interface: IModUnionItem
|
|
23335
23343
|
|
|
23336
|
-
Defined in: [sys/mod.ts:
|
|
23344
|
+
Defined in: [sys/mod.ts:1781](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1781)
|
|
23337
23345
|
|
|
23338
23346
|
## Properties
|
|
23339
23347
|
|
|
@@ -23341,7 +23349,7 @@ Defined in: [sys/mod.ts:1777](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
23341
23349
|
|
|
23342
23350
|
> **field**: `string`
|
|
23343
23351
|
|
|
23344
|
-
Defined in: [sys/mod.ts:
|
|
23352
|
+
Defined in: [sys/mod.ts:1782](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1782)
|
|
23345
23353
|
|
|
23346
23354
|
***
|
|
23347
23355
|
|
|
@@ -23349,7 +23357,7 @@ Defined in: [sys/mod.ts:1778](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
23349
23357
|
|
|
23350
23358
|
> `optional` **where**: `any`
|
|
23351
23359
|
|
|
23352
|
-
Defined in: [sys/mod.ts:
|
|
23360
|
+
Defined in: [sys/mod.ts:1783](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1783)
|
|
23353
23361
|
|
|
23354
23362
|
sys/mod/interfaces/IRows.md
|
|
23355
23363
|
---
|
|
@@ -23362,7 +23370,7 @@ sys/mod/interfaces/IRows.md
|
|
|
23362
23370
|
|
|
23363
23371
|
# Interface: IRows\<T\>
|
|
23364
23372
|
|
|
23365
|
-
Defined in: [sys/mod.ts:
|
|
23373
|
+
Defined in: [sys/mod.ts:1775](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1775)
|
|
23366
23374
|
|
|
23367
23375
|
## Extends
|
|
23368
23376
|
|
|
@@ -23380,7 +23388,7 @@ Defined in: [sys/mod.ts:1771](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
23380
23388
|
|
|
23381
23389
|
> `readonly` **length**: `number`
|
|
23382
23390
|
|
|
23383
|
-
Defined in: [sys/mod.ts:
|
|
23391
|
+
Defined in: [sys/mod.ts:1776](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1776)
|
|
23384
23392
|
|
|
23385
23393
|
## Methods
|
|
23386
23394
|
|
|
@@ -23388,7 +23396,7 @@ Defined in: [sys/mod.ts:1772](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
23388
23396
|
|
|
23389
23397
|
> **item**(`index`): `T`
|
|
23390
23398
|
|
|
23391
|
-
Defined in: [sys/mod.ts:
|
|
23399
|
+
Defined in: [sys/mod.ts:1777](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1777)
|
|
23392
23400
|
|
|
23393
23401
|
#### Parameters
|
|
23394
23402
|
|
|
@@ -23406,7 +23414,7 @@ Defined in: [sys/mod.ts:1773](https://github.com/maiyunnet/kebab/blob/master/sys
|
|
|
23406
23414
|
|
|
23407
23415
|
> **toArray**(): `Record`\<`string`, `any`\>[]
|
|
23408
23416
|
|
|
23409
|
-
Defined in: [sys/mod.ts:
|
|
23417
|
+
Defined in: [sys/mod.ts:1778](https://github.com/maiyunnet/kebab/blob/master/sys/mod.ts#L1778)
|
|
23410
23418
|
|
|
23411
23419
|
#### Returns
|
|
23412
23420
|
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* --- 本文件用来定义每个目录实体地址的常量 ---
|
|
7
7
|
*/
|
|
8
8
|
/** --- 当前系统版本号 --- */
|
|
9
|
-
export const VER = '8.
|
|
9
|
+
export const VER = '8.5.1';
|
|
10
10
|
// --- 服务端用的路径 ---
|
|
11
11
|
const imu = decodeURIComponent(import.meta.url).replace('file://', '').replace(/^\/(\w:)/, '$1');
|
|
12
12
|
/** --- /xxx/xxx --- */
|
package/lib/net/response.js
CHANGED
|
@@ -16,7 +16,12 @@ export class Response {
|
|
|
16
16
|
if (this._content) {
|
|
17
17
|
return this._content;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
try {
|
|
20
|
+
return this._req ? await this._req.getBuffer() : null;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
/**
|
|
22
27
|
* --- 用户自定义的 content 内容 ---
|
|
@@ -29,12 +34,22 @@ export class Response {
|
|
|
29
34
|
* --- 获取响应读取流对象 ---
|
|
30
35
|
*/
|
|
31
36
|
getStream() {
|
|
32
|
-
|
|
37
|
+
try {
|
|
38
|
+
return this._req ? this._req.getStream() : null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
33
43
|
}
|
|
34
44
|
/**
|
|
35
45
|
* --- 获取原生响应读取流对象 ---
|
|
36
46
|
*/
|
|
37
47
|
getRawStream() {
|
|
38
|
-
|
|
48
|
+
try {
|
|
49
|
+
return this._req ? this._req.getRawStream() : null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
39
54
|
}
|
|
40
55
|
}
|
package/lib/sql.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export declare class Sql {
|
|
|
48
48
|
'pre'?: string;
|
|
49
49
|
'data'?: kebab.DbValue[];
|
|
50
50
|
'sql'?: string[];
|
|
51
|
+
'alias'?: string[];
|
|
51
52
|
});
|
|
52
53
|
/**
|
|
53
54
|
* --- 插入数据前导 ---
|
|
@@ -246,6 +247,7 @@ export declare function get(opt: {
|
|
|
246
247
|
'pre'?: string;
|
|
247
248
|
'data'?: kebab.DbValue[];
|
|
248
249
|
'sql'?: string[];
|
|
250
|
+
'alias'?: string[];
|
|
249
251
|
}): Sql;
|
|
250
252
|
/**
|
|
251
253
|
* --- 返回代入后的完整 SQL 字符串,这并不安全不能直接执行,只是用来调试打印 sql 语句 ---
|
package/lib/sql.js
CHANGED
|
@@ -54,6 +54,9 @@ export class Sql {
|
|
|
54
54
|
if (opt.sql) {
|
|
55
55
|
this._sql = opt.sql;
|
|
56
56
|
}
|
|
57
|
+
if (opt.alias) {
|
|
58
|
+
this._alias = opt.alias;
|
|
59
|
+
}
|
|
57
60
|
}
|
|
58
61
|
// --- 前导 ---
|
|
59
62
|
/**
|
|
@@ -756,6 +759,7 @@ export class Sql {
|
|
|
756
759
|
'pre': this._pre,
|
|
757
760
|
'data': data,
|
|
758
761
|
'sql': sql,
|
|
762
|
+
'alias': lCore.clone(this._alias),
|
|
759
763
|
});
|
|
760
764
|
}
|
|
761
765
|
// --- 操作 ---
|
|
@@ -769,7 +773,7 @@ export class Sql {
|
|
|
769
773
|
if (this._service === ESERVICE.MYSQL) {
|
|
770
774
|
return result.replace(new RegExp('`' + this._pre + item + '`', 'g'), '`' + item + '`');
|
|
771
775
|
}
|
|
772
|
-
return result.replace(new RegExp(`"${this._pre}"
|
|
776
|
+
return result.replace(new RegExp(`"${this._pre}"\\."${item}"`, 'g'), '"' + item + '"');
|
|
773
777
|
}, sql);
|
|
774
778
|
}
|
|
775
779
|
return sql;
|
package/package.json
CHANGED
package/sys/child.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Project: Kebab, User: JianSuoQiYue
|
|
3
3
|
* Date: 2019-5-3 23:54
|
|
4
|
-
* Last: 2020-3-31 15:01:07, 2020-4-9 22:28:50, 2022-07-22 14:19:46, 2022-9-29 22:11:07, 2023-5-1 18:26:57, 2024-1-12 13:32:00, 2024-3-4 16:49:19
|
|
4
|
+
* Last: 2020-3-31 15:01:07, 2020-4-9 22:28:50, 2022-07-22 14:19:46, 2022-9-29 22:11:07, 2023-5-1 18:26:57, 2024-1-12 13:32:00, 2024-3-4 16:49:19, 2026-3-8 16:21:40
|
|
5
5
|
*/
|
|
6
6
|
import * as http2 from 'http2';
|
|
7
7
|
import * as tls from 'tls';
|
|
@@ -30,6 +30,8 @@ const hbTimer = setInterval(function () {
|
|
|
30
30
|
let certList = [];
|
|
31
31
|
/** --- server: index --- */
|
|
32
32
|
let certHostIndex = {};
|
|
33
|
+
/** --- 默认证书 --- */
|
|
34
|
+
let defaultSc;
|
|
33
35
|
/** --- 最后一次加载证书到内存的时间 --- */
|
|
34
36
|
let certLastLoad = 0;
|
|
35
37
|
/** --- 当前的虚拟主机配置列表 - 读取于 conf/vhost/*.json --- */
|
|
@@ -102,6 +104,11 @@ async function run() {
|
|
|
102
104
|
certHostIndex[servername] = i;
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
107
|
+
if (defaultSc) {
|
|
108
|
+
cb(null, defaultSc);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
lCore.display(`[CHILD][SNICallback] CERT NOT FOUND for servername: ${servername}`);
|
|
105
112
|
const err = new Error('CERT NOT FOUND');
|
|
106
113
|
cb(err);
|
|
107
114
|
},
|
|
@@ -303,7 +310,7 @@ async function requestHandler(req, res, https) {
|
|
|
303
310
|
'rootPath': vhost.real + now,
|
|
304
311
|
'urlBase': '/' + now,
|
|
305
312
|
'path': path.slice(1),
|
|
306
|
-
'timer': timer
|
|
313
|
+
'timer': timer,
|
|
307
314
|
})) {
|
|
308
315
|
return;
|
|
309
316
|
}
|
|
@@ -498,6 +505,7 @@ async function reloadCert() {
|
|
|
498
505
|
// --- NOTHING ---
|
|
499
506
|
}
|
|
500
507
|
certList = cl;
|
|
508
|
+
defaultSc = cl.length > 0 ? cl[0].sc : undefined;
|
|
501
509
|
certHostIndex = {};
|
|
502
510
|
}
|
|
503
511
|
// --- 接收主进程回传信号,主要用来 reload,restart ---
|
|
@@ -577,14 +585,34 @@ function getVhostReal(root) {
|
|
|
577
585
|
* @param hostname 当前的 hostname,不带端口
|
|
578
586
|
*/
|
|
579
587
|
async function getVhostByHostname(hostname) {
|
|
580
|
-
|
|
588
|
+
/** --- 全局泛匹配(*)的对象 --- */
|
|
589
|
+
let vGlobal = null;
|
|
590
|
+
/** --- 全局泛匹配(*)的真实路径,例如 /www/wwwroot/ --- */
|
|
581
591
|
let vGlobalReal = '';
|
|
582
|
-
|
|
592
|
+
/** --- 通配符匹配(*.abc.com)的对象 --- */
|
|
593
|
+
let vSub = null;
|
|
594
|
+
/** --- 通配符匹配(*.abc.com)的真实路径,例如 /www/wwwroot/abc/ --- */
|
|
583
595
|
let vSubReal = '';
|
|
584
|
-
|
|
596
|
+
/** --- 条目循环标签 --- */
|
|
597
|
+
vhostLoop: for (const vhost of vhosts) {
|
|
585
598
|
for (let domain of vhost.domains) {
|
|
599
|
+
if (domain === hostname) {
|
|
600
|
+
// --- 完全匹配 ---
|
|
601
|
+
const real = getVhostReal(vhost.root);
|
|
602
|
+
if (await lFs.isDir(real)) {
|
|
603
|
+
return { ...vhost, real };
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
if (vSub && vGlobal) {
|
|
607
|
+
// --- 意味着已经找到了更精准的子域名匹配和全局匹配,后续所有 vhost 和 domain 无需再通过正则或磁盘 IO 进行匹配判断 ---
|
|
608
|
+
break vhostLoop;
|
|
609
|
+
}
|
|
586
610
|
if (domain === '*') {
|
|
587
611
|
// --- 全局泛匹配 ---
|
|
612
|
+
if (vGlobal) {
|
|
613
|
+
// --- 已经有了全局匹配结果,无需重复赋值,跳过后续逻辑以节省性能 ---
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
588
616
|
const real = getVhostReal(vhost.root);
|
|
589
617
|
if (await lFs.isDir(real)) {
|
|
590
618
|
vGlobal = vhost;
|
|
@@ -593,8 +621,12 @@ async function getVhostByHostname(hostname) {
|
|
|
593
621
|
}
|
|
594
622
|
else if (domain.includes('*')) {
|
|
595
623
|
// --- 通配符匹配 ---
|
|
596
|
-
|
|
597
|
-
|
|
624
|
+
if (vSub) {
|
|
625
|
+
// --- 已经存在子域名通配符匹配结果,按照优先级不再寻找其他通配符匹配,跳过正则计算 ---
|
|
626
|
+
continue;
|
|
627
|
+
}
|
|
628
|
+
const pattern = domain.replace(/\./g, '\\.').replace(/\*/g, '[\\w-]+?');
|
|
629
|
+
if (new RegExp(`^${pattern}$`).test(hostname)) {
|
|
598
630
|
const real = getVhostReal(vhost.root);
|
|
599
631
|
if (await lFs.isDir(real)) {
|
|
600
632
|
vSub = vhost;
|
|
@@ -602,13 +634,6 @@ async function getVhostByHostname(hostname) {
|
|
|
602
634
|
}
|
|
603
635
|
}
|
|
604
636
|
}
|
|
605
|
-
else if (domain === hostname) {
|
|
606
|
-
// --- 完全匹配 ---
|
|
607
|
-
const real = getVhostReal(vhost.root);
|
|
608
|
-
if (await lFs.isDir(real)) {
|
|
609
|
-
return { ...vhost, real };
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
637
|
}
|
|
613
638
|
}
|
|
614
639
|
if (vSub) {
|
package/sys/mod.js
CHANGED
|
@@ -872,7 +872,7 @@ export default class Mod {
|
|
|
872
872
|
for (let i = 0; i < this._index.length; ++i) {
|
|
873
873
|
// --- 先计算 total ---
|
|
874
874
|
if (i > 0) {
|
|
875
|
-
sql = sql.replace(/(FROM [a-zA-Z0-9`"_.]+?_)[
|
|
875
|
+
sql = sql.replace(/(FROM [a-zA-Z0-9`"_.]+?_)[\w]+/, '$1' + this._index[i]);
|
|
876
876
|
}
|
|
877
877
|
const tsql = this._formatTotal(sql);
|
|
878
878
|
const tr = await this._db.query(tsql, this._sql.getData());
|
|
@@ -911,7 +911,7 @@ export default class Mod {
|
|
|
911
911
|
'ctr': this._ctr,
|
|
912
912
|
'pre': this._sql.getPre(),
|
|
913
913
|
'row': row,
|
|
914
|
-
'index': this._index,
|
|
914
|
+
'index': this._index[i],
|
|
915
915
|
});
|
|
916
916
|
list[row[key]] = obj;
|
|
917
917
|
--remain;
|
|
@@ -924,7 +924,7 @@ export default class Mod {
|
|
|
924
924
|
'ctr': this._ctr,
|
|
925
925
|
'pre': this._sql.getPre(),
|
|
926
926
|
'row': row,
|
|
927
|
-
'index': this._index,
|
|
927
|
+
'index': this._index[i],
|
|
928
928
|
});
|
|
929
929
|
list.push(obj);
|
|
930
930
|
--remain;
|
|
@@ -942,9 +942,10 @@ export default class Mod {
|
|
|
942
942
|
return false;
|
|
943
943
|
}
|
|
944
944
|
// --- 检查没被查到的必包含项 ---
|
|
945
|
+
const containKeyStr = this._contain ? (this._contain.key.includes('.') ? this._contain.key.split('.').pop() : this._contain.key) : '';
|
|
945
946
|
for (const row of r.rows) {
|
|
946
947
|
if (this._contain && contain) {
|
|
947
|
-
const io = contain.indexOf(row[
|
|
948
|
+
const io = contain.indexOf(row[containKeyStr]);
|
|
948
949
|
if (io !== -1) {
|
|
949
950
|
contain.splice(io, 1);
|
|
950
951
|
}
|
|
@@ -1032,7 +1033,7 @@ export default class Mod {
|
|
|
1032
1033
|
for (let i = 0; i < this._index.length; ++i) {
|
|
1033
1034
|
// --- 先计算 total ---
|
|
1034
1035
|
if (i > 0) {
|
|
1035
|
-
sql = sql.replace(/(FROM [a-zA-Z0-9`"_.]+?_)[
|
|
1036
|
+
sql = sql.replace(/(FROM [a-zA-Z0-9`"_.]+?_)[\w]+/, '$1' + this._index[i]);
|
|
1036
1037
|
}
|
|
1037
1038
|
const tsql = this._formatTotal(sql);
|
|
1038
1039
|
const tr = await this._db.query(tsql, this._sql.getData());
|
|
@@ -1089,9 +1090,10 @@ export default class Mod {
|
|
|
1089
1090
|
return false;
|
|
1090
1091
|
}
|
|
1091
1092
|
// --- 检查没被查到的必包含项 ---
|
|
1093
|
+
const containKeyStr = this._contain ? (this._contain.key.includes('.') ? this._contain.key.split('.').pop() : this._contain.key) : '';
|
|
1092
1094
|
for (const row of r.rows) {
|
|
1093
1095
|
if (this._contain && contain) {
|
|
1094
|
-
const io = contain.indexOf(row[
|
|
1096
|
+
const io = contain.indexOf(row[containKeyStr]);
|
|
1095
1097
|
if (io !== -1) {
|
|
1096
1098
|
contain.splice(io, 1);
|
|
1097
1099
|
}
|
|
@@ -1155,13 +1157,13 @@ export default class Mod {
|
|
|
1155
1157
|
_formatTotal(sql, f = '*') {
|
|
1156
1158
|
const q = this._db.getService() === lDb.ESERVICE.MYSQL ? '`' : '"';
|
|
1157
1159
|
sql = sql
|
|
1158
|
-
.replace(/ LIMIT [0-9 ,]+(OFFSET [0-9]+)?/
|
|
1159
|
-
.replace(/ ORDER BY [\w`",. ]+(DESC|ASC)?/
|
|
1160
|
+
.replace(/ LIMIT [0-9 ,]+(OFFSET [0-9]+)?/ig, '')
|
|
1161
|
+
.replace(/ ORDER BY [\w`",. ]+(DESC|ASC)?/ig, '');
|
|
1160
1162
|
if (sql.includes(' GROUP BY ')) {
|
|
1161
|
-
return
|
|
1163
|
+
return `SELECT COUNT(0) AS ${q}count${q} FROM(` + sql + `) AS ${q}f${q}`;
|
|
1162
1164
|
}
|
|
1163
1165
|
return sql
|
|
1164
|
-
.replace(/SELECT .+? FROM/
|
|
1166
|
+
.replace(/SELECT .+? FROM/is, `SELECT COUNT(${this._sql.field(f)}) AS ${q}count${q} FROM`);
|
|
1165
1167
|
}
|
|
1166
1168
|
/**
|
|
1167
1169
|
* --- 获取总条数,自动抛弃 LIMIT,仅用于获取数据的情况(select) ---
|
|
@@ -1190,7 +1192,8 @@ export default class Mod {
|
|
|
1190
1192
|
* --- 根据当前条件,筛选出当前条目该有的数据条数 ---
|
|
1191
1193
|
*/
|
|
1192
1194
|
async count() {
|
|
1193
|
-
const sql = this._sql.getSql()
|
|
1195
|
+
const sql = this._sql.getSql()
|
|
1196
|
+
.replace(/SELECT .+? FROM/is, this._db.getService() === lDb.ESERVICE.MYSQL ?
|
|
1194
1197
|
'SELECT COUNT(0) AS `count` FROM' :
|
|
1195
1198
|
'SELECT COUNT(0) AS "count" FROM');
|
|
1196
1199
|
const r = await this._db.query(sql, this._sql.getData());
|
|
@@ -1208,7 +1211,8 @@ export default class Mod {
|
|
|
1208
1211
|
* --- 获取当前条件下的 count 的 SQL 语句 ---
|
|
1209
1212
|
*/
|
|
1210
1213
|
countSql() {
|
|
1211
|
-
const sql = this._sql.getSql()
|
|
1214
|
+
const sql = this._sql.getSql()
|
|
1215
|
+
.replace(/SELECT .+? FROM/is, this._db.getService() === lDb.ESERVICE.MYSQL ?
|
|
1212
1216
|
'SELECT COUNT(0) AS `count` FROM' : 'SELECT COUNT(0) AS "count" FROM');
|
|
1213
1217
|
return this._sql.format(sql, this._sql.getData());
|
|
1214
1218
|
}
|
package/www/example/ctr/test.js
CHANGED
|
@@ -106,8 +106,7 @@ export default class extends sCtr.Ctr {
|
|
|
106
106
|
`<br><a href="${this._config.const.urlBase}test/json?type=9">View "test/json?type=9"</a>`,
|
|
107
107
|
'<br><br><b>Ctr:</b>',
|
|
108
108
|
`<br><br><a href="${this._config.const.urlBase}test/ctr-xsrf">View "test/ctr-xsrf"</a>`,
|
|
109
|
-
`<br><a href="${this._config.const.urlBase}test/ctr-checkinput">View "test/ctr-checkinput"</a>`,
|
|
110
|
-
`<br><a href="${this._config.const.urlBase}test/ctr-checkinput-schema">View "test/ctr-checkinput-schema"</a>`,
|
|
109
|
+
`<br><a href="${this._config.const.urlBase}test/ctr-checkinput">View "test/ctr-checkinput"</a> <a href="${this._config.const.urlBase}test/ctr-checkinput-schema">schema</a>`,
|
|
111
110
|
`<br><a href="${this._config.const.urlBase}test/ctr-locale">View "test/ctr-locale"</a>`,
|
|
112
111
|
`<br><a href="${this._config.const.urlBase}test/ctr-cachettl">View "test/ctr-cachettl"</a>`,
|
|
113
112
|
`<br><a href="${this._config.const.urlBase}test/ctr-httpcode">View "test/ctr-httpcode"</a>`,
|
|
@@ -126,6 +125,7 @@ export default class extends sCtr.Ctr {
|
|
|
126
125
|
`<br><a href="${this._config.const.urlBase}test/mod-insert">View "test/mod-insert"</a>`,
|
|
127
126
|
`<br><a href="${this._config.const.urlBase}test/mod-upsert">View "test/mod-upsert"</a>`,
|
|
128
127
|
`<br><a href="${this._config.const.urlBase}test/mod-update-list">View "test/mod-update-list"</a>`,
|
|
128
|
+
`<br><a href="${this._config.const.urlBase}test/mod-contain">View "test/mod-contain"</a>`,
|
|
129
129
|
'<br><br><b>Library test:</b>',
|
|
130
130
|
`<br><br><b>Ai:</b>`,
|
|
131
131
|
`<br><a href="${this._config.const.urlBase}test/ai-stream">View "test/ai-stream"</a>`,
|
|
@@ -1028,6 +1028,32 @@ const res2 = await test2.upsert('name');</pre>Result: ${res2}<br><br>`);
|
|
|
1028
1028
|
});
|
|
1029
1029
|
return echo.join('') + '<br>' + this._getEnd();
|
|
1030
1030
|
}
|
|
1031
|
+
async modContain() {
|
|
1032
|
+
const echo = ['<b style="color: red;">In a production environment, please delete "mod/test.ts" and "mod/testdata.ts" files.</b>'];
|
|
1033
|
+
const db = this._get['s'] === 'pgsql' ? lDb.get(this, {
|
|
1034
|
+
'service': lDb.ESERVICE.PGSQL,
|
|
1035
|
+
}) : lDb.get(this);
|
|
1036
|
+
echo.push('<br><br><b>Testing mod.contain with leftJoin and AS clauses:</b><br>');
|
|
1037
|
+
const pre = this._get['s'] === 'pgsql' ? 'm' : undefined;
|
|
1038
|
+
const q = mTest.select(db, [
|
|
1039
|
+
'a.id', 'a.name', 'a.token', 'g.content', 'a.time_add'
|
|
1040
|
+
], {
|
|
1041
|
+
'ctr': this,
|
|
1042
|
+
'alias': 'a',
|
|
1043
|
+
'contain': {
|
|
1044
|
+
'key': 'a.token',
|
|
1045
|
+
'list': ['ul_token_0', 'ul_token_1']
|
|
1046
|
+
},
|
|
1047
|
+
'pre': pre,
|
|
1048
|
+
}).leftJoin('testdata g', {
|
|
1049
|
+
'a.id': mTest.column('g.test_id')
|
|
1050
|
+
}, undefined, pre).limit(2);
|
|
1051
|
+
echo.push(`<pre><b>SQL generated:</b>\n<code>${q.getSql()}</code></pre>`);
|
|
1052
|
+
const rows = await q.allArray('id');
|
|
1053
|
+
echo.push('<b>Result Data:</b>');
|
|
1054
|
+
echo.push(`<pre><code>${lText.stringifyJson(rows, 4)}</code></pre>`);
|
|
1055
|
+
return echo.join('') + '<br>' + this._getEnd();
|
|
1056
|
+
}
|
|
1031
1057
|
captchaFastbuild() {
|
|
1032
1058
|
return lCaptcha.get(400, 100).getBuffer();
|
|
1033
1059
|
}
|