giime 0.8.0 → 0.8.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.
Files changed (113) hide show
  1. package/dist/index.css +131 -128
  2. package/es/components/src/base/autocomplete/Autocomplete.vue.d.ts +3 -3
  3. package/es/components/src/base/autocomplete/autocomplete.d.ts +1 -1
  4. package/es/components/src/base/autocomplete/index.d.ts +7 -7
  5. package/es/components/src/base/input/Input.vue.d.ts +3 -3
  6. package/es/components/src/base/input/index.d.ts +7 -7
  7. package/es/components/src/base/input/input.d.ts +1 -1
  8. package/es/components/src/base/inputNumber/InputNumber.vue.d.ts +3 -3
  9. package/es/components/src/base/inputNumber/index.d.ts +7 -7
  10. package/es/components/src/base/inputNumber/inputNumber.d.ts +1 -1
  11. package/es/components/src/base/mention/Mention.vue.d.ts +3 -3
  12. package/es/components/src/base/mention/index.d.ts +7 -7
  13. package/es/components/src/base/mention/mention.d.ts +1 -1
  14. package/es/components/src/base/upload/Upload.vue.d.ts +1 -1
  15. package/es/components/src/base/upload/index.d.ts +3 -3
  16. package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs +4 -1
  17. package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs.map +1 -1
  18. package/es/components/src/business/uploadItem/UploadItem.vue.d.ts +1 -1
  19. package/es/components/src/business/uploadItem/index.d.ts +3 -3
  20. package/es/components/src/business/uploadPro/UploadPro.vue.d.ts +1 -1
  21. package/es/components/src/business/uploadPro/index.d.ts +3 -3
  22. package/es/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.mjs +2 -1
  23. package/es/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.mjs.map +1 -1
  24. package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +1 -1
  25. package/es/components/src/composite/uploadFile/index.d.ts +3 -3
  26. package/es/giime/index.mjs +4 -2
  27. package/es/giime/index.mjs.map +1 -1
  28. package/es/giime/version.d.ts +1 -1
  29. package/es/giime/version.mjs +1 -1
  30. package/es/giime/version.mjs.map +1 -1
  31. package/es/index.css +131 -128
  32. package/es/utils/__tests__/crypto/base64.test.d.ts +1 -0
  33. package/es/utils/__tests__/vue/router.test.d.ts +1 -0
  34. package/es/utils/index.mjs +4 -2
  35. package/es/utils/index.mjs.map +1 -1
  36. package/es/utils/src/crypto/base64.d.ts +42 -0
  37. package/es/utils/src/crypto/base64.mjs +44 -0
  38. package/es/utils/src/crypto/base64.mjs.map +1 -0
  39. package/es/utils/src/crypto/index.d.ts +1 -0
  40. package/es/utils/src/crypto/index.mjs +1 -0
  41. package/es/utils/src/crypto/index.mjs.map +1 -1
  42. package/es/utils/src/http/createAxios.mjs +8 -0
  43. package/es/utils/src/http/createAxios.mjs.map +1 -1
  44. package/es/utils/src/http/index.mjs +1 -1
  45. package/es/utils/src/http/url.d.ts +9 -0
  46. package/es/utils/src/http/url.mjs +6 -1
  47. package/es/utils/src/http/url.mjs.map +1 -1
  48. package/es/utils/src/is.d.ts +22 -0
  49. package/es/utils/src/is.mjs +16 -1
  50. package/es/utils/src/is.mjs.map +1 -1
  51. package/es/utils/src/vue/index.d.ts +1 -0
  52. package/es/utils/src/vue/index.mjs +1 -0
  53. package/es/utils/src/vue/index.mjs.map +1 -1
  54. package/es/utils/src/vue/router.d.ts +30 -0
  55. package/es/utils/src/vue/router.mjs +28 -0
  56. package/es/utils/src/vue/router.mjs.map +1 -0
  57. package/lib/components/src/base/autocomplete/Autocomplete.vue.d.ts +3 -3
  58. package/lib/components/src/base/autocomplete/autocomplete.d.ts +1 -1
  59. package/lib/components/src/base/autocomplete/index.d.ts +7 -7
  60. package/lib/components/src/base/input/Input.vue.d.ts +3 -3
  61. package/lib/components/src/base/input/index.d.ts +7 -7
  62. package/lib/components/src/base/input/input.d.ts +1 -1
  63. package/lib/components/src/base/inputNumber/InputNumber.vue.d.ts +3 -3
  64. package/lib/components/src/base/inputNumber/index.d.ts +7 -7
  65. package/lib/components/src/base/inputNumber/inputNumber.d.ts +1 -1
  66. package/lib/components/src/base/mention/Mention.vue.d.ts +3 -3
  67. package/lib/components/src/base/mention/index.d.ts +7 -7
  68. package/lib/components/src/base/mention/mention.d.ts +1 -1
  69. package/lib/components/src/base/upload/Upload.vue.d.ts +1 -1
  70. package/lib/components/src/base/upload/index.d.ts +3 -3
  71. package/lib/components/src/business/loginDialog/LoginDialog.vue2.js +3 -0
  72. package/lib/components/src/business/loginDialog/LoginDialog.vue2.js.map +1 -1
  73. package/lib/components/src/business/uploadItem/UploadItem.vue.d.ts +1 -1
  74. package/lib/components/src/business/uploadItem/index.d.ts +3 -3
  75. package/lib/components/src/business/uploadPro/UploadPro.vue.d.ts +1 -1
  76. package/lib/components/src/business/uploadPro/index.d.ts +3 -3
  77. package/lib/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.js +2 -1
  78. package/lib/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.js.map +1 -1
  79. package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +1 -1
  80. package/lib/components/src/composite/uploadFile/index.d.ts +3 -3
  81. package/lib/giime/index.js +16 -0
  82. package/lib/giime/index.js.map +1 -1
  83. package/lib/giime/version.d.ts +1 -1
  84. package/lib/giime/version.js +1 -1
  85. package/lib/giime/version.js.map +1 -1
  86. package/lib/index.css +131 -128
  87. package/lib/utils/__tests__/crypto/base64.test.d.ts +1 -0
  88. package/lib/utils/__tests__/vue/router.test.d.ts +1 -0
  89. package/lib/utils/index.js +16 -0
  90. package/lib/utils/index.js.map +1 -1
  91. package/lib/utils/src/crypto/base64.d.ts +42 -0
  92. package/lib/utils/src/crypto/base64.js +51 -0
  93. package/lib/utils/src/crypto/base64.js.map +1 -0
  94. package/lib/utils/src/crypto/index.d.ts +1 -0
  95. package/lib/utils/src/crypto/index.js +7 -0
  96. package/lib/utils/src/crypto/index.js.map +1 -1
  97. package/lib/utils/src/http/createAxios.js +8 -0
  98. package/lib/utils/src/http/createAxios.js.map +1 -1
  99. package/lib/utils/src/http/index.js +1 -0
  100. package/lib/utils/src/http/index.js.map +1 -1
  101. package/lib/utils/src/http/url.d.ts +9 -0
  102. package/lib/utils/src/http/url.js +6 -0
  103. package/lib/utils/src/http/url.js.map +1 -1
  104. package/lib/utils/src/is.d.ts +22 -0
  105. package/lib/utils/src/is.js +20 -0
  106. package/lib/utils/src/is.js.map +1 -1
  107. package/lib/utils/src/vue/index.d.ts +1 -0
  108. package/lib/utils/src/vue/index.js +3 -0
  109. package/lib/utils/src/vue/index.js.map +1 -1
  110. package/lib/utils/src/vue/router.d.ts +30 -0
  111. package/lib/utils/src/vue/router.js +31 -0
  112. package/lib/utils/src/vue/router.js.map +1 -0
  113. package/package.json +1 -1
