vite-uni-dev-tool 1.1.0 → 1.2.0
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/README.md +8 -0
- package/dist/const.cjs +1 -1
- package/dist/const.d.ts +1 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +2 -2
- package/dist/i18n/locales/en.cjs +1 -1
- package/dist/i18n/locales/en.d.ts +5 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +1 -1
- package/dist/i18n/locales/zh-Hans.cjs +1 -1
- package/dist/i18n/locales/zh-Hans.d.ts +5 -0
- package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
- package/dist/i18n/locales/zh-Hans.js +1 -1
- package/dist/modules/devIntercept/index.cjs +9 -9
- package/dist/modules/devIntercept/index.d.ts +1 -1
- package/dist/modules/devIntercept/index.d.ts.map +1 -1
- package/dist/modules/devIntercept/index.js +9 -9
- package/dist/modules/devStore/index.cjs +1 -1
- package/dist/modules/devStore/index.d.ts.map +1 -1
- package/dist/modules/devStore/index.js +1 -1
- package/dist/plugins/uniDevTool/transform/transformMain.cjs +3 -3
- package/dist/plugins/uniDevTool/transform/transformMain.d.ts +2 -1
- package/dist/plugins/uniDevTool/transform/transformMain.d.ts.map +1 -1
- package/dist/plugins/uniDevTool/transform/transformMain.js +3 -3
- package/dist/plugins/uniDevTool/transform/transformVue.cjs +31 -25
- package/dist/plugins/uniDevTool/transform/transformVue.d.ts +2 -1
- package/dist/plugins/uniDevTool/transform/transformVue.d.ts.map +1 -1
- package/dist/plugins/uniDevTool/transform/transformVue.js +30 -24
- package/dist/plugins/uniDevTool/uniDevTool.cjs +3 -3
- package/dist/plugins/uniDevTool/uniDevTool.d.ts +3 -1
- package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
- package/dist/plugins/uniDevTool/uniDevTool.js +3 -3
- package/dist/type.d.ts +3 -0
- package/dist/type.d.ts.map +1 -1
- package/dist/v3/DevTool/components/BluetoothList/BluetoothItem.vue +199 -199
- package/dist/v3/DevTool/components/BluetoothList/BluetoothTool.vue +730 -730
- package/dist/v3/DevTool/components/BluetoothList/index.vue +167 -167
- package/dist/v3/DevTool/components/CaptureScreen/index.vue +109 -109
- package/dist/v3/DevTool/components/ConsoleList/ConsoleItem.vue +230 -225
- package/dist/v3/DevTool/components/ConsoleList/RunJSInput.vue +247 -247
- package/dist/v3/DevTool/components/ConsoleList/index.vue +171 -171
- package/dist/v3/DevTool/components/ConsoleList/staticTips.ts +1145 -1145
- package/dist/v3/DevTool/components/DevToolTitle/index.vue +24 -24
- package/dist/v3/DevTool/components/DevToolWindow/DevToolOverlay.vue +197 -197
- package/dist/v3/DevTool/components/DevToolWindow/hooks/dataUtils.ts +48 -48
- package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolData.ts +387 -387
- package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolHandlers.ts +629 -629
- package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolOverlay.ts +201 -197
- package/dist/v3/DevTool/components/ElEvent/ElEventItem.vue +105 -105
- package/dist/v3/DevTool/components/ElEvent/index.vue +106 -106
- package/dist/v3/DevTool/components/Instance/components/InstanceTreeNode.vue +265 -265
- package/dist/v3/DevTool/components/Instance/flatten.ts +226 -226
- package/dist/v3/DevTool/components/Instance/index.vue +94 -94
- package/dist/v3/DevTool/components/Instance/registry.ts +49 -49
- package/dist/v3/DevTool/components/Instance/transformTree.ts +375 -375
- package/dist/v3/DevTool/components/Instance/transformTreeCtx.ts +268 -268
- package/dist/v3/DevTool/components/Instance/typing.d.ts +43 -43
- package/dist/v3/DevTool/components/InstanceDetail/index.vue +485 -485
- package/dist/v3/DevTool/components/JsonDetail/index.vue +70 -70
- package/dist/v3/DevTool/components/NFCList/NFCItem.vue +112 -112
- package/dist/v3/DevTool/components/NFCList/NFCTool.vue +454 -454
- package/dist/v3/DevTool/components/NFCList/const.ts +56 -56
- package/dist/v3/DevTool/components/NFCList/index.vue +94 -94
- package/dist/v3/DevTool/components/NetworkList/InterceptConfig.vue +624 -624
- package/dist/v3/DevTool/components/NetworkList/InterceptItem.vue +140 -140
- package/dist/v3/DevTool/components/NetworkList/NetworkDetail.vue +287 -287
- package/dist/v3/DevTool/components/NetworkList/NetworkIntercept.vue +88 -88
- package/dist/v3/DevTool/components/NetworkList/NetworkItem.vue +163 -163
- package/dist/v3/DevTool/components/NetworkList/NetworkSend.vue +589 -589
- package/dist/v3/DevTool/components/NetworkList/const.ts +4 -4
- package/dist/v3/DevTool/components/NetworkList/hooks/useNetworkForm.ts +86 -86
- package/dist/v3/DevTool/components/NetworkList/index.vue +160 -160
- package/dist/v3/DevTool/components/NetworkList/utils.ts +101 -101
- package/dist/v3/DevTool/components/Performance/index.vue +498 -498
- package/dist/v3/DevTool/components/Performance/modules/PerformanceMetrics.vue +153 -153
- package/dist/v3/DevTool/components/Performance/modules/usePerformanceChart.ts +460 -460
- package/dist/v3/DevTool/components/Performance/modules/usePerformanceData.ts +258 -258
- package/dist/v3/DevTool/components/PiniaList/index.vue +93 -93
- package/dist/v3/DevTool/components/RunJS/index.vue +148 -148
- package/dist/v3/DevTool/components/ScanCodeList/ScanCodeItem.vue +97 -97
- package/dist/v3/DevTool/components/ScanCodeList/index.vue +100 -100
- package/dist/v3/DevTool/components/SettingButton/index.vue +45 -45
- package/dist/v3/DevTool/components/SettingList/index.vue +218 -218
- package/dist/v3/DevTool/components/SettingList/modules/SettingBarrage.vue +304 -304
- package/dist/v3/DevTool/components/SettingList/modules/SettingDevTool.vue +212 -212
- package/dist/v3/DevTool/components/SettingList/modules/SettingInfo.vue +157 -157
- package/dist/v3/DevTool/components/SettingList/modules/SettingLanguage.vue +74 -74
- package/dist/v3/DevTool/components/SettingList/modules/SettingLog.vue +230 -230
- package/dist/v3/DevTool/components/SettingList/typing.d.ts +2 -2
- package/dist/v3/DevTool/components/SourceCode/Line.vue +127 -127
- package/dist/v3/DevTool/components/SourceCode/parseCode.ts +609 -609
- package/dist/v3/DevTool/components/StorageList/index.vue +174 -174
- package/dist/v3/DevTool/components/TransferList/TransferDetail.vue +268 -268
- package/dist/v3/DevTool/components/VuexList/index.vue +84 -84
- package/dist/v3/DevTool/index.vue +1 -0
- package/dist/v3/components/AppTransition/index.vue +176 -176
- package/dist/v3/components/AutoSizer/index.vue +192 -192
- package/dist/v3/components/AutoSizer/index1.vue +184 -184
- package/dist/v3/components/AutoSizer/utils.ts +49 -49
- package/dist/v3/components/Barrage/BarrageItem.vue +137 -137
- package/dist/v3/components/Barrage/index.vue +202 -202
- package/dist/v3/components/CircularButton/index.vue +84 -84
- package/dist/v3/components/CustomSwiper/CustomSwiperItem.vue +49 -49
- package/dist/v3/components/CustomSwiper/index.vue +104 -104
- package/dist/v3/components/DevErrorBoundary/index.vue +380 -0
- package/dist/v3/components/Empty/index.vue +29 -29
- package/dist/v3/components/FilterSelect/index.vue +179 -179
- package/dist/v3/components/JsonPretty/components/Brackets/index.vue +27 -27
- package/dist/v3/components/JsonPretty/components/Carets/index.vue +59 -59
- package/dist/v3/components/JsonPretty/components/CheckController/index.vue +136 -136
- package/dist/v3/components/JsonPretty/components/TreeNode/index.vue +387 -387
- package/dist/v3/components/JsonPretty/hooks/useClipboard.ts +21 -21
- package/dist/v3/components/JsonPretty/hooks/useError.ts +21 -21
- package/dist/v3/components/JsonPretty/type.ts +127 -127
- package/dist/v3/components/JsonPretty/utils/index.ts +169 -169
- package/dist/v3/components/MovableContainer/index.vue +8 -4
- package/dist/v3/components/Pick/index.vue +322 -322
- package/dist/v3/components/Tag/index.vue +113 -113
- package/dist/v3/components/VirtualList/AutoSize.vue +40 -40
- package/dist/v3/components/VirtualList/index.vue +416 -416
- package/dist/v3/hooks/useBluetooth/index.ts +561 -561
- package/dist/v3/hooks/useContainerStyle.ts +153 -153
- package/dist/v3/hooks/useNFC/index.ts +107 -107
- package/dist/v3/hooks/useNFC/typing.d.ts +396 -396
- package/dist/v3/hooks/useNFC/useNFCAndroid.ts +966 -966
- package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +812 -812
- package/dist/v3/hooks/useNFC/utils.ts +754 -754
- package/dist/v3/hooks/useRequest/index.ts +586 -586
- package/dist/v3/hooks/useRequest/utils.ts +267 -267
- package/dist/v3/hooks/useScanCode/index.ts +206 -206
- package/dist/v3/hooks/useWebsocket/index.ts +253 -253
- package/dist/v3/styles/theme.ts +12 -12
- package/package.json +9 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { ref } from "vue";
|
|
2
|
-
|
|
3
|
-
export function useClipboard() {
|
|
4
|
-
const copied = ref(false);
|
|
5
|
-
|
|
6
|
-
const copy = async (source: string) => {
|
|
7
|
-
try {
|
|
8
|
-
await navigator.clipboard.writeText(source);
|
|
9
|
-
copied.value = true;
|
|
10
|
-
setTimeout(() => {
|
|
11
|
-
copied.value = false;
|
|
12
|
-
}, 300);
|
|
13
|
-
} catch (err) {
|
|
14
|
-
console.error("[json-pretty] Copy failed: ", err);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
copy
|
|
20
|
-
};
|
|
21
|
-
}
|
|
1
|
+
import { ref } from "vue";
|
|
2
|
+
|
|
3
|
+
export function useClipboard() {
|
|
4
|
+
const copied = ref(false);
|
|
5
|
+
|
|
6
|
+
const copy = async (source: string) => {
|
|
7
|
+
try {
|
|
8
|
+
await navigator.clipboard.writeText(source);
|
|
9
|
+
copied.value = true;
|
|
10
|
+
setTimeout(() => {
|
|
11
|
+
copied.value = false;
|
|
12
|
+
}, 300);
|
|
13
|
+
} catch (err) {
|
|
14
|
+
console.error("[json-pretty] Copy failed: ", err);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
copy
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { watchEffect } from "vue";
|
|
2
|
-
|
|
3
|
-
type UseErrorOptions = {
|
|
4
|
-
emitListener: boolean;
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export function useError(message: string, { emitListener }: UseErrorOptions) {
|
|
8
|
-
const emit = () => {
|
|
9
|
-
throw new Error(`[VueJsonPretty] ${message}`);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
watchEffect(() => {
|
|
13
|
-
if (emitListener) {
|
|
14
|
-
emit();
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
emit
|
|
20
|
-
};
|
|
21
|
-
}
|
|
1
|
+
import { watchEffect } from "vue";
|
|
2
|
+
|
|
3
|
+
type UseErrorOptions = {
|
|
4
|
+
emitListener: boolean;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export function useError(message: string, { emitListener }: UseErrorOptions) {
|
|
8
|
+
const emit = () => {
|
|
9
|
+
throw new Error(`[VueJsonPretty] ${message}`);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
watchEffect(() => {
|
|
13
|
+
if (emitListener) {
|
|
14
|
+
emit();
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
emit
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
import type { CSSProperties } from 'vue';
|
|
2
|
-
|
|
3
|
-
export type JsonPrettyNodeProps = {
|
|
4
|
-
data: any;
|
|
5
|
-
rootPath: string;
|
|
6
|
-
indent: number;
|
|
7
|
-
showLength: boolean;
|
|
8
|
-
showDoubleQuotes: boolean;
|
|
9
|
-
renderNodeKey: any;
|
|
10
|
-
renderNodeValue: any;
|
|
11
|
-
};
|
|
12
|
-
export interface NodeDataType extends JSONFlattenReturnType {
|
|
13
|
-
id: number;
|
|
14
|
-
total?: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface JSONFlattenOptions {
|
|
18
|
-
key?: string;
|
|
19
|
-
index?: number;
|
|
20
|
-
showComma: boolean;
|
|
21
|
-
length: number;
|
|
22
|
-
type:
|
|
23
|
-
| 'content'
|
|
24
|
-
| 'objectStart'
|
|
25
|
-
| 'objectEnd'
|
|
26
|
-
| 'objectCollapsed'
|
|
27
|
-
| 'arrayStart'
|
|
28
|
-
| 'arrayEnd'
|
|
29
|
-
| 'arrayCollapsed';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export type JSONDataType =
|
|
33
|
-
| string
|
|
34
|
-
| number
|
|
35
|
-
| boolean
|
|
36
|
-
| unknown[]
|
|
37
|
-
| Record<string, unknown>
|
|
38
|
-
| null;
|
|
39
|
-
|
|
40
|
-
export interface JSONFlattenReturnType extends JSONFlattenOptions {
|
|
41
|
-
content: string | number | null | boolean;
|
|
42
|
-
level: number;
|
|
43
|
-
path: string;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export type StyleValue =
|
|
47
|
-
| false
|
|
48
|
-
| null
|
|
49
|
-
| undefined
|
|
50
|
-
| string
|
|
51
|
-
| CSSProperties
|
|
52
|
-
| Array<StyleValue>;
|
|
53
|
-
|
|
54
|
-
// 定义 Props 类型
|
|
55
|
-
type SelectableType = 'single' | 'multiple' | null;
|
|
56
|
-
|
|
57
|
-
export type TreeNodeProps = Partial<{
|
|
58
|
-
data: any;
|
|
59
|
-
indent: number;
|
|
60
|
-
showLength: boolean;
|
|
61
|
-
showDoubleQuotes: boolean;
|
|
62
|
-
selectableType: SelectableType;
|
|
63
|
-
showSelectController: boolean;
|
|
64
|
-
showLine: boolean;
|
|
65
|
-
showLineNumber: boolean;
|
|
66
|
-
showNodeActions: boolean;
|
|
67
|
-
selectOnClickNode: boolean;
|
|
68
|
-
highlightSelectedNode: boolean;
|
|
69
|
-
showIcon: boolean;
|
|
70
|
-
theme: string;
|
|
71
|
-
showKeyValueSpace: boolean;
|
|
72
|
-
editable: boolean;
|
|
73
|
-
editableTrigger: string;
|
|
74
|
-
node: NodeDataType;
|
|
75
|
-
checked: boolean;
|
|
76
|
-
collapsed: boolean;
|
|
77
|
-
customStyle?: CSSProperties;
|
|
78
|
-
fontSize: string;
|
|
79
|
-
onNodeClick: (node: NodeDataType) => void;
|
|
80
|
-
onNodeMouseover: (node: NodeDataType) => void;
|
|
81
|
-
onBracketsClick: (collapsed: boolean, node: NodeDataType) => void;
|
|
82
|
-
onIconClick: (collapsed: boolean, node: NodeDataType) => void;
|
|
83
|
-
onValueChange: (value: boolean, path: string) => void;
|
|
84
|
-
onSelectedChange: (node: NodeDataType) => void;
|
|
85
|
-
}> &
|
|
86
|
-
TreeNodeRequiredProps;
|
|
87
|
-
|
|
88
|
-
export type TreeNodeRequiredProps = {
|
|
89
|
-
node: NodeDataType;
|
|
90
|
-
rootPath: string;
|
|
91
|
-
nodeSelectable: (node: NodeDataType) => boolean;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export type TreeRequired = TreeNodeRequiredProps & {};
|
|
95
|
-
|
|
96
|
-
export type Tree = Partial<TreeNodeProps> &
|
|
97
|
-
Partial<
|
|
98
|
-
{
|
|
99
|
-
deep: number;
|
|
100
|
-
collapsedNodeLength: number;
|
|
101
|
-
virtual: boolean;
|
|
102
|
-
itemHeight: number;
|
|
103
|
-
height: number;
|
|
104
|
-
selectedValue: string | Array<any>;
|
|
105
|
-
collapsedOnClickBrackets: boolean;
|
|
106
|
-
style: CSSProperties;
|
|
107
|
-
pathCollapsible: (node: NodeDataType) => boolean;
|
|
108
|
-
/** 超过行数将会自动启用虚拟列表 */
|
|
109
|
-
autoVirtualRow: number;
|
|
110
|
-
showCopyAll: boolean;
|
|
111
|
-
} & TreeRequired
|
|
112
|
-
>;
|
|
113
|
-
|
|
114
|
-
export interface ScrollEvent {
|
|
115
|
-
detail: {
|
|
116
|
-
scrollLeft: number; // 横向滚动距离
|
|
117
|
-
scrollTop: number; // 纵向滚动距离
|
|
118
|
-
scrollHeight: number; // 可滚动区域的高度
|
|
119
|
-
scrollWidth: number; // 可滚动区域的宽度
|
|
120
|
-
deltaX: number; // 横向滚动增量
|
|
121
|
-
deltaY: number; // 纵向滚动增量
|
|
122
|
-
};
|
|
123
|
-
target: EventTarget; // 事件源组件
|
|
124
|
-
currentTarget: EventTarget; // 当前组件
|
|
125
|
-
timeStamp: number; // 事件触发时间戳
|
|
126
|
-
type: string; // 事件类型,这里是 'scroll'
|
|
127
|
-
}
|
|
1
|
+
import type { CSSProperties } from 'vue';
|
|
2
|
+
|
|
3
|
+
export type JsonPrettyNodeProps = {
|
|
4
|
+
data: any;
|
|
5
|
+
rootPath: string;
|
|
6
|
+
indent: number;
|
|
7
|
+
showLength: boolean;
|
|
8
|
+
showDoubleQuotes: boolean;
|
|
9
|
+
renderNodeKey: any;
|
|
10
|
+
renderNodeValue: any;
|
|
11
|
+
};
|
|
12
|
+
export interface NodeDataType extends JSONFlattenReturnType {
|
|
13
|
+
id: number;
|
|
14
|
+
total?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface JSONFlattenOptions {
|
|
18
|
+
key?: string;
|
|
19
|
+
index?: number;
|
|
20
|
+
showComma: boolean;
|
|
21
|
+
length: number;
|
|
22
|
+
type:
|
|
23
|
+
| 'content'
|
|
24
|
+
| 'objectStart'
|
|
25
|
+
| 'objectEnd'
|
|
26
|
+
| 'objectCollapsed'
|
|
27
|
+
| 'arrayStart'
|
|
28
|
+
| 'arrayEnd'
|
|
29
|
+
| 'arrayCollapsed';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type JSONDataType =
|
|
33
|
+
| string
|
|
34
|
+
| number
|
|
35
|
+
| boolean
|
|
36
|
+
| unknown[]
|
|
37
|
+
| Record<string, unknown>
|
|
38
|
+
| null;
|
|
39
|
+
|
|
40
|
+
export interface JSONFlattenReturnType extends JSONFlattenOptions {
|
|
41
|
+
content: string | number | null | boolean;
|
|
42
|
+
level: number;
|
|
43
|
+
path: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type StyleValue =
|
|
47
|
+
| false
|
|
48
|
+
| null
|
|
49
|
+
| undefined
|
|
50
|
+
| string
|
|
51
|
+
| CSSProperties
|
|
52
|
+
| Array<StyleValue>;
|
|
53
|
+
|
|
54
|
+
// 定义 Props 类型
|
|
55
|
+
type SelectableType = 'single' | 'multiple' | null;
|
|
56
|
+
|
|
57
|
+
export type TreeNodeProps = Partial<{
|
|
58
|
+
data: any;
|
|
59
|
+
indent: number;
|
|
60
|
+
showLength: boolean;
|
|
61
|
+
showDoubleQuotes: boolean;
|
|
62
|
+
selectableType: SelectableType;
|
|
63
|
+
showSelectController: boolean;
|
|
64
|
+
showLine: boolean;
|
|
65
|
+
showLineNumber: boolean;
|
|
66
|
+
showNodeActions: boolean;
|
|
67
|
+
selectOnClickNode: boolean;
|
|
68
|
+
highlightSelectedNode: boolean;
|
|
69
|
+
showIcon: boolean;
|
|
70
|
+
theme: string;
|
|
71
|
+
showKeyValueSpace: boolean;
|
|
72
|
+
editable: boolean;
|
|
73
|
+
editableTrigger: string;
|
|
74
|
+
node: NodeDataType;
|
|
75
|
+
checked: boolean;
|
|
76
|
+
collapsed: boolean;
|
|
77
|
+
customStyle?: CSSProperties;
|
|
78
|
+
fontSize: string;
|
|
79
|
+
onNodeClick: (node: NodeDataType) => void;
|
|
80
|
+
onNodeMouseover: (node: NodeDataType) => void;
|
|
81
|
+
onBracketsClick: (collapsed: boolean, node: NodeDataType) => void;
|
|
82
|
+
onIconClick: (collapsed: boolean, node: NodeDataType) => void;
|
|
83
|
+
onValueChange: (value: boolean, path: string) => void;
|
|
84
|
+
onSelectedChange: (node: NodeDataType) => void;
|
|
85
|
+
}> &
|
|
86
|
+
TreeNodeRequiredProps;
|
|
87
|
+
|
|
88
|
+
export type TreeNodeRequiredProps = {
|
|
89
|
+
node: NodeDataType;
|
|
90
|
+
rootPath: string;
|
|
91
|
+
nodeSelectable: (node: NodeDataType) => boolean;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export type TreeRequired = TreeNodeRequiredProps & {};
|
|
95
|
+
|
|
96
|
+
export type Tree = Partial<TreeNodeProps> &
|
|
97
|
+
Partial<
|
|
98
|
+
{
|
|
99
|
+
deep: number;
|
|
100
|
+
collapsedNodeLength: number;
|
|
101
|
+
virtual: boolean;
|
|
102
|
+
itemHeight: number;
|
|
103
|
+
height: number;
|
|
104
|
+
selectedValue: string | Array<any>;
|
|
105
|
+
collapsedOnClickBrackets: boolean;
|
|
106
|
+
style: CSSProperties;
|
|
107
|
+
pathCollapsible: (node: NodeDataType) => boolean;
|
|
108
|
+
/** 超过行数将会自动启用虚拟列表 */
|
|
109
|
+
autoVirtualRow: number;
|
|
110
|
+
showCopyAll: boolean;
|
|
111
|
+
} & TreeRequired
|
|
112
|
+
>;
|
|
113
|
+
|
|
114
|
+
export interface ScrollEvent {
|
|
115
|
+
detail: {
|
|
116
|
+
scrollLeft: number; // 横向滚动距离
|
|
117
|
+
scrollTop: number; // 纵向滚动距离
|
|
118
|
+
scrollHeight: number; // 可滚动区域的高度
|
|
119
|
+
scrollWidth: number; // 可滚动区域的宽度
|
|
120
|
+
deltaX: number; // 横向滚动增量
|
|
121
|
+
deltaY: number; // 纵向滚动增量
|
|
122
|
+
};
|
|
123
|
+
target: EventTarget; // 事件源组件
|
|
124
|
+
currentTarget: EventTarget; // 当前组件
|
|
125
|
+
timeStamp: number; // 事件触发时间戳
|
|
126
|
+
type: string; // 事件类型,这里是 'scroll'
|
|
127
|
+
}
|
|
@@ -1,169 +1,169 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
JSONDataType,
|
|
3
|
-
JSONFlattenOptions,
|
|
4
|
-
JSONFlattenReturnType,
|
|
5
|
-
} from '../../../type';
|
|
6
|
-
|
|
7
|
-
export function emitError(message: string): void {
|
|
8
|
-
throw new Error(`[JsonPretty] ${message}`);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function getDataType(value: unknown): string {
|
|
12
|
-
return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function jsonFlatten(
|
|
16
|
-
data: JSONDataType,
|
|
17
|
-
path = 'root',
|
|
18
|
-
level = 0,
|
|
19
|
-
options?: JSONFlattenOptions,
|
|
20
|
-
): JSONFlattenReturnType[] {
|
|
21
|
-
const {
|
|
22
|
-
key,
|
|
23
|
-
index,
|
|
24
|
-
type = 'content',
|
|
25
|
-
showComma = false,
|
|
26
|
-
length = 1,
|
|
27
|
-
} = options || ({} as JSONFlattenOptions);
|
|
28
|
-
const dataType = getDataType(data);
|
|
29
|
-
|
|
30
|
-
if (dataType === 'array') {
|
|
31
|
-
const inner = arrFlat(
|
|
32
|
-
(data as JSONDataType[]).map((item, idx, arr) =>
|
|
33
|
-
jsonFlatten(item, `${path}[${idx}]`, level + 1, {
|
|
34
|
-
index: idx,
|
|
35
|
-
showComma: idx !== arr.length - 1,
|
|
36
|
-
length,
|
|
37
|
-
type,
|
|
38
|
-
}),
|
|
39
|
-
),
|
|
40
|
-
) as JSONFlattenReturnType[];
|
|
41
|
-
return [
|
|
42
|
-
jsonFlatten('[', path, level, {
|
|
43
|
-
showComma: false,
|
|
44
|
-
key,
|
|
45
|
-
length: (data as unknown[]).length,
|
|
46
|
-
type: 'arrayStart',
|
|
47
|
-
})[0],
|
|
48
|
-
].concat(
|
|
49
|
-
inner,
|
|
50
|
-
jsonFlatten(']', path, level, {
|
|
51
|
-
showComma,
|
|
52
|
-
length: (data as unknown[]).length,
|
|
53
|
-
type: 'arrayEnd',
|
|
54
|
-
})[0],
|
|
55
|
-
);
|
|
56
|
-
} else if (dataType === 'object') {
|
|
57
|
-
const keys = Object.keys(data as Record<string, JSONDataType>);
|
|
58
|
-
const inner = arrFlat(
|
|
59
|
-
keys.map((objKey, idx, arr) =>
|
|
60
|
-
jsonFlatten(
|
|
61
|
-
(data as Record<string, JSONDataType>)[objKey],
|
|
62
|
-
/^[a-zA-Z_]\w*$/.test(objKey)
|
|
63
|
-
? `${path}.${objKey}`
|
|
64
|
-
: `${path}["${objKey}"]`,
|
|
65
|
-
level + 1,
|
|
66
|
-
{
|
|
67
|
-
key: objKey,
|
|
68
|
-
showComma: idx !== arr.length - 1,
|
|
69
|
-
length,
|
|
70
|
-
type,
|
|
71
|
-
},
|
|
72
|
-
),
|
|
73
|
-
),
|
|
74
|
-
) as JSONFlattenReturnType[];
|
|
75
|
-
return [
|
|
76
|
-
jsonFlatten('{', path, level, {
|
|
77
|
-
showComma: false,
|
|
78
|
-
key,
|
|
79
|
-
index,
|
|
80
|
-
length: keys.length,
|
|
81
|
-
type: 'objectStart',
|
|
82
|
-
})[0],
|
|
83
|
-
].concat(
|
|
84
|
-
inner,
|
|
85
|
-
jsonFlatten('}', path, level, {
|
|
86
|
-
showComma,
|
|
87
|
-
length: keys.length,
|
|
88
|
-
type: 'objectEnd',
|
|
89
|
-
})[0],
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return [
|
|
94
|
-
{
|
|
95
|
-
content: data as JSONFlattenReturnType['content'],
|
|
96
|
-
level,
|
|
97
|
-
key,
|
|
98
|
-
index,
|
|
99
|
-
path,
|
|
100
|
-
showComma,
|
|
101
|
-
length,
|
|
102
|
-
type,
|
|
103
|
-
},
|
|
104
|
-
];
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function arrFlat<T extends unknown[]>(arr: T): unknown[] {
|
|
108
|
-
if (typeof Array.prototype.flat === 'function') {
|
|
109
|
-
return arr.flat();
|
|
110
|
-
}
|
|
111
|
-
const stack = [...arr];
|
|
112
|
-
const result = [];
|
|
113
|
-
while (stack.length) {
|
|
114
|
-
const first = stack.shift();
|
|
115
|
-
if (Array.isArray(first)) {
|
|
116
|
-
stack.unshift(...first);
|
|
117
|
-
} else {
|
|
118
|
-
result.push(first);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return result;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export function cloneDeep<T>(source: T, hash = new WeakMap()): T {
|
|
125
|
-
if (source === null || source === undefined) return source;
|
|
126
|
-
if (source instanceof Date) return new Date(source) as T;
|
|
127
|
-
if (source instanceof RegExp) return new RegExp(source) as T;
|
|
128
|
-
if (typeof source !== 'object') return source;
|
|
129
|
-
if (hash.get(source as Record<string, unknown>))
|
|
130
|
-
return hash.get(source as Record<string, unknown>);
|
|
131
|
-
|
|
132
|
-
if (Array.isArray(source)) {
|
|
133
|
-
const output = source.map((item) => cloneDeep(item, hash));
|
|
134
|
-
hash.set(source, output);
|
|
135
|
-
return output as T;
|
|
136
|
-
}
|
|
137
|
-
const output = {} as T;
|
|
138
|
-
for (const key in source) {
|
|
139
|
-
output[key] = cloneDeep(source[key], hash);
|
|
140
|
-
}
|
|
141
|
-
hash.set(source as Record<string, unknown>, output);
|
|
142
|
-
return output as T;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export function stringToAutoType(source: string): unknown {
|
|
146
|
-
let value;
|
|
147
|
-
if (source === 'null') value = null;
|
|
148
|
-
else if (source === 'undefined') value = undefined;
|
|
149
|
-
else if (source === 'true') value = true;
|
|
150
|
-
else if (source === 'false') value = false;
|
|
151
|
-
else if (
|
|
152
|
-
source[0] + source[source.length - 1] === '""' ||
|
|
153
|
-
source[0] + source[source.length - 1] === "''"
|
|
154
|
-
) {
|
|
155
|
-
value = source.slice(1, -1);
|
|
156
|
-
} else if (
|
|
157
|
-
(typeof Number(source) === 'number' && !isNaN(Number(source))) ||
|
|
158
|
-
source === 'NaN'
|
|
159
|
-
) {
|
|
160
|
-
value = Number(source);
|
|
161
|
-
} else {
|
|
162
|
-
value = source;
|
|
163
|
-
}
|
|
164
|
-
return value;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export function isFunction(value: unknown): value is (...args: any[]) => any {
|
|
168
|
-
return typeof value === 'function';
|
|
169
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
JSONDataType,
|
|
3
|
+
JSONFlattenOptions,
|
|
4
|
+
JSONFlattenReturnType,
|
|
5
|
+
} from '../../../type';
|
|
6
|
+
|
|
7
|
+
export function emitError(message: string): void {
|
|
8
|
+
throw new Error(`[JsonPretty] ${message}`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function getDataType(value: unknown): string {
|
|
12
|
+
return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function jsonFlatten(
|
|
16
|
+
data: JSONDataType,
|
|
17
|
+
path = 'root',
|
|
18
|
+
level = 0,
|
|
19
|
+
options?: JSONFlattenOptions,
|
|
20
|
+
): JSONFlattenReturnType[] {
|
|
21
|
+
const {
|
|
22
|
+
key,
|
|
23
|
+
index,
|
|
24
|
+
type = 'content',
|
|
25
|
+
showComma = false,
|
|
26
|
+
length = 1,
|
|
27
|
+
} = options || ({} as JSONFlattenOptions);
|
|
28
|
+
const dataType = getDataType(data);
|
|
29
|
+
|
|
30
|
+
if (dataType === 'array') {
|
|
31
|
+
const inner = arrFlat(
|
|
32
|
+
(data as JSONDataType[]).map((item, idx, arr) =>
|
|
33
|
+
jsonFlatten(item, `${path}[${idx}]`, level + 1, {
|
|
34
|
+
index: idx,
|
|
35
|
+
showComma: idx !== arr.length - 1,
|
|
36
|
+
length,
|
|
37
|
+
type,
|
|
38
|
+
}),
|
|
39
|
+
),
|
|
40
|
+
) as JSONFlattenReturnType[];
|
|
41
|
+
return [
|
|
42
|
+
jsonFlatten('[', path, level, {
|
|
43
|
+
showComma: false,
|
|
44
|
+
key,
|
|
45
|
+
length: (data as unknown[]).length,
|
|
46
|
+
type: 'arrayStart',
|
|
47
|
+
})[0],
|
|
48
|
+
].concat(
|
|
49
|
+
inner,
|
|
50
|
+
jsonFlatten(']', path, level, {
|
|
51
|
+
showComma,
|
|
52
|
+
length: (data as unknown[]).length,
|
|
53
|
+
type: 'arrayEnd',
|
|
54
|
+
})[0],
|
|
55
|
+
);
|
|
56
|
+
} else if (dataType === 'object') {
|
|
57
|
+
const keys = Object.keys(data as Record<string, JSONDataType>);
|
|
58
|
+
const inner = arrFlat(
|
|
59
|
+
keys.map((objKey, idx, arr) =>
|
|
60
|
+
jsonFlatten(
|
|
61
|
+
(data as Record<string, JSONDataType>)[objKey],
|
|
62
|
+
/^[a-zA-Z_]\w*$/.test(objKey)
|
|
63
|
+
? `${path}.${objKey}`
|
|
64
|
+
: `${path}["${objKey}"]`,
|
|
65
|
+
level + 1,
|
|
66
|
+
{
|
|
67
|
+
key: objKey,
|
|
68
|
+
showComma: idx !== arr.length - 1,
|
|
69
|
+
length,
|
|
70
|
+
type,
|
|
71
|
+
},
|
|
72
|
+
),
|
|
73
|
+
),
|
|
74
|
+
) as JSONFlattenReturnType[];
|
|
75
|
+
return [
|
|
76
|
+
jsonFlatten('{', path, level, {
|
|
77
|
+
showComma: false,
|
|
78
|
+
key,
|
|
79
|
+
index,
|
|
80
|
+
length: keys.length,
|
|
81
|
+
type: 'objectStart',
|
|
82
|
+
})[0],
|
|
83
|
+
].concat(
|
|
84
|
+
inner,
|
|
85
|
+
jsonFlatten('}', path, level, {
|
|
86
|
+
showComma,
|
|
87
|
+
length: keys.length,
|
|
88
|
+
type: 'objectEnd',
|
|
89
|
+
})[0],
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return [
|
|
94
|
+
{
|
|
95
|
+
content: data as JSONFlattenReturnType['content'],
|
|
96
|
+
level,
|
|
97
|
+
key,
|
|
98
|
+
index,
|
|
99
|
+
path,
|
|
100
|
+
showComma,
|
|
101
|
+
length,
|
|
102
|
+
type,
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function arrFlat<T extends unknown[]>(arr: T): unknown[] {
|
|
108
|
+
if (typeof Array.prototype.flat === 'function') {
|
|
109
|
+
return arr.flat();
|
|
110
|
+
}
|
|
111
|
+
const stack = [...arr];
|
|
112
|
+
const result = [];
|
|
113
|
+
while (stack.length) {
|
|
114
|
+
const first = stack.shift();
|
|
115
|
+
if (Array.isArray(first)) {
|
|
116
|
+
stack.unshift(...first);
|
|
117
|
+
} else {
|
|
118
|
+
result.push(first);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function cloneDeep<T>(source: T, hash = new WeakMap()): T {
|
|
125
|
+
if (source === null || source === undefined) return source;
|
|
126
|
+
if (source instanceof Date) return new Date(source) as T;
|
|
127
|
+
if (source instanceof RegExp) return new RegExp(source) as T;
|
|
128
|
+
if (typeof source !== 'object') return source;
|
|
129
|
+
if (hash.get(source as Record<string, unknown>))
|
|
130
|
+
return hash.get(source as Record<string, unknown>);
|
|
131
|
+
|
|
132
|
+
if (Array.isArray(source)) {
|
|
133
|
+
const output = source.map((item) => cloneDeep(item, hash));
|
|
134
|
+
hash.set(source, output);
|
|
135
|
+
return output as T;
|
|
136
|
+
}
|
|
137
|
+
const output = {} as T;
|
|
138
|
+
for (const key in source) {
|
|
139
|
+
output[key] = cloneDeep(source[key], hash);
|
|
140
|
+
}
|
|
141
|
+
hash.set(source as Record<string, unknown>, output);
|
|
142
|
+
return output as T;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export function stringToAutoType(source: string): unknown {
|
|
146
|
+
let value;
|
|
147
|
+
if (source === 'null') value = null;
|
|
148
|
+
else if (source === 'undefined') value = undefined;
|
|
149
|
+
else if (source === 'true') value = true;
|
|
150
|
+
else if (source === 'false') value = false;
|
|
151
|
+
else if (
|
|
152
|
+
source[0] + source[source.length - 1] === '""' ||
|
|
153
|
+
source[0] + source[source.length - 1] === "''"
|
|
154
|
+
) {
|
|
155
|
+
value = source.slice(1, -1);
|
|
156
|
+
} else if (
|
|
157
|
+
(typeof Number(source) === 'number' && !isNaN(Number(source))) ||
|
|
158
|
+
source === 'NaN'
|
|
159
|
+
) {
|
|
160
|
+
value = Number(source);
|
|
161
|
+
} else {
|
|
162
|
+
value = source;
|
|
163
|
+
}
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function isFunction(value: unknown): value is (...args: any[]) => any {
|
|
168
|
+
return typeof value === 'function';
|
|
169
|
+
}
|