387387 if ( theRequest == null ) {
388388 theRequest = { } ;
389389 }
390- theRequest [ part . substring ( 0 , ind ) ] = decodeURIComponent ( part . substring ( ind + 1 ) ) ;
390+
391+ var v = decodeURIComponent ( part . substring ( ind + 1 ) ) ;
392+ try {
393+ v = JSON . parse ( v )
394+ }
395+ catch ( e ) { }
396+
397+ theRequest [ part . substring ( 0 , ind ) ] = v ;
391398 }
392399
393400 return theRequest ;
623630 isRegister : false ,
624631 isCrossEnabled : false ,
625632 isMLEnabled : false ,
626- isDelegateEnabled : false ,
633+ isDelegateEnabled : true ,
627634 isPreviewEnabled : false ,
628635 isEncodeEnabled : true ,
629636 isEditResponse : false ,
653660 host : '' ,
654661 database : 'MYSQL' , // 查文档必须,除非后端提供默认配置接口 // 用后端默认的,避免用户总是没有配置就问为什么没有生成文档和注释 'MYSQL',// 'POSTGRESQL',
655662 schema : 'sys' , // 查文档必须,除非后端提供默认配置接口 // 用后端默认的,避免用户总是没有配置就问为什么没有生成文档和注释 'sys',
656- server : 'http://localhost:8080' , // Chrome 90+ 跨域问题非常难搞,开发模式启动都不行了 'http://apijson.org:9090', //apijson.cn
663+ server : 'http://localhost:8080' , // 'http://apijson.cn:9090', // Chrome 90+ 跨域问题非常难搞,开发模式启动都不行了 'http://apijson.org:9090', //apijson.cn
657664 // server: 'http://47.74.39.68:9090', // apijson.org
658665 thirdParty : 'SWAGGER /v2/api-docs' , //apijson.cn
659666 // thirdParty: 'RAP /repository/joined /repository/get',
34723479 var url = StringUtil . get ( vUrl . value )
34733480 var index = url . indexOf ( '?' )
34743481 if ( index >= 0 ) {
3475- var params = StringUtil . split ( url . substring ( index + 1 ) , '&' )
3476-
3477- var paramObj = { }
3478- var p
3479- var v
3480- var ind
3481- if ( params != null ) {
3482- for ( var i = 0 ; i < params . length ; i ++ ) {
3483- p = params [ i ]
3484- ind = p == null ? - 1 : p . indexOf ( '=' )
3485- if ( ind < 0 ) {
3486- continue
3487- }
3488-
3489- v = p . substring ( ind + 1 )
3490- try {
3491- v = JSON . parse ( v )
3482+ var paramObj = getRequestFromURL ( url . substring ( index ) )
3483+ vUrl . value = url . substring ( 0 , index )
3484+ if ( paramObj != null && $ . isEmptyObject ( paramObj ) == false ) {
3485+ var originVal = this . getRequest ( vInput . value , { } ) ;
3486+ var isConflict = false ;
3487+
3488+ if ( $ . isEmptyObject ( originVal ) == false ) {
3489+ for ( var k in paramObj ) {
3490+ if ( originVal . hasOwnProperty ( k ) ) {
3491+ isConflict = true ;
3492+ break ;
3493+ }
34923494 }
3493- catch ( e ) { }
3494-
3495- paramObj [ p . substring ( 0 , ind ) ] = v
34963495 }
3497- }
34983496
3499- vUrl . value = url . substring ( 0 , index )
3500- if ( $ . isEmptyObject ( paramObj ) == false ) {
3501- vInput . value = '// TODO 从 URL 上的参数转换过来:\n' + JSON . stringify ( paramObj , null , ' ' ) + '\n// FIXME 需要与下面原来的字段合并为一个 JSON:\n' + StringUtil . get ( vInput . value )
3497+ if ( isConflict ) {
3498+ vInput . value = JSON . stringify ( paramObj , null , ' ' ) + '\n\n// FIXME 从 URL 上的参数转换过来,需要与下面原来的字段合并为一个 JSON:\n\n' + StringUtil . get ( vInput . value )
3499+ }
3500+ else {
3501+ vInput . value = JSON . stringify ( Object . assign ( originVal , paramObj ) , null , ' ' )
3502+ }
35023503 }
35033504 clearTimeout ( handler ) //解决 vUrl.value 和 vInput.value 变化导致刷新,而且会把 vInput.value 重置,加上下面 onChange 再刷新就卡死了
35043505 }
@@ -3798,86 +3799,106 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
37983799 var selectionStart = target . selectionStart ;
37993800 var selectionEnd = target . selectionEnd ;
38003801
3801- if ( ( selectionStart <= 0 && selectionEnd >= StringUtil . get ( target . value ) . length ) || StringUtil . isEmpty ( target . value , true ) ) {
3802- if ( target == vUrl ) { //TODO 把 Chrome 或 Charles 等抓到的 Header 和 Content 自动粘贴到 vUrl, vHeader
3802+ if ( StringUtil . isNotEmpty ( paste , true ) && ( StringUtil . isEmpty ( target . value , true )
3803+ || selectionStart <= 0 && selectionEnd >= StringUtil . get ( target . value ) . length ) ) {
3804+ if ( target == vUrl ) { // TODO 把 Chrome 或 Charles 等抓到的 Response Header 和 Content 自动粘贴到 vUrl, vHeader
38033805 try {
3804- var contentStart = 0 ;
3805- var lines = StringUtil . split ( paste , '\n' ) ;
3806- var header = '' ;
3807-
3808- for ( var i = 0 ; i < lines . length ; i ++ ) {
3809- var l = StringUtil . trim ( lines [ i ] ) ;
3810- ind = l . indexOf ( ':' ) ;
3811- var left = ind < 0 ? '' : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
3812-
3813- if ( / ^ [ a - z A - Z 0 - 9 \- ] + $ / g. test ( left ) ) {
3814- var lowerKey = left . toLowerCase ( ) ;
3815- var value = l . substring ( ind + 1 ) ;
3816-
3817- if ( lowerKey == 'request method' ) {
3818- value = StringUtil . trim ( value ) . toUpperCase ( ) ;
3819- this . type = value == 'GET' ? 'PARAM' : ( value == 'POST' ? 'JSON' : value ) ;
3820- event . preventDefault ( ) ;
3821- }
3822- else if ( lowerKey == 'content-type' ) {
3823- var type = vType . value != 'JSON' ? null : CONTENT_VALUE_TYPE_MAP [ StringUtil . trim ( value ) ] ;
3824- if ( StringUtil . isEmpty ( type , true ) != true ) {
3825- this . type = type ;
3806+ if ( paste . trim ( ) . indexOf ( '\n' ) > 0 ) { // 解决正常的 URL 都粘贴不了
3807+ var contentStart = 0 ;
3808+ var lines = StringUtil . split ( paste , '\n' ) ;
3809+ var header = '' ;
3810+
3811+ for ( var i = 0 ; i < lines . length ; i ++ ) {
3812+ var l = StringUtil . trim ( lines [ i ] ) ;
3813+ var ind = l . indexOf ( ':' ) ;
3814+ var left = ind < 0 ? '' : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
3815+
3816+ if ( / ^ [ a - z A - Z 0 - 9 \- ] + $ / g. test ( left ) ) {
3817+ var lowerKey = left . toLowerCase ( ) ;
3818+ var value = l . substring ( ind + 1 ) . trim ( ) ;
3819+
3820+ if ( lowerKey == 'host' ) {
3821+ this . setBaseUrl ( value . endsWith ( ':443' ) ? 'https://' + value . substring ( 0 , value . length - ':443' . length ) : 'http://' + value ) ;
38263822 event . preventDefault ( ) ;
38273823 }
3828- }
3829- else if ( lowerKey == 'request url' ) {
3830- vUrl . value = StringUtil . trim ( value ) ;
3831- event . preventDefault ( ) ;
3832- }
3833- else if ( StringUtil . isEmpty ( lowerKey , true ) || lowerKey . startsWith ( 'accept-' )
3834- || lowerKey . startsWith ( 'access-control-' ) || IGNORE_HEADERS . indexOf ( lowerKey ) >= 0 ) {
3835- // 忽略
3836- }
3837- else {
3838- header += '\n' + left + ': ' + StringUtil . trim ( l . substring ( ind + 1 ) ) ;
3839- }
3840-
3841- contentStart += lines [ i ] . length + 1 ;
3842- }
3843- else {
3844- if ( l . startsWith ( 'HTTP/' ) || l . startsWith ( 'HTTPS/' ) ) { // HTTP/1.1 200
3845- contentStart += lines [ i ] . length + 1 ;
3846- continue ;
3847- }
3824+ else if ( lowerKey == 'request method' ) {
3825+ value = value . toUpperCase ( ) ;
3826+ this . type = value == 'GET' ? 'PARAM' : ( value == 'POST' ? 'JSON' : value ) ;
3827+ event . preventDefault ( ) ;
3828+ }
3829+ else if ( lowerKey == 'content-type' ) {
3830+ var type = vType . value != 'JSON' ? null : CONTENT_VALUE_TYPE_MAP [ value ] ;
3831+ if ( StringUtil . isEmpty ( type , true ) != true ) {
3832+ this . type = type ;
3833+ event . preventDefault ( ) ;
3834+ }
3835+ }
3836+ else if ( lowerKey == 'request url' ) {
3837+ vUrl . value = value ;
3838+ event . preventDefault ( ) ;
3839+ }
3840+ else if ( StringUtil . isEmpty ( lowerKey , true ) || lowerKey . startsWith ( 'accept-' )
3841+ || lowerKey . startsWith ( 'access-control-' ) || IGNORE_HEADERS . indexOf ( lowerKey ) >= 0 ) {
3842+ // 忽略
3843+ }
3844+ else {
3845+ header += '\n' + left + ': ' + StringUtil . trim ( l . substring ( ind + 1 ) ) ;
3846+ }
38483847
3849- var ind = l . indexOf ( ' ' ) ;
3850- var m = ind < 0 ? '' : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
3851- if ( APIJSON_METHODS . indexOf ( m . toLowerCase ( ) ) >= 0 ) { // POST /gets HTTP/1.1
38523848 contentStart += lines [ i ] . length + 1 ;
3853- continue ;
38543849 }
3850+ else {
3851+ if ( ind <= 0 || StringUtil . isEmpty ( l ) || l . startsWith ( 'HTTP/' ) || l . startsWith ( 'HTTPS/' ) ) { // HTTP/1.1 200
3852+ contentStart += lines [ i ] . length + 1 ;
3853+ continue ;
3854+ }
38553855
3856- var content = StringUtil . trim ( paste . substring ( contentStart ) ) ;
3857- var json = null ;
3858- try {
3859- json = JSON5 . parse ( content ) ; // { "a":1, "b": "c" }
3860- } catch ( e ) {
3861- log ( e )
3856+ var ind = l . indexOf ( ' ' ) ;
3857+ var m = ind < 0 ? '' : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
3858+ if ( APIJSON_METHODS . indexOf ( m . toLowerCase ( ) ) >= 0 ) { // POST /gets HTTP/1.1
3859+ contentStart += lines [ i ] . length + 1 ;
3860+ var t = m . toUpperCase ( )
3861+ this . type = t == 'GET' ? 'PARAM' : ( t == 'POST' ? 'JSON' : t ) ;
3862+
3863+ l = l . substring ( ind ) . trim ( ) ;
3864+ ind = l . indexOf ( ' ' ) ;
3865+ var url = ind < 0 ? l : l . substring ( 0 , ind ) ;
3866+ if ( url . length > 0 && url != '/' ) {
3867+ vUrl . value = this . getBaseUrl ( ) + ( url . startsWith ( '/' ) ? url : '/' + url ) ;
3868+ }
3869+
3870+ event . preventDefault ( ) ;
3871+ continue ;
3872+ }
3873+
3874+ var content = StringUtil . trim ( paste . substring ( contentStart ) ) ;
3875+ var json = null ;
38623876 try {
3863- json = getRequestFromURL ( content ) ; // a=1&b=c
3864- } catch ( e2 ) {
3865- log ( e2 )
3877+ json = JSON5 . parse ( content ) ; // { "a":1, "b": "c" }
38663878 }
3879+ catch ( e ) {
3880+ log ( e )
3881+ try {
3882+ json = getRequestFromURL ( '?' + content ) ; // a=1&b=c
3883+ } catch ( e2 ) {
3884+ log ( e2 )
3885+ }
3886+ }
3887+
3888+ vInput . value = json == null || Object . keys ( json ) . length < 0 ? '' : JSON . stringify ( json , null , ' ' ) ;
3889+ event . preventDefault ( ) ;
3890+ break ;
38673891 }
38683892
3869- vInput . value = json == null || Object . keys ( json ) . length < 0 ? '' : JSON . stringify ( json , null , ' ' ) ;
3870- event . preventDefault ( ) ;
3871- break ;
38723893 }
38733894
3895+ if ( StringUtil . isEmpty ( header , true ) != true ) {
3896+ vHeader . value = StringUtil . trim ( header ) ;
3897+ event . preventDefault ( ) ;
3898+ }
38743899 }
3875-
3876- if ( StringUtil . isEmpty ( header , true ) != true ) {
3877- vHeader . value = StringUtil . trim ( header ) ;
3878- event . preventDefault ( ) ;
3879- }
3880- } catch ( e ) {
3900+ }
3901+ catch ( e ) {
38813902 log ( e )
38823903 }
38833904 }
@@ -3894,36 +3915,58 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
38943915 }
38953916 target . value = StringUtil . trim ( newStr ) ;
38963917 event . preventDefault ( ) ;
3897- } catch ( e ) {
3918+ }
3919+ catch ( e ) {
38983920 log ( e )
38993921 }
39003922 }
39013923 else if ( target == vInput ) { // key: value 转 { "key": value }
39023924 try {
3903- var lines = StringUtil . split ( paste , '\n' ) ;
3904- var json = { } ;
3925+ try {
3926+ JSON5 . parse ( paste ) ; // 正常的 JSON 就不用转了
3927+ }
3928+ catch ( e ) {
3929+ var lines = StringUtil . split ( paste , '\n' ) ;
3930+ var json = { } ;
39053931
3906- for ( var i = 0 ; i < lines . length ; i ++ ) {
3907- var l = StringUtil . trim ( lines [ i ] ) || '' ;
3908- if ( l . startsWith ( '//' ) ) {
3909- continue ;
3910- }
3932+ for ( var i = 0 ; i < lines . length ; i ++ ) {
3933+ var l = StringUtil . trim ( lines [ i ] ) || '' ;
3934+ if ( l . startsWith ( '//' ) ) {
3935+ continue ;
3936+ }
39113937
3912- var ind = l . lastIndexOf ( ' //' ) ;
3913- l = ind < 0 ? l : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
3938+ var ind = l . lastIndexOf ( ' //' ) ;
3939+ l = ind < 0 ? l : StringUtil . trim ( l . substring ( 0 , ind ) ) ;
39143940
3915- ind = l . indexOf ( ':' ) ;
3916- if ( ind >= 0 ) {
3917- var left = target == vHeader ? StringUtil . trim ( l . substring ( 0 , ind ) ) : l . substring ( 0 , ind ) ;
3918- json [ left ] = StringUtil . trim ( l . substring ( ind + 1 ) ) ;
3941+ ind = l . indexOf ( ':' ) ;
3942+ if ( ind >= 0 ) {
3943+ var left = target == vHeader ? StringUtil . trim ( l . substring ( 0 , ind ) ) : l . substring ( 0 , ind ) ;
3944+ if ( left . indexOf ( '=' ) >= 0 || left . indexOf ( '&' ) >= 0 ) {
3945+ try {
3946+ json = getRequestFromURL ( '?' + paste ) ;
3947+ if ( Object . keys ( json ) . length > 0 ) {
3948+ break ;
3949+ }
3950+ } catch ( e2 ) {
3951+ log ( e )
3952+ }
3953+ }
3954+
3955+ json [ left ] = StringUtil . trim ( l . substring ( ind + 1 ) ) ;
3956+ }
39193957 }
3920- }
39213958
3922- if ( Object . keys ( json ) . length > 0 ) {
3923- vInput . value = JSON . stringify ( json , null , ' ' ) ;
3924- event . preventDefault ( ) ;
3959+ if ( Object . keys ( json ) . length <= 0 ) {
3960+ json = getRequestFromURL ( '?' + paste ) ;
3961+ }
3962+
3963+ if ( Object . keys ( json ) . length > 0 ) {
3964+ vInput . value = JSON . stringify ( json , null , ' ' ) ;
3965+ event . preventDefault ( ) ;
3966+ }
39253967 }
3926- } catch ( e ) {
3968+ }
3969+ catch ( e ) {
39273970 log ( e )
39283971 }
39293972 }
0 commit comments