@cmtlyt/lingshu-toolkit 0.5.0 → 0.7.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.
Files changed (211) hide show
  1. package/README.md +10 -0
  2. package/dist/665.js +1 -0
  3. package/dist/893.js +1 -0
  4. package/dist/react/index.js +1 -205
  5. package/dist/react/use-boolean/index.d.ts +2 -1
  6. package/dist/react/use-boolean/index.js +1 -16
  7. package/dist/react/use-controllable-value/index.d.ts +3 -3
  8. package/dist/react/use-controllable-value/index.js +1 -32
  9. package/dist/react/use-counter/index.d.ts +2 -2
  10. package/dist/react/use-counter/index.js +1 -49
  11. package/dist/react/use-force-update/index.d.ts +2 -1
  12. package/dist/react/use-force-update/index.js +1 -6
  13. package/dist/react/use-mount/index.d.ts +2 -1
  14. package/dist/react/use-mount/index.js +1 -16
  15. package/dist/react/use-ref-state/index.d.ts +3 -2
  16. package/dist/react/use-ref-state/index.js +1 -33
  17. package/dist/react/use-storage/index.d.ts +2 -1
  18. package/dist/react/use-storage/index.js +1 -15
  19. package/dist/react/use-title/index.d.ts +2 -2
  20. package/dist/react/use-title/index.js +1 -24
  21. package/dist/react/use-toggle/index.d.ts +4 -4
  22. package/dist/react/use-toggle/index.js +1 -26
  23. package/dist/react/use-valid-data/index.d.ts +5 -4
  24. package/dist/react/use-valid-data/index.js +1 -14
  25. package/dist/shared/allx/index.d.ts +2 -1
  26. package/dist/shared/allx/index.js +1 -44
  27. package/dist/shared/allx/types.d.ts +6 -0
  28. package/dist/shared/allx/utils.d.ts +9 -7
  29. package/dist/shared/allx/utils.js +1 -94
  30. package/dist/shared/animation/index.d.ts +3 -2
  31. package/dist/shared/animation/index.js +1 -77
  32. package/dist/shared/animation/types.d.ts +8 -0
  33. package/dist/shared/animation/utils.d.ts +3 -10
  34. package/dist/shared/animation/utils.js +1 -134
  35. package/dist/shared/api-controller/create-api.js +1 -79
  36. package/dist/shared/api-controller/index.js +1 -3
  37. package/dist/shared/api-controller/request.js +1 -66
  38. package/dist/shared/api-controller/types.d.ts +26 -27
  39. package/dist/shared/api-controller/utils.d.ts +6 -15
  40. package/dist/shared/api-controller/utils.js +1 -96
  41. package/dist/shared/condition-merge/index.d.ts +6 -6
  42. package/dist/shared/condition-merge/index.js +1 -30
  43. package/dist/shared/create-storage-handler/index.d.ts +4 -3
  44. package/dist/shared/create-storage-handler/index.js +1 -68
  45. package/dist/shared/data-handler/index.d.ts +4 -3
  46. package/dist/shared/data-handler/index.js +1 -77
  47. package/dist/shared/data-handler/tools.d.ts +6 -23
  48. package/dist/shared/data-handler/tools.js +1 -48
  49. package/dist/shared/data-handler/types.d.ts +20 -2
  50. package/dist/shared/data-mixed-manager/constants.js +1 -9
  51. package/dist/shared/data-mixed-manager/index.js +1 -226
  52. package/dist/shared/data-mixed-manager/types.d.ts +1 -2
  53. package/dist/shared/index.d.ts +2 -0
  54. package/dist/shared/index.js +1 -957
  55. package/dist/shared/lock-data/__test__/_helpers/memory-adapters.d.ts +95 -0
  56. package/dist/shared/lock-data/__test__/_helpers/memory-adapters.js +1 -0
  57. package/dist/shared/lock-data/__test__/playground.js +1 -0
  58. package/dist/shared/lock-data/adapters/authority.d.ts +40 -0
  59. package/dist/shared/lock-data/adapters/authority.js +1 -0
  60. package/dist/shared/lock-data/adapters/channel.d.ts +39 -0
  61. package/dist/shared/lock-data/adapters/channel.js +1 -0
  62. package/dist/shared/lock-data/adapters/index.d.ts +58 -0
  63. package/dist/shared/lock-data/adapters/index.js +1 -0
  64. package/dist/shared/lock-data/adapters/logger.d.ts +56 -0
  65. package/dist/shared/lock-data/adapters/logger.js +1 -0
  66. package/dist/shared/lock-data/adapters/session-store.d.ts +37 -0
  67. package/dist/shared/lock-data/adapters/session-store.js +1 -0
  68. package/dist/shared/lock-data/authority/epoch.d.ts +135 -0
  69. package/dist/shared/lock-data/authority/epoch.js +1 -0
  70. package/dist/shared/lock-data/authority/extract.d.ts +107 -0
  71. package/dist/shared/lock-data/authority/extract.js +1 -0
  72. package/dist/shared/lock-data/authority/index.d.ts +182 -0
  73. package/dist/shared/lock-data/authority/index.js +1 -0
  74. package/dist/shared/lock-data/authority/serialize.d.ts +35 -0
  75. package/dist/shared/lock-data/authority/serialize.js +1 -0
  76. package/dist/shared/lock-data/constants.d.ts +46 -0
  77. package/dist/shared/lock-data/constants.js +1 -0
  78. package/dist/shared/lock-data/core/actions-helpers.d.ts +163 -0
  79. package/dist/shared/lock-data/core/actions-helpers.js +1 -0
  80. package/dist/shared/lock-data/core/actions.d.ts +72 -0
  81. package/dist/shared/lock-data/core/actions.js +1 -0
  82. package/dist/shared/lock-data/core/draft.d.ts +64 -0
  83. package/dist/shared/lock-data/core/draft.js +1 -0
  84. package/dist/shared/lock-data/core/entry.d.ts +133 -0
  85. package/dist/shared/lock-data/core/entry.js +1 -0
  86. package/dist/shared/lock-data/core/fanout.d.ts +42 -0
  87. package/dist/shared/lock-data/core/fanout.js +1 -0
  88. package/dist/shared/lock-data/core/readonly-view.d.ts +49 -0
  89. package/dist/shared/lock-data/core/readonly-view.js +1 -0
  90. package/dist/shared/lock-data/core/registry.d.ts +282 -0
  91. package/dist/shared/lock-data/core/registry.js +1 -0
  92. package/dist/shared/lock-data/core/signal.d.ts +33 -0
  93. package/dist/shared/lock-data/core/signal.js +1 -0
  94. package/dist/shared/lock-data/drivers/broadcast-protocol.d.ts +71 -0
  95. package/dist/shared/lock-data/drivers/broadcast-protocol.js +1 -0
  96. package/dist/shared/lock-data/drivers/broadcast-state.d.ts +125 -0
  97. package/dist/shared/lock-data/drivers/broadcast-state.js +1 -0
  98. package/dist/shared/lock-data/drivers/broadcast.d.ts +36 -0
  99. package/dist/shared/lock-data/drivers/broadcast.js +1 -0
  100. package/dist/shared/lock-data/drivers/custom.d.ts +27 -0
  101. package/dist/shared/lock-data/drivers/custom.js +1 -0
  102. package/dist/shared/lock-data/drivers/index.d.ts +59 -0
  103. package/dist/shared/lock-data/drivers/index.js +1 -0
  104. package/dist/shared/lock-data/drivers/local.d.ts +86 -0
  105. package/dist/shared/lock-data/drivers/local.js +1 -0
  106. package/dist/shared/lock-data/drivers/storage-protocol.d.ts +67 -0
  107. package/dist/shared/lock-data/drivers/storage-protocol.js +1 -0
  108. package/dist/shared/lock-data/drivers/storage-state.d.ts +103 -0
  109. package/dist/shared/lock-data/drivers/storage-state.js +1 -0
  110. package/dist/shared/lock-data/drivers/storage.d.ts +71 -0
  111. package/dist/shared/lock-data/drivers/storage.js +1 -0
  112. package/dist/shared/lock-data/drivers/types.d.ts +73 -0
  113. package/dist/shared/lock-data/drivers/types.js +0 -0
  114. package/dist/shared/lock-data/drivers/web-locks.d.ts +123 -0
  115. package/dist/shared/lock-data/drivers/web-locks.js +1 -0
  116. package/dist/shared/lock-data/errors/index.d.ts +12 -0
  117. package/dist/shared/lock-data/errors/index.js +1 -0
  118. package/dist/shared/lock-data/errors/invalid-options-error.d.ts +11 -0
  119. package/dist/shared/lock-data/errors/invalid-options-error.js +1 -0
  120. package/dist/shared/lock-data/errors/lock-aborted-error.d.ts +10 -0
  121. package/dist/shared/lock-data/errors/lock-aborted-error.js +1 -0
  122. package/dist/shared/lock-data/errors/lock-disposed-error.d.ts +14 -0
  123. package/dist/shared/lock-data/errors/lock-disposed-error.js +1 -0
  124. package/dist/shared/lock-data/errors/lock-revoked-error.d.ts +10 -0
  125. package/dist/shared/lock-data/errors/lock-revoked-error.js +1 -0
  126. package/dist/shared/lock-data/errors/lock-timeout-error.d.ts +9 -0
  127. package/dist/shared/lock-data/errors/lock-timeout-error.js +1 -0
  128. package/dist/shared/lock-data/errors/readonly-mutation-error.d.ts +11 -0
  129. package/dist/shared/lock-data/errors/readonly-mutation-error.js +1 -0
  130. package/dist/shared/lock-data/index.d.ts +57 -0
  131. package/dist/shared/lock-data/index.js +1 -0
  132. package/dist/shared/lock-data/types.d.ts +347 -0
  133. package/dist/shared/lock-data/types.js +0 -0
  134. package/dist/shared/lock-data/utils/json-safe.d.ts +69 -0
  135. package/dist/shared/lock-data/utils/json-safe.js +1 -0
  136. package/dist/shared/logger/index.d.ts +2 -2
  137. package/dist/shared/logger/index.js +1 -10
  138. package/dist/shared/priority-queue/index.d.ts +45 -0
  139. package/dist/shared/priority-queue/index.js +1 -0
  140. package/dist/shared/priority-queue/types.d.ts +10 -0
  141. package/dist/shared/priority-queue/types.js +0 -0
  142. package/dist/shared/priority-queue/utils.d.ts +7 -0
  143. package/dist/shared/priority-queue/utils.js +1 -0
  144. package/dist/shared/throw-error/index.d.ts +11 -3
  145. package/dist/shared/throw-error/index.js +1 -10
  146. package/dist/shared/try-call/index.d.ts +3 -3
  147. package/dist/shared/try-call/index.js +1 -59
  148. package/dist/shared/types/index.js +1 -2
  149. package/dist/shared/types/pack.d.ts +2 -2
  150. package/dist/shared/types/pack.js +1 -1
  151. package/dist/shared/utils/base.d.ts +1 -1
  152. package/dist/shared/utils/base.js +1 -6
  153. package/dist/shared/utils/index.js +1 -2
  154. package/dist/shared/utils/verify.d.ts +1 -1
  155. package/dist/shared/utils/verify.js +1 -67
  156. package/dist/shared/with-resolvers/index.d.ts +5 -3
  157. package/dist/shared/with-resolvers/index.js +1 -15
  158. package/dist/vue/index.js +1 -29
  159. package/dist/vue/use-title/index.d.ts +2 -2
  160. package/dist/vue/use-title/index.js +1 -29
  161. package/package.json +27 -27
  162. package/dist/247.js +0 -66
  163. package/dist/707.js +0 -142
  164. package/dist/react/use-force-update/index.test.d.ts +0 -1
  165. package/dist/react/use-mount/index.test.d.ts +0 -1
  166. package/dist/react/use-ref-state/index.test.d.ts +0 -1
  167. package/dist/react/use-storage/index.test.d.ts +0 -1
  168. package/dist/react/use-title/index.test.d.ts +0 -1
  169. package/dist/react/use-toggle/index.test.d.ts +0 -1
  170. package/dist/react/use-valid-data/index.test.d.ts +0 -1
  171. package/dist/shared/allx/__test__/allsettled.test.d.ts +0 -1
  172. package/dist/shared/allx/__test__/basic.test.d.ts +0 -1
  173. package/dist/shared/allx/__test__/circular-dependency.test.d.ts +0 -1
  174. package/dist/shared/allx/__test__/dependency.test.d.ts +0 -1
  175. package/dist/shared/allx/__test__/edge-cases.test.d.ts +0 -1
  176. package/dist/shared/allx/__test__/error-handling.test.d.ts +0 -1
  177. package/dist/shared/allx/__test__/execution-order.test.d.ts +0 -1
  178. package/dist/shared/allx/__test__/falsy-values.test.d.ts +0 -1
  179. package/dist/shared/allx/__test__/performance.test.d.ts +0 -1
  180. package/dist/shared/allx/__test__/type-checking.test.d.ts +0 -1
  181. package/dist/shared/allx/__test__/use-cases.test.d.ts +0 -1
  182. package/dist/shared/animation/__test__/animation-pause-resume.test.d.ts +0 -1
  183. package/dist/shared/animation/__test__/animation.test.d.ts +0 -1
  184. package/dist/shared/animation/__test__/step-animation.test.d.ts +0 -1
  185. package/dist/shared/animation/__test__/utils.test.d.ts +0 -1
  186. package/dist/shared/api-controller/__test__/index.browser.test.d.ts +0 -1
  187. package/dist/shared/api-controller/__test__/index.node.test.d.ts +0 -1
  188. package/dist/shared/condition-merge/index.test-d.js +0 -108
  189. package/dist/shared/condition-merge/index.test.d.ts +0 -1
  190. package/dist/shared/create-storage-handler/index.browser.test.d.ts +0 -1
  191. package/dist/shared/create-storage-handler/index.test.d.ts +0 -1
  192. package/dist/shared/data-handler/index.test.d.ts +0 -1
  193. package/dist/shared/data-mixed-manager/__test__/basic.test.d.ts +0 -1
  194. package/dist/shared/data-mixed-manager/__test__/build-options.test.d.ts +0 -1
  195. package/dist/shared/data-mixed-manager/__test__/constructor-options.test.d.ts +0 -1
  196. package/dist/shared/data-mixed-manager/__test__/data-management.test.d.ts +0 -1
  197. package/dist/shared/data-mixed-manager/__test__/edge-cases.test.d.ts +0 -1
  198. package/dist/shared/data-mixed-manager/__test__/events.browser.test.d.ts +0 -1
  199. package/dist/shared/data-mixed-manager/__test__/events.test.d.ts +0 -1
  200. package/dist/shared/data-mixed-manager/__test__/fixed-slots.test.d.ts +0 -1
  201. package/dist/shared/data-mixed-manager/__test__/insert-mode.test.d.ts +0 -1
  202. package/dist/shared/throw-error/index.test.d.ts +0 -1
  203. package/dist/shared/try-call/index.test.d.ts +0 -1
  204. package/dist/shared/utils/__test__/base.test.d.ts +0 -1
  205. package/dist/shared/utils/__test__/verify.test.d.ts +0 -1
  206. package/dist/shared/with-resolvers/index.test.d.ts +0 -1
  207. package/dist/test/utils.d.ts +0 -13
  208. package/dist/vue/use-title/index.test.d.ts +0 -1
  209. /package/dist/{react/use-boolean/index.test.d.ts → shared/lock-data/__test__/index.test-d.d.ts} +0 -0
  210. /package/dist/{react/use-controllable-value/index.test.d.ts → shared/lock-data/__test__/integration/entry.test-d.d.ts} +0 -0
  211. /package/dist/{react/use-counter/index.test.d.ts → shared/lock-data/__test__/playground.d.ts} +0 -0
