@tmagic/editor 1.4.6 → 1.4.8

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 (158) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/tmagic-editor.js +636 -589
  3. package/dist/tmagic-editor.umd.cjs +634 -586
  4. package/package.json +15 -11
  5. package/types/editorProps.d.ts +0 -7
  6. package/types/layouts/PropsPanel.vue.d.ts +9 -9
  7. package/types/layouts/sidebar/layer/use-click.d.ts +1 -1
  8. package/types/services/codeBlock.d.ts +2 -1
  9. package/types/services/dataSource.d.ts +2 -1
  10. package/types/services/dep.d.ts +12 -2
  11. package/types/services/editor.d.ts +22 -4
  12. package/types/services/props.d.ts +7 -6
  13. package/types/type.d.ts +6 -0
  14. package/types/utils/editor.d.ts +1 -0
  15. package/types/utils/idle-task.d.ts +14 -0
  16. package/types/utils/operator.d.ts +2 -2
  17. package/src/Editor.vue +0 -211
  18. package/src/components/CodeBlockEditor.vue +0 -268
  19. package/src/components/CodeParams.vue +0 -60
  20. package/src/components/ContentMenu.vue +0 -193
  21. package/src/components/FloatingBox.vue +0 -178
  22. package/src/components/Icon.vue +0 -27
  23. package/src/components/Resizer.vue +0 -23
  24. package/src/components/ScrollBar.vue +0 -151
  25. package/src/components/ScrollViewer.vue +0 -128
  26. package/src/components/SearchInput.vue +0 -37
  27. package/src/components/SplitView.vue +0 -186
  28. package/src/components/ToolButton.vue +0 -138
  29. package/src/components/Tree.vue +0 -71
  30. package/src/components/TreeNode.vue +0 -148
  31. package/src/editorProps.ts +0 -124
  32. package/src/fields/Code.vue +0 -50
  33. package/src/fields/CodeLink.vue +0 -80
  34. package/src/fields/CodeSelect.vue +0 -132
  35. package/src/fields/CodeSelectCol.vue +0 -139
  36. package/src/fields/DataSourceFieldSelect.vue +0 -149
  37. package/src/fields/DataSourceFields.vue +0 -323
  38. package/src/fields/DataSourceInput.vue +0 -325
  39. package/src/fields/DataSourceMethodSelect.vue +0 -153
  40. package/src/fields/DataSourceMethods.vue +0 -104
  41. package/src/fields/DataSourceMocks.vue +0 -255
  42. package/src/fields/DataSourceSelect.vue +0 -98
  43. package/src/fields/EventSelect.vue +0 -301
  44. package/src/fields/KeyValue.vue +0 -137
  45. package/src/fields/PageFragmentSelect.vue +0 -63
  46. package/src/fields/UISelect.vue +0 -135
  47. package/src/hooks/index.ts +0 -24
  48. package/src/hooks/use-code-block-edit.ts +0 -83
  49. package/src/hooks/use-data-source-edit.ts +0 -46
  50. package/src/hooks/use-data-source-method.ts +0 -100
  51. package/src/hooks/use-editor-content-height.ts +0 -26
  52. package/src/hooks/use-filter.ts +0 -55
  53. package/src/hooks/use-float-box.ts +0 -76
  54. package/src/hooks/use-getso.ts +0 -35
  55. package/src/hooks/use-next-float-box-position.ts +0 -29
  56. package/src/hooks/use-node-status.ts +0 -48
  57. package/src/hooks/use-stage.ts +0 -129
  58. package/src/hooks/use-window-rect.ts +0 -20
  59. package/src/icons/AppManageIcon.vue +0 -15
  60. package/src/icons/CenterIcon.vue +0 -13
  61. package/src/icons/CodeIcon.vue +0 -28
  62. package/src/icons/FolderMinusIcon.vue +0 -22
  63. package/src/icons/PinIcon.vue +0 -25
  64. package/src/icons/PinnedIcon.vue +0 -25
  65. package/src/index.ts +0 -118
  66. package/src/initService.ts +0 -447
  67. package/src/layouts/AddPageBox.vue +0 -55
  68. package/src/layouts/CodeEditor.vue +0 -226
  69. package/src/layouts/Framework.vue +0 -163
  70. package/src/layouts/NavMenu.vue +0 -200
  71. package/src/layouts/PropsPanel.vue +0 -130
  72. package/src/layouts/page-bar/AddButton.vue +0 -48
  73. package/src/layouts/page-bar/PageBar.vue +0 -159
  74. package/src/layouts/page-bar/PageBarScrollContainer.vue +0 -156
  75. package/src/layouts/page-bar/SwitchTypeButton.vue +0 -45
  76. package/src/layouts/sidebar/ComponentListPanel.vue +0 -134
  77. package/src/layouts/sidebar/Sidebar.vue +0 -278
  78. package/src/layouts/sidebar/code-block/CodeBlockList.vue +0 -142
  79. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +0 -70
  80. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +0 -84
  81. package/src/layouts/sidebar/data-source/DataSourceList.vue +0 -160
  82. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +0 -106
  83. package/src/layouts/sidebar/layer/LayerMenu.vue +0 -128
  84. package/src/layouts/sidebar/layer/LayerNodeTool.vue +0 -32
  85. package/src/layouts/sidebar/layer/LayerPanel.vue +0 -119
  86. package/src/layouts/sidebar/layer/use-click.ts +0 -110
  87. package/src/layouts/sidebar/layer/use-drag.ts +0 -161
  88. package/src/layouts/sidebar/layer/use-keybinding.ts +0 -54
  89. package/src/layouts/sidebar/layer/use-node-status.ts +0 -114
  90. package/src/layouts/workspace/Breadcrumb.vue +0 -35
  91. package/src/layouts/workspace/Workspace.vue +0 -46
  92. package/src/layouts/workspace/viewer/NodeListMenu.vue +0 -115
  93. package/src/layouts/workspace/viewer/Stage.vue +0 -246
  94. package/src/layouts/workspace/viewer/StageOverlay.vue +0 -68
  95. package/src/layouts/workspace/viewer/ViewerMenu.vue +0 -145
  96. package/src/services/BaseService.ts +0 -230
  97. package/src/services/codeBlock.ts +0 -324
  98. package/src/services/componentList.ts +0 -58
  99. package/src/services/dataSource.ts +0 -209
  100. package/src/services/dep.ts +0 -80
  101. package/src/services/editor.ts +0 -1087
  102. package/src/services/events.ts +0 -93
  103. package/src/services/history.ts +0 -126
  104. package/src/services/keybinding.ts +0 -220
  105. package/src/services/props.ts +0 -265
  106. package/src/services/stageOverlay.ts +0 -212
  107. package/src/services/storage.ts +0 -155
  108. package/src/services/ui.ts +0 -156
  109. package/src/shims-vue.d.ts +0 -6
  110. package/src/theme/breadcrumb.scss +0 -6
  111. package/src/theme/code-block.scss +0 -6
  112. package/src/theme/code-editor.scss +0 -38
  113. package/src/theme/common/var.scss +0 -14
  114. package/src/theme/component-list-panel.scss +0 -95
  115. package/src/theme/content-menu.scss +0 -76
  116. package/src/theme/data-source-field.scss +0 -12
  117. package/src/theme/data-source-fields.scss +0 -13
  118. package/src/theme/data-source-input.scss +0 -18
  119. package/src/theme/data-source-methods.scss +0 -13
  120. package/src/theme/data-source.scss +0 -28
  121. package/src/theme/event.scss +0 -37
  122. package/src/theme/floating-box.scss +0 -32
  123. package/src/theme/framework.scss +0 -69
  124. package/src/theme/icon.scss +0 -12
  125. package/src/theme/index.scss +0 -10
  126. package/src/theme/key-value.scss +0 -20
  127. package/src/theme/layer-panel.scss +0 -26
  128. package/src/theme/layout.scss +0 -9
  129. package/src/theme/nav-menu.scss +0 -78
  130. package/src/theme/page-bar.scss +0 -89
  131. package/src/theme/page-fragment-select.scss +0 -14
  132. package/src/theme/props-panel.scss +0 -55
  133. package/src/theme/resizer.scss +0 -66
  134. package/src/theme/ruler.scss +0 -38
  135. package/src/theme/search-input.scss +0 -14
  136. package/src/theme/sidebar.scss +0 -79
  137. package/src/theme/stage.scss +0 -76
  138. package/src/theme/theme.scss +0 -27
  139. package/src/theme/tree.scss +0 -89
  140. package/src/theme/workspace.scss +0 -9
  141. package/src/type.ts +0 -746
  142. package/src/utils/compose.ts +0 -52
  143. package/src/utils/config.ts +0 -29
  144. package/src/utils/content-menu.ts +0 -95
  145. package/src/utils/data-source/formConfigs/base.ts +0 -30
  146. package/src/utils/data-source/formConfigs/http.ts +0 -60
  147. package/src/utils/data-source/index.ts +0 -236
  148. package/src/utils/editor.ts +0 -294
  149. package/src/utils/index.ts +0 -24
  150. package/src/utils/keybinding-config.ts +0 -125
  151. package/src/utils/logger.ts +0 -47
  152. package/src/utils/monaco-editor.ts +0 -8
  153. package/src/utils/operator.ts +0 -106
  154. package/src/utils/props.ts +0 -504
  155. package/src/utils/scroll-viewer.ts +0 -165
  156. package/src/utils/tree.ts +0 -15
  157. package/src/utils/undo-redo.ts +0 -76
  158. package/tsconfig.build.json +0 -16
