@aiao/rxdb-model 0.0.17

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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/entity-detail/detail-tabs.d.ts +4 -0
  4. package/dist/entity-detail/detail-tabs.d.ts.map +1 -0
  5. package/dist/entity-detail/index.d.ts +3 -0
  6. package/dist/entity-detail/index.d.ts.map +1 -0
  7. package/dist/entity-detail/interfaces.d.ts +23 -0
  8. package/dist/entity-detail/interfaces.d.ts.map +1 -0
  9. package/dist/entity-field.utils.d.ts +24 -0
  10. package/dist/entity-field.utils.d.ts.map +1 -0
  11. package/dist/entity-form/form-data.d.ts +5 -0
  12. package/dist/entity-form/form-data.d.ts.map +1 -0
  13. package/dist/entity-form/form-fields.d.ts +6 -0
  14. package/dist/entity-form/form-fields.d.ts.map +1 -0
  15. package/dist/entity-form/form-validation.d.ts +5 -0
  16. package/dist/entity-form/form-validation.d.ts.map +1 -0
  17. package/dist/entity-form/index.d.ts +5 -0
  18. package/dist/entity-form/index.d.ts.map +1 -0
  19. package/dist/entity-form/interfaces.d.ts +45 -0
  20. package/dist/entity-form/interfaces.d.ts.map +1 -0
  21. package/dist/entity-table/columns/build-editable-columns.d.ts +30 -0
  22. package/dist/entity-table/columns/build-editable-columns.d.ts.map +1 -0
  23. package/dist/entity-table/columns/column-utils.d.ts +123 -0
  24. package/dist/entity-table/columns/column-utils.d.ts.map +1 -0
  25. package/dist/entity-table/editors/date-editor.d.ts +19 -0
  26. package/dist/entity-table/editors/date-editor.d.ts.map +1 -0
  27. package/dist/entity-table/editors/enum-editor.d.ts +38 -0
  28. package/dist/entity-table/editors/enum-editor.d.ts.map +1 -0
  29. package/dist/entity-table/editors/global-overlay-editor.d.ts +74 -0
  30. package/dist/entity-table/editors/global-overlay-editor.d.ts.map +1 -0
  31. package/dist/entity-table/editors/icon-list-editor.d.ts +37 -0
  32. package/dist/entity-table/editors/icon-list-editor.d.ts.map +1 -0
  33. package/dist/entity-table/editors/json-editor.d.ts +19 -0
  34. package/dist/entity-table/editors/json-editor.d.ts.map +1 -0
  35. package/dist/entity-table/editors/key-value-editor.d.ts +21 -0
  36. package/dist/entity-table/editors/key-value-editor.d.ts.map +1 -0
  37. package/dist/entity-table/editors/lucide-svg.d.ts +11 -0
  38. package/dist/entity-table/editors/lucide-svg.d.ts.map +1 -0
  39. package/dist/entity-table/editors/multiselect-editor.d.ts +26 -0
  40. package/dist/entity-table/editors/multiselect-editor.d.ts.map +1 -0
  41. package/dist/entity-table/editors/number-editor.d.ts +12 -0
  42. package/dist/entity-table/editors/number-editor.d.ts.map +1 -0
  43. package/dist/entity-table/editors/relation-editor.d.ts +23 -0
  44. package/dist/entity-table/editors/relation-editor.d.ts.map +1 -0
  45. package/dist/entity-table/editors/safe-list-editor.d.ts +10 -0
  46. package/dist/entity-table/editors/safe-list-editor.d.ts.map +1 -0
  47. package/dist/entity-table/editors/tags-editor.d.ts +24 -0
  48. package/dist/entity-table/editors/tags-editor.d.ts.map +1 -0
  49. package/dist/entity-table/editors/uuid-editor.d.ts +13 -0
  50. package/dist/entity-table/editors/uuid-editor.d.ts.map +1 -0
  51. package/dist/entity-table/index.d.ts +22 -0
  52. package/dist/entity-table/index.d.ts.map +1 -0
  53. package/dist/entity-table/interfaces.d.ts +54 -0
  54. package/dist/entity-table/interfaces.d.ts.map +1 -0
  55. package/dist/entity-table/vtable/table-clipboard.d.ts +55 -0
  56. package/dist/entity-table/vtable/table-clipboard.d.ts.map +1 -0
  57. package/dist/entity-table/vtable/table-factory.d.ts +18 -0
  58. package/dist/entity-table/vtable/table-factory.d.ts.map +1 -0
  59. package/dist/entity-table/vtable/table-keyboard.d.ts +20 -0
  60. package/dist/entity-table/vtable/table-keyboard.d.ts.map +1 -0
  61. package/dist/entity-table/vtable/table-operations.d.ts +20 -0
  62. package/dist/entity-table/vtable/table-operations.d.ts.map +1 -0
  63. package/dist/entity-table/vtable/table-theme.d.ts +17 -0
  64. package/dist/entity-table/vtable/table-theme.d.ts.map +1 -0
  65. package/dist/entity-table/vtable/table-tooltip.d.ts +21 -0
  66. package/dist/entity-table/vtable/table-tooltip.d.ts.map +1 -0
  67. package/dist/entity-table/vtable/vtable-compat.d.ts +24 -0
  68. package/dist/entity-table/vtable/vtable-compat.d.ts.map +1 -0
  69. package/dist/entity-value.utils.d.ts +10 -0
  70. package/dist/entity-value.utils.d.ts.map +1 -0
  71. package/dist/index.d.ts +35 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +64510 -0
  74. package/dist/query-builder/models/config.interface.d.ts +28 -0
  75. package/dist/query-builder/models/config.interface.d.ts.map +1 -0
  76. package/dist/query-builder/models/index.d.ts +8 -0
  77. package/dist/query-builder/models/index.d.ts.map +1 -0
  78. package/dist/query-builder/models/operator.interface.d.ts +42 -0
  79. package/dist/query-builder/models/operator.interface.d.ts.map +1 -0
  80. package/dist/query-builder/models/query-builder-state.d.ts +159 -0
  81. package/dist/query-builder/models/query-builder-state.d.ts.map +1 -0
  82. package/dist/query-builder/models/validation.interface.d.ts +88 -0
  83. package/dist/query-builder/models/validation.interface.d.ts.map +1 -0
  84. package/dist/query-builder/services/index.d.ts +9 -0
  85. package/dist/query-builder/services/index.d.ts.map +1 -0
  86. package/dist/query-builder/services/operator-registry.service.d.ts +132 -0
  87. package/dist/query-builder/services/operator-registry.service.d.ts.map +1 -0
  88. package/dist/query-builder/services/query-builder.service.d.ts +162 -0
  89. package/dist/query-builder/services/query-builder.service.d.ts.map +1 -0
  90. package/dist/query-builder/services/query-converter.service.d.ts +72 -0
  91. package/dist/query-builder/services/query-converter.service.d.ts.map +1 -0
  92. package/dist/query-builder/services/schema-parser.service.d.ts +84 -0
  93. package/dist/query-builder/services/schema-parser.service.d.ts.map +1 -0
  94. package/dist/query-builder/services/validation.service.d.ts +67 -0
  95. package/dist/query-builder/services/validation.service.d.ts.map +1 -0
  96. package/dist/query-builder/utils/date.d.ts +3 -0
  97. package/dist/query-builder/utils/date.d.ts.map +1 -0
  98. package/dist/query-builder/utils/field-tree.d.ts +135 -0
  99. package/dist/query-builder/utils/field-tree.d.ts.map +1 -0
  100. package/dist/query-builder/utils/id.d.ts +9 -0
  101. package/dist/query-builder/utils/id.d.ts.map +1 -0
  102. package/dist/query-builder/utils/index.d.ts +12 -0
  103. package/dist/query-builder/utils/index.d.ts.map +1 -0
  104. package/dist/query-builder/utils/metadata-field-extractor.d.ts +149 -0
  105. package/dist/query-builder/utils/metadata-field-extractor.d.ts.map +1 -0
  106. package/dist/query-builder/utils/popover-position.d.ts +25 -0
  107. package/dist/query-builder/utils/popover-position.d.ts.map +1 -0
  108. package/dist/query-builder/utils/schema-factory.d.ts +60 -0
  109. package/dist/query-builder/utils/schema-factory.d.ts.map +1 -0
  110. package/dist/query-builder/utils/structural-equal.d.ts +2 -0
  111. package/dist/query-builder/utils/structural-equal.d.ts.map +1 -0
  112. package/dist/query-builder/utils/value-input.d.ts +11 -0
  113. package/dist/query-builder/utils/value-input.d.ts.map +1 -0
  114. package/dist/structural-equal.d.ts +7 -0
  115. package/dist/structural-equal.d.ts.map +1 -0
  116. package/package.json +33 -0
