387
387
if ( theRequest == null ) {
388
388
theRequest = { } ;
389
389
}
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 ;
391
398
}
392
399
393
400
return theRequest ;
623
630
isRegister : false ,
624
631
isCrossEnabled : false ,
625
632
isMLEnabled : false ,
626
- isDelegateEnabled : false ,
633
+ isDelegateEnabled : true ,
627
634
isPreviewEnabled : false ,
628
635
isEncodeEnabled : true ,
629
636
isEditResponse : false ,
653
660
host : '' ,
654
661
database : 'MYSQL' , // 查文档必须,除非后端提供默认配置接口 // 用后端默认的,避免用户总是没有配置就问为什么没有生成文档和注释 'MYSQL',// 'POSTGRESQL',
655
662
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
657
664
// server: 'http://47.74.39.68:9090', // apijson.org
658
665
thirdParty : 'SWAGGER /v2/api-docs' , //apijson.cn
659
666
// thirdParty: 'RAP /repository/joined /repository/get',
3472
3479
var url = StringUtil . get ( vUrl . value )
3473
3480
var index = url . indexOf ( '?' )
3474
3481
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
+ }
3492
3494
}
3493
- catch ( e ) { }
3494
-
3495
- paramObj [ p . substring ( 0 , ind ) ] = v
3496
3495
}
3497
- }
3498
3496
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
+ }
3502
3503
}
3503
3504
clearTimeout ( handler ) //解决 vUrl.value 和 vInput.value 变化导致刷新,而且会把 vInput.value 重置,加上下面 onChange 再刷新就卡死了
3504
3505
}
@@ -3798,86 +3799,106 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
3798
3799
var selectionStart = target . selectionStart ;
3799
3800
var selectionEnd = target . selectionEnd ;
3800
3801
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
3803
3805
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 ) ;
3826
3822
event . preventDefault ( ) ;
3827
3823
}
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
+ }
3848
3847
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
3852
3848
contentStart += lines [ i ] . length + 1 ;
3853
- continue ;
3854
3849
}
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
+ }
3855
3855
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 ;
3862
3876
try {
3863
- json = getRequestFromURL ( content ) ; // a=1&b=c
3864
- } catch ( e2 ) {
3865
- log ( e2 )
3877
+ json = JSON5 . parse ( content ) ; // { "a":1, "b": "c" }
3866
3878
}
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 ;
3867
3891
}
3868
3892
3869
- vInput . value = json == null || Object . keys ( json ) . length < 0 ? '' : JSON . stringify ( json , null , ' ' ) ;
3870
- event . preventDefault ( ) ;
3871
- break ;
3872
3893
}
3873
3894
3895
+ if ( StringUtil . isEmpty ( header , true ) != true ) {
3896
+ vHeader . value = StringUtil . trim ( header ) ;
3897
+ event . preventDefault ( ) ;
3898
+ }
3874
3899
}
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 ) {
3881
3902
log ( e )
3882
3903
}
3883
3904
}
@@ -3894,36 +3915,58 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
3894
3915
}
3895
3916
target . value = StringUtil . trim ( newStr ) ;
3896
3917
event . preventDefault ( ) ;
3897
- } catch ( e ) {
3918
+ }
3919
+ catch ( e ) {
3898
3920
log ( e )
3899
3921
}
3900
3922
}
3901
3923
else if ( target == vInput ) { // key: value 转 { "key": value }
3902
3924
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 = { } ;
3905
3931
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
+ }
3911
3937
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 ) ) ;
3914
3940
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
+ }
3919
3957
}
3920
- }
3921
3958
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
+ }
3925
3967
}
3926
- } catch ( e ) {
3968
+ }
3969
+ catch ( e ) {
3927
3970
log ( e )
3928
3971
}
3929
3972
}
0 commit comments