mindoodb 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +263 -0
  2. package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts +5 -0
  3. package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts.map +1 -0
  4. package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js +17 -0
  5. package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js.map +1 -0
  6. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +111 -0
  7. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -0
  8. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +237 -0
  9. package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -0
  10. package/dist/appendonlystores/network/HttpTransport.d.ts +78 -0
  11. package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -0
  12. package/dist/appendonlystores/network/HttpTransport.js +356 -0
  13. package/dist/appendonlystores/network/HttpTransport.js.map +1 -0
  14. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +131 -0
  15. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -0
  16. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +248 -0
  17. package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -0
  18. package/dist/appendonlystores/network/index.d.ts +8 -0
  19. package/dist/appendonlystores/network/index.d.ts.map +1 -0
  20. package/dist/appendonlystores/network/index.js +21 -0
  21. package/dist/appendonlystores/network/index.js.map +1 -0
  22. package/dist/browser/crypto/BrowserCryptoAdapter.d.ts +14 -0
  23. package/dist/browser/crypto/BrowserCryptoAdapter.d.ts.map +1 -0
  24. package/dist/browser/crypto/BrowserCryptoAdapter.js +30 -0
  25. package/dist/browser/crypto/BrowserCryptoAdapter.js.map +1 -0
  26. package/dist/browser/index.d.ts +3 -0
  27. package/dist/browser/index.d.ts.map +1 -0
  28. package/dist/browser/index.js +26 -0
  29. package/dist/browser/index.js.map +1 -0
  30. package/dist/core/BaseMindooDB.d.ts +182 -0
  31. package/dist/core/BaseMindooDB.d.ts.map +1 -0
  32. package/dist/core/BaseMindooDB.js +1701 -0
  33. package/dist/core/BaseMindooDB.js.map +1 -0
  34. package/dist/core/BaseMindooTenant.d.ts +155 -0
  35. package/dist/core/BaseMindooTenant.d.ts.map +1 -0
  36. package/dist/core/BaseMindooTenant.js +673 -0
  37. package/dist/core/BaseMindooTenant.js.map +1 -0
  38. package/dist/core/BaseMindooTenantDirectory.d.ts +99 -0
  39. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -0
  40. package/dist/core/BaseMindooTenantDirectory.js +776 -0
  41. package/dist/core/BaseMindooTenantDirectory.js.map +1 -0
  42. package/dist/core/BaseMindooTenantFactory.d.ts +91 -0
  43. package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -0
  44. package/dist/core/BaseMindooTenantFactory.js +297 -0
  45. package/dist/core/BaseMindooTenantFactory.js.map +1 -0
  46. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +111 -0
  47. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -0
  48. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +293 -0
  49. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -0
  50. package/dist/core/appendonlystores/network/AuthenticationService.d.ts +78 -0
  51. package/dist/core/appendonlystores/network/AuthenticationService.d.ts.map +1 -0
  52. package/dist/core/appendonlystores/network/AuthenticationService.js +297 -0
  53. package/dist/core/appendonlystores/network/AuthenticationService.js.map +1 -0
  54. package/dist/core/appendonlystores/network/NetworkTransport.d.ts +174 -0
  55. package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -0
  56. package/dist/core/appendonlystores/network/NetworkTransport.js +3 -0
  57. package/dist/core/appendonlystores/network/NetworkTransport.js.map +1 -0
  58. package/dist/core/appendonlystores/network/types.d.ts +135 -0
  59. package/dist/core/appendonlystores/network/types.d.ts.map +1 -0
  60. package/dist/core/appendonlystores/network/types.js +35 -0
  61. package/dist/core/appendonlystores/network/types.js.map +1 -0
  62. package/dist/core/appendonlystores/types.d.ts +157 -0
  63. package/dist/core/appendonlystores/types.d.ts.map +1 -0
  64. package/dist/core/appendonlystores/types.js +3 -0
  65. package/dist/core/appendonlystores/types.js.map +1 -0
  66. package/dist/core/crypto/CryptoAdapter.d.ts +19 -0
  67. package/dist/core/crypto/CryptoAdapter.d.ts.map +1 -0
  68. package/dist/core/crypto/CryptoAdapter.js +3 -0
  69. package/dist/core/crypto/CryptoAdapter.js.map +1 -0
  70. package/dist/core/crypto/MindooDocSigner.d.ts +106 -0
  71. package/dist/core/crypto/MindooDocSigner.d.ts.map +1 -0
  72. package/dist/core/crypto/MindooDocSigner.js +192 -0
  73. package/dist/core/crypto/MindooDocSigner.js.map +1 -0
  74. package/dist/core/crypto/RSAEncryption.d.ts +62 -0
  75. package/dist/core/crypto/RSAEncryption.d.ts.map +1 -0
  76. package/dist/core/crypto/RSAEncryption.js +167 -0
  77. package/dist/core/crypto/RSAEncryption.js.map +1 -0
  78. package/dist/core/errors.d.ts +10 -0
  79. package/dist/core/errors.d.ts.map +1 -0
  80. package/dist/core/errors.js +17 -0
  81. package/dist/core/errors.js.map +1 -0
  82. package/dist/core/index.d.ts +14 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +53 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.d.ts +33 -0
  87. package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.d.ts.map +1 -0
  88. package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.js +27 -0
  89. package/dist/core/indexing/virtualviews/IViewEntryAccessCheck.js.map +1 -0
  90. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts +31 -0
  91. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.d.ts.map +1 -0
  92. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.js +3 -0
  93. package/dist/core/indexing/virtualviews/IVirtualViewDataProvider.js.map +1 -0
  94. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +52 -0
  95. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -0
  96. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +106 -0
  97. package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -0
  98. package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts +44 -0
  99. package/dist/core/indexing/virtualviews/ViewEntrySortKey.d.ts.map +1 -0
  100. package/dist/core/indexing/virtualviews/ViewEntrySortKey.js +107 -0
  101. package/dist/core/indexing/virtualviews/ViewEntrySortKey.js.map +1 -0
  102. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +28 -0
  103. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -0
  104. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +133 -0
  105. package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -0
  106. package/dist/core/indexing/virtualviews/VirtualView.d.ts +109 -0
  107. package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -0
  108. package/dist/core/indexing/virtualviews/VirtualView.js +504 -0
  109. package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -0
  110. package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts +59 -0
  111. package/dist/core/indexing/virtualviews/VirtualViewColumn.d.ts.map +1 -0
  112. package/dist/core/indexing/virtualviews/VirtualViewColumn.js +70 -0
  113. package/dist/core/indexing/virtualviews/VirtualViewColumn.js.map +1 -0
  114. package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts +49 -0
  115. package/dist/core/indexing/virtualviews/VirtualViewDataChange.d.ts.map +1 -0
  116. package/dist/core/indexing/virtualviews/VirtualViewDataChange.js +69 -0
  117. package/dist/core/indexing/virtualviews/VirtualViewDataChange.js.map +1 -0
  118. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +121 -0
  119. package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -0
  120. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +365 -0
  121. package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -0
  122. package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts +131 -0
  123. package/dist/core/indexing/virtualviews/VirtualViewFactory.d.ts.map +1 -0
  124. package/dist/core/indexing/virtualviews/VirtualViewFactory.js +236 -0
  125. package/dist/core/indexing/virtualviews/VirtualViewFactory.js.map +1 -0
  126. package/dist/core/indexing/virtualviews/VirtualViewNavigator.d.ts +330 -0
  127. package/dist/core/indexing/virtualviews/VirtualViewNavigator.d.ts.map +1 -0
  128. package/dist/core/indexing/virtualviews/VirtualViewNavigator.js +1010 -0
  129. package/dist/core/indexing/virtualviews/VirtualViewNavigator.js.map +1 -0
  130. package/dist/core/indexing/virtualviews/index.d.ts +53 -0
  131. package/dist/core/indexing/virtualviews/index.d.ts.map +1 -0
  132. package/dist/core/indexing/virtualviews/index.js +89 -0
  133. package/dist/core/indexing/virtualviews/index.js.map +1 -0
  134. package/dist/core/indexing/virtualviews/types.d.ts +115 -0
  135. package/dist/core/indexing/virtualviews/types.d.ts.map +1 -0
  136. package/dist/core/indexing/virtualviews/types.js +175 -0
  137. package/dist/core/indexing/virtualviews/types.js.map +1 -0
  138. package/dist/core/keys/KeyBag.d.ts +122 -0
  139. package/dist/core/keys/KeyBag.d.ts.map +1 -0
  140. package/dist/core/keys/KeyBag.js +401 -0
  141. package/dist/core/keys/KeyBag.js.map +1 -0
  142. package/dist/core/types.d.ts +1004 -0
  143. package/dist/core/types.d.ts.map +1 -0
  144. package/dist/core/types.js +10 -0
  145. package/dist/core/types.js.map +1 -0
  146. package/dist/core/userid/index.d.ts +53 -0
  147. package/dist/core/userid/index.d.ts.map +1 -0
  148. package/dist/core/userid/index.js +3 -0
  149. package/dist/core/userid/index.js.map +1 -0
  150. package/dist/core/utils/idGeneration.d.ts +109 -0
  151. package/dist/core/utils/idGeneration.d.ts.map +1 -0
  152. package/dist/core/utils/idGeneration.js +182 -0
  153. package/dist/core/utils/idGeneration.js.map +1 -0
  154. package/dist/core/utils/index.d.ts +5 -0
  155. package/dist/core/utils/index.d.ts.map +1 -0
  156. package/dist/core/utils/index.js +19 -0
  157. package/dist/core/utils/index.js.map +1 -0
  158. package/dist/index.d.ts +7 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +40 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/node/crypto/NodeCryptoAdapter.d.ts +16 -0
  163. package/dist/node/crypto/NodeCryptoAdapter.d.ts.map +1 -0
  164. package/dist/node/crypto/NodeCryptoAdapter.js +53 -0
  165. package/dist/node/crypto/NodeCryptoAdapter.js.map +1 -0
  166. package/dist/node/index.d.ts +3 -0
  167. package/dist/node/index.d.ts.map +1 -0
  168. package/dist/node/index.js +26 -0
  169. package/dist/node/index.js.map +1 -0
  170. package/package.json +58 -0
