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.
- package/dist/index.css +131 -128
- package/es/components/src/base/autocomplete/Autocomplete.vue.d.ts +3 -3
- package/es/components/src/base/autocomplete/autocomplete.d.ts +1 -1
- package/es/components/src/base/autocomplete/index.d.ts +7 -7
- package/es/components/src/base/input/Input.vue.d.ts +3 -3
- package/es/components/src/base/input/index.d.ts +7 -7
- package/es/components/src/base/input/input.d.ts +1 -1
- package/es/components/src/base/inputNumber/InputNumber.vue.d.ts +3 -3
- package/es/components/src/base/inputNumber/index.d.ts +7 -7
- package/es/components/src/base/inputNumber/inputNumber.d.ts +1 -1
- package/es/components/src/base/mention/Mention.vue.d.ts +3 -3
- package/es/components/src/base/mention/index.d.ts +7 -7
- package/es/components/src/base/mention/mention.d.ts +1 -1
- package/es/components/src/base/upload/Upload.vue.d.ts +1 -1
- package/es/components/src/base/upload/index.d.ts +3 -3
- package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs +4 -1
- package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs.map +1 -1
- package/es/components/src/business/uploadItem/UploadItem.vue.d.ts +1 -1
- package/es/components/src/business/uploadItem/index.d.ts +3 -3
- package/es/components/src/business/uploadPro/UploadPro.vue.d.ts +1 -1
- package/es/components/src/business/uploadPro/index.d.ts +3 -3
- package/es/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.mjs +2 -1
- package/es/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.mjs.map +1 -1
- package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +1 -1
- package/es/components/src/composite/uploadFile/index.d.ts +3 -3
- package/es/giime/index.mjs +4 -2
- package/es/giime/index.mjs.map +1 -1
- package/es/giime/version.d.ts +1 -1
- package/es/giime/version.mjs +1 -1
- package/es/giime/version.mjs.map +1 -1
- package/es/index.css +131 -128
- package/es/utils/__tests__/crypto/base64.test.d.ts +1 -0
- package/es/utils/__tests__/vue/router.test.d.ts +1 -0
- package/es/utils/index.mjs +4 -2
- package/es/utils/index.mjs.map +1 -1
- package/es/utils/src/crypto/base64.d.ts +42 -0
- package/es/utils/src/crypto/base64.mjs +44 -0
- package/es/utils/src/crypto/base64.mjs.map +1 -0
- package/es/utils/src/crypto/index.d.ts +1 -0
- package/es/utils/src/crypto/index.mjs +1 -0
- package/es/utils/src/crypto/index.mjs.map +1 -1
- package/es/utils/src/http/createAxios.mjs +8 -0
- package/es/utils/src/http/createAxios.mjs.map +1 -1
- package/es/utils/src/http/index.mjs +1 -1
- package/es/utils/src/http/url.d.ts +9 -0
- package/es/utils/src/http/url.mjs +6 -1
- package/es/utils/src/http/url.mjs.map +1 -1
- package/es/utils/src/is.d.ts +22 -0
- package/es/utils/src/is.mjs +16 -1
- package/es/utils/src/is.mjs.map +1 -1
- package/es/utils/src/vue/index.d.ts +1 -0
- package/es/utils/src/vue/index.mjs +1 -0
- package/es/utils/src/vue/index.mjs.map +1 -1
- package/es/utils/src/vue/router.d.ts +30 -0
- package/es/utils/src/vue/router.mjs +28 -0
- package/es/utils/src/vue/router.mjs.map +1 -0
- package/lib/components/src/base/autocomplete/Autocomplete.vue.d.ts +3 -3
- package/lib/components/src/base/autocomplete/autocomplete.d.ts +1 -1
- package/lib/components/src/base/autocomplete/index.d.ts +7 -7
- package/lib/components/src/base/input/Input.vue.d.ts +3 -3
- package/lib/components/src/base/input/index.d.ts +7 -7
- package/lib/components/src/base/input/input.d.ts +1 -1
- package/lib/components/src/base/inputNumber/InputNumber.vue.d.ts +3 -3
- package/lib/components/src/base/inputNumber/index.d.ts +7 -7
- package/lib/components/src/base/inputNumber/inputNumber.d.ts +1 -1
- package/lib/components/src/base/mention/Mention.vue.d.ts +3 -3
- package/lib/components/src/base/mention/index.d.ts +7 -7
- package/lib/components/src/base/mention/mention.d.ts +1 -1
- package/lib/components/src/base/upload/Upload.vue.d.ts +1 -1
- package/lib/components/src/base/upload/index.d.ts +3 -3
- package/lib/components/src/business/loginDialog/LoginDialog.vue2.js +3 -0
- package/lib/components/src/business/loginDialog/LoginDialog.vue2.js.map +1 -1
- package/lib/components/src/business/uploadItem/UploadItem.vue.d.ts +1 -1
- package/lib/components/src/business/uploadItem/index.d.ts +3 -3
- package/lib/components/src/business/uploadPro/UploadPro.vue.d.ts +1 -1
- package/lib/components/src/business/uploadPro/index.d.ts +3 -3
- package/lib/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.js +2 -1
- package/lib/components/src/composite/tablePro/tableToolbar/TableToolbar.vue2.js.map +1 -1
- package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +1 -1
- package/lib/components/src/composite/uploadFile/index.d.ts +3 -3
- package/lib/giime/index.js +16 -0
- package/lib/giime/index.js.map +1 -1
- package/lib/giime/version.d.ts +1 -1
- package/lib/giime/version.js +1 -1
- package/lib/giime/version.js.map +1 -1
- package/lib/index.css +131 -128
- package/lib/utils/__tests__/crypto/base64.test.d.ts +1 -0
- package/lib/utils/__tests__/vue/router.test.d.ts +1 -0
- package/lib/utils/index.js +16 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/src/crypto/base64.d.ts +42 -0
- package/lib/utils/src/crypto/base64.js +51 -0
- package/lib/utils/src/crypto/base64.js.map +1 -0
- package/lib/utils/src/crypto/index.d.ts +1 -0
- package/lib/utils/src/crypto/index.js +7 -0
- package/lib/utils/src/crypto/index.js.map +1 -1
- package/lib/utils/src/http/createAxios.js +8 -0
- package/lib/utils/src/http/createAxios.js.map +1 -1
- package/lib/utils/src/http/index.js +1 -0
- package/lib/utils/src/http/index.js.map +1 -1
- package/lib/utils/src/http/url.d.ts +9 -0
- package/lib/utils/src/http/url.js +6 -0
- package/lib/utils/src/http/url.js.map +1 -1
- package/lib/utils/src/is.d.ts +22 -0
- package/lib/utils/src/is.js +20 -0
- package/lib/utils/src/is.js.map +1 -1
- package/lib/utils/src/vue/index.d.ts +1 -0
- package/lib/utils/src/vue/index.js +3 -0
- package/lib/utils/src/vue/index.js.map +1 -1
- package/lib/utils/src/vue/router.d.ts +30 -0
- package/lib/utils/src/vue/router.js +31 -0
- package/lib/utils/src/vue/router.js.map +1 -0
- 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-
|
|
884
|
-
|
|
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
|
-
|
|
889
|
-
|
|
890
|
-
|
|
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
|
-
.
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
899
|
-
|
|
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-
|
|
1037
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
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
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
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
|
-
.
|
|
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 {};
|
package/es/utils/index.mjs
CHANGED
|
@@ -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';
|
package/es/utils/index.mjs.map
CHANGED
|
@@ -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,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":"
|
|
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;;;;"}
|
package/es/utils/src/is.d.ts
CHANGED
|
@@ -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;
|
package/es/utils/src/is.mjs
CHANGED
|
@@ -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
|