@aneuhold/be-ts-db-lib 4.0.2 → 4.1.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.
- package/CHANGELOG.md +22 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/index.ts +2 -0
- package/lib/repositories/BaseRepository.d.ts +33 -16
- package/lib/repositories/BaseRepository.d.ts.map +1 -1
- package/lib/repositories/BaseRepository.js +51 -13
- package/lib/repositories/BaseRepository.js.map +1 -1
- package/lib/repositories/BaseRepository.ts +88 -38
- package/lib/repositories/dashboard/DashboardBaseRepository.d.ts +12 -1
- package/lib/repositories/dashboard/DashboardBaseRepository.d.ts.map +1 -1
- package/lib/repositories/dashboard/DashboardBaseRepository.js +30 -1
- package/lib/repositories/dashboard/DashboardBaseRepository.js.map +1 -1
- package/lib/repositories/dashboard/DashboardBaseRepository.ts +52 -2
- package/lib/repositories/dashboard/DashboardBaseWithUserIdRepository.d.ts +25 -0
- package/lib/repositories/dashboard/DashboardBaseWithUserIdRepository.d.ts.map +1 -0
- package/lib/repositories/dashboard/DashboardBaseWithUserIdRepository.js +70 -0
- package/lib/repositories/dashboard/DashboardBaseWithUserIdRepository.js.map +1 -0
- package/lib/repositories/dashboard/DashboardBaseWithUserIdRepository.ts +101 -0
- package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.d.ts +2 -9
- package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.d.ts.map +1 -1
- package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.js +9 -19
- package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.js.map +1 -1
- package/lib/repositories/dashboard/DashboardNonogramKatanaItemRepository.ts +9 -25
- package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.d.ts +2 -9
- package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.d.ts.map +1 -1
- package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js +9 -19
- package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js.map +1 -1
- package/lib/repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.ts +9 -25
- package/lib/repositories/dashboard/DashboardTaskRepository.d.ts +12 -5
- package/lib/repositories/dashboard/DashboardTaskRepository.d.ts.map +1 -1
- package/lib/repositories/dashboard/DashboardTaskRepository.js +77 -8
- package/lib/repositories/dashboard/DashboardTaskRepository.js.map +1 -1
- package/lib/repositories/dashboard/DashboardTaskRepository.ts +104 -10
- package/lib/repositories/dashboard/DashboardUserConfigRepository.d.ts +11 -6
- package/lib/repositories/dashboard/DashboardUserConfigRepository.d.ts.map +1 -1
- package/lib/repositories/dashboard/DashboardUserConfigRepository.js +24 -16
- package/lib/repositories/dashboard/DashboardUserConfigRepository.js.map +1 -1
- package/lib/repositories/dashboard/DashboardUserConfigRepository.ts +39 -16
- package/lib/services/RepoSubscriptionService.d.ts +7 -6
- package/lib/services/RepoSubscriptionService.d.ts.map +1 -1
- package/lib/services/RepoSubscriptionService.js.map +1 -1
- package/lib/services/RepoSubscriptionService.ts +13 -6
- package/lib/util/DbOperationMetaData.d.ts +47 -0
- package/lib/util/DbOperationMetaData.d.ts.map +1 -0
- package/lib/util/DbOperationMetaData.js +58 -0
- package/lib/util/DbOperationMetaData.js.map +1 -0
- package/lib/util/DbOperationMetaData.ts +65 -0
- package/package.json +10 -9
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 🔖 [4.1.1] (2025-12-14)
|
|
9
|
+
|
|
10
|
+
### 🏗️ Changed
|
|
11
|
+
- Updated dependencies: now requires `@aneuhold/be-ts-lib@^3.0.8`, `@aneuhold/core-ts-db-lib@^4.0.4`, `@aneuhold/core-ts-lib@^2.3.16`, and `@aneuhold/local-npm-registry@^0.2.23`.
|
|
12
|
+
|
|
13
|
+
## 🔖 [4.1.0] (2025-12-14)
|
|
14
|
+
|
|
15
|
+
### ✅ Added
|
|
16
|
+
- Added doc caching and retrieval strategy to repositories
|
|
17
|
+
- Created base user ID repository for dashboard
|
|
18
|
+
|
|
19
|
+
### 🏗️ Changed
|
|
20
|
+
- Updated test scripts to include coverage
|
|
21
|
+
- Updated dependencies for compatibility
|
|
22
|
+
|
|
23
|
+
### 🩹 Fixed
|
|
24
|
+
- Fixed import paths in dashboard repositories
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
8
28
|
## 🔖 [4.0.2] (2025-12-13)
|
|
9
29
|
|
|
10
30
|
### 🏗️ Changed
|
|
@@ -163,7 +183,8 @@ Updated dependencies: now requires `@aneuhold/core-ts-db-lib@^3.0.0`, `@aneuhold
|
|
|
163
183
|
- Updated workflow permissions to allow repository write access
|
|
164
184
|
|
|
165
185
|
<!-- Link References -->
|
|
166
|
-
|
|
186
|
+
[4.1.1]: https://github.com/aneuhold/ts-libs/compare/be-ts-db-lib-v4.1.0...be-ts-db-lib-v4.1.1
|
|
187
|
+
[4.1.0]: https://github.com/aneuhold/ts-libs/compare/be-ts-db-lib-v4.0.2...be-ts-db-lib-v4.1.0
|
|
167
188
|
[4.0.2]: https://github.com/aneuhold/ts-libs/compare/be-ts-db-lib-v4.0.1...be-ts-db-lib-v4.0.2
|
|
168
189
|
[4.0.1]: https://github.com/aneuhold/ts-libs/compare/be-ts-db-lib-v4.0.0...be-ts-db-lib-v4.0.1
|
|
169
190
|
[4.0.0]: https://github.com/aneuhold/ts-libs/compare/be-ts-db-lib-v3.0.4...be-ts-db-lib-v4.0.0
|
package/lib/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ import DashboardNonogramKatanaItemRepository from './repositories/dashboard/Dash
|
|
|
4
4
|
import DashboardNonogramKatanaUpgradeRepository from './repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js';
|
|
5
5
|
import DashboardTaskRepository from './repositories/dashboard/DashboardTaskRepository.js';
|
|
6
6
|
import DashboardUserConfigRepository from './repositories/dashboard/DashboardUserConfigRepository.js';
|
|
7
|
+
import DbOperationMetaData from './util/DbOperationMetaData.js';
|
|
7
8
|
import DocumentDb from './util/DocumentDb.js';
|
|
8
|
-
export { ApiKeyRepository, DashboardNonogramKatanaItemRepository, DashboardNonogramKatanaUpgradeRepository, DashboardTaskRepository, DashboardUserConfigRepository, DocumentDb, UserRepository };
|
|
9
|
+
export { ApiKeyRepository, DashboardNonogramKatanaItemRepository, DashboardNonogramKatanaUpgradeRepository, DashboardTaskRepository, DashboardUserConfigRepository, DbOperationMetaData, DocumentDb, UserRepository };
|
|
9
10
|
export type {};
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,qCAAqC,MAAM,mEAAmE,CAAC;AACtH,OAAO,wCAAwC,MAAM,sEAAsE,CAAC;AAC5H,OAAO,uBAAuB,MAAM,qDAAqD,CAAC;AAC1F,OAAO,6BAA6B,MAAM,2DAA2D,CAAC;AACtG,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,gBAAgB,EAChB,qCAAqC,EACrC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,UAAU,EACV,cAAc,EACf,CAAC;AAGF,YAAY,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,qCAAqC,MAAM,mEAAmE,CAAC;AACtH,OAAO,wCAAwC,MAAM,sEAAsE,CAAC;AAC5H,OAAO,uBAAuB,MAAM,qDAAqD,CAAC;AAC1F,OAAO,6BAA6B,MAAM,2DAA2D,CAAC;AACtG,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAChE,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,gBAAgB,EAChB,qCAAqC,EACrC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,EACnB,UAAU,EACV,cAAc,EACf,CAAC;AAGF,YAAY,EAAE,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -4,7 +4,8 @@ import DashboardNonogramKatanaItemRepository from './repositories/dashboard/Dash
|
|
|
4
4
|
import DashboardNonogramKatanaUpgradeRepository from './repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js';
|
|
5
5
|
import DashboardTaskRepository from './repositories/dashboard/DashboardTaskRepository.js';
|
|
6
6
|
import DashboardUserConfigRepository from './repositories/dashboard/DashboardUserConfigRepository.js';
|
|
7
|
+
import DbOperationMetaData from './util/DbOperationMetaData.js';
|
|
7
8
|
import DocumentDb from './util/DocumentDb.js';
|
|
8
9
|
// Export all the functions and classes from this library
|
|
9
|
-
export { ApiKeyRepository, DashboardNonogramKatanaItemRepository, DashboardNonogramKatanaUpgradeRepository, DashboardTaskRepository, DashboardUserConfigRepository, DocumentDb, UserRepository };
|
|
10
|
+
export { ApiKeyRepository, DashboardNonogramKatanaItemRepository, DashboardNonogramKatanaUpgradeRepository, DashboardTaskRepository, DashboardUserConfigRepository, DbOperationMetaData, DocumentDb, UserRepository };
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,qCAAqC,MAAM,mEAAmE,CAAC;AACtH,OAAO,wCAAwC,MAAM,sEAAsE,CAAC;AAC5H,OAAO,uBAAuB,MAAM,qDAAqD,CAAC;AAC1F,OAAO,6BAA6B,MAAM,2DAA2D,CAAC;AACtG,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,yDAAyD;AACzD,OAAO,EACL,gBAAgB,EAChB,qCAAqC,EACrC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,UAAU,EACV,cAAc,EACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,qCAAqC,MAAM,mEAAmE,CAAC;AACtH,OAAO,wCAAwC,MAAM,sEAAsE,CAAC;AAC5H,OAAO,uBAAuB,MAAM,qDAAqD,CAAC;AAC1F,OAAO,6BAA6B,MAAM,2DAA2D,CAAC;AACtG,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAChE,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,yDAAyD;AACzD,OAAO,EACL,gBAAgB,EAChB,qCAAqC,EACrC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,EACnB,UAAU,EACV,cAAc,EACf,CAAC"}
|
package/lib/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ import DashboardNonogramKatanaItemRepository from './repositories/dashboard/Dash
|
|
|
4
4
|
import DashboardNonogramKatanaUpgradeRepository from './repositories/dashboard/DashboardNonogramKatanaUpgradeRepository.js';
|
|
5
5
|
import DashboardTaskRepository from './repositories/dashboard/DashboardTaskRepository.js';
|
|
6
6
|
import DashboardUserConfigRepository from './repositories/dashboard/DashboardUserConfigRepository.js';
|
|
7
|
+
import DbOperationMetaData from './util/DbOperationMetaData.js';
|
|
7
8
|
import DocumentDb from './util/DocumentDb.js';
|
|
8
9
|
|
|
9
10
|
// Export all the functions and classes from this library
|
|
@@ -13,6 +14,7 @@ export {
|
|
|
13
14
|
DashboardNonogramKatanaUpgradeRepository,
|
|
14
15
|
DashboardTaskRepository,
|
|
15
16
|
DashboardUserConfigRepository,
|
|
17
|
+
DbOperationMetaData,
|
|
16
18
|
DocumentDb,
|
|
17
19
|
UserRepository
|
|
18
20
|
};
|
|
@@ -2,6 +2,7 @@ import type { BaseDocument } from '@aneuhold/core-ts-db-lib';
|
|
|
2
2
|
import type { UUID } from 'crypto';
|
|
3
3
|
import type { BulkWriteResult, Collection, DeleteResult, Filter, UpdateResult } from 'mongodb';
|
|
4
4
|
import type { RepoListeners, RepoSubscribers } from '../services/RepoSubscriptionService.js';
|
|
5
|
+
import type DbOperationMetaData from '../util/DbOperationMetaData.js';
|
|
5
6
|
import type IValidator from '../validators/BaseValidator.js';
|
|
6
7
|
/**
|
|
7
8
|
* Base repository class for handling common database operations.
|
|
@@ -9,15 +10,15 @@ import type IValidator from '../validators/BaseValidator.js';
|
|
|
9
10
|
* Implementation note: I have tried to do the types correctly here, but kept struggling with
|
|
10
11
|
* MongoDB's types around Filter<T> and _id fields.
|
|
11
12
|
*
|
|
12
|
-
* @template
|
|
13
|
+
* @template TBaseType - The type of the documents in the collection.
|
|
13
14
|
*/
|
|
14
|
-
export default abstract class BaseRepository<
|
|
15
|
+
export default abstract class BaseRepository<TBaseType extends BaseDocument> {
|
|
15
16
|
private validator;
|
|
16
17
|
private defaultFilter?;
|
|
17
18
|
private defaultUpdateCleaner?;
|
|
18
19
|
protected collectionName: string;
|
|
19
20
|
private collection?;
|
|
20
|
-
protected subscribers: RepoSubscribers<
|
|
21
|
+
protected subscribers: RepoSubscribers<TBaseType>;
|
|
21
22
|
/**
|
|
22
23
|
* Constructs a new base repository.
|
|
23
24
|
*
|
|
@@ -26,13 +27,13 @@ export default abstract class BaseRepository<TBasetype extends BaseDocument> {
|
|
|
26
27
|
* @param defaultFilter - The default filter to apply to queries.
|
|
27
28
|
* @param defaultUpdateCleaner - A function to clean update objects before sending to the DB.
|
|
28
29
|
*/
|
|
29
|
-
constructor(collectionName: string, validator: IValidator<
|
|
30
|
+
constructor(collectionName: string, validator: IValidator<TBaseType>, defaultFilter?: Partial<TBaseType> | undefined, defaultUpdateCleaner?: ((doc: Partial<TBaseType>) => Partial<TBaseType>) | undefined);
|
|
30
31
|
/**
|
|
31
32
|
* Gets the collection, initializing it if necessary.
|
|
32
33
|
*
|
|
33
34
|
* @returns The collection.
|
|
34
35
|
*/
|
|
35
|
-
protected getCollection(): Promise<Collection<
|
|
36
|
+
protected getCollection(): Promise<Collection<TBaseType>>;
|
|
36
37
|
protected abstract setupSubscribers(): void;
|
|
37
38
|
/**
|
|
38
39
|
* Registers a set of functions that will be called when a change happens
|
|
@@ -40,34 +41,36 @@ export default abstract class BaseRepository<TBasetype extends BaseDocument> {
|
|
|
40
41
|
*
|
|
41
42
|
* @param listeners - The listeners to register.
|
|
42
43
|
*/
|
|
43
|
-
subscribeToChanges(listeners: RepoListeners<
|
|
44
|
+
subscribeToChanges(listeners: RepoListeners<TBaseType>): void;
|
|
44
45
|
/**
|
|
45
46
|
* Inserts a new document into the collection.
|
|
46
47
|
*
|
|
47
48
|
* @param newDoc - The new document to insert.
|
|
49
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
48
50
|
* @returns The inserted document or null if the insertion failed.
|
|
49
51
|
*/
|
|
50
|
-
insertNew(newDoc:
|
|
52
|
+
insertNew(newDoc: TBaseType, meta?: DbOperationMetaData): Promise<TBaseType | null>;
|
|
51
53
|
/**
|
|
52
54
|
* Inserts multiple new documents into the collection.
|
|
53
55
|
*
|
|
54
56
|
* @param newDocs - The new documents to insert.
|
|
57
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
55
58
|
* @returns The inserted documents or an empty array if the insertion failed.
|
|
56
59
|
*/
|
|
57
|
-
insertMany(newDocs:
|
|
60
|
+
insertMany(newDocs: TBaseType[], meta?: DbOperationMetaData): Promise<TBaseType[]>;
|
|
58
61
|
/**
|
|
59
62
|
* Retrieves a document matching the given filter.
|
|
60
63
|
*
|
|
61
64
|
* @param filter - The filter to apply.
|
|
62
65
|
* @returns The matching document or null if no document was found.
|
|
63
66
|
*/
|
|
64
|
-
get(filter: Partial<
|
|
67
|
+
get(filter: Partial<TBaseType>): Promise<TBaseType | null>;
|
|
65
68
|
/**
|
|
66
69
|
* Retrieves all documents in the collection.
|
|
67
70
|
*
|
|
68
71
|
* @returns An array of all documents in the collection.
|
|
69
72
|
*/
|
|
70
|
-
getAll(): Promise<
|
|
73
|
+
getAll(): Promise<TBaseType[]>;
|
|
71
74
|
/**
|
|
72
75
|
* Gets all the IDs in the collection as a hash for performant lookups.
|
|
73
76
|
*
|
|
@@ -82,21 +85,23 @@ export default abstract class BaseRepository<TBasetype extends BaseDocument> {
|
|
|
82
85
|
* @param docIds - The IDs of the documents to retrieve.
|
|
83
86
|
* @returns An array of matching documents.
|
|
84
87
|
*/
|
|
85
|
-
getList(docIds: UUID[]): Promise<
|
|
88
|
+
getList(docIds: UUID[]): Promise<TBaseType[]>;
|
|
86
89
|
/**
|
|
87
90
|
* Deletes a document by its ID.
|
|
88
91
|
*
|
|
89
92
|
* @param docId - The ID of the document to delete.
|
|
93
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
90
94
|
* @returns The result of the delete operation.
|
|
91
95
|
*/
|
|
92
|
-
delete(docId: UUID): Promise<DeleteResult>;
|
|
96
|
+
delete(docId: UUID, meta?: DbOperationMetaData): Promise<DeleteResult>;
|
|
93
97
|
/**
|
|
94
98
|
* Deletes multiple documents by their IDs.
|
|
95
99
|
*
|
|
96
100
|
* @param docIds - The IDs of the documents to delete.
|
|
101
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
97
102
|
* @returns The result of the delete operation.
|
|
98
103
|
*/
|
|
99
|
-
deleteList(docIds: UUID[]): Promise<DeleteResult>;
|
|
104
|
+
deleteList(docIds: UUID[], meta?: DbOperationMetaData): Promise<DeleteResult>;
|
|
100
105
|
/**
|
|
101
106
|
* This should not be used except for testing purposes
|
|
102
107
|
*
|
|
@@ -109,25 +114,37 @@ export default abstract class BaseRepository<TBasetype extends BaseDocument> {
|
|
|
109
114
|
* This base method strips the `_id` before updating.
|
|
110
115
|
*
|
|
111
116
|
* @param updatedDoc - The document to update.
|
|
117
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
112
118
|
* @returns The result of the update operation.
|
|
113
119
|
*/
|
|
114
|
-
update(updatedDoc: Partial<
|
|
120
|
+
update(updatedDoc: Partial<TBaseType>, meta?: DbOperationMetaData): Promise<UpdateResult>;
|
|
115
121
|
/**
|
|
116
122
|
* Updates the provided documents in the DB.
|
|
117
123
|
*
|
|
118
124
|
* This base method strips the `_id` before updating.
|
|
119
125
|
*
|
|
120
126
|
* @param updatedDocs - The documents to update.
|
|
127
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
121
128
|
* @returns The result of the bulk update operation.
|
|
122
129
|
*/
|
|
123
|
-
updateMany(updatedDocs: Array<Partial<
|
|
130
|
+
updateMany(updatedDocs: Array<Partial<TBaseType>>, meta?: DbOperationMetaData): Promise<BulkWriteResult>;
|
|
131
|
+
/**
|
|
132
|
+
* Fetches and caches multiple documents, returning only those not already cached.
|
|
133
|
+
* This method checks the cache in the provided metadata object first, then fetches
|
|
134
|
+
* any missing documents from the database and caches them.
|
|
135
|
+
*
|
|
136
|
+
* @param docIds - The IDs of the documents to fetch.
|
|
137
|
+
* @param meta - The metadata object containing the cache.
|
|
138
|
+
* @returns An array of all documents (from cache and newly fetched).
|
|
139
|
+
*/
|
|
140
|
+
protected fetchAndCacheDocsForMeta(docIds: UUID[], meta: DbOperationMetaData): Promise<TBaseType[]>;
|
|
124
141
|
/**
|
|
125
142
|
* Gets the filter with the default filter applied if there is one.
|
|
126
143
|
*
|
|
127
144
|
* @param filter - The filter to apply.
|
|
128
145
|
* @returns The filter with the default filter applied.
|
|
129
146
|
*/
|
|
130
|
-
protected getFilterWithDefault(filter?: Filter<
|
|
147
|
+
protected getFilterWithDefault(filter?: Filter<TBaseType>): Filter<TBaseType>;
|
|
131
148
|
/**
|
|
132
149
|
* Checks if two arrays of {@link UUID} are equal.
|
|
133
150
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/BaseRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EACV,YAAY,EACZ,MAAM,EAEN,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/BaseRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import DocumentDb from '../util/DocumentDb.js';
|
|
|
7
7
|
* Implementation note: I have tried to do the types correctly here, but kept struggling with
|
|
8
8
|
* MongoDB's types around Filter<T> and _id fields.
|
|
9
9
|
*
|
|
10
|
-
* @template
|
|
10
|
+
* @template TBaseType - The type of the documents in the collection.
|
|
11
11
|
*/
|
|
12
12
|
export default class BaseRepository {
|
|
13
13
|
validator;
|
|
@@ -70,32 +70,34 @@ export default class BaseRepository {
|
|
|
70
70
|
* Inserts a new document into the collection.
|
|
71
71
|
*
|
|
72
72
|
* @param newDoc - The new document to insert.
|
|
73
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
73
74
|
* @returns The inserted document or null if the insertion failed.
|
|
74
75
|
*/
|
|
75
|
-
async insertNew(newDoc) {
|
|
76
|
+
async insertNew(newDoc, meta) {
|
|
76
77
|
const collection = await this.getCollection();
|
|
77
78
|
await this.validator.validateNewObject(newDoc);
|
|
78
79
|
const insertResult = await collection.insertOne(newDoc);
|
|
79
80
|
if (!insertResult.acknowledged) {
|
|
80
81
|
return null;
|
|
81
82
|
}
|
|
82
|
-
await Promise.all(this.subscribers.insertNew.map((subscriber) => subscriber(newDoc)));
|
|
83
|
+
await Promise.all(this.subscribers.insertNew.map((subscriber) => subscriber(newDoc, meta)));
|
|
83
84
|
return newDoc;
|
|
84
85
|
}
|
|
85
86
|
/**
|
|
86
87
|
* Inserts multiple new documents into the collection.
|
|
87
88
|
*
|
|
88
89
|
* @param newDocs - The new documents to insert.
|
|
90
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
89
91
|
* @returns The inserted documents or an empty array if the insertion failed.
|
|
90
92
|
*/
|
|
91
|
-
async insertMany(newDocs) {
|
|
93
|
+
async insertMany(newDocs, meta) {
|
|
92
94
|
const collection = await this.getCollection();
|
|
93
95
|
await Promise.all(newDocs.map((doc) => this.validator.validateNewObject(doc)));
|
|
94
96
|
const insertResult = await collection.insertMany(newDocs);
|
|
95
97
|
if (!insertResult.acknowledged) {
|
|
96
98
|
return [];
|
|
97
99
|
}
|
|
98
|
-
await Promise.all(this.subscribers.insertMany.map((subscriber) => subscriber(newDocs)));
|
|
100
|
+
await Promise.all(this.subscribers.insertMany.map((subscriber) => subscriber(newDocs, meta)));
|
|
99
101
|
return newDocs;
|
|
100
102
|
}
|
|
101
103
|
/**
|
|
@@ -149,25 +151,27 @@ export default class BaseRepository {
|
|
|
149
151
|
* Deletes a document by its ID.
|
|
150
152
|
*
|
|
151
153
|
* @param docId - The ID of the document to delete.
|
|
154
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
152
155
|
* @returns The result of the delete operation.
|
|
153
156
|
*/
|
|
154
|
-
async delete(docId) {
|
|
157
|
+
async delete(docId, meta) {
|
|
155
158
|
const collection = await this.getCollection();
|
|
156
|
-
await Promise.all(this.subscribers.deleteOne.map((subscriber) => subscriber(docId)));
|
|
159
|
+
await Promise.all(this.subscribers.deleteOne.map((subscriber) => subscriber(docId, meta)));
|
|
157
160
|
return collection.deleteOne({ _id: docId });
|
|
158
161
|
}
|
|
159
162
|
/**
|
|
160
163
|
* Deletes multiple documents by their IDs.
|
|
161
164
|
*
|
|
162
165
|
* @param docIds - The IDs of the documents to delete.
|
|
166
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
163
167
|
* @returns The result of the delete operation.
|
|
164
168
|
*/
|
|
165
|
-
async deleteList(docIds) {
|
|
169
|
+
async deleteList(docIds, meta) {
|
|
166
170
|
const collection = await this.getCollection();
|
|
167
171
|
const deleteResult = collection.deleteMany({
|
|
168
172
|
_id: { $in: docIds }
|
|
169
173
|
});
|
|
170
|
-
await Promise.all(this.subscribers.deleteList.map((subscriber) => subscriber(docIds)));
|
|
174
|
+
await Promise.all(this.subscribers.deleteList.map((subscriber) => subscriber(docIds, meta)));
|
|
171
175
|
return deleteResult;
|
|
172
176
|
}
|
|
173
177
|
/**
|
|
@@ -185,9 +189,10 @@ export default class BaseRepository {
|
|
|
185
189
|
* This base method strips the `_id` before updating.
|
|
186
190
|
*
|
|
187
191
|
* @param updatedDoc - The document to update.
|
|
192
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
188
193
|
* @returns The result of the update operation.
|
|
189
194
|
*/
|
|
190
|
-
async update(updatedDoc) {
|
|
195
|
+
async update(updatedDoc, meta) {
|
|
191
196
|
const collection = await this.getCollection();
|
|
192
197
|
await this.validator.validateUpdateObject(updatedDoc);
|
|
193
198
|
const docId = updatedDoc._id;
|
|
@@ -195,7 +200,7 @@ export default class BaseRepository {
|
|
|
195
200
|
const result = collection.updateOne({ _id: docId }, {
|
|
196
201
|
$set: cleanedDoc
|
|
197
202
|
});
|
|
198
|
-
await Promise.all(this.subscribers.updateOne.map((subscriber) => subscriber(updatedDoc)));
|
|
203
|
+
await Promise.all(this.subscribers.updateOne.map((subscriber) => subscriber(updatedDoc, meta)));
|
|
199
204
|
return result;
|
|
200
205
|
}
|
|
201
206
|
/**
|
|
@@ -204,9 +209,10 @@ export default class BaseRepository {
|
|
|
204
209
|
* This base method strips the `_id` before updating.
|
|
205
210
|
*
|
|
206
211
|
* @param updatedDocs - The documents to update.
|
|
212
|
+
* @param meta - Tracks database operation metadata for a single request.
|
|
207
213
|
* @returns The result of the bulk update operation.
|
|
208
214
|
*/
|
|
209
|
-
async updateMany(updatedDocs) {
|
|
215
|
+
async updateMany(updatedDocs, meta) {
|
|
210
216
|
const collection = await this.getCollection();
|
|
211
217
|
await Promise.all(updatedDocs.map((doc) => this.validator.validateUpdateObject(doc)));
|
|
212
218
|
const bulkOps = updatedDocs.map((doc) => {
|
|
@@ -219,9 +225,41 @@ export default class BaseRepository {
|
|
|
219
225
|
}
|
|
220
226
|
};
|
|
221
227
|
});
|
|
222
|
-
await Promise.all(this.subscribers.updateMany.map((subscriber) => subscriber(updatedDocs)));
|
|
228
|
+
await Promise.all(this.subscribers.updateMany.map((subscriber) => subscriber(updatedDocs, meta)));
|
|
223
229
|
return collection.bulkWrite(bulkOps);
|
|
224
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Fetches and caches multiple documents, returning only those not already cached.
|
|
233
|
+
* This method checks the cache in the provided metadata object first, then fetches
|
|
234
|
+
* any missing documents from the database and caches them.
|
|
235
|
+
*
|
|
236
|
+
* @param docIds - The IDs of the documents to fetch.
|
|
237
|
+
* @param meta - The metadata object containing the cache.
|
|
238
|
+
* @returns An array of all documents (from cache and newly fetched).
|
|
239
|
+
*/
|
|
240
|
+
async fetchAndCacheDocsForMeta(docIds, meta) {
|
|
241
|
+
const docIdsToFetch = [];
|
|
242
|
+
const cachedDocs = [];
|
|
243
|
+
// Check cache first
|
|
244
|
+
for (const docId of docIds) {
|
|
245
|
+
const cached = meta.getCachedDoc(docId);
|
|
246
|
+
if (cached) {
|
|
247
|
+
cachedDocs.push(cached);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
docIdsToFetch.push(docId);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Fetch uncached docs
|
|
254
|
+
if (docIdsToFetch.length > 0) {
|
|
255
|
+
const fetchedDocs = await this.getList(docIdsToFetch);
|
|
256
|
+
fetchedDocs.forEach((doc) => {
|
|
257
|
+
meta.cacheDoc(doc._id, doc);
|
|
258
|
+
cachedDocs.push(doc);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return cachedDocs;
|
|
262
|
+
}
|
|
225
263
|
/**
|
|
226
264
|
* Gets the filter with the default filter applied if there is one.
|
|
227
265
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRepository.js","sourceRoot":"","sources":["../../src/repositories/BaseRepository.ts"],"names":[],"mappings":"AAYA,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseRepository.js","sourceRoot":"","sources":["../../src/repositories/BaseRepository.ts"],"names":[],"mappings":"AAYA,OAAO,uBAAuB,MAAM,wCAAwC,CAAC;AAE7E,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAG/C;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAgB,cAAc;IAkBhC;IACA;IACA;IAnBA,cAAc,CAAS;IAEzB,UAAU,CAAyB;IAEjC,WAAW,GACnB,uBAAuB,CAAC,qBAAqB,EAAa,CAAC;IAE7D;;;;;;;OAOG;IACH,YACE,cAAsB,EACd,SAAgC,EAChC,aAAkC,EAClC,oBAAsE;QAFtE,cAAS,GAAT,SAAS,CAAuB;QAChC,kBAAa,GAAb,aAAa,CAAqB;QAClC,yBAAoB,GAApB,oBAAoB,CAAkD;QAE9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,aAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAID;;;;;OAKG;IACH,kBAAkB,CAAC,SAAmC;QACpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAC9E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,MAAiB,EAAE,IAA0B;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,MAA6C,CAAC,CAAC;QAC/F,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,OAAoB,EAAE,IAA0B;QAC/D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,UAAU,CAC9C,OAAgD,CACjD,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9F,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,MAA0B;QAClC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAA2B,CAAC,CAAC,CAAC;QAChG,OAAO,MAA0B,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5E,0DAA0D;QAC1D,OAAO,MAAgC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,MAAM,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC1D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU;aAC5B,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAuB,CAAC,CAAC;aAC9E,OAAO,EAAE,CAAC;QACb,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,KAAW,EAAE,IAA0B;QAClD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,OAAO,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuB,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,IAA0B;QACzD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC;YACzC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SACA,CAAC,CAAC;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,UAA8B,EAAE,IAA0B;QACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;QAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAuB,EAAE;YACvE,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CACd,WAAsC,EACtC,IAA0B;QAE1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC/C,OAAO;gBACL,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;oBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;iBAC7B;aACF,CAAC;QACJ,CAAC,CAAuC,CAAC;QAEzC,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAC/E,CAAC;QAEF,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACO,KAAK,CAAC,wBAAwB,CACtC,MAAc,EACd,IAAyB;QAEzB,MAAM,aAAa,GAAW,EAAE,CAAC;QACjC,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,oBAAoB;QACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAY,KAAK,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACtD,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACO,oBAAoB,CAAC,SAA4B,EAAE;QAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC;IAED;;;;;;OAMG;IACO,kBAAkB,CAAC,MAAc,EAAE,MAAc;QACzD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACK,iBAAiB,CAAC,UAA8B;QACtD,OAAO,IAAI,CAAC,oBAAoB;YAC9B,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAC3D,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF"}
|