@@ -1,226 +1 @@
1
- import { $dt, $t, dataHandler } from "../data-handler/index.js";
2
- import { throwError } from "../throw-error/index.js";
3
- import { SLOT_TYPE } from "./constants.js";
4
- const validInfo = $dt({
5
- name: $t.string('default'),
6
- fixedSlots: $t.array([]),
7
- dataList: $t.array([]),
8
- listener: $t.object({})
9
- });
10
- class DataMixedManager extends EventTarget {
11
- addEventListener(...args) {
12
- return super.addEventListener.apply(this, args);
13
- }
14
- removeEventListener(...args) {
15
- return super.removeEventListener.apply(this, args);
16
- }
17
- options;
18
- fixedSlots = new Map();
19
- dataList = [];
20
- mixedData = [];
21
- lastMixedSlotIdx = -1;
22
- prevDataLength = 0;
23
- isBatching = false;
24
- constructor(options){
25
- super();
26
- const validOptions = dataHandler(options || {}, validInfo, {
27
- unwrap: true
28
- });
29
- const { fixedSlots, dataList, listener } = validOptions;
30
- this.options = validOptions;
31
- this.addFixedSlots(fixedSlots, {
32
- lazy: true
33
- });
34
- this.appendList(dataList);
35
- try {
36
- this.initListener(listener);
37
- } catch (error) {
38
- throwError('dataMixedManager', error.message, error.constructor);
39
- }
40
- }
41
- initListener(listener) {
42
- const listenerNames = Object.keys(listener);
43
- for(let i = 0, name = listenerNames[i], handler = listener[name]; i < listenerNames.length; name = listenerNames[++i], handler = listener[name])this.addEventListener(name, handler);
44
- }
45
- getTypeText(_type) {
46
- switch(_type){
47
- case SLOT_TYPE.fixed:
48
- return 'fixed';
49
- case SLOT_TYPE.insert:
50
- return 'insert';
51
- }
52
- }
53
- buildSlotConfig(config, type) {
54
- const typeText = this.getTypeText(config.type || type);
55
- return {
56
- ...config,
57
- type: typeText,
58
- inputPosition: config.position,
59
- insertMode: config.insertMode || 'cover'
60
- };
61
- }
62
- addFixedSlot(config, buildOptions) {
63
- const realConfig = this.reorderFixedSlots(this.buildSlotConfig(config, SLOT_TYPE.fixed));
64
- this.fixedSlots.set(realConfig.position, realConfig);
65
- this.buildMixedData(buildOptions);
66
- return realConfig.position;
67
- }
68
- reorderFixedSlots(config) {
69
- const { position: oldPosition, insertMode } = config;
70
- if (null == insertMode || 'cover' === insertMode || !this.fixedSlots.has(oldPosition)) return {
71
- ...config,
72
- inputPosition: oldPosition
73
- };
74
- const position = 'after' === insertMode ? oldPosition + 1 : oldPosition;
75
- for(let i = position + 1, preItem = this.fixedSlots.get(i - 1), currItem = this.fixedSlots.get(i); preItem; ++i, preItem = currItem, currItem = this.fixedSlots.get(i)){
76
- preItem.position = i;
77
- this.fixedSlots.set(i, preItem);
78
- }
79
- return {
80
- ...config,
81
- position,
82
- inputPosition: oldPosition
83
- };
84
- }
85
- addFixedSlots(configs, buildOptions) {
86
- if (!configs.length) return [];
87
- const positions = this.batchUpdate(()=>configs.map((config)=>this.addFixedSlot(config)));
88
- this.buildMixedData(buildOptions);
89
- return positions;
90
- }
91
- deleteFixedSlot(position, buildOptions) {
92
- this.fixedSlots.delete(position);
93
- this.buildMixedData(buildOptions);
94
- }
95
- deleteFixedSlots(positions, buildOptions) {
96
- if (!positions.length) return;
97
- this.batchUpdate(()=>positions.forEach((position)=>void this.deleteFixedSlot(position)));
98
- this.buildMixedData(buildOptions);
99
- }
100
- batchUpdate(callback) {
101
- try {
102
- this.isBatching = true;
103
- const result = callback();
104
- return result;
105
- } finally{
106
- this.isBatching = false;
107
- }
108
- }
109
- clearFixedSlots(buildOptions) {
110
- this.fixedSlots.clear();
111
- this.buildMixedData(buildOptions);
112
- }
113
- appendList(list, buildOptions) {
114
- if (!list.length) return;
115
- this.dataList.push(...list);
116
- this.buildMixedData({
117
- ...buildOptions,
118
- lazy: true === (buildOptions || {}).lazy
119
- });
120
- }
121
- clearList() {
122
- this.dataList.length = 0;
123
- this.mixedData.length = 0;
124
- this.dispatch('change', {
125
- mode: 'clear',
126
- mixedData: this.getMixedData({
127
- mode: 'rebuild'
128
- })
129
- });
130
- this.dispatch('clear');
131
- }
132
- getMixedData(buildOptions) {
133
- this.buildMixedData({
134
- ...buildOptions,
135
- lazy: false
136
- });
137
- return this.mixedData.slice();
138
- }
139
- dispatch(name, data) {
140
- const detail = {
141
- name: this.options.name,
142
- ...data
143
- };
144
- this.dispatchEvent(new CustomEvent(name, {
145
- detail
146
- }));
147
- if ("u" > typeof window) window.dispatchEvent(new CustomEvent(`[DMM]:${name}`, {
148
- detail
149
- }));
150
- }
151
- buildMixedData(buildOptions) {
152
- if (this.isBatching) return;
153
- const { lazy, mode } = buildOptions || {};
154
- if ('rebuild' === mode) {
155
- this.prevDataLength = 0;
156
- this.lastMixedSlotIdx = -1;
157
- }
158
- if (false !== lazy || this.dataList.length <= this.prevDataLength) return;
159
- let dataStartIdx = this.prevDataLength;
160
- const dataEndIdx = this.dataList.length;
161
- const newItemCount = dataEndIdx - dataStartIdx;
162
- this.prevDataLength = dataEndIdx;
163
- const isPatchMode = dataStartIdx > 0;
164
- const filteredSlots = this.sliceSlots(isPatchMode ? this.mixedData.length : this.lastMixedSlotIdx, this.mixedData.length + newItemCount);
165
- this.lastMixedSlotIdx = filteredSlots.at(-1) ?? this.lastMixedSlotIdx;
166
- let mixedStartIdx = isPatchMode ? this.mixedData.length : 0;
167
- this.mixedData.length = (isPatchMode ? newItemCount + mixedStartIdx : dataEndIdx) + filteredSlots.length;
168
- for(let fpIdx = 0, fpItem = filteredSlots[fpIdx]; dataStartIdx < dataEndIdx; ++mixedStartIdx)if (mixedStartIdx === fpItem) {
169
- const fixedSlot = this.fixedSlots.get(fpItem);
170
- this.mixedData[mixedStartIdx] = {
171
- isFixed: true,
172
- type: fixedSlot.type,
173
- data: fixedSlot.data
174
- };
175
- fpItem = filteredSlots[++fpIdx];
176
- } else {
177
- this.mixedData[mixedStartIdx] = {
178
- isFixed: false,
179
- type: 'plain',
180
- data: this.dataList[dataStartIdx]
181
- };
182
- ++dataStartIdx;
183
- }
184
- this.dispatch('change', {
185
- mode: isPatchMode ? 'patch' : 'rebuild',
186
- mixedData: this.mixedData.slice()
187
- });
188
- }
189
- sliceSlots(startIdx, endIdx = 1 / 0) {
190
- let prevItem = -2;
191
- let count = 0;
192
- return Array.from(this.fixedSlots.keys()).sort((ai, bi)=>ai - bi).filter((item)=>{
193
- if (item >= startIdx && item < endIdx + count || item - 1 === prevItem) {
194
- ++count;
195
- prevItem = item;
196
- return true;
197
- }
198
- return false;
199
- });
200
- }
201
- insertSlot(config) {
202
- const realPosition = this.addFixedSlot({
203
- ...config,
204
- type: SLOT_TYPE.insert
205
- });
206
- if (realPosition > this.mixedData.length) return realPosition;
207
- this.buildMixedData({
208
- lazy: false,
209
- mode: 'rebuild'
210
- });
211
- return realPosition;
212
- }
213
- insertSlots(configs) {
214
- if (!configs.length) return [];
215
- const positions = this.batchUpdate(()=>configs.map((config)=>this.insertSlot(config)));
216
- this.buildMixedData({
217
- lazy: false,
218
- mode: 'rebuild'
219
- });
220
- return positions;
221
- }
222
- }
223
- function dataMixedManager(options) {
224
- return new DataMixedManager(options);
225
- }
226
- export { dataMixedManager };
1
+ import{$dt as t,$t as e,dataHandler as i}from"../data-handler/index.js";import{throwError as s}from"../throw-error/index.js";import{isEmptyArray as a,isNullOrUndef as d}from"../utils/verify.js";import{SLOT_TYPE as l}from"./constants.js";let r=t({name:e.string("default"),fixedSlots:e.array([]),dataList:e.array([]),listener:e.object({})});class h extends EventTarget{addEventListener(...t){super.addEventListener.apply(this,t)}removeEventListener(...t){super.removeEventListener.apply(this,t)}options;fixedSlots=new Map;dataList=[];mixedData=[];lastMixedSlotIdx=-1;prevDataLength=0;isBatching=!1;constructor(t){super();let e=i(t||{},r,{unwrap:!0}),{fixedSlots:a,dataList:d,listener:l}=e;this.options=e,this.addFixedSlots(a,{lazy:!0}),this.appendList(d);try{this.initListener(l)}catch(t){s("dataMixedManager",t.message,t.constructor)}}initListener(t){let e=Object.keys(t);for(let i=0,s=e[i],a=t[s];i<e.length;a=t[s=e[++i]])this.addEventListener(s,a)}getTypeText(t){switch(t){case l.fixed:return"fixed";case l.insert:return"insert"}}buildSlotConfig(t,e){let i=this.getTypeText(t.type||e);return{...t,type:i,inputPosition:t.position,insertMode:t.insertMode??"cover"}}addFixedSlot(t,e){let i=this.reorderFixedSlots(this.buildSlotConfig(t,l.fixed));return this.fixedSlots.set(i.position,i),this.buildMixedData(e),i.position}reorderFixedSlots(t){let{position:e,insertMode:i}=t;if(d(i)||"cover"===i||!this.fixedSlots.has(e))return{...t,inputPosition:e};let s="after"===i?e+1:e;for(let t=s+1,e=this.fixedSlots.get(t-1),i=this.fixedSlots.get(t);e;++t,e=i,i=this.fixedSlots.get(t))e.position=t,this.fixedSlots.set(t,e);return{...t,position:s,inputPosition:e}}addFixedSlots(t,e){if(a(t))return[];let i=this.batchUpdate(()=>t.map(t=>this.addFixedSlot(t)));return this.buildMixedData(e),i}deleteFixedSlot(t,e){this.fixedSlots.delete(t),this.buildMixedData(e)}deleteFixedSlots(t,e){a(t)||(this.batchUpdate(()=>t.forEach(t=>void this.deleteFixedSlot(t))),this.buildMixedData(e))}batchUpdate(t){try{return this.isBatching=!0,t()}finally{this.isBatching=!1}}clearFixedSlots(t){this.fixedSlots.clear(),this.buildMixedData(t)}appendList(t,e){a(t)||(this.dataList.push(...t),this.buildMixedData({...e,lazy:!0===(e||{}).lazy}))}clearList(){this.dataList.length=0,this.mixedData.length=0,this.dispatch("change",{mode:"clear",mixedData:this.getMixedData({mode:"rebuild"})}),this.dispatch("clear")}getMixedData(t){return this.buildMixedData({...t,lazy:!1}),this.mixedData.slice()}dispatch(t,e){let i={name:this.options.name,...e};this.dispatchEvent(new CustomEvent(t,{detail:i})),void 0!==globalThis.window&&globalThis.window.dispatchEvent(new CustomEvent(`[DMM]:${t}`,{detail:i}))}buildMixedData(t){if(this.isBatching)return;let{lazy:e,mode:i}=t||{};if("rebuild"===i&&(this.prevDataLength=0,this.lastMixedSlotIdx=-1),!1!==e||this.dataList.length<=this.prevDataLength)return;let s=this.prevDataLength,a=this.dataList.length,d=a-s;this.prevDataLength=a;let l=s>0,r=this.sliceSlots(l?this.mixedData.length:this.lastMixedSlotIdx,this.mixedData.length+d);this.lastMixedSlotIdx=r.at(-1)??this.lastMixedSlotIdx;let h=l?this.mixedData.length:0;this.mixedData.length=(l?d+h:a)+r.length;for(let t=0,e=r[t];s<a;++h)if(h===e){let i=this.fixedSlots.get(e);this.mixedData[h]={isFixed:!0,type:i.type,data:i.data},e=r[++t]}else this.mixedData[h]={isFixed:!1,type:"plain",data:this.dataList[s]},++s;this.dispatch("change",{mode:l?"patch":"rebuild",mixedData:this.mixedData.slice()})}sliceSlots(t,e=1/0){let i=-2,s=0;return Array.from(this.fixedSlots.keys()).sort((t,e)=>t-e).filter(a=>(a>=t&&a<e+s||a-1===i)&&(++s,i=a,!0))}insertSlot(t){let e=this.addFixedSlot({...t,type:l.insert});return e>this.mixedData.length||this.buildMixedData({lazy:!1,mode:"rebuild"}),e}insertSlots(t){if(a(t))return[];let e=this.batchUpdate(()=>t.map(t=>this.insertSlot(t)));return this.buildMixedData({lazy:!1,mode:"rebuild"}),e}}function n(t){return new h(t)}export{n as dataMixedManager};
@@ -59,7 +59,7 @@ export interface BuildOptions {
59
59
  /** 构建模式:rebuild-全量重建,patch-增量更新 */
60
60
  mode?: 'rebuild' | 'patch';
61
61
  }
62
- interface DiffEventDetailMap<T> {
62
+ export interface DiffEventDetailMap<T> {
63
63
  change: {
64
64
  mode: NonNullable<BuildOptions['mode']> | 'clear';
65
65
  mixedData: MixedDataItem<T>[];
@@ -87,4 +87,3 @@ export interface DataMixedManagerOptions<T> {
87
87
  [K in keyof EventDetailMap<T>]?: DMMEventHandler<T, K>;
88
88
  };
89
89
  }
90
- export {};
@@ -5,6 +5,8 @@ export * from './condition-merge';
5
5
  export * from './create-storage-handler';
6
6
  export * from './data-handler';
7
7
  export * from './data-mixed-manager';
8
+ export * from './lock-data';
9
+ export * from './priority-queue';
8
10
  export * from './throw-error';
9
11
  export * from './try-call';
10
12
  export * from './types';