@nmnmcc/ability 0.1.0 → 0.3.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/README.md +353 -170
- package/dist/Authorizer.d.ts +216 -0
- package/dist/Authorizer.d.ts.map +1 -0
- package/dist/Authorizer.js +55 -0
- package/dist/Authorizer.js.map +1 -0
- package/dist/Condition.d.ts +536 -0
- package/dist/Condition.d.ts.map +1 -0
- package/dist/Condition.js +141 -0
- package/dist/Condition.js.map +1 -0
- package/dist/Decision.d.ts +131 -0
- package/dist/Decision.d.ts.map +1 -0
- package/dist/Decision.js +83 -0
- package/dist/Decision.js.map +1 -0
- package/dist/Domain.d.ts +148 -0
- package/dist/Domain.d.ts.map +1 -0
- package/dist/Domain.js +34 -0
- package/dist/Domain.js.map +1 -0
- package/dist/HttpApi.d.ts +129 -0
- package/dist/HttpApi.d.ts.map +1 -0
- package/dist/HttpApi.js +95 -0
- package/dist/HttpApi.js.map +1 -0
- package/dist/Policy.d.ts +429 -0
- package/dist/Policy.d.ts.map +1 -0
- package/dist/Policy.js +162 -0
- package/dist/Policy.js.map +1 -0
- package/dist/Principal.d.ts +35 -0
- package/dist/Principal.d.ts.map +1 -0
- package/dist/Principal.js +37 -0
- package/dist/Principal.js.map +1 -0
- package/dist/Resource.d.ts +213 -0
- package/dist/Resource.d.ts.map +1 -0
- package/dist/Resource.js +71 -0
- package/dist/Resource.js.map +1 -0
- package/dist/Rule.d.ts +189 -0
- package/dist/Rule.d.ts.map +1 -0
- package/dist/Rule.js +50 -0
- package/dist/Rule.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/index.d.ts +9 -4
- package/dist/index.js +9 -4
- package/dist/internal/authorizer.d.ts +28 -0
- package/dist/internal/authorizer.d.ts.map +1 -0
- package/dist/internal/authorizer.js +153 -0
- package/dist/internal/authorizer.js.map +1 -0
- package/dist/internal/condition.d.ts +11 -0
- package/dist/internal/condition.d.ts.map +1 -0
- package/dist/internal/condition.js +393 -0
- package/dist/internal/condition.js.map +1 -0
- package/dist/internal/domain.js +34 -0
- package/dist/internal/domain.js.map +1 -0
- package/dist/internal/httpApi.js +41 -0
- package/dist/internal/httpApi.js.map +1 -0
- package/dist/internal/policy.js +524 -0
- package/dist/internal/policy.js.map +1 -0
- package/dist/internal/resource.js +66 -0
- package/dist/internal/resource.js.map +1 -0
- package/dist/internal/rule.js +131 -0
- package/dist/internal/rule.js.map +1 -0
- package/package.json +61 -74
- package/src/Authorizer.ts +330 -0
- package/src/Condition.ts +706 -0
- package/src/Decision.ts +117 -0
- package/src/Domain.ts +189 -0
- package/src/HttpApi.ts +148 -0
- package/src/Policy.ts +575 -0
- package/src/Principal.ts +41 -0
- package/src/Resource.ts +290 -0
- package/src/Rule.ts +265 -0
- package/src/index.ts +57 -0
- package/src/internal/authorizer.ts +271 -0
- package/src/internal/condition.ts +607 -0
- package/src/internal/domain.ts +56 -0
- package/src/internal/httpApi.ts +84 -0
- package/src/internal/policy.ts +815 -0
- package/src/internal/resource.ts +98 -0
- package/src/internal/rule.ts +203 -0
- package/dist/Ability.d.ts +0 -516
- package/dist/Ability.js +0 -211
- package/dist/AbilityExtra.d.ts +0 -79
- package/dist/AbilityExtra.js +0 -195
- package/dist/AbilityRef.d.ts +0 -110
- package/dist/AbilityRef.js +0 -160
- package/dist/internal/ability.d.ts +0 -114
- package/dist/internal/ability.js +0 -624
- package/dist/internal/serializable.js +0 -22
package/dist/Ability.d.ts
DELETED
|
@@ -1,516 +0,0 @@
|
|
|
1
|
-
import { AliasError as AliasError$1, AuthorizationError as AuthorizationError$1, ConditionError as ConditionError$1, PredicateEvaluationError as PredicateEvaluationError$1, QueryGenerationError as QueryGenerationError$1, RawRuleError as RawRuleError$1, RuleTypeId as RuleTypeId$1, SerializationError as SerializationError$1, SubjectDetectionError as SubjectDetectionError$1, SubjectTypeId as SubjectTypeId$1, TypeId as TypeId$1 } from "./internal/ability.js";
|
|
2
|
-
import { MongoQuery } from "@ucast/mongo2js";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as Equal from "effect/Equal";
|
|
5
|
-
import * as Inspectable from "effect/Inspectable";
|
|
6
|
-
import * as Pipeable from "effect/Pipeable";
|
|
7
|
-
|
|
8
|
-
//#region src/Ability.d.ts
|
|
9
|
-
declare namespace Ability_d_exports {
|
|
10
|
-
export { Ability, AbilityOptions, ActionAliases, ActionResolver, AliasError, AnyAction, AnyRule, AnySubject, AuthorizationError, Builder, CheckRequest, ConditionError, DetectSubjectType, ExpandedAction, FieldOf, FieldPath, FieldPattern, MongoCondition, PermittedFieldsOptions, Predicate, PredicateEvaluationError, QueryGenerationError, RawRule, RawRuleError, Rule, RuleKind, RuleOptions, RuleQueryRequest, RuleSubject, RuleTypeId, SerializationError, SingleOrReadonlyArray, SubjectDetectionError, SubjectMap, SubjectName, SubjectQueryRequest, SubjectTypeId, SubjectUnion, ToRawRulesOptions, TypeId, TypedSubject, actionsFor, check, createAliasResolver, define, detectSubjectType, fromRawRules, isAbility, isRule, isSubject, make, permittedFields, possibleRulesFor, relevantRuleFor, rulesFor, subject, toRawRules, unwrapSubject };
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* @since 0.1.0
|
|
14
|
-
* @category Type Ids
|
|
15
|
-
*/
|
|
16
|
-
declare const TypeId: typeof TypeId$1;
|
|
17
|
-
/**
|
|
18
|
-
* @since 0.1.0
|
|
19
|
-
* @category Type Ids
|
|
20
|
-
*/
|
|
21
|
-
type TypeId = typeof TypeId;
|
|
22
|
-
/**
|
|
23
|
-
* @since 0.1.0
|
|
24
|
-
* @category Type Ids
|
|
25
|
-
*/
|
|
26
|
-
declare const SubjectTypeId: typeof SubjectTypeId$1;
|
|
27
|
-
/**
|
|
28
|
-
* @since 0.1.0
|
|
29
|
-
* @category Type Ids
|
|
30
|
-
*/
|
|
31
|
-
type SubjectTypeId = typeof SubjectTypeId;
|
|
32
|
-
/**
|
|
33
|
-
* Unique identifier for `Rule` values.
|
|
34
|
-
*
|
|
35
|
-
* @since 0.1.0
|
|
36
|
-
* @category Type Ids
|
|
37
|
-
*/
|
|
38
|
-
declare const RuleTypeId: typeof RuleTypeId$1;
|
|
39
|
-
/**
|
|
40
|
-
* @since 0.1.0
|
|
41
|
-
* @category Type Ids
|
|
42
|
-
*/
|
|
43
|
-
type RuleTypeId = typeof RuleTypeId;
|
|
44
|
-
/**
|
|
45
|
-
* @since 0.1.0
|
|
46
|
-
* @category Models
|
|
47
|
-
*/
|
|
48
|
-
type SingleOrReadonlyArray<A> = A | ReadonlyArray<A>;
|
|
49
|
-
/**
|
|
50
|
-
* @since 0.1.0
|
|
51
|
-
* @category Models
|
|
52
|
-
*/
|
|
53
|
-
type ActionAliases = Readonly<Record<string, SingleOrReadonlyArray<string>>>;
|
|
54
|
-
/**
|
|
55
|
-
* @since 0.1.0
|
|
56
|
-
* @category Models
|
|
57
|
-
*/
|
|
58
|
-
type ActionResolver = (action: SingleOrReadonlyArray<string>) => ReadonlyArray<string>;
|
|
59
|
-
/**
|
|
60
|
-
* @since 0.1.0
|
|
61
|
-
* @category Models
|
|
62
|
-
*/
|
|
63
|
-
type AnyAction = "manage";
|
|
64
|
-
/**
|
|
65
|
-
* @since 0.1.0
|
|
66
|
-
* @category Models
|
|
67
|
-
*/
|
|
68
|
-
type AnySubject = "all";
|
|
69
|
-
/**
|
|
70
|
-
* @since 0.1.0
|
|
71
|
-
* @category Models
|
|
72
|
-
*/
|
|
73
|
-
type SubjectMap = Readonly<Record<string, object>>;
|
|
74
|
-
/**
|
|
75
|
-
* @since 0.1.0
|
|
76
|
-
* @category Models
|
|
77
|
-
*/
|
|
78
|
-
type SubjectName<Subjects extends SubjectMap> = string & keyof Subjects;
|
|
79
|
-
/**
|
|
80
|
-
* @since 0.1.0
|
|
81
|
-
* @category Models
|
|
82
|
-
*/
|
|
83
|
-
type RuleSubject<Subjects extends SubjectMap> = SubjectName<Subjects> | AnySubject;
|
|
84
|
-
/**
|
|
85
|
-
* @since 0.1.0
|
|
86
|
-
* @category Models
|
|
87
|
-
*/
|
|
88
|
-
type SubjectUnion<Subjects extends SubjectMap> = Subjects[SubjectName<Subjects>];
|
|
89
|
-
type Primitive = string | number | boolean | bigint | symbol | null | undefined | Function | ReadonlyArray<unknown>;
|
|
90
|
-
type PreviousDepth = [never, 0, 1, 2, 3, 4, 5];
|
|
91
|
-
type FieldPathInternal<Subject, Depth extends number> = [Depth] extends [never] ? never : Subject extends Primitive ? never : Subject extends object ? { [Key in keyof Subject & string]: Subject[Key] extends Primitive ? Key : Key | `${Key}.${FieldPathInternal<Subject[Key], PreviousDepth[Depth]>}` }[keyof Subject & string] : never;
|
|
92
|
-
/**
|
|
93
|
-
* Dot-path field names for a subject. The recursion depth is intentionally
|
|
94
|
-
* bounded to keep public type-checking predictable.
|
|
95
|
-
*
|
|
96
|
-
* @since 0.1.0
|
|
97
|
-
* @category Models
|
|
98
|
-
*/
|
|
99
|
-
type FieldPath<Subject> = FieldPathInternal<Subject, 5>;
|
|
100
|
-
/**
|
|
101
|
-
* @since 0.1.0
|
|
102
|
-
* @category Models
|
|
103
|
-
*/
|
|
104
|
-
type FieldPattern = `${string}*${string}`;
|
|
105
|
-
/**
|
|
106
|
-
* @since 0.1.0
|
|
107
|
-
* @category Models
|
|
108
|
-
*/
|
|
109
|
-
type FieldOf<Subject> = string & (FieldPath<Subject> | FieldPattern);
|
|
110
|
-
/**
|
|
111
|
-
* @since 0.1.0
|
|
112
|
-
* @category Models
|
|
113
|
-
*/
|
|
114
|
-
type MongoCondition<Subject extends object> = MongoQuery<Subject> & Readonly<Record<string, unknown>>;
|
|
115
|
-
/**
|
|
116
|
-
* @since 0.1.0
|
|
117
|
-
* @category Models
|
|
118
|
-
*/
|
|
119
|
-
type RuleKind = "Allow" | "Deny";
|
|
120
|
-
/**
|
|
121
|
-
* @since 0.1.0
|
|
122
|
-
* @category Models
|
|
123
|
-
*/
|
|
124
|
-
type Predicate<Subject, E = never, R = never> = (subject: Subject) => boolean | Effect.Effect<boolean, E, R>;
|
|
125
|
-
/**
|
|
126
|
-
* @since 0.1.0
|
|
127
|
-
* @category Models
|
|
128
|
-
*/
|
|
129
|
-
interface RuleOptions<Subject extends object, Fields extends string, E = never, R = never> {
|
|
130
|
-
readonly fields?: SingleOrReadonlyArray<Fields>;
|
|
131
|
-
readonly conditions?: MongoCondition<Subject>;
|
|
132
|
-
readonly when?: Predicate<Subject, E, R>;
|
|
133
|
-
readonly reason?: string;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* @since 0.1.0
|
|
137
|
-
* @category Models
|
|
138
|
-
*/
|
|
139
|
-
interface Rule<Kind extends RuleKind, Action extends string, Name extends string, Subject extends object, Fields extends string, E, R> extends Equal.Equal, Inspectable.Inspectable, Pipeable.Pipeable, Effect.Yieldable<Rule<Kind, Action, Name, Subject, Fields, E, R>, Rule<Kind, Action, Name, Subject, Fields, E, R>> {
|
|
140
|
-
readonly [RuleTypeId]: RuleTypeId;
|
|
141
|
-
readonly _tag: Kind;
|
|
142
|
-
readonly action: SingleOrReadonlyArray<Action>;
|
|
143
|
-
readonly subject: SingleOrReadonlyArray<Name>;
|
|
144
|
-
readonly fields?: ReadonlyArray<Fields>;
|
|
145
|
-
readonly conditions?: MongoCondition<Subject>;
|
|
146
|
-
readonly when?: Predicate<Subject, E, R>;
|
|
147
|
-
readonly reason?: string;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* @since 0.1.0
|
|
151
|
-
* @category Models
|
|
152
|
-
*/
|
|
153
|
-
type AnyRule = Rule<RuleKind, string, string, any, string, any, any>;
|
|
154
|
-
/**
|
|
155
|
-
* @since 0.1.0
|
|
156
|
-
* @category Models
|
|
157
|
-
*/
|
|
158
|
-
interface TypedSubject<Name extends string, Value extends object> extends Equal.Equal, Inspectable.Inspectable, Pipeable.Pipeable {
|
|
159
|
-
readonly [SubjectTypeId]: SubjectTypeId;
|
|
160
|
-
readonly _tag: "Subject";
|
|
161
|
-
readonly subject: Name;
|
|
162
|
-
readonly value: Value;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* @since 0.1.0
|
|
166
|
-
* @category Models
|
|
167
|
-
*/
|
|
168
|
-
type DetectSubjectType<Subjects extends SubjectMap> = (value: object) => SubjectName<Subjects>;
|
|
169
|
-
/**
|
|
170
|
-
* @since 0.1.0
|
|
171
|
-
* @category Models
|
|
172
|
-
*/
|
|
173
|
-
interface AbilityOptions<Subjects extends SubjectMap, Aliases extends ActionAliases = {}> {
|
|
174
|
-
readonly detectSubjectType?: DetectSubjectType<Subjects>;
|
|
175
|
-
readonly actionAliases?: Aliases;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* @since 0.1.0
|
|
179
|
-
* @category Models
|
|
180
|
-
*/
|
|
181
|
-
interface Ability<Subjects extends SubjectMap, Rules extends AnyRule = never, Aliases extends ActionAliases = {}> extends Equal.Equal, Inspectable.Inspectable, Pipeable.Pipeable {
|
|
182
|
-
readonly [TypeId]: TypeId;
|
|
183
|
-
readonly rules: ReadonlyArray<Rules>;
|
|
184
|
-
readonly options: AbilityOptions<Subjects, Aliases>;
|
|
185
|
-
readonly _Subjects?: (_: never) => Subjects;
|
|
186
|
-
readonly _Rules?: (_: never) => Rules;
|
|
187
|
-
readonly _Aliases?: (_: never) => Aliases;
|
|
188
|
-
}
|
|
189
|
-
type ElementOf<A> = A extends ReadonlyArray<infer B> ? B : A;
|
|
190
|
-
type SubjectFor<Subjects extends SubjectMap, Name> = Name extends AnySubject ? SubjectUnion<Subjects> : Name extends SubjectName<Subjects> ? Subjects[Name] : never;
|
|
191
|
-
type PreviousAliasDepth = [never, 0, 1, 2, 3, 4, 5];
|
|
192
|
-
/**
|
|
193
|
-
* Expands an action through configured aliases. The recursion depth is bounded
|
|
194
|
-
* to keep public type-checking predictable.
|
|
195
|
-
*
|
|
196
|
-
* @since 0.1.0
|
|
197
|
-
* @category Models
|
|
198
|
-
*/
|
|
199
|
-
type ExpandedAction<Action extends string, Aliases extends ActionAliases, Depth extends number = 5> = Action | ([Depth] extends [0] ? never : Action extends keyof Aliases & string ? ExpandedAction<ElementOf<Aliases[Action]> & string, Aliases, PreviousAliasDepth[Depth]> : never);
|
|
200
|
-
/**
|
|
201
|
-
* @since 0.1.0
|
|
202
|
-
* @category Models
|
|
203
|
-
*/
|
|
204
|
-
interface Builder<Subjects extends SubjectMap> {
|
|
205
|
-
readonly allow: <const Action extends SingleOrReadonlyArray<string>, const Name extends SingleOrReadonlyArray<RuleSubject<Subjects>>, const Fields extends FieldOf<SubjectFor<Subjects, ElementOf<Name>> & object> = FieldOf<SubjectFor<Subjects, ElementOf<Name>> & object>, E = never, R = never>(action: Action, subject: Name, options?: RuleOptions<SubjectFor<Subjects, ElementOf<Name>> & object, Fields, E, R>) => Rule<"Allow", ElementOf<Action> & string, ElementOf<Name> & string, SubjectFor<Subjects, ElementOf<Name>> & object, Fields, E, R>;
|
|
206
|
-
readonly deny: <const Action extends SingleOrReadonlyArray<string>, const Name extends SingleOrReadonlyArray<RuleSubject<Subjects>>, const Fields extends FieldOf<SubjectFor<Subjects, ElementOf<Name>> & object> = FieldOf<SubjectFor<Subjects, ElementOf<Name>> & object>, E = never, R = never>(action: Action, subject: Name, options?: RuleOptions<SubjectFor<Subjects, ElementOf<Name>> & object, Fields, E, R>) => Rule<"Deny", ElementOf<Action> & string, ElementOf<Name> & string, SubjectFor<Subjects, ElementOf<Name>> & object, Fields, E, R>;
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* @since 0.1.0
|
|
210
|
-
* @category Models
|
|
211
|
-
*/
|
|
212
|
-
interface RawRule<Action extends string = string, Name extends string = string, Fields extends string = string, Conditions = unknown> {
|
|
213
|
-
readonly action: SingleOrReadonlyArray<Action>;
|
|
214
|
-
readonly subject: SingleOrReadonlyArray<Name>;
|
|
215
|
-
readonly fields?: SingleOrReadonlyArray<Fields>;
|
|
216
|
-
readonly conditions?: Conditions;
|
|
217
|
-
readonly inverted?: boolean;
|
|
218
|
-
readonly reason?: string;
|
|
219
|
-
}
|
|
220
|
-
type RuleAction<Rules> = Rules extends Rule<infer _Kind, infer Action, infer _Name, infer _Subject, infer _Fields, infer _E, infer _R> ? Action : never;
|
|
221
|
-
type RuleSubjectName<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer Name, infer _Subject, infer _Fields, infer _E, infer _R> ? Name : never;
|
|
222
|
-
type RuleFields<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer _Name, infer _Subject, infer Fields, infer _E, infer _R> ? Fields : never;
|
|
223
|
-
type RuleError<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer _Name, infer _Subject, infer _Fields, infer E, infer _R> ? E : never;
|
|
224
|
-
type RuleServices<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer _Name, infer _Subject, infer _Fields, infer _E, infer R> ? R : never;
|
|
225
|
-
type ActionMatches<Rule, Action extends string, Aliases extends ActionAliases> = Rule extends AnyRule ? Action extends ExpandedAction<RuleAction<Rule> & string, Aliases> ? Rule : AnyAction extends RuleAction<Rule> ? Rule : never : never;
|
|
226
|
-
type SubjectMatches<Rule, Name extends string> = Rule extends AnyRule ? Name extends RuleSubjectName<Rule> ? Rule : AnySubject extends RuleSubjectName<Rule> ? Rule : never : never;
|
|
227
|
-
type RulesMatching<Rules, Action extends string, Name extends string, Aliases extends ActionAliases> = SubjectMatches<ActionMatches<Rules, Action, Aliases>, Name>;
|
|
228
|
-
type AllowedActions<Rules, Aliases extends ActionAliases> = AnyAction extends RuleAction<Rules> ? string : ExpandedAction<RuleAction<Rules> & string, Aliases>;
|
|
229
|
-
type AllowedSubjects<Subjects extends SubjectMap, Rules> = AnySubject extends RuleSubjectName<Rules> ? SubjectName<Subjects> : Extract<RuleSubjectName<Rules>, SubjectName<Subjects>>;
|
|
230
|
-
type FieldFor<Subjects extends SubjectMap, Rules, Aliases extends ActionAliases, Action extends string, Name extends SubjectName<Subjects>> = RuleFields<RulesMatching<Rules, Action, Name, Aliases>> extends infer Fields ? [Fields] extends [never] ? FieldOf<Subjects[Name]> : Extract<Fields, FieldPattern> extends never ? Fields & string : FieldOf<Subjects[Name]> : never;
|
|
231
|
-
type ExplicitCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = AllowedSubjects<Subjects, Rules> extends infer Name ? Name extends SubjectName<Subjects> ? AllowedActions<Rules, Aliases> extends infer Action ? Action extends string ? {
|
|
232
|
-
readonly action: Action;
|
|
233
|
-
readonly subject: Name;
|
|
234
|
-
readonly value?: Subjects[Name] | TypedSubject<Name, Subjects[Name]>;
|
|
235
|
-
readonly field?: FieldFor<Subjects, Rules, Aliases, Action, Name>;
|
|
236
|
-
} : never : never : never : never;
|
|
237
|
-
type TypedSubjectCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = AllowedSubjects<Subjects, Rules> extends infer Name ? Name extends SubjectName<Subjects> ? AllowedActions<Rules, Aliases> extends infer Action ? Action extends string ? {
|
|
238
|
-
readonly action: Action;
|
|
239
|
-
readonly subject?: never;
|
|
240
|
-
readonly value: TypedSubject<Name, Subjects[Name]>;
|
|
241
|
-
readonly field?: FieldFor<Subjects, Rules, Aliases, Action, Name>;
|
|
242
|
-
} : never : never : never : never;
|
|
243
|
-
type DetectedSubjectCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = {
|
|
244
|
-
readonly action: AllowedActions<Rules, Aliases>;
|
|
245
|
-
readonly subject?: never;
|
|
246
|
-
readonly value: SubjectUnion<Subjects>;
|
|
247
|
-
readonly field?: string;
|
|
248
|
-
};
|
|
249
|
-
/**
|
|
250
|
-
* @since 0.1.0
|
|
251
|
-
* @category Models
|
|
252
|
-
*/
|
|
253
|
-
type CheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases = {}> = ExplicitCheckRequest<Subjects, Rules, Aliases> | TypedSubjectCheckRequest<Subjects, Rules, Aliases> | DetectedSubjectCheckRequest<Subjects, Rules, Aliases>;
|
|
254
|
-
/**
|
|
255
|
-
* @since 0.1.0
|
|
256
|
-
* @category Models
|
|
257
|
-
*/
|
|
258
|
-
type RuleQueryRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases = {}> = CheckRequest<Subjects, Rules, Aliases>;
|
|
259
|
-
type ExplicitSubjectQueryRequest<Subjects extends SubjectMap, Rules extends AnyRule> = AllowedSubjects<Subjects, Rules> extends infer Name ? Name extends SubjectName<Subjects> ? {
|
|
260
|
-
readonly subject: Name;
|
|
261
|
-
readonly value?: Subjects[Name] | TypedSubject<Name, Subjects[Name]>;
|
|
262
|
-
} : never : never;
|
|
263
|
-
type TypedSubjectQueryRequest<Subjects extends SubjectMap, Rules extends AnyRule> = AllowedSubjects<Subjects, Rules> extends infer Name ? Name extends SubjectName<Subjects> ? {
|
|
264
|
-
readonly subject?: never;
|
|
265
|
-
readonly value: TypedSubject<Name, Subjects[Name]>;
|
|
266
|
-
} : never : never;
|
|
267
|
-
/**
|
|
268
|
-
* @since 0.1.0
|
|
269
|
-
* @category Models
|
|
270
|
-
*/
|
|
271
|
-
type SubjectQueryRequest<Subjects extends SubjectMap, Rules extends AnyRule> = ExplicitSubjectQueryRequest<Subjects, Rules> | TypedSubjectQueryRequest<Subjects, Rules> | {
|
|
272
|
-
readonly subject?: never;
|
|
273
|
-
readonly value: SubjectUnion<Subjects>;
|
|
274
|
-
};
|
|
275
|
-
type RequestAction<Request> = Request extends {
|
|
276
|
-
readonly action: infer Action;
|
|
277
|
-
} ? Action & string : string;
|
|
278
|
-
type RequestSubject<Request> = Request extends {
|
|
279
|
-
readonly subject: infer Name;
|
|
280
|
-
} ? Name & string : Request extends {
|
|
281
|
-
readonly value: TypedSubject<infer Name, object>;
|
|
282
|
-
} ? Name & string : string;
|
|
283
|
-
type MatchingRules<Rules, Request, Aliases extends ActionAliases> = RulesMatching<Rules, RequestAction<Request>, RequestSubject<Request>, Aliases>;
|
|
284
|
-
/**
|
|
285
|
-
* @since 0.1.0
|
|
286
|
-
* @category Models
|
|
287
|
-
*/
|
|
288
|
-
interface ToRawRulesOptions {
|
|
289
|
-
readonly strict?: boolean;
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* @since 0.1.0
|
|
293
|
-
* @category Models
|
|
294
|
-
*/
|
|
295
|
-
interface PermittedFieldsOptions<Rules extends AnyRule> {
|
|
296
|
-
readonly fieldsFrom: (rule: Rules) => ReadonlyArray<string>;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* @since 0.1.0
|
|
300
|
-
* @category Errors
|
|
301
|
-
*/
|
|
302
|
-
declare const AuthorizationError: typeof AuthorizationError$1;
|
|
303
|
-
/**
|
|
304
|
-
* @since 0.1.0
|
|
305
|
-
* @category Errors
|
|
306
|
-
*/
|
|
307
|
-
type AuthorizationError = AuthorizationError$1;
|
|
308
|
-
/**
|
|
309
|
-
* @since 0.1.0
|
|
310
|
-
* @category Errors
|
|
311
|
-
*/
|
|
312
|
-
declare const ConditionError: typeof ConditionError$1;
|
|
313
|
-
/**
|
|
314
|
-
* @since 0.1.0
|
|
315
|
-
* @category Errors
|
|
316
|
-
*/
|
|
317
|
-
type ConditionError = ConditionError$1;
|
|
318
|
-
/**
|
|
319
|
-
* @since 0.1.0
|
|
320
|
-
* @category Errors
|
|
321
|
-
*/
|
|
322
|
-
declare const PredicateEvaluationError: typeof PredicateEvaluationError$1;
|
|
323
|
-
/**
|
|
324
|
-
* @since 0.1.0
|
|
325
|
-
* @category Errors
|
|
326
|
-
*/
|
|
327
|
-
type PredicateEvaluationError = PredicateEvaluationError$1;
|
|
328
|
-
/**
|
|
329
|
-
* @since 0.1.0
|
|
330
|
-
* @category Errors
|
|
331
|
-
*/
|
|
332
|
-
declare const SerializationError: typeof SerializationError$1;
|
|
333
|
-
/**
|
|
334
|
-
* @since 0.1.0
|
|
335
|
-
* @category Errors
|
|
336
|
-
*/
|
|
337
|
-
type SerializationError = SerializationError$1;
|
|
338
|
-
/**
|
|
339
|
-
* @since 0.1.0
|
|
340
|
-
* @category Errors
|
|
341
|
-
*/
|
|
342
|
-
declare const RawRuleError: typeof RawRuleError$1;
|
|
343
|
-
/**
|
|
344
|
-
* @since 0.1.0
|
|
345
|
-
* @category Errors
|
|
346
|
-
*/
|
|
347
|
-
type RawRuleError = RawRuleError$1;
|
|
348
|
-
/**
|
|
349
|
-
* @since 0.1.0
|
|
350
|
-
* @category Errors
|
|
351
|
-
*/
|
|
352
|
-
declare const SubjectDetectionError: typeof SubjectDetectionError$1;
|
|
353
|
-
/**
|
|
354
|
-
* @since 0.1.0
|
|
355
|
-
* @category Errors
|
|
356
|
-
*/
|
|
357
|
-
type SubjectDetectionError = SubjectDetectionError$1;
|
|
358
|
-
/**
|
|
359
|
-
* @since 0.1.0
|
|
360
|
-
* @category Errors
|
|
361
|
-
*/
|
|
362
|
-
declare const AliasError: typeof AliasError$1;
|
|
363
|
-
/**
|
|
364
|
-
* @since 0.1.0
|
|
365
|
-
* @category Errors
|
|
366
|
-
*/
|
|
367
|
-
type AliasError = AliasError$1;
|
|
368
|
-
/**
|
|
369
|
-
* @since 0.1.0
|
|
370
|
-
* @category Errors
|
|
371
|
-
*/
|
|
372
|
-
declare const QueryGenerationError: typeof QueryGenerationError$1;
|
|
373
|
-
/**
|
|
374
|
-
* @since 0.1.0
|
|
375
|
-
* @category Errors
|
|
376
|
-
*/
|
|
377
|
-
type QueryGenerationError = QueryGenerationError$1;
|
|
378
|
-
/**
|
|
379
|
-
* Creates an action resolver for an alias map.
|
|
380
|
-
*
|
|
381
|
-
* @since 0.1.0
|
|
382
|
-
* @category Constructors
|
|
383
|
-
*/
|
|
384
|
-
declare const createAliasResolver: <const Aliases extends ActionAliases>(aliases: Aliases) => ActionResolver;
|
|
385
|
-
/**
|
|
386
|
-
* Defines an immutable Ability from a generator-based rule program.
|
|
387
|
-
*
|
|
388
|
-
* @since 0.1.0
|
|
389
|
-
* @category Constructors
|
|
390
|
-
*/
|
|
391
|
-
declare const define: <Subjects extends SubjectMap>() => <Eff extends AnyRule, A, const Aliases extends ActionAliases = {}>(body: (builder: Builder<Subjects>) => Generator<Eff, A, unknown>, options?: AbilityOptions<Subjects, Aliases>) => Ability<Subjects, Eff, Aliases>;
|
|
392
|
-
/**
|
|
393
|
-
* Constructs an Ability directly from rules.
|
|
394
|
-
*
|
|
395
|
-
* @since 0.1.0
|
|
396
|
-
* @category Constructors
|
|
397
|
-
*/
|
|
398
|
-
declare const make: <Subjects extends SubjectMap, Rules extends AnyRule, const Aliases extends ActionAliases = {}>(rules: Iterable<Rules>, options?: AbilityOptions<Subjects, Aliases>) => Ability<Subjects, Rules, Aliases>;
|
|
399
|
-
/**
|
|
400
|
-
* Constructs an Ability from JSON-safe rules.
|
|
401
|
-
*
|
|
402
|
-
* @since 0.1.0
|
|
403
|
-
* @category Constructors
|
|
404
|
-
*/
|
|
405
|
-
declare const fromRawRules: <Subjects extends SubjectMap, const Aliases extends ActionAliases = {}>(rules: Iterable<RawRule<string, RuleSubject<Subjects>, string, MongoCondition<SubjectUnion<Subjects>>>>, options?: AbilityOptions<Subjects, Aliases>) => Effect.Effect<Ability<Subjects, AnyRule, Aliases>, AliasError | RawRuleError>;
|
|
406
|
-
/**
|
|
407
|
-
* Creates a pure typed subject wrapper without mutating the wrapped value.
|
|
408
|
-
*
|
|
409
|
-
* @since 0.1.0
|
|
410
|
-
* @category Constructors
|
|
411
|
-
*/
|
|
412
|
-
declare const subject: <const Name extends string, Value extends object>(name: Name, value: Value) => TypedSubject<Name, Value>;
|
|
413
|
-
/**
|
|
414
|
-
* Returns whether a value is an Ability.
|
|
415
|
-
*
|
|
416
|
-
* @since 0.1.0
|
|
417
|
-
* @category Guards
|
|
418
|
-
*/
|
|
419
|
-
declare const isAbility: (value: unknown) => value is Ability<SubjectMap, AnyRule, ActionAliases>;
|
|
420
|
-
/**
|
|
421
|
-
* Returns whether a value is a rule.
|
|
422
|
-
*
|
|
423
|
-
* @since 0.1.0
|
|
424
|
-
* @category Guards
|
|
425
|
-
*/
|
|
426
|
-
declare const isRule: (value: unknown) => value is AnyRule;
|
|
427
|
-
/**
|
|
428
|
-
* Returns whether a value is a typed subject wrapper.
|
|
429
|
-
*
|
|
430
|
-
* @since 0.1.0
|
|
431
|
-
* @category Guards
|
|
432
|
-
*/
|
|
433
|
-
declare const isSubject: (value: unknown) => value is TypedSubject<string, object>;
|
|
434
|
-
/**
|
|
435
|
-
* Unwraps a typed subject wrapper.
|
|
436
|
-
*
|
|
437
|
-
* @since 0.1.0
|
|
438
|
-
* @category Accessors
|
|
439
|
-
*/
|
|
440
|
-
declare const unwrapSubject: <Value>(value: Value) => Value extends TypedSubject<infer _Name, infer Subject> ? Subject : Value;
|
|
441
|
-
/**
|
|
442
|
-
* Detects a subject name for a value using an Ability's detection strategy.
|
|
443
|
-
*
|
|
444
|
-
* @since 0.1.0
|
|
445
|
-
* @category Accessors
|
|
446
|
-
*/
|
|
447
|
-
declare const detectSubjectType: <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases>, value: object | TypedSubject<SubjectName<Subjects>, SubjectUnion<Subjects>>) => Effect.Effect<SubjectName<Subjects>, SubjectDetectionError>;
|
|
448
|
-
/**
|
|
449
|
-
* Converts an Ability to JSON-safe raw rules.
|
|
450
|
-
*
|
|
451
|
-
* @since 0.1.0
|
|
452
|
-
* @category Conversions
|
|
453
|
-
*/
|
|
454
|
-
declare const toRawRules: <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases>, options?: ToRawRulesOptions) => Effect.Effect<ReadonlyArray<RawRule>, SerializationError>;
|
|
455
|
-
/**
|
|
456
|
-
* Returns rules that may apply for a request before field, condition and predicate checks.
|
|
457
|
-
*
|
|
458
|
-
* @since 0.1.0
|
|
459
|
-
* @category Accessors
|
|
460
|
-
*/
|
|
461
|
-
declare const possibleRulesFor: {
|
|
462
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(request: Request): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<ReadonlyArray<MatchingRules<Rules, Request, Aliases>>, SubjectDetectionError>;
|
|
463
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(self: Ability<Subjects, Rules, Aliases>, request: Request): Effect.Effect<ReadonlyArray<MatchingRules<Rules, Request, Aliases>>, SubjectDetectionError>;
|
|
464
|
-
};
|
|
465
|
-
/**
|
|
466
|
-
* Returns rules that may apply for a request after field checks.
|
|
467
|
-
*
|
|
468
|
-
* @since 0.1.0
|
|
469
|
-
* @category Accessors
|
|
470
|
-
*/
|
|
471
|
-
declare const rulesFor: {
|
|
472
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(request: Request): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<ReadonlyArray<MatchingRules<Rules, Request, Aliases>>, SubjectDetectionError>;
|
|
473
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(self: Ability<Subjects, Rules, Aliases>, request: Request): Effect.Effect<ReadonlyArray<MatchingRules<Rules, Request, Aliases>>, SubjectDetectionError>;
|
|
474
|
-
};
|
|
475
|
-
/**
|
|
476
|
-
* Returns the first matching rule for a request, if any.
|
|
477
|
-
*
|
|
478
|
-
* @since 0.1.0
|
|
479
|
-
* @category Accessors
|
|
480
|
-
*/
|
|
481
|
-
declare const relevantRuleFor: {
|
|
482
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(request: Request): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<MatchingRules<Rules, Request, Aliases> | undefined, ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
483
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>>(self: Ability<Subjects, Rules, Aliases>, request: Request): Effect.Effect<MatchingRules<Rules, Request, Aliases> | undefined, ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
484
|
-
};
|
|
485
|
-
/**
|
|
486
|
-
* Returns actions that have rules for a subject.
|
|
487
|
-
*
|
|
488
|
-
* @since 0.1.0
|
|
489
|
-
* @category Accessors
|
|
490
|
-
*/
|
|
491
|
-
declare const actionsFor: {
|
|
492
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends SubjectQueryRequest<Subjects, Rules>>(request: Request): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<ReadonlyArray<AllowedActions<Rules, Aliases>>, SubjectDetectionError>;
|
|
493
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends SubjectQueryRequest<Subjects, Rules>>(self: Ability<Subjects, Rules, Aliases>, request: Request): Effect.Effect<ReadonlyArray<AllowedActions<Rules, Aliases>>, SubjectDetectionError>;
|
|
494
|
-
};
|
|
495
|
-
/**
|
|
496
|
-
* Checks a request and fails with `AuthorizationError` when the request is not authorized.
|
|
497
|
-
*
|
|
498
|
-
* @since 0.1.0
|
|
499
|
-
* @category Combinators
|
|
500
|
-
*/
|
|
501
|
-
declare const check: {
|
|
502
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends CheckRequest<Subjects, Rules, Aliases>>(request: Request): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<void, AuthorizationError | ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
503
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends CheckRequest<Subjects, Rules, Aliases>>(self: Ability<Subjects, Rules, Aliases>, request: Request): Effect.Effect<void, AuthorizationError | ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
504
|
-
};
|
|
505
|
-
/**
|
|
506
|
-
* Computes fields permitted for a request.
|
|
507
|
-
*
|
|
508
|
-
* @since 0.1.0
|
|
509
|
-
* @category Combinators
|
|
510
|
-
*/
|
|
511
|
-
declare const permittedFields: {
|
|
512
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends CheckRequest<Subjects, Rules, Aliases>>(request: Request, options: PermittedFieldsOptions<Rules>): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<ReadonlyArray<string>, ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
513
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends CheckRequest<Subjects, Rules, Aliases>>(self: Ability<Subjects, Rules, Aliases>, request: Request, options: PermittedFieldsOptions<Rules>): Effect.Effect<ReadonlyArray<string>, ConditionError | PredicateEvaluationError | SubjectDetectionError | RuleError<MatchingRules<Rules, Request, Aliases>>, RuleServices<MatchingRules<Rules, Request, Aliases>>>;
|
|
514
|
-
};
|
|
515
|
-
//#endregion
|
|
516
|
-
export { Ability, AbilityOptions, Ability_d_exports, ActionAliases, ActionResolver, AliasError, AnyAction, AnyRule, AnySubject, AuthorizationError, Builder, CheckRequest, ConditionError, DetectSubjectType, ExpandedAction, FieldOf, FieldPath, FieldPattern, MongoCondition, PermittedFieldsOptions, Predicate, PredicateEvaluationError, QueryGenerationError, RawRule, RawRuleError, Rule, RuleKind, RuleOptions, RuleQueryRequest, RuleSubject, RuleTypeId, SerializationError, SingleOrReadonlyArray, SubjectDetectionError, SubjectMap, SubjectName, SubjectQueryRequest, SubjectTypeId, SubjectUnion, ToRawRulesOptions, TypeId, TypedSubject, actionsFor, check, createAliasResolver, define, detectSubjectType, fromRawRules, isAbility, isRule, isSubject, make, permittedFields, possibleRulesFor, relevantRuleFor, rulesFor, subject, toRawRules, unwrapSubject };
|