@@ -0,0 +1,72 @@
1
+ import { RuleGroup } from '../../../packages/rxdb/src/index.ts';
2
+ import { QueryBuilderState } from '../models/query-builder-state.js';
3
+ /**
4
+ * 转换选项
5
+ */
6
+ export interface QueryConverterOptions {
7
+ /**
8
+ * ID 生成器
9
+ * @default generateId()
10
+ */
11
+ idGenerator?: () => string;
12
+ }
13
+ /**
14
+ * Query 转换服务
15
+ * 负责 QueryBuilder 状态与 RxDB Query 之间的双向转换
16
+ */
17
+ export declare class QueryConverter<T = Record<string, unknown>> {
18
+ private readonly idGenerator;
19
+ /** 不需要 value 字段的操作符 */
20
+ private readonly noValueOperators;
21
+ constructor(options?: QueryConverterOptions);
22
+ /**
23
+ * 将 QueryBuilder 状态转换为 RxDB Query
24
+ *
25
+ * @param state - QueryBuilder 状态
26
+ * @returns RxDB RuleGroup 查询对象
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const converter = new QueryConverter<User>();
31
+ * const query = converter.toRxDBQuery(queryBuilderState);
32
+ * // { combinator: 'and', rules: [...] }
33
+ * ```
34
+ */
35
+ toRxDBQuery(state: QueryBuilderState<T>): RuleGroup<T>;
36
+ /**
37
+ * 将 RxDB Query 转换为 QueryBuilder 状态
38
+ *
39
+ * @param query - RxDB RuleGroup 查询对象
40
+ * @returns QueryBuilder 状态
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const converter = new QueryConverter<User>();
45
+ * const state = converter.fromRxDBQuery(rxdbQuery);
46
+ * ```
47
+ */
48
+ fromRxDBQuery(query: RuleGroup<T>): QueryBuilderState<T>;
49
+ /**
50
+ * 转换单个规则组到 RxDB 格式
51
+ */
52
+ private convertGroupToRxDB;
53
+ /**
54
+ * 转换单条规则到 RxDB 格式
55
+ * 移除 QueryBuilder 特有的 id 字段,以及无值操作符的 value 字段
56
+ */
57
+ private convertRuleToRxDB;
58
+ /**
59
+ * 从 RxDB 格式转换规则组
60
+ */
61
+ private convertGroupFromRxDB;
62
+ /**
63
+ * 从 RxDB 格式转换单条规则
64
+ * 添加 QueryBuilder 需要的 id 字段
65
+ */
66
+ private convertRuleFromRxDB;
67
+ }
68
+ /**
69
+ * 创建 QueryConverter 实例的工厂函数
70
+ */
71
+ export declare function createQueryConverter<T = Record<string, unknown>>(options?: QueryConverterOptions): QueryConverter<T>;
72
+ //# sourceMappingURL=query-converter.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-converter.service.d.ts","sourceRoot":"","sources":["../../../src/query-builder/services/query-converter.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAA2C,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAInH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAE3C,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuD;gBAE5E,OAAO,GAAE,qBAA0B;IAI/C;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAItD;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IASxD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAM5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAAC,CAAC,CAAC,CAEpH"}
@@ -0,0 +1,84 @@
1
+ import { EntityMetadata } from '../../../packages/rxdb/src/index.ts';
2
+ import { FieldMetadata } from '../models/query-builder-state.js';
3
+ /**
4
+ * 解析器配置选项
5
+ */
6
+ export interface SchemaParserOptions {
7
+ /**
8
+ * 是否包含外键字段
9
+ * @default false
10
+ */
11
+ includeForeignKeys?: boolean;
12
+ /**
13
+ * 是否包含计算属性
14
+ * @default false
15
+ */
16
+ includeComputedProperties?: boolean;
17
+ /**
18
+ * 是否包含关系字段(用于 EXISTS 操作符)
19
+ * @default false
20
+ */
21
+ includeRelations?: boolean;
22
+ /**
23
+ * 实体元数据映射(用于解析关系字段的目标实体字段)
24
+ * 键为实体名称,值为实体元数据
25
+ */
26
+ entityMetadataMap?: Map<string, EntityMetadata>;
27
+ /**
28
+ * 自定义字段过滤器
29
+ */
30
+ fieldFilter?: (field: FieldMetadata) => boolean;
31
+ /**
32
+ * 自定义显示名称生成器
33
+ */
34
+ displayNameGenerator?: (fieldName: string, metadata?: {
35
+ displayName?: string;
36
+ }) => string;
37
+ }
38
+ /**
39
+ * Schema 解析服务
40
+ * 负责将 RxDB EntityMetadata 转换为 QueryBuilder 可用的字段元数据
41
+ */
42
+ export declare class SchemaParser {
43
+ private readonly options;
44
+ private readonly relationFieldsCache;
45
+ constructor(options?: SchemaParserOptions);
46
+ /**
47
+ * 从 EntityMetadata 解析字段元数据
48
+ *
49
+ * @param metadata - RxDB 实体元数据
50
+ * @returns 字段元数据数组
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const parser = new SchemaParser();
55
+ * const fields = parser.parse(userMetadata);
56
+ * // [{ name: 'id', displayName: 'ID', type: 'string' }, ...]
57
+ * ```
58
+ */
59
+ parse(metadata: EntityMetadata): FieldMetadata[];
60
+ /**
61
+ * 从多个 EntityMetadata 批量解析
62
+ *
63
+ * @param metadataMap - 实体名称到元数据的映射
64
+ * @returns 实体名称到字段数组的映射
65
+ */
66
+ parseMany(metadataMap: Map<string, EntityMetadata>): Map<string, FieldMetadata[]>;
67
+ /**
68
+ * 解析单个属性
69
+ */
70
+ private parseProperty;
71
+ /**
72
+ * 将 RxDB PropertyType 映射到 QueryBuilder 类型
73
+ */
74
+ private mapPropertyType;
75
+ /**
76
+ * 解析关系字段
77
+ */
78
+ private parseRelation;
79
+ }
80
+ /**
81
+ * 创建 SchemaParser 实例的工厂函数
82
+ */
83
+ export declare function createSchemaParser(options?: SchemaParserOptions): SchemaParser;
84
+ //# sourceMappingURL=schema-parser.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-parser.service.d.ts","sourceRoot":"","sources":["../../../src/query-builder/services/schema-parser.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA0C,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAqBtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEhD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAEhD;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;CAC3F;AA4BD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEtB;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;gBAE9D,OAAO,GAAE,mBAAwB;IAW7C;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,EAAE;IAwDhD;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAUjF;;OAEG;IACH,OAAO,CAAC,aAAa;IA8CrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAsCtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAE9E"}
@@ -0,0 +1,67 @@
1
+ import { FieldMetadata, QueryBuilderRule, QueryBuilderRuleGroup } from '../models/query-builder-state.js';
2
+ import { ValidationResult, ValidationRule } from '../models/validation.interface.js';
3
+ import { OperatorRegistry } from './operator-registry.service.js';
4
+ /**
5
+ * 校验服务选项
6
+ */
7
+ export interface ValidationServiceOptions {
8
+ /**
9
+ * 自定义校验规则
10
+ */
11
+ customRules?: ValidationRule[];
12
+ /**
13
+ * 操作符注册表
14
+ */
15
+ operatorRegistry?: OperatorRegistry;
16
+ /**
17
+ * 是否启用内置校验规则
18
+ * @default true
19
+ */
20
+ useBuiltinRules?: boolean;
21
+ }
22
+ /**
23
+ * 校验服务
24
+ * 负责验证 QueryBuilder 规则和值
25
+ */
26
+ export declare class ValidationService {
27
+ private readonly rules;
28
+ private readonly operatorRegistry;
29
+ constructor(options?: ValidationServiceOptions);
30
+ /**
31
+ * 校验单条规则
32
+ */
33
+ validateRule<T>(rule: QueryBuilderRule<T>, field: FieldMetadata): ValidationResult;
34
+ /**
35
+ * 校验整个规则组
36
+ */
37
+ validateGroup<T>(group: QueryBuilderRuleGroup<T>, fields: Map<string, FieldMetadata>): ValidationResult;
38
+ /**
39
+ * 注册自定义校验规则
40
+ */
41
+ registerRule(rule: ValidationRule): void;
42
+ /**
43
+ * 移除校验规则
44
+ */
45
+ unregisterRule(name: string): boolean;
46
+ /**
47
+ * 获取所有校验规则
48
+ */
49
+ getRules(): ValidationRule[];
50
+ /**
51
+ * 校验值类型
52
+ */
53
+ private validateValueType;
54
+ /**
55
+ * 验证子查询规则的基本有效性(不依赖字段元数据)
56
+ *
57
+ * @description
58
+ * 子查询可能引用关系实体的字段,我们无法获取其 FieldMetadata。
59
+ * 因此只验证规则的基本结构和值类型,不验证字段是否存在或操作符是否匹配。
60
+ */
61
+ private validateSubqueryRules;
62
+ }
63
+ /**
64
+ * 创建 ValidationService 实例的工厂函数
65
+ */
66
+ export declare function createValidationService(options?: ValidationServiceOptions): ValidationService;
67
+ //# sourceMappingURL=validation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.service.d.ts","sourceRoot":"","sources":["../../../src/query-builder/services/validation.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE/G,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACf,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAA8B,MAAM,gCAAgC,CAAC;AAU9F;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAE/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAiBD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;gBAExC,OAAO,GAAE,wBAA6B;IAmBlD;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,gBAAgB;IA8FlF;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,gBAAgB;IAiCvG;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,QAAQ,IAAI,cAAc,EAAE;IAI5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAgD9B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,iBAAiB,CAE7F"}
@@ -0,0 +1,3 @@
1
+ export declare function formatDateToYmd(date: Date | string | null | undefined): string;
2
+ export declare function parseYmdToLocalDate(ymd: string | null | undefined): Date | null;
3
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/date.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQ9E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAY/E"}
@@ -0,0 +1,135 @@
1
+ import { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
2
+ /**
3
+ * 字段树节点(用于 CascadeSelect)
4
+ *
5
+ * @description
6
+ * 将扁平的 FieldMetadata[] 转换为树形结构,
7
+ * 以便 CascadeSelect 组件级联展示嵌套字段。
8
+ */
9
+ export interface FieldTreeNode {
10
+ /** 当前层的字段名 */
11
+ label: string;
12
+ /** 完整路径(作为选中值) */
13
+ value: string;
14
+ /** 显示名称 */
15
+ displayName: string;
16
+ /** 字段类型 */
17
+ type: PropertyType;
18
+ /** 是否是关系字段 */
19
+ isRelation: boolean;
20
+ /** 子节点 */
21
+ children?: FieldTreeNode[];
22
+ /** 字段描述 */
23
+ description?: string;
24
+ /** 是否必填 */
25
+ required?: boolean;
26
+ /** 枚举值 */
27
+ enum?: unknown[];
28
+ /** 关系目标实体的字段列表(用于 EXISTS 子查询) */
29
+ relationFields?: FieldMetadata[];
30
+ /** 是否是存在性检查选项(用于解决重复 key 问题) */
31
+ isExistsOption?: boolean;
32
+ /** 是否是空值检查选项(keyValue 字段的整体空值查询) */
33
+ isNullCheckOption?: boolean;
34
+ }
35
+ /**
36
+ * 将扁平字段列表转换为树结构
37
+ *
38
+ * @description
39
+ * 将 `orders.items.productName` 这样的扁平路径转换为嵌套树结构:
40
+ * ```
41
+ * orders
42
+ * └── items
43
+ * └── productName
44
+ * ```
45
+ *
46
+ * @param fields 扁平的字段元数据列表
47
+ * @returns 树形结构的字段节点
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const fields = [
52
+ * { name: 'name', displayName: '姓名', type: 'string' },
53
+ * { name: 'orders', displayName: '订单', type: 'relation' },
54
+ * { name: 'orders.amount', displayName: '订单.金额', type: 'number' }
55
+ * ];
56
+ * const tree = buildFieldTree(fields);
57
+ * // tree[0] = { label: 'name', displayName: '姓名', ... }
58
+ * // tree[1] = { label: 'orders', displayName: '订单', children: [...] }
59
+ * ```
60
+ */
61
+ export declare function buildFieldTree(fields: FieldMetadata[]): FieldTreeNode[];
62
+ /**
63
+ * 将字段树展平为选项列表
64
+ *
65
+ * @param nodes 字段树节点
66
+ * @param separator 层级分隔符(默认 ' › ')
67
+ * @param prefix 前缀路径(递归用)
68
+ * @returns 展平的选项列表
69
+ */
70
+ export declare function flattenFieldTree(nodes: FieldTreeNode[], separator?: string, prefix?: string): Array<{
71
+ value: string;
72
+ label: string;
73
+ }>;
74
+ /**
75
+ * 在树中查找节点
76
+ *
77
+ * @param nodes 树节点列表
78
+ * @param value 要查找的值(完整路径)
79
+ * @returns 找到的节点或 undefined
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const node = findNodeByValue(tree, 'orders.items.productName');
84
+ * console.log(node?.displayName); // '商品名称'
85
+ * ```
86
+ */
87
+ export declare function findNodeByValue(nodes: FieldTreeNode[], value: string): FieldTreeNode | undefined;
88
+ /**
89
+ * 创建字段名到节点的映射
90
+ *
91
+ * @description
92
+ * 递归遍历树结构,创建一个 Map 用于快速查找节点。
93
+ * 对于需要频繁查找的场景,比直接递归更高效。
94
+ *
95
+ * @param tree 字段树
96
+ * @returns 字段名到节点的映射
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * const nodeMap = createFieldNodeMap(tree);
101
+ * const node = nodeMap.get('orders.amount');
102
+ * ```
103
+ */
104
+ export declare function createFieldNodeMap(tree: FieldTreeNode[]): Map<string, FieldTreeNode>;
105
+ /**
106
+ * 获取 CascadeSelect 的 optionGroupChildren 配置
107
+ *
108
+ * @description
109
+ * CascadeSelect 需要知道每一层的子节点属性名。
110
+ * 由于我们统一使用 'children',返回重复的 ['children', 'children', ...]
111
+ * 深度根据最大嵌套层级决定。
112
+ *
113
+ * @param maxDepth 最大深度,默认 10
114
+ * @returns children 属性名数组
115
+ */
116
+ export declare function getOptionGroupChildren(maxDepth?: number): string[];
117
+ /**
118
+ * 获取完整的 displayName 路径
119
+ *
120
+ * @description
121
+ * 给定字段路径(如 `orders.createdAt`),返回完整的显示名路径(如 `订单.创建时间`)。
122
+ * 通过遍历树结构,将每一级的 displayName 拼接起来。
123
+ *
124
+ * @param tree 字段树
125
+ * @param value 字段路径(如 `orders.createdAt`)
126
+ * @returns 显示名路径(如 `订单.创建时间`)
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * const displayPath = getDisplayNamePath(tree, 'orders.createdAt');
131
+ * console.log(displayPath); // '订单.创建时间'
132
+ * ```
133
+ */
134
+ export declare function getDisplayNamePath(tree: FieldTreeNode[], value: string): string;
135
+ //# sourceMappingURL=field-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-tree.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/field-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKpF;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU;IACV,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU;IACV,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,iCAAiC;IACjC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,gCAAgC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAkHvE;AAiED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EAAE,EACtB,SAAS,SAAQ,EACjB,MAAM,SAAK,GACV,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAWhG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAcpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,SAAK,GAAG,MAAM,EAAE,CAE9D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB/E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview ID 生成工具
3
+ */
4
+ /**
5
+ * 生成唯一 ID
6
+ * 用于 QueryBuilder 规则和规则组的标识
7
+ */
8
+ export declare function generateId(): string;
9
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Utils 导出
3
+ */
4
+ export * from './date.js';
5
+ export * from './field-tree.js';
6
+ export * from './id.js';
7
+ export * from './metadata-field-extractor.js';
8
+ export * from './popover-position.js';
9
+ export * from './schema-factory.js';
10
+ export * from './structural-equal.js';
11
+ export * from './value-input.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,149 @@
1
+ import { EntityMetadata, EntityRelationMetadata, KeyValuePropertyMetadata, PropertyType } from '../../../packages/rxdb/src/index.ts';
2
+ import { FieldMetadata, PropertyType as QBPropertyType } from '../models/query-builder-state.js';
3
+ /**
4
+ * 模型信息接口
5
+ */
6
+ export interface ModelInfo {
7
+ name: string;
8
+ displayName: string;
9
+ entityClass: new (...args: any[]) => unknown;
10
+ metadata: EntityMetadata;
11
+ }
12
+ /**
13
+ * 查询示例接口
14
+ */
15
+ export interface QueryExample {
16
+ name: string;
17
+ description: string;
18
+ modelName: string;
19
+ query: unknown;
20
+ }
21
+ /**
22
+ * 字段提取器配置
23
+ */
24
+ export interface FieldExtractorConfig {
25
+ /** 关系查询深度,默认 4 */
26
+ relationQueryDeep?: number;
27
+ /** 系统字段列表,默认 ['id', 'createdAt', 'updatedAt', 'createdBy', 'updatedBy'] */
28
+ systemFields?: string[];
29
+ }
30
+ /**
31
+ * 将 PropertyType 映射到 FieldMetadata 的 type
32
+ *
33
+ * @param type - RxDB 属性类型
34
+ * @returns QueryBuilder 属性类型
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * mapPropertyType(PropertyType.string) // 'string'
39
+ * mapPropertyType(PropertyType.number) // 'number'
40
+ * mapPropertyType(PropertyType.boolean) // 'boolean'
41
+ * ```
42
+ */
43
+ export declare function mapPropertyType(type: PropertyType): QBPropertyType;
44
+ /**
45
+ * 获取关系需要忽略的键(避免循环引用)
46
+ *
47
+ * @param relation - 实体关系元数据
48
+ * @returns 需要忽略的键列表
49
+ *
50
+ * @remarks
51
+ * 对于 ONE_TO_MANY 和 MANY_TO_MANY 关系,返回 mappedProperty(如果存在)
52
+ * 以避免无限递归
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // ONE_TO_MANY: User.orders -> Order.owner
57
+ * getRelationIgnoreKeys(ordersRelation) // ['owner']
58
+ * ```
59
+ */
60
+ export declare function getRelationIgnoreKeys(relation: EntityRelationMetadata): string[];
61
+ /**
62
+ * 从 EntityMetadata 提取字段(支持递归关系)
63
+ *
64
+ * @param metadata - 实体元数据
65
+ * @param allModels - 所有模型的映射表
66
+ * @param config - 字段提取器配置
67
+ * @returns 字段元数据列表
68
+ *
69
+ * @remarks
70
+ * 此函数会递归提取实体的所有字段,包括:
71
+ * 1. 系统字段(id, createdAt, updatedAt 等)
72
+ * 2. 实体属性字段
73
+ * 3. 外键字段
74
+ * 4. 关系字段(递归,直到达到深度限制)
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const fields = extractFieldsFromMetadata(
79
+ * userMetadata,
80
+ * modelMap,
81
+ * { relationQueryDeep: 3 }
82
+ * );
83
+ * // 返回: [
84
+ * // { name: 'id', displayName: 'ID', type: 'string' },
85
+ * // { name: 'name', displayName: '姓名', type: 'string' },
86
+ * // { name: 'orders', displayName: '订单 (ONE_TO_MANY)', type: 'relation', ... },
87
+ * // { name: 'orders.id', displayName: '订单.ID', type: 'string' },
88
+ * // ...
89
+ * // ]
90
+ * ```
91
+ */
92
+ export declare function extractFieldsFromMetadata(metadata: EntityMetadata, allModels: Map<string, ModelInfo>, config?: FieldExtractorConfig): FieldMetadata[];
93
+ /**
94
+ * 提取关系目标实体的字段(用于 EXISTS 子查询)
95
+ *
96
+ * @param metadata - 实体元数据
97
+ * @param config - 字段提取器配置
98
+ * @returns 字段元数据列表(仅一层,不递归)
99
+ *
100
+ * @remarks
101
+ * 此函数只提取一层字段,不递归关系。用于 EXISTS/NOT EXISTS 子查询的字段列表。
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * const fields = extractRelationTargetFields(orderMetadata);
106
+ * // 返回: [
107
+ * // { name: 'id', displayName: 'ID', type: 'string' },
108
+ * // { name: 'total', displayName: '总金额', type: 'number' },
109
+ * // { name: 'ownerId', displayName: '用户ID', type: 'string' },
110
+ * // ...
111
+ * // ]
112
+ * ```
113
+ */
114
+ export declare function extractRelationTargetFields(metadata: EntityMetadata, config?: FieldExtractorConfig): FieldMetadata[];
115
+ /**
116
+ * 从 keyValue 属性的 properties 提取子字段列表
117
+ */
118
+ export declare function extractKeyValueFields(properties: KeyValuePropertyMetadata[]): FieldMetadata[];
119
+ /**
120
+ * 对字段进行分组和排序
121
+ *
122
+ * @param fields - 字段元数据列表
123
+ * @returns 排序后的字段列表
124
+ *
125
+ * @remarks
126
+ * 排序规则:
127
+ * 1. 按层级深度排序(字段名中 '.' 的数量)
128
+ * 2. 同一层级按字段名字母顺序排序
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const fields = [
133
+ * { name: 'orders.id', ... },
134
+ * { name: 'name', ... },
135
+ * { name: 'id', ... },
136
+ * { name: 'orders.total', ... }
137
+ * ];
138
+ *
139
+ * const sorted = organizeFields(fields);
140
+ * // 返回: [
141
+ * // { name: 'id', ... },
142
+ * // { name: 'name', ... },
143
+ * // { name: 'orders.id', ... },
144
+ * // { name: 'orders.total', ... }
145
+ * // ]
146
+ * ```
147
+ */
148
+ export declare function organizeFields(fields: FieldMetadata[]): FieldMetadata[];
149
+ //# sourceMappingURL=metadata-field-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-field-extractor.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/metadata-field-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEtG;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;IAC7C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAyBlE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAKhF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,MAAM,GAAE,oBAAyB,GAChC,aAAa,EAAE,CAEjB;AAkJD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,oBAAyB,GAChC,aAAa,EAAE,CAgDjB;AAmBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,wBAAwB,EAAE,GAAG,aAAa,EAAE,CAQ7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAOvE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 计算弹出层相对于触发元素的位置,优先下方展示,空间不足时向上。
3
+ *
4
+ * @param triggerRect 触发按钮的 DOMRect
5
+ * @param gap 触发元素与弹出层之间的间距(单位 px,默认 2)
6
+ * @param minSpaceBelow 判断下方空间是否充足的阈值(单位 px,默认 120)
7
+ */
8
+ export declare function calcPopoverPosition(triggerRect: DOMRect, gap?: number, minSpaceBelow?: number): {
9
+ left: number;
10
+ top?: number;
11
+ bottom?: number;
12
+ minWidth: number;
13
+ };
14
+ /**
15
+ * 将 calcPopoverPosition 的结果直接应用到弹出层 DOM 元素。
16
+ */
17
+ export declare function applyPopoverPosition(el: HTMLElement, triggerRect: DOMRect, gap?: number, minSpaceBelow?: number): void;
18
+ /**
19
+ * 在弹出层选项列表中查找匹配项的 label。
20
+ */
21
+ export declare function findOptionLabel(options: ReadonlyArray<{
22
+ value: string;
23
+ label: string;
24
+ }>, selected: string, placeholder: string): string;
25
+ //# sourceMappingURL=popover-position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-position.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/popover-position.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,OAAO,EACpB,GAAG,SAAI,EACP,aAAa,SAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,SAAI,EAAE,aAAa,SAAM,GAAG,IAAI,CAc9G;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
@@ -0,0 +1,60 @@
1
+ import { EntityMetadata } from '../../../packages/rxdb/src/index.ts';
2
+ import { FieldMetadata } from '../models/query-builder-state.js';
3
+ import { SchemaParserOptions } from '../services/schema-parser.service.js';
4
+ /**
5
+ * 从 EntityMetadata 创建字段元数据
6
+ *
7
+ * 这是一个便捷的工厂函数,封装了 SchemaParser 的创建和解析过程
8
+ *
9
+ * @param metadata - RxDB 实体元数据
10
+ * @param options - 解析器选项
11
+ * @returns 字段元数据数组
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // 基础用法
16
+ * const fields = createSchemaFromEntity(userMetadata);
17
+ *
18
+ * // 包含外键
19
+ * const fieldsWithFK = createSchemaFromEntity(userMetadata, {
20
+ * includeForeignKeys: true
21
+ * });
22
+ *
23
+ * // 包含计算属性
24
+ * const fieldsWithComputed = createSchemaFromEntity(userMetadata, {
25
+ * includeComputedProperties: true
26
+ * });
27
+ *
28
+ * // 自定义过滤器
29
+ * const onlyStringFields = createSchemaFromEntity(userMetadata, {
30
+ * fieldFilter: (field) => field.type === 'string'
31
+ * });
32
+ * ```
33
+ */
34
+ export declare function createSchemaFromEntity(metadata: EntityMetadata, options?: SchemaParserOptions): FieldMetadata[];
35
+ /**
36
+ * 从多个 EntityMetadata 批量创建字段元数据
37
+ *
38
+ * @param metadataMap - 实体名称到元数据的映射
39
+ * @param options - 解析器选项
40
+ * @returns 实体名称到字段数组的映射
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const entities = new Map([
45
+ * ['User', userMetadata],
46
+ * ['Post', postMetadata],
47
+ * ['Comment', commentMetadata]
48
+ * ]);
49
+ *
50
+ * const schemas = createSchemaFromEntities(entities, {
51
+ * includeForeignKeys: true
52
+ * });
53
+ *
54
+ * // 使用结果
55
+ * const userFields = schemas.get('User');
56
+ * const postFields = schemas.get('Post');
57
+ * ```
58
+ */
59
+ export declare function createSchemaFromEntities(metadataMap: Map<string, EntityMetadata>, options?: SchemaParserOptions): Map<string, FieldMetadata[]>;
60
+ //# sourceMappingURL=schema-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-factory.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/schema-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAEpG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,EAAE,CAG/G;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACxC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAG9B"}
@@ -0,0 +1,2 @@
1
+ export { structuralEqual } from '../../structural-equal.js';
2
+ //# sourceMappingURL=structural-equal.d.ts.map