@@ -17,6 +17,7 @@ if (typeof window == 'undefined') {
1717 eval ( `
1818 var StringUtil = require("./StringUtil");
1919 var JSONObject = require("./JSONObject");
20+ var JSON5 = require('json5');
2021 ` )
2122 } catch ( e ) {
2223 console . log ( e )
@@ -28,23 +29,42 @@ if (typeof window == 'undefined') {
2829 */
2930var CodeUtil = {
3031 TAG : 'CodeUtil' ,
32+ APP_NAME : 'APIAuto' ,
33+ DIVIDER : '/' ,
3134
3235 LANGUAGE_KOTLIN : 'Kotlin' ,
3336 LANGUAGE_JAVA : 'Java' ,
3437 LANGUAGE_C_SHARP : 'C#' ,
35-
3638 LANGUAGE_SWIFT : 'Swift' ,
3739 LANGUAGE_OBJECTIVE_C : 'Objective-C' ,
38-
3940 LANGUAGE_GO : 'Go' ,
4041 LANGUAGE_C_PLUS_PLUS : 'C++' ,
41-
4242 LANGUAGE_TYPE_SCRIPT : 'TypeScript' ,
4343 LANGUAGE_JAVA_SCRIPT : 'JavaScript' ,
44-
4544 LANGUAGE_PHP : 'PHP' ,
4645 LANGUAGE_PYTHON : 'Python' ,
4746
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+
4868 type : 'JSON' ,
4969 database : 'MYSQL' ,
5070 schema : 'sys' ,
@@ -66,13 +86,13 @@ var CodeUtil = {
6686 */
6787 parseComment : function ( reqStr , tableList , method , database , language , isReq , standardObj , isExtract , isWarning , isAPIJSONRouter ) { //怎么都获取不到真正的长度,cols不行,默认20不变,maxLineLength不行,默认undefined不变 , maxLineLength) {
6888 if ( StringUtil . isEmpty ( reqStr ) ) {
69- return '' ;
89+ return ;
7090 }
7191
7292 var reqObj = JSON5 . parse ( reqStr ) ;
7393
7494 var methodInfo = JSONObject . parseUri ( method , isReq ) || { } ;
75- var method = methodInfo . method ;
95+ method = methodInfo . method ;
7696 var isRestful = methodInfo . isRestful ;
7797 var tag = methodInfo . tag ;
7898 var startName = methodInfo . table ;
@@ -95,18 +115,21 @@ var CodeUtil = {
95115 }
96116 } ;
97117
118+ var cc = isRestful == true ? '//' : ' //' ; // 对 APIJSON API 要求严格些,因为本来就有字段注释
119+ var ccLen = cc . length ;
120+
98121 for ( var i = 0 ; i < lines . length ; i ++ ) {
99122 var line = lines [ i ] . trim ( ) || '' ;
100123
101124 //每一种都要提取:左边的key
102125 var index = line . indexOf ( ': ' ) ; //可能是 ' 或 ",所以不好用 ': , ": 判断
103126 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 ) ;
105128
106129 var comment = '' ;
107130 if ( cIndex >= 0 ) {
108131 if ( isExtract && standardObj != null && ( depth != 1 || ( key != 'code' && key != 'throw' ) ) ) {
109- comment = line . substring ( cIndex + ' //' . length ) . trim ( ) ;
132+ comment = line . substring ( cIndex + ccLen ) . trim ( ) ;
110133 // standardObj = CodeUtil.updateStandardPart(standardObj, names, key, value, comment)
111134 }
112135
@@ -695,12 +718,12 @@ var CodeUtil = {
695718
696719 url = url || '' ;
697720
698- var lastIndex = url . lastIndexOf ( '/' ) ;
721+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
699722 var methodUri = url ; // lastIndex < 0 ? url : url.substring(lastIndex);
700723 var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
701724
702725 url = url . substring ( 0 , lastIndex ) ;
703- lastIndex = url . lastIndexOf ( '/' ) ;
726+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
704727 var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
705728 var modelName = StringUtil . firstCase ( varName , true ) ;
706729
@@ -1042,12 +1065,12 @@ var CodeUtil = {
10421065
10431066 url = url || '' ;
10441067
1045- var lastIndex = url . lastIndexOf ( '/' ) ;
1068+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
10461069 var methodUri = url ; // lastIndex < 0 ? url : url.substring(lastIndex);
10471070 var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
10481071
10491072 url = url . substring ( 0 , lastIndex ) ;
1050- lastIndex = url . lastIndexOf ( '/' ) ;
1073+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
10511074 var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
10521075 var modelName = StringUtil . firstCase ( varName , true ) ;
10531076
@@ -3008,7 +3031,7 @@ var CodeUtil = {
30083031 }
30093032 }
30103033
3011- return '? = null' + ( isSmart ? '' : ' //' + CodeUtil . initEmptyValue4Type ( type , true , isKotlin ) ) ;
3034+ return '? = null' + ( isSmart ? '' : ' //' + CodeUtil . initEmptyValue4Type ( type , true , isKotlin ) ) ;
30123035 } ,
30133036
30143037 getCode4JavaArgValues : function ( reqObj , useVar4ComplexValue ) {
@@ -3291,12 +3314,12 @@ var CodeUtil = {
32913314
32923315 url = url || '' ;
32933316
3294- var lastIndex = url . lastIndexOf ( '/' ) ;
3317+ var lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
32953318 var methodUri = lastIndex < 0 ? url : url . substring ( lastIndex ) ;
32963319 var methodName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
32973320
32983321 url = url . substring ( 0 , lastIndex ) ;
3299- lastIndex = url . lastIndexOf ( '/' ) ;
3322+ lastIndex = url . lastIndexOf ( CodeUtil . DIVIDER ) ;
33003323 var varName = JSONResponse . getVariableName ( lastIndex < 0 ? url : url . substring ( lastIndex + 1 ) ) ;
33013324 var modelName = StringUtil . firstCase ( varName , true ) ;
33023325
@@ -3829,7 +3852,7 @@ var CodeUtil = {
38293852
38303853
38313854 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
38333856 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
38343857 + '\n */'
38353858 + '\npackage apijson.demo.server.model;\n\n\n'
@@ -3948,7 +3971,7 @@ var CodeUtil = {
39483971
39493972
39503973 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
39523975 + '\n *使用方法:\n *1.修改包名 namespace \n *2.#include 需要引入的类,可使用快捷键 Ctrl+Shift+O '
39533976 + '\n */\n'
39543977 + '\n#include <string>'
@@ -4066,7 +4089,7 @@ var CodeUtil = {
40664089
40674090
40684091 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
40704093 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
40714094 + '\n */'
40724095 + '\npackage apijson.demo.server.model;\n\n\n'
@@ -4187,7 +4210,7 @@ var CodeUtil = {
41874210
41884211 doc += '<?php'
41894212 + '\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
41914214 + '\n *使用方法:\n *1.修改包名 namespace \n *2.use 需要引入的类,可使用快捷键 Ctrl+Shift+O '
41924215 + '\n */'
41934216 + '\n\nnamespace apijson\\demo\\server\\model;\n\n\n'
@@ -4306,7 +4329,7 @@ var CodeUtil = {
43064329
43074330
43084331 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
43104333 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
43114334 + '\n */'
43124335 + '\npackage model\n\n\n'
@@ -4389,7 +4412,7 @@ var CodeUtil = {
43894412
43904413
43914414 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
43934416 + '\n *使用方法:\n *1.修改包名 namespace \n *2. using 需要引入的类,可使用快捷键 Ctrl+Shift+O '
43944417 + '\n */\n'
43954418 + '\nnamespace apijson.demo.server.model'
@@ -4482,7 +4505,7 @@ var CodeUtil = {
44824505
44834506
44844507 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
44864509 + '\n */\n\n\n'
44874510 + CodeUtil . getComment ( database != 'POSTGRESQL' ? table . table_comment : ( item . PgClass || { } ) . table_comment , true )
44884511 + '\n@MethodAccess'
@@ -4565,7 +4588,7 @@ var CodeUtil = {
45654588
45664589
45674590 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
45694592 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
45704593 + '\n */'
45714594 + '\npackage apijson.demo.server.model;\n\n\n'
@@ -4679,7 +4702,7 @@ var CodeUtil = {
46794702
46804703
46814704 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
46834706 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
46844707 + '\n */'
46854708 + '\npackage apijson.demo.server.model\n\n\n'
@@ -4756,7 +4779,7 @@ var CodeUtil = {
47564779
47574780
47584781 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
47604783 + '\n */\n\n\n'
47614784 + CodeUtil . getComment ( database != 'POSTGRESQL' ? table . table_comment : ( item . PgClass || { } ) . table_comment , true )
47624785 + '\n@MethodAccess'
@@ -4850,7 +4873,7 @@ var CodeUtil = {
48504873
48514874
48524875 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
48544877 + '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
48554878 + '\n */'
48564879 + '\npackage apijson.demo.server.model\n\n\n'
@@ -5878,7 +5901,7 @@ var CodeUtil = {
58785901 OWNER : '拥有者' ,
58795902 ADMIN : '管理员'
58805903 } ,
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 '],
58825905
58835906 getComment4Function : function ( funCallStr , method , language ) {
58845907 if ( typeof funCallStr != 'string' ) {
@@ -6667,6 +6690,44 @@ var CodeUtil = {
66676690 }
66686691 else {
66696692 //功能符 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
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+
66706731 var hasAt = false ;
66716732 if ( columnName . endsWith ( "@" ) ) { //引用,引用对象查询完后处理。fillTarget中暂时不用处理,因为非GET请求都是由给定的id确定,不需要引用
66726733 // 没传 value 进来,不好解析,而且太长导致后面的字段属性被遮住
0 commit comments