@aiao/rxdb-model 0.0.19 → 0.0.28

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 (182) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +43 -6
  3. package/dist/cn.d.ts +19 -0
  4. package/dist/cn.d.ts.map +1 -0
  5. package/dist/entity-capabilities.d.ts +25 -0
  6. package/dist/entity-capabilities.d.ts.map +1 -0
  7. package/dist/entity-detail/detail-tabs.d.ts +7 -1
  8. package/dist/entity-detail/detail-tabs.d.ts.map +1 -1
  9. package/dist/entity-detail/index.d.ts +5 -0
  10. package/dist/entity-detail/index.d.ts.map +1 -1
  11. package/dist/entity-detail/interfaces.d.ts +25 -1
  12. package/dist/entity-detail/interfaces.d.ts.map +1 -1
  13. package/dist/entity-field.utils.d.ts +54 -2
  14. package/dist/entity-field.utils.d.ts.map +1 -1
  15. package/dist/entity-form/form-data.d.ts +21 -0
  16. package/dist/entity-form/form-data.d.ts.map +1 -1
  17. package/dist/entity-form/form-fields.d.ts +19 -1
  18. package/dist/entity-form/form-fields.d.ts.map +1 -1
  19. package/dist/entity-form/form-validation.d.ts +13 -0
  20. package/dist/entity-form/form-validation.d.ts.map +1 -1
  21. package/dist/entity-form/index.d.ts +5 -0
  22. package/dist/entity-form/index.d.ts.map +1 -1
  23. package/dist/entity-form/interfaces.d.ts +60 -0
  24. package/dist/entity-form/interfaces.d.ts.map +1 -1
  25. package/dist/entity-list/manual-order-list.d.ts +92 -0
  26. package/dist/entity-list/manual-order-list.d.ts.map +1 -0
  27. package/dist/entity-list/types.d.ts +25 -0
  28. package/dist/entity-list/types.d.ts.map +1 -0
  29. package/dist/entity-table/columns/build-editable-columns.d.ts +24 -2
  30. package/dist/entity-table/columns/build-editable-columns.d.ts.map +1 -1
  31. package/dist/entity-table/columns/column-utils.d.ts +75 -9
  32. package/dist/entity-table/columns/column-utils.d.ts.map +1 -1
  33. package/dist/entity-table/editors/color-editor.d.ts +23 -0
  34. package/dist/entity-table/editors/color-editor.d.ts.map +1 -0
  35. package/dist/entity-table/editors/date-editor.d.ts +5 -0
  36. package/dist/entity-table/editors/date-editor.d.ts.map +1 -1
  37. package/dist/entity-table/editors/enum-editor.d.ts +10 -0
  38. package/dist/entity-table/editors/enum-editor.d.ts.map +1 -1
  39. package/dist/entity-table/editors/global-overlay-editor.d.ts +26 -3
  40. package/dist/entity-table/editors/global-overlay-editor.d.ts.map +1 -1
  41. package/dist/entity-table/editors/icon-list-editor.d.ts +12 -0
  42. package/dist/entity-table/editors/icon-list-editor.d.ts.map +1 -1
  43. package/dist/entity-table/editors/json-editor.d.ts +5 -0
  44. package/dist/entity-table/editors/json-editor.d.ts.map +1 -1
  45. package/dist/entity-table/editors/key-value-editor.d.ts +11 -1
  46. package/dist/entity-table/editors/key-value-editor.d.ts.map +1 -1
  47. package/dist/entity-table/editors/lucide-svg.d.ts +3 -2
  48. package/dist/entity-table/editors/lucide-svg.d.ts.map +1 -1
  49. package/dist/entity-table/editors/multiselect-editor.d.ts +24 -6
  50. package/dist/entity-table/editors/multiselect-editor.d.ts.map +1 -1
  51. package/dist/entity-table/editors/number-editor.d.ts +32 -2
  52. package/dist/entity-table/editors/number-editor.d.ts.map +1 -1
  53. package/dist/entity-table/editors/relation-editor.d.ts +12 -0
  54. package/dist/entity-table/editors/relation-editor.d.ts.map +1 -1
  55. package/dist/entity-table/editors/safe-list-editor.d.ts +1 -0
  56. package/dist/entity-table/editors/safe-list-editor.d.ts.map +1 -1
  57. package/dist/entity-table/editors/tags-editor.d.ts +11 -0
  58. package/dist/entity-table/editors/tags-editor.d.ts.map +1 -1
  59. package/dist/entity-table/editors/text-format-editor.d.ts +32 -0
  60. package/dist/entity-table/editors/text-format-editor.d.ts.map +1 -0
  61. package/dist/entity-table/editors/uuid-editor.d.ts +13 -0
  62. package/dist/entity-table/editors/uuid-editor.d.ts.map +1 -1
  63. package/dist/entity-table/index.d.ts +13 -3
  64. package/dist/entity-table/index.d.ts.map +1 -1
  65. package/dist/entity-table/interfaces.d.ts +38 -0
  66. package/dist/entity-table/interfaces.d.ts.map +1 -1
  67. package/dist/entity-table/vtable/table-clipboard.d.ts +30 -1
  68. package/dist/entity-table/vtable/table-clipboard.d.ts.map +1 -1
  69. package/dist/entity-table/vtable/table-factory.d.ts +23 -3
  70. package/dist/entity-table/vtable/table-factory.d.ts.map +1 -1
  71. package/dist/entity-table/vtable/table-keyboard.d.ts +18 -1
  72. package/dist/entity-table/vtable/table-keyboard.d.ts.map +1 -1
  73. package/dist/entity-table/vtable/table-operations.d.ts +42 -1
  74. package/dist/entity-table/vtable/table-operations.d.ts.map +1 -1
  75. package/dist/entity-table/vtable/table-row-move.d.ts +88 -0
  76. package/dist/entity-table/vtable/table-row-move.d.ts.map +1 -0
  77. package/dist/entity-table/vtable/table-theme.d.ts +47 -2
  78. package/dist/entity-table/vtable/table-theme.d.ts.map +1 -1
  79. package/dist/entity-table/vtable/table-tooltip.d.ts +7 -1
  80. package/dist/entity-table/vtable/table-tooltip.d.ts.map +1 -1
  81. package/dist/entity-table/vtable/vtable-compat.d.ts +33 -5
  82. package/dist/entity-table/vtable/vtable-compat.d.ts.map +1 -1
  83. package/dist/entity-value.utils.d.ts +49 -1
  84. package/dist/entity-value.utils.d.ts.map +1 -1
  85. package/dist/index.d.ts +10 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +4394 -64471
  88. package/dist/query-builder/models/operator.interface.d.ts +5 -1
  89. package/dist/query-builder/models/operator.interface.d.ts.map +1 -1
  90. package/dist/query-builder/models/query-builder-state.d.ts +31 -2
  91. package/dist/query-builder/models/query-builder-state.d.ts.map +1 -1
  92. package/dist/query-builder/models/validation.interface.d.ts +1 -1
  93. package/dist/query-builder/services/operator-registry.service.d.ts +7 -1
  94. package/dist/query-builder/services/operator-registry.service.d.ts.map +1 -1
  95. package/dist/query-builder/services/query-builder.service.d.ts +10 -4
  96. package/dist/query-builder/services/query-builder.service.d.ts.map +1 -1
  97. package/dist/query-builder/services/query-converter.service.d.ts +5 -1
  98. package/dist/query-builder/services/query-converter.service.d.ts.map +1 -1
  99. package/dist/query-builder/services/schema-parser.service.d.ts +5 -1
  100. package/dist/query-builder/services/schema-parser.service.d.ts.map +1 -1
  101. package/dist/query-builder/services/validation.service.d.ts +29 -3
  102. package/dist/query-builder/services/validation.service.d.ts.map +1 -1
  103. package/dist/query-builder/utils/date.d.ts +12 -0
  104. package/dist/query-builder/utils/date.d.ts.map +1 -1
  105. package/dist/query-builder/utils/field-tree.d.ts.map +1 -1
  106. package/dist/query-builder/utils/id.d.ts +2 -0
  107. package/dist/query-builder/utils/id.d.ts.map +1 -1
  108. package/dist/query-builder/utils/metadata-field-extractor.d.ts +13 -2
  109. package/dist/query-builder/utils/metadata-field-extractor.d.ts.map +1 -1
  110. package/dist/query-builder/utils/popover-position.d.ts +11 -0
  111. package/dist/query-builder/utils/popover-position.d.ts.map +1 -1
  112. package/dist/query-builder/utils/schema-factory.d.ts +1 -1
  113. package/dist/query-builder/utils/structural-equal.d.ts +4 -0
  114. package/dist/query-builder/utils/structural-equal.d.ts.map +1 -1
  115. package/dist/query-builder/utils/value-input.d.ts +20 -0
  116. package/dist/query-builder/utils/value-input.d.ts.map +1 -1
  117. package/dist/structural-equal.d.ts +5 -1
  118. package/dist/structural-equal.d.ts.map +1 -1
  119. package/package.json +34 -10
  120. package/src/cn.ts +21 -0
  121. package/src/entity-capabilities.ts +37 -0
  122. package/src/entity-detail/detail-tabs.ts +48 -0
  123. package/src/entity-detail/index.ts +7 -0
  124. package/src/entity-detail/interfaces.ts +55 -0
  125. package/src/entity-field.utils.ts +205 -0
  126. package/src/entity-form/form-data.ts +83 -0
  127. package/src/entity-form/form-fields.ts +48 -0
  128. package/src/entity-form/form-validation.ts +34 -0
  129. package/src/entity-form/index.ts +9 -0
  130. package/src/entity-form/interfaces.ts +116 -0
  131. package/src/entity-list/manual-order-list.ts +159 -0
  132. package/src/entity-list/types.ts +22 -0
  133. package/src/entity-table/columns/build-editable-columns.ts +184 -0
  134. package/src/entity-table/columns/column-utils.ts +657 -0
  135. package/src/entity-table/editors/color-editor.ts +239 -0
  136. package/src/entity-table/editors/date-editor.ts +169 -0
  137. package/src/entity-table/editors/enum-editor.ts +167 -0
  138. package/src/entity-table/editors/global-overlay-editor.ts +277 -0
  139. package/src/entity-table/editors/icon-list-editor.ts +130 -0
  140. package/src/entity-table/editors/json-editor.ts +212 -0
  141. package/src/entity-table/editors/key-value-editor.ts +595 -0
  142. package/src/entity-table/editors/lucide-svg.ts +78 -0
  143. package/src/entity-table/editors/multiselect-editor.ts +171 -0
  144. package/src/entity-table/editors/number-editor.ts +322 -0
  145. package/src/entity-table/editors/relation-editor.ts +316 -0
  146. package/src/entity-table/editors/safe-list-editor.ts +17 -0
  147. package/src/entity-table/editors/tags-editor.ts +239 -0
  148. package/src/entity-table/editors/text-format-editor.ts +220 -0
  149. package/src/entity-table/editors/uuid-editor.ts +198 -0
  150. package/src/entity-table/index.ts +96 -0
  151. package/src/entity-table/interfaces.ts +100 -0
  152. package/src/entity-table/vtable/table-clipboard.ts +419 -0
  153. package/src/entity-table/vtable/table-factory.ts +117 -0
  154. package/src/entity-table/vtable/table-keyboard.ts +89 -0
  155. package/src/entity-table/vtable/table-operations.ts +123 -0
  156. package/src/entity-table/vtable/table-row-move.ts +122 -0
  157. package/src/entity-table/vtable/table-theme.ts +181 -0
  158. package/src/entity-table/vtable/table-tooltip.ts +70 -0
  159. package/src/entity-table/vtable/vtable-compat.ts +84 -0
  160. package/src/entity-value.utils.ts +456 -0
  161. package/src/index.ts +58 -0
  162. package/src/query-builder/models/config.interface.ts +31 -0
  163. package/src/query-builder/models/index.ts +8 -0
  164. package/src/query-builder/models/operator.interface.ts +191 -0
  165. package/src/query-builder/models/query-builder-state.ts +222 -0
  166. package/src/query-builder/models/validation.interface.ts +184 -0
  167. package/src/query-builder/services/index.ts +9 -0
  168. package/src/query-builder/services/operator-registry.service.ts +243 -0
  169. package/src/query-builder/services/query-builder.service.ts +568 -0
  170. package/src/query-builder/services/query-converter.service.ts +153 -0
  171. package/src/query-builder/services/schema-parser.service.ts +312 -0
  172. package/src/query-builder/services/validation.service.ts +390 -0
  173. package/src/query-builder/utils/date.ts +35 -0
  174. package/src/query-builder/utils/field-tree.ts +400 -0
  175. package/src/query-builder/utils/id.ts +15 -0
  176. package/src/query-builder/utils/index.ts +12 -0
  177. package/src/query-builder/utils/metadata-field-extractor.ts +460 -0
  178. package/src/query-builder/utils/popover-position.ts +63 -0
  179. package/src/query-builder/utils/schema-factory.ts +75 -0
  180. package/src/query-builder/utils/structural-equal.ts +5 -0
  181. package/src/query-builder/utils/value-input.ts +105 -0
  182. package/src/structural-equal.ts +49 -0