@@ -1,52 +0,0 @@
1
- /**
2
- * @param {Array} middleware
3
- * @return {Function}
4
- */
5
- export const compose = (middleware: Function[], isAsync: boolean) => {
6
- if (!Array.isArray(middleware)) throw new TypeError('Middleware 必须是一个数组!');
7
- for (const fn of middleware) {
8
- if (typeof fn !== 'function') throw new TypeError('Middleware 必须由函数组成!');
9
- }
10
-
11
- /**
12
- * @param {Object} args
13
- * @return {Promise}
14
- * @api public
15
- */
16
- return (args: any[], next?: Function) => {
17
- // last called middleware #
18
- let index = -1;
19
- return dispatch(0);
20
- function dispatch(i: number): Promise<void> | void {
21
- if (i <= index) {
22
- const error = new Error('next() 被多次调用');
23
- if (isAsync) {
24
- return Promise.reject(error);
25
- }
26
- throw error;
27
- }
28
- index = i;
29
- let fn = middleware[i];
30
- if (i === middleware.length && next) fn = next;
31
- if (!fn) {
32
- if (isAsync) {
33
- return Promise.resolve();
34
- }
35
- return;
36
- }
37
-
38
- if (isAsync) {
39
- try {
40
- return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));
41
- } catch (err) {
42
- return Promise.reject(err);
43
- }
44
- }
45
- try {
46
- return fn(...args, dispatch.bind(null, i + 1));
47
- } catch (err) {
48
- throw err;
49
- }
50
- }
51
- };
52
- };
@@ -1,29 +0,0 @@
1
- /*
2
- * Tencent is pleased to support the open source community by making TMagicEditor available.
3
- *
4
- * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */
18
-
19
- import { InstallOptions } from '@editor/type';
20
-
21
- let $TMAGIC_EDITOR: InstallOptions = {} as any;
22
-
23
- const setConfig = (option: InstallOptions): void => {
24
- $TMAGIC_EDITOR = option;
25
- };
26
-
27
- const getConfig = <K extends keyof InstallOptions>(key: K): InstallOptions[K] => $TMAGIC_EDITOR[key];
28
-
29
- export { getConfig, setConfig };
@@ -1,95 +0,0 @@
1
- import { computed, markRaw, Ref } from 'vue';
2
- import { CopyDocument, Delete, DocumentCopy } from '@element-plus/icons-vue';
3
-
4
- import { Id, MContainer, NodeType } from '@tmagic/schema';
5
- import { calcValueByFontsize, isPage, isPageFragment } from '@tmagic/utils';
6
-
7
- import ContentMenu from '@editor/components/ContentMenu.vue';
8
- import type { MenuButton, Services } from '@editor/type';
9
-
10
- import { COPY_STORAGE_KEY } from './editor';
11
-
12
- export const useDeleteMenu = (): MenuButton => ({
13
- type: 'button',
14
- text: '删除',
15
- icon: Delete,
16
- display: (services) => {
17
- const node = services?.editorService?.get('node');
18
- return node?.type !== NodeType.ROOT && !isPage(node) && !isPageFragment(node);
19
- },
20
- handler: (services) => {
21
- const nodes = services?.editorService?.get('nodes');
22
- nodes && services?.editorService?.remove(nodes);
23
- },
24
- });
25
-
26
- export const useCopyMenu = (): MenuButton => ({
27
- type: 'button',
28
- text: '复制',
29
- icon: markRaw(CopyDocument),
30
- handler: (services) => {
31
- const nodes = services?.editorService?.get('nodes');
32
- nodes && services?.editorService?.copy(nodes);
33
- },
34
- });
35
-
36
- export const usePasteMenu = (menu?: Ref<InstanceType<typeof ContentMenu> | undefined>): MenuButton => ({
37
- type: 'button',
38
- text: '粘贴',
39
- icon: markRaw(DocumentCopy),
40
- display: (services) => !!services?.storageService?.getItem(COPY_STORAGE_KEY),
41
- handler: (services) => {
42
- const nodes = services?.editorService?.get('nodes');
43
- if (!nodes || nodes.length === 0) return;
44
-
45
- if (menu?.value?.$el) {
46
- const stage = services?.editorService?.get('stage');
47
- const rect = menu.value.$el.getBoundingClientRect();
48
- const parentRect = stage?.container?.getBoundingClientRect();
49
- const initialLeft =
50
- calcValueByFontsize(stage?.renderer.getDocument(), (rect.left || 0) - (parentRect?.left || 0)) /
51
- services.uiService.get('zoom');
52
- const initialTop =
53
- calcValueByFontsize(stage?.renderer.getDocument(), (rect.top || 0) - (parentRect?.top || 0)) /
54
- services.uiService.get('zoom');
55
- services?.editorService?.paste({ left: initialLeft, top: initialTop });
56
- } else {
57
- services?.editorService?.paste();
58
- }
59
- },
60
- });
61
-
62
- const moveTo = (id: Id, services?: Services) => {
63
- if (!services?.editorService) return;
64
-
65
- const nodes = services.editorService.get('nodes') || [];
66
- const parent = services.editorService.getNodeById(id) as MContainer;
67
-
68
- if (!parent) return;
69
-
70
- services?.editorService.add(nodes, parent);
71
- services?.editorService.remove(nodes);
72
- };
73
-
74
- export const useMoveToMenu = (services?: Services): MenuButton => {
75
- const root = computed(() => services?.editorService?.get('root'));
76
-
77
- return {
78
- type: 'button',
79
- text: '移动至',
80
- display: (services) => {
81
- const node = services?.editorService?.get('node');
82
- const pageLength = services?.editorService?.get('pageLength') || 0;
83
- return !isPage(node) && pageLength > 1;
84
- },
85
- items: (root.value?.items || [])
86
- .filter((page) => page.id !== services?.editorService?.get('page')?.id)
87
- .map((page) => ({
88
- text: `${page.name}(${page.id})`,
89
- type: 'button',
90
- handler: (services?: Services) => {
91
- moveTo(page.id, services);
92
- },
93
- })),
94
- };
95
- };
@@ -1,30 +0,0 @@
1
- import type { FormConfig } from '@tmagic/form';
2
-
3
- export default function (): FormConfig {
4
- return [
5
- {
6
- name: 'id',
7
- type: 'hidden',
8
- },
9
- {
10
- name: 'type',
11
- text: '类型',
12
- type: 'hidden',
13
- defaultValue: 'base',
14
- },
15
- {
16
- name: 'title',
17
- text: '名称',
18
- rules: [
19
- {
20
- required: true,
21
- message: '请输入名称',
22
- },
23
- ],
24
- },
25
- {
26
- name: 'description',
27
- text: '描述',
28
- },
29
- ];
30
- }
@@ -1,60 +0,0 @@
1
- import { FormConfig } from '@tmagic/form';
2
-
3
- export default [
4
- {
5
- name: 'autoFetch',
6
- text: '自动请求',
7
- type: 'switch',
8
- defaultValue: true,
9
- },
10
- {
11
- name: 'responseOptions',
12
- items: [
13
- {
14
- name: 'dataPath',
15
- text: '数据路径',
16
- },
17
- ],
18
- },
19
- {
20
- type: 'fieldset',
21
- name: 'options',
22
- legend: 'HTTP 配置',
23
- items: [
24
- {
25
- name: 'url',
26
- text: 'URL',
27
- },
28
- {
29
- name: 'method',
30
- text: 'Method',
31
- type: 'select',
32
- options: [
33
- { text: 'GET', value: 'GET' },
34
- { text: 'POST', value: 'POST' },
35
- { text: 'PUT', value: 'PUT' },
36
- { text: 'DELETE', value: 'DELETE' },
37
- ],
38
- },
39
- {
40
- name: 'params',
41
- type: 'key-value',
42
- defaultValue: {},
43
- text: '参数',
44
- },
45
- {
46
- name: 'data',
47
- type: 'key-value',
48
- defaultValue: {},
49
- advanced: true,
50
- text: '请求体',
51
- },
52
- {
53
- name: 'headers',
54
- type: 'key-value',
55
- defaultValue: {},
56
- text: '请求头',
57
- },
58
- ],
59
- },
60
- ] as FormConfig;
@@ -1,236 +0,0 @@
1
- import { CascaderOption, FormConfig, FormState } from '@tmagic/form';
2
- import { DataSchema, DataSourceFieldType, DataSourceSchema } from '@tmagic/schema';
3
-
4
- import BaseFormConfig from './formConfigs/base';
5
- import HttpFormConfig from './formConfigs/http';
6
-
7
- const fillConfig = (config: FormConfig): FormConfig => [
8
- ...BaseFormConfig(),
9
- ...config,
10
- {
11
- type: 'tab',
12
- items: [
13
- {
14
- title: '数据定义',
15
- items: [
16
- {
17
- name: 'fields',
18
- type: 'data-source-fields',
19
- defaultValue: () => [],
20
- },
21
- ],
22
- },
23
- {
24
- title: '方法定义',
25
- items: [
26
- {
27
- name: 'methods',
28
- type: 'data-source-methods',
29
- defaultValue: () => [],
30
- },
31
- ],
32
- },
33
- {
34
- title: '事件配置',
35
- items: [
36
- {
37
- name: 'events',
38
- src: 'datasource',
39
- type: 'event-select',
40
- },
41
- ],
42
- },
43
- {
44
- title: 'mock数据',
45
- items: [
46
- {
47
- name: 'mocks',
48
- type: 'data-source-mocks',
49
- defaultValue: () => [],
50
- },
51
- ],
52
- },
53
- {
54
- title: '请求参数裁剪',
55
- display: (formState: FormState, { model }: any) => model.type === 'http',
56
- items: [
57
- {
58
- name: 'beforeRequest',
59
- type: 'vs-code',
60
- parse: true,
61
- height: '600px',
62
- },
63
- ],
64
- },
65
- {
66
- title: '响应数据裁剪',
67
- display: (formState: FormState, { model }: any) => model.type === 'http',
68
- items: [
69
- {
70
- name: 'afterResponse',
71
- type: 'vs-code',
72
- parse: true,
73
- height: '600px',
74
- },
75
- ],
76
- },
77
- ],
78
- },
79
- ];
80
-
81
- export const getFormConfig = (type: string, configs: Record<string, FormConfig>): FormConfig => {
82
- switch (type) {
83
- case 'base':
84
- return fillConfig([]);
85
- case 'http':
86
- return fillConfig(HttpFormConfig);
87
- default:
88
- return fillConfig(configs[type] || []);
89
- }
90
- };
91
-
92
- export const getFormValue = (type: string, values: Partial<DataSourceSchema>): Partial<DataSourceSchema> => {
93
- if (type !== 'http') {
94
- return values;
95
- }
96
-
97
- return {
98
- beforeRequest: `(options, context) => {
99
- /**
100
- * 用户可以直接编写函数,在原始接口调用之前,会运行该函数,将这个函数的返回值作为该数据源接口的入参
101
- *
102
- * options: HttpOptions
103
- *
104
- * interface HttpOptions {
105
- * // 请求链接
106
- * url: string;
107
- * // query参数
108
- * params?: Record<string, string>;
109
- * // body数据
110
- * data?: Record<string, any>;
111
- * // 请求头
112
- * headers?: Record<string, string>;
113
- * // 请求方法 GET/POST
114
- * method?: Method;
115
- * }
116
- *
117
- * context:上下文对象
118
- *
119
- * interface Content {
120
- * app: AppCore;
121
- * dataSource: HttpDataSource;
122
- * }
123
- *
124
- * return: HttpOptions
125
- */
126
-
127
- // 此处的返回值会作为这个接口的入参
128
- return options;
129
- }`,
130
- afterResponse: `(response, context) => {
131
- /**
132
- * 用户可以直接编写函数,在原始接口返回之后,会运行该函数,将这个函数的返回值作为该数据源接口的返回
133
-
134
- * context:上下文对象
135
- *
136
- * interface Content {
137
- * app: AppCore;
138
- * dataSource: HttpDataSource;
139
- * }
140
- *
141
- */
142
-
143
- // 此处的返回值会作为这个接口的返回值
144
- return response;
145
- }`,
146
- ...values,
147
- };
148
- };
149
-
150
- export const getDisplayField = (dataSources: DataSourceSchema[], key: string) => {
151
- const displayState: { value: string; type: 'var' | 'text' }[] = [];
152
-
153
- // 匹配es6字符串模块
154
- const matches = key.matchAll(/\$\{([\s\S]+?)\}/g);
155
- let index = 0;
156
- for (const match of matches) {
157
- if (typeof match.index === 'undefined') break;
158
-
159
- // 字符串常量
160
- displayState.push({
161
- type: 'text',
162
- value: key.substring(index, match.index),
163
- });
164
-
165
- let dsText = '';
166
- let ds: DataSourceSchema | undefined;
167
- let fields: DataSchema[] | undefined;
168
-
169
- // 将模块解析成数据源对应的值
170
- match[1].split('.').forEach((item, index) => {
171
- if (index === 0) {
172
- ds = dataSources.find((ds) => ds.id === item);
173
- dsText += ds?.title || item;
174
- fields = ds?.fields;
175
- return;
176
- }
177
-
178
- const field = fields?.find((field) => field.name === item);
179
- fields = field?.fields;
180
- dsText += `.${field?.title || item}`;
181
- });
182
-
183
- displayState.push({
184
- type: 'var',
185
- value: dsText,
186
- });
187
-
188
- index = match.index + match[0].length;
189
- }
190
-
191
- if (index < key.length) {
192
- displayState.push({
193
- type: 'text',
194
- value: key.substring(index),
195
- });
196
- }
197
-
198
- return displayState;
199
- };
200
-
201
- export const getCascaderOptionsFromFields = (
202
- fields: DataSchema[] = [],
203
- dataSourceFieldType: DataSourceFieldType[] = ['any'],
204
- ): CascaderOption[] => {
205
- const child: CascaderOption[] = [];
206
- fields.forEach((field) => {
207
- if (!dataSourceFieldType.length) {
208
- dataSourceFieldType.push('any');
209
- }
210
-
211
- const children = getCascaderOptionsFromFields(field.fields, dataSourceFieldType);
212
-
213
- const item = {
214
- label: field.title || field.name,
215
- value: field.name,
216
- children,
217
- };
218
-
219
- const fieldType = field.type || 'any';
220
- if (dataSourceFieldType.includes('any') || dataSourceFieldType.includes(fieldType)) {
221
- child.push(item);
222
- return;
223
- }
224
-
225
- if (!dataSourceFieldType.includes(fieldType) && !['array', 'object', 'any'].includes(fieldType)) {
226
- return;
227
- }
228
-
229
- if (!children.length && ['object', 'array', 'any'].includes(field.type || '')) {
230
- return;
231
- }
232
-
233
- child.push(item);
234
- });
235
- return child;
236
- };