package/es/index.css CHANGED
@@ -695,6 +695,9 @@ video {
695
695
  .gm-gap-4 {
696
696
  gap: 1rem;
697
697
  }
698
+ .gm-gap-y-2 {
699
+ row-gap: 0.5rem;
700
+ }
698
701
  .gm-overflow-hidden {
699
702
  overflow: hidden;
700
703
  }
@@ -880,23 +883,56 @@ video {
880
883
  .gm-group:hover .group-hover\:gm-block {
881
884
  display: block;
882
885
  }
883
- .gm-number-interval-single[data-v-4e6f4d6f] {
884
- border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
885
- box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
886
- background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
886
+ .gm-flex-center[data-v-c17deec9] {
887
+ align-items: center;
887
888
  }
888
- .gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
889
- box-shadow: none;
890
- background: none;
889
+
890
+ .gm-flex-justify-between[data-v-c17deec9] {
891
+ justify-content: space-between;
892
+ }
893
+ .circular[data-v-d7b04fae] {
894
+ animation: loading-rotate-d7b04fae 2s linear infinite;
891
895
  }
892
896
 
893
- .gm-number-interval-close[data-v-4e6f4d6f] {
894
- display: none;
895
- color: var(--el-input-icon-color, var(--el-text-color-placeholder));
897
+ .path[data-v-d7b04fae] {
898
+ animation: loading-dash-d7b04fae 1.5s ease-in-out infinite;
899
+ stroke-dasharray: 90, 150;
900
+ stroke-dashoffset: 0;
901
+ stroke: var(--el-color-primary);
902
+ stroke-linecap: round;
896
903
  }
897
904
 
898
- .gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
899
- display: flex;
905
+ @keyframes loading-rotate-d7b04fae {
906
+ to {
907
+ transform: rotate(360deg);
908
+ }
909
+ }
910
+ @keyframes loading-dash-d7b04fae {
911
+ 0% {
912
+ stroke-dasharray: 1, 200;
913
+ stroke-dashoffset: 0;
914
+ }
915
+ 50% {
916
+ stroke-dasharray: 90, 150;
917
+ stroke-dashoffset: -40px;
918
+ }
919
+ 100% {
920
+ stroke-dasharray: 90, 150;
921
+ stroke-dashoffset: -120px;
922
+ }
923
+ }
924
+
925
+ .gm-range-number .el-form-item[data-v-1ae16d96] {
926
+ margin: 0;
927
+ }
928
+
929
+ .gm-upload-pro-preview-dialog[data-v-80b383d8] [data-v-80b383d8] .el-dialog__body {
930
+ padding: 0;
931
+ }
932
+
933
+ .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload--picture-card {
934
+ width: auto;
935
+ height: auto;
900
936
  }
901
937
  .gm-upload-pro-file {
902
938
  line-height: normal;
@@ -936,64 +972,6 @@ video {
936
972
  .gm-upload-pro-file-disabled .el-upload-list__item-status-label {
937
973
  display: none;
938
974
  }
939
- .gm-upload-pro-preview-dialog[data-v-80b383d8] [data-v-80b383d8] .el-dialog__body {
940
- padding: 0;
941
- }
942
-
943
- .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-80b383d8] [data-v-80b383d8] .el-upload--picture-card {
944
- width: auto;
945
- height: auto;
946
- }
947
- .gm-upload-file {
948
- line-height: normal;
949
- }
950
- .gm-upload-file .el-checkbox {
951
- position: absolute;
952
- left: 10px;
953
- top: 0;
954
- z-index: 9;
955
- }
956
- .gm-upload-file .el-upload-list--picture-card {
957
- gap: 10px;
958
- }
959
- .gm-upload-file .el-upload-list__item {
960
- margin: 0;
961
- }
962
- .gm-upload-file .el-upload-list__item-file-name {
963
- line-height: normal;
964
- }
965
- .gm-upload-file .el-upload-dragger {
966
- padding: 0;
967
- border: none;
968
- width: 100%;
969
- height: 100%;
970
- display: flex;
971
- }
972
- .gm-upload-file .el-upload--picture-card {
973
- border: none;
974
- }
975
-
976
- .gm-upload-file-disabled .el-upload--picture-card {
977
- display: none;
978
- }
979
- .gm-upload-file-disabled .el-upload-list__item-status-label {
980
- display: none;
981
- }
982
- .gm-flex-center[data-v-c17deec9] {
983
- align-items: center;
984
- }
985
-
986
- .gm-flex-justify-between[data-v-c17deec9] {
987
- justify-content: space-between;
988
- }
989
- .gm-upload-preview-dialog[data-v-312f9322] [data-v-312f9322] .el-dialog__body {
990
- padding: 0;
991
- }
992
-
993
- .gm-upload-file-picture-card[data-v-312f9322] [data-v-312f9322] .el-upload-list__item, .gm-upload-file-picture-card[data-v-312f9322] [data-v-312f9322] .el-upload--picture-card {
994
- width: auto;
995
- height: auto;
996
- }
997
975
  [data-v-d3111183] .gmSearchForm .el-form-item {
998
976
  margin-right: 0;
999
977
  margin-bottom: 4px;
@@ -1021,74 +999,33 @@ video {
1021
999
  [data-v-2c351ff8] .gmTableNoBorder .el-table__border-left-patch {
1022
1000
  height: 0;
1023
1001
  }
1024
- [data-v-98c2e804] .gmTableNoBorder .el-table__body .el-table__cell {
1025
- border-right: none;
1026
- }
1027
-
1028
- [data-v-98c2e804] .gmTableNoBorder .el-table__inner-wrapper:before {
1029
- height: 0;
1030
- }
1031
-
1032
- [data-v-98c2e804] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
1033
- height: 0;
1034
- }
1035
1002
 
1036
- [data-v-98c2e804] .gmTableNoBorder.el-table--border:after {
1037
- height: 0;
1038
- }
1039
-
1040
- [data-v-98c2e804] .gmTableNoBorder.el-table--border:before {
1041
- height: 0;
1042
- }
1043
-
1044
- [data-v-98c2e804] .gmTableNoBorder .el-table__border-left-patch {
1045
- height: 0;
1046
- }
1047
-
1048
- .gm-range-number .el-form-item[data-v-1ae16d96] {
1049
- margin: 0;
1050
- }
1051
-
1052
- .circular[data-v-d7b04fae] {
1053
- animation: loading-rotate-d7b04fae 2s linear infinite;
1003
+ .pagination-container[data-v-47d35e7b] {
1004
+ background: #fff;
1005
+ padding-top: 12px;
1054
1006
  }
1055
-
1056
- .path[data-v-d7b04fae] {
1057
- animation: loading-dash-d7b04fae 1.5s ease-in-out infinite;
1058
- stroke-dasharray: 90, 150;
1059
- stroke-dashoffset: 0;
1060
- stroke: var(--el-color-primary);
1061
- stroke-linecap: round;
1007
+ .pagination-container.hidden[data-v-47d35e7b] {
1008
+ display: none;
1062
1009
  }
1063
1010
 
1064
- @keyframes loading-rotate-d7b04fae {
1065
- to {
1066
- transform: rotate(360deg);
1067
- }
1011
+ .gm-number-interval-single[data-v-4e6f4d6f] {
1012
+ border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
1013
+ box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
1014
+ background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
1068
1015
  }
1069
- @keyframes loading-dash-d7b04fae {
1070
- 0% {
1071
- stroke-dasharray: 1, 200;
1072
- stroke-dashoffset: 0;
1073
- }
1074
- 50% {
1075
- stroke-dasharray: 90, 150;
1076
- stroke-dashoffset: -40px;
1077
- }
1078
- 100% {
1079
- stroke-dasharray: 90, 150;
1080
- stroke-dashoffset: -120px;
1081
- }
1016
+ .gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
1017
+ box-shadow: none;
1018
+ background: none;
1082
1019
  }
1083
1020
 
1084
- .pagination-container[data-v-47d35e7b] {
1085
- background: #fff;
1086
- padding-top: 12px;
1087
- }
1088
- .pagination-container.hidden[data-v-47d35e7b] {
1021
+ .gm-number-interval-close[data-v-4e6f4d6f] {
1089
1022
  display: none;
1023
+ color: var(--el-input-icon-color, var(--el-text-color-placeholder));
1090
1024
  }
1091
1025
 
1026
+ .gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
1027
+ display: flex;
1028
+ }
1092
1029
  @charset "UTF-8";
1093
1030
  .custom-operate-drawer .el-drawer__header {
1094
1031
  padding: 10px 15px;
@@ -1145,6 +1082,29 @@ video {
1145
1082
  border-radius: 10px;
1146
1083
  background: #eee;
1147
1084
  }
1085
+ [data-v-98c2e804] .gmTableNoBorder .el-table__body .el-table__cell {
1086
+ border-right: none;
1087
+ }
1088
+
1089
+ [data-v-98c2e804] .gmTableNoBorder .el-table__inner-wrapper:before {
1090
+ height: 0;
1091
+ }
1092
+
1093
+ [data-v-98c2e804] .gmTableNoBorder.el-table--border .el-table__inner-wrapper:after {
1094
+ height: 0;
1095
+ }
1096
+
1097
+ [data-v-98c2e804] .gmTableNoBorder.el-table--border:after {
1098
+ height: 0;
1099
+ }
1100
+
1101
+ [data-v-98c2e804] .gmTableNoBorder.el-table--border:before {
1102
+ height: 0;
1103
+ }
1104
+
1105
+ [data-v-98c2e804] .gmTableNoBorder .el-table__border-left-patch {
1106
+ height: 0;
1107
+ }
1148
1108
  @charset "UTF-8";
1149
1109
  .table-custom-header-drawer .el-drawer__header {
1150
1110
  padding: 10px 15px;
@@ -1200,4 +1160,47 @@ video {
1200
1160
  box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.1);
1201
1161
  border-radius: 10px;
1202
1162
  background: #eee;
1163
+ }
1164
+ .gm-upload-preview-dialog[data-v-312f9322] [data-v-312f9322] .el-dialog__body {
1165
+ padding: 0;
1166
+ }
1167
+
1168
+ .gm-upload-file-picture-card[data-v-312f9322] [data-v-312f9322] .el-upload-list__item, .gm-upload-file-picture-card[data-v-312f9322] [data-v-312f9322] .el-upload--picture-card {
1169
+ width: auto;
1170
+ height: auto;
1171
+ }
1172
+ .gm-upload-file {
1173
+ line-height: normal;
1174
+ }
1175
+ .gm-upload-file .el-checkbox {
1176
+ position: absolute;
1177
+ left: 10px;
1178
+ top: 0;
1179
+ z-index: 9;
1180
+ }
1181
+ .gm-upload-file .el-upload-list--picture-card {
1182
+ gap: 10px;
1183
+ }
1184
+ .gm-upload-file .el-upload-list__item {
1185
+ margin: 0;
1186
+ }
1187
+ .gm-upload-file .el-upload-list__item-file-name {
1188
+ line-height: normal;
1189
+ }
1190
+ .gm-upload-file .el-upload-dragger {
1191
+ padding: 0;
1192
+ border: none;
1193
+ width: 100%;
1194
+ height: 100%;
1195
+ display: flex;
1196
+ }
1197
+ .gm-upload-file .el-upload--picture-card {
1198
+ border: none;
1199
+ }
1200
+
1201
+ .gm-upload-file-disabled .el-upload--picture-card {
1202
+ display: none;
1203
+ }
1204
+ .gm-upload-file-disabled .el-upload-list__item-status-label {
1205
+ display: none;
1203
1206
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- export { FILE_EXTENSIONS, FileType, getTag, isBoolean, isClient, isDate, isDecimal, isError, isEven, isExcel, isFunction, isHttps, isIOS, isImageUrl, isInteger, isNegative, isNil, isNull, isNumber, isObjectLike, isOdd, isPDF, isPPT, isPSD, isPlainObject, isPositive, isString, isSymbol, isText, isUndefined, isVideoUrl, isWord, isZip } from './src/is.mjs';
1
+ export { DINGTALK_REGEX, FILE_EXTENSIONS, FileType, MOBILE_DEVICE_REGEX, TABLET_DEVICE_REGEX, getTag, isBoolean, isClient, isDate, isDecimal, isDingTalk, isError, isEven, isExcel, isFunction, isHttps, isIOS, isImageUrl, isInteger, isMobile, isNegative, isNil, isNull, isNumber, isObjectLike, isOdd, isPDF, isPPT, isPSD, isPlainObject, isPositive, isString, isSymbol, isText, isUndefined, isVideoUrl, isWord, isZip } from './src/is.mjs';
2
2
  import './src/vue/index.mjs';
3
3
  import './src/elementPlus/index.mjs';
4
4
  import './src/http/index.mjs';
@@ -16,6 +16,7 @@ export { mergePropsToArray } from './src/array.mjs';
16
16
  import './src/regexPatterns/index.mjs';
17
17
  export { withInstall, withInstallDirective, withInstallFunction, withNoopInstall } from './src/vue/install.mjs';
18
18
  export { GiimeResolver, bypass, kebabCase } from './src/vue/resolver.mjs';
19
+ export { getRouteParams, getRouteQuery } from './src/vue/router.mjs';
19
20
  export { getGmEvent } from './src/elementPlus/event.mjs';
20
21
  export { getGmExports, getGmObjExports } from './src/elementPlus/exports.mjs';
21
22
  export { getCascaderLastValue } from './src/elementPlus/cascader.mjs';
@@ -23,11 +24,12 @@ export { createAxios } from './src/http/createAxios.mjs';
23
24
  export { errorMessage, responseErrorMessage } from './src/http/errorMessage.mjs';
24
25
  export { req401Interceptors, res401Interceptors } from './src/http/interceptors.mjs';
25
26
  export { giimeDevProxy, giimeDevProxyFn } from './src/http/devProxy.mjs';
26
- export { getDomain, urlJoin } from './src/http/url.mjs';
27
+ export { getDomain, getHeaderValue, urlJoin } from './src/http/url.mjs';
27
28
  export { getDateShortcuts } from './src/date/dateShortcuts.mjs';
28
29
  export { genFileId } from 'element-plus';
29
30
  export { b64_hmac_md5, b64_md5, hex_hmac_md5, hex_md5, str_hmac_md5, str_md5, ts_md5_file } from './src/crypto/md5.mjs';
30
31
  export { any_hmac_sha1, any_sha1, b64_hmac_sha1, b64_sha1, hex_hmac_sha1, hex_sha1 } from './src/crypto/sha1.mjs';
32
+ export { base64ToString, base64ToUint8Array, isBase64, stringToBase64, stringToBase64URI, uint8ArrayToBase64 } from './src/crypto/base64.mjs';
31
33
  export { filterTreeByName } from './src/tree/filterTreeByName.mjs';
32
34
  export { findChildrenItem } from './src/tree/findChildrenItem.mjs';
33
35
  export { integerPattern, moneyPattern, nonNegativeIntegerPattern, nonNegativeNumberPattern, nonZeroNumberPattern, numberPattern, positiveIntegerPattern, positiveNumberPattern } from './src/regexPatterns/number.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Base64 编解码工具
3
+ * 仅支持浏览器环境
4
+ */
5
+ /**
6
+ * 将 UTF-8 字符串编码为 Base64
7
+ * @param src UTF-8 字符串
8
+ * @param urlsafe 是否使用 URL 安全的 Base64 编码(RFC4648 §5)
9
+ * @returns Base64 字符串
10
+ */
11
+ export declare const stringToBase64: (src: string, urlsafe?: boolean) => string;
12
+ /**
13
+ * 将 Base64 字符串解码为 UTF-8 字符串
14
+ * @param src Base64 字符串(支持标准和 URL 安全格式)
15
+ * @returns UTF-8 字符串
16
+ */
17
+ export declare const base64ToString: (src: string) => string;
18
+ /**
19
+ * 将 UTF-8 字符串编码为 URL 安全的 Base64(RFC4648 §5)
20
+ * @param src UTF-8 字符串
21
+ * @returns URL 安全的 Base64 字符串
22
+ */
23
+ export declare const stringToBase64URI: (src: string) => string;
24
+ /**
25
+ * 检查字符串是否为有效的 Base64 格式
26
+ * @param src 待检查的字符串
27
+ * @returns 是否为有效的 Base64 字符串
28
+ */
29
+ export declare const isBase64: (src: any) => src is string;
30
+ /**
31
+ * 将 Uint8Array 转换为 Base64 字符串
32
+ * @param u8a Uint8Array
33
+ * @param urlsafe 是否使用 URL 安全格式
34
+ * @returns Base64 字符串
35
+ */
36
+ export declare const uint8ArrayToBase64: (u8a: Uint8Array, urlsafe?: boolean) => string;
37
+ /**
38
+ * 将 Base64 字符串转换为 Uint8Array
39
+ * @param src Base64 字符串
40
+ * @returns Uint8Array
41
+ */
42
+ export declare const base64ToUint8Array: (src: string) => Uint8Array;
@@ -0,0 +1,44 @@
1
+ const _fromCC = String.fromCharCode.bind(String);
2
+ const _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\+\/]/g, "");
3
+ const _mkUriSafe = (src) => src.replace(/=/g, "").replace(/[+\/]/g, (m0) => m0 === "+" ? "-" : "_");
4
+ const _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 === "-" ? "+" : "/"));
5
+ const _TD = new TextDecoder();
6
+ const _TE = new TextEncoder();
7
+ const _fromUint8Array = (u8a) => {
8
+ const maxargs = 4096;
9
+ const strs = [];
10
+ for (let i = 0, l = u8a.length; i < l; i += maxargs) {
11
+ strs.push(_fromCC(...Array.from(u8a.subarray(i, i + maxargs))));
12
+ }
13
+ return btoa(strs.join(""));
14
+ };
15
+ const _toUint8Array = (a) => {
16
+ return Uint8Array.from(
17
+ atob(a).split("").map((c) => c.charCodeAt(0))
18
+ );
19
+ };
20
+ const stringToBase64 = (src, urlsafe = false) => {
21
+ const encoded = _fromUint8Array(_TE.encode(src));
22
+ return urlsafe ? _mkUriSafe(encoded) : encoded;
23
+ };
24
+ const base64ToString = (src) => {
25
+ return _TD.decode(_toUint8Array(_unURI(src)));
26
+ };
27
+ const stringToBase64URI = (src) => {
28
+ return stringToBase64(src, true);
29
+ };
30
+ const isBase64 = (src) => {
31
+ if (typeof src !== "string") return false;
32
+ const s = src.replace(/\s+/g, "").replace(/={0,2}$/, "");
33
+ return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s);
34
+ };
35
+ const uint8ArrayToBase64 = (u8a, urlsafe = false) => {
36
+ const encoded = _fromUint8Array(u8a);
37
+ return urlsafe ? _mkUriSafe(encoded) : encoded;
38
+ };
39
+ const base64ToUint8Array = (src) => {
40
+ return _toUint8Array(_unURI(src));
41
+ };
42
+
43
+ export { base64ToString, base64ToUint8Array, isBase64, stringToBase64, stringToBase64URI, uint8ArrayToBase64 };
44
+ //# sourceMappingURL=base64.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.mjs","sources":["../../../../../../packages/utils/src/crypto/base64.ts"],"sourcesContent":["/**\n * Base64 编解码工具\n * 仅支持浏览器环境\n */\n\n// 辅助函数\nconst _fromCC = String.fromCharCode.bind(String);\nconst _tidyB64 = (s: string) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\nconst _mkUriSafe = (src: string) => src.replace(/=/g, '').replace(/[+\\/]/g, m0 => (m0 === '+' ? '-' : '_'));\nconst _unURI = (a: string) => _tidyB64(a.replace(/[-_]/g, m0 => (m0 === '-' ? '+' : '/')));\n\n// TextEncoder/TextDecoder 实例\nconst _TD = new TextDecoder();\nconst _TE = new TextEncoder();\n\n/**\n * 将 Uint8Array 转换为 Base64 字符串\n */\nconst _fromUint8Array = (u8a: Uint8Array): string => {\n const maxargs = 0x1000;\n const strs: string[] = [];\n\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC(...Array.from(u8a.subarray(i, i + maxargs))));\n }\n\n return btoa(strs.join(''));\n};\n\n/**\n * 将 Base64 字符串转换为 Uint8Array\n */\nconst _toUint8Array = (a: string): Uint8Array => {\n return Uint8Array.from(\n atob(a)\n .split('')\n .map(c => c.charCodeAt(0)),\n );\n};\n\n/**\n * 将 UTF-8 字符串编码为 Base64\n * @param src UTF-8 字符串\n * @param urlsafe 是否使用 URL 安全的 Base64 编码(RFC4648 §5)\n * @returns Base64 字符串\n */\nexport const stringToBase64 = (src: string, urlsafe = false): string => {\n const encoded = _fromUint8Array(_TE.encode(src));\n return urlsafe ? _mkUriSafe(encoded) : encoded;\n};\n\n/**\n * 将 Base64 字符串解码为 UTF-8 字符串\n * @param src Base64 字符串(支持标准和 URL 安全格式)\n * @returns UTF-8 字符串\n */\nexport const base64ToString = (src: string): string => {\n return _TD.decode(_toUint8Array(_unURI(src)));\n};\n\n/**\n * 将 UTF-8 字符串编码为 URL 安全的 Base64(RFC4648 §5)\n * @param src UTF-8 字符串\n * @returns URL 安全的 Base64 字符串\n */\nexport const stringToBase64URI = (src: string): string => {\n return stringToBase64(src, true);\n};\n\n/**\n * 检查字符串是否为有效的 Base64 格式\n * @param src 待检查的字符串\n * @returns 是否为有效的 Base64 字符串\n */\nexport const isBase64 = (src: any): src is string => {\n if (typeof src !== 'string') return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n\n/**\n * 将 Uint8Array 转换为 Base64 字符串\n * @param u8a Uint8Array\n * @param urlsafe 是否使用 URL 安全格式\n * @returns Base64 字符串\n */\nexport const uint8ArrayToBase64 = (u8a: Uint8Array, urlsafe = false): string => {\n const encoded = _fromUint8Array(u8a);\n return urlsafe ? _mkUriSafe(encoded) : encoded;\n};\n\n/**\n * 将 Base64 字符串转换为 Uint8Array\n * @param src Base64 字符串\n * @returns Uint8Array\n */\nexport const base64ToUint8Array = (src: string): Uint8Array => {\n return _toUint8Array(_unURI(src));\n};\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export * from './md5';
2
2
  export * from './sha1';
3
+ export * from './base64';
@@ -1,3 +1,4 @@
1
1
  export { b64_hmac_md5, b64_md5, hex_hmac_md5, hex_md5, str_hmac_md5, str_md5, ts_md5_file } from './md5.mjs';
2
2
  export { any_hmac_sha1, any_sha1, b64_hmac_sha1, b64_sha1, hex_hmac_sha1, hex_sha1 } from './sha1.mjs';
3
+ export { base64ToString, base64ToUint8Array, isBase64, stringToBase64, stringToBase64URI, uint8ArrayToBase64 } from './base64.mjs';
3
4
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -5,6 +5,8 @@ import { useLoginStore } from '../../../hooks/store/useLogin/index.mjs';
5
5
  import { isNumber } from '../is.mjs';
6
6
  import { res401Interceptors } from './interceptors.mjs';
7
7
  import { responseErrorMessage } from './errorMessage.mjs';
8
+ import { getHeaderValue } from './url.mjs';
9
+ import { useGlobalConfig } from '../../../hooks/base/useGlobalConfig/index.mjs';
8
10
 
9
11
  function createAxios(config, options) {
10
12
  const successCode = config.successCode ?? 0;
@@ -25,6 +27,12 @@ function createAxios(config, options) {
25
27
  const logingStore = useLoginStore();
26
28
  const _token = Cookies.get("token") ?? logingStore.userToken;
27
29
  const _user = Cookies.get("sso_user_id") ?? logingStore.userId;
30
+ const loginEnvKey = "VITE_GIIME_LOGIN_GK_SERVICE_USER";
31
+ const importMetaEnv = useGlobalConfig("env");
32
+ const gkServiceUser = getHeaderValue(config2.headers, "gk-service-user");
33
+ if (!gkServiceUser) {
34
+ config2.headers["gk-service-user"] = importMetaEnv.value[loginEnvKey] || void 0;
35
+ }
28
36
  if (!config2.params) {
29
37
  config2.params = {};
30
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createAxios.mjs","sources":["../../../../../../packages/utils/src/http/createAxios.ts"],"sourcesContent":["import axios from 'axios';\nimport { ElMessage } from 'element-plus';\nimport Cookies from 'js-cookie';\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\nimport { isNumber } from '../is';\nimport { res401Interceptors } from './interceptors';\nimport { responseErrorMessage } from './errorMessage';\nimport type { AxiosError, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios';\nexport interface CreateAxiosConfig extends CreateAxiosDefaults {\n baseURL: string;\n /**服务器调用成功的code 一般是 0 或 200 */\n successCode: number | number[];\n // 是否隐藏Authorization\n hideAuthorization?: boolean;\n // 是否使用params传递token\n isUseParamsToken?: boolean;\n}\n\nexport function createAxios(\n config: CreateAxiosConfig,\n options?: {\n requestInterceptors?: (config: InternalAxiosRequestConfig<any>) => any;\n },\n) {\n const successCode = config.successCode ?? 0;\n const hideAuthorization = config.hideAuthorization ?? false;\n const isUseParamsToken = config.isUseParamsToken ?? false;\n const service = axios.create({\n withCredentials: true, // send cookies when cross-domain requests\n timeout: 120_000,\n headers: {\n 'content-type': 'application/json',\n Accept: '*/*',\n },\n ...config,\n });\n\n // 请求拦截器\n service.interceptors.request.use(\n async config => {\n const logingStore = useLoginStore();\n const _token = Cookies.get('token') ?? logingStore.userToken;\n const _user = Cookies.get('sso_user_id') ?? logingStore.userId;\n if (!config.params) {\n config.params = {};\n }\n // 是否隐藏Authorization\n if (!hideAuthorization) {\n // 是否使用params传递token\n if (isUseParamsToken) {\n config.params._token = _token;\n config.params._user = _user;\n }\n\n if (_token) {\n config.headers.Authorization = `Bearer ${_token}`;\n }\n }\n\n await options?.requestInterceptors?.(config);\n return config;\n },\n error => {\n console.error('请求错误', error); // for debug\n return Promise.reject(error);\n },\n );\n // 添加响应拦截器\n service.interceptors.response.use(\n async response => {\n // 对响应数据做点什么\n const res = response.data;\n const msg = (res?.comment ?? res?.message ?? res?.errMsg ?? res?.msg) || '接口请求错误';\n if (!isNumber(res?.code)) {\n return response;\n }\n // 成功情况\n else if (res.code === successCode || res.errCode === successCode) {\n return response;\n }\n // 成功情况 successCode为数组\n else if (Array.isArray(successCode) && (successCode.includes(res.code) || successCode.includes(res.errCode))) {\n return response;\n }\n // 401\n else if (res.code === 401) {\n const res = await res401Interceptors(service, response.config);\n return res;\n }\n ElMessage({\n message: msg,\n type: 'error',\n grouping: true,\n duration: 5 * 1000,\n showClose: true,\n });\n return Promise.reject(response);\n // return response;\n },\n async (err: AxiosError) => {\n console.error(err);\n if (err?.response?.status === 401 && !err.message.includes('timeout')) {\n const res = await res401Interceptors(service, err.config!);\n return res;\n } else {\n // 对响应错误做点什么\n responseErrorMessage(err);\n return Promise.reject(err);\n }\n },\n );\n\n return {\n service,\n };\n}\n"],"names":["config","res"],"mappings":";;;;;;;;AAkBO,SAAS,WAAA,CACd,QACA,OAAA,EAGA;AACA,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,CAAA;AAC1C,EAAA,MAAM,iBAAA,GAAoB,OAAO,iBAAA,IAAqB,KAAA;AACtD,EAAA,MAAM,gBAAA,GAAmB,OAAO,gBAAA,IAAoB,KAAA;AACpD,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO;AAAA,IAC3B,eAAA,EAAiB,IAAA;AAAA;AAAA,IACjB,OAAA,EAAS,IAAA;AAAA,IACT,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AAGD,EAAA,OAAA,CAAQ,aAAa,OAAA,CAAQ,GAAA;AAAA,IAC3B,OAAMA,OAAAA,KAAU;AACd,MAAA,MAAM,cAAc,aAAA,EAAc;AAClC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,OAAO,KAAK,WAAA,CAAY,SAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,aAAa,KAAK,WAAA,CAAY,MAAA;AACxD,MAAA,IAAI,CAACA,QAAO,MAAA,EAAQ;AAClB,QAAAA,OAAAA,CAAO,SAAS,EAAC;AAAA,MACnB;AAEA,MAAA,IAAI,CAAC,iBAAA,EAAmB;AAEtB,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAAA,OAAAA,CAAO,OAAO,MAAA,GAAS,MAAA;AACvB,UAAAA,OAAAA,CAAO,OAAO,KAAA,GAAQ,KAAA;AAAA,QACxB;AAEA,QAAA,IAAI,MAAA,EAAQ;AACV,UAAAA,OAAAA,CAAO,OAAA,CAAQ,aAAA,GAAgB,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA;AAAA,QACjD;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,EAAS,sBAAsBA,OAAM,CAAA;AAC3C,MAAA,OAAOA,OAAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAA,KAAA,KAAS;AACP,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAAQ,KAAK,CAAA;AAC3B,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AAEA,EAAA,OAAA,CAAQ,aAAa,QAAA,CAAS,GAAA;AAAA,IAC5B,OAAM,QAAA,KAAY;AAEhB,MAAA,MAAM,MAAM,QAAA,CAAS,IAAA;AACrB,MAAA,MAAM,GAAA,GAAA,CAAO,KAAK,OAAA,IAAW,GAAA,EAAK,WAAW,GAAA,EAAK,MAAA,IAAU,KAAK,GAAA,KAAQ,sCAAA;AACzE,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,EAAK,IAAI,CAAA,EAAG;AACxB,QAAA,OAAO,QAAA;AAAA,MACT,WAES,GAAA,CAAI,IAAA,KAAS,WAAA,IAAe,GAAA,CAAI,YAAY,WAAA,EAAa;AAChE,QAAA,OAAO,QAAA;AAAA,MACT,CAAA,MAAA,IAES,KAAA,CAAM,OAAA,CAAQ,WAAW,MAAM,WAAA,CAAY,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,IAAK,WAAA,CAAY,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI;AAC5G,QAAA,OAAO,QAAA;AAAA,MACT,CAAA,MAAA,IAES,GAAA,CAAI,IAAA,KAAS,GAAA,EAAK;AACzB,QAAA,MAAMC,IAAAA,GAAM,MAAM,kBAAA,CAAmB,OAAA,EAAS,SAAS,MAAM,CAAA;AAC7D,QAAA,OAAOA,IAAAA;AAAA,MACT;AACA,MAAA,SAAA,CAAU;AAAA,QACR,OAAA,EAAS,GAAA;AAAA,QACT,IAAA,EAAM,OAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,UAAU,CAAA,GAAI,GAAA;AAAA,QACd,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAO,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAAA,IAEhC,CAAA;AAAA,IACA,OAAO,GAAA,KAAoB;AACzB,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,MAAA,IAAI,GAAA,EAAK,UAAU,MAAA,KAAW,GAAA,IAAO,CAAC,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AACrE,QAAA,MAAM,GAAA,GAAM,MAAM,kBAAA,CAAmB,OAAA,EAAS,IAAI,MAAO,CAAA;AACzD,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,MAAO;AAEL,QAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,QAAA,OAAO,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"createAxios.mjs","sources":["../../../../../../packages/utils/src/http/createAxios.ts"],"sourcesContent":["import axios from 'axios';\nimport { ElMessage } from 'element-plus';\nimport Cookies from 'js-cookie';\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\nimport { isNumber } from '../is';\nimport { res401Interceptors } from './interceptors';\nimport { responseErrorMessage } from './errorMessage';\nimport { getHeaderValue } from './url';\nimport type { AxiosError, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios';\nimport { useGlobalConfig } from '@giime/hooks/base/useGlobalConfig';\nexport interface CreateAxiosConfig extends CreateAxiosDefaults {\n baseURL: string;\n /**服务器调用成功的code 一般是 0 或 200 */\n successCode: number | number[];\n // 是否隐藏Authorization\n hideAuthorization?: boolean;\n // 是否使用params传递token\n isUseParamsToken?: boolean;\n}\n\nexport function createAxios(\n config: CreateAxiosConfig,\n options?: {\n requestInterceptors?: (config: InternalAxiosRequestConfig<any>) => any;\n },\n) {\n const successCode = config.successCode ?? 0;\n const hideAuthorization = config.hideAuthorization ?? false;\n const isUseParamsToken = config.isUseParamsToken ?? false;\n\n const service = axios.create({\n withCredentials: true, // send cookies when cross-domain requests\n timeout: 120_000,\n headers: {\n 'content-type': 'application/json',\n Accept: '*/*',\n },\n ...config,\n });\n\n // 请求拦截器\n service.interceptors.request.use(\n async config => {\n const logingStore = useLoginStore();\n const _token = Cookies.get('token') ?? logingStore.userToken;\n const _user = Cookies.get('sso_user_id') ?? logingStore.userId;\n\n // 获取自定义配置的登录信息\n const loginEnvKey = 'VITE_GIIME_LOGIN_GK_SERVICE_USER';\n\n const importMetaEnv = useGlobalConfig('env');\n // 检查是否已存在 gk-service-user (不区分大小写)\n const gkServiceUser = getHeaderValue(config.headers, 'gk-service-user');\n if (!gkServiceUser) {\n config.headers['gk-service-user'] = importMetaEnv.value[loginEnvKey] || undefined;\n }\n\n if (!config.params) {\n config.params = {};\n }\n // 是否隐藏Authorization\n if (!hideAuthorization) {\n // 是否使用params传递token\n if (isUseParamsToken) {\n config.params._token = _token;\n config.params._user = _user;\n }\n\n if (_token) {\n config.headers.Authorization = `Bearer ${_token}`;\n }\n }\n\n await options?.requestInterceptors?.(config);\n return config;\n },\n error => {\n console.error('请求错误', error); // for debug\n return Promise.reject(error);\n },\n );\n // 添加响应拦截器\n service.interceptors.response.use(\n async response => {\n // 对响应数据做点什么\n const res = response.data;\n const msg = (res?.comment ?? res?.message ?? res?.errMsg ?? res?.msg) || '接口请求错误';\n if (!isNumber(res?.code)) {\n return response;\n }\n // 成功情况\n else if (res.code === successCode || res.errCode === successCode) {\n return response;\n }\n // 成功情况 successCode为数组\n else if (Array.isArray(successCode) && (successCode.includes(res.code) || successCode.includes(res.errCode))) {\n return response;\n }\n // 401\n else if (res.code === 401) {\n const res = await res401Interceptors(service, response.config);\n return res;\n }\n ElMessage({\n message: msg,\n type: 'error',\n grouping: true,\n duration: 5 * 1000,\n showClose: true,\n });\n return Promise.reject(response);\n // return response;\n },\n async (err: AxiosError) => {\n console.error(err);\n if (err?.response?.status === 401 && !err.message.includes('timeout')) {\n const res = await res401Interceptors(service, err.config!);\n return res;\n } else {\n // 对响应错误做点什么\n responseErrorMessage(err);\n return Promise.reject(err);\n }\n },\n );\n\n return {\n service,\n };\n}\n"],"names":["config","res"],"mappings":"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"}
@@ -2,5 +2,5 @@ export { createAxios } from './createAxios.mjs';
2
2
  export { errorMessage, responseErrorMessage } from './errorMessage.mjs';
3
3
  export { req401Interceptors, res401Interceptors } from './interceptors.mjs';
4
4
  export { giimeDevProxy, giimeDevProxyFn } from './devProxy.mjs';
5
- export { getDomain, urlJoin } from './url.mjs';
5
+ export { getDomain, getHeaderValue, urlJoin } from './url.mjs';
6
6
  //# sourceMappingURL=index.mjs.map
@@ -13,3 +13,12 @@ export declare function getDomain(): string | undefined;
13
13
  * @example urlJoin('/', 'ai/copywriting/gen') => /ai/copywriting/gen
14
14
  */
15
15
  export declare function urlJoin(...parts: string[]): string;
16
+ /**
17
+ * 获取 headers 中指定 key 的值(不区分大小写)
18
+ * @param headers - headers 对象
19
+ * @param key - 要查找的 key
20
+ * @returns 找到的 header 值,未找到返回 undefined
21
+ * @example getHeaderValue(headers, 'content-type') => 'application/json'
22
+ * @example getHeaderValue(headers, 'Content-Type') => 'application/json'
23
+ */
24
+ export declare function getHeaderValue(headers: Record<string, any>, key: string): any;
@@ -33,6 +33,11 @@ function urlJoin(...parts) {
33
33
  }).filter(Boolean).join("/");
34
34
  return parts[0] === "/" ? "/" + result : result;
35
35
  }
36
+ function getHeaderValue(headers, key) {
37
+ const lowerKey = key.toLowerCase();
38
+ const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === lowerKey);
39
+ return foundKey ? headers[foundKey] : void 0;
40
+ }
36
41
 
37
- export { getDomain, urlJoin };
42
+ export { getDomain, getHeaderValue, urlJoin };
38
43
  //# sourceMappingURL=url.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.mjs","sources":["../../../../../../packages/utils/src/http/url.ts"],"sourcesContent":["/**\n * 获取当前页面的域\n * @example https://www.baidu.com/s?wd=hello&ie=utf-8 => .baidu.com\n * @example https://127.0.0.1:5000/dashboard => 127.0.0.1\n * @example http://localhost:3000/test => localhost\n */\nexport function getDomain() {\n const url = window.location.href;\n // eslint-disable-next-line no-useless-escape\n const domainPattern = /https?:\\/\\/([^\\/]+)/;\n const match = url.match(domainPattern);\n\n if (match) {\n const domain = match[1];\n // 去除端口号,只保留域名或IP部分\n const domainWithoutPort = domain.split(':')[0];\n\n // 检查是否是IP地址,如果是则直接返回IP\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(domainWithoutPort)) {\n return domainWithoutPort;\n }\n\n // 检查是否是localhost,如果是则直接返回localhost\n if (domainWithoutPort === 'localhost') {\n return 'localhost';\n }\n\n // 提取主域名部分(对于真实域名,返回 .domain.com 格式)\n const domainParts = domainWithoutPort.split('.');\n if (domainParts.length > 2) {\n return `.${domainParts.slice(-2).join('.')}`;\n } else {\n return `.${domainWithoutPort}`;\n }\n }\n\n return undefined;\n}\n\n// // 使用示例\n// console.log(getDomain());\n/**\n * 拼接 url 路径,自动处理多余的 /\n * @param {...string[]} parts 路径片段\n * @returns {string}\n * @example urlJoin('https://www.baidu.com', 's', 'wd=hello') => https://www.baidu.com/s/wd=hello\n * @example urlJoin('/', 'ai/copywriting/gen') => /ai/copywriting/gen\n */\nexport function urlJoin(...parts: string[]): string {\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0];\n\n const result = parts\n .map((part, i) => {\n if (i === 0) {\n // 对于第一个参数,如果只是 '/',保留为空但记住它\n if (part === '/') return '';\n return part.replace(/\\/+$/, ''); // 否则去掉结尾/\n }\n if (i === parts.length - 1) return part.replace(/^\\/+/, ''); // 最后一个去掉开头/\n\n return part.replace(/^\\/+|\\/+$/g, ''); // 中间的去掉头尾/\n })\n .filter(Boolean)\n .join('/');\n\n // 如果第一个参数是 '/',在结果前加上 '/'\n return parts[0] === '/' ? '/' + result : result;\n}\n"],"names":[],"mappings":"AAMO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,IAAA;AAE5B,EAAA,MAAM,aAAA,GAAgB,qBAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA;AAErC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AAEtB,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAG7C,IAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,iBAAiB,CAAA,EAAG;AACrD,MAAA,OAAO,iBAAA;AAAA,IACT;AAGA,IAAA,IAAI,sBAAsB,WAAA,EAAa;AACrC,MAAA,OAAO,WAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,KAAA,CAAM,GAAG,CAAA;AAC/C,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAI,WAAA,CAAY,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,OAAO,IAAI,iBAAiB,CAAA,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAA;AACT;AAWO,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAEtC,EAAA,MAAM,MAAA,GAAS,KAAA,CACZ,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChB,IAAA,IAAI,MAAM,CAAA,EAAG;AAEX,MAAA,IAAI,IAAA,KAAS,KAAK,OAAO,EAAA;AACzB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAAA,KAAM,MAAM,MAAA,GAAS,CAAA,SAAU,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAE1D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AAAA,EACtC,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAGX,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,GAAM,MAAM,MAAA,GAAS,MAAA;AAC3C;;;;"}
1
+ {"version":3,"file":"url.mjs","sources":["../../../../../../packages/utils/src/http/url.ts"],"sourcesContent":["/**\n * 获取当前页面的域\n * @example https://www.baidu.com/s?wd=hello&ie=utf-8 => .baidu.com\n * @example https://127.0.0.1:5000/dashboard => 127.0.0.1\n * @example http://localhost:3000/test => localhost\n */\nexport function getDomain() {\n const url = window.location.href;\n // eslint-disable-next-line no-useless-escape\n const domainPattern = /https?:\\/\\/([^\\/]+)/;\n const match = url.match(domainPattern);\n\n if (match) {\n const domain = match[1];\n // 去除端口号,只保留域名或IP部分\n const domainWithoutPort = domain.split(':')[0];\n\n // 检查是否是IP地址,如果是则直接返回IP\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(domainWithoutPort)) {\n return domainWithoutPort;\n }\n\n // 检查是否是localhost,如果是则直接返回localhost\n if (domainWithoutPort === 'localhost') {\n return 'localhost';\n }\n\n // 提取主域名部分(对于真实域名,返回 .domain.com 格式)\n const domainParts = domainWithoutPort.split('.');\n if (domainParts.length > 2) {\n return `.${domainParts.slice(-2).join('.')}`;\n } else {\n return `.${domainWithoutPort}`;\n }\n }\n\n return undefined;\n}\n\n// // 使用示例\n// console.log(getDomain());\n/**\n * 拼接 url 路径,自动处理多余的 /\n * @param {...string[]} parts 路径片段\n * @returns {string}\n * @example urlJoin('https://www.baidu.com', 's', 'wd=hello') => https://www.baidu.com/s/wd=hello\n * @example urlJoin('/', 'ai/copywriting/gen') => /ai/copywriting/gen\n */\nexport function urlJoin(...parts: string[]): string {\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0];\n\n const result = parts\n .map((part, i) => {\n if (i === 0) {\n // 对于第一个参数,如果只是 '/',保留为空但记住它\n if (part === '/') return '';\n return part.replace(/\\/+$/, ''); // 否则去掉结尾/\n }\n if (i === parts.length - 1) return part.replace(/^\\/+/, ''); // 最后一个去掉开头/\n\n return part.replace(/^\\/+|\\/+$/g, ''); // 中间的去掉头尾/\n })\n .filter(Boolean)\n .join('/');\n\n // 如果第一个参数是 '/',在结果前加上 '/'\n return parts[0] === '/' ? '/' + result : result;\n}\n\n/**\n * 获取 headers 中指定 key 的值(不区分大小写)\n * @param headers - headers 对象\n * @param key - 要查找的 key\n * @returns 找到的 header 值,未找到返回 undefined\n * @example getHeaderValue(headers, 'content-type') => 'application/json'\n * @example getHeaderValue(headers, 'Content-Type') => 'application/json'\n */\nexport function getHeaderValue(headers: Record<string, any>, key: string): any {\n const lowerKey = key.toLowerCase();\n const foundKey = Object.keys(headers).find(k => k.toLowerCase() === lowerKey);\n return foundKey ? headers[foundKey] : undefined;\n}\n"],"names":[],"mappings":"AAMO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,IAAA;AAE5B,EAAA,MAAM,aAAA,GAAgB,qBAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA;AAErC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AAEtB,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAG7C,IAAA,IAAI,yBAAA,CAA0B,IAAA,CAAK,iBAAiB,CAAA,EAAG;AACrD,MAAA,OAAO,iBAAA;AAAA,IACT;AAGA,IAAA,IAAI,sBAAsB,WAAA,EAAa;AACrC,MAAA,OAAO,WAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,KAAA,CAAM,GAAG,CAAA;AAC/C,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,OAAO,IAAI,WAAA,CAAY,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,OAAO,IAAI,iBAAiB,CAAA,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAA;AACT;AAWO,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,CAAC,CAAA;AAEtC,EAAA,MAAM,MAAA,GAAS,KAAA,CACZ,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AAChB,IAAA,IAAI,MAAM,CAAA,EAAG;AAEX,MAAA,IAAI,IAAA,KAAS,KAAK,OAAO,EAAA;AACzB,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAAA,KAAM,MAAM,MAAA,GAAS,CAAA,SAAU,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAE1D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AAAA,EACtC,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAGX,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,GAAM,MAAM,MAAA,GAAS,MAAA;AAC3C;AAUO,SAAS,cAAA,CAAe,SAA8B,GAAA,EAAkB;AAC7E,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAA,EAAY,KAAM,QAAQ,CAAA;AAC5E,EAAA,OAAO,QAAA,GAAW,OAAA,CAAQ,QAAQ,CAAA,GAAI,KAAA,CAAA;AACxC;;;;"}
@@ -105,3 +105,25 @@ export declare const isPSD: (url: string) => boolean;
105
105
  * @param url 文件链接 或 文件名
106
106
  */
107
107
  export declare const isZip: (url: string) => boolean;
108
+ /**
109
+ * 移动设备正则表达式
110
+ */
111
+ export declare const MOBILE_DEVICE_REGEX: RegExp;
112
+ /**
113
+ * 平板设备正则表达式
114
+ */
115
+ export declare const TABLET_DEVICE_REGEX: RegExp;
116
+ /**
117
+ * 钉钉浏览器正则表达式
118
+ */
119
+ export declare const DINGTALK_REGEX: RegExp;
120
+ /**
121
+ * 判断是否为移动设备
122
+ * @returns 是否为移动设备
123
+ */
124
+ export declare const isMobile: () => boolean;
125
+ /**
126
+ * 判断是否为钉钉浏览器
127
+ * @returns 是否为钉钉浏览器
128
+ */
129
+ export declare const isDingTalk: () => boolean;
@@ -124,6 +124,21 @@ const isPPT = (url) => isFileType(url, "Ppt" /* Ppt */);
124
124
  const isText = (url) => isFileType(url, "Text" /* Text */);
125
125
  const isPSD = (url) => isFileType(url, "Psd" /* Psd */);
126
126
  const isZip = (url) => isFileType(url, "Zip" /* Zip */);
127
+ const MOBILE_DEVICE_REGEX = /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i;
128
+ const TABLET_DEVICE_REGEX = /ipad|android(?!.*mobile)|tablet/i;
129
+ const DINGTALK_REGEX = /dingtalk/i;
130
+ const isMobile = () => {
131
+ if (!isClient) return false;
132
+ const ua = navigator.userAgent.toLowerCase();
133
+ const isMobileDevice = MOBILE_DEVICE_REGEX.test(ua);
134
+ const isTabletDevice = TABLET_DEVICE_REGEX.test(ua);
135
+ return isMobileDevice || isTabletDevice;
136
+ };
137
+ const isDingTalk = () => {
138
+ if (!isClient) return false;
139
+ const ua = navigator.userAgent.toLowerCase();
140
+ return DINGTALK_REGEX.test(ua);
141
+ };
127
142
 
128
- export { FILE_EXTENSIONS, FileType, getTag, isBoolean, isClient, isDate, isDecimal, isError, isEven, isExcel, isFunction, isHttps, isIOS, isImageUrl, isInteger, isNegative, isNil, isNull, isNumber, isObjectLike, isOdd, isPDF, isPPT, isPSD, isPlainObject, isPositive, isString, isSymbol, isText, isUndefined, isVideoUrl, isWord, isZip };
143
+ export { DINGTALK_REGEX, FILE_EXTENSIONS, FileType, MOBILE_DEVICE_REGEX, TABLET_DEVICE_REGEX, getTag, isBoolean, isClient, isDate, isDecimal, isDingTalk, isError, isEven, isExcel, isFunction, isHttps, isIOS, isImageUrl, isInteger, isMobile, isNegative, isNil, isNull, isNumber, isObjectLike, isOdd, isPDF, isPPT, isPSD, isPlainObject, isPositive, isString, isSymbol, isText, isUndefined, isVideoUrl, isWord, isZip };
129
144
  //# sourceMappingURL=is.mjs.map