@contember/bindx 0.1.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 (234) hide show
  1. package/dist/adapter/ContemberAdapter.d.ts +40 -0
  2. package/dist/adapter/ContemberAdapter.d.ts.map +1 -0
  3. package/dist/adapter/MockAdapter.d.ts +81 -0
  4. package/dist/adapter/MockAdapter.d.ts.map +1 -0
  5. package/dist/adapter/MockQueryEngine.d.ts +43 -0
  6. package/dist/adapter/MockQueryEngine.d.ts.map +1 -0
  7. package/dist/adapter/index.d.ts +5 -0
  8. package/dist/adapter/index.d.ts.map +1 -0
  9. package/dist/adapter/types.d.ts +184 -0
  10. package/dist/adapter/types.d.ts.map +1 -0
  11. package/dist/brand/ComponentBrand.d.ts +25 -0
  12. package/dist/brand/ComponentBrand.d.ts.map +1 -0
  13. package/dist/contember/index.d.ts +10 -0
  14. package/dist/contember/index.d.ts.map +1 -0
  15. package/dist/core/ActionDispatcher.d.ts +64 -0
  16. package/dist/core/ActionDispatcher.d.ts.map +1 -0
  17. package/dist/core/Disposable.d.ts +57 -0
  18. package/dist/core/Disposable.d.ts.map +1 -0
  19. package/dist/core/EntityLoader.d.ts +80 -0
  20. package/dist/core/EntityLoader.d.ts.map +1 -0
  21. package/dist/core/PersistenceManager.d.ts +126 -0
  22. package/dist/core/PersistenceManager.d.ts.map +1 -0
  23. package/dist/core/SelectionResolver.d.ts +21 -0
  24. package/dist/core/SelectionResolver.d.ts.map +1 -0
  25. package/dist/core/actionClassification.d.ts +48 -0
  26. package/dist/core/actionClassification.d.ts.map +1 -0
  27. package/dist/core/actions.d.ts +301 -0
  28. package/dist/core/actions.d.ts.map +1 -0
  29. package/dist/core/index.d.ts +4 -0
  30. package/dist/core/index.d.ts.map +1 -0
  31. package/dist/dataview/filterHandlers.d.ts +18 -0
  32. package/dist/dataview/filterHandlers.d.ts.map +1 -0
  33. package/dist/dataview/index.d.ts +3 -0
  34. package/dist/dataview/index.d.ts.map +1 -0
  35. package/dist/dataview/types.d.ts +164 -0
  36. package/dist/dataview/types.d.ts.map +1 -0
  37. package/dist/errors/UnfetchedFieldError.d.ts +11 -0
  38. package/dist/errors/UnfetchedFieldError.d.ts.map +1 -0
  39. package/dist/errors/errorPathResolver.d.ts +52 -0
  40. package/dist/errors/errorPathResolver.d.ts.map +1 -0
  41. package/dist/errors/index.d.ts +5 -0
  42. package/dist/errors/index.d.ts.map +1 -0
  43. package/dist/errors/pathMapper.d.ts +42 -0
  44. package/dist/errors/pathMapper.d.ts.map +1 -0
  45. package/dist/errors/types.d.ts +131 -0
  46. package/dist/errors/types.d.ts.map +1 -0
  47. package/dist/events/EventEmitter.d.ts +97 -0
  48. package/dist/events/EventEmitter.d.ts.map +1 -0
  49. package/dist/events/eventFactory.d.ts +40 -0
  50. package/dist/events/eventFactory.d.ts.map +1 -0
  51. package/dist/events/index.d.ts +15 -0
  52. package/dist/events/index.d.ts.map +1 -0
  53. package/dist/events/types.d.ts +264 -0
  54. package/dist/events/types.d.ts.map +1 -0
  55. package/dist/handles/BaseHandle.d.ts +64 -0
  56. package/dist/handles/BaseHandle.d.ts.map +1 -0
  57. package/dist/handles/EntityHandle.d.ts +208 -0
  58. package/dist/handles/EntityHandle.d.ts.map +1 -0
  59. package/dist/handles/FieldHandle.d.ts +111 -0
  60. package/dist/handles/FieldHandle.d.ts.map +1 -0
  61. package/dist/handles/HasManyListHandle.d.ts +166 -0
  62. package/dist/handles/HasManyListHandle.d.ts.map +1 -0
  63. package/dist/handles/HasOneHandle.d.ts +168 -0
  64. package/dist/handles/HasOneHandle.d.ts.map +1 -0
  65. package/dist/handles/PlaceholderHandle.d.ts +117 -0
  66. package/dist/handles/PlaceholderHandle.d.ts.map +1 -0
  67. package/dist/handles/index.d.ts +8 -0
  68. package/dist/handles/index.d.ts.map +1 -0
  69. package/dist/handles/proxyFactory.d.ts +66 -0
  70. package/dist/handles/proxyFactory.d.ts.map +1 -0
  71. package/dist/handles/types.d.ts +430 -0
  72. package/dist/handles/types.d.ts.map +1 -0
  73. package/dist/index.d.ts +53 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/internal.d.ts +11 -0
  76. package/dist/internal.d.ts.map +1 -0
  77. package/dist/persistence/BatchPersister.d.ts +142 -0
  78. package/dist/persistence/BatchPersister.d.ts.map +1 -0
  79. package/dist/persistence/ChangeRegistry.d.ts +87 -0
  80. package/dist/persistence/ChangeRegistry.d.ts.map +1 -0
  81. package/dist/persistence/ContemberSchemaMutationAdapter.d.ts +16 -0
  82. package/dist/persistence/ContemberSchemaMutationAdapter.d.ts.map +1 -0
  83. package/dist/persistence/MutationCollector.d.ts +96 -0
  84. package/dist/persistence/MutationCollector.d.ts.map +1 -0
  85. package/dist/persistence/MutationSchemaProvider.d.ts +30 -0
  86. package/dist/persistence/MutationSchemaProvider.d.ts.map +1 -0
  87. package/dist/persistence/index.d.ts +7 -0
  88. package/dist/persistence/index.d.ts.map +1 -0
  89. package/dist/persistence/types.d.ts +189 -0
  90. package/dist/persistence/types.d.ts.map +1 -0
  91. package/dist/roles/RoleSchemaRegistry.d.ts +77 -0
  92. package/dist/roles/RoleSchemaRegistry.d.ts.map +1 -0
  93. package/dist/roles/index.d.ts +11 -0
  94. package/dist/roles/index.d.ts.map +1 -0
  95. package/dist/roles/types.d.ts +242 -0
  96. package/dist/roles/types.d.ts.map +1 -0
  97. package/dist/schema/ContemberSchema.d.ts +98 -0
  98. package/dist/schema/ContemberSchema.d.ts.map +1 -0
  99. package/dist/schema/SchemaLoader.d.ts +28 -0
  100. package/dist/schema/SchemaLoader.d.ts.map +1 -0
  101. package/dist/schema/SchemaRegistry.d.ts +95 -0
  102. package/dist/schema/SchemaRegistry.d.ts.map +1 -0
  103. package/dist/schema/index.d.ts +6 -0
  104. package/dist/schema/index.d.ts.map +1 -0
  105. package/dist/schema/roles.d.ts +62 -0
  106. package/dist/schema/roles.d.ts.map +1 -0
  107. package/dist/schema/types.d.ts +179 -0
  108. package/dist/schema/types.d.ts.map +1 -0
  109. package/dist/selection/SelectionMetaCollector.d.ts +32 -0
  110. package/dist/selection/SelectionMetaCollector.d.ts.map +1 -0
  111. package/dist/selection/SelectionScope.d.ts +77 -0
  112. package/dist/selection/SelectionScope.d.ts.map +1 -0
  113. package/dist/selection/buildQuery.d.ts +45 -0
  114. package/dist/selection/buildQuery.d.ts.map +1 -0
  115. package/dist/selection/createFragment.d.ts +29 -0
  116. package/dist/selection/createFragment.d.ts.map +1 -0
  117. package/dist/selection/createSelectionBuilder.d.ts +18 -0
  118. package/dist/selection/createSelectionBuilder.d.ts.map +1 -0
  119. package/dist/selection/index.d.ts +8 -0
  120. package/dist/selection/index.d.ts.map +1 -0
  121. package/dist/selection/queryTypes.d.ts +84 -0
  122. package/dist/selection/queryTypes.d.ts.map +1 -0
  123. package/dist/selection/types.d.ts +238 -0
  124. package/dist/selection/types.d.ts.map +1 -0
  125. package/dist/store/DirtyTracker.d.ts +26 -0
  126. package/dist/store/DirtyTracker.d.ts.map +1 -0
  127. package/dist/store/EntityMetaStore.d.ts +52 -0
  128. package/dist/store/EntityMetaStore.d.ts.map +1 -0
  129. package/dist/store/EntitySnapshotStore.d.ts +63 -0
  130. package/dist/store/EntitySnapshotStore.d.ts.map +1 -0
  131. package/dist/store/ErrorStore.d.ts +82 -0
  132. package/dist/store/ErrorStore.d.ts.map +1 -0
  133. package/dist/store/RelationStore.d.ts +175 -0
  134. package/dist/store/RelationStore.d.ts.map +1 -0
  135. package/dist/store/SnapshotStore.d.ts +143 -0
  136. package/dist/store/SnapshotStore.d.ts.map +1 -0
  137. package/dist/store/SubscriptionManager.d.ts +90 -0
  138. package/dist/store/SubscriptionManager.d.ts.map +1 -0
  139. package/dist/store/TouchedStore.d.ts +24 -0
  140. package/dist/store/TouchedStore.d.ts.map +1 -0
  141. package/dist/store/entityId.d.ts +29 -0
  142. package/dist/store/entityId.d.ts.map +1 -0
  143. package/dist/store/index.d.ts +1 -0
  144. package/dist/store/index.d.ts.map +1 -0
  145. package/dist/store/snapshots.d.ts +144 -0
  146. package/dist/store/snapshots.d.ts.map +1 -0
  147. package/dist/undo/UndoManager.d.ts +120 -0
  148. package/dist/undo/UndoManager.d.ts.map +1 -0
  149. package/dist/undo/index.d.ts +3 -0
  150. package/dist/undo/index.d.ts.map +1 -0
  151. package/dist/undo/types.d.ts +74 -0
  152. package/dist/undo/types.d.ts.map +1 -0
  153. package/dist/utils/aliasGenerator.d.ts +25 -0
  154. package/dist/utils/aliasGenerator.d.ts.map +1 -0
  155. package/dist/utils/deepEqual.d.ts +6 -0
  156. package/dist/utils/deepEqual.d.ts.map +1 -0
  157. package/dist/utils/index.d.ts +3 -0
  158. package/dist/utils/index.d.ts.map +1 -0
  159. package/package.json +29 -0
  160. package/src/adapter/ContemberAdapter.ts +239 -0
  161. package/src/adapter/MockAdapter.ts +394 -0
  162. package/src/adapter/MockQueryEngine.ts +236 -0
  163. package/src/adapter/index.ts +21 -0
  164. package/src/adapter/types.ts +199 -0
  165. package/src/brand/ComponentBrand.ts +28 -0
  166. package/src/contember/index.ts +17 -0
  167. package/src/core/ActionDispatcher.ts +450 -0
  168. package/src/core/Disposable.ts +126 -0
  169. package/src/core/EntityLoader.ts +169 -0
  170. package/src/core/SelectionResolver.ts +78 -0
  171. package/src/core/actionClassification.ts +196 -0
  172. package/src/core/actions.ts +491 -0
  173. package/src/core/index.ts +20 -0
  174. package/src/dataview/filterHandlers.ts +443 -0
  175. package/src/dataview/index.ts +36 -0
  176. package/src/dataview/types.ts +220 -0
  177. package/src/errors/UnfetchedFieldError.ts +18 -0
  178. package/src/errors/errorPathResolver.ts +239 -0
  179. package/src/errors/index.ts +40 -0
  180. package/src/errors/pathMapper.ts +40 -0
  181. package/src/errors/types.ts +223 -0
  182. package/src/events/EventEmitter.ts +447 -0
  183. package/src/events/eventFactory.ts +430 -0
  184. package/src/events/index.ts +89 -0
  185. package/src/events/types.ts +374 -0
  186. package/src/handles/BaseHandle.ts +100 -0
  187. package/src/handles/EntityHandle.ts +538 -0
  188. package/src/handles/FieldHandle.ts +268 -0
  189. package/src/handles/HasManyListHandle.ts +500 -0
  190. package/src/handles/HasOneHandle.ts +500 -0
  191. package/src/handles/PlaceholderHandle.ts +321 -0
  192. package/src/handles/index.ts +37 -0
  193. package/src/handles/proxyFactory.ts +218 -0
  194. package/src/handles/types.ts +743 -0
  195. package/src/index.ts +384 -0
  196. package/src/internal.ts +19 -0
  197. package/src/persistence/BatchPersister.ts +911 -0
  198. package/src/persistence/ChangeRegistry.ts +150 -0
  199. package/src/persistence/ContemberSchemaMutationAdapter.ts +57 -0
  200. package/src/persistence/MutationCollector.ts +567 -0
  201. package/src/persistence/MutationSchemaProvider.ts +33 -0
  202. package/src/persistence/index.ts +23 -0
  203. package/src/persistence/types.ts +220 -0
  204. package/src/schema/ContemberSchema.ts +132 -0
  205. package/src/schema/SchemaLoader.ts +93 -0
  206. package/src/schema/SchemaRegistry.ts +286 -0
  207. package/src/schema/index.ts +51 -0
  208. package/src/schema/roles.ts +83 -0
  209. package/src/schema/types.ts +238 -0
  210. package/src/selection/SelectionMetaCollector.ts +122 -0
  211. package/src/selection/SelectionScope.ts +208 -0
  212. package/src/selection/buildQuery.ts +134 -0
  213. package/src/selection/createFragment.ts +50 -0
  214. package/src/selection/createSelectionBuilder.ts +283 -0
  215. package/src/selection/index.ts +31 -0
  216. package/src/selection/queryTypes.ts +135 -0
  217. package/src/selection/types.ts +320 -0
  218. package/src/store/DirtyTracker.ts +117 -0
  219. package/src/store/EntityMetaStore.ts +143 -0
  220. package/src/store/EntitySnapshotStore.ts +260 -0
  221. package/src/store/ErrorStore.ts +251 -0
  222. package/src/store/RelationStore.ts +696 -0
  223. package/src/store/SnapshotStore.ts +765 -0
  224. package/src/store/SubscriptionManager.ts +241 -0
  225. package/src/store/TouchedStore.ts +42 -0
  226. package/src/store/entityId.ts +43 -0
  227. package/src/store/index.ts +2 -0
  228. package/src/store/snapshots.ts +203 -0
  229. package/src/undo/UndoManager.ts +418 -0
  230. package/src/undo/index.ts +9 -0
  231. package/src/undo/types.ts +84 -0
  232. package/src/utils/aliasGenerator.ts +56 -0
  233. package/src/utils/deepEqual.ts +33 -0
  234. package/src/utils/index.ts +2 -0
@@ -0,0 +1,238 @@
1
+ import type { AnyBrand } from '../brand/ComponentBrand.js';
2
+ import type { EntityWhere, EntityOrderBy } from './queryTypes.js';
3
+ /**
4
+ * Symbol used to store selection metadata on builder objects
5
+ */
6
+ export declare const SELECTION_META: unique symbol;
7
+ /**
8
+ * Options for has-many relation selection with typed filter/orderBy
9
+ *
10
+ * @typeParam TItem - The related entity type (array item type)
11
+ * @typeParam TAlias - Optional alias for the field
12
+ */
13
+ export interface HasManyOptions<TItem = unknown, TAlias extends string = string> {
14
+ as?: TAlias;
15
+ filter?: EntityWhere<TItem>;
16
+ orderBy?: readonly EntityOrderBy<TItem>[];
17
+ limit?: number;
18
+ offset?: number;
19
+ totalCount?: boolean;
20
+ }
21
+ /**
22
+ * Metadata for a selected field (runtime)
23
+ */
24
+ export interface SelectionFieldMeta {
25
+ /** Original field name in the entity */
26
+ fieldName: string;
27
+ /** Alias (output key) - defaults to fieldName */
28
+ alias: string;
29
+ /** Full path to this field (for JSX components) */
30
+ path: string[];
31
+ /** Whether this is a relation (has nested fields) */
32
+ isRelation: boolean;
33
+ /** Whether this is an array/has-many relation */
34
+ isArray: boolean;
35
+ /** For relations: nested selection metadata */
36
+ nested?: SelectionMeta;
37
+ /** For has-many: additional parameters */
38
+ hasManyParams?: {
39
+ filter?: unknown;
40
+ orderBy?: unknown;
41
+ limit?: number;
42
+ offset?: number;
43
+ totalCount?: boolean;
44
+ };
45
+ }
46
+ /**
47
+ * Runtime metadata for a complete selection
48
+ */
49
+ export interface SelectionMeta {
50
+ fields: Map<string, SelectionFieldMeta>;
51
+ }
52
+ /**
53
+ * A fragment defined with the fluent builder
54
+ *
55
+ * @typeParam TModel - The entity model type
56
+ * @typeParam TResult - The selected fields result type
57
+ * @typeParam TBrand - Component brand type for validation (defaults to AnyBrand)
58
+ */
59
+ export interface FluentFragment<TModel, TResult, TBrand extends AnyBrand = AnyBrand> {
60
+ /** Runtime metadata */
61
+ readonly __meta: SelectionMeta;
62
+ /** Type brand for result type */
63
+ readonly __resultType: TResult;
64
+ /** Type brand for model type */
65
+ readonly __modelType: TModel;
66
+ /** Marker for type checking */
67
+ readonly __isFragment: true;
68
+ /** Component brand for type-level tracking */
69
+ readonly __brand?: TBrand;
70
+ /** Runtime brand symbols for validation */
71
+ readonly __brands?: Set<symbol>;
72
+ /** Runtime roles for validation */
73
+ readonly __roles?: readonly string[];
74
+ }
75
+ /**
76
+ * Scalar method on selection builder - selects a scalar field
77
+ */
78
+ export interface ScalarMethod<TEntity, K extends keyof TEntity, TSelected extends object, THasManyParams extends object> {
79
+ /** Select field with original name */
80
+ (): SelectionBuilder<TEntity, TSelected & Pick<TEntity, K>, THasManyParams>;
81
+ /** Select field with alias */
82
+ <TAlias extends string>(options: {
83
+ as: TAlias;
84
+ }): SelectionBuilder<TEntity, TSelected & {
85
+ [P in TAlias]: TEntity[K];
86
+ }, THasManyParams>;
87
+ }
88
+ /**
89
+ * Has-one method on selection builder - selects a relation to single entity
90
+ */
91
+ export interface HasOneMethod<TEntity, K extends keyof TEntity, TRelated, TSelected extends object, THasManyParams extends object> {
92
+ /** Select with inline callback */
93
+ <TNestedSelected extends object>(selector: (builder: SelectionBuilder<TRelated>) => SelectionBuilder<TRelated, TNestedSelected, object>): SelectionBuilder<TEntity, TSelected & {
94
+ [P in K & string]: TNestedSelected;
95
+ }, THasManyParams>;
96
+ /** Select with fragment */
97
+ <TFragmentResult extends object>(fragment: FluentFragment<TRelated, TFragmentResult>): SelectionBuilder<TEntity, TSelected & {
98
+ [P in K & string]: TFragmentResult;
99
+ }, THasManyParams>;
100
+ /** Select with multiple fragments (merged) - result type is intersection of all fragment result types */
101
+ <T1 extends object, T2 extends object>(fragment1: FluentFragment<TRelated, T1>, fragment2: FluentFragment<TRelated, T2>): SelectionBuilder<TEntity, TSelected & {
102
+ [P in K & string]: T1 & T2;
103
+ }, THasManyParams>;
104
+ /** Select with three fragments (merged) */
105
+ <T1 extends object, T2 extends object, T3 extends object>(fragment1: FluentFragment<TRelated, T1>, fragment2: FluentFragment<TRelated, T2>, fragment3: FluentFragment<TRelated, T3>): SelectionBuilder<TEntity, TSelected & {
106
+ [P in K & string]: T1 & T2 & T3;
107
+ }, THasManyParams>;
108
+ /** Select with alias and callback */
109
+ <TAlias extends string, TNestedSelected extends object>(options: {
110
+ as: TAlias;
111
+ }, selector: (builder: SelectionBuilder<TRelated>) => SelectionBuilder<TRelated, TNestedSelected, object>): SelectionBuilder<TEntity, TSelected & {
112
+ [P in TAlias]: TNestedSelected;
113
+ }, THasManyParams>;
114
+ /** Select with alias and fragment */
115
+ <TAlias extends string, TFragmentResult extends object>(options: {
116
+ as: TAlias;
117
+ }, fragment: FluentFragment<TRelated, TFragmentResult>): SelectionBuilder<TEntity, TSelected & {
118
+ [P in TAlias]: TFragmentResult;
119
+ }, THasManyParams>;
120
+ /** Select with alias and two fragments (merged) */
121
+ <TAlias extends string, T1 extends object, T2 extends object>(options: {
122
+ as: TAlias;
123
+ }, fragment1: FluentFragment<TRelated, T1>, fragment2: FluentFragment<TRelated, T2>): SelectionBuilder<TEntity, TSelected & {
124
+ [P in TAlias]: T1 & T2;
125
+ }, THasManyParams>;
126
+ /** Select with alias and three fragments (merged) */
127
+ <TAlias extends string, T1 extends object, T2 extends object, T3 extends object>(options: {
128
+ as: TAlias;
129
+ }, fragment1: FluentFragment<TRelated, T1>, fragment2: FluentFragment<TRelated, T2>, fragment3: FluentFragment<TRelated, T3>): SelectionBuilder<TEntity, TSelected & {
130
+ [P in TAlias]: T1 & T2 & T3;
131
+ }, THasManyParams>;
132
+ }
133
+ /**
134
+ * Resolve alias from options or fall back to field name
135
+ */
136
+ type ResolveAlias<K, TOptions> = TOptions extends {
137
+ as: infer A extends string;
138
+ } ? A : K & string;
139
+ /**
140
+ * Has-many method on selection builder - selects a relation to multiple entities
141
+ */
142
+ export interface HasManyMethod<TEntity, K extends keyof TEntity, TItem, TSelected extends object, THasManyParams extends object> {
143
+ /** Select with inline callback (no options) */
144
+ <TNestedSelected extends object>(selector: (builder: SelectionBuilder<TItem>) => SelectionBuilder<TItem, TNestedSelected, object>): SelectionBuilder<TEntity, TSelected & {
145
+ [P in K & string]: TNestedSelected[];
146
+ }, THasManyParams & {
147
+ [P in K & string]: object;
148
+ }>;
149
+ /** Select with fragment (no options) */
150
+ <TFragmentResult extends object>(fragment: FluentFragment<TItem, TFragmentResult>): SelectionBuilder<TEntity, TSelected & {
151
+ [P in K & string]: TFragmentResult[];
152
+ }, THasManyParams & {
153
+ [P in K & string]: object;
154
+ }>;
155
+ /** Select with two fragments (merged, no options) */
156
+ <T1 extends object, T2 extends object>(fragment1: FluentFragment<TItem, T1>, fragment2: FluentFragment<TItem, T2>): SelectionBuilder<TEntity, TSelected & {
157
+ [P in K & string]: (T1 & T2)[];
158
+ }, THasManyParams & {
159
+ [P in K & string]: object;
160
+ }>;
161
+ /** Select with three fragments (merged, no options) */
162
+ <T1 extends object, T2 extends object, T3 extends object>(fragment1: FluentFragment<TItem, T1>, fragment2: FluentFragment<TItem, T2>, fragment3: FluentFragment<TItem, T3>): SelectionBuilder<TEntity, TSelected & {
163
+ [P in K & string]: (T1 & T2 & T3)[];
164
+ }, THasManyParams & {
165
+ [P in K & string]: object;
166
+ }>;
167
+ /** Select with options and callback */
168
+ <TOptions extends HasManyOptions<TItem>, TNestedSelected extends object>(options: TOptions, selector: (builder: SelectionBuilder<TItem>) => SelectionBuilder<TItem, TNestedSelected, object>): SelectionBuilder<TEntity, TSelected & {
169
+ [P in ResolveAlias<K, TOptions>]: TNestedSelected[];
170
+ }, THasManyParams & {
171
+ [P in ResolveAlias<K, TOptions>]: TOptions;
172
+ }>;
173
+ /** Select with options and fragment */
174
+ <TOptions extends HasManyOptions<TItem>, TFragmentResult extends object>(options: TOptions, fragment: FluentFragment<TItem, TFragmentResult>): SelectionBuilder<TEntity, TSelected & {
175
+ [P in ResolveAlias<K, TOptions>]: TFragmentResult[];
176
+ }, THasManyParams & {
177
+ [P in ResolveAlias<K, TOptions>]: TOptions;
178
+ }>;
179
+ /** Select with options and two fragments (merged) */
180
+ <TOptions extends HasManyOptions<TItem>, T1 extends object, T2 extends object>(options: TOptions, fragment1: FluentFragment<TItem, T1>, fragment2: FluentFragment<TItem, T2>): SelectionBuilder<TEntity, TSelected & {
181
+ [P in ResolveAlias<K, TOptions>]: (T1 & T2)[];
182
+ }, THasManyParams & {
183
+ [P in ResolveAlias<K, TOptions>]: TOptions;
184
+ }>;
185
+ /** Select with options and three fragments (merged) */
186
+ <TOptions extends HasManyOptions<TItem>, T1 extends object, T2 extends object, T3 extends object>(options: TOptions, fragment1: FluentFragment<TItem, T1>, fragment2: FluentFragment<TItem, T2>, fragment3: FluentFragment<TItem, T3>): SelectionBuilder<TEntity, TSelected & {
187
+ [P in ResolveAlias<K, TOptions>]: (T1 & T2 & T3)[];
188
+ }, THasManyParams & {
189
+ [P in ResolveAlias<K, TOptions>]: TOptions;
190
+ }>;
191
+ }
192
+ /**
193
+ * Maps entity fields to their corresponding builder methods
194
+ */
195
+ type SelectionBuilderMethods<TEntity, TSelected extends object, THasManyParams extends object> = {
196
+ [K in keyof TEntity]-?: TEntity[K] extends Array<infer U> ? HasManyMethod<TEntity, K, U, TSelected, THasManyParams> : NonNullable<TEntity[K]> extends object ? HasOneMethod<TEntity, K, NonNullable<TEntity[K]>, TSelected, THasManyParams> : ScalarMethod<TEntity, K, TSelected, THasManyParams>;
197
+ };
198
+ /**
199
+ * The main fluent selection builder interface.
200
+ *
201
+ * @typeParam TEntity - The entity type being selected from
202
+ * @typeParam TSelected - Accumulated type of selected fields (grows with each selection)
203
+ * @typeParam THasManyParams - Record tracking has-many parameters for alias consistency
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * // Select scalar fields
208
+ * e.id().title().content()
209
+ * // Type: { id: string, title: string, content: string }
210
+ *
211
+ * // Select with alias
212
+ * e.title({ as: 'headline' })
213
+ * // Type: { headline: string }
214
+ *
215
+ * // Select has-one relation
216
+ * e.author(a => a.name().email())
217
+ * // Type: { author: { name: string, email: string } }
218
+ *
219
+ * // Select has-many with options
220
+ * e.tags({ filter: { active: true } }, t => t.name())
221
+ * // Type: { tags: { name: string }[] }
222
+ * ```
223
+ */
224
+ export type SelectionBuilder<TEntity, TSelected extends object = object, THasManyParams extends object = object> = SelectionBuilderMethods<TEntity, TSelected, THasManyParams> & {
225
+ [SELECTION_META]: SelectionMeta;
226
+ /** Type brand for the selected result */
227
+ readonly __selected: TSelected;
228
+ };
229
+ /**
230
+ * Extracts the selected type from a SelectionBuilder
231
+ */
232
+ export type InferSelection<T> = T extends SelectionBuilder<infer _E, infer S, infer _P> ? S : never;
233
+ /**
234
+ * Type for the fluent definer function used in useEntity/useEntityList
235
+ */
236
+ export type FluentDefiner<TModel, TResult extends object> = (builder: SelectionBuilder<TModel>) => SelectionBuilder<TModel, TResult, object>;
237
+ export {};
238
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/selection/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { EntitySnapshotStore } from './EntitySnapshotStore.js';
2
+ import type { EntityMetaStore } from './EntityMetaStore.js';
3
+ import type { RelationStore } from './RelationStore.js';
4
+ interface DirtyEntity {
5
+ entityType: string;
6
+ entityId: string;
7
+ changeType: 'create' | 'update' | 'delete';
8
+ }
9
+ /**
10
+ * Tracks dirty state across entities by comparing current data to server data.
11
+ *
12
+ * Receives shared references to SnapshotStore internals so it can read
13
+ * entity snapshots, metadata, and relation state without duplicating storage.
14
+ */
15
+ export declare class DirtyTracker {
16
+ private readonly entitySnapshots;
17
+ private readonly meta;
18
+ private readonly relations;
19
+ constructor(entitySnapshots: EntitySnapshotStore, meta: EntityMetaStore, relations: RelationStore);
20
+ getAllDirtyEntities(): DirtyEntity[];
21
+ getDirtyFields(entityType: string, entityId: string): string[];
22
+ getDirtyRelations(entityType: string, entityId: string): string[];
23
+ private isEntityDirty;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=DirtyTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirtyTracker.d.ts","sourceRoot":"","sources":["../../src/store/DirtyTracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGvD,UAAU,WAAW;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAC1C;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAEvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,eAAe,EAAE,mBAAmB,EACpC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,aAAa;IAG1C,mBAAmB,IAAI,WAAW,EAAE;IA+BpC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IA6B9D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAKjE,OAAO,CAAC,aAAa;CAUrB"}
@@ -0,0 +1,52 @@
1
+ import type { LoadStatus } from './snapshots.js';
2
+ import type { FieldError } from '../errors/types.js';
3
+ /**
4
+ * Entity load state tracking.
5
+ */
6
+ export interface EntityLoadState {
7
+ status: LoadStatus;
8
+ error?: FieldError;
9
+ }
10
+ /**
11
+ * Entity metadata for mutation generation.
12
+ */
13
+ export interface EntityMeta {
14
+ /** Whether the entity exists on the server */
15
+ existsOnServer: boolean;
16
+ /** Whether the entity is scheduled for deletion */
17
+ isScheduledForDeletion: boolean;
18
+ }
19
+ /**
20
+ * Manages entity metadata, load states, persisting status, and temp ID mapping.
21
+ *
22
+ * Keys are pre-computed composite strings (e.g., "entityType:id").
23
+ * Follows the same pattern as ErrorStore and RelationStore.
24
+ */
25
+ export declare class EntityMetaStore {
26
+ /** Load states keyed by "entityType:id" */
27
+ private readonly loadStates;
28
+ /** Entity metadata keyed by "entityType:id" */
29
+ private readonly entityMetas;
30
+ /** Persisting status keyed by "entityType:id" */
31
+ private readonly persistingEntities;
32
+ /** Mapping from temp ID to persisted ID (keyed by "entityType:tempId") */
33
+ private readonly tempToPersistedId;
34
+ getLoadState(key: string): EntityLoadState | undefined;
35
+ setLoadState(key: string, status: LoadStatus, error?: FieldError): void;
36
+ clearLoadState(key: string): void;
37
+ getEntityMeta(key: string): EntityMeta | undefined;
38
+ setExistsOnServer(key: string, existsOnServer: boolean): void;
39
+ existsOnServer(key: string): boolean;
40
+ scheduleForDeletion(key: string): void;
41
+ unscheduleForDeletion(key: string): void;
42
+ isScheduledForDeletion(key: string): boolean;
43
+ isPersisting(key: string): boolean;
44
+ setPersisting(key: string, isPersisting: boolean): void;
45
+ mapTempIdToPersistedId(key: string, persistedId: string): void;
46
+ getPersistedId(key: string, id: string): string | null;
47
+ isNewEntity(key: string, id: string): boolean;
48
+ exportMetas(keys: string[]): Map<string, EntityMeta>;
49
+ importMetas(metas: Map<string, EntityMeta>): void;
50
+ clear(): void;
51
+ }
52
+ //# sourceMappingURL=EntityMetaStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityMetaStore.d.ts","sourceRoot":"","sources":["../../src/store/EntityMetaStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,UAAU,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB,mDAAmD;IACnD,sBAAsB,EAAE,OAAO,CAAA;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAEhE,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAEvD,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAI9D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAItD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;IAIvE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIlD,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAK7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIpC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAUvD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK9D,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMtD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ7C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAWpD,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAMjD,KAAK,IAAI,IAAI;CAMb"}
@@ -0,0 +1,63 @@
1
+ import { type EntitySnapshot } from './snapshots.js';
2
+ /**
3
+ * Manages entity snapshots — core CRUD for immutable entity data.
4
+ *
5
+ * Entity snapshots are keyed by composite strings (e.g., "entityType:id").
6
+ * All snapshots are immutable (frozen) objects. Mutations create new snapshot instances.
7
+ *
8
+ * Follows the same sub-store pattern as ErrorStore, RelationStore, etc.
9
+ * SnapshotStore delegates entity snapshot operations here.
10
+ */
11
+ export declare class EntitySnapshotStore {
12
+ private readonly snapshots;
13
+ get(key: string): EntitySnapshot | undefined;
14
+ has(key: string): boolean;
15
+ /**
16
+ * Sets entity data, merging with existing data if present.
17
+ * Returns the new snapshot. Does NOT handle notification or meta updates.
18
+ */
19
+ setData<T extends object>(key: string, id: string, entityType: string, data: T, isServerData: boolean): EntitySnapshot<T>;
20
+ /**
21
+ * Updates specific fields on an existing entity snapshot.
22
+ * Returns the new snapshot, or undefined if entity doesn't exist.
23
+ */
24
+ updateFields<T extends object>(key: string, updates: Partial<T>): EntitySnapshot<T> | undefined;
25
+ /**
26
+ * Sets a nested field value on an existing entity snapshot.
27
+ * Returns true if the snapshot was updated, false if entity doesn't exist.
28
+ */
29
+ setFieldValue(key: string, fieldPath: string[], value: unknown): boolean;
30
+ /**
31
+ * Commits current data as server data (serverData = data).
32
+ */
33
+ commit(key: string): void;
34
+ /**
35
+ * Resets data to server data (data = serverData).
36
+ */
37
+ reset(key: string): void;
38
+ /**
39
+ * Removes an entity snapshot.
40
+ */
41
+ remove(key: string): void;
42
+ /**
43
+ * Bumps the version of an entity snapshot without changing data.
44
+ * Used by SubscriptionManager when child entities change.
45
+ */
46
+ bumpVersion(key: string): void;
47
+ /**
48
+ * Commits specific fields by copying their current values to server data.
49
+ */
50
+ commitFields(key: string, fieldNames: string[]): void;
51
+ /**
52
+ * Exports snapshots for the given keys.
53
+ */
54
+ exportSnapshots(keys: string[]): Map<string, EntitySnapshot>;
55
+ /**
56
+ * Imports snapshots, overwriting any existing entries.
57
+ * Returns the set of keys that were imported.
58
+ */
59
+ importSnapshots(snapshots: Map<string, EntitySnapshot>): Set<string>;
60
+ keys(): IterableIterator<string>;
61
+ clear(): void;
62
+ }
63
+ //# sourceMappingURL=EntitySnapshotStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntitySnapshotStore.d.ts","sourceRoot":"","sources":["../../src/store/EntitySnapshotStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;OAGG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,GACnB,cAAc,CAAC,CAAC,CAAC;IAuBpB;;;OAGG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAiBhC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAiBxE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAezB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAexB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAe9B;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAyBrD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAW5D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IASpE,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC,KAAK,IAAI,IAAI;CAGb"}
@@ -0,0 +1,82 @@
1
+ import type { FieldError } from '../errors/types.js';
2
+ /**
3
+ * Manages error state for fields, entities, and relations.
4
+ *
5
+ * Errors are keyed by composite strings:
6
+ * - Field errors: "entityType:id:fieldName"
7
+ * - Entity errors: "entityType:id"
8
+ * - Relation errors: "entityType:id:relationName"
9
+ */
10
+ export declare class ErrorStore {
11
+ /** Field errors keyed by "entityType:id:fieldName" */
12
+ private readonly fieldErrors;
13
+ /** Entity-level errors keyed by "entityType:id" */
14
+ private readonly entityErrors;
15
+ /** Relation errors keyed by "entityType:id:relationName" */
16
+ private readonly relationErrors;
17
+ /**
18
+ * Gets field errors for a specific field.
19
+ */
20
+ getFieldErrors(fieldKey: string): readonly FieldError[];
21
+ /**
22
+ * Adds an error to a field.
23
+ */
24
+ addFieldError(fieldKey: string, error: FieldError): void;
25
+ /**
26
+ * Clears field errors, optionally filtering by source.
27
+ */
28
+ clearFieldErrors(fieldKey: string, source?: 'client' | 'server'): void;
29
+ /**
30
+ * Clears non-sticky client errors for a field.
31
+ * Called when field value changes.
32
+ * Returns true if any errors were removed.
33
+ */
34
+ clearNonStickyFieldErrors(fieldKey: string): boolean;
35
+ /**
36
+ * Gets entity-level errors.
37
+ */
38
+ getEntityErrors(entityKey: string): readonly FieldError[];
39
+ /**
40
+ * Adds an entity-level error.
41
+ */
42
+ addEntityError(entityKey: string, error: FieldError): void;
43
+ /**
44
+ * Clears entity-level errors, optionally filtering by source.
45
+ */
46
+ clearEntityErrors(entityKey: string, source?: 'client' | 'server'): void;
47
+ /**
48
+ * Gets relation errors.
49
+ */
50
+ getRelationErrors(relationKey: string): readonly FieldError[];
51
+ /**
52
+ * Adds a relation error.
53
+ */
54
+ addRelationError(relationKey: string, error: FieldError): void;
55
+ /**
56
+ * Clears relation errors, optionally filtering by source.
57
+ */
58
+ clearRelationErrors(relationKey: string, source?: 'client' | 'server'): void;
59
+ /**
60
+ * Clears all server errors for an entity (entity-level, fields, and relations).
61
+ * Called before persist to clear stale server errors.
62
+ */
63
+ clearAllServerErrors(entityKey: string, keyPrefix: string): void;
64
+ /**
65
+ * Clears all errors for an entity (entity-level, fields, and relations).
66
+ */
67
+ clearAllErrors(entityKey: string, keyPrefix: string): void;
68
+ /**
69
+ * Checks if an entity has any client errors (entity-level, fields, or relations).
70
+ * Used to block persist when validation errors exist.
71
+ */
72
+ hasClientErrors(entityKey: string, keyPrefix: string): boolean;
73
+ /**
74
+ * Checks if an entity has any errors at all.
75
+ */
76
+ hasAnyErrors(entityKey: string, keyPrefix: string): boolean;
77
+ /**
78
+ * Clears all error data.
79
+ */
80
+ clear(): void;
81
+ }
82
+ //# sourceMappingURL=ErrorStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorStore.d.ts","sourceRoot":"","sources":["../../src/store/ErrorStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGhE;;;;;;;GAOG;AACH,qBAAa,UAAU;IACtB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAE7D,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAI/D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIvD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAgBtE;;;;OAIG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiBpD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIzD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1D;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkBxE;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAI7D;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM9D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkB5E;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBhE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgB1D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB9D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB3D;;OAEG;IACH,KAAK,IAAI,IAAI;CAKb"}