vite-uni-dev-tool 0.0.21 → 0.0.23

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 (47) hide show
  1. package/README.md +13 -3
  2. package/dist/const.d.ts +16 -0
  3. package/dist/const.d.ts.map +1 -1
  4. package/dist/const.js +29 -25
  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 +195 -157
  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 +22 -2
  19. package/dist/type.d.ts.map +1 -1
  20. package/dist/v2/DevTool/index.vue +8 -8
  21. package/dist/v3/ConsoleList/ConsoleItem.vue +1 -1
  22. package/dist/v3/DevTool/index.vue +13 -12
  23. package/dist/v3/DevToolWindow/const.d.ts +30 -0
  24. package/dist/v3/DevToolWindow/const.d.ts.map +1 -0
  25. package/dist/v3/DevToolWindow/const.ts +123 -0
  26. package/dist/v3/DevToolWindow/index.vue +242 -108
  27. package/dist/v3/NetworkList/InterceptConfig.vue +835 -0
  28. package/dist/v3/NetworkList/InterceptItem.vue +132 -0
  29. package/dist/v3/NetworkList/NetworkDetail.vue +25 -13
  30. package/dist/v3/NetworkList/NetworkIntercept.vue +85 -0
  31. package/dist/v3/NetworkList/NetworkItem.vue +18 -29
  32. package/dist/v3/NetworkList/NetworkSend.vue +61 -45
  33. package/dist/v3/NetworkList/index.vue +11 -67
  34. package/dist/v3/SettingList/index.vue +26 -2
  35. package/dist/v3/SettingList/typing.d.ts +2 -0
  36. package/dist/v3/SourceCode/Line.vue +3 -3
  37. package/dist/v3/SourceCode/index.vue +1 -2
  38. package/dist/v3/Tag/index.vue +1 -0
  39. package/dist/v3/UploadList/UploadDetail.vue +36 -18
  40. package/dist/v3/UploadList/UploadItem.vue +38 -34
  41. package/dist/v3/UploadList/index.vue +12 -1
  42. package/dist/v3/VirtualListPro/index.vue +15 -12
  43. package/dist/v3/WebSocket/WebSocketDetail.vue +258 -0
  44. package/dist/v3/WebSocket/WebSocketItem.vue +14 -30
  45. package/dist/v3/WebSocket/index.vue +6 -1
  46. package/package.json +1 -1
  47. package/dist/v3/WebSocket/WebSocketList.vue +0 -161
@@ -19,7 +19,8 @@
19
19
   {{ sortMap?.[currentNetworkSort] ?? '一' }} 
20
20
  </Tag>
21
21
 
22
- <Tag mode="clear" @click="onOpenSend"> 发起 </Tag>
22
+ <Tag mode="error" @click="emit('openIntercept')"> 拦截 </Tag>
23
+ <Tag mode="primary" @click="emit('openSend')"> 发起 </Tag>
23
24
  <Tag mode="clear" @click="onChoose('clear')"> 清除 </Tag>
24
25
  </view>
25
26
 
@@ -28,6 +29,7 @@
28
29
  :pageSize="15"
29
30
  :height="height"
30
31
  className="network-list"
32
+ v-if="networkList.length > 0"
31
33
  >
32
34
  <template v-slot="{ list, start }">
33
35
  <AutoSize
@@ -41,24 +43,14 @@
41
43
  :currentNetworkSort="currentNetworkSort"
42
44
  :mode="mode"
43
45
  :useDevSource="useDevSource"
44
- @openDetail="onOpenDetail(item)"
45
- @resend="onResend(item)"
46
+ @openDetail="emit('openDetail', item)"
47
+ @resend="emit('openSend', item)"
46
48
  @openCode="emit('openCode', $event)"
47
49
  />
48
50
  </AutoSize>
49
- <Empty v-if="!networkList || networkList.length === 0" />
50
51
  </template>
51
52
  </VirtualListPro>
