@@ -17,6 +17,7 @@ if (typeof window == 'undefined') {
17
17
eval ( `
18
18
var StringUtil = require("./StringUtil");
19
19
var JSONObject = require("./JSONObject");
20
+ var JSON5 = require('json5');
20
21
` )
21
22
} catch ( e ) {
22
23
console . log ( e )
@@ -28,23 +29,42 @@ if (typeof window == 'undefined') {
28
29
*/
29
30
var CodeUtil = {
30
31
TAG : 'CodeUtil' ,
32
+ APP_NAME : 'APIAuto' ,
33
+ DIVIDER : '/' ,
31
34
32
35
LANGUAGE_KOTLIN : 'Kotlin' ,
33
36
LANGUAGE_JAVA : 'Java' ,
34
37
LANGUAGE_C_SHARP : 'C#' ,
35
-
36
38
LANGUAGE_SWIFT : 'Swift' ,
37
39
LANGUAGE_OBJECTIVE_C : 'Objective-C' ,
38
-
39
40
LANGUAGE_GO : 'Go' ,
40
41
LANGUAGE_C_PLUS_PLUS : 'C++' ,
41
-
42
42
LANGUAGE_TYPE_SCRIPT : 'TypeScript' ,
43
43
LANGUAGE_JAVA_SCRIPT : 'JavaScript' ,
44
-
45
44
LANGUAGE_PHP : 'PHP' ,
46
45
LANGUAGE_PYTHON : 'Python' ,
47
46
47
+ DATABASE_MYSQL : 'MYSQL' ,
48
+ DATABASE_POSTGRESQL : 'POSTGRESQL' ,
49
+ DATABASE_SQLITE : 'SQLITE' ,
50
+ DATABASE_ORACLE : 'ORACLE' ,
51
+ DATABASE_SQLSERVER : 'SQLSERVER' ,
52
+ DATABASE_DB2 : 'DB2' ,
53
+ DATABASE_DAMENG : 'DAMENG' ,
54
+ DATABASE_KINGBASE : 'KINGBASE' ,
55
+ DATABASE_TIDB : 'TIDB' ,
56
+ DATABASE_TDENGINE : 'TDENGINE' ,
57
+ DATABASE_NEBULA : 'NEBULA' ,
58
+ DATABASE_PRESTO : 'PRESTO' ,
59
+ DATABASE_TRINO : 'TRINO' ,
60
+ DATABASE_INFLUXDB : 'INFLUXDB' ,
61
+ DATABASE_CLICKHOUSE : 'CLICKHOUSE' ,
62
+ DATABASE_ELASTICSEARCH : 'ELASTICSEARCH' ,
63
+ DATABASE_REDIS : 'REDIS' ,
64
+ DATABASE_KAFKA : 'KAFKA' ,
65
+ DATABASE_MARIADB : 'MARIADB' ,
66
+ DATABASE_HIVE : 'HIVE' ,
67
+
48
68
type : 'JSON' ,
49
69
database : 'MYSQL' ,
50
70
schema : 'sys' ,
@@ -66,13 +86,13 @@ var CodeUtil = {
66
86
*/
67
87
parseComment : function ( reqStr , tableList , method , database , language , isReq , standardObj , isExtract , isWarning , isAPIJSONRouter ) { //怎么都获取不到真正的长度,cols不行,默认20不变,maxLineLength不行,默认undefined不变 , maxLineLength) {
68
88
if ( StringUtil . isEmpty ( reqStr ) ) {
69
- return '' ;
89
+ return ;
70
90
}
71
91
72
92
var reqObj = JSON5 . parse ( reqStr ) ;
73
93
74
94
var methodInfo = JSONObject . parseUri ( method , isReq ) || { } ;
75
- var method = methodInfo . method ;
95
+ method = methodInfo . method ;
76
96
var isRestful = methodInfo . isRestful ;
77
97
var tag = methodInfo . tag ;
78
98
var startName = methodInfo . table ;
@@ -95,18 +115,21 @@ var CodeUtil = {
95
115
}
96
116
} ;
97
117
118
+ var cc = isRestful == true ? '//' : ' //' ; // 对 APIJSON API 要求严格些,因为本来就有字段注释
119
+ var ccLen = cc . length ;
120
+
98
121
for ( var i = 0 ; i < lines . length ; i ++ ) {
99
122
var line = lines [ i ] . trim ( ) || '' ;
100
123
101
124
//每一种都要提取:左边的key
102
125
var index = line . indexOf ( ': ' ) ; //可能是 ' 或 ",所以不好用 ': , ": 判断
103
126
var key = index < 0 ? ( depth <= 1 && startName != null ? startName : '' ) : line . substring ( 1 , index - 1 ) ;
104
- var cIndex = line . indexOf ( ' //' ) ;
127
+ var cIndex = line . lastIndexOf ( cc ) ;
105
128
106
129
var comment = '' ;
107
130
if ( cIndex >= 0 ) {
108
131
if ( isExtract && standardObj != null && ( depth != 1 || ( key != 'code' && key != 'throw' ) ) ) {
109
- comment = line . substring ( cIndex + ' //' . length ) . trim ( ) ;
132
+ comment = line . substring ( cIndex + ccLen ) . trim ( ) ;
110
133
// standardObj = CodeUtil.updateStandardPart(standardObj, names, key, value, comment)
111
134
}
112
135
@@ -695,12 +718,12 @@ var CodeUtil = {
695
718
696
719
url = url || '' ;
697
720
698
- var lastIndex = url . lastIndexOf ( '/' ) ;
721
+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
699
722
var methodUri = url ; // lastIndex < 0 ? url : url.substring(lastIndex);
700
723
var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
701
724
702
725
url = url . substring ( 0 , lastIndex ) ;
703
- lastIndex = url . lastIndexOf ( '/' ) ;
726
+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
704
727
var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
705
728
var modelName = StringUtil . firstCase ( varName , true ) ;
706
729
@@ -1042,12 +1065,12 @@ var CodeUtil = {
1042
1065
1043
1066
url = url || '' ;
1044
1067
1045
- var lastIndex = url . lastIndexOf ( '/' ) ;
1068
+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
1046
1069
var methodUri = url ; // lastIndex < 0 ? url : url.substring(lastIndex);
1047
1070
var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
1048
1071
1049
1072
url = url . substring ( 0 , lastIndex ) ;
1050
- lastIndex = url . lastIndexOf ( '/' ) ;
1073
+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
1051
1074
var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
1052
1075
var modelName = StringUtil . firstCase ( varName , true ) ;
1053
1076
@@ -3008,7 +3031,7 @@ var CodeUtil = {
3008
3031
}
3009
3032
}
3010
3033
3011
- return '? = null' + ( isSmart ? '' : ' //' + CodeUtil . initEmptyValue4Type ( type , true , isKotlin ) ) ;
3034
+ return '? = null' + ( isSmart ? '' : ' //' + CodeUtil . initEmptyValue4Type ( type , true , isKotlin ) ) ;
3012
3035
} ,
3013
3036
3014
3037
getCode4JavaArgValues : function ( reqObj , useVar4ComplexValue ) {
@@ -3291,12 +3314,12 @@ var CodeUtil = {
3291
3314
3292
3315
url = url || '' ;
3293
3316
3294
- var lastIndex = url . lastIndexOf ( '/' ) ;
3317
+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
3295
3318
var methodUri = lastIndex < 0 ? url : url . substring ( lastIndex ) ;
3296
3319
var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
3297
3320
3298
3321
url = url . substring ( 0 , lastIndex ) ;
3299
- lastIndex = url . lastIndexOf ( '/' ) ;
3322
+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
3300
3323
var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
3301
3324
var modelName = StringUtil . firstCase ( varName , true ) ;
3302
3325
@@ -3829,7 +3852,7 @@ var CodeUtil = {
3829
3852
3830
3853
3831
3854
doc += '/**'
3832
- + '\n *APIAuto 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/APIAuto'
3855
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
3833
3856
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
3834
3857
+ '\n */'
3835
3858
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -3948,7 +3971,7 @@ var CodeUtil = {
3948
3971
3949
3972
3950
3973
doc += '/**'
3951
- + '\n *APIAuto 自动生成 C++ Struct\n *主页: https://github.com/TommyLemon/APIAuto'
3974
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 C++ Struct\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
3952
3975
+ '\n *使用方法:\n *1.修改包名 namespace \n *2.#include 需要引入的类,可使用快捷键 Ctrl+Shift+O '
3953
3976
+ '\n */\n'
3954
3977
+ '\n#include <string>'
@@ -4066,7 +4089,7 @@ var CodeUtil = {
4066
4089
4067
4090
4068
4091
doc += '/**'
4069
- + '\n *APIAuto 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/APIAuto'
4092
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4070
4093
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4071
4094
+ '\n */'
4072
4095
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -4187,7 +4210,7 @@ var CodeUtil = {
4187
4210
4188
4211
doc += '<?php'
4189
4212
+ '\n/**'
4190
- + '\n *APIAuto 自动生成 PHP 实体类代码\n *主页: https://github.com/TommyLemon/APIAuto'
4213
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 PHP 实体类代码\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4191
4214
+ '\n *使用方法:\n *1.修改包名 namespace \n *2.use 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4192
4215
+ '\n */'
4193
4216
+ '\n\nnamespace apijson\\demo\\server\\model;\n\n\n'
@@ -4306,7 +4329,7 @@ var CodeUtil = {
4306
4329
4307
4330
4308
4331
doc += '/**'
4309
- + '\n *APIAuto 自动生成 JavaBean \n *主页: https://github.com/TommyLemon/APIAuto'
4332
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 Go struct \n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4310
4333
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4311
4334
+ '\n */'
4312
4335
+ '\npackage model\n\n\n'
@@ -4389,7 +4412,7 @@ var CodeUtil = {
4389
4412
4390
4413
4391
4414
doc += '/**'
4392
- + '\n *APIAuto 自动生成 C# Bean\n *主页: https://github.com/TommyLemon/APIAuto'
4415
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 C# Bean\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4393
4416
+ '\n *使用方法:\n *1.修改包名 namespace \n *2. using 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4394
4417
+ '\n */\n'
4395
4418
+ '\nnamespace apijson.demo.server.model'
@@ -4482,7 +4505,7 @@ var CodeUtil = {
4482
4505
4483
4506
4484
4507
doc += '/**'
4485
- + '\n *APIAuto 自动生成 TypeScript Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4508
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 TypeScript Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4486
4509
+ '\n */\n\n\n'
4487
4510
+ CodeUtil . getComment ( database != 'POSTGRESQL' ? table . table_comment : ( item . PgClass || { } ) . table_comment , true )
4488
4511
+ '\n@MethodAccess'
@@ -4565,7 +4588,7 @@ var CodeUtil = {
4565
4588
4566
4589
4567
4590
doc += '/**'
4568
- + '\n *APIAuto 自动生成 Python Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4591
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 Python Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4569
4592
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4570
4593
+ '\n */'
4571
4594
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -4679,7 +4702,7 @@ var CodeUtil = {
4679
4702
4680
4703
4681
4704
doc += '/**'
4682
- + '\n *APIAuto 自动生成 Swift Struct\n *主页: https://github.com/TommyLemon/APIAuto'
4705
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 Swift Struct\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4683
4706
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4684
4707
+ '\n */'
4685
4708
+ '\npackage apijson.demo.server.model\n\n\n'
@@ -4756,7 +4779,7 @@ var CodeUtil = {
4756
4779
4757
4780
4758
4781
doc += '/**'
4759
- + '\n *APIAuto 自动生成 JavaScript Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4782
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 JavaScript Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4760
4783
+ '\n */\n\n\n'
4761
4784
+ CodeUtil . getComment ( database != 'POSTGRESQL' ? table . table_comment : ( item . PgClass || { } ) . table_comment , true )
4762
4785
+ '\n@MethodAccess'
@@ -4850,7 +4873,7 @@ var CodeUtil = {
4850
4873
4851
4874
4852
4875
doc += '/**'
4853
- + '\n *APIAuto 自动生成 Kotlin Data Class\n *主页: https://github.com/TommyLemon/APIAuto'
4876
+ + '\n *' + CodeUtil . APP_NAME + ' 自动生成 Kotlin Data Class\n *主页: https://github.com/TommyLemon/' + CodeUtil . APP_NAME
4854
4877
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
4855
4878
+ '\n */'
4856
4879
+ '\npackage apijson.demo.server.model\n\n\n'
@@ -5878,7 +5901,7 @@ var CodeUtil = {
5878
5901
OWNER : '拥有者' ,
5879
5902
ADMIN : '管理员'
5880
5903
} ,
5881
- DATABASE_KEYS : [ 'MYSQL' , 'POSTGRESQL' , 'SQLSERVER' , 'ORACLE' , 'DB2' , 'DAMENG' , 'CLICKHOUSE ' , 'SQLITE' , 'TDENGINE' ] ,
5904
+ DATABASE_KEYS : [ 'MYSQL' , 'POSTGRESQL' , 'SQLSERVER' , 'ORACLE' , 'DB2' , 'DAMENG' , 'KINGBASE ' , 'MARIADB' , ' SQLITE', 'INFLUXDB' , ' TDENGINE' , 'PRESTO' , 'TRINO' , 'HIVE' , 'TIDB' , 'CLICKHOUSE' , 'ELASTICSEARCH' , 'REDIS' ] , // , 'KAFKA '],
5882
5905
5883
5906
getComment4Function : function ( funCallStr , method , language ) {
5884
5907
if ( typeof funCallStr != 'string' ) {
@@ -6667,6 +6690,44 @@ var CodeUtil = {
6667
6690
}
6668
6691
else {
6669
6692
//功能符 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
6693
+
6694
+ if ( columnName . endsWith ( "()" ) ) { //方法,查询完后处理,先用一个Map<key,function>保存?
6695
+ if ( [ 'GET' , 'HEAD' ] . indexOf ( method ) < 0 ) {
6696
+ return ' ! 远程函数只能用于 GET,HEAD 请求!!' ;
6697
+ }
6698
+
6699
+ if ( value != null && valuesIsNotString ) {
6700
+ return ' ! value必须是String类型!' ;
6701
+ }
6702
+ if ( value != null ) {
6703
+ var startIndex = value . indexOf ( "(" ) ;
6704
+ if ( startIndex <= 0 || value . endsWith ( ")" ) == false ) {
6705
+ return ' ! value必须符合 fun(arg0,arg1..) 这种格式!且不要有任何多余的空格!' ;
6706
+ }
6707
+ var fun = value . substring ( 0 , startIndex ) ;
6708
+ if ( StringUtil . isName ( fun ) != true ) {
6709
+ return '! 函数名' + fun + '不合法!value必须符合 fun(arg0,arg1..) 这种格式!且不要有任何多余的空格!' ;
6710
+ }
6711
+ }
6712
+
6713
+ if ( isWarning ) {
6714
+ return ' ' ;
6715
+ }
6716
+
6717
+ var priority = '' ;
6718
+ if ( columnName . endsWith ( "-()" ) ) {
6719
+ priority = ' < 在解析所在对象前优先执行' ;
6720
+ }
6721
+ else if ( columnName . endsWith ( "+()" ) ) {
6722
+ priority = ' < 在解析所在对象后滞后执行' ;
6723
+ }
6724
+ else {
6725
+ priority = ',执行时机在解析所在对象后,解析子对象前,可以在 () 前用 + - 设置优先级,例如 key-() 优先执行' ;
6726
+ }
6727
+
6728
+ return '远程函数' + ( isValueNotEmpty ? ',触发调用后端对应的方法/函数' + priority : ',例如 "isContain(praiseUserIdList,userId)"' ) ;
6729
+ }
6730
+
6670
6731
var hasAt = false ;
6671
6732
if ( columnName . endsWith ( "@" ) ) { //引用,引用对象查询完后处理。fillTarget中暂时不用处理,因为非GET请求都是由给定的id确定,不需要引用
6672
6733
// 没传 value 进来,不好解析,而且太长导致后面的字段属性被遮住
0 commit comments