@furystack/repository 11.0.0 → 11.0.2
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 +21 -0
- package/esm/data-set-setting.d.ts +30 -44
- package/esm/data-set-setting.d.ts.map +1 -1
- package/esm/data-set.d.ts +17 -68
- package/esm/data-set.d.ts.map +1 -1
- package/esm/data-set.js +18 -69
- package/esm/data-set.js.map +1 -1
- package/esm/data-set.spec.js.map +1 -1
- package/esm/define-data-set.d.ts +8 -26
- package/esm/define-data-set.d.ts.map +1 -1
- package/esm/define-data-set.js +5 -15
- package/esm/define-data-set.js.map +1 -1
- package/esm/helpers.d.ts +5 -21
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +5 -21
- package/esm/helpers.js.map +1 -1
- package/package.json +6 -6
- package/src/data-set-setting.ts +32 -46
- package/src/data-set.spec.ts +1 -0
- package/src/data-set.ts +28 -72
- package/src/define-data-set.ts +9 -27
- package/src/helpers.ts +5 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [11.0.2] - 2026-06-05
|
|
4
|
+
|
|
5
|
+
### 👷 CI
|
|
6
|
+
|
|
7
|
+
- Raised the minimum supported Node.js to `>=24.0.0` (Node 24 LTS) in `engines`, dropping Node 22.
|
|
8
|
+
|
|
9
|
+
### ⬆️ Dependencies
|
|
10
|
+
|
|
11
|
+
- Bumped dev `vitest` to `^4.1.8`. No source changes — dev-tooling bump only.
|
|
12
|
+
|
|
13
|
+
## [11.0.1] - 2026-05-21
|
|
14
|
+
|
|
15
|
+
### 📚 Documentation
|
|
16
|
+
|
|
17
|
+
- Rewrote JSDoc on `DataSet`, `DataSetSetting`, `defineDataSet`, and the helpers to follow the new value-test guidance: dropped restate-the-type narration, kept intent / trade-offs / constraints around authorization, validation, and the lifecycle hooks.
|
|
18
|
+
|
|
19
|
+
### ⬆️ Dependencies
|
|
20
|
+
|
|
21
|
+
- Bump dev `vitest` to `^4.1.5`.
|
|
22
|
+
- Bumped `vitest` to `^4.1.7`. No source changes — dev-tooling bump only.
|
|
23
|
+
|
|
3
24
|
## [11.0.0] - 2026-04-25
|
|
4
25
|
|
|
5
26
|
### 💥 Breaking Changes
|
|
@@ -1,98 +1,84 @@
|
|
|
1
1
|
import type { FindOptions, PhysicalStore, WithOptionalId } from '@furystack/core';
|
|
2
2
|
import type { Injector } from '@furystack/inject';
|
|
3
|
-
/**
|
|
4
|
-
* The result model returned by authorizers
|
|
5
|
-
*/
|
|
3
|
+
/** Discriminated union returned by authorizer callbacks. */
|
|
6
4
|
export type AuthorizationResult = SuccessfullyValidationResult | FailedValidationResult;
|
|
7
5
|
export interface SuccessfullyValidationResult {
|
|
8
|
-
/**
|
|
9
|
-
* Indicates if the validation was successful
|
|
10
|
-
*/
|
|
11
6
|
isAllowed: true;
|
|
12
7
|
}
|
|
13
8
|
export interface FailedValidationResult {
|
|
14
|
-
/**
|
|
15
|
-
* Indicates if the validation was successful
|
|
16
|
-
*/
|
|
17
9
|
isAllowed: false;
|
|
18
|
-
/**
|
|
19
|
-
* The error message string
|
|
20
|
-
*/
|
|
10
|
+
/** Surfaced as the message of the thrown {@link AuthorizationError}. */
|
|
21
11
|
message: string;
|
|
22
12
|
}
|
|
23
13
|
/**
|
|
24
|
-
*
|
|
14
|
+
* Configuration for a {@link DataSet}: backing store + authorization +
|
|
15
|
+
* modification hooks + filter post-processing. Every callback is optional —
|
|
16
|
+
* an empty `DataSetSettings` performs no checks and forwards calls straight
|
|
17
|
+
* to the physical store.
|
|
18
|
+
*
|
|
19
|
+
* Authorization callbacks come in two flavours:
|
|
20
|
+
*
|
|
21
|
+
* - `authorizeX` — runs **before** the entity is loaded. Use for cheap,
|
|
22
|
+
* identity-only checks ("is the user logged in?", "is the user an admin?").
|
|
23
|
+
* When omitted, no pre-check is performed.
|
|
24
|
+
* - `authorizeXEntity` — runs **after** the entity is loaded, with the
|
|
25
|
+
* loaded entity in scope. Use for ownership / row-level checks. Missing
|
|
26
|
+
* entities skip the per-entity check entirely.
|
|
27
|
+
*
|
|
28
|
+
* A callback returning `{ isAllowed: false }` makes the operation throw
|
|
29
|
+
* {@link AuthorizationError}.
|
|
25
30
|
*/
|
|
26
31
|
export interface DataSetSettings<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> {
|
|
27
|
-
/**
|
|
28
|
-
* An instance of a physical store
|
|
29
|
-
*/
|
|
30
32
|
physicalStore: PhysicalStore<T, TPrimaryKey, TWritableData>;
|
|
31
|
-
/**
|
|
32
|
-
* Authorizes the entity creation
|
|
33
|
-
*/
|
|
33
|
+
/** Pre-persist authorization for `add`. */
|
|
34
34
|
authorizeAdd?: (options: {
|
|
35
35
|
injector: Injector;
|
|
36
36
|
entity: TWritableData;
|
|
37
37
|
}) => Promise<AuthorizationResult>;
|
|
38
|
-
/**
|
|
39
|
-
* modifies an entity before persisting on creation
|
|
40
|
-
*/
|
|
38
|
+
/** Pre-persist mutation for `add` (default fields, hashing, normalisation). */
|
|
41
39
|
modifyOnAdd?: (options: {
|
|
42
40
|
injector: Injector;
|
|
43
41
|
entity: TWritableData;
|
|
44
42
|
}) => Promise<TWritableData>;
|
|
45
|
-
/**
|
|
46
|
-
* Authorizes entity updates (before the entity gets loaded from the store)
|
|
47
|
-
*/
|
|
43
|
+
/** Pre-load authorization for `update`. Sees the change, not the entity. */
|
|
48
44
|
authorizeUpdate?: (options: {
|
|
49
45
|
injector: Injector;
|
|
50
46
|
change: Partial<T>;
|
|
51
47
|
}) => Promise<AuthorizationResult>;
|
|
52
|
-
/**
|
|
53
|
-
* Authorizes entity updates per loaded entity
|
|
54
|
-
*/
|
|
48
|
+
/** Post-load authorization for `update`. Sees both the loaded entity and the change. */
|
|
55
49
|
authorizeUpdateEntity?: (options: {
|
|
56
50
|
injector: Injector;
|
|
57
51
|
entity: T;
|
|
58
52
|
change: Partial<T>;
|
|
59
53
|
}) => Promise<AuthorizationResult>;
|
|
60
|
-
/**
|
|
61
|
-
* modifies an entity before persisting on update
|
|
62
|
-
*/
|
|
54
|
+
/** Pre-persist mutation for `update`. */
|
|
63
55
|
modifyOnUpdate?: (options: {
|
|
64
56
|
injector: Injector;
|
|
65
57
|
id: T[keyof T];
|
|
66
58
|
entity: Partial<T>;
|
|
67
59
|
}) => Promise<Partial<T>>;
|
|
68
|
-
/**
|
|
69
|
-
* Authorizes entity removal (before the entity gets loaded from the store)
|
|
70
|
-
*/
|
|
60
|
+
/** Pre-load authorization for `remove`. */
|
|
71
61
|
authorizeRemove?: (options: {
|
|
72
62
|
injector: Injector;
|
|
73
63
|
}) => Promise<AuthorizationResult>;
|
|
74
|
-
/**
|
|
75
|
-
* Authorizes entity removal per loaded entity
|
|
76
|
-
*/
|
|
64
|
+
/** Post-load authorization for `remove`, per loaded entity. */
|
|
77
65
|
authorizeRemoveEntity?: (options: {
|
|
78
66
|
injector: Injector;
|
|
79
67
|
entity: T;
|
|
80
68
|
}) => Promise<AuthorizationResult>;
|
|
81
|
-
/**
|
|
82
|
-
* Authorizes entity retrieval without entity loading
|
|
83
|
-
*/
|
|
69
|
+
/** Pre-load authorization for `get` / `find` / `count`. No entity in scope. */
|
|
84
70
|
authorizeGet?: (options: {
|
|
85
71
|
injector: Injector;
|
|
86
72
|
}) => Promise<AuthorizationResult>;
|
|
87
|
-
/**
|
|
88
|
-
* Authorizes entity retrieval
|
|
89
|
-
*/
|
|
73
|
+
/** Post-load authorization for `get`, per loaded entity. */
|
|
90
74
|
authorizeGetEntity?: (options: {
|
|
91
75
|
injector: Injector;
|
|
92
76
|
entity: T;
|
|
93
77
|
}) => Promise<AuthorizationResult>;
|
|
94
78
|
/**
|
|
95
|
-
*
|
|
79
|
+
* Filter post-processor. Receives the caller's {@link FindOptions} and
|
|
80
|
+
* returns a (potentially augmented) one. Use to inject mandatory clauses
|
|
81
|
+
* (tenant scoping, soft-delete masks) the caller cannot bypass.
|
|
96
82
|
*/
|
|
97
83
|
addFilter?: <TFields extends Array<keyof T>>(options: {
|
|
98
84
|
injector: Injector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-set-setting.d.ts","sourceRoot":"","sources":["../src/data-set-setting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"data-set-setting.d.ts","sourceRoot":"","sources":["../src/data-set-setting.ts"],"names":[],"mappings":"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"}
|
package/esm/data-set.d.ts
CHANGED
|
@@ -3,30 +3,25 @@ import type { Injector } from '@furystack/inject';
|
|
|
3
3
|
import { EventHub, type ListenerErrorPayload } from '@furystack/utils';
|
|
4
4
|
import type { DataSetSettings } from './data-set-setting.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Authorization-enforcing wrapper around a {@link PhysicalStore}. The
|
|
7
|
+
* recommended write gateway for application code — `furystack/no-direct-store-token`
|
|
8
|
+
* enforces this. Each mutation runs the relevant `authorize*` and
|
|
9
|
+
* `modify*` callbacks from {@link DataSetSettings}, persists, then emits
|
|
10
|
+
* `onEntityAdded` / `onEntityUpdated` / `onEntityRemoved` (consumed by
|
|
11
|
+
* entity sync, audit logs).
|
|
8
12
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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.
|
|
13
|
+
* Mutating methods take an `injector` parameter to surface caller identity
|
|
14
|
+
* to the authorizers. For server-side / background work without an HTTP
|
|
15
|
+
* request, wrap the injector with `useSystemIdentityContext` from
|
|
16
|
+
* `@furystack/core`.
|
|
17
17
|
*
|
|
18
18
|
* @example
|
|
19
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
20
|
* await usingAsync(
|
|
26
21
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
27
22
|
* async (systemInjector) => {
|
|
28
|
-
* const dataSet = getDataSetFor(systemInjector,
|
|
29
|
-
* await dataSet.add(systemInjector,
|
|
23
|
+
* const dataSet = getDataSetFor(systemInjector, UserDataSet)
|
|
24
|
+
* await dataSet.add(systemInjector, { username: 'alice', roles: [] })
|
|
30
25
|
* },
|
|
31
26
|
* )
|
|
32
27
|
* ```
|
|
@@ -48,64 +43,18 @@ export declare class DataSet<T, TPrimaryKey extends keyof T, TWritableData = Wit
|
|
|
48
43
|
onListenerError: ListenerErrorPayload;
|
|
49
44
|
}> implements Disposable {
|
|
50
45
|
readonly settings: DataSetSettings<T, TPrimaryKey, TWritableData>;
|
|
51
|
-
/**
|
|
52
|
-
* Primary key of the contained entity
|
|
53
|
-
*/
|
|
54
46
|
primaryKey: TPrimaryKey;
|
|
55
|
-
/**
|
|
56
|
-
* Adds an entity to the DataSet.
|
|
57
|
-
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
58
|
-
* and emits an `onEntityAdded` event for each created entity.
|
|
59
|
-
* @param injector The injector from the caller's context. For server-side or background operations
|
|
60
|
-
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
61
|
-
* @param entities The entities to add
|
|
62
|
-
* @returns The CreateResult with the created entities
|
|
63
|
-
*/
|
|
64
47
|
add(injector: Injector, ...entities: TWritableData[]): Promise<CreateResult<T>>;
|
|
65
|
-
/**
|
|
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}.
|
|
71
|
-
* @param id The identifier of the entity
|
|
72
|
-
* @param change The update
|
|
73
|
-
*/
|
|
74
48
|
update(injector: Injector, id: T[TPrimaryKey], change: Partial<T>): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* Returns a Promise with the entity count
|
|
77
|
-
* @param injector The Injector from the context
|
|
78
|
-
* @param filter The Filter that will be applied
|
|
79
|
-
* @returns the Count
|
|
80
|
-
*/
|
|
81
49
|
count(injector: Injector, filter?: FilterType<T>): Promise<number>;
|
|
82
|
-
/**
|
|
83
|
-
* Returns a filtered subset of the entity
|
|
84
|
-
* @param injector The Injector from the context
|
|
85
|
-
* @param filter The Filter definition
|
|
86
|
-
* @returns A result with the current items
|
|
87
|
-
*/
|
|
88
50
|
find<TFields extends Array<keyof T>>(injector: Injector, filter: FindOptions<T, TFields>): Promise<Array<PartialResult<T, TFields>>>;
|
|
89
|
-
/**
|
|
90
|
-
* Returns an entity based on its primary key
|
|
91
|
-
* @param injector The injector from the context
|
|
92
|
-
* @param key The identifier of the entity
|
|
93
|
-
* @param select A field list used for projection
|
|
94
|
-
* @returns An item with the current unique key or Undefined
|
|
95
|
-
*/
|
|
96
51
|
get<TSelect extends Array<keyof T>>(injector: Injector, key: T[TPrimaryKey], select?: TSelect): Promise<PartialResult<T, TSelect> | undefined>;
|
|
97
52
|
/**
|
|
98
|
-
* Removes
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* are authorized. Keys that don't match any entity are silently forwarded to the
|
|
104
|
-
* physical store's `remove()` call.
|
|
105
|
-
* @param injector The injector from the caller's context. For server-side or background operations
|
|
106
|
-
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
107
|
-
* @param keys The primary keys of the entities to remove
|
|
108
|
-
* @returns A promise that will be resolved / rejected based on the remove success
|
|
53
|
+
* Removes by primary key. Pre-load `authorizeRemove` and per-entity
|
|
54
|
+
* `authorizeRemoveEntity` are all-or-nothing — any rejection aborts the
|
|
55
|
+
* whole batch before any persist call. When `authorizeRemoveEntity` is
|
|
56
|
+
* configured, missing keys are silently forwarded to the physical store
|
|
57
|
+
* (no entity to authorize).
|
|
109
58
|
*/
|
|
110
59
|
remove(injector: Injector, ...keys: Array<T[TPrimaryKey]>): Promise<void>;
|
|
111
60
|
constructor(settings: DataSetSettings<T, TPrimaryKey, TWritableData>);
|
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,
|
|
1
|
+
{"version":3,"file":"data-set.d.ts","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EAEb,cAAc,EACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;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;IAC5D,eAAe,EAAE,oBAAoB,CAAA;CACtC,CACD,YAAW,UAAU;aA0IO,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;IAxI7E,UAAU,EAAE,WAAW,CAAA;IAEjB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAyB/E,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjF,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlE,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;IAW/B,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;;;;;;OAMG;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,49 +1,32 @@
|
|
|
1
1
|
import { AuthorizationError, selectFields } from '@furystack/core';
|
|
2
2
|
import { EventHub } from '@furystack/utils';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Authorization-enforcing wrapper around a {@link PhysicalStore}. The
|
|
5
|
+
* recommended write gateway for application code — `furystack/no-direct-store-token`
|
|
6
|
+
* enforces this. Each mutation runs the relevant `authorize*` and
|
|
7
|
+
* `modify*` callbacks from {@link DataSetSettings}, persists, then emits
|
|
8
|
+
* `onEntityAdded` / `onEntityUpdated` / `onEntityRemoved` (consumed by
|
|
9
|
+
* entity sync, audit logs).
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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.
|
|
11
|
+
* Mutating methods take an `injector` parameter to surface caller identity
|
|
12
|
+
* to the authorizers. For server-side / background work without an HTTP
|
|
13
|
+
* request, wrap the injector with `useSystemIdentityContext` from
|
|
14
|
+
* `@furystack/core`.
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
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
18
|
* await usingAsync(
|
|
24
19
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
25
20
|
* async (systemInjector) => {
|
|
26
|
-
* const dataSet = getDataSetFor(systemInjector,
|
|
27
|
-
* await dataSet.add(systemInjector,
|
|
21
|
+
* const dataSet = getDataSetFor(systemInjector, UserDataSet)
|
|
22
|
+
* await dataSet.add(systemInjector, { username: 'alice', roles: [] })
|
|
28
23
|
* },
|
|
29
24
|
* )
|
|
30
25
|
* ```
|
|
31
26
|
*/
|
|
32
27
|
export class DataSet extends EventHub {
|
|
33
28
|
settings;
|
|
34
|
-
/**
|
|
35
|
-
* Primary key of the contained entity
|
|
36
|
-
*/
|
|
37
29
|
primaryKey;
|
|
38
|
-
/**
|
|
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}.
|
|
44
|
-
* @param entities The entities to add
|
|
45
|
-
* @returns The CreateResult with the created entities
|
|
46
|
-
*/
|
|
47
30
|
async add(injector, ...entities) {
|
|
48
31
|
await Promise.all(entities.map(async (entity) => {
|
|
49
32
|
if (this.settings.authorizeAdd) {
|
|
@@ -62,15 +45,6 @@ export class DataSet extends EventHub {
|
|
|
62
45
|
});
|
|
63
46
|
return createResult;
|
|
64
47
|
}
|
|
65
|
-
/**
|
|
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}.
|
|
71
|
-
* @param id The identifier of the entity
|
|
72
|
-
* @param change The update
|
|
73
|
-
*/
|
|
74
48
|
async update(injector, id, change) {
|
|
75
49
|
if (this.settings.authorizeUpdate) {
|
|
76
50
|
const result = await this.settings.authorizeUpdate({ injector, change });
|
|
@@ -93,12 +67,6 @@ export class DataSet extends EventHub {
|
|
|
93
67
|
await this.settings.physicalStore.update(id, parsed);
|
|
94
68
|
this.emit('onEntityUpdated', { injector, change: parsed, id });
|
|
95
69
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Returns a Promise with the entity count
|
|
98
|
-
* @param injector The Injector from the context
|
|
99
|
-
* @param filter The Filter that will be applied
|
|
100
|
-
* @returns the Count
|
|
101
|
-
*/
|
|
102
70
|
async count(injector, filter) {
|
|
103
71
|
if (this.settings.authorizeGet) {
|
|
104
72
|
const result = await this.settings.authorizeGet({ injector });
|
|
@@ -108,12 +76,6 @@ export class DataSet extends EventHub {
|
|
|
108
76
|
}
|
|
109
77
|
return await this.settings.physicalStore.count(filter);
|
|
110
78
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Returns a filtered subset of the entity
|
|
113
|
-
* @param injector The Injector from the context
|
|
114
|
-
* @param filter The Filter definition
|
|
115
|
-
* @returns A result with the current items
|
|
116
|
-
*/
|
|
117
79
|
async find(injector, filter) {
|
|
118
80
|
if (this.settings.authorizeGet) {
|
|
119
81
|
const result = await this.settings.authorizeGet({ injector });
|
|
@@ -124,13 +86,6 @@ export class DataSet extends EventHub {
|
|
|
124
86
|
const parsedFilter = this.settings.addFilter ? await this.settings.addFilter({ injector, filter }) : filter;
|
|
125
87
|
return this.settings.physicalStore.find(parsedFilter);
|
|
126
88
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Returns an entity based on its primary key
|
|
129
|
-
* @param injector The injector from the context
|
|
130
|
-
* @param key The identifier of the entity
|
|
131
|
-
* @param select A field list used for projection
|
|
132
|
-
* @returns An item with the current unique key or Undefined
|
|
133
|
-
*/
|
|
134
89
|
async get(injector, key, select) {
|
|
135
90
|
if (this.settings.authorizeGet) {
|
|
136
91
|
const result = await this.settings.authorizeGet({ injector });
|
|
@@ -155,17 +110,11 @@ export class DataSet extends EventHub {
|
|
|
155
110
|
return await this.settings.physicalStore.get(key, select);
|
|
156
111
|
}
|
|
157
112
|
/**
|
|
158
|
-
* Removes
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
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
|
|
168
|
-
* @returns A promise that will be resolved / rejected based on the remove success
|
|
113
|
+
* Removes by primary key. Pre-load `authorizeRemove` and per-entity
|
|
114
|
+
* `authorizeRemoveEntity` are all-or-nothing — any rejection aborts the
|
|
115
|
+
* whole batch before any persist call. When `authorizeRemoveEntity` is
|
|
116
|
+
* configured, missing keys are silently forwarded to the physical store
|
|
117
|
+
* (no entity to authorize).
|
|
169
118
|
*/
|
|
170
119
|
async remove(injector, ...keys) {
|
|
171
120
|
if (keys.length === 0) {
|
|
@@ -182,7 +131,7 @@ export class DataSet extends EventHub {
|
|
|
182
131
|
filter: { [this.primaryKey]: { $in: keys } },
|
|
183
132
|
});
|
|
184
133
|
await Promise.all(entities.map(async (entity) => {
|
|
185
|
-
const removeResult = await this.settings.authorizeRemoveEntity({ injector, entity
|
|
134
|
+
const removeResult = await this.settings.authorizeRemoveEntity({ injector, entity });
|
|
186
135
|
if (!removeResult.isAllowed) {
|
|
187
136
|
throw new AuthorizationError(removeResult.message);
|
|
188
137
|
}
|
package/esm/data-set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-set.js","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-set.js","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"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"}
|
package/esm/data-set.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-set.spec.js","sourceRoot":"","sources":["../src/data-set.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-set.spec.js","sourceRoot":"","sources":["../src/data-set.spec.ts"],"names":[],"mappings":"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"}
|
package/esm/define-data-set.d.ts
CHANGED
|
@@ -31,38 +31,20 @@ export type DefineDataSetSettings<T, TPrimaryKey extends keyof T, TWritableData
|
|
|
31
31
|
*/
|
|
32
32
|
export type DefineDataSetOptions<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> = {
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
34
|
+
* Debug-only identifier. Token identity is established by the returned
|
|
35
|
+
* {@link DataSetToken} object reference, not this string.
|
|
36
36
|
*/
|
|
37
37
|
name: string;
|
|
38
|
-
/**
|
|
39
|
-
* The store this data set is backed by. Its `model` and `primaryKey` are
|
|
40
|
-
* propagated onto the returned token.
|
|
41
|
-
*/
|
|
38
|
+
/** Backing store; its `model` and `primaryKey` propagate to the returned token. */
|
|
42
39
|
store: StoreToken<T, TPrimaryKey>;
|
|
43
|
-
/**
|
|
44
|
-
* Authorizers, modification hooks and filter post-processors. Optional —
|
|
45
|
-
* a data set without settings performs no authorization and forwards
|
|
46
|
-
* operations straight to the physical store.
|
|
47
|
-
*/
|
|
48
40
|
settings?: NoInfer<DefineDataSetSettings<T, TPrimaryKey, TWritableData>>;
|
|
49
41
|
};
|
|
50
42
|
/**
|
|
51
|
-
* Defines a {@link DataSet}
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* 1. Resolves the backing physical store through the injector.
|
|
58
|
-
* 2. Constructs a {@link DataSet} with the supplied {@link DefineDataSetSettings}
|
|
59
|
-
* and that store.
|
|
60
|
-
* 3. Registers a disposal callback that clears the DataSet's event
|
|
61
|
-
* subscriptions when the owning injector is disposed.
|
|
62
|
-
*
|
|
63
|
-
* The token also carries the `model` and `primaryKey` of the backing store so
|
|
64
|
-
* that downstream tooling (entity sync, OpenAPI generators, test harnesses)
|
|
65
|
-
* can discover the dataset's shape without additional wiring.
|
|
43
|
+
* Defines a singleton {@link DataSet} token backed by a {@link StoreToken}.
|
|
44
|
+
* The token mirrors the store's `model` and `primaryKey` so reflection
|
|
45
|
+
* tools (entity sync, OpenAPI generators, test harnesses) can discover the
|
|
46
|
+
* dataset's shape from the token alone. Disposal of the owning injector
|
|
47
|
+
* tears down the dataset's event subscriptions.
|
|
66
48
|
*
|
|
67
49
|
* @example
|
|
68
50
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-data-set.d.ts","sourceRoot":"","sources":["../src/define-data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/F,OAAO,KAAK,EAAkB,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAkBvC;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,KAAK,CAC9G,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,EACtC,WAAW,CACZ,GAAG;IACF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;CACjC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,WAAW,SAAS,MAAM,CAAC,EAC3B,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAC5C,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI;IACjH;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ
|
|
1
|
+
{"version":3,"file":"define-data-set.d.ts","sourceRoot":"","sources":["../src/define-data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/F,OAAO,KAAK,EAAkB,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAkBvC;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,KAAK,CAC9G,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,EACtC,WAAW,CACZ,GAAG;IACF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;CACjC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,WAAW,SAAS,MAAM,CAAC,EAC3B,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAC5C,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI;IACjH;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,mFAAmF;IACnF,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;CACzE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,KAAK,CAAC,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAChH,SAAS,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,KAC3D,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAsB5C,CAAA"}
|
package/esm/define-data-set.js
CHANGED
|
@@ -12,21 +12,11 @@ import { DataSet } from './data-set.js';
|
|
|
12
12
|
*/
|
|
13
13
|
const resolvePhysicalStore = (ctx, store) => ctx.inject(store);
|
|
14
14
|
/**
|
|
15
|
-
* Defines a {@link DataSet}
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* 1. Resolves the backing physical store through the injector.
|
|
22
|
-
* 2. Constructs a {@link DataSet} with the supplied {@link DefineDataSetSettings}
|
|
23
|
-
* and that store.
|
|
24
|
-
* 3. Registers a disposal callback that clears the DataSet's event
|
|
25
|
-
* subscriptions when the owning injector is disposed.
|
|
26
|
-
*
|
|
27
|
-
* The token also carries the `model` and `primaryKey` of the backing store so
|
|
28
|
-
* that downstream tooling (entity sync, OpenAPI generators, test harnesses)
|
|
29
|
-
* can discover the dataset's shape without additional wiring.
|
|
15
|
+
* Defines a singleton {@link DataSet} token backed by a {@link StoreToken}.
|
|
16
|
+
* The token mirrors the store's `model` and `primaryKey` so reflection
|
|
17
|
+
* tools (entity sync, OpenAPI generators, test harnesses) can discover the
|
|
18
|
+
* dataset's shape from the token alone. Disposal of the owning injector
|
|
19
|
+
* tears down the dataset's event subscriptions.
|
|
30
20
|
*
|
|
31
21
|
* @example
|
|
32
22
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-data-set.js","sourceRoot":"","sources":["../src/define-data-set.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;GASG;AACH,MAAM,oBAAoB,GAAG,CAC3B,GAAgC,EAChC,KAAiC,EACa,EAAE,CAChD,GAAG,CAAC,MAAM,CAAC,KAAK,CAA4D,CAAA;
|
|
1
|
+
{"version":3,"file":"define-data-set.js","sourceRoot":"","sources":["../src/define-data-set.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;GASG;AACH,MAAM,oBAAoB,GAAG,CAC3B,GAAgC,EAChC,KAAiC,EACa,EAAE,CAChD,GAAG,CAAC,MAAM,CAAC,KAAK,CAA4D,CAAA;AAiD9E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA4D,EACf,EAAE;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,GAAgC,EAAE,EAAE;YAC5C,MAAM,aAAa,GAAG,oBAAoB,CAAgC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAC7F,MAAM,OAAO,GAAG,IAAI,OAAO,CAAgC;gBACzD,GAAG,OAAO,CAAC,QAAQ;gBACnB,aAAa;aACd,CAAC,CAAA;YACF,qEAAqE;YACrE,uEAAuE;YACvE,0DAA0D;YAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC9C,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAC,CAAA;IACF,MAAM,MAAM,GAAgD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC/E,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;QAC1B,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU;KACrC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
package/esm/helpers.d.ts
CHANGED
|
@@ -3,30 +3,14 @@ import type { Injector } from '@furystack/inject';
|
|
|
3
3
|
import type { DataSet } from './data-set.js';
|
|
4
4
|
import type { DataSetToken } from './define-data-set.js';
|
|
5
5
|
/**
|
|
6
|
-
* Resolves the {@link DataSet}
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* triggered. Prefer this over direct physical-store access in application
|
|
12
|
-
* code.
|
|
13
|
-
*
|
|
14
|
-
* For server-side or background operations that don't originate from an HTTP
|
|
15
|
-
* request, use
|
|
16
|
-
* {@link import('@furystack/core').useSystemIdentityContext | useSystemIdentityContext}
|
|
17
|
-
* to create a scoped child injector with elevated privileges before calling
|
|
18
|
-
* this helper.
|
|
19
|
-
*
|
|
20
|
-
* @param injector - Any injector in the scope chain.
|
|
21
|
-
* @param token - The data-set token created by `defineDataSet`.
|
|
22
|
-
* @returns The cached {@link DataSet} instance.
|
|
6
|
+
* Resolves the {@link DataSet} for `token` on `injector`. The preferred
|
|
7
|
+
* write gateway for application code — `furystack/no-direct-store-token`
|
|
8
|
+
* forbids resolving the underlying `StoreToken` directly. For server-side
|
|
9
|
+
* or background work, wrap `injector` with `useSystemIdentityContext` from
|
|
10
|
+
* `@furystack/core` to obtain an elevated identity before calling this.
|
|
23
11
|
*
|
|
24
12
|
* @example
|
|
25
13
|
* ```ts
|
|
26
|
-
* import { useSystemIdentityContext } from '@furystack/core'
|
|
27
|
-
* import { getDataSetFor } from '@furystack/repository'
|
|
28
|
-
* import { usingAsync } from '@furystack/utils'
|
|
29
|
-
*
|
|
30
14
|
* await usingAsync(
|
|
31
15
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
32
16
|
* async (systemInjector) => {
|
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,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAC1G,UAAU,QAAQ,EAClB,OAAO,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,KACjD,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAwB,CAAA"}
|
package/esm/helpers.js
CHANGED
|
@@ -1,28 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolves the {@link DataSet}
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* triggered. Prefer this over direct physical-store access in application
|
|
8
|
-
* code.
|
|
9
|
-
*
|
|
10
|
-
* For server-side or background operations that don't originate from an HTTP
|
|
11
|
-
* request, use
|
|
12
|
-
* {@link import('@furystack/core').useSystemIdentityContext | useSystemIdentityContext}
|
|
13
|
-
* to create a scoped child injector with elevated privileges before calling
|
|
14
|
-
* this helper.
|
|
15
|
-
*
|
|
16
|
-
* @param injector - Any injector in the scope chain.
|
|
17
|
-
* @param token - The data-set token created by `defineDataSet`.
|
|
18
|
-
* @returns The cached {@link DataSet} instance.
|
|
2
|
+
* Resolves the {@link DataSet} for `token` on `injector`. The preferred
|
|
3
|
+
* write gateway for application code — `furystack/no-direct-store-token`
|
|
4
|
+
* forbids resolving the underlying `StoreToken` directly. For server-side
|
|
5
|
+
* or background work, wrap `injector` with `useSystemIdentityContext` from
|
|
6
|
+
* `@furystack/core` to obtain an elevated identity before calling this.
|
|
19
7
|
*
|
|
20
8
|
* @example
|
|
21
9
|
* ```ts
|
|
22
|
-
* import { useSystemIdentityContext } from '@furystack/core'
|
|
23
|
-
* import { getDataSetFor } from '@furystack/repository'
|
|
24
|
-
* import { usingAsync } from '@furystack/utils'
|
|
25
|
-
*
|
|
26
10
|
* await usingAsync(
|
|
27
11
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
28
12
|
* async (systemInjector) => {
|
package/esm/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAkB,EAClB,KAAkD,EACV,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/repository",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.2",
|
|
4
4
|
"description": "Repository implementation for FuryStack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -38,16 +38,16 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://github.com/furystack/furystack",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@furystack/core": "^17.
|
|
42
|
-
"@furystack/inject": "^13.0.
|
|
43
|
-
"@furystack/utils": "^9.0.
|
|
41
|
+
"@furystack/core": "^17.1.1",
|
|
42
|
+
"@furystack/inject": "^13.0.2",
|
|
43
|
+
"@furystack/utils": "^9.0.2"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^6.0.3",
|
|
47
|
-
"vitest": "^4.1.
|
|
47
|
+
"vitest": "^4.1.8"
|
|
48
48
|
},
|
|
49
49
|
"engines": {
|
|
50
|
-
"node": ">=
|
|
50
|
+
"node": ">=24.0.0"
|
|
51
51
|
},
|
|
52
52
|
"sideEffects": false
|
|
53
53
|
}
|
package/src/data-set-setting.ts
CHANGED
|
@@ -1,90 +1,76 @@
|
|
|
1
|
-
import type { FindOptions, PhysicalStore, WithOptionalId } from '@furystack/core'
|
|
1
|
+
import type { AuthorizationError, FindOptions, PhysicalStore, WithOptionalId } from '@furystack/core'
|
|
2
2
|
import type { Injector } from '@furystack/inject'
|
|
3
|
+
import type { DataSet } from './data-set.js'
|
|
3
4
|
|
|
4
|
-
/**
|
|
5
|
-
* The result model returned by authorizers
|
|
6
|
-
*/
|
|
5
|
+
/** Discriminated union returned by authorizer callbacks. */
|
|
7
6
|
export type AuthorizationResult = SuccessfullyValidationResult | FailedValidationResult
|
|
8
7
|
|
|
9
8
|
export interface SuccessfullyValidationResult {
|
|
10
|
-
/**
|
|
11
|
-
* Indicates if the validation was successful
|
|
12
|
-
*/
|
|
13
9
|
isAllowed: true
|
|
14
10
|
}
|
|
15
11
|
|
|
16
12
|
export interface FailedValidationResult {
|
|
17
|
-
/**
|
|
18
|
-
* Indicates if the validation was successful
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
13
|
isAllowed: false
|
|
22
|
-
/**
|
|
23
|
-
* The error message string
|
|
24
|
-
*/
|
|
14
|
+
/** Surfaced as the message of the thrown {@link AuthorizationError}. */
|
|
25
15
|
message: string
|
|
26
16
|
}
|
|
27
17
|
|
|
28
18
|
/**
|
|
29
|
-
*
|
|
19
|
+
* Configuration for a {@link DataSet}: backing store + authorization +
|
|
20
|
+
* modification hooks + filter post-processing. Every callback is optional —
|
|
21
|
+
* an empty `DataSetSettings` performs no checks and forwards calls straight
|
|
22
|
+
* to the physical store.
|
|
23
|
+
*
|
|
24
|
+
* Authorization callbacks come in two flavours:
|
|
25
|
+
*
|
|
26
|
+
* - `authorizeX` — runs **before** the entity is loaded. Use for cheap,
|
|
27
|
+
* identity-only checks ("is the user logged in?", "is the user an admin?").
|
|
28
|
+
* When omitted, no pre-check is performed.
|
|
29
|
+
* - `authorizeXEntity` — runs **after** the entity is loaded, with the
|
|
30
|
+
* loaded entity in scope. Use for ownership / row-level checks. Missing
|
|
31
|
+
* entities skip the per-entity check entirely.
|
|
32
|
+
*
|
|
33
|
+
* A callback returning `{ isAllowed: false }` makes the operation throw
|
|
34
|
+
* {@link AuthorizationError}.
|
|
30
35
|
*/
|
|
31
36
|
export interface DataSetSettings<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> {
|
|
32
|
-
/**
|
|
33
|
-
* An instance of a physical store
|
|
34
|
-
*/
|
|
35
37
|
physicalStore: PhysicalStore<T, TPrimaryKey, TWritableData>
|
|
36
38
|
|
|
37
|
-
/**
|
|
38
|
-
* Authorizes the entity creation
|
|
39
|
-
*/
|
|
39
|
+
/** Pre-persist authorization for `add`. */
|
|
40
40
|
authorizeAdd?: (options: { injector: Injector; entity: TWritableData }) => Promise<AuthorizationResult>
|
|
41
41
|
|
|
42
|
-
/**
|
|
43
|
-
* modifies an entity before persisting on creation
|
|
44
|
-
*/
|
|
42
|
+
/** Pre-persist mutation for `add` (default fields, hashing, normalisation). */
|
|
45
43
|
modifyOnAdd?: (options: { injector: Injector; entity: TWritableData }) => Promise<TWritableData>
|
|
46
44
|
|
|
47
|
-
/**
|
|
48
|
-
* Authorizes entity updates (before the entity gets loaded from the store)
|
|
49
|
-
*/
|
|
45
|
+
/** Pre-load authorization for `update`. Sees the change, not the entity. */
|
|
50
46
|
authorizeUpdate?: (options: { injector: Injector; change: Partial<T> }) => Promise<AuthorizationResult>
|
|
51
47
|
|
|
52
|
-
/**
|
|
53
|
-
* Authorizes entity updates per loaded entity
|
|
54
|
-
*/
|
|
48
|
+
/** Post-load authorization for `update`. Sees both the loaded entity and the change. */
|
|
55
49
|
authorizeUpdateEntity?: (options: {
|
|
56
50
|
injector: Injector
|
|
57
51
|
entity: T
|
|
58
52
|
change: Partial<T>
|
|
59
53
|
}) => Promise<AuthorizationResult>
|
|
60
54
|
|
|
61
|
-
/**
|
|
62
|
-
* modifies an entity before persisting on update
|
|
63
|
-
*/
|
|
55
|
+
/** Pre-persist mutation for `update`. */
|
|
64
56
|
modifyOnUpdate?: (options: { injector: Injector; id: T[keyof T]; entity: Partial<T> }) => Promise<Partial<T>>
|
|
65
57
|
|
|
66
|
-
/**
|
|
67
|
-
* Authorizes entity removal (before the entity gets loaded from the store)
|
|
68
|
-
*/
|
|
58
|
+
/** Pre-load authorization for `remove`. */
|
|
69
59
|
authorizeRemove?: (options: { injector: Injector }) => Promise<AuthorizationResult>
|
|
70
60
|
|
|
71
|
-
/**
|
|
72
|
-
* Authorizes entity removal per loaded entity
|
|
73
|
-
*/
|
|
61
|
+
/** Post-load authorization for `remove`, per loaded entity. */
|
|
74
62
|
authorizeRemoveEntity?: (options: { injector: Injector; entity: T }) => Promise<AuthorizationResult>
|
|
75
63
|
|
|
76
|
-
/**
|
|
77
|
-
* Authorizes entity retrieval without entity loading
|
|
78
|
-
*/
|
|
64
|
+
/** Pre-load authorization for `get` / `find` / `count`. No entity in scope. */
|
|
79
65
|
authorizeGet?: (options: { injector: Injector }) => Promise<AuthorizationResult>
|
|
80
66
|
|
|
81
|
-
/**
|
|
82
|
-
* Authorizes entity retrieval
|
|
83
|
-
*/
|
|
67
|
+
/** Post-load authorization for `get`, per loaded entity. */
|
|
84
68
|
authorizeGetEntity?: (options: { injector: Injector; entity: T }) => Promise<AuthorizationResult>
|
|
85
69
|
|
|
86
70
|
/**
|
|
87
|
-
*
|
|
71
|
+
* Filter post-processor. Receives the caller's {@link FindOptions} and
|
|
72
|
+
* returns a (potentially augmented) one. Use to inject mandatory clauses
|
|
73
|
+
* (tenant scoping, soft-delete masks) the caller cannot bypass.
|
|
88
74
|
*/
|
|
89
75
|
addFilter?: <TFields extends Array<keyof T>>(options: {
|
|
90
76
|
injector: Injector
|
package/src/data-set.spec.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion -- false positives: discriminated `AuthorizationResult` mocks need explicit casts so vi.fn return types match the union (rule's tsutils-based check disagrees with tsc) */
|
|
1
2
|
import type { StoreToken, WithOptionalId } from '@furystack/core'
|
|
2
3
|
import { AuthorizationError, defineStore, InMemoryStore } from '@furystack/core'
|
|
3
4
|
import { createInjector, type Injector } from '@furystack/inject'
|
package/src/data-set.ts
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
CreateResult,
|
|
3
|
+
FilterType,
|
|
4
|
+
FindOptions,
|
|
5
|
+
PartialResult,
|
|
6
|
+
PhysicalStore,
|
|
7
|
+
WithOptionalId,
|
|
8
|
+
} from '@furystack/core'
|
|
2
9
|
import { AuthorizationError, selectFields } from '@furystack/core'
|
|
3
10
|
import type { Injector } from '@furystack/inject'
|
|
4
11
|
import { EventHub, type ListenerErrorPayload } from '@furystack/utils'
|
|
5
12
|
import type { DataSetSettings } from './data-set-setting.js'
|
|
6
13
|
|
|
7
14
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
15
|
+
* Authorization-enforcing wrapper around a {@link PhysicalStore}. The
|
|
16
|
+
* recommended write gateway for application code — `furystack/no-direct-store-token`
|
|
17
|
+
* enforces this. Each mutation runs the relevant `authorize*` and
|
|
18
|
+
* `modify*` callbacks from {@link DataSetSettings}, persists, then emits
|
|
19
|
+
* `onEntityAdded` / `onEntityUpdated` / `onEntityRemoved` (consumed by
|
|
20
|
+
* entity sync, audit logs).
|
|
10
21
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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.
|
|
22
|
+
* Mutating methods take an `injector` parameter to surface caller identity
|
|
23
|
+
* to the authorizers. For server-side / background work without an HTTP
|
|
24
|
+
* request, wrap the injector with `useSystemIdentityContext` from
|
|
25
|
+
* `@furystack/core`.
|
|
19
26
|
*
|
|
20
27
|
* @example
|
|
21
28
|
* ```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
29
|
* await usingAsync(
|
|
28
30
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
29
31
|
* async (systemInjector) => {
|
|
30
|
-
* const dataSet = getDataSetFor(systemInjector,
|
|
31
|
-
* await dataSet.add(systemInjector,
|
|
32
|
+
* const dataSet = getDataSetFor(systemInjector, UserDataSet)
|
|
33
|
+
* await dataSet.add(systemInjector, { username: 'alice', roles: [] })
|
|
32
34
|
* },
|
|
33
35
|
* )
|
|
34
36
|
* ```
|
|
@@ -42,20 +44,8 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
42
44
|
}>
|
|
43
45
|
implements Disposable
|
|
44
46
|
{
|
|
45
|
-
/**
|
|
46
|
-
* Primary key of the contained entity
|
|
47
|
-
*/
|
|
48
47
|
public primaryKey: TPrimaryKey
|
|
49
48
|
|
|
50
|
-
/**
|
|
51
|
-
* Adds an entity to the DataSet.
|
|
52
|
-
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
53
|
-
* and emits an `onEntityAdded` event for each created entity.
|
|
54
|
-
* @param injector The injector from the caller's context. For server-side or background operations
|
|
55
|
-
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
56
|
-
* @param entities The entities to add
|
|
57
|
-
* @returns The CreateResult with the created entities
|
|
58
|
-
*/
|
|
59
49
|
public async add(injector: Injector, ...entities: TWritableData[]): Promise<CreateResult<T>> {
|
|
60
50
|
await Promise.all(
|
|
61
51
|
entities.map(async (entity) => {
|
|
@@ -81,15 +71,6 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
81
71
|
return createResult
|
|
82
72
|
}
|
|
83
73
|
|
|
84
|
-
/**
|
|
85
|
-
* Updates an entity in the store.
|
|
86
|
-
* Runs authorization checks, applies modification hooks, persists to the physical store,
|
|
87
|
-
* and emits an `onEntityUpdated` event.
|
|
88
|
-
* @param injector The injector from the caller's context. For server-side or background operations
|
|
89
|
-
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
90
|
-
* @param id The identifier of the entity
|
|
91
|
-
* @param change The update
|
|
92
|
-
*/
|
|
93
74
|
public async update(injector: Injector, id: T[TPrimaryKey], change: Partial<T>): Promise<void> {
|
|
94
75
|
if (this.settings.authorizeUpdate) {
|
|
95
76
|
const result = await this.settings.authorizeUpdate({ injector, change })
|
|
@@ -113,12 +94,6 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
113
94
|
this.emit('onEntityUpdated', { injector, change: parsed, id })
|
|
114
95
|
}
|
|
115
96
|
|
|
116
|
-
/**
|
|
117
|
-
* Returns a Promise with the entity count
|
|
118
|
-
* @param injector The Injector from the context
|
|
119
|
-
* @param filter The Filter that will be applied
|
|
120
|
-
* @returns the Count
|
|
121
|
-
*/
|
|
122
97
|
public async count(injector: Injector, filter?: FilterType<T>): Promise<number> {
|
|
123
98
|
if (this.settings.authorizeGet) {
|
|
124
99
|
const result = await this.settings.authorizeGet({ injector })
|
|
@@ -129,12 +104,6 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
129
104
|
return await this.settings.physicalStore.count(filter)
|
|
130
105
|
}
|
|
131
106
|
|
|
132
|
-
/**
|
|
133
|
-
* Returns a filtered subset of the entity
|
|
134
|
-
* @param injector The Injector from the context
|
|
135
|
-
* @param filter The Filter definition
|
|
136
|
-
* @returns A result with the current items
|
|
137
|
-
*/
|
|
138
107
|
public async find<TFields extends Array<keyof T>>(
|
|
139
108
|
injector: Injector,
|
|
140
109
|
filter: FindOptions<T, TFields>,
|
|
@@ -149,13 +118,6 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
149
118
|
return this.settings.physicalStore.find(parsedFilter)
|
|
150
119
|
}
|
|
151
120
|
|
|
152
|
-
/**
|
|
153
|
-
* Returns an entity based on its primary key
|
|
154
|
-
* @param injector The injector from the context
|
|
155
|
-
* @param key The identifier of the entity
|
|
156
|
-
* @param select A field list used for projection
|
|
157
|
-
* @returns An item with the current unique key or Undefined
|
|
158
|
-
*/
|
|
159
121
|
public async get<TSelect extends Array<keyof T>>(
|
|
160
122
|
injector: Injector,
|
|
161
123
|
key: T[TPrimaryKey],
|
|
@@ -172,30 +134,24 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
172
134
|
if (!fullEntity) {
|
|
173
135
|
return undefined
|
|
174
136
|
}
|
|
175
|
-
const result = await this.settings.authorizeGetEntity({ injector, entity: fullEntity
|
|
137
|
+
const result = await this.settings.authorizeGetEntity({ injector, entity: fullEntity })
|
|
176
138
|
if (!result.isAllowed) {
|
|
177
139
|
throw new AuthorizationError(result.message)
|
|
178
140
|
}
|
|
179
141
|
if (select) {
|
|
180
142
|
return selectFields(fullEntity as T & object, ...select)
|
|
181
143
|
}
|
|
182
|
-
return fullEntity
|
|
144
|
+
return fullEntity
|
|
183
145
|
}
|
|
184
146
|
return await this.settings.physicalStore.get(key, select)
|
|
185
147
|
}
|
|
186
148
|
|
|
187
149
|
/**
|
|
188
|
-
* Removes
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
* are authorized. Keys that don't match any entity are silently forwarded to the
|
|
194
|
-
* physical store's `remove()` call.
|
|
195
|
-
* @param injector The injector from the caller's context. For server-side or background operations
|
|
196
|
-
* without an HTTP request, use a child injector with an elevated {@link IdentityContext}.
|
|
197
|
-
* @param keys The primary keys of the entities to remove
|
|
198
|
-
* @returns A promise that will be resolved / rejected based on the remove success
|
|
150
|
+
* Removes by primary key. Pre-load `authorizeRemove` and per-entity
|
|
151
|
+
* `authorizeRemoveEntity` are all-or-nothing — any rejection aborts the
|
|
152
|
+
* whole batch before any persist call. When `authorizeRemoveEntity` is
|
|
153
|
+
* configured, missing keys are silently forwarded to the physical store
|
|
154
|
+
* (no entity to authorize).
|
|
199
155
|
*/
|
|
200
156
|
public async remove(injector: Injector, ...keys: Array<T[TPrimaryKey]>): Promise<void> {
|
|
201
157
|
if (keys.length === 0) {
|
|
@@ -213,7 +169,7 @@ export class DataSet<T, TPrimaryKey extends keyof T, TWritableData = WithOptiona
|
|
|
213
169
|
})
|
|
214
170
|
await Promise.all(
|
|
215
171
|
entities.map(async (entity) => {
|
|
216
|
-
const removeResult = await this.settings.authorizeRemoveEntity!({ injector, entity
|
|
172
|
+
const removeResult = await this.settings.authorizeRemoveEntity!({ injector, entity })
|
|
217
173
|
if (!removeResult.isAllowed) {
|
|
218
174
|
throw new AuthorizationError(removeResult.message)
|
|
219
175
|
}
|
package/src/define-data-set.ts
CHANGED
|
@@ -58,39 +58,21 @@ export type DefineDataSetSettings<
|
|
|
58
58
|
*/
|
|
59
59
|
export type DefineDataSetOptions<T, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>> = {
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
61
|
+
* Debug-only identifier. Token identity is established by the returned
|
|
62
|
+
* {@link DataSetToken} object reference, not this string.
|
|
63
63
|
*/
|
|
64
64
|
name: string
|
|
65
|
-
/**
|
|
66
|
-
* The store this data set is backed by. Its `model` and `primaryKey` are
|
|
67
|
-
* propagated onto the returned token.
|
|
68
|
-
*/
|
|
65
|
+
/** Backing store; its `model` and `primaryKey` propagate to the returned token. */
|
|
69
66
|
store: StoreToken<T, TPrimaryKey>
|
|
70
|
-
/**
|
|
71
|
-
* Authorizers, modification hooks and filter post-processors. Optional —
|
|
72
|
-
* a data set without settings performs no authorization and forwards
|
|
73
|
-
* operations straight to the physical store.
|
|
74
|
-
*/
|
|
75
67
|
settings?: NoInfer<DefineDataSetSettings<T, TPrimaryKey, TWritableData>>
|
|
76
68
|
}
|
|
77
69
|
|
|
78
70
|
/**
|
|
79
|
-
* Defines a {@link DataSet}
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* 1. Resolves the backing physical store through the injector.
|
|
86
|
-
* 2. Constructs a {@link DataSet} with the supplied {@link DefineDataSetSettings}
|
|
87
|
-
* and that store.
|
|
88
|
-
* 3. Registers a disposal callback that clears the DataSet's event
|
|
89
|
-
* subscriptions when the owning injector is disposed.
|
|
90
|
-
*
|
|
91
|
-
* The token also carries the `model` and `primaryKey` of the backing store so
|
|
92
|
-
* that downstream tooling (entity sync, OpenAPI generators, test harnesses)
|
|
93
|
-
* can discover the dataset's shape without additional wiring.
|
|
71
|
+
* Defines a singleton {@link DataSet} token backed by a {@link StoreToken}.
|
|
72
|
+
* The token mirrors the store's `model` and `primaryKey` so reflection
|
|
73
|
+
* tools (entity sync, OpenAPI generators, test harnesses) can discover the
|
|
74
|
+
* dataset's shape from the token alone. Disposal of the owning injector
|
|
75
|
+
* tears down the dataset's event subscriptions.
|
|
94
76
|
*
|
|
95
77
|
* @example
|
|
96
78
|
* ```ts
|
|
@@ -124,7 +106,7 @@ export const defineDataSet = <T, const TPrimaryKey extends keyof T, TWritableDat
|
|
|
124
106
|
const dataSet = new DataSet<T, TPrimaryKey, TWritableData>({
|
|
125
107
|
...options.settings,
|
|
126
108
|
physicalStore,
|
|
127
|
-
}
|
|
109
|
+
})
|
|
128
110
|
// Disposal is delegated to the injector via `onDispose`; the dataset
|
|
129
111
|
// outlives this factory invocation and is torn down on scope teardown.
|
|
130
112
|
// eslint-disable-next-line furystack/prefer-using-wrapper
|
package/src/helpers.ts
CHANGED
|
@@ -4,30 +4,14 @@ import type { DataSet } from './data-set.js'
|
|
|
4
4
|
import type { DataSetToken } from './define-data-set.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Resolves the {@link DataSet}
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* triggered. Prefer this over direct physical-store access in application
|
|
13
|
-
* code.
|
|
14
|
-
*
|
|
15
|
-
* For server-side or background operations that don't originate from an HTTP
|
|
16
|
-
* request, use
|
|
17
|
-
* {@link import('@furystack/core').useSystemIdentityContext | useSystemIdentityContext}
|
|
18
|
-
* to create a scoped child injector with elevated privileges before calling
|
|
19
|
-
* this helper.
|
|
20
|
-
*
|
|
21
|
-
* @param injector - Any injector in the scope chain.
|
|
22
|
-
* @param token - The data-set token created by `defineDataSet`.
|
|
23
|
-
* @returns The cached {@link DataSet} instance.
|
|
7
|
+
* Resolves the {@link DataSet} for `token` on `injector`. The preferred
|
|
8
|
+
* write gateway for application code — `furystack/no-direct-store-token`
|
|
9
|
+
* forbids resolving the underlying `StoreToken` directly. For server-side
|
|
10
|
+
* or background work, wrap `injector` with `useSystemIdentityContext` from
|
|
11
|
+
* `@furystack/core` to obtain an elevated identity before calling this.
|
|
24
12
|
*
|
|
25
13
|
* @example
|
|
26
14
|
* ```ts
|
|
27
|
-
* import { useSystemIdentityContext } from '@furystack/core'
|
|
28
|
-
* import { getDataSetFor } from '@furystack/repository'
|
|
29
|
-
* import { usingAsync } from '@furystack/utils'
|
|
30
|
-
*
|
|
31
15
|
* await usingAsync(
|
|
32
16
|
* useSystemIdentityContext({ injector, username: 'background-job' }),
|
|
33
17
|
* async (systemInjector) => {
|