@tmagic/editor 1.7.6 → 1.7.8-beta.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.
Files changed (238) hide show
  1. package/LICENSE +235 -164
  2. package/dist/es/Editor.js +5 -0
  3. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +214 -0
  4. package/dist/es/_virtual/_plugin-vue_export-helper.js +8 -0
  5. package/dist/es/components/CodeBlockEditor.js +5 -0
  6. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +337 -0
  7. package/dist/es/components/CodeParams.js +5 -0
  8. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +63 -0
  9. package/dist/es/components/ContentMenu.js +5 -0
  10. package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +160 -0
  11. package/dist/es/components/FloatingBox.js +5 -0
  12. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +161 -0
  13. package/dist/es/components/Icon.js +5 -0
  14. package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +39 -0
  15. package/dist/es/components/Resizer.js +5 -0
  16. package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +20 -0
  17. package/dist/es/components/ScrollBar.js +6 -0
  18. package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +72 -0
  19. package/dist/es/components/ScrollViewer.js +5 -0
  20. package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +104 -0
  21. package/dist/es/components/SearchInput.js +5 -0
  22. package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +40 -0
  23. package/dist/es/components/SplitView.js +5 -0
  24. package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +135 -0
  25. package/dist/es/components/ToolButton.js +5 -0
  26. package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +131 -0
  27. package/dist/es/components/Tree.js +5 -0
  28. package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +60 -0
  29. package/dist/es/components/TreeNode.js +5 -0
  30. package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +126 -0
  31. package/dist/es/editorProps.js +34 -0
  32. package/dist/es/fields/Code.js +5 -0
  33. package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +54 -0
  34. package/dist/es/fields/CodeLink.js +5 -0
  35. package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +69 -0
  36. package/dist/es/fields/CodeSelect.js +5 -0
  37. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +116 -0
  38. package/dist/es/fields/CodeSelectCol.js +5 -0
  39. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +145 -0
  40. package/dist/es/fields/CondOpSelect.js +5 -0
  41. package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +81 -0
  42. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.js +5 -0
  43. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +158 -0
  44. package/dist/es/fields/DataSourceFieldSelect/Index.js +5 -0
  45. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +155 -0
  46. package/dist/es/fields/DataSourceFields.js +5 -0
  47. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +390 -0
  48. package/dist/es/fields/DataSourceInput.js +5 -0
  49. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +268 -0
  50. package/dist/es/fields/DataSourceMethodSelect.js +5 -0
  51. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +144 -0
  52. package/dist/es/fields/DataSourceMethods.js +5 -0
  53. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +148 -0
  54. package/dist/es/fields/DataSourceMocks.js +5 -0
  55. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +259 -0
  56. package/dist/es/fields/DataSourceSelect.js +5 -0
  57. package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +101 -0
  58. package/dist/es/fields/DisplayConds.js +5 -0
  59. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +156 -0
  60. package/dist/es/fields/EventSelect.js +5 -0
  61. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +338 -0
  62. package/dist/es/fields/KeyValue.js +5 -0
  63. package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +158 -0
  64. package/dist/es/fields/PageFragmentSelect.js +5 -0
  65. package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +81 -0
  66. package/dist/es/fields/StyleSetter/Index.js +5 -0
  67. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +92 -0
  68. package/dist/es/fields/StyleSetter/components/BackgroundPosition.js +5 -0
  69. package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +96 -0
  70. package/dist/es/fields/StyleSetter/components/Border.js +5 -0
  71. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +100 -0
  72. package/dist/es/fields/StyleSetter/components/Box.js +5 -0
  73. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +81 -0
  74. package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +17 -0
  75. package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +14 -0
  76. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +17 -0
  77. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +17 -0
  78. package/dist/es/fields/StyleSetter/icons/display/Block.js +14 -0
  79. package/dist/es/fields/StyleSetter/icons/display/Flex.js +14 -0
  80. package/dist/es/fields/StyleSetter/icons/display/Inline.js +14 -0
  81. package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +14 -0
  82. package/dist/es/fields/StyleSetter/icons/display/None.js +14 -0
  83. package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +14 -0
  84. package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +14 -0
  85. package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +14 -0
  86. package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +14 -0
  87. package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +14 -0
  88. package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +14 -0
  89. package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +14 -0
  90. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +14 -0
  91. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +14 -0
  92. package/dist/es/fields/StyleSetter/icons/text-align/Center.js +14 -0
  93. package/dist/es/fields/StyleSetter/icons/text-align/Left.js +14 -0
  94. package/dist/es/fields/StyleSetter/icons/text-align/Right.js +14 -0
  95. package/dist/es/fields/StyleSetter/pro/Background.js +5 -0
  96. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +114 -0
  97. package/dist/es/fields/StyleSetter/pro/Border.js +5 -0
  98. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +50 -0
  99. package/dist/es/fields/StyleSetter/pro/Font.js +5 -0
  100. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +98 -0
  101. package/dist/es/fields/StyleSetter/pro/Layout.js +5 -0
  102. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +287 -0
  103. package/dist/es/fields/StyleSetter/pro/Position.js +5 -0
  104. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +95 -0
  105. package/dist/es/fields/UISelect.js +6 -0
  106. package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +161 -0
  107. package/dist/es/hooks/use-code-block-edit.js +54 -0
  108. package/dist/es/hooks/use-data-source-edit.js +29 -0
  109. package/dist/es/hooks/use-editor-content-height.js +17 -0
  110. package/dist/es/hooks/use-filter.js +35 -0
  111. package/dist/es/hooks/use-float-box.js +76 -0
  112. package/dist/es/hooks/use-getso.js +28 -0
  113. package/dist/es/hooks/use-next-float-box-position.js +27 -0
  114. package/dist/es/hooks/use-node-status.js +28 -0
  115. package/dist/es/hooks/use-services.js +9 -0
  116. package/dist/es/hooks/use-stage.js +107 -0
  117. package/dist/es/hooks/use-window-rect.js +19 -0
  118. package/dist/es/icons/CenterIcon.js +5 -0
  119. package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +40 -0
  120. package/dist/es/icons/CodeIcon.js +5 -0
  121. package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +19 -0
  122. package/dist/es/icons/FolderMinusIcon.js +5 -0
  123. package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +27 -0
  124. package/dist/es/index.js +79 -0
  125. package/dist/es/initService.js +392 -0
  126. package/dist/es/layouts/AddPageBox.js +5 -0
  127. package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +38 -0
  128. package/dist/es/layouts/CodeEditor.js +5 -0
  129. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +270 -0
  130. package/dist/es/layouts/Framework.js +5 -0
  131. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +134 -0
  132. package/dist/es/layouts/NavMenu.js +5 -0
  133. package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +181 -0
  134. package/dist/es/layouts/page-bar/AddButton.js +5 -0
  135. package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +57 -0
  136. package/dist/es/layouts/page-bar/PageBar.js +5 -0
  137. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +135 -0
  138. package/dist/es/layouts/page-bar/PageBarScrollContainer.js +5 -0
  139. package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +119 -0
  140. package/dist/es/layouts/page-bar/PageList.js +5 -0
  141. package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +54 -0
  142. package/dist/es/layouts/page-bar/Search.js +5 -0
  143. package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +60 -0
  144. package/dist/es/layouts/props-panel/FormPanel.js +5 -0
  145. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +129 -0
  146. package/dist/es/layouts/props-panel/PropsPanel.js +5 -0
  147. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +179 -0
  148. package/dist/es/layouts/props-panel/use-style-panel.js +40 -0
  149. package/dist/es/layouts/sidebar/ComponentListPanel.js +5 -0
  150. package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +121 -0
  151. package/dist/es/layouts/sidebar/Sidebar.js +5 -0
  152. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +314 -0
  153. package/dist/es/layouts/sidebar/code-block/CodeBlockList.js +5 -0
  154. package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +161 -0
  155. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.js +5 -0
  156. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +113 -0
  157. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +60 -0
  158. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.js +5 -0
  159. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +44 -0
  160. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.js +5 -0
  161. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +103 -0
  162. package/dist/es/layouts/sidebar/data-source/DataSourceList.js +5 -0
  163. package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +162 -0
  164. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.js +5 -0
  165. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +133 -0
  166. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +59 -0
  167. package/dist/es/layouts/sidebar/layer/LayerMenu.js +5 -0
  168. package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +90 -0
  169. package/dist/es/layouts/sidebar/layer/LayerNodeTool.js +5 -0
  170. package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +35 -0
  171. package/dist/es/layouts/sidebar/layer/LayerPanel.js +5 -0
  172. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +99 -0
  173. package/dist/es/layouts/sidebar/layer/use-click.js +68 -0
  174. package/dist/es/layouts/sidebar/layer/use-drag.js +118 -0
  175. package/dist/es/layouts/sidebar/layer/use-keybinding.js +36 -0
  176. package/dist/es/layouts/sidebar/layer/use-node-status.js +75 -0
  177. package/dist/es/layouts/workspace/Breadcrumb.js +5 -0
  178. package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +39 -0
  179. package/dist/es/layouts/workspace/Workspace.js +5 -0
  180. package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +43 -0
  181. package/dist/es/layouts/workspace/viewer/NodeListMenu.js +5 -0
  182. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +88 -0
  183. package/dist/es/layouts/workspace/viewer/Stage.js +5 -0
  184. package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +206 -0
  185. package/dist/es/layouts/workspace/viewer/StageOverlay.js +5 -0
  186. package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +89 -0
  187. package/dist/es/layouts/workspace/viewer/ViewerMenu.js +5 -0
  188. package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +132 -0
  189. package/dist/es/plugin.js +61 -0
  190. package/dist/es/services/BaseService.js +148 -0
  191. package/dist/es/services/codeBlock.js +251 -0
  192. package/dist/es/services/componentList.js +29 -0
  193. package/dist/es/services/dataSource.js +157 -0
  194. package/dist/es/services/dep.js +173 -0
  195. package/dist/es/services/editor.js +752 -0
  196. package/dist/es/services/events.js +64 -0
  197. package/dist/es/services/history.js +84 -0
  198. package/dist/es/services/keybinding.js +182 -0
  199. package/dist/es/services/props.js +215 -0
  200. package/dist/es/services/stageOverlay.js +161 -0
  201. package/dist/es/services/storage.js +127 -0
  202. package/dist/es/services/ui.js +112 -0
  203. package/dist/es/style.css +1937 -0
  204. package/dist/es/type.js +90 -0
  205. package/dist/es/utils/compose.js +44 -0
  206. package/dist/es/utils/config.js +8 -0
  207. package/dist/es/utils/const.js +15 -0
  208. package/dist/es/utils/content-menu.js +76 -0
  209. package/dist/es/utils/data-source/formConfigs/base.js +28 -0
  210. package/dist/es/utils/data-source/formConfigs/http.js +74 -0
  211. package/dist/es/utils/data-source/index.js +201 -0
  212. package/dist/es/utils/dep/idle-task.js +76 -0
  213. package/dist/es/utils/dep/worker.js +19 -0
  214. package/dist/es/utils/editor.js +261 -0
  215. package/dist/es/utils/keybinding-config.js +106 -0
  216. package/dist/es/utils/logger.js +18 -0
  217. package/dist/es/utils/monaco-editor.js +13 -0
  218. package/dist/es/utils/operator.js +73 -0
  219. package/dist/es/utils/props.js +232 -0
  220. package/dist/es/utils/scroll-viewer.js +115 -0
  221. package/dist/es/utils/tree.js +11 -0
  222. package/dist/es/utils/undo-redo.js +43 -0
  223. package/dist/style.css +10 -10
  224. package/dist/tmagic-editor.umd.cjs +18427 -21980
  225. package/package.json +17 -13
  226. package/src/fields/CodeLink.vue +2 -2
  227. package/src/fields/DataSourceFieldSelect/Index.vue +10 -2
  228. package/src/fields/EventSelect.vue +6 -5
  229. package/src/index.ts +1 -73
  230. package/src/layouts/CodeEditor.vue +15 -8
  231. package/src/layouts/Framework.vue +1 -1
  232. package/src/plugin.ts +92 -0
  233. package/src/type.ts +6 -7
  234. package/src/utils/index.ts +1 -0
  235. package/src/utils/monaco-editor.ts +13 -6
  236. package/src/utils/props.ts +2 -0
  237. package/types/index.d.ts +3388 -3342
  238. package/dist/tmagic-editor.js +0 -17037
