vite-uni-dev-tool 0.0.20 → 0.0.22

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 (40) hide show
  1. package/README.md +14 -3
  2. package/dist/const.d.ts +12 -0
  3. package/dist/const.d.ts.map +1 -1
  4. package/dist/const.js +23 -20
  5. package/dist/core.d.ts +3 -3
  6. package/dist/core.d.ts.map +1 -1
  7. package/dist/core.js +89 -49
  8. package/dist/devEvent/index.d.ts +34 -0
  9. package/dist/devEvent/index.d.ts.map +1 -1
  10. package/dist/devEvent/index.js +71 -27
  11. package/dist/devIntercept/index.d.ts.map +1 -1
  12. package/dist/devIntercept/index.js +171 -145
  13. package/dist/devStore/index.d.ts +9 -0
  14. package/dist/devStore/index.d.ts.map +1 -1
  15. package/dist/devStore/index.js +54 -20
  16. package/dist/plugins/uniDevTool/uniDevTool.d.ts +1 -1
  17. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
  18. package/dist/type.d.ts +18 -1
  19. package/dist/type.d.ts.map +1 -1
  20. package/dist/v2/DevTool/index.vue +8 -8
  21. package/dist/v3/DevTool/index.vue +13 -12
  22. package/dist/v3/DevToolWindow/const.d.ts +30 -0
  23. package/dist/v3/DevToolWindow/const.d.ts.map +1 -0
  24. package/dist/v3/DevToolWindow/const.ts +123 -0
  25. package/dist/v3/DevToolWindow/index.vue +186 -107
  26. package/dist/v3/NetworkList/InterceptConfig.vue +835 -0
  27. package/dist/v3/NetworkList/InterceptItem.vue +132 -0
  28. package/dist/v3/NetworkList/NetworkDetail.vue +86 -31
  29. package/dist/v3/NetworkList/NetworkIntercept.vue +85 -0
  30. package/dist/v3/NetworkList/NetworkItem.vue +18 -18
  31. package/dist/v3/NetworkList/NetworkSend.vue +61 -45
  32. package/dist/v3/NetworkList/index.vue +11 -67
  33. package/dist/v3/SettingList/index.vue +23 -2
  34. package/dist/v3/SourceCode/Line.vue +101 -0
  35. package/dist/v3/SourceCode/index.vue +35 -62
  36. package/dist/v3/SourceCode/parseCode.d.ts +27 -0
  37. package/dist/v3/SourceCode/parseCode.d.ts.map +1 -0
  38. package/dist/v3/SourceCode/parseCode.ts +643 -0
  39. package/dist/v3/Tag/index.vue +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ <template>