52
-
53
- <!-- 请求详情 -->
54
- <NetworkDetail
55
- v-if="showDetail"
56
- :network="network"
57
- @close="onCloseDetail"
58
- />
59
-
60
- <!-- 发起请求 -->
61
- <NetworkSend v-if="showSend" :network="network" @close="onCloseSend" />
53
+ <Empty v-else />
62
54
  </view>
63
55
  </template>
64
56
  <script lang="ts" setup>
@@ -70,10 +62,9 @@ import FilterSelect from '../FilterSelect/index.vue';
70
62
  import type { DevTool } from '../../type';
71
63
  import VirtualListPro from '../VirtualListPro/index.vue';
72
64
  import AutoSize from '../VirtualListPro/AutoSize.vue';
73
- import NetworkSend from './NetworkSend.vue';
74
- import NetworkDetail from './NetworkDetail.vue';
65
+
75
66
  import { sortMap } from './const';
76
- import { onMounted, ref, reactive } from 'vue';
67
+ import { onMounted, ref } from 'vue';
77
68
 
78
69
  const props = defineProps<{
79
70
  currentNetworkType: string;
@@ -91,6 +82,9 @@ const emit = defineEmits<{
91
82
  (e: 'search', value: string): void;
92
83
  (e: 'sort', sort: -1 | 1): void;
93
84
  (e: 'openCode', value?: string): void;
85
+ (e: 'openSend', value?: DevTool.NetworkItem): void;
86
+ (e: 'openDetail', value?: DevTool.NetworkItem): void;
87
+ (e: 'openIntercept'): void;
94
88
  }>();
95
89
  const networkFilterItems = [
96
90
  {
@@ -125,29 +119,6 @@ const networkFilterItems = [
125
119
  },
126
120
  ];
127
121
 
128
- const showSend = ref(false);
129
-
130
- const showDetail = ref(false);
131
-
132
- const emptyNetwork = {
133
- index: 0,
134
- url: '',
135
- name: '',
136
- method: '',
137
- status: '',
138
- time: '',
139
- startTime: 0,
140
- endTime: 0,
141
- size: '',
142
- headers: {
143
- requestHeader: [],
144
- responseHeader: [],
145
- },
146
- response: '',
147
- payload: undefined,
148
- };
149
- const network = reactive<DevTool.NetworkItem>({ ...emptyNetwork });
150
-
151
122
  function onChoose(type: string) {
152
123
  emit('choose', type);
153
124
  }
@@ -158,33 +129,6 @@ onMounted(() => {
158
129
  height.value = windowHeight - 32 - 32;
159
130
  });
160
131
 
161
- function onOpenSend() {
162
- showSend.value = true;
163
- }
164
-
165
- function onCloseSend() {
166
- showSend.value = false;
167
-
168
- Object.assign(network, emptyNetwork);
169
- }
170
-
171
- function onOpenDetail(ni: DevTool.NetworkItem) {
172
- showDetail.value = true;
173
-
174
- Object.assign(network, emptyNetwork);
175
- Object.assign(network, ni);
176
- }
177
- function onCloseDetail() {
178
- showDetail.value = false;
179
- }
180
-
181
- function onResend(ni: DevTool.NetworkItem) {
182
- showSend.value = true;
183
-
184
- Object.assign(network, emptyNetwork);
185
- Object.assign(network, ni);
186
- }
187
-
188
132
  function onSort() {
189
133
  const sort = props.currentNetworkSort === 1 ? -1 : 1;
190
134
  emit('sort', sort);
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <view class="setting-content">
3
3
  <view class="setting-item">
4
- <DevToolTitle>DevTool(v0.0.21-vue3)</DevToolTitle>
4
+ <DevToolTitle>DevTool({{ version }}-vue3)</DevToolTitle>
5
5
  <view class="setting-item-content">
6
6
  <view class="setting-row">
7
7
  <view>显示调试按钮:</view>
@@ -163,15 +163,34 @@
163
163
  <button class="setting-button" @click="onExportLog">导出</button>
164
164
  </view>
165
165
  </view>
166
+ <view class="setting-item">
167
+ <DevToolTitle>请求拦截规则</DevToolTitle>
168
+ <view class="setting-item-content">
169
+ <view class="setting-row">
170
+ <view>缓存拦截规则到本地:</view>
171
+ <checkbox
172
+ :checked="cacheInterceptConfig"
173
+ color="#9254de"
174
+ style="transform: scale(0.8)"
175
+ @click="onCacheInterceptNetworkConfig"
176
+ />
177
+ </view>
178
+ <view class="setting-tips">勾选后将会把 network 拦截缓存到本地</view>
179
+ </view>
180
+ </view>
166
181
  </view>
167
182
  </template>
168
183
  <script lang="ts" setup>
169
184
  import { reactive } from 'vue';
170
185
  import DevToolTitle from '../DevToolTitle/index.vue';
171
- defineProps<{
186
+
187
+ const version = __VERSION__ ?? '1.0.0';
188
+
189
+ const props = defineProps<{
172
190
  devToolVisible?: boolean;
173
191
  sizeFormat?: string;
174
192
  theme?: string;
193
+ cacheInterceptConfig?: boolean;
175
194
  }>();
176
195
  const setting = reactive({
177
196
  restartDevTool: false,
@@ -206,6 +225,7 @@ const emit = defineEmits<{
206
225
  (e: 'clearCache'): void;
207
226
  (e: 'destroyDevTool'): void;
208
227
  (e: 'changeTheme', value: string): void;
228
+ (e: 'changeCacheInterceptConfig', value: boolean): void;
209
229
  }>();
210
230
 
211
231
  function onChangeShowDevButton(show: boolean) {
@@ -243,6 +263,10 @@ function onScreenshot() {
243
263
  function onClearCache() {
244
264
  emit('clearCache');
245
265
  }
266
+
267
+ function onCacheInterceptNetworkConfig() {
268
+ emit('changeCacheInterceptConfig', !props.cacheInterceptConfig);
269
+ }
246
270
  </script>
247
271
  <style scoped>
248
272
  .setting-content {
@@ -0,0 +1,2 @@
1
+ // 插件版本号
2
+ declare const __VERSION__: string;
@@ -35,7 +35,7 @@ const props = withDefaults(
35
35
  .source-code-line {
36
36
  display: flex;
37
37
  align-items: center;
38
- height: 24px;
38
+ height: 20px;
39
39
  }
40
40
 
41
41
  .source-code-line-active {
@@ -49,14 +49,14 @@ const props = withDefaults(
49
49
  padding: 0 6px;
50
50
  margin-right: 6px;
51
51
  text-align: right;
52
- height: 24px;
52
+ height: 20px;
53
53
  border-right: 1px solid var(--dev-tool-border-color);
54
54
  }
55
55
 
56
56
  .source-code-line-content {
57
57
  display: flex;
58
58
  white-space: nowrap;
59
- height: 24px;
59
+ height: 20px;
60
60
  }
61
61
 
62
62
  .source-code-line-word {
@@ -206,7 +206,6 @@ onMounted(() => {
206
206
  position: fixed;
207
207
  top: 0;
208
208
  left: 0;
209
- z-index: 1001;
210
209
  padding: 0 16px;
211
210
  /* #ifdef H5 */
212
211
  padding: 50px 16px;
@@ -218,7 +217,7 @@ onMounted(() => {
218
217
 
219
218
  width: 100vw;
220
219
  height: 100vh;
221
- font-size: 14px;
220
+ font-size: 12px;
222
221
  color: var(--dev-tool-text-color);
223
222
  box-sizing: border-box;
224
223
  transition: color 0.3s;
@@ -59,6 +59,7 @@ function onClick(event: MouseEvent) {
59
59
  border: 1px solid var(--dev-tool-success-color);
60
60
  }
61
61
  .tag-error {
62
+ color: #fff;
62
63
  background-color: var(--dev-tool-error-color);
63
64
  border: 1px solid var(--dev-tool-error-color);
64
65
  }
@@ -1,6 +1,8 @@
1
1
  <template>
2
2
  <view class="upload-detail" :style="{ zIndex: zIndex }">
3
3
  <view class="upload-detail-control">
4
+ <DevToolTitle style="margin-right: 16px">上传详情</DevToolTitle>
5
+
4
6
  <Tag
5
7
  v-for="item in selectItems"
6
8
  :active="currentSelect === item.value"
@@ -15,31 +17,42 @@
15
17
  </view>
16
18
 
17
19
  <view class="upload-detail-header" v-if="currentSelect === 'header'">
18
- <view class="upload-detail-title">常规</view>
19
- <view class="net-detail-item">
20
+ <DevToolTitle>常规</DevToolTitle>
21
+ <view class="upload-detail-item">
20
22
  <view>请求url:</view>
21
23
  <view>{{ upload.url }}</view>
22
24
  </view>
23
- <view class="net-detail-item">
25
+ <view class="upload-detail-item">
24
26
  <view>请求方法:</view>
25
27
  <Tag mode="info">{{ upload.method ?? 'POST' }}</Tag>
26
28
  </view>
27
- <view class="net-detail-item">
29
+ <view class="upload-detail-item">
28
30
  <view>状态代码:</view>
29
31
  <Tag mode="info">{{ upload.status }}</Tag>
30
32
  </view>
31
- <view class="upload-detail-title">请求头</view>
32
- <view
33
- class="net-detail-item"
34
- v-for="item in upload?.headers?.requestHeader"
35
- :key="item.key"
33
+
34
+ <DevToolTitle>请求头</DevToolTitle>
35
+ <template
36
+ v-if="
37
+ upload?.headers &&
38
+ upload?.headers?.requestHeader &&
39
+ upload?.headers?.requestHeader?.length > 0
40
+ "
36
41
  >
37
- <view>{{ item.key }}:</view>
38
- {{ item.value }}
39
- </view>
42
+ <view
43
+ class="upload-detail-item"
44
+ v-for="item in upload?.headers?.requestHeader"
45
+ :key="item.key"
46
+ >
47
+ <view>{{ item.key }}:</view>
48
+ {{ item.value }}
49
+ </view>
50
+ </template>
51
+ <Empty v-else />
52
+
40
53
  <!-- <view class="upload-detail-title">响应头</view>
41
54
  <view
42
- class="net-detail-item"
55
+ class="upload-detail-item"
43
56
  v-for="item in upload?.headers?.responseHeader"
44
57
  :key="item.key"
45
58
  >
@@ -81,6 +94,7 @@ import JsonPretty from '../JsonPretty/index.vue';
81
94
  import Tag from '../Tag/index.vue';
82
95
  import Empty from '../Empty/index.vue';
83
96
  import CircularButton from '../CircularButton/index.vue';
97
+ import DevToolTitle from '../DevToolTitle/index.vue';
84
98
  import type { DevTool } from '../../type';
85
99
  const props = defineProps<{ upload: DevTool.UploadItem; zIndex?: number }>();
86
100
  const emit = defineEmits<{ (e: 'close'): void }>();
@@ -160,11 +174,14 @@ function onClose() {
160
174
  top: 0;
161
175
  left: 0;
162
176
  padding: 0 16px;
163
- background-color: var(--dev-tool-bg2-color);
177
+ /* #ifdef H5 */
178
+ padding: 50px 16px;
179
+ /* #endif */
180
+ background-color: var(--dev-tool-bg3-color);
164
181
  box-sizing: border-box;
165
182
  transform: background-color 0.3s;
166
183
  }
167
- .upload-detail .upload-detail-control {
184
+ .upload-detail-control {
168
185
  display: flex;
169
186
  align-items: center;
170
187
  margin-bottom: 4px;
@@ -174,18 +191,19 @@ function onClose() {
174
191
  box-sizing: border-box;
175
192
  }
176
193
 
177
- .upload-detail .upload-detail-header .net-detail-item {
194
+ .upload-detail-item {
178
195
  display: flex;
179
196
  align-items: center;
180
197
  min-height: 28px;
181
198
  word-break: break-all;
199
+ font-size: 12px;
182
200
  }
183
- .upload-detail .upload-detail-header .net-detail-item > view:first-child {
201
+ .upload-detail-item > view:first-child {
184
202
  white-space: nowrap;
185
203
  margin-right: 8px;
186
204
  color: var(--dev-tool-info-color);
187
205
  }
188
- .upload-detail .upload-detail-payload {
206
+ .upload-detail-payload {
189
207
  word-break: break-all;
190
208
  max-width: 100%;
191
209
  }
@@ -1,14 +1,8 @@
1
1
  <template>
2
- <view class="upload-item">
2
+ <view class="upload-item" @click="emit('openDetail', upload)">
3
3
  <view class="upload-url-row">
4
4
  <Tag mode="info">POST</Tag>
5
5
  <view class="upload-url" v-html="upload.url" />
6
- <Tag
7
- mode="main"
8
- class="upload-detail-icon"
9
- @click="showDetail = !showDetail"
10
- >详情</Tag
11
- >
12
6
  </view>
13
7
  <view class="upload-info">
14
8
  <view>
@@ -28,39 +22,53 @@
28
22
  <view>进度: {{ upload.progress }}%</view>
29
23
  <view>
30
24
  开始:
31
- {{ upload.startTime ? formatDate(upload.startTime, ' HH:mm:ss') : '-' }}
25
+ {{
26
+ upload.startTime
27
+ ? formatDate(upload.startTime, ' HH:mm:ss:SS')
28
+ : '--:--:--:---'
29
+ }}
32
30
  </view>
33
31
  <view>
34
32
  结束:
35
- {{ upload.endTime ? formatDate(upload.endTime, ' HH:mm:ss') : '-' }}
33
+ {{
34
+ upload.endTime
35
+ ? formatDate(upload.endTime, ' HH:mm:ss:SS')
36
+ : '--:--:--:---'
37
+ }}
36
38
  </view>
37
39
  </view>
40
+ <view
41
+ :class="['upload-stock ', isUseDevSource ? 'upload-stock-link' : '']"
42
+ @click.stop="emit('openCode', upload.stack)"
43
+ >
44
+ {{ upload?.stack }}
45
+ </view>
38
46
  </view>
39
- <!-- <Transition name="slide-fade"> -->
40
- <UploadDetail
41
- v-if="showDetail"
42
- :upload="upload"
43
- :zIndex="zIndex"
44
- @close="onClose"
45
- />
46
- <!-- </Transition> -->
47
47
  </template>
48
48
 
49
49
  <script lang="ts" setup>
50
- import { ref } from 'vue';
50
+ import { computed } from 'vue';
51
51
  import Tag from '../Tag/index.vue';
52
- import UploadDetail from './UploadDetail.vue';
53
- import { formatDate } from '../../utils';
52
+ import { formatDate, isMockWX } from '../../utils';
54
53
  import type { DevTool } from '../../type';
55
- defineProps<{
54
+ const props = defineProps<{
56
55
  upload: DevTool.UploadItem;
57
56
  zIndex?: number;
57
+ mode?: string;
58
+ useDevSource?: boolean;
59
+ }>();
60
+ const emit = defineEmits<{
61
+ (e: 'openDetail', value: DevTool.UploadItem): void;
62
+ (e: 'openCode', value?: string): void;
58
63
  }>();
59
- const showDetail = ref(false);
60
64
 
61
- function onClose() {
62
- showDetail.value = false;
63
- }
65
+ const isUseDevSource = computed(() => {
66
+ return (
67
+ !isMockWX(props?.upload?.stack ?? '') &&
68
+ props.mode === 'development' &&
69
+ props.useDevSource
70
+ );
71
+ });
64
72
  </script>
65
73
  <style scoped>
66
74
  .upload-item {
@@ -103,15 +111,11 @@ function onClose() {
103
111
  color: var(--dev-tool-text-color);
104
112
  }
105
113
 
106
- .slide-fade-enter-active {
107
- transition: all 0.8s ease-out;
108
- }
109
- .slide-fade-leave-active {
110
- transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
114
+ .upload-stock {
115
+ text-align: right;
116
+ word-wrap: break-word;
111
117
  }
112
- .slide-fade-enter-from,
113
- .slide-fade-leave-to {
114
- transform: translateY(20px);
115
- opacity: 0;
118
+ .upload-stock-link {
119
+ text-decoration: underline;
116
120
  }
117
121
  </style>
@@ -29,7 +29,14 @@
29
29
  :index="start + index"
30
30
  :key="start + index"
31
31
  >
32
- <UploadItem :upload="item" :zIndex="zIndex" />
32
+ <UploadItem
33
+ :upload="item"
34
+ :zIndex="zIndex"
35
+ :mode="mode"
36
+ :useDevSource="useDevSource"
37
+ @openDetail="emit('openDetail', $event)"
38
+ @openCode="emit('openCode', $event)"
39
+ />
33
40
  </AutoSize>
34
41
  <Empty v-if="!uploadList || uploadList.length === 0" />
35
42
  </template>
@@ -50,13 +57,17 @@ defineProps<{
50
57
  currentUploadType: string;
51
58
  uploadList: DevTool.UploadItem[];
52
59
  modelValue: string;
60
+ mode: string;
53
61
  zIndex: number;
62
+ useDevSource: boolean;
54
63
  }>();
55
64
 
56
65
  const emit = defineEmits<{
57
66
  (e: 'choose', type: string): void;
58
67
  (e: 'update:modelValue', value: string): void;
59
68
  (e: 'search', value: string): void;
69
+ (e: 'openDetail', value: DevTool.UploadItem): void;
70
+ (e: 'openCode', value: string): void;
60
71
  }>();
61
72
  const uploadFilterItems = [
62
73
  {
@@ -111,14 +111,16 @@ const innerScrollIntoView = computed(() => {
111
111
 
112
112
  onBeforeMount(() => {
113
113
  // 初始渲染数据
114
- state.visitableData = props.data.slice(
115
- (props.defaultCurrent - 1) * props.pageSize,
116
- props.pageSize * 2,
117
- );
118
-
119
- state.currentHeight = itemsHeight
120
- .slice(0, (props.defaultCurrent - 1) * props.pageSize)
121
- ?.reduce((acc, cur) => acc + cur, 0);
114
+ state.visitableData =
115
+ props.data?.slice(
116
+ (props.defaultCurrent - 1) * props.pageSize,
117
+ props.pageSize * 2,
118
+ ) ?? [];
119
+
120
+ state.currentHeight =
121
+ itemsHeight
122
+ ?.slice(0, (props.defaultCurrent - 1) * props.pageSize)
123
+ ?.reduce((acc, cur) => acc + cur, 0) ?? 0;
122
124
  });
123
125
 
124
126
  // 数据更新时重置
@@ -147,11 +149,12 @@ watch(
147
149
  const endIndex = Math.min(currentAdd1 * pageSize, data.length);
148
150
 
149
151
  // 更新可见数据
150
- state.visitableData = data.slice(startIndex, endIndex);
152
+ state.visitableData = data?.slice(startIndex, endIndex) ?? [];
151
153
 
152
- state.currentHeight = itemsHeight
153
- .slice(0, currentSub1 * pageSize)
154
- ?.reduce((acc, cur) => acc + cur, 0);
154
+ state.currentHeight =
155
+ itemsHeight
156
+ ?.slice(0, currentSub1 * pageSize)
157
+ ?.reduce((acc, cur) => acc + cur, 0) ?? 0;
155
158
  },
156
159
  );
157
160