@@ -0,0 +1,243 @@
1
+ /**
2
+ * @fileoverview 操作符注册表服务
3
+ * 管理操作符的注册、查询和类型过滤
4
+ */
5
+
6
+ import type { OperatorName } from '@aiao/rxdb';
7
+ import { DEFAULT_OPERATORS, type OperatorDefinition } from '../models/operator.interface.js';
8
+ import type { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
9
+
10
+ /**
11
+ * 操作符注册表选项
12
+ */
13
+ export interface OperatorRegistryOptions {
14
+ /**
15
+ * 初始操作符集合
16
+ * @default DEFAULT_OPERATORS
17
+ */
18
+ operators?: OperatorDefinition[];
19
+
20
+ /**
21
+ * 是否使用默认操作符作为基础
22
+ * @default true
23
+ */
24
+ useDefaultOperators?: boolean;
25
+ }
26
+
27
+ /**
28
+ * 操作符注册表服务
29
+ * 管理可用操作符及其元数据
30
+ */
31
+ export class OperatorRegistry {
32
+ private readonly operators: Map<OperatorName, OperatorDefinition>;
33
+
34
+ /**
35
+ * 获取操作符数量
36
+ */
37
+ get size(): number {
38
+ return this.operators.size;
39
+ }
40
+
41
+ /** @param options - 初始注册的操作符集合 */
42
+ constructor(options: OperatorRegistryOptions = {}) {
43
+ this.operators = new Map();
44
+
45
+ // 初始化默认操作符
46
+ if (options.useDefaultOperators !== false) {
47
+ for (const op of DEFAULT_OPERATORS) {
48
+ this.operators.set(op.key, op);
49
+ }
50
+ }
51
+
52
+ // 添加自定义操作符
53
+ if (options.operators) {
54
+ for (const op of options.operators) {
55
+ this.operators.set(op.key, op);
56
+ }
57
+ }
58
+ }
59
+
60
+ /**
61
+ * 注册新操作符
62
+ *
63
+ * @param operator - 操作符定义
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * registry.register({
68
+ * key: 'contains',
69
+ * label: '包含',
70
+ * applicableTypes: ['string'],
71
+ * valueType: 'single'
72
+ * });
73
+ * ```
74
+ */
75
+ register(operator: OperatorDefinition): void {
76
+ this.operators.set(operator.key, operator);
77
+ }
78
+
79
+ /**
80
+ * 批量注册操作符
81
+ *
82
+ * @param operators - 操作符定义数组
83
+ */
84
+ registerMany(operators: OperatorDefinition[]): void {
85
+ for (const op of operators) {
86
+ this.register(op);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * 移除操作符
92
+ *
93
+ * @param key - 操作符键值
94
+ * @returns 是否成功移除
95
+ */
96
+ unregister(key: OperatorName): boolean {
97
+ return this.operators.delete(key);
98
+ }
99
+
100
+ /**
101
+ * 获取操作符定义
102
+ *
103
+ * @param key - 操作符键值
104
+ * @returns 操作符定义或 undefined
105
+ */
106
+ get(key: OperatorName): OperatorDefinition | undefined {
107
+ return this.operators.get(key);
108
+ }
109
+
110
+ /**
111
+ * 获取所有操作符
112
+ *
113
+ * @returns 所有操作符定义数组
114
+ */
115
+ getAll(): OperatorDefinition[] {
116
+ return Array.from(this.operators.values());
117
+ }
118
+
119
+ /**
120
+ * 根据字段类型获取适用的操作符
121
+ *
122
+ * @param fieldType - 字段类型
123
+ * @returns 适用的操作符数组
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const stringOperators = registry.getForType('string');
128
+ * // [{ key: '=', ... }, { key: 'contains', ... }, ...]
129
+ * ```
130
+ */
131
+ getForType(fieldType: PropertyType): OperatorDefinition[] {
132
+ return Array.from(this.operators.values()).filter(op => op.applicableTypes.includes(fieldType));
133
+ }
134
+
135
+ /**
136
+ * 根据字段元数据获取适用的操作符
137
+ *
138
+ * @param field - 字段元数据
139
+ * @returns 适用的操作符数组
140
+ */
141
+ getForField(field: FieldMetadata): OperatorDefinition[] {
142
+ const operators = this.getForType(field.type);
143
+
144
+ // 如果字段可空,添加 null/notNull 操作符
145
+ if (field.nullable) {
146
+ const hasNull = operators.some(op => op.key === 'null');
147
+ const hasNotNull = operators.some(op => op.key === 'notNull');
148
+
149
+ const nullOp = this.operators.get('null');
150
+ const notNullOp = this.operators.get('notNull');
151
+
152
+ const result = [...operators];
153
+ if (!hasNull && nullOp) {
154
+ result.push(nullOp);
155
+ }
156
+ if (!hasNotNull && notNullOp) {
157
+ result.push(notNullOp);
158
+ }
159
+
160
+ return result;
161
+ }
162
+
163
+ return operators;
164
+ }
165
+
166
+ /**
167
+ * 检查操作符是否支持指定类型
168
+ *
169
+ * @param operatorKey - 操作符键值
170
+ * @param fieldType - 字段类型
171
+ * @returns 是否支持
172
+ */
173
+ isOperatorSupportedForType(operatorKey: OperatorName, fieldType: PropertyType): boolean {
174
+ const operator = this.operators.get(operatorKey);
175
+ return operator ? operator.applicableTypes.includes(fieldType) : false;
176
+ }
177
+
178
+ /**
179
+ * 检查操作符是否支持指定字段
180
+ *
181
+ * @param operatorKey - 操作符键值
182
+ * @param field - 字段元数据
183
+ * @returns 是否支持
184
+ */
185
+ isOperatorSupportedForField(operatorKey: OperatorName, field: FieldMetadata): boolean {
186
+ return this.getForField(field).some(op => op.key === operatorKey);
187
+ }
188
+
189
+ /**
190
+ * 获取操作符的值类型
191
+ *
192
+ * @param operatorKey - 操作符键值
193
+ * @returns 值类型
194
+ */
195
+ getValueType(operatorKey: OperatorName): OperatorDefinition['valueType'] | undefined {
196
+ const operator = this.operators.get(operatorKey);
197
+ return operator?.valueType;
198
+ }
199
+
200
+ /**
201
+ * 清空所有操作符
202
+ */
203
+ clear(): void {
204
+ this.operators.clear();
205
+ }
206
+
207
+ /**
208
+ * 重置为默认操作符
209
+ */
210
+ reset(): void {
211
+ this.clear();
212
+ for (const op of DEFAULT_OPERATORS) {
213
+ this.operators.set(op.key, op);
214
+ }
215
+ }
216
+ }
217
+
218
+ /**
219
+ * 创建 OperatorRegistry 实例的工厂函数
220
+ *
221
+ * @param options - 操作符注册表选项
222
+ * @returns 新的 OperatorRegistry 实例
223
+ */
224
+ export function createOperatorRegistry(options?: OperatorRegistryOptions): OperatorRegistry {
225
+ return new OperatorRegistry(options);
226
+ }
227
+
228
+ /**
229
+ * 默认操作符注册表单例
230
+ */
231
+ let defaultRegistry: OperatorRegistry | null = null;
232
+
233
+ /**
234
+ * 获取默认操作符注册表
235
+ *
236
+ * @returns 全局共享的默认 OperatorRegistry 实例(懒初始化)
237
+ */
238
+ export function getDefaultOperatorRegistry(): OperatorRegistry {
239
+ if (!defaultRegistry) {
240
+ defaultRegistry = new OperatorRegistry();
241
+ }
242
+ return defaultRegistry;
243
+ }