@furystack/repository 10.0.36 → 10.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.
- package/CHANGELOG.md +44 -0
- package/README.md +24 -0
- package/esm/data-set.d.ts +49 -10
- package/esm/data-set.d.ts.map +1 -1
- package/esm/data-set.js +71 -20
- package/esm/data-set.js.map +1 -1
- package/esm/dataset.spec.js +86 -1
- package/esm/dataset.spec.js.map +1 -1
- package/esm/helpers.d.ts +25 -1
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +25 -1
- package/esm/helpers.js.map +1 -1
- package/package.json +2 -2
- package/src/data-set.ts +81 -24
- package/src/dataset.spec.ts +99 -1
- package/src/helpers.ts +25 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [10.1.0] - 2026-02-20
|
|
4
|
+
|
|
5
|
+
### ✨ Features
|
|
6
|
+
|
|
7
|
+
### Bulk Remove in DataSet
|
|
8
|
+
|
|
9
|
+
`DataSet.remove()` now accepts multiple primary keys via rest parameters, allowing removal of several entities in a single call. Authorization checks run against all entities before any are deleted (all-or-nothing), and an `onEntityRemoved` event is emitted for each removed entity.
|
|
10
|
+
|
|
11
|
+
**Usage:**
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// Before - remove one at a time
|
|
15
|
+
await dataSet.remove(injector, key1)
|
|
16
|
+
await dataSet.remove(injector, key2)
|
|
17
|
+
|
|
18
|
+
// After - remove multiple at once
|
|
19
|
+
await dataSet.remove(injector, key1, key2, key3)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 🐛 Bug Fixes
|
|
23
|
+
|
|
24
|
+
- Fixed `DataSet.get()` to fetch the full entity before running `authorizeGetEntity`, then applying field selection afterward. Previously, the entity passed to the authorization callback could have missing fields when `select` was provided.
|
|
25
|
+
|
|
26
|
+
### ♻️ Refactoring
|
|
27
|
+
|
|
28
|
+
- `DataSet.get()` return type is now properly generic as `PartialResult<T, TSelect>`, improving type inference for callers that pass a `select` parameter
|
|
29
|
+
|
|
30
|
+
### 🧪 Tests
|
|
31
|
+
|
|
32
|
+
- Added tests for bulk removal: removing multiple entities, event emission per key, per-entity authorization, and all-or-nothing rollback when authorization fails
|
|
33
|
+
|
|
34
|
+
## [10.0.37] - 2026-02-19
|
|
35
|
+
|
|
36
|
+
### 📚 Documentation
|
|
37
|
+
|
|
38
|
+
- Expanded JSDoc on `DataSet` class to explain its role as the authorized write gateway with event dispatching
|
|
39
|
+
- Expanded JSDoc on `add()`, `update()`, and `remove()` to document authorization checks, hooks, and emitted events
|
|
40
|
+
- Expanded JSDoc on `getDataSetFor()` with usage examples for server-side writes using `useSystemIdentityContext`
|
|
41
|
+
- Added README section covering server-side writes with the elevated `IdentityContext`, including a warning about bypassing the DataSet layer
|
|
42
|
+
|
|
43
|
+
### ⬆️ Dependencies
|
|
44
|
+
|
|
45
|
+
- Updated `@furystack/core`
|
|
46
|
+
|
|
3
47
|
## [10.0.36] - 2026-02-11
|
|
4
48
|
|
|
5
49
|
### ⬆️ Dependencies
|
package/README.md
CHANGED
|
@@ -70,3 +70,27 @@ There is an additional property called `addFilter`, you can use that to add a pr
|
|
|
70
70
|
### Getting the Context
|
|
71
71
|
|
|
72
72
|
All methods above have an _injector instance_ on the call parameter - you can use that injector to get service instances from the right caller context. It means that you can use e.g. HttpUserContext to get the current user.
|
|
73
|
+
|
|
74
|
+
### Server-side writes and the elevated IdentityContext
|
|
75
|
+
|
|
76
|
+
The DataSet is the **recommended write gateway** for all entity mutations. Writing through the DataSet ensures that authorization rules, modification hooks, and change events (`onEntityAdded`, `onEntityUpdated`, `onEntityRemoved`) are all triggered. These events are required for features like [entity sync](./../entity-sync-service/README.md) to work correctly.
|
|
77
|
+
|
|
78
|
+
> **Warning:** Writing directly to the underlying physical store bypasses the DataSet layer entirely. No authorization checks, hooks, or events will fire, and downstream consumers (such as entity sync) will **not** be notified of the change.
|
|
79
|
+
|
|
80
|
+
For server-side or background operations that don't originate from an HTTP request (e.g. scheduled jobs, migrations, seed scripts), you won't have a user session. Use `useSystemIdentityContext` from `@furystack/core` to create a scoped child injector with elevated privileges:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import { useSystemIdentityContext } from '@furystack/core'
|
|
84
|
+
import { getDataSetFor } from '@furystack/repository'
|
|
85
|
+
import { usingAsync } from '@furystack/utils'
|
|
86
|
+
|
|
87
|
+
await usingAsync(useSystemIdentityContext({ injector, username: 'background-job' }), async (systemInjector) => {
|
|
88
|
+
const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
89
|
+
await dataSet.add(systemInjector, { value: 'created by background job' })
|
|
90
|
+
})
|
|
91
|
+
// systemInjector is disposed here -- all scoped instances cleaned up
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
> **Warning:** `useSystemIdentityContext` bypasses **all** authorization checks. Only use it in trusted server-side contexts. Never pass the returned injector to user-facing request handlers.
|
|
95
|
+
|
|
96
|
+
This pattern ensures that all writes go through the same pipeline, keeping authorization, hooks, and event-driven features consistent regardless of the caller.
|
package/esm/data-set.d.ts
CHANGED
|
@@ -3,7 +3,33 @@ import type { Injector } from '@furystack/inject';
|
|
|
3
3
|
import { EventHub } from '@furystack/utils';
|
|
4
4
|
import type { DataSetSettings } from './data-set-setting.js';
|
|
5
5
|
/**
|
|
6
|
-
* An authorized Repository Store instance
|
|
6
|
+
* An authorized Repository Store instance that wraps a {@link PhysicalStore} with authorization,
|
|
7
|
+
* modification hooks, and event dispatching.
|
|
8
|
+
*
|
|
9
|
+
* The DataSet is the **recommended write gateway** for all entity mutations. Writing through the DataSet
|
|
10
|
+
* ensures that authorization rules are enforced, modification hooks are applied, and change events
|
|
11
|
+
* (`onEntityAdded`, `onEntityUpdated`, `onEntityRemoved`) are emitted -- which are required for features
|
|
12
|
+
* like entity sync to function correctly.
|
|
13
|
+
*
|
|
14
|
+
* All mutating methods require an `injector` parameter that provides the caller's context (e.g. the current
|
|
15
|
+
* user's identity). For server-side or background operations that don't originate from an HTTP request,
|
|
16
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
21
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
22
|
+
* import { usingAsync } from '@furystack/utils'
|
|
23
|
+
*
|
|
24
|
+
* // Server-side write with an elevated identity
|
|
25
|
+
* await usingAsync(
|
|
26
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
27
|
+
* async (systemInjector) => {
|
|
28
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
29
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
30
|
+
* },
|
|
31
|
+
* )
|
|
32
|
+
* ```
|
|
7
33
|
*/
|
|
8
34
|
export declare class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> extends EventHub<{
|
|
9
35
|
onEntityAdded: {
|
|
@@ -26,15 +52,21 @@ export declare class DataSet<T, TPrimaryKey extends keyof T, TWritableData = Wit
|
|
|
26
52
|
*/
|
|
27
53
|
primaryKey: TPrimaryKey;
|
|
28
54
|
/**
|
|
29
|
-
* Adds an entity to the DataSet
|
|
30
|
-
*
|
|
55
|
+
* Adds an entity to the DataSet.
|
|
56
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
57
|
+
* and emits an `onEntityAdded` event for each created entity.
|
|
58
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
59
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
31
60
|
* @param entities The entities to add
|
|
32
61
|
* @returns The CreateResult with the created entities
|
|
33
62
|
*/
|
|
34
63
|
add(injector: Injector, ...entities: TWritableData[]): Promise<CreateResult<T>>;
|
|
35
64
|
/**
|
|
36
|
-
* Updates an entity in the store
|
|
37
|
-
*
|
|
65
|
+
* Updates an entity in the store.
|
|
66
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
67
|
+
* and emits an `onEntityUpdated` event.
|
|
68
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
69
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
38
70
|
* @param id The identifier of the entity
|
|
39
71
|
* @param change The update
|
|
40
72
|
*/
|
|
@@ -60,14 +92,21 @@ export declare class DataSet<T, TPrimaryKey extends keyof T, TWritableData = Wit
|
|
|
60
92
|
* @param select A field list used for projection
|
|
61
93
|
* @returns An item with the current unique key or Undefined
|
|
62
94
|
*/
|
|
63
|
-
get(injector: Injector, key: T[TPrimaryKey], select?:
|
|
95
|
+
get<TSelect extends Array<keyof T>>(injector: Injector, key: T[TPrimaryKey], select?: TSelect): Promise<PartialResult<T, TSelect> | undefined>;
|
|
64
96
|
/**
|
|
65
|
-
* Removes
|
|
66
|
-
*
|
|
67
|
-
*
|
|
97
|
+
* Removes one or more entities based on their primary keys.
|
|
98
|
+
* Runs authorization checks (all-or-nothing), persists to the physical store,
|
|
99
|
+
* and emits an `onEntityRemoved` event for each removed entity.
|
|
100
|
+
*
|
|
101
|
+
* When `authorizeRemoveEntity` is configured, only entities that exist in the store
|
|
102
|
+
* are authorized. Keys that don't match any entity are silently forwarded to the
|
|
103
|
+
* physical store's `remove()` call.
|
|
104
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
105
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
106
|
+
* @param keys The primary keys of the entities to remove
|
|
68
107
|
* @returns A promise that will be resolved / rejected based on the remove success
|
|
69
108
|
*/
|
|
70
|
-
remove(injector: Injector,
|
|
109
|
+
remove(injector: Injector, ...keys: Array<T[TPrimaryKey]>): Promise<void>;
|
|
71
110
|
constructor(settings: DataSetSettings<T, TPrimaryKey, TWritableData>);
|
|
72
111
|
}
|
|
73
112
|
//# sourceMappingURL=data-set.d.ts.map
|
package/esm/data-set.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-set.d.ts","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE3G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D
|
|
1
|
+
{"version":3,"file":"data-set.d.ts","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE3G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,OAAO,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CACjG,SAAQ,QAAQ,CAAC;IACf,aAAa,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;IAChD,eAAe,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC/E,eAAe,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAA;CAC7D,CACD,YAAW,UAAU;aAwLO,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;IAtLpF;;OAEG;IACI,UAAU,EAAE,WAAW,CAAA;IAE9B;;;;;;;;OAQG;IACU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAyB5F;;;;;;;;OAQG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9F;;;;;OAKG;IACU,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/E;;;;;OAKG;IACU,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAW5C;;;;;;OAMG;IACU,GAAG,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC7C,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAwBjD;;;;;;;;;;;;OAYG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;gBA2B1D,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;CAIrF"}
|
package/esm/data-set.js
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
|
-
import { AuthorizationError } from '@furystack/core';
|
|
1
|
+
import { AuthorizationError, selectFields } from '@furystack/core';
|
|
2
2
|
import { EventHub } from '@furystack/utils';
|
|
3
3
|
/**
|
|
4
|
-
* An authorized Repository Store instance
|
|
4
|
+
* An authorized Repository Store instance that wraps a {@link PhysicalStore} with authorization,
|
|
5
|
+
* modification hooks, and event dispatching.
|
|
6
|
+
*
|
|
7
|
+
* The DataSet is the **recommended write gateway** for all entity mutations. Writing through the DataSet
|
|
8
|
+
* ensures that authorization rules are enforced, modification hooks are applied, and change events
|
|
9
|
+
* (`onEntityAdded`, `onEntityUpdated`, `onEntityRemoved`) are emitted -- which are required for features
|
|
10
|
+
* like entity sync to function correctly.
|
|
11
|
+
*
|
|
12
|
+
* All mutating methods require an `injector` parameter that provides the caller's context (e.g. the current
|
|
13
|
+
* user's identity). For server-side or background operations that don't originate from an HTTP request,
|
|
14
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
19
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
20
|
+
* import { usingAsync } from '@furystack/utils'
|
|
21
|
+
*
|
|
22
|
+
* // Server-side write with an elevated identity
|
|
23
|
+
* await usingAsync(
|
|
24
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
25
|
+
* async (systemInjector) => {
|
|
26
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
27
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
28
|
+
* },
|
|
29
|
+
* )
|
|
30
|
+
* ```
|
|
5
31
|
*/
|
|
6
32
|
export class DataSet extends EventHub {
|
|
7
33
|
settings;
|
|
@@ -10,8 +36,11 @@ export class DataSet extends EventHub {
|
|
|
10
36
|
*/
|
|
11
37
|
primaryKey;
|
|
12
38
|
/**
|
|
13
|
-
* Adds an entity to the DataSet
|
|
14
|
-
*
|
|
39
|
+
* Adds an entity to the DataSet.
|
|
40
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
41
|
+
* and emits an `onEntityAdded` event for each created entity.
|
|
42
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
43
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
15
44
|
* @param entities The entities to add
|
|
16
45
|
* @returns The CreateResult with the created entities
|
|
17
46
|
*/
|
|
@@ -34,8 +63,11 @@ export class DataSet extends EventHub {
|
|
|
34
63
|
return createResult;
|
|
35
64
|
}
|
|
36
65
|
/**
|
|
37
|
-
* Updates an entity in the store
|
|
38
|
-
*
|
|
66
|
+
* Updates an entity in the store.
|
|
67
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
68
|
+
* and emits an `onEntityUpdated` event.
|
|
69
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
70
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
39
71
|
* @param id The identifier of the entity
|
|
40
72
|
* @param change The update
|
|
41
73
|
*/
|
|
@@ -106,22 +138,39 @@ export class DataSet extends EventHub {
|
|
|
106
138
|
throw new AuthorizationError(result.message);
|
|
107
139
|
}
|
|
108
140
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
141
|
+
if (this.settings.authorizeGetEntity) {
|
|
142
|
+
const fullEntity = await this.settings.physicalStore.get(key);
|
|
143
|
+
if (!fullEntity) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const result = await this.settings.authorizeGetEntity({ injector, entity: fullEntity });
|
|
112
147
|
if (!result.isAllowed) {
|
|
113
148
|
throw new AuthorizationError(result.message);
|
|
114
149
|
}
|
|
150
|
+
if (select) {
|
|
151
|
+
return selectFields(fullEntity, ...select);
|
|
152
|
+
}
|
|
153
|
+
return fullEntity;
|
|
115
154
|
}
|
|
116
|
-
return
|
|
155
|
+
return await this.settings.physicalStore.get(key, select);
|
|
117
156
|
}
|
|
118
157
|
/**
|
|
119
|
-
* Removes
|
|
120
|
-
*
|
|
121
|
-
*
|
|
158
|
+
* Removes one or more entities based on their primary keys.
|
|
159
|
+
* Runs authorization checks (all-or-nothing), persists to the physical store,
|
|
160
|
+
* and emits an `onEntityRemoved` event for each removed entity.
|
|
161
|
+
*
|
|
162
|
+
* When `authorizeRemoveEntity` is configured, only entities that exist in the store
|
|
163
|
+
* are authorized. Keys that don't match any entity are silently forwarded to the
|
|
164
|
+
* physical store's `remove()` call.
|
|
165
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
166
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
167
|
+
* @param keys The primary keys of the entities to remove
|
|
122
168
|
* @returns A promise that will be resolved / rejected based on the remove success
|
|
123
169
|
*/
|
|
124
|
-
async remove(injector,
|
|
170
|
+
async remove(injector, ...keys) {
|
|
171
|
+
if (keys.length === 0) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
125
174
|
if (this.settings.authorizeRemove) {
|
|
126
175
|
const result = await this.settings.authorizeRemove({ injector });
|
|
127
176
|
if (!result.isAllowed) {
|
|
@@ -129,16 +178,18 @@ export class DataSet extends EventHub {
|
|
|
129
178
|
}
|
|
130
179
|
}
|
|
131
180
|
if (this.settings.authorizeRemoveEntity) {
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
181
|
+
const entities = await this.settings.physicalStore.find({
|
|
182
|
+
filter: { [this.primaryKey]: { $in: keys } },
|
|
183
|
+
});
|
|
184
|
+
await Promise.all(entities.map(async (entity) => {
|
|
185
|
+
const removeResult = await this.settings.authorizeRemoveEntity({ injector, entity: entity });
|
|
135
186
|
if (!removeResult.isAllowed) {
|
|
136
187
|
throw new AuthorizationError(removeResult.message);
|
|
137
188
|
}
|
|
138
|
-
}
|
|
189
|
+
}));
|
|
139
190
|
}
|
|
140
|
-
await this.settings.physicalStore.remove(
|
|
141
|
-
this.emit('onEntityRemoved', { injector, key });
|
|
191
|
+
await this.settings.physicalStore.remove(...keys);
|
|
192
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { injector, key }));
|
|
142
193
|
}
|
|
143
194
|
constructor(settings) {
|
|
144
195
|
super();
|
package/esm/data-set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-set.js","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"data-set.js","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"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"}
|
package/esm/dataset.spec.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InMemoryStore, addStore } from '@furystack/core';
|
|
1
|
+
import { AuthorizationError, InMemoryStore, addStore } from '@furystack/core';
|
|
2
2
|
import { Injector } from '@furystack/inject';
|
|
3
3
|
import { usingAsync } from '@furystack/utils';
|
|
4
4
|
import { describe, expect, it, vi } from 'vitest';
|
|
@@ -381,6 +381,32 @@ describe('DataSet', () => {
|
|
|
381
381
|
}
|
|
382
382
|
});
|
|
383
383
|
});
|
|
384
|
+
it('should pass the full entity to authorizeGetEntity even when select is used', async () => {
|
|
385
|
+
await usingAsync(new Injector(), async (i) => {
|
|
386
|
+
const authorizeGetEntity = vi.fn(async () => ({ isAllowed: true, message: '' }));
|
|
387
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
388
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeGetEntity });
|
|
389
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
390
|
+
await dataSet.add(i, { id: 1, value: 'asd' });
|
|
391
|
+
const result = await dataSet.get(i, 1, ['value']);
|
|
392
|
+
expect(authorizeGetEntity).toHaveBeenCalledTimes(1);
|
|
393
|
+
const calls = authorizeGetEntity.mock.calls;
|
|
394
|
+
expect(calls[0][0].entity).toEqual({ id: 1, value: 'asd' });
|
|
395
|
+
expect(result).toEqual({ value: 'asd' });
|
|
396
|
+
expect(result).not.toHaveProperty('id');
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
it('should return undefined when authorizeGetEntity is set and entity does not exist', async () => {
|
|
400
|
+
await usingAsync(new Injector(), async (i) => {
|
|
401
|
+
const authorizeGetEntity = vi.fn(async () => ({ isAllowed: true, message: '' }));
|
|
402
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
403
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeGetEntity });
|
|
404
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
405
|
+
const result = await dataSet.get(i, 999);
|
|
406
|
+
expect(result).toBeUndefined();
|
|
407
|
+
expect(authorizeGetEntity).not.toHaveBeenCalled();
|
|
408
|
+
});
|
|
409
|
+
});
|
|
384
410
|
});
|
|
385
411
|
describe('remove', () => {
|
|
386
412
|
it('should remove the entity if no settings are provided', async () => {
|
|
@@ -469,6 +495,65 @@ describe('DataSet', () => {
|
|
|
469
495
|
await dataSet.remove(i, 1);
|
|
470
496
|
});
|
|
471
497
|
});
|
|
498
|
+
it('should remove multiple entities at once', async () => {
|
|
499
|
+
await usingAsync(new Injector(), async (i) => {
|
|
500
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
501
|
+
getRepository(i).createDataSet(TestClass, 'id');
|
|
502
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
503
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' }, { id: 3, value: 'c' });
|
|
504
|
+
await dataSet.remove(i, 1, 3);
|
|
505
|
+
const count = await dataSet.count(i);
|
|
506
|
+
expect(count).toBe(1);
|
|
507
|
+
const remaining = await dataSet.get(i, 2);
|
|
508
|
+
expect(remaining?.value).toBe('b');
|
|
509
|
+
});
|
|
510
|
+
});
|
|
511
|
+
it('should emit onEntityRemoved for each key when removing multiple entities', async () => {
|
|
512
|
+
await usingAsync(new Injector(), async (i) => {
|
|
513
|
+
const removedKeys = [];
|
|
514
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
515
|
+
getRepository(i).createDataSet(TestClass, 'id');
|
|
516
|
+
getRepository(i)
|
|
517
|
+
.getDataSetFor(TestClass, 'id')
|
|
518
|
+
.subscribe('onEntityRemoved', ({ key }) => {
|
|
519
|
+
removedKeys.push(key);
|
|
520
|
+
});
|
|
521
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
522
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' });
|
|
523
|
+
await dataSet.remove(i, 1, 2);
|
|
524
|
+
expect(removedKeys).toEqual([1, 2]);
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
it('should authorize each entity when removing multiple with authorizeRemoveEntity', async () => {
|
|
528
|
+
await usingAsync(new Injector(), async (i) => {
|
|
529
|
+
const authorizeRemoveEntity = vi.fn(async () => ({ isAllowed: true, message: '' }));
|
|
530
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
531
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeRemoveEntity });
|
|
532
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
533
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' });
|
|
534
|
+
await dataSet.remove(i, 1, 2);
|
|
535
|
+
expect(authorizeRemoveEntity).toHaveBeenCalledTimes(2);
|
|
536
|
+
const count = await dataSet.count(i);
|
|
537
|
+
expect(count).toBe(0);
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
it('should not remove any entity if authorizeRemoveEntity fails for one (all-or-nothing)', async () => {
|
|
541
|
+
await usingAsync(new Injector(), async (i) => {
|
|
542
|
+
const authorizeRemoveEntity = vi.fn(async ({ entity }) => {
|
|
543
|
+
if (entity.id === 2) {
|
|
544
|
+
return { isAllowed: false, message: 'forbidden' };
|
|
545
|
+
}
|
|
546
|
+
return { isAllowed: true };
|
|
547
|
+
});
|
|
548
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }));
|
|
549
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeRemoveEntity });
|
|
550
|
+
const dataSet = getDataSetFor(i, TestClass, 'id');
|
|
551
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' }, { id: 3, value: 'c' });
|
|
552
|
+
await expect(dataSet.remove(i, 1, 2, 3)).rejects.toThrow(AuthorizationError);
|
|
553
|
+
const count = await dataSet.count(i);
|
|
554
|
+
expect(count).toBe(3);
|
|
555
|
+
});
|
|
556
|
+
});
|
|
472
557
|
});
|
|
473
558
|
});
|
|
474
559
|
//# sourceMappingURL=dataset.spec.js.map
|
package/esm/dataset.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.spec.js","sourceRoot":"","sources":["../src/dataset.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataset.spec.js","sourceRoot":"","sources":["../src/dataset.spec.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,SAAS;IACN,EAAE,GAAG,CAAC,CAAA;IACN,KAAK,GAAG,EAAE,CAAA;CAClB;AAED,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CACN,CAAC,EACD,IAAI,aAAa,CAAC;oBAChB,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,IAAI;iBACjB,CAAC,CACH,CAAA;gBACD,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC9D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CACN,CAAC,EACD,IAAI,aAAa,CAAC;oBAChB,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,IAAI;iBACjB,CAAC,CACH,CAAA;gBACD,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC9D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;;;GAGlE,CAAC,CAAA;YACE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;qBACnE,YAAY,CAAC;;;GAGrB,CAAC,CAAA;YACE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;gBAEnD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,MAAa,CAAC,CAAC,CAAC,YAAY,EAAE,CAAA;YACzE,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;gBAChE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBAEtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;oBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC5C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;gBAC/E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAwB,CAAC,CAAA;oBACpF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBAEtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;oBACjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAA;oBACjC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACrC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC1C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,uGAAuG,EAAE,KAAK,IAAI,EAAE;gBACrH,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAwB,CAAC,CAAA;oBACrG,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBAEtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;oBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBAEjD,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;wBAC7C,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM;wBACN,MAAM,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAA;wBACjC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;wBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAA;oBAC/B,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CACvB,KAAK,EAAE,OAAwE,EAAE,EAAE,CAAC,CAAC;wBACnF,GAAG,OAAO,CAAC,MAAM;wBACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;qBAC1C,CAAC,CACH,CAAA;oBAED,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;oBAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAA;oBAChC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC5C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;gBAClF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;oBACpB,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBAEtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;oBAEnD,aAAa,CAAC,CAAC,CAAC;yBACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;yBAC9B,SAAS,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;wBACzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAClC,CAAC,CAAC,CAAA;oBAEJ,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC/C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;oBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC7C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;gBACrF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAwB,CAAC,CAAA;oBACvF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;oBACpE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBACpD,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAA;oBACpC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACrC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC3C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,iHAAiH,EAAE,KAAK,IAAI,EAAE;gBAC/H,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAwB,CAAC,CAAA;oBAC9G,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;oBAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBAEjD,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;wBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;wBACpD,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM;wBACN,MAAM,CAAC,qBAAqB,CAAC,CAAC,UAAU,EAAE,CAAA;wBAC1C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;wBACrC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC1C,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;gBAC3F,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAwB,CAAC,CAAA;oBAC7F,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;oBAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBACpD,MAAM,CAAC,qBAAqB,CAAC,CAAC,UAAU,EAAE,CAAA;oBAC1C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACrC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC3C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;gBACzH,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAwB,CAAC,CAAA;oBACxG,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;oBAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBAEjD,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;wBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;wBACpD,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM;wBACN,MAAM,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,CAAA;wBACpC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;wBACrC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC1C,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,cAAc,GAAuD,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;wBACnG,GAAG,OAAO,CAAC,MAAM;wBACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAY;qBACrD,CAAC,CAAC,CAAA;oBAEH,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;oBAEnE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAA;oBACnC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC7C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;gBAC9F,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;oBACpB,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;oBAE/C,aAAa,CAAC,CAAC,CAAC;yBACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;yBAC9B,SAAS,CAAC,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;wBAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBAClD,CAAC,CAAC,CAAA;oBAEJ,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBACtD,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;oBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC5E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;oBAC1E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;oBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;gBACnE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBAC7E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;oBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;oBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;oBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;oBAC7C,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBACtB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC/B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC1E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;gBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC/B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC7E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;gBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;oBACzB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACtC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC1E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;gBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACtC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC7E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;gBAEjE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACvB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAChF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACtC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACnF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBACvB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC1F,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAwB,CAAC,CAAA;gBACvG,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;gBACjD,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;gBACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAkD,CAAA;gBACxF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBACxC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;YAChG,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAwB,CAAC,CAAA;gBACvG,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBACxC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;gBAC9B,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YACnD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC1B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC7E,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;gBAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC1B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBAChF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;gBAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBAC1B,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBACnF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;gBAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC1B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;gBAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBAC1B,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBACpB,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,aAAa,CAAC,CAAC,CAAC;qBACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;qBAC9B,SAAS,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;oBACxC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBACxB,CAAC,CAAC,CAAA;gBAEJ,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC7C,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;gBACzF,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC7B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACrB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,WAAW,GAAa,EAAE,CAAA;gBAChC,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gBAE/C,aAAa,CAAC,CAAC,CAAC;qBACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;qBAC9B,SAAS,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;oBACxC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,CAAC,CAAC,CAAA;gBAEJ,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;gBAClE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC7B,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAwB,CAAC,CAAA;gBAC1G,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;gBAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;gBAClE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC7B,MAAM,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;gBACtD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;YACpG,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,EAAyB,EAAE,EAAE;oBAC9E,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;wBACpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAyB,CAAA;oBAC1E,CAAC;oBACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAyB,CAAA;gBACnD,CAAC,CAAC,CAAA;gBACF,QAAQ,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBACtE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAA;gBAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;gBACjD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;gBACzF,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;gBAC5E,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/esm/helpers.d.ts
CHANGED
|
@@ -7,11 +7,35 @@ import { Repository } from './repository.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare const getRepository: (injector: Injector) => Repository;
|
|
9
9
|
/**
|
|
10
|
-
* Gets a DataSet for a specific model from the repository
|
|
10
|
+
* Gets a DataSet for a specific model from the repository.
|
|
11
|
+
*
|
|
12
|
+
* The DataSet is the recommended way to perform all entity mutations (add, update, remove).
|
|
13
|
+
* Writing through the DataSet ensures that authorization, modification hooks, and change events
|
|
14
|
+
* are properly triggered -- which is required for features like entity sync.
|
|
15
|
+
*
|
|
16
|
+
* For server-side or background operations that don't originate from an HTTP request,
|
|
17
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
18
|
+
*
|
|
11
19
|
* @param injector The Injector instance
|
|
12
20
|
* @param model The Model
|
|
13
21
|
* @param primaryKey The Primary Key field
|
|
14
22
|
* @returns A Repository DataSet for a specific model
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
27
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
28
|
+
* import { usingAsync } from '@furystack/utils'
|
|
29
|
+
*
|
|
30
|
+
* // In a background job or service
|
|
31
|
+
* await usingAsync(
|
|
32
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
33
|
+
* async (systemInjector) => {
|
|
34
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
35
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
36
|
+
* },
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
15
39
|
*/
|
|
16
40
|
export declare const getDataSetFor: <T, TPrimaryKey extends keyof T>(injector: Injector, model: Constructable<T>, primaryKey: TPrimaryKey) => import("./data-set.js").DataSet<T, TPrimaryKey, import("@furystack/core").WithOptionalId<T, TPrimaryKey>>;
|
|
17
41
|
//# sourceMappingURL=helpers.d.ts.map
|
package/esm/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,eAAqC,CAAA;AAErF
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,eAAqC,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAC1D,UAAU,QAAQ,EAClB,OAAO,aAAa,CAAC,CAAC,CAAC,EACvB,YAAY,WAAW,8GAC6C,CAAA"}
|
package/esm/helpers.js
CHANGED
|
@@ -6,11 +6,35 @@ import { Repository } from './repository.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export const getRepository = (injector) => injector.getInstance(Repository);
|
|
8
8
|
/**
|
|
9
|
-
* Gets a DataSet for a specific model from the repository
|
|
9
|
+
* Gets a DataSet for a specific model from the repository.
|
|
10
|
+
*
|
|
11
|
+
* The DataSet is the recommended way to perform all entity mutations (add, update, remove).
|
|
12
|
+
* Writing through the DataSet ensures that authorization, modification hooks, and change events
|
|
13
|
+
* are properly triggered -- which is required for features like entity sync.
|
|
14
|
+
*
|
|
15
|
+
* For server-side or background operations that don't originate from an HTTP request,
|
|
16
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
17
|
+
*
|
|
10
18
|
* @param injector The Injector instance
|
|
11
19
|
* @param model The Model
|
|
12
20
|
* @param primaryKey The Primary Key field
|
|
13
21
|
* @returns A Repository DataSet for a specific model
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
26
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
27
|
+
* import { usingAsync } from '@furystack/utils'
|
|
28
|
+
*
|
|
29
|
+
* // In a background job or service
|
|
30
|
+
* await usingAsync(
|
|
31
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
32
|
+
* async (systemInjector) => {
|
|
33
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
34
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
35
|
+
* },
|
|
36
|
+
* )
|
|
37
|
+
* ```
|
|
14
38
|
*/
|
|
15
39
|
export const getDataSetFor = (injector, model, primaryKey) => injector.getInstance(Repository).getDataSetFor(model, primaryKey);
|
|
16
40
|
//# sourceMappingURL=helpers.js.map
|
package/esm/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;AAErF
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAkB,EAClB,KAAuB,EACvB,UAAuB,EACvB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/repository",
|
|
3
|
-
"version": "10.0
|
|
3
|
+
"version": "10.1.0",
|
|
4
4
|
"description": "Repository implementation for FuryStack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://github.com/furystack/furystack",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@furystack/core": "^15.0
|
|
41
|
+
"@furystack/core": "^15.1.0",
|
|
42
42
|
"@furystack/inject": "^12.0.30",
|
|
43
43
|
"@furystack/utils": "^8.1.10"
|
|
44
44
|
},
|
package/src/data-set.ts
CHANGED
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
import type { CreateResult, FilterType, FindOptions, PartialResult, WithOptionalId } from '@furystack/core'
|
|
2
|
-
import { AuthorizationError } from '@furystack/core'
|
|
2
|
+
import { AuthorizationError, selectFields } from '@furystack/core'
|
|
3
3
|
import type { Injector } from '@furystack/inject'
|
|
4
4
|
import { EventHub } from '@furystack/utils'
|
|
5
5
|
import type { DataSetSettings } from './data-set-setting.js'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* An authorized Repository Store instance
|
|
8
|
+
* An authorized Repository Store instance that wraps a {@link PhysicalStore} with authorization,
|
|
9
|
+
* modification hooks, and event dispatching.
|
|
10
|
+
*
|
|
11
|
+
* The DataSet is the **recommended write gateway** for all entity mutations. Writing through the DataSet
|
|
12
|
+
* ensures that authorization rules are enforced, modification hooks are applied, and change events
|
|
13
|
+
* (`onEntityAdded`, `onEntityUpdated`, `onEntityRemoved`) are emitted -- which are required for features
|
|
14
|
+
* like entity sync to function correctly.
|
|
15
|
+
*
|
|
16
|
+
* All mutating methods require an `injector` parameter that provides the caller's context (e.g. the current
|
|
17
|
+
* user's identity). For server-side or background operations that don't originate from an HTTP request,
|
|
18
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
23
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
24
|
+
* import { usingAsync } from '@furystack/utils'
|
|
25
|
+
*
|
|
26
|
+
* // Server-side write with an elevated identity
|
|
27
|
+
* await usingAsync(
|
|
28
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
29
|
+
* async (systemInjector) => {
|
|
30
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
31
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
32
|
+
* },
|
|
33
|
+
* )
|
|
34
|
+
* ```
|
|
9
35
|
*/
|
|
10
36
|
export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>>
|
|
11
37
|
extends EventHub<{
|
|
@@ -21,8 +47,11 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
21
47
|
public primaryKey: TPrimaryKey
|
|
22
48
|
|
|
23
49
|
/**
|
|
24
|
-
* Adds an entity to the DataSet
|
|
25
|
-
*
|
|
50
|
+
* Adds an entity to the DataSet.
|
|
51
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
52
|
+
* and emits an `onEntityAdded` event for each created entity.
|
|
53
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
54
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
26
55
|
* @param entities The entities to add
|
|
27
56
|
* @returns The CreateResult with the created entities
|
|
28
57
|
*/
|
|
@@ -52,8 +81,11 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
52
81
|
}
|
|
53
82
|
|
|
54
83
|
/**
|
|
55
|
-
* Updates an entity in the store
|
|
56
|
-
*
|
|
84
|
+
* Updates an entity in the store.
|
|
85
|
+
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
86
|
+
* and emits an `onEntityUpdated` event.
|
|
87
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
88
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
57
89
|
* @param id The identifier of the entity
|
|
58
90
|
* @param change The update
|
|
59
91
|
*/
|
|
@@ -123,30 +155,51 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
123
155
|
* @param select A field list used for projection
|
|
124
156
|
* @returns An item with the current unique key or Undefined
|
|
125
157
|
*/
|
|
126
|
-
public async get
|
|
158
|
+
public async get<TSelect extends Array<keyof T>>(
|
|
159
|
+
injector: Injector,
|
|
160
|
+
key: T[TPrimaryKey],
|
|
161
|
+
select?: TSelect,
|
|
162
|
+
): Promise<PartialResult<T, TSelect> | undefined> {
|
|
127
163
|
if (this.settings.authorizeGet) {
|
|
128
164
|
const result = await this.settings.authorizeGet({ injector })
|
|
129
165
|
if (!result.isAllowed) {
|
|
130
166
|
throw new AuthorizationError(result.message)
|
|
131
167
|
}
|
|
132
168
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
169
|
+
if (this.settings.authorizeGetEntity) {
|
|
170
|
+
const fullEntity = await this.settings.physicalStore.get(key)
|
|
171
|
+
if (!fullEntity) {
|
|
172
|
+
return undefined
|
|
173
|
+
}
|
|
174
|
+
const result = await this.settings.authorizeGetEntity({ injector, entity: fullEntity as T })
|
|
136
175
|
if (!result.isAllowed) {
|
|
137
176
|
throw new AuthorizationError(result.message)
|
|
138
177
|
}
|
|
178
|
+
if (select) {
|
|
179
|
+
return selectFields(fullEntity as T & object, ...select)
|
|
180
|
+
}
|
|
181
|
+
return fullEntity as PartialResult<T, TSelect>
|
|
139
182
|
}
|
|
140
|
-
return
|
|
183
|
+
return await this.settings.physicalStore.get(key, select)
|
|
141
184
|
}
|
|
142
185
|
|
|
143
186
|
/**
|
|
144
|
-
* Removes
|
|
145
|
-
*
|
|
146
|
-
*
|
|
187
|
+
* Removes one or more entities based on their primary keys.
|
|
188
|
+
* Runs authorization checks (all-or-nothing), persists to the physical store,
|
|
189
|
+
* and emits an `onEntityRemoved` event for each removed entity.
|
|
190
|
+
*
|
|
191
|
+
* When `authorizeRemoveEntity` is configured, only entities that exist in the store
|
|
192
|
+
* are authorized. Keys that don't match any entity are silently forwarded to the
|
|
193
|
+
* physical store's `remove()` call.
|
|
194
|
+
* @param injector The injector from the caller's context. For server-side or background operations
|
|
195
|
+
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
196
|
+
* @param keys The primary keys of the entities to remove
|
|
147
197
|
* @returns A promise that will be resolved / rejected based on the remove success
|
|
148
198
|
*/
|
|
149
|
-
public async remove(injector: Injector,
|
|
199
|
+
public async remove(injector: Injector, ...keys: Array<T[TPrimaryKey]>): Promise<void> {
|
|
200
|
+
if (keys.length === 0) {
|
|
201
|
+
return
|
|
202
|
+
}
|
|
150
203
|
if (this.settings.authorizeRemove) {
|
|
151
204
|
const result = await this.settings.authorizeRemove({ injector })
|
|
152
205
|
if (!result.isAllowed) {
|
|
@@ -154,16 +207,20 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
154
207
|
}
|
|
155
208
|
}
|
|
156
209
|
if (this.settings.authorizeRemoveEntity) {
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
210
|
+
const entities = await this.settings.physicalStore.find({
|
|
211
|
+
filter: { [this.primaryKey]: { $in: keys } } as unknown as FilterType<T>,
|
|
212
|
+
})
|
|
213
|
+
await Promise.all(
|
|
214
|
+
entities.map(async (entity) => {
|
|
215
|
+
const removeResult = await this.settings.authorizeRemoveEntity!({ injector, entity: entity as T })
|
|
216
|
+
if (!removeResult.isAllowed) {
|
|
217
|
+
throw new AuthorizationError(removeResult.message)
|
|
218
|
+
}
|
|
219
|
+
}),
|
|
220
|
+
)
|
|
164
221
|
}
|
|
165
|
-
await this.settings.physicalStore.remove(
|
|
166
|
-
this.emit('onEntityRemoved', { injector, key })
|
|
222
|
+
await this.settings.physicalStore.remove(...keys)
|
|
223
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { injector, key }))
|
|
167
224
|
}
|
|
168
225
|
|
|
169
226
|
constructor(public readonly settings: DataSetSettings<T, TPrimaryKey, TWritableData>) {
|
package/src/dataset.spec.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
4
4
|
import type { WithOptionalId } from '@furystack/core'
|
|
5
|
-
import { InMemoryStore, addStore } from '@furystack/core'
|
|
5
|
+
import { AuthorizationError, InMemoryStore, addStore } from '@furystack/core'
|
|
6
6
|
import { Injector } from '@furystack/inject'
|
|
7
7
|
import { usingAsync } from '@furystack/utils'
|
|
8
8
|
import { describe, expect, it, vi } from 'vitest'
|
|
@@ -447,6 +447,36 @@ describe('DataSet', () => {
|
|
|
447
447
|
}
|
|
448
448
|
})
|
|
449
449
|
})
|
|
450
|
+
|
|
451
|
+
it('should pass the full entity to authorizeGetEntity even when select is used', async () => {
|
|
452
|
+
await usingAsync(new Injector(), async (i) => {
|
|
453
|
+
const authorizeGetEntity = vi.fn(async () => ({ isAllowed: true, message: '' }) as AuthorizationResult)
|
|
454
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
455
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeGetEntity })
|
|
456
|
+
|
|
457
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
458
|
+
await dataSet.add(i, { id: 1, value: 'asd' })
|
|
459
|
+
const result = await dataSet.get(i, 1, ['value'])
|
|
460
|
+
expect(authorizeGetEntity).toHaveBeenCalledTimes(1)
|
|
461
|
+
const calls = authorizeGetEntity.mock.calls as unknown as Array<[{ entity: TestClass }]>
|
|
462
|
+
expect(calls[0][0].entity).toEqual({ id: 1, value: 'asd' })
|
|
463
|
+
expect(result).toEqual({ value: 'asd' })
|
|
464
|
+
expect(result).not.toHaveProperty('id')
|
|
465
|
+
})
|
|
466
|
+
})
|
|
467
|
+
|
|
468
|
+
it('should return undefined when authorizeGetEntity is set and entity does not exist', async () => {
|
|
469
|
+
await usingAsync(new Injector(), async (i) => {
|
|
470
|
+
const authorizeGetEntity = vi.fn(async () => ({ isAllowed: true, message: '' }) as AuthorizationResult)
|
|
471
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
472
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeGetEntity })
|
|
473
|
+
|
|
474
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
475
|
+
const result = await dataSet.get(i, 999)
|
|
476
|
+
expect(result).toBeUndefined()
|
|
477
|
+
expect(authorizeGetEntity).not.toHaveBeenCalled()
|
|
478
|
+
})
|
|
479
|
+
})
|
|
450
480
|
})
|
|
451
481
|
describe('remove', () => {
|
|
452
482
|
it('should remove the entity if no settings are provided', async () => {
|
|
@@ -544,5 +574,73 @@ describe('DataSet', () => {
|
|
|
544
574
|
await dataSet.remove(i, 1)
|
|
545
575
|
})
|
|
546
576
|
})
|
|
577
|
+
|
|
578
|
+
it('should remove multiple entities at once', async () => {
|
|
579
|
+
await usingAsync(new Injector(), async (i) => {
|
|
580
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
581
|
+
getRepository(i).createDataSet(TestClass, 'id')
|
|
582
|
+
|
|
583
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
584
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' }, { id: 3, value: 'c' })
|
|
585
|
+
await dataSet.remove(i, 1, 3)
|
|
586
|
+
const count = await dataSet.count(i)
|
|
587
|
+
expect(count).toBe(1)
|
|
588
|
+
const remaining = await dataSet.get(i, 2)
|
|
589
|
+
expect(remaining?.value).toBe('b')
|
|
590
|
+
})
|
|
591
|
+
})
|
|
592
|
+
|
|
593
|
+
it('should emit onEntityRemoved for each key when removing multiple entities', async () => {
|
|
594
|
+
await usingAsync(new Injector(), async (i) => {
|
|
595
|
+
const removedKeys: number[] = []
|
|
596
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
597
|
+
getRepository(i).createDataSet(TestClass, 'id')
|
|
598
|
+
|
|
599
|
+
getRepository(i)
|
|
600
|
+
.getDataSetFor(TestClass, 'id')
|
|
601
|
+
.subscribe('onEntityRemoved', ({ key }) => {
|
|
602
|
+
removedKeys.push(key)
|
|
603
|
+
})
|
|
604
|
+
|
|
605
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
606
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' })
|
|
607
|
+
await dataSet.remove(i, 1, 2)
|
|
608
|
+
expect(removedKeys).toEqual([1, 2])
|
|
609
|
+
})
|
|
610
|
+
})
|
|
611
|
+
|
|
612
|
+
it('should authorize each entity when removing multiple with authorizeRemoveEntity', async () => {
|
|
613
|
+
await usingAsync(new Injector(), async (i) => {
|
|
614
|
+
const authorizeRemoveEntity = vi.fn(async () => ({ isAllowed: true, message: '' }) as AuthorizationResult)
|
|
615
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
616
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeRemoveEntity })
|
|
617
|
+
|
|
618
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
619
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' })
|
|
620
|
+
await dataSet.remove(i, 1, 2)
|
|
621
|
+
expect(authorizeRemoveEntity).toHaveBeenCalledTimes(2)
|
|
622
|
+
const count = await dataSet.count(i)
|
|
623
|
+
expect(count).toBe(0)
|
|
624
|
+
})
|
|
625
|
+
})
|
|
626
|
+
|
|
627
|
+
it('should not remove any entity if authorizeRemoveEntity fails for one (all-or-nothing)', async () => {
|
|
628
|
+
await usingAsync(new Injector(), async (i) => {
|
|
629
|
+
const authorizeRemoveEntity = vi.fn(async ({ entity }: { entity: TestClass }) => {
|
|
630
|
+
if (entity.id === 2) {
|
|
631
|
+
return { isAllowed: false, message: 'forbidden' } as AuthorizationResult
|
|
632
|
+
}
|
|
633
|
+
return { isAllowed: true } as AuthorizationResult
|
|
634
|
+
})
|
|
635
|
+
addStore(i, new InMemoryStore({ model: TestClass, primaryKey: 'id' }))
|
|
636
|
+
getRepository(i).createDataSet(TestClass, 'id', { authorizeRemoveEntity })
|
|
637
|
+
|
|
638
|
+
const dataSet = getDataSetFor(i, TestClass, 'id')
|
|
639
|
+
await dataSet.add(i, { id: 1, value: 'a' }, { id: 2, value: 'b' }, { id: 3, value: 'c' })
|
|
640
|
+
await expect(dataSet.remove(i, 1, 2, 3)).rejects.toThrow(AuthorizationError)
|
|
641
|
+
const count = await dataSet.count(i)
|
|
642
|
+
expect(count).toBe(3)
|
|
643
|
+
})
|
|
644
|
+
})
|
|
547
645
|
})
|
|
548
646
|
})
|
package/src/helpers.ts
CHANGED
|
@@ -9,11 +9,35 @@ import { Repository } from './repository.js'
|
|
|
9
9
|
export const getRepository = (injector: Injector) => injector.getInstance(Repository)
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Gets a DataSet for a specific model from the repository
|
|
12
|
+
* Gets a DataSet for a specific model from the repository.
|
|
13
|
+
*
|
|
14
|
+
* The DataSet is the recommended way to perform all entity mutations (add, update, remove).
|
|
15
|
+
* Writing through the DataSet ensures that authorization, modification hooks, and change events
|
|
16
|
+
* are properly triggered -- which is required for features like entity sync.
|
|
17
|
+
*
|
|
18
|
+
* For server-side or background operations that don't originate from an HTTP request,
|
|
19
|
+
* use {@link useSystemIdentityContext} to create a scoped child injector with elevated privileges.
|
|
20
|
+
*
|
|
13
21
|
* @param injector The Injector instance
|
|
14
22
|
* @param model The Model
|
|
15
23
|
* @param primaryKey The Primary Key field
|
|
16
24
|
* @returns A Repository DataSet for a specific model
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { useSystemIdentityContext } from '@furystack/core'
|
|
29
|
+
* import { getDataSetFor } from '@furystack/repository'
|
|
30
|
+
* import { usingAsync } from '@furystack/utils'
|
|
31
|
+
*
|
|
32
|
+
* // In a background job or service
|
|
33
|
+
* await usingAsync(
|
|
34
|
+
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
35
|
+
* async (systemInjector) => {
|
|
36
|
+
* const dataSet = getDataSetFor(systemInjector, MyModel, 'id')
|
|
37
|
+
* await dataSet.add(systemInjector, newEntity)
|
|
38
|
+
* },
|
|
39
|
+
* )
|
|
40
|
+
* ```
|
|
17
41
|
*/
|
|
18
42
|
export const getDataSetFor = <T, TPrimaryKey extends keyof T>(
|
|
19
43
|
injector: Injector,
|