2
+ <view class="intercept-item" @click.stop="emit('openConfig', network)">
3
+ <view class="intercept-url-row">
4
+ <Tag mode="info">{{ network.method }}</Tag>
5
+
6
+ <view class="intercept-url"> {{ lastUrl }} </view>
7
+
8
+ <Tag
9
+ mode="error"
10
+ class="intercept-detail-icon"
11
+ @click.stop="emit('remove', network)"
12
+ >
13
+ 删除
14
+ </Tag>
15
+ </view>
16
+ <view class="intercept-info">
17
+ <view class="intercept-info-item">
18
+ 期待状态:
19
+ <Tag :mode="tagMode" style="margin-left: 6px">{{ network.status }}</Tag>
20
+ </view>
21
+ <view class="intercept-info-item">
22
+ 期待结果:
23
+ {{ expectingResults }}
24
+ </view>
25
+ </view>
26
+ </view>
27
+ </template>
28
+
29
+ <script lang="ts" setup>
30
+ import { computed } from 'vue';
31
+
32
+ import Tag from '../Tag/index.vue';
33
+ import { formatDate } from '../../utils';
34
+ import type { DevTool } from '../../type';
35
+ const props = defineProps<{
36
+ network: DevTool.NetworkItem;
37
+
38
+ zIndex?: number;
39
+ mode?: string;
40
+ useDevSource?: boolean;
41
+ }>();
42
+
43
+ const emit = defineEmits<{
44
+ (e: 'openDetail'): void;
45
+ (e: 'resend'): void;
46
+ (e: 'openCode', value?: string): void;
47
+ (e: 'openConfig', value?: DevTool.NetworkItem): void;
48
+ (e: 'remove', value: DevTool.NetworkItem): void;
49
+ }>();
50
+
51
+ const lastUrl = computed(() => {
52
+ const start = props.network.url.lastIndexOf('/');
53
+ return props.network.url.slice(start + 1);
54
+ });
55
+
56
+ const tagMode = computed(() => {
57
+ const status = props.network.status;
58
+ return status === 'pending'
59
+ ? 'info'
60
+ : /[4,5]\d{2,}/.test(status + '') || status === 'error'
61
+ ? 'error'
62
+ : 'success';
63
+ });
64
+
65
+ const expectingResults = computed(() => {
66
+ return props.network.response.data ? '自定义' : '无';
67
+ });
68
+ </script>
69
+ <style scoped>
70
+ .intercept-item {
71
+ padding: 16px;
72
+ border-bottom: 1px solid var(--dev-tool-border-color);
73
+ font-size: var(--dev-tool-base-font-size);
74
+ }
75
+ .intercept-url-row {
76
+ display: flex;
77
+ align-items: center;
78
+ }
79
+
80
+ .intercept-url {
81
+ margin-left: 4px;
82
+ flex: 1;
83
+ white-space: nowrap;
84
+ overflow: hidden;
85
+ text-overflow: ellipsis;
86
+ }
87
+ .intercept-detail-icon {
88
+ margin-left: auto;
89
+ }
90
+
91
+ .intercept-info {
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: space-between;
95
+ margin-top: 4px;
96
+ color: var(--dev-tool-text-color);
97
+ transition: color 0.3s;
98
+ }
99
+ .intercept-info-item {
100
+ display: flex;
101
+ align-items: center;
102
+ width: 50%;
103
+ }
104
+
105
+ .slide-fade-enter-active {
106
+ transition: all 0.8s ease-out;
107
+ }
108
+ .slide-fade-leave-active {
109
+ transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
110
+ }
111
+ .slide-fade-enter-from,
112
+ .slide-fade-leave-to {
113
+ transform: translateY(20px);
114
+ opacity: 0;
115
+ }
116
+
117
+ .intercept-time-line {
118
+ position: relative;
119
+ margin-top: 10px;
120
+ height: 2px;
121
+ min-width: 6px;
122
+ background-color: var(--dev-tool-time-line-color);
123
+ }
124
+
125
+ .intercept-stock {
126
+ text-align: right;
127
+ word-wrap: break-word;
128
+ }
129
+ .intercept-stock-link {
130
+ text-decoration: underline;
131
+ }
132
+ </style>
@@ -13,10 +13,14 @@
13
13
  <CircularButton style="margin-left: auto" text="×" @click="onClose" />
14
14
  </view>
15
15
 
16
- <view class="network-detail-header" v-if="currentSelect === 'header'">
17
- <DevToolTitle>常规</DevToolTitle>
16
+ <view
17
+ class="network-detail-header"
18
+ :style="{ height: height + 'px' }"
19
+ v-if="currentSelect === 'header'"
20
+ >
21
+ <DevToolTitle> 常规 </DevToolTitle>
18
22
  <view class="net-detail-item">
19
- <view>请求url:</view>
23
+ <view>请求地址:</view>
20
24
  <view>{{ network.url }}</view>
21
25
  </view>
22
26
  <view class="net-detail-item">
@@ -26,32 +30,69 @@
26
30
  <view class="net-detail-item">
27
31
  <view>状态代码:</view>
28
32
  {{ network.status }}
33
+
34
+ <Tag v-if="network.intercepted" mode="error" style="margin-left: 6px">
35
+ 已拦截
36
+ </Tag>
37
+ </view>
38
+ <view class="net-detail-item">
39
+ <view>开始时间:</view>
40
+ {{
41
+ network.startTime
42
+ ? formatDate(network.startTime, 'HH:mm:ss:SS')
43
+ : '--:--:--'
44
+ }}
45
+ </view>
46
+ <view class="net-detail-item">
47
+ <view>结束时间:</view>
48
+ {{
49
+ network.endTime
50
+ ? formatDate(network.endTime, 'HH:mm:ss:SS')
51
+ : '--:--:--'
52
+ }}
53
+ </view>
54
+ <view class="net-detail-item">
55
+ <view>请求耗时:</view>
56
+ {{ network.time ?? '--' }}
57
+ </view>
58
+ <view class="net-detail-item">
59
+ <view>请求大小:</view>
60
+ {{ network.size ?? '--' }}
29
61
  </view>
30
62
 
31
63
  <DevToolTitle>请求头</DevToolTitle>
32
- <view
33
- class="net-detail-item"
34
- v-for="item in network.headers.requestHeader"
35
- :key="item.key"
36
- >
37
- <view>{{ item.key }}:</view>
38
- {{ item.value }}
64
+ <template v-if="network.headers.requestHeader.length > 0">
65
+ <view
66
+ class="net-detail-item"
67
+ v-for="item in network.headers.requestHeader"
68
+ :key="item.key"
69
+ >
70
+ <view>{{ item.key }}:</view>
71
+ {{ item.value }}
72
+ </view>
73
+ </template>
74
+ <view v-else>
75
+ <Empty text="暂无请求头" />
39
76
  </view>
40
77
 
41
78
  <DevToolTitle>响应头</DevToolTitle>
42
- <view
43
- class="net-detail-item"
44
- v-for="item in network.headers.responseHeader"
45
- :key="item.key"
46
- >
47
- <view>{{ item.key }}:</view>
48
- {{ item.value }}
79
+ <template v-if="network.headers.responseHeader.length > 0">
80
+ <view
81
+ class="net-detail-item"
82
+ v-for="item in network.headers.responseHeader"
83
+ :key="item.key"
84
+ >
85
+ <view>{{ item.key }}:</view>
86
+ {{ item.value }}
87
+ </view>
88
+ </template>
89
+ <view v-else>
90
+ <Empty text="暂无响应头" />
49
91
  </view>
50
92
  </view>
51
-
52
93
  <template v-if="currentSelect === 'payload'">
53
94
  <template v-if="payload?.type === 'object'">
54
- <JsonPretty :data="payload.value" />
95
+ <JsonPretty :data="payload.value" virtual :height="height" />
55
96
  </template>
56
97
  <view
57
98
  v-else-if="payload?.type === 'string'"
@@ -64,7 +105,7 @@
64
105
 
65
106
  <template v-if="currentSelect === 'response'">
66
107
  <template v-if="response?.type === 'object'">
67
- <JsonPretty :data="response.value" virtual />
108
+ <JsonPretty :data="response.value" virtual :height="height" />
68
109
  </template>
69
110
  <view
70
111
  v-else-if="response?.type === 'string'"
@@ -77,13 +118,14 @@
77
118
  </view>
78
119
  </template>
79
120
  <script lang="ts" setup>
80
- import { ref, computed } from 'vue';
121
+ import { ref, computed, onMounted } from 'vue';
81
122
  import JsonPretty from '../JsonPretty/index.vue';
82
123
  import Tag from '../Tag/index.vue';
83
124
  import Empty from '../Empty/index.vue';
84
125
  import CircularButton from '../CircularButton/index.vue';
85
126
  import DevToolTitle from '../DevToolTitle/index.vue';
86
127
  import type { DevTool } from '../../type';
128
+ import { formatDate } from '../../utils';
87
129
  const props = defineProps<{ network: DevTool.NetworkItem; zIndex?: number }>();
88
130
  const emit = defineEmits<{ (e: 'close'): void }>();
89
131
  const selectItems = [
@@ -100,6 +142,9 @@ const selectItems = [
100
142
  value: 'response',
101
143
  },
102
144
  ];
145
+
146
+ const height = ref(0);
147
+
103
148
  const currentSelect = ref('header');
104
149
 
105
150
  const payload = computed(() => {
@@ -148,50 +193,60 @@ function onSelect(item: { label: string; value: string }) {
148
193
  function onClose() {
149
194
  emit('close');
150
195
  }
196
+
197
+ onMounted(() => {
198
+ const { windowHeight } = uni.getWindowInfo();
199
+
200
+ height.value = windowHeight - 32 - 32 - 2;
201
+ });
151
202
  </script>
152
203
  <style scoped>
153
204
  .network-detail {
154
205
  position: fixed;
155
206
  width: 100vw;
156
207
  height: 100%;
157
- z-index: 5;
158
- /* z-index: 1001; */
208
+
159
209
  top: 0;
160
210
  left: 0;
161
211
  padding: 0 16px;
212
+ /* #ifdef H5 */
213
+ padding: 50px 16px;
214
+ /* #endif */
162
215
 
163
216
  background-color: var(--dev-tool-bg3-color);
164
217
  box-sizing: border-box;
165
218
  }
166
- .network-detail .network-detail-control {
219
+ .network-detail-control {
167
220
  display: flex;
168
221
  align-items: center;
169
- margin-bottom: 4px;
222
+ /* margin-bottom: 4px; */
170
223
  gap: 12px;
171
224
  height: 32px;
172
225
  border-bottom: 1px solid transparent;
173
226
  box-sizing: border-box;
174
227
  }
175
-
176
- .network-detail .network-detail-control :deep(.tag) {
228
+ .network-detail-control :deep(.tag) {
177
229
  margin-right: 16px;
178
230
  }
179
- .network-detail .network-detail-control :deep(.tag):last-child {
231
+ .network-detail-control :deep(.tag):last-child {
180
232
  margin-right: 0;
181
233
  }
182
234
 
183
- .network-detail .network-detail-header .net-detail-item {
235
+ .net-detail-item {
184
236
  display: flex;
185
237
  align-items: center;
186
238
  min-height: 28px;
187
239
  word-break: break-all;
188
240
  }
189
- .network-detail .network-detail-header .net-detail-item > view:first-child {
241
+ .network-detail-header {
242
+ overflow: auto;
243
+ }
244
+ .net-detail-item > view:first-child {
190
245
  white-space: nowrap;
191
246
  margin-right: 8px;
192
247
  color: var(--dev-tool-info-color);
193
248
  }
194
- .network-detail .network-detail-payload {
249
+ .network-detail-payload {
195
250
  word-break: break-all;
196
251
  max-width: 100%;
197
252
  }
@@ -0,0 +1,85 @@
1
+ <template>
2
+ <view class="network-intercept" :style="{ zIndex: zIndex }">
3
+ <view class="network-intercept-control">
4
+ <DevToolTitle>请求拦截</DevToolTitle>
5
+ <CircularButton
6
+ style="margin-left: auto"
7
+ text="+"
8
+ @click="emit('openConfig')"
9
+ />
10
+ <CircularButton
11
+ style="margin-left: 6px"
12
+ text="×"
13
+ @click="emit('close')"
14
+ />
15
+ </view>
16
+ <VirtualListPro
17
+ class="network-intercept-list"
18
+ :data="interceptNetworkList"
19
+ :pageSize="15"
20
+ v-if="interceptNetworkList && interceptNetworkList.length > 0"
21
+ >
22
+ <template v-slot="{ list, start }">
23
+ <AutoSize
24
+ v-for="(item, index) in list"
25
+ :index="start + index"
26
+ :key="start + index"
27
+ >
28
+ <InterceptItem
29
+ :network="item"
30
+ @openConfig="emit('openConfig', $event)"
31
+ @remove="emit('remove', $event)"
32
+ />
33
+ </AutoSize>
34
+ </template>
35
+ </VirtualListPro>
36
+ <Empty v-else />
37
+ </view>
38
+ </template>
39
+ <script lang="ts" setup>
40
+ import type { DevTool } from '../../type';
41
+ import CircularButton from '../CircularButton/index.vue';
42
+ import DevToolTitle from '../DevToolTitle/index.vue';
43
+ import InterceptItem from './InterceptItem.vue';
44
+ import VirtualListPro from '../VirtualListPro/index.vue';
45
+ import AutoSize from '../VirtualListPro/AutoSize.vue';
46
+ import Empty from '../Empty/index.vue';
47
+
48
+ const props = defineProps<{
49
+ zIndex?: number;
50
+ interceptNetworkList?: DevTool.NetworkItem[];
51
+ }>();
52
+ const emit = defineEmits<{
53
+ (e: 'close'): void;
54
+ (e: 'remove', value: DevTool.NetworkItem): void;
55
+ (e: 'openConfig', value?: DevTool.NetworkItem): void;
56
+ }>();
57
+ </script>
58
+ <style lang="scss" scoped>
59
+ .network-intercept {
60
+ position: fixed;
61
+ width: 100vw;
62
+ height: 100%;
63
+ top: 0;
64
+ left: 0;
65
+
66
+ /* #ifdef H5 */
67
+ padding: 50px 0px;
68
+ /* #endif */
69
+
70
+ overflow: auto;
71
+
72
+ background-color: var(--dev-tool-bg3-color);
73
+ box-sizing: border-box;
74
+ }
75
+
76
+ .network-intercept-control {
77
+ padding: 0 16px;
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 12px;
81
+ height: 32px;
82
+ border-bottom: 1px solid var(--dev-tool-border-color);
83
+ box-sizing: border-box;
84
+ }
85
+ </style>
@@ -1,6 +1,9 @@
1
1
  <template>
2
2
  <view class="network-item" @click="emit('openDetail')">
3
3
  <view class="network-url-row">
4
+ <Tag mode="error" style="margin-right: 6px" v-if="network?.intercepted">
5
+
6
+ </Tag>
4
7
  <Tag mode="info">{{ network.method }}</Tag>
5
8
 
6
9
  <view class="network-url" v-html="lastUrl"> </view>
@@ -10,20 +13,7 @@
10
13
  </Tag>
11
14
  </view>
12
15
  <view class="network-info">
13
- <view>
14
- <Tag
15
- :mode="
16
- network.status === 'pending'
17
- ? 'info'
18
- : /[4,5]\d{2,}/.test(network.status + '') ||
19
- network.status === 'error'
20
- ? 'error'
21
- : 'success'
22
- "
23
- >{{ network.status }}</Tag
24
- >
25
- </view>
26
- <!-- <view>{{ network.status }}</view> -->
16
+ <Tag :mode="tagMode">{{ network.status }}</Tag>
27
17
  <view>{{ network.time }}</view>
28
18
  <view>{{ network.size }}</view>
29
19
  <view>
@@ -32,9 +22,9 @@
32
22
  {{
33
23
  network.startTime
34
24
  ? formatDate(network.startTime, 'HH:mm:ss:SS')
35
- : '--:--:--'
36
- }}</view
37
- >
25
+ : '--:--:--:---'
26
+ }}
27
+ </view>
38
28
  <view>
39
29
  结束:
40
30
  {{
@@ -89,6 +79,15 @@ const isUseDevSource = computed(() => {
89
79
  props.useDevSource
90
80
  );
91
81
  });
82
+
83
+ const tagMode = computed(() => {
84
+ const status = props.network.status;
85
+ return status === 'pending'
86
+ ? 'info'
87
+ : /[4,5]\d{2,}/.test(status + '') || status === 'error'
88
+ ? 'error'
89
+ : 'success';
90
+ });
92
91
  </script>
93
92
  <style scoped>
94
93
  .network-item {
@@ -102,8 +101,9 @@ const isUseDevSource = computed(() => {
102
101
  }
103
102
 
104
103
  .network-url {
105
- margin-left: 4px;
104
+ margin-left: 6px;
106
105
  flex: 1;
106
+ max-width: 300px;
107
107
  white-space: nowrap;
108
108
  overflow: hidden;
109
109
  text-overflow: ellipsis;