@@ -0,0 +1,157 @@
1
+ import BaseService_default from "./BaseService.js";
2
+ import storage_default, { Protocol } from "./storage.js";
3
+ import { COPY_DS_STORAGE_KEY } from "../utils/editor.js";
4
+ import editor_default from "./editor.js";
5
+ import { getFormConfig, getFormValue } from "../utils/data-source/index.js";
6
+ import { guid, toLine } from "@tmagic/utils";
7
+ import { Target, Watcher } from "@tmagic/core";
8
+ import { reactive } from "vue";
9
+ import { cloneDeep, get } from "lodash-es";
10
+ //#region packages/editor/src/services/dataSource.ts
11
+ var canUsePluginMethods = {
12
+ async: [],
13
+ sync: [
14
+ "getFormConfig",
15
+ "setFormConfig",
16
+ "getFormValue",
17
+ "setFormValue",
18
+ "getFormEvent",
19
+ "setFormEvent",
20
+ "getFormMethod",
21
+ "setFormMethod",
22
+ "add",
23
+ "update",
24
+ "remove",
25
+ "createId"
26
+ ]
27
+ };
28
+ var DataSource = class extends BaseService_default {
29
+ state = reactive({
30
+ datasourceTypeList: [],
31
+ dataSources: [],
32
+ editable: true,
33
+ configs: {},
34
+ values: {},
35
+ events: {},
36
+ methods: {}
37
+ });
38
+ constructor() {
39
+ super(canUsePluginMethods.sync.map((methodName) => ({
40
+ name: methodName,
41
+ isAsync: false
42
+ })));
43
+ }
44
+ set(name, value) {
45
+ this.state[name] = value;
46
+ }
47
+ get(name) {
48
+ return this.state[name];
49
+ }
50
+ getFormConfig(type = "base") {
51
+ return getFormConfig(toLine(type), this.get("configs"));
52
+ }
53
+ setFormConfig(type, config) {
54
+ this.get("configs")[toLine(type)] = config;
55
+ }
56
+ getFormValue(type = "base") {
57
+ return getFormValue(toLine(type), this.get("values")[type]);
58
+ }
59
+ setFormValue(type, value) {
60
+ this.get("values")[toLine(type)] = value;
61
+ }
62
+ getFormEvent(type = "base") {
63
+ return this.get("events")[toLine(type)] || [];
64
+ }
65
+ setFormEvent(type, value = []) {
66
+ this.get("events")[toLine(type)] = value;
67
+ }
68
+ getFormMethod(type = "base") {
69
+ return this.get("methods")[toLine(type)] || [];
70
+ }
71
+ setFormMethod(type, value = []) {
72
+ this.get("methods")[toLine(type)] = value;
73
+ }
74
+ add(config) {
75
+ const newConfig = {
76
+ ...config,
77
+ id: config.id && !this.getDataSourceById(config.id) ? config.id : this.createId()
78
+ };
79
+ this.get("dataSources").push(newConfig);
80
+ this.emit("add", newConfig);
81
+ return newConfig;
82
+ }
83
+ update(config, { changeRecords = [] } = {}) {
84
+ const dataSources = this.get("dataSources");
85
+ const index = dataSources.findIndex((ds) => ds.id === config.id);
86
+ const oldConfig = dataSources[index];
87
+ const newConfig = cloneDeep(config);
88
+ dataSources[index] = newConfig;
89
+ this.emit("update", newConfig, {
90
+ oldConfig,
91
+ changeRecords
92
+ });
93
+ return newConfig;
94
+ }
95
+ remove(id) {
96
+ const dataSources = this.get("dataSources");
97
+ const index = dataSources.findIndex((ds) => ds.id === id);
98
+ dataSources.splice(index, 1);
99
+ this.emit("remove", id);
100
+ }
101
+ createId() {
102
+ return `ds_${guid()}`;
103
+ }
104
+ getDataSourceById(id) {
105
+ return this.get("dataSources").find((ds) => ds.id === id);
106
+ }
107
+ resetState() {
108
+ this.set("dataSources", []);
109
+ }
110
+ destroy() {
111
+ this.removeAllListeners();
112
+ this.resetState();
113
+ this.removeAllPlugins();
114
+ }
115
+ usePlugin(options) {
116
+ super.usePlugin(options);
117
+ }
118
+ /**
119
+ * 复制时会带上组件关联的数据源
120
+ * @param config 组件节点配置
121
+ * @returns
122
+ */
123
+ copyWithRelated(config, collectorOptions) {
124
+ const copyNodes = Array.isArray(config) ? config : [config];
125
+ const copyData = [];
126
+ if (collectorOptions && typeof collectorOptions.isTarget === "function") {
127
+ const customTarget = new Target({ ...collectorOptions });
128
+ const coperWatcher = new Watcher();
129
+ coperWatcher.addTarget(customTarget);
130
+ coperWatcher.collect(copyNodes, {}, true, collectorOptions.type);
131
+ Object.keys(customTarget.deps).forEach((nodeId) => {
132
+ const node = editor_default.getNodeById(nodeId);
133
+ if (!node) return;
134
+ customTarget.deps[nodeId].keys.forEach((key) => {
135
+ const [relateDsId] = get(node, key);
136
+ if (!copyData.find((dsItem) => dsItem.id === relateDsId)) {
137
+ const relateDs = this.getDataSourceById(relateDsId);
138
+ if (relateDs) copyData.push(relateDs);
139
+ }
140
+ });
141
+ });
142
+ }
143
+ storage_default.setItem(COPY_DS_STORAGE_KEY, copyData, { protocol: Protocol.OBJECT });
144
+ }
145
+ /**
146
+ * 粘贴数据源
147
+ * @returns
148
+ */
149
+ paste() {
150
+ storage_default.getItem(COPY_DS_STORAGE_KEY).forEach((item) => {
151
+ if (!this.getDataSourceById(item.id)) this.add(item);
152
+ });
153
+ }
154
+ };
155
+ var dataSource_default = new DataSource();
156
+ //#endregion
157
+ export { dataSource_default as default };
@@ -0,0 +1,173 @@
1
+ import BaseService_default from "./BaseService.js";
2
+ import { IdleTask } from "../utils/dep/idle-task.js";
3
+ import WorkerWrapper from "../utils/dep/worker.js";
4
+ import { isPage } from "@tmagic/utils";
5
+ import { DepTargetType, Watcher, traverseTarget } from "@tmagic/core";
6
+ import { reactive, shallowReactive } from "vue";
7
+ import { throttle } from "lodash-es";
8
+ import serialize from "serialize-javascript";
9
+ //#region packages/editor/src/services/dep.ts
10
+ var Dep = class extends BaseService_default {
11
+ state = shallowReactive({
12
+ collecting: false,
13
+ taskLength: 0
14
+ });
15
+ idleTask = new IdleTask();
16
+ watcher = new Watcher({ initialTargets: reactive({}) });
17
+ waitingWorker;
18
+ constructor() {
19
+ super();
20
+ this.idleTask.on("update-task-length", throttle(({ length }) => {
21
+ this.set("taskLength", length);
22
+ }, 1e3));
23
+ }
24
+ set(name, value) {
25
+ this.state[name] = value;
26
+ }
27
+ get(name) {
28
+ return this.state[name];
29
+ }
30
+ removeTargets(type = DepTargetType.DEFAULT) {
31
+ this.watcher.removeTargets(type);
32
+ const targets = this.watcher.getTargets(type);
33
+ if (!targets) return;
34
+ for (const target of Object.values(targets)) this.emit("remove-target", target.id, type);
35
+ }
36
+ getTargets(type = DepTargetType.DEFAULT) {
37
+ return this.watcher.getTargets(type);
38
+ }
39
+ getTarget(id, type = DepTargetType.DEFAULT) {
40
+ return this.watcher.getTarget(id, type);
41
+ }
42
+ addTarget(target) {
43
+ this.watcher.addTarget(target);
44
+ this.emit("add-target", target);
45
+ }
46
+ removeTarget(id, type = DepTargetType.DEFAULT) {
47
+ this.watcher.removeTarget(id, type);
48
+ this.emit("remove-target", id, type);
49
+ }
50
+ clearTargets() {
51
+ this.watcher.clearTargets();
52
+ }
53
+ collect(nodes, depExtendedData = {}, deep = false, type) {
54
+ this.set("collecting", true);
55
+ this.watcher.collectByCallback(nodes, type, ({ node, target }) => {
56
+ this.collectNode(node, target, depExtendedData, deep);
57
+ });
58
+ this.set("collecting", false);
59
+ this.emit("collected", nodes, deep);
60
+ this.emit("ds-collected", nodes, deep);
61
+ }
62
+ async collectIdle(nodes, depExtendedData = {}, deep = false, type) {
63
+ if (this.waitingWorker) await this.waitingWorker;
64
+ this.set("collecting", true);
65
+ let startTask = false;
66
+ this.watcher.collectByCallback(nodes, type, ({ node, target }) => {
67
+ startTask = true;
68
+ this.enqueueTask(node, target, depExtendedData, deep);
69
+ });
70
+ return new Promise((resolve) => {
71
+ if (!startTask) {
72
+ this.emit("collected", nodes, deep);
73
+ this.set("collecting", false);
74
+ resolve();
75
+ return;
76
+ }
77
+ this.idleTask.once("finish", () => {
78
+ this.emit("collected", nodes, deep);
79
+ this.set("collecting", false);
80
+ });
81
+ this.idleTask.once("hight-level-finish", () => {
82
+ this.emit("ds-collected", nodes, deep);
83
+ resolve();
84
+ });
85
+ });
86
+ }
87
+ collectByWorker(dsl) {
88
+ this.set("collecting", true);
89
+ const { promise, resolve: waitingResolve } = Promise.withResolvers();
90
+ this.waitingWorker = promise;
91
+ return new Promise((resolve) => {
92
+ const worker = new WorkerWrapper();
93
+ worker.postMessage({ dsl: serialize(dsl) });
94
+ worker.onmessage = (e) => {
95
+ resolve(e.data);
96
+ };
97
+ worker.onerror = () => {
98
+ resolve({});
99
+ };
100
+ }).then((depsData) => {
101
+ traverseTarget(this.watcher.getTargetsList(), (target) => {
102
+ if (depsData[target.type]?.[target.id]) {
103
+ target.deps = reactive(depsData[target.type][target.id]);
104
+ if (target.type === DepTargetType.DATA_SOURCE && dsl.dataSourceDeps) dsl.dataSourceDeps[target.id] = target.deps;
105
+ else if (target.type === DepTargetType.DATA_SOURCE_COND && dsl.dataSourceCondDeps) dsl.dataSourceCondDeps[target.id] = target.deps;
106
+ else if (target.type === DepTargetType.DATA_SOURCE_METHOD) dsl.dataSourceMethodDeps[target.id] = target.deps;
107
+ }
108
+ });
109
+ this.set("collecting", false);
110
+ this.emit("collected", dsl.items, true);
111
+ this.emit("ds-collected", dsl.items, true);
112
+ waitingResolve();
113
+ return depsData;
114
+ });
115
+ }
116
+ collectNode(node, target, depExtendedData = {}, deep = false) {
117
+ if (isPage(node)) {
118
+ for (const [depKey, dep] of Object.entries(target.deps)) if (dep.data?.pageId && dep.data.pageId === depExtendedData.pageId) delete target.deps[depKey];
119
+ } else this.watcher.removeTargetDep(target, node);
120
+ this.watcher.collectItem(node, target, depExtendedData, deep);
121
+ }
122
+ clear(nodes) {
123
+ return this.watcher.clear(nodes);
124
+ }
125
+ clearByType(type, nodes) {
126
+ return this.watcher.clearByType(type, nodes);
127
+ }
128
+ hasTarget(id, type = DepTargetType.DEFAULT) {
129
+ return this.watcher.hasTarget(id, type);
130
+ }
131
+ hasSpecifiedTypeTarget(type = DepTargetType.DEFAULT) {
132
+ return this.watcher.hasSpecifiedTypeTarget(type);
133
+ }
134
+ clearIdleTasks() {
135
+ this.idleTask.clearTasks();
136
+ }
137
+ on(eventName, listener) {
138
+ return super.on(eventName, listener);
139
+ }
140
+ once(eventName, listener) {
141
+ return super.once(eventName, listener);
142
+ }
143
+ reset() {
144
+ this.idleTask.clearTasks();
145
+ for (const type of Object.keys(this.watcher.getTargetsList())) this.removeTargets(type);
146
+ this.set("collecting", false);
147
+ }
148
+ destroy() {
149
+ this.idleTask.removeAllListeners();
150
+ this.removeAllListeners();
151
+ this.reset();
152
+ this.removeAllPlugins();
153
+ this.idleTask.removeAllListeners();
154
+ }
155
+ emit(eventName, ...args) {
156
+ return super.emit(eventName, ...args);
157
+ }
158
+ enqueueTask(node, target, depExtendedData, deep) {
159
+ this.idleTask.enqueueTask(({ node, deep, target }) => {
160
+ this.collectNode(node, target, depExtendedData, deep);
161
+ }, {
162
+ node,
163
+ deep: false,
164
+ target
165
+ }, target.type === DepTargetType.DATA_SOURCE);
166
+ if (deep && Array.isArray(node.items) && node.items.length) node.items.forEach((item) => {
167
+ this.enqueueTask(item, target, depExtendedData, deep);
168
+ });
169
+ }
170
+ };
171
+ var dep_default = new Dep();
172
+ //#endregion
173
+ export { dep_default as default };