@@ -0,0 +1,504 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VirtualView = void 0;
4
+ const VirtualViewEntryData_1 = require("./VirtualViewEntryData");
5
+ const ViewEntrySortKey_1 = require("./ViewEntrySortKey");
6
+ const ViewEntrySortKeyComparator_1 = require("./ViewEntrySortKeyComparator");
7
+ const types_1 = require("./types");
8
+ /**
9
+ * VirtualView creates a hierarchical, sorted view of documents from one or more MindooDB instances.
10
+ * Documents are organized into categories (tree structure) with sorting and optional totals.
11
+ */
12
+ class VirtualView {
13
+ constructor(columns) {
14
+ /** Categorization style (categories before/after documents) */
15
+ this.categorizationStyle = types_1.CategorizationStyle.DOCUMENT_THEN_CATEGORY;
16
+ /** Whether the index has been built */
17
+ this.indexBuilt = false;
18
+ /** Root entry of the view tree */
19
+ this.rootEntry = null;
20
+ /** Counter for generating category IDs */
21
+ this.categoryIdCounter = 4;
22
+ /** Map of origin:docId -> list of entry occurrences */
23
+ this.entriesByDocId = new Map();
24
+ /** Data providers */
25
+ this.dataProviderByOrigin = new Map();
26
+ /** Entries pending sibling index recalculation */
27
+ this.pendingSiblingIndexFlush = new Map();
28
+ /** Last index update timestamp */
29
+ this.lastIndexUpdateTime = null;
30
+ this.columns = [...columns];
31
+ this.categoryColumns = [];
32
+ this.sortColumns = [];
33
+ this.totalColumns = [];
34
+ this.valueFunctionColumns = [];
35
+ // Categorize columns
36
+ for (const column of columns) {
37
+ if (column.isCategory) {
38
+ this.categoryColumns.push(column);
39
+ }
40
+ else if (column.sorting !== types_1.ColumnSorting.NONE) {
41
+ this.sortColumns.push(column);
42
+ }
43
+ if (column.valueFunction) {
44
+ this.valueFunctionColumns.push(column);
45
+ }
46
+ if (column.totalMode !== types_1.TotalMode.NONE) {
47
+ this.totalColumns.push(column);
48
+ }
49
+ }
50
+ // Build descending flags for document columns
51
+ this.docOrderDescending = this.sortColumns.map(col => col.sorting === types_1.ColumnSorting.DESCENDING);
52
+ // If no sort columns, add a default ascending flag
53
+ if (this.docOrderDescending.length === 0) {
54
+ this.docOrderDescending.push(false);
55
+ }
56
+ this.viewHasTotalColumns = this.totalColumns.length > 0;
57
+ }
58
+ /**
59
+ * Set the categorization style
60
+ */
61
+ setCategorizationStyle(style) {
62
+ if (!this.indexBuilt) {
63
+ this.categorizationStyle = style;
64
+ }
65
+ return this;
66
+ }
67
+ getCategorizationStyle() {
68
+ return this.categorizationStyle;
69
+ }
70
+ getColumns() {
71
+ return [...this.columns];
72
+ }
73
+ getCategoryColumns() {
74
+ return [...this.categoryColumns];
75
+ }
76
+ getSortColumns() {
77
+ return [...this.sortColumns];
78
+ }
79
+ getTotalColumns() {
80
+ return [...this.totalColumns];
81
+ }
82
+ /**
83
+ * Add a data provider to the view
84
+ */
85
+ addDataProvider(provider) {
86
+ const origin = provider.getOrigin();
87
+ if (this.dataProviderByOrigin.has(origin)) {
88
+ throw new Error(`Data provider with origin '${origin}' already added`);
89
+ }
90
+ this.dataProviderByOrigin.set(origin, provider);
91
+ return this;
92
+ }
93
+ /**
94
+ * Get all data providers
95
+ */
96
+ getDataProviders() {
97
+ return this.dataProviderByOrigin.values();
98
+ }
99
+ /**
100
+ * Get a data provider by origin
101
+ */
102
+ getDataProvider(origin) {
103
+ return this.dataProviderByOrigin.get(origin);
104
+ }
105
+ /**
106
+ * Update all data providers (async)
107
+ */
108
+ async update() {
109
+ for (const provider of this.dataProviderByOrigin.values()) {
110
+ await provider.update();
111
+ }
112
+ }
113
+ /**
114
+ * Update a specific data provider by origin
115
+ */
116
+ async updateOrigin(origin) {
117
+ const provider = this.dataProviderByOrigin.get(origin);
118
+ if (provider) {
119
+ await provider.update();
120
+ }
121
+ }
122
+ /**
123
+ * Get the root entry of the view
124
+ */
125
+ getRoot() {
126
+ if (!this.rootEntry) {
127
+ // Create root comparator
128
+ let rootChildComparator;
129
+ if (this.categoryColumns.length === 0) {
130
+ rootChildComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, false, this.docOrderDescending);
131
+ }
132
+ else {
133
+ rootChildComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, this.categoryColumns[0].sorting === types_1.ColumnSorting.DESCENDING, this.docOrderDescending);
134
+ }
135
+ const rootSortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [], types_1.ORIGIN_VIRTUALVIEW, "root");
136
+ const rootDocId = this.createNewCategoryId();
137
+ this.rootEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, null, types_1.ORIGIN_VIRTUALVIEW, rootDocId, rootSortKey, rootChildComparator);
138
+ this.rootEntry.setColumnValues({});
139
+ this.rootEntry.setSiblingIndex(0);
140
+ }
141
+ return this.rootEntry;
142
+ }
143
+ /**
144
+ * Generate a new category ID
145
+ */
146
+ createNewCategoryId() {
147
+ this.categoryIdCounter += 4;
148
+ return `cat_${this.categoryIdCounter}`;
149
+ }
150
+ /**
151
+ * Get the last index update time
152
+ */
153
+ getLastModifiedTime() {
154
+ return this.lastIndexUpdateTime;
155
+ }
156
+ /**
157
+ * Apply changes from a data provider
158
+ */
159
+ applyChanges(change) {
160
+ this.indexBuilt = true;
161
+ let indexChanged = false;
162
+ const origin = change.origin;
163
+ const categoryEntriesToCheck = [];
164
+ // Collect all doc IDs to remove (both explicit removals and additions that need re-adding)
165
+ const docIdsToRemove = new Set();
166
+ for (const docId of change.getRemovals()) {
167
+ docIdsToRemove.add(docId);
168
+ }
169
+ for (const docId of change.getAdditions().keys()) {
170
+ docIdsToRemove.add(docId);
171
+ }
172
+ // Process removals
173
+ for (const docId of docIdsToRemove) {
174
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
175
+ const entries = this.entriesByDocId.get(scopedKey);
176
+ if (entries) {
177
+ for (const entry of entries) {
178
+ // Don't remove our own entries (categories, root)
179
+ if (entry.isCategory() || entry.origin === types_1.ORIGIN_VIRTUALVIEW) {
180
+ continue;
181
+ }
182
+ const parentEntry = entry.getParent();
183
+ if (parentEntry && parentEntry.removeChildEntry(entry.getSortKey())) {
184
+ indexChanged = true;
185
+ // Update totals
186
+ if (this.viewHasTotalColumns) {
187
+ this.removeDocFromTotalsOfParents(entry);
188
+ }
189
+ // Update descendant counts
190
+ this.removeDocFromCountsOfParents(entry);
191
+ // Mark for sibling index recalculation
192
+ this.markEntryForSiblingIndexFlush(parentEntry);
193
+ // Check if parent category is now empty
194
+ if (parentEntry.isCategory()) {
195
+ categoryEntriesToCheck.push(parentEntry);
196
+ }
197
+ }
198
+ }
199
+ this.entriesByDocId.delete(scopedKey);
200
+ }
201
+ }
202
+ // Process additions
203
+ const root = this.getRoot();
204
+ for (const [docId, entryData] of change.getAdditions()) {
205
+ const columnValues = entryData.values;
206
+ // Compute value function columns
207
+ for (const column of this.valueFunctionColumns) {
208
+ if (column.valueFunction) {
209
+ // Note: For additions, we don't have the original MindooDoc
210
+ // The data provider should have already computed all values
211
+ // This is for consistency if values depend on each other
212
+ }
213
+ }
214
+ // Check if document should be accepted (can be overridden)
215
+ if (!this.isAccepted(origin, docId, columnValues)) {
216
+ continue;
217
+ }
218
+ // Add entry to the view
219
+ const addedEntries = this.addEntry(origin, docId, columnValues, root, this.categoryColumns);
220
+ if (addedEntries.length > 0) {
221
+ indexChanged = true;
222
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
223
+ this.entriesByDocId.set(scopedKey, addedEntries);
224
+ }
225
+ }
226
+ // Clean up empty category entries
227
+ for (const categoryEntry of categoryEntriesToCheck) {
228
+ if (categoryEntry.getChildCount() === 0) {
229
+ this.removeCategoryFromParent(categoryEntry);
230
+ indexChanged = true;
231
+ }
232
+ }
233
+ // Recalculate sibling indexes
234
+ this.processPendingSiblingIndexUpdates();
235
+ if (indexChanged) {
236
+ this.lastIndexUpdateTime = Date.now();
237
+ }
238
+ }
239
+ /**
240
+ * Override this method to filter entries
241
+ */
242
+ isAccepted(origin, docId, columnValues) {
243
+ return true;
244
+ }
245
+ /**
246
+ * Add an entry to the view hierarchy
247
+ */
248
+ addEntry(origin, docId, columnValues, targetParent, remainingCategoryColumns) {
249
+ const createdEntries = [];
250
+ // If no more category columns, add as document entry
251
+ if (remainingCategoryColumns.length === 0) {
252
+ const docSortValues = [];
253
+ for (const sortColumn of this.sortColumns) {
254
+ const value = columnValues[sortColumn.name];
255
+ // Use first value if array
256
+ docSortValues.push(this.getFirstListValue(value));
257
+ }
258
+ const sortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(false, docSortValues, origin, docId);
259
+ const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, false, this.docOrderDescending);
260
+ const newDocEntry = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, origin, docId, sortKey, childComparator);
261
+ newDocEntry.setColumnValues(columnValues);
262
+ if (targetParent.addChildEntry(newDocEntry)) {
263
+ // Update counts in parents
264
+ this.addDocToCountsOfParents(newDocEntry);
265
+ // Update totals in parents
266
+ if (this.viewHasTotalColumns) {
267
+ this.addDocToTotalsOfParents(newDocEntry);
268
+ }
269
+ // Mark for sibling index recalculation
270
+ this.markEntryForSiblingIndexFlush(targetParent);
271
+ }
272
+ createdEntries.push(newDocEntry);
273
+ return createdEntries;
274
+ }
275
+ // Process category column
276
+ const currCategoryColumn = remainingCategoryColumns[0];
277
+ const remainingColumns = remainingCategoryColumns.slice(1);
278
+ const itemName = currCategoryColumn.name;
279
+ const valueForColumn = columnValues[itemName];
280
+ // Handle multiple category values (e.g., [cat1, cat2])
281
+ let categoryValues;
282
+ if (valueForColumn === null ||
283
+ valueForColumn === undefined ||
284
+ valueForColumn === "" ||
285
+ (Array.isArray(valueForColumn) && valueForColumn.length === 0)) {
286
+ categoryValues = [null];
287
+ }
288
+ else if (Array.isArray(valueForColumn)) {
289
+ categoryValues = valueForColumn;
290
+ }
291
+ else {
292
+ categoryValues = [valueForColumn];
293
+ }
294
+ // Create entries for each category value
295
+ for (const categoryValue of categoryValues) {
296
+ // Handle backslash-separated categories (e.g., "2024\03")
297
+ if (typeof categoryValue === "string" && categoryValue.includes("\\")) {
298
+ const parts = categoryValue.split("\\");
299
+ let currentParent = targetParent;
300
+ for (let indentLevel = 0; indentLevel < parts.length; indentLevel++) {
301
+ const subCat = parts[indentLevel];
302
+ const isLastPart = indentLevel === parts.length - 1;
303
+ const subCatValue = subCat === "" ? null : subCat;
304
+ const categorySortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [subCatValue], types_1.ORIGIN_VIRTUALVIEW, "");
305
+ let existingCategory = currentParent.getChildEntry(categorySortKey);
306
+ if (!existingCategory) {
307
+ // Determine sort direction for children
308
+ let childCategoryDescending;
309
+ if (!isLastPart) {
310
+ childCategoryDescending = currCategoryColumn.sorting === types_1.ColumnSorting.DESCENDING;
311
+ }
312
+ else {
313
+ const nextCatColumn = remainingColumns.length > 0 ? remainingColumns[0] : null;
314
+ childCategoryDescending = nextCatColumn?.sorting === types_1.ColumnSorting.DESCENDING;
315
+ }
316
+ const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, childCategoryDescending, this.docOrderDescending);
317
+ const newCategoryId = this.createNewCategoryId();
318
+ existingCategory = new VirtualViewEntryData_1.VirtualViewEntryData(this, currentParent, types_1.ORIGIN_VIRTUALVIEW, newCategoryId, categorySortKey, childComparator);
319
+ const catColValues = {};
320
+ if (subCatValue !== null) {
321
+ catColValues[itemName] = subCatValue;
322
+ }
323
+ existingCategory.setIndentLevels(indentLevel);
324
+ existingCategory.setColumnValues(catColValues);
325
+ if (currentParent.addChildEntry(existingCategory)) {
326
+ // Update descendant counts in parents
327
+ let parent = currentParent;
328
+ while (parent !== null) {
329
+ parent.incrementDescendantCount(true);
330
+ parent = parent.getParent();
331
+ }
332
+ }
333
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(types_1.ORIGIN_VIRTUALVIEW, newCategoryId));
334
+ this.entriesByDocId.set(scopedKey, [existingCategory]);
335
+ this.markEntryForSiblingIndexFlush(currentParent);
336
+ }
337
+ currentParent = existingCategory;
338
+ }
339
+ // Continue with remaining categories under the last subcategory
340
+ const addedEntries = this.addEntry(origin, docId, columnValues, currentParent, remainingColumns);
341
+ createdEntries.push(...addedEntries);
342
+ }
343
+ else {
344
+ // Simple category value
345
+ const categorySortKey = ViewEntrySortKey_1.ViewEntrySortKey.createSortKey(true, [categoryValue], types_1.ORIGIN_VIRTUALVIEW, "");
346
+ let existingCategory = targetParent.getChildEntry(categorySortKey);
347
+ if (!existingCategory) {
348
+ const nextCatColumn = remainingColumns.length > 0 ? remainingColumns[0] : null;
349
+ const childCategoryDescending = nextCatColumn?.sorting === types_1.ColumnSorting.DESCENDING;
350
+ const childComparator = new ViewEntrySortKeyComparator_1.ViewEntrySortKeyComparator(this.categorizationStyle, childCategoryDescending, this.docOrderDescending);
351
+ const newCategoryId = this.createNewCategoryId();
352
+ existingCategory = new VirtualViewEntryData_1.VirtualViewEntryData(this, targetParent, types_1.ORIGIN_VIRTUALVIEW, newCategoryId, categorySortKey, childComparator);
353
+ const catColValues = {};
354
+ if (categoryValue !== null) {
355
+ catColValues[itemName] = categoryValue;
356
+ }
357
+ existingCategory.setColumnValues(catColValues);
358
+ if (targetParent.addChildEntry(existingCategory)) {
359
+ // Update descendant counts in parents
360
+ let parent = targetParent;
361
+ while (parent !== null) {
362
+ parent.incrementDescendantCount(true);
363
+ parent = parent.getParent();
364
+ }
365
+ }
366
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(types_1.ORIGIN_VIRTUALVIEW, newCategoryId));
367
+ this.entriesByDocId.set(scopedKey, [existingCategory]);
368
+ this.markEntryForSiblingIndexFlush(targetParent);
369
+ }
370
+ // Continue with remaining categories
371
+ const addedEntries = this.addEntry(origin, docId, columnValues, existingCategory, remainingColumns);
372
+ createdEntries.push(...addedEntries);
373
+ }
374
+ }
375
+ return createdEntries;
376
+ }
377
+ getFirstListValue(value) {
378
+ if (Array.isArray(value)) {
379
+ return value.length > 0 ? value[0] : null;
380
+ }
381
+ return value;
382
+ }
383
+ addDocToCountsOfParents(docEntry) {
384
+ let parent = docEntry.getParent();
385
+ while (parent !== null) {
386
+ parent.incrementDescendantCount(false);
387
+ parent = parent.getParent();
388
+ }
389
+ }
390
+ removeDocFromCountsOfParents(docEntry) {
391
+ let parent = docEntry.getParent();
392
+ while (parent !== null) {
393
+ parent.decrementDescendantCount(false);
394
+ parent = parent.getParent();
395
+ }
396
+ }
397
+ addDocToTotalsOfParents(docEntry) {
398
+ const docTotalValues = new Map();
399
+ for (const totalColumn of this.totalColumns) {
400
+ const itemName = totalColumn.name;
401
+ const docVal = docEntry.getAsNumber(itemName, null);
402
+ if (docVal !== null) {
403
+ docTotalValues.set(itemName, docVal);
404
+ }
405
+ }
406
+ let parent = docEntry.getParent();
407
+ while (parent !== null) {
408
+ for (const [itemName, value] of docTotalValues) {
409
+ parent.addTotalValue(itemName, value);
410
+ }
411
+ this.computeTotalColumnValues(parent);
412
+ parent = parent.getParent();
413
+ }
414
+ }
415
+ removeDocFromTotalsOfParents(docEntry) {
416
+ const docTotalValues = new Map();
417
+ for (const totalColumn of this.totalColumns) {
418
+ const itemName = totalColumn.name;
419
+ const docVal = docEntry.getAsNumber(itemName, null);
420
+ if (docVal !== null) {
421
+ docTotalValues.set(itemName, docVal);
422
+ }
423
+ }
424
+ let parent = docEntry.getParent();
425
+ while (parent !== null) {
426
+ for (const [itemName, value] of docTotalValues) {
427
+ parent.addTotalValue(itemName, -value);
428
+ }
429
+ this.computeTotalColumnValues(parent);
430
+ parent = parent.getParent();
431
+ }
432
+ }
433
+ computeTotalColumnValues(catEntry) {
434
+ for (const totalColumn of this.totalColumns) {
435
+ const itemName = totalColumn.name;
436
+ const totalValue = catEntry.getTotalValue(itemName);
437
+ if (totalValue === null) {
438
+ // Remove from column values if no total
439
+ catEntry.setColumnValue(itemName, undefined);
440
+ }
441
+ else {
442
+ if (totalColumn.totalMode === types_1.TotalMode.SUM) {
443
+ catEntry.setColumnValue(itemName, totalValue);
444
+ }
445
+ else if (totalColumn.totalMode === types_1.TotalMode.AVERAGE) {
446
+ const docCount = catEntry.getDescendantDocumentCount();
447
+ if (docCount === 0) {
448
+ catEntry.setColumnValue(itemName, undefined);
449
+ }
450
+ else {
451
+ catEntry.setColumnValue(itemName, totalValue / docCount);
452
+ }
453
+ }
454
+ }
455
+ }
456
+ }
457
+ removeCategoryFromParent(entry) {
458
+ const parent = entry.getParent();
459
+ if (parent) {
460
+ if (parent.removeChildEntry(entry.getSortKey())) {
461
+ this.markEntryForSiblingIndexFlush(parent);
462
+ // Remove from lookup
463
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(entry.origin, entry.docId));
464
+ this.entriesByDocId.delete(scopedKey);
465
+ // Recursively check if parent is now empty
466
+ if (parent.isCategory() && parent.getChildCount() === 0) {
467
+ this.removeCategoryFromParent(parent);
468
+ }
469
+ }
470
+ }
471
+ }
472
+ markEntryForSiblingIndexFlush(entry) {
473
+ const key = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(entry.origin, entry.docId));
474
+ let entries = this.pendingSiblingIndexFlush.get(key);
475
+ if (!entries) {
476
+ entries = [];
477
+ this.pendingSiblingIndexFlush.set(key, entries);
478
+ }
479
+ if (!entries.includes(entry)) {
480
+ entries.push(entry);
481
+ }
482
+ }
483
+ processPendingSiblingIndexUpdates() {
484
+ for (const entries of this.pendingSiblingIndexFlush.values()) {
485
+ for (const entry of entries) {
486
+ const children = entry.getChildEntries();
487
+ let pos = 1;
488
+ for (const child of children) {
489
+ child.setSiblingIndex(pos++);
490
+ }
491
+ }
492
+ }
493
+ this.pendingSiblingIndexFlush.clear();
494
+ }
495
+ /**
496
+ * Get all entries for a document ID
497
+ */
498
+ getEntries(origin, docId) {
499
+ const scopedKey = (0, types_1.scopedDocIdKey)((0, types_1.createScopedDocId)(origin, docId));
500
+ return this.entriesByDocId.get(scopedKey) ?? [];
501
+ }
502
+ }
503
+ exports.VirtualView = VirtualView;
504
+ //# sourceMappingURL=VirtualView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualView.js","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualView.ts"],"names":[],"mappings":";;;AACA,iEAA8D;AAE9D,yDAAsD;AACtD,6EAA0E;AAE1E,mCAOiB;AAEjB;;;GAGG;AACH,MAAa,WAAW;IA8CtB,YAAY,OAA4B;QAxBxC,+DAA+D;QACvD,wBAAmB,GAAwB,2BAAmB,CAAC,sBAAsB,CAAC;QAE9F,uCAAuC;QAC/B,eAAU,GAAY,KAAK,CAAC;QAEpC,kCAAkC;QAC1B,cAAS,GAAgC,IAAI,CAAC;QAEtD,0CAA0C;QAClC,sBAAiB,GAAW,CAAC,CAAC;QAEtC,uDAAuD;QAC/C,mBAAc,GAAwC,IAAI,GAAG,EAAE,CAAC;QAExE,qBAAqB;QACb,yBAAoB,GAA0C,IAAI,GAAG,EAAE,CAAC;QAEhF,kDAAkD;QAC1C,6BAAwB,GAAwC,IAAI,GAAG,EAAE,CAAC;QAElF,kCAAkC;QAC1B,wBAAmB,GAAkB,IAAI,CAAC;QAGhD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAE/B,qBAAqB;QACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,KAAK,qBAAa,CAAC,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,KAAK,iBAAS,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAC5C,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,qBAAa,CAAC,UAAU,CAChD,CAAC;QAEF,mDAAmD;QACnD,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,KAA0B;QAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAkC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,iBAAiB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1D,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,yBAAyB;YACzB,IAAI,mBAA+C,CAAC;YACpD,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,mBAAmB,GAAG,IAAI,uDAA0B,CAClD,IAAI,CAAC,mBAAmB,EACxB,KAAK,EACL,IAAI,CAAC,kBAAkB,CACxB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,mBAAmB,GAAG,IAAI,uDAA0B,CAClD,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,qBAAa,CAAC,UAAU,EAC5D,IAAI,CAAC,kBAAkB,CACxB,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,mCAAgB,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,0BAAkB,EAAE,MAAM,CAAC,CAAC;YACzF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE7C,IAAI,CAAC,SAAS,GAAG,IAAI,2CAAoB,CACvC,IAAI,EACJ,IAAI,EACJ,0BAAkB,EAClB,SAAS,EACT,WAAW,EACX,mBAAmB,CACpB,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC5B,OAAO,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA6B;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,sBAAsB,GAA2B,EAAE,CAAC;QAE1D,2FAA2F;QAC3F,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACjD,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEnD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,kDAAkD;oBAClD,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,0BAAkB,EAAE,CAAC;wBAC9D,SAAS;oBACX,CAAC;oBAED,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;oBACtC,IAAI,WAAW,IAAI,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;wBACpE,YAAY,GAAG,IAAI,CAAC;wBAEpB,gBAAgB;wBAChB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BAC7B,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;wBAC3C,CAAC;wBAED,2BAA2B;wBAC3B,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;wBAEzC,uCAAuC;wBACvC,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;wBAEhD,wCAAwC;wBACxC,IAAI,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;4BAC7B,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;YAEtC,iCAAiC;YACjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC/C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBACzB,4DAA4D;oBAC5D,4DAA4D;oBAC5D,yDAAyD;gBAC3D,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,wBAAwB;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5F,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,aAAa,IAAI,sBAAsB,EAAE,CAAC;YACnD,IAAI,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;gBAC7C,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAEzC,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACO,UAAU,CAClB,MAAc,EACd,KAAa,EACb,YAAqC;QAErC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,QAAQ,CACd,MAAc,EACd,KAAa,EACb,YAAqC,EACrC,YAAkC,EAClC,wBAA6C;QAE7C,MAAM,cAAc,GAA2B,EAAE,CAAC;QAElD,qDAAqD;QACrD,IAAI,wBAAwB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAc,EAAE,CAAC;YACpC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5C,2BAA2B;gBAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,OAAO,GAAG,mCAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACpF,MAAM,eAAe,GAAG,IAAI,uDAA0B,CACpD,IAAI,CAAC,mBAAmB,EACxB,KAAK,EACL,IAAI,CAAC,kBAAkB,CACxB,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,2CAAoB,CAC1C,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,OAAO,EACP,eAAe,CAChB,CAAC;YACF,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAE1C,IAAI,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,2BAA2B;gBAC3B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAE1C,2BAA2B;gBAC3B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAC5C,CAAC;gBAED,uCAAuC;gBACvC,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;YACnD,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,0BAA0B;QAC1B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC;QACzC,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE9C,uDAAuD;QACvD,IAAI,cAAyB,CAAC;QAC9B,IACE,cAAc,KAAK,IAAI;YACvB,cAAc,KAAK,SAAS;YAC5B,cAAc,KAAK,EAAE;YACrB,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9D,CAAC;YACD,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,cAAc,GAAG,cAAc,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QAED,yCAAyC;QACzC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,0DAA0D;YAC1D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,aAAa,GAAG,YAAY,CAAC;gBAEjC,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;oBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;oBAClC,MAAM,UAAU,GAAG,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBACpD,MAAM,WAAW,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;oBAElD,MAAM,eAAe,GAAG,mCAAgB,CAAC,aAAa,CACpD,IAAI,EACJ,CAAC,WAAW,CAAC,EACb,0BAAkB,EAClB,EAAE,CACH,CAAC;oBAEF,IAAI,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;oBACpE,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACtB,wCAAwC;wBACxC,IAAI,uBAAgC,CAAC;wBACrC,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,uBAAuB,GAAG,kBAAkB,CAAC,OAAO,KAAK,qBAAa,CAAC,UAAU,CAAC;wBACpF,CAAC;6BAAM,CAAC;4BACN,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC/E,uBAAuB,GAAG,aAAa,EAAE,OAAO,KAAK,qBAAa,CAAC,UAAU,CAAC;wBAChF,CAAC;wBAED,MAAM,eAAe,GAAG,IAAI,uDAA0B,CACpD,IAAI,CAAC,mBAAmB,EACxB,uBAAuB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;wBAEF,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBACjD,gBAAgB,GAAG,IAAI,2CAAoB,CACzC,IAAI,EACJ,aAAa,EACb,0BAAkB,EAClB,aAAa,EACb,eAAe,EACf,eAAe,CAChB,CAAC;wBAEF,MAAM,YAAY,GAA4B,EAAE,CAAC;wBACjD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;4BACzB,YAAY,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;wBACvC,CAAC;wBACD,gBAAgB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;wBAC9C,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;wBAE/C,IAAI,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BAClD,sCAAsC;4BACtC,IAAI,MAAM,GAAgC,aAAa,CAAC;4BACxD,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;gCACvB,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gCACtC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;4BAC9B,CAAC;wBACH,CAAC;wBAED,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,0BAAkB,EAAE,aAAa,CAAC,CAAC,CAAC;wBACvF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;wBACvD,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;oBACpD,CAAC;oBAED,aAAa,GAAG,gBAAgB,CAAC;gBACnC,CAAC;gBAED,gEAAgE;gBAChE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;gBACjG,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,wBAAwB;gBACxB,MAAM,eAAe,GAAG,mCAAgB,CAAC,aAAa,CACpD,IAAI,EACJ,CAAC,aAAa,CAAC,EACf,0BAAkB,EAClB,EAAE,CACH,CAAC;gBAEF,IAAI,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/E,MAAM,uBAAuB,GAAG,aAAa,EAAE,OAAO,KAAK,qBAAa,CAAC,UAAU,CAAC;oBAEpF,MAAM,eAAe,GAAG,IAAI,uDAA0B,CACpD,IAAI,CAAC,mBAAmB,EACxB,uBAAuB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;oBAEF,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACjD,gBAAgB,GAAG,IAAI,2CAAoB,CACzC,IAAI,EACJ,YAAY,EACZ,0BAAkB,EAClB,aAAa,EACb,eAAe,EACf,eAAe,CAChB,CAAC;oBAEF,MAAM,YAAY,GAA4B,EAAE,CAAC;oBACjD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;wBAC3B,YAAY,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;oBACzC,CAAC;oBACD,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;oBAE/C,IAAI,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBACjD,sCAAsC;wBACtC,IAAI,MAAM,GAAgC,YAAY,CAAC;wBACvD,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;4BACvB,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;4BACtC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;wBAC9B,CAAC;oBACH,CAAC;oBAED,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,0BAAkB,EAAE,aAAa,CAAC,CAAC,CAAC;oBACvF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC;gBAED,qCAAqC;gBACrC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;gBACpG,cAAc,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,iBAAiB,CAAC,KAAc;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,uBAAuB,CAAC,QAA8B;QAC5D,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,4BAA4B,CAAC,QAA8B;QACjE,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,QAA8B;QAC5D,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QACtD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,4BAA4B,CAAC,QAA8B;QACjE,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QACtD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/C,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,QAA8B;QAC7D,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;YAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEpD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,wCAAwC;gBACxC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,IAAI,WAAW,CAAC,SAAS,KAAK,iBAAS,CAAC,GAAG,EAAE,CAAC;oBAC5C,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,WAAW,CAAC,SAAS,KAAK,iBAAS,CAAC,OAAO,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,0BAA0B,EAAE,CAAC;oBACvD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;wBACnB,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,KAA2B;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;gBAE3C,qBAAqB;gBACrB,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAEtC,2CAA2C;gBAC3C,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,6BAA6B,CAAC,KAA2B;QAC/D,MAAM,GAAG,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,iCAAiC;QACvC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;gBACzC,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;oBAC7B,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc,EAAE,KAAa;QACtC,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAA,yBAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;CACF;AA1pBD,kCA0pBC"}
@@ -0,0 +1,59 @@
1
+ import { ColumnSorting, TotalMode, ColumnValueFunction } from "./types";
2
+ /**
3
+ * Options for creating a VirtualViewColumn
4
+ */
5
+ export interface VirtualViewColumnOptions {
6
+ /** Programmatic name / item name for the column */
7
+ name: string;
8
+ /** Display title for the column */
9
+ title?: string;
10
+ /** Whether this column creates categories */
11
+ isCategory?: boolean;
12
+ /** Whether this column is hidden from display */
13
+ isHidden?: boolean;
14
+ /** Sort direction for this column */
15
+ sorting?: ColumnSorting;
16
+ /** Aggregation mode for category totals */
17
+ totalMode?: TotalMode;
18
+ /** Function to compute column value from document data */
19
+ valueFunction?: ColumnValueFunction;
20
+ }
21
+ /**
22
+ * Defines a column in a VirtualView.
23
+ * Columns can be used for categorization, sorting, display, and totals.
24
+ */
25
+ export declare class VirtualViewColumn {
26
+ /** Programmatic name / item name for the column */
27
+ readonly name: string;
28
+ /** Display title for the column */
29
+ readonly title: string;
30
+ /** Whether this column creates categories */
31
+ readonly isCategory: boolean;
32
+ /** Whether this column is hidden from display */
33
+ readonly isHidden: boolean;
34
+ /** Sort direction for this column */
35
+ readonly sorting: ColumnSorting;
36
+ /** Aggregation mode for category totals */
37
+ readonly totalMode: TotalMode;
38
+ /** Function to compute column value from document data */
39
+ readonly valueFunction: ColumnValueFunction | undefined;
40
+ constructor(options: VirtualViewColumnOptions);
41
+ /**
42
+ * Create a category column
43
+ */
44
+ static category(name: string, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "isCategory">>): VirtualViewColumn;
45
+ /**
46
+ * Create a sorted column (non-category)
47
+ */
48
+ static sorted(name: string, sorting?: ColumnSorting, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "sorting">>): VirtualViewColumn;
49
+ /**
50
+ * Create a display-only column (not sorted, not category)
51
+ */
52
+ static display(name: string, options?: Partial<Omit<VirtualViewColumnOptions, "name">>): VirtualViewColumn;
53
+ /**
54
+ * Create a total column for category aggregation
55
+ */
56
+ static total(name: string, totalMode: TotalMode, options?: Partial<Omit<VirtualViewColumnOptions, "name" | "totalMode">>): VirtualViewColumn;
57
+ toString(): string;
58
+ }
59
+ //# sourceMappingURL=VirtualViewColumn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualViewColumn.d.ts","sourceRoot":"","sources":["../../../../src/core/indexing/virtualviews/VirtualViewColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IAEb,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAE5C,OAAO,EAAE,wBAAwB;IAe7C;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,GACvE,iBAAiB;IASpB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAuC,EAChD,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACpE,iBAAiB;IAQpB;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,GACxD,iBAAiB;IAQpB;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,GACtE,iBAAiB;IASpB,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VirtualViewColumn = void 0;
4
+ const types_1 = require("./types");
5
+ /**
6
+ * Defines a column in a VirtualView.
7
+ * Columns can be used for categorization, sorting, display, and totals.
8
+ */
9
+ class VirtualViewColumn {
10
+ constructor(options) {
11
+ this.name = options.name;
12
+ this.title = options.title ?? options.name;
13
+ this.isCategory = options.isCategory ?? false;
14
+ this.isHidden = options.isHidden ?? false;
15
+ this.sorting = options.sorting ?? types_1.ColumnSorting.NONE;
16
+ this.totalMode = options.totalMode ?? types_1.TotalMode.NONE;
17
+ this.valueFunction = options.valueFunction;
18
+ // Validation: Category columns must be sorted
19
+ if (this.isCategory && this.sorting === types_1.ColumnSorting.NONE) {
20
+ throw new Error(`Category column '${this.name}' must have a sorting direction`);
21
+ }
22
+ }
23
+ /**
24
+ * Create a category column
25
+ */
26
+ static category(name, options) {
27
+ return new VirtualViewColumn({
28
+ name,
29
+ isCategory: true,
30
+ sorting: types_1.ColumnSorting.ASCENDING, // Default for categories
31
+ ...options,
32
+ });
33
+ }
34
+ /**
35
+ * Create a sorted column (non-category)
36
+ */
37
+ static sorted(name, sorting = types_1.ColumnSorting.ASCENDING, options) {
38
+ return new VirtualViewColumn({
39
+ name,
40
+ sorting,
41
+ ...options,
42
+ });
43
+ }
44
+ /**
45
+ * Create a display-only column (not sorted, not category)
46
+ */
47
+ static display(name, options) {
48
+ return new VirtualViewColumn({
49
+ name,
50
+ sorting: types_1.ColumnSorting.NONE,
51
+ ...options,
52
+ });
53
+ }
54
+ /**
55
+ * Create a total column for category aggregation
56
+ */
57
+ static total(name, totalMode, options) {
58
+ return new VirtualViewColumn({
59
+ name,
60
+ totalMode,
61
+ sorting: types_1.ColumnSorting.NONE,
62
+ ...options,
63
+ });
64
+ }
65
+ toString() {
66
+ return `VirtualViewColumn [name=${this.name}, title=${this.title}, isCategory=${this.isCategory}, sorting=${this.sorting}, totalMode=${this.totalMode}]`;
67
+ }
68
+ }
69
+ exports.VirtualViewColumn = VirtualViewColumn;
70
+ //# sourceMappingURL=VirtualViewColumn.js.map