@nmnmcc/ability 0.1.0 → 0.2.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 +425 -95
- package/dist/Ability.d.ts +46 -71
- package/dist/Ability.js +12 -16
- package/dist/AbilityExtra.d.ts +3 -3
- package/dist/AbilityExtra.js +0 -8
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/internal/ability.d.ts +1 -25
- package/dist/internal/ability.js +77 -151
- package/package.json +10 -12
- package/dist/AbilityRef.d.ts +0 -110
- package/dist/AbilityRef.js +0 -160
package/dist/Ability.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AliasError as AliasError$1, AuthorizationError as AuthorizationError$1, ConditionError as ConditionError$1,
|
|
2
|
-
import { MongoQuery } from "@
|
|
1
|
+
import { AliasError as AliasError$1, AuthorizationError as AuthorizationError$1, ConditionError as ConditionError$1, QueryGenerationError as QueryGenerationError$1, RawRuleError as RawRuleError$1, RuleTypeId as RuleTypeId$1, SubjectDetectionError as SubjectDetectionError$1, SubjectTypeId as SubjectTypeId$1, TypeId as TypeId$1 } from "./internal/ability.js";
|
|
2
|
+
import { MongoQuery } from "@casl/ability";
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
4
|
import * as Equal from "effect/Equal";
|
|
5
5
|
import * as Inspectable from "effect/Inspectable";
|
|
@@ -7,7 +7,7 @@ import * as Pipeable from "effect/Pipeable";
|
|
|
7
7
|
|
|
8
8
|
//#region src/Ability.d.ts
|
|
9
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,
|
|
10
|
+
export { Ability, AbilityOptions, ActionAliases, ActionResolver, AliasError, AnyAction, AnyRule, AnySubject, AuthorizationError, Builder, CheckRequest, ConditionError, DetectSubjectType, ExpandedAction, FieldOf, FieldPath, FieldPattern, MongoCondition, PermittedFieldsOptions, QueryGenerationError, RawRule, RawRuleError, Rule, RuleKind, RuleOptions, RuleQueryRequest, RuleSubject, RuleTypeId, SingleOrReadonlyArray, SubjectDetectionError, SubjectMap, SubjectName, SubjectQueryRequest, SubjectTypeId, SubjectUnion, TypeId, TypedSubject, actionsFor, check, createAliasResolver, define, detectSubjectType, fromRawRules, isAbility, isRule, isSubject, make, permittedFields, possibleRulesFor, relevantRuleFor, rulesFor, subject, toRawRules, unwrapSubject, update };
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* @since 0.1.0
|
|
@@ -107,11 +107,7 @@ type FieldPattern = `${string}*${string}`;
|
|
|
107
107
|
* @category Models
|
|
108
108
|
*/
|
|
109
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>>;
|
|
110
|
+
type MongoCondition<Subject extends object> = MongoQuery<Subject>;
|
|
115
111
|
/**
|
|
116
112
|
* @since 0.1.0
|
|
117
113
|
* @category Models
|
|
@@ -121,36 +117,29 @@ type RuleKind = "Allow" | "Deny";
|
|
|
121
117
|
* @since 0.1.0
|
|
122
118
|
* @category Models
|
|
123
119
|
*/
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* @since 0.1.0
|
|
127
|
-
* @category Models
|
|
128
|
-
*/
|
|
129
|
-
interface RuleOptions<Subject extends object, Fields extends string, E = never, R = never> {
|
|
120
|
+
interface RuleOptions<Subject extends object, Fields extends string> {
|
|
130
121
|
readonly fields?: SingleOrReadonlyArray<Fields>;
|
|
131
122
|
readonly conditions?: MongoCondition<Subject>;
|
|
132
|
-
readonly when?: Predicate<Subject, E, R>;
|
|
133
123
|
readonly reason?: string;
|
|
134
124
|
}
|
|
135
125
|
/**
|
|
136
126
|
* @since 0.1.0
|
|
137
127
|
* @category Models
|
|
138
128
|
*/
|
|
139
|
-
interface Rule<Kind extends RuleKind, Action extends string, Name extends string, Subject extends object, Fields extends string
|
|
129
|
+
interface Rule<Kind extends RuleKind, Action extends string, Name extends string, Subject extends object, Fields extends string> extends Equal.Equal, Inspectable.Inspectable, Pipeable.Pipeable, Effect.Yieldable<Rule<Kind, Action, Name, Subject, Fields>, Rule<Kind, Action, Name, Subject, Fields>> {
|
|
140
130
|
readonly [RuleTypeId]: RuleTypeId;
|
|
141
131
|
readonly _tag: Kind;
|
|
142
132
|
readonly action: SingleOrReadonlyArray<Action>;
|
|
143
133
|
readonly subject: SingleOrReadonlyArray<Name>;
|
|
144
134
|
readonly fields?: ReadonlyArray<Fields>;
|
|
145
135
|
readonly conditions?: MongoCondition<Subject>;
|
|
146
|
-
readonly when?: Predicate<Subject, E, R>;
|
|
147
136
|
readonly reason?: string;
|
|
148
137
|
}
|
|
149
138
|
/**
|
|
150
139
|
* @since 0.1.0
|
|
151
140
|
* @category Models
|
|
152
141
|
*/
|
|
153
|
-
type AnyRule = Rule<RuleKind, string, string, any, string
|
|
142
|
+
type AnyRule = Rule<RuleKind, string, string, any, string>;
|
|
154
143
|
/**
|
|
155
144
|
* @since 0.1.0
|
|
156
145
|
* @category Models
|
|
@@ -202,8 +191,8 @@ type ExpandedAction<Action extends string, Aliases extends ActionAliases, Depth
|
|
|
202
191
|
* @category Models
|
|
203
192
|
*/
|
|
204
193
|
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
|
|
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
|
|
194
|
+
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>>(action: Action, subject: Name, options?: RuleOptions<SubjectFor<Subjects, ElementOf<Name>> & object, Fields>) => Rule<"Allow", ElementOf<Action> & string, ElementOf<Name> & string, SubjectFor<Subjects, ElementOf<Name>> & object, Fields>;
|
|
195
|
+
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>>(action: Action, subject: Name, options?: RuleOptions<SubjectFor<Subjects, ElementOf<Name>> & object, Fields>) => Rule<"Deny", ElementOf<Action> & string, ElementOf<Name> & string, SubjectFor<Subjects, ElementOf<Name>> & object, Fields>;
|
|
207
196
|
}
|
|
208
197
|
/**
|
|
209
198
|
* @since 0.1.0
|
|
@@ -217,35 +206,38 @@ interface RawRule<Action extends string = string, Name extends string = string,
|
|
|
217
206
|
readonly inverted?: boolean;
|
|
218
207
|
readonly reason?: string;
|
|
219
208
|
}
|
|
220
|
-
type RuleAction<Rules> = Rules extends Rule<infer _Kind, infer Action, infer _Name, infer _Subject, infer _Fields
|
|
221
|
-
type RuleSubjectName<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer Name, infer _Subject, infer _Fields
|
|
222
|
-
type RuleFields<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer _Name, infer _Subject, infer Fields
|
|
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;
|
|
209
|
+
type RuleAction<Rules> = Rules extends Rule<infer _Kind, infer Action, infer _Name, infer _Subject, infer _Fields> ? Action : never;
|
|
210
|
+
type RuleSubjectName<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer Name, infer _Subject, infer _Fields> ? Name : never;
|
|
211
|
+
type RuleFields<Rules> = Rules extends Rule<infer _Kind, infer _Action, infer _Name, infer _Subject, infer Fields> ? Fields : never;
|
|
225
212
|
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
213
|
type SubjectMatches<Rule, Name extends string> = Rule extends AnyRule ? Name extends RuleSubjectName<Rule> ? Rule : AnySubject extends RuleSubjectName<Rule> ? Rule : never : never;
|
|
227
214
|
type RulesMatching<Rules, Action extends string, Name extends string, Aliases extends ActionAliases> = SubjectMatches<ActionMatches<Rules, Action, Aliases>, Name>;
|
|
228
|
-
type
|
|
229
|
-
type
|
|
230
|
-
type
|
|
231
|
-
type
|
|
215
|
+
type RuleAllowedActions<Rule, Aliases extends ActionAliases> = Rule extends AnyRule ? AnyAction extends RuleAction<Rule> ? string : ExpandedAction<RuleAction<Rule> & string, Aliases> : never;
|
|
216
|
+
type RuleAllowedSubjects<Subjects extends SubjectMap, Rule> = AnySubject extends RuleSubjectName<Rule> ? SubjectName<Subjects> : Extract<RuleSubjectName<Rule>, SubjectName<Subjects>>;
|
|
217
|
+
type AllowedActions<Rules, Aliases extends ActionAliases> = RuleAllowedActions<Rules, Aliases>;
|
|
218
|
+
type AllowedSubjects<Subjects extends SubjectMap, Rules> = RuleAllowedSubjects<Subjects, Rules>;
|
|
219
|
+
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] ? never : string extends Fields & string ? FieldOf<Subjects[Name]> : Extract<Fields, FieldPattern> extends never ? Extract<Fields & string, FieldOf<Subjects[Name]>> : FieldOf<Subjects[Name]> : never;
|
|
220
|
+
type ExplicitRuleCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, Rule extends AnyRule> = RuleAllowedActions<Rule, Aliases> extends infer Action ? Action extends string ? RuleAllowedSubjects<Subjects, Rule> extends infer Name ? Name extends SubjectName<Subjects> ? {
|
|
232
221
|
readonly action: Action;
|
|
233
222
|
readonly subject: Name;
|
|
234
223
|
readonly value?: Subjects[Name] | TypedSubject<Name, Subjects[Name]>;
|
|
235
224
|
readonly field?: FieldFor<Subjects, Rules, Aliases, Action, Name>;
|
|
236
225
|
} : never : never : never : never;
|
|
237
|
-
type
|
|
226
|
+
type ExplicitCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = Rules extends AnyRule ? ExplicitRuleCheckRequest<Subjects, Rules, Aliases, Rules> : never;
|
|
227
|
+
type TypedSubjectRuleCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, Rule extends AnyRule> = RuleAllowedActions<Rule, Aliases> extends infer Action ? Action extends string ? RuleAllowedSubjects<Subjects, Rule> extends infer Name ? Name extends SubjectName<Subjects> ? {
|
|
238
228
|
readonly action: Action;
|
|
239
229
|
readonly subject?: never;
|
|
240
230
|
readonly value: TypedSubject<Name, Subjects[Name]>;
|
|
241
231
|
readonly field?: FieldFor<Subjects, Rules, Aliases, Action, Name>;
|
|
242
232
|
} : never : never : never : never;
|
|
243
|
-
type
|
|
244
|
-
|
|
233
|
+
type TypedSubjectCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = Rules extends AnyRule ? TypedSubjectRuleCheckRequest<Subjects, Rules, Aliases, Rules> : never;
|
|
234
|
+
type DetectedSubjectRuleCheckRequest<Subjects extends SubjectMap, Aliases extends ActionAliases, Rule extends AnyRule> = RuleAllowedActions<Rule, Aliases> extends infer Action ? Action extends string ? RuleAllowedSubjects<Subjects, Rule> extends infer Name ? Name extends SubjectName<Subjects> ? {
|
|
235
|
+
readonly action: Action;
|
|
245
236
|
readonly subject?: never;
|
|
246
|
-
readonly value:
|
|
237
|
+
readonly value: Subjects[Name];
|
|
247
238
|
readonly field?: string;
|
|
248
|
-
};
|
|
239
|
+
} : never : never : never : never;
|
|
240
|
+
type DetectedSubjectCheckRequest<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases> = Rules extends AnyRule ? DetectedSubjectRuleCheckRequest<Subjects, Aliases, Rules> : never;
|
|
249
241
|
/**
|
|
250
242
|
* @since 0.1.0
|
|
251
243
|
* @category Models
|
|
@@ -281,13 +273,6 @@ type RequestSubject<Request> = Request extends {
|
|
|
281
273
|
readonly value: TypedSubject<infer Name, object>;
|
|
282
274
|
} ? Name & string : string;
|
|
283
275
|
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
276
|
/**
|
|
292
277
|
* @since 0.1.0
|
|
293
278
|
* @category Models
|
|
@@ -315,26 +300,6 @@ declare const ConditionError: typeof ConditionError$1;
|
|
|
315
300
|
* @category Errors
|
|
316
301
|
*/
|
|
317
302
|
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
303
|
/**
|
|
339
304
|
* @since 0.1.0
|
|
340
305
|
* @category Errors
|
|
@@ -402,7 +367,17 @@ declare const make: <Subjects extends SubjectMap, Rules extends AnyRule, const A
|
|
|
402
367
|
* @since 0.1.0
|
|
403
368
|
* @category Constructors
|
|
404
369
|
*/
|
|
405
|
-
declare const fromRawRules: <Subjects extends SubjectMap, const Aliases extends ActionAliases = {}>(rules: Iterable<RawRule<string, RuleSubject<Subjects>, string, MongoCondition<
|
|
370
|
+
declare const fromRawRules: <Subjects extends SubjectMap, const Aliases extends ActionAliases = {}>(rules: Iterable<RawRule<string, RuleSubject<Subjects>, string, MongoCondition<any>>>, options?: AbilityOptions<Subjects, Aliases>) => Effect.Effect<Ability<Subjects, AnyRule, Aliases>, AliasError | RawRuleError>;
|
|
371
|
+
/**
|
|
372
|
+
* Returns a new Ability from raw rules using an existing Ability's options.
|
|
373
|
+
*
|
|
374
|
+
* @since 0.1.0
|
|
375
|
+
* @category Constructors
|
|
376
|
+
*/
|
|
377
|
+
declare const update: {
|
|
378
|
+
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(rules: Iterable<RawRule<string, RuleSubject<Subjects>, string, MongoCondition<any>>>): (self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<Ability<Subjects, AnyRule, Aliases>, AliasError | RawRuleError>;
|
|
379
|
+
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases>, rules: Iterable<RawRule<string, RuleSubject<Subjects>, string, MongoCondition<any>>>): Effect.Effect<Ability<Subjects, AnyRule, Aliases>, AliasError | RawRuleError>;
|
|
380
|
+
};
|
|
406
381
|
/**
|
|
407
382
|
* Creates a pure typed subject wrapper without mutating the wrapped value.
|
|
408
383
|
*
|
|
@@ -451,9 +426,9 @@ declare const detectSubjectType: <Subjects extends SubjectMap, Rules extends Any
|
|
|
451
426
|
* @since 0.1.0
|
|
452
427
|
* @category Conversions
|
|
453
428
|
*/
|
|
454
|
-
declare const toRawRules: <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases
|
|
429
|
+
declare const toRawRules: <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases>) => Effect.Effect<ReadonlyArray<RawRule>>;
|
|
455
430
|
/**
|
|
456
|
-
* Returns rules that may apply for a request before field
|
|
431
|
+
* Returns rules that may apply for a request before field and condition checks.
|
|
457
432
|
*
|
|
458
433
|
* @since 0.1.0
|
|
459
434
|
* @category Accessors
|
|
@@ -479,8 +454,8 @@ declare const rulesFor: {
|
|
|
479
454
|
* @category Accessors
|
|
480
455
|
*/
|
|
481
456
|
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 |
|
|
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 |
|
|
457
|
+
<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 | SubjectDetectionError>;
|
|
458
|
+
<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 | SubjectDetectionError>;
|
|
484
459
|
};
|
|
485
460
|
/**
|
|
486
461
|
* Returns actions that have rules for a subject.
|
|
@@ -499,8 +474,8 @@ declare const actionsFor: {
|
|
|
499
474
|
* @category Combinators
|
|
500
475
|
*/
|
|
501
476
|
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 |
|
|
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 |
|
|
477
|
+
<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 | SubjectDetectionError>;
|
|
478
|
+
<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 | SubjectDetectionError>;
|
|
504
479
|
};
|
|
505
480
|
/**
|
|
506
481
|
* Computes fields permitted for a request.
|
|
@@ -509,8 +484,8 @@ declare const check: {
|
|
|
509
484
|
* @category Combinators
|
|
510
485
|
*/
|
|
511
486
|
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 |
|
|
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 |
|
|
487
|
+
<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 | SubjectDetectionError>;
|
|
488
|
+
<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 | SubjectDetectionError>;
|
|
514
489
|
};
|
|
515
490
|
//#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,
|
|
491
|
+
export { Ability, AbilityOptions, Ability_d_exports, ActionAliases, ActionResolver, AliasError, AnyAction, AnyRule, AnySubject, AuthorizationError, Builder, CheckRequest, ConditionError, DetectSubjectType, ExpandedAction, FieldOf, FieldPath, FieldPattern, MongoCondition, PermittedFieldsOptions, QueryGenerationError, RawRule, RawRuleError, Rule, RuleKind, RuleOptions, RuleQueryRequest, RuleSubject, RuleTypeId, SingleOrReadonlyArray, SubjectDetectionError, SubjectMap, SubjectName, SubjectQueryRequest, SubjectTypeId, SubjectUnion, TypeId, TypedSubject, actionsFor, check, createAliasResolver, define, detectSubjectType, fromRawRules, isAbility, isRule, isSubject, make, permittedFields, possibleRulesFor, relevantRuleFor, rulesFor, subject, toRawRules, unwrapSubject, update };
|
package/dist/Ability.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { __exportAll } from "./_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { AliasError as AliasError$1, AuthorizationError as AuthorizationError$1, ConditionError as ConditionError$1,
|
|
2
|
+
import { AliasError as AliasError$1, AuthorizationError as AuthorizationError$1, ConditionError as ConditionError$1, QueryGenerationError as QueryGenerationError$1, RawRuleError as RawRuleError$1, RuleTypeId as RuleTypeId$1, SubjectDetectionError as SubjectDetectionError$1, SubjectTypeId as SubjectTypeId$1, TypeId as TypeId$1, actionsFor as actionsFor$1, check as check$1, createAliasResolver as createAliasResolver$1, define as define$1, detectSubjectType as detectSubjectType$1, fromRawRules as fromRawRules$1, isAbility as isAbility$1, isRule as isRule$1, isSubject as isSubject$1, make as make$1, permittedFields as permittedFields$1, possibleRulesFor as possibleRulesFor$1, relevantRuleFor as relevantRuleFor$1, rulesFor as rulesFor$1, subject as subject$1, toRawRules as toRawRules$1, unwrapSubject as unwrapSubject$1, update as update$1 } from "./internal/ability.js";
|
|
3
3
|
//#region src/Ability.ts
|
|
4
4
|
var Ability_exports = /* @__PURE__ */ __exportAll({
|
|
5
5
|
AliasError: () => AliasError,
|
|
6
6
|
AuthorizationError: () => AuthorizationError,
|
|
7
7
|
ConditionError: () => ConditionError,
|
|
8
|
-
PredicateEvaluationError: () => PredicateEvaluationError,
|
|
9
8
|
QueryGenerationError: () => QueryGenerationError,
|
|
10
9
|
RawRuleError: () => RawRuleError,
|
|
11
10
|
RuleTypeId: () => RuleTypeId,
|
|
12
|
-
SerializationError: () => SerializationError,
|
|
13
11
|
SubjectDetectionError: () => SubjectDetectionError,
|
|
14
12
|
SubjectTypeId: () => SubjectTypeId,
|
|
15
13
|
TypeId: () => TypeId,
|
|
@@ -29,7 +27,8 @@ var Ability_exports = /* @__PURE__ */ __exportAll({
|
|
|
29
27
|
rulesFor: () => rulesFor,
|
|
30
28
|
subject: () => subject,
|
|
31
29
|
toRawRules: () => toRawRules,
|
|
32
|
-
unwrapSubject: () => unwrapSubject
|
|
30
|
+
unwrapSubject: () => unwrapSubject,
|
|
31
|
+
update: () => update
|
|
33
32
|
});
|
|
34
33
|
/**
|
|
35
34
|
* @since 0.1.0
|
|
@@ -62,16 +61,6 @@ const ConditionError = ConditionError$1;
|
|
|
62
61
|
* @since 0.1.0
|
|
63
62
|
* @category Errors
|
|
64
63
|
*/
|
|
65
|
-
const PredicateEvaluationError = PredicateEvaluationError$1;
|
|
66
|
-
/**
|
|
67
|
-
* @since 0.1.0
|
|
68
|
-
* @category Errors
|
|
69
|
-
*/
|
|
70
|
-
const SerializationError = SerializationError$1;
|
|
71
|
-
/**
|
|
72
|
-
* @since 0.1.0
|
|
73
|
-
* @category Errors
|
|
74
|
-
*/
|
|
75
64
|
const RawRuleError = RawRuleError$1;
|
|
76
65
|
/**
|
|
77
66
|
* @since 0.1.0
|
|
@@ -117,6 +106,13 @@ const make = make$1;
|
|
|
117
106
|
*/
|
|
118
107
|
const fromRawRules = fromRawRules$1;
|
|
119
108
|
/**
|
|
109
|
+
* Returns a new Ability from raw rules using an existing Ability's options.
|
|
110
|
+
*
|
|
111
|
+
* @since 0.1.0
|
|
112
|
+
* @category Constructors
|
|
113
|
+
*/
|
|
114
|
+
const update = update$1;
|
|
115
|
+
/**
|
|
120
116
|
* Creates a pure typed subject wrapper without mutating the wrapped value.
|
|
121
117
|
*
|
|
122
118
|
* @since 0.1.0
|
|
@@ -166,7 +162,7 @@ const detectSubjectType = detectSubjectType$1;
|
|
|
166
162
|
*/
|
|
167
163
|
const toRawRules = toRawRules$1;
|
|
168
164
|
/**
|
|
169
|
-
* Returns rules that may apply for a request before field
|
|
165
|
+
* Returns rules that may apply for a request before field and condition checks.
|
|
170
166
|
*
|
|
171
167
|
* @since 0.1.0
|
|
172
168
|
* @category Accessors
|
|
@@ -208,4 +204,4 @@ const check = check$1;
|
|
|
208
204
|
*/
|
|
209
205
|
const permittedFields = permittedFields$1;
|
|
210
206
|
//#endregion
|
|
211
|
-
export { Ability_exports, AliasError, AuthorizationError, ConditionError,
|
|
207
|
+
export { Ability_exports, AliasError, AuthorizationError, ConditionError, QueryGenerationError, RawRuleError, RuleTypeId, SubjectDetectionError, SubjectTypeId, TypeId, actionsFor, check, createAliasResolver, define, detectSubjectType, fromRawRules, isAbility, isRule, isSubject, make, permittedFields, possibleRulesFor, relevantRuleFor, rulesFor, subject, toRawRules, unwrapSubject, update };
|
package/dist/AbilityExtra.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ declare const unpackRules: <Rule extends RawRule = RawRule>(rules: Iterable<Pack
|
|
|
52
52
|
* @category Conversions
|
|
53
53
|
*/
|
|
54
54
|
declare const rulesToFields: {
|
|
55
|
-
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases
|
|
55
|
+
<const Request>(request: Request): <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases> & (Request extends RuleQueryRequest<Subjects, Rules, Aliases> ? unknown : never)) => Effect.Effect<Readonly<Record<string, unknown>>, QueryGenerationError | SubjectDetectionError>;
|
|
56
56
|
<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<Readonly<Record<string, unknown>>, QueryGenerationError | SubjectDetectionError>;
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
@@ -62,7 +62,7 @@ declare const rulesToFields: {
|
|
|
62
62
|
* @category Conversions
|
|
63
63
|
*/
|
|
64
64
|
declare const rulesToCondition: {
|
|
65
|
-
<
|
|
65
|
+
<const Request, Query, E = never, R = never>(request: Request, convert: (rule: AnyRule) => Query | Effect.Effect<Query, E, R>, hooks: RulesToConditionHooks<Query>): <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases> & (Request extends RuleQueryRequest<Subjects, Rules, Aliases> ? unknown : never)) => Effect.Effect<Query | null, QueryGenerationError | SubjectDetectionError | E, R>;
|
|
66
66
|
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>, Query, E = never, R = never>(self: Ability<Subjects, Rules, Aliases>, request: Request, convert: (rule: Rules) => Query | Effect.Effect<Query, E, R>, hooks: RulesToConditionHooks<Query>): Effect.Effect<Query | null, QueryGenerationError | SubjectDetectionError | E, R>;
|
|
67
67
|
};
|
|
68
68
|
/**
|
|
@@ -72,7 +72,7 @@ declare const rulesToCondition: {
|
|
|
72
72
|
* @category Conversions
|
|
73
73
|
*/
|
|
74
74
|
declare const rulesToQuery: {
|
|
75
|
-
<
|
|
75
|
+
<const Request, Query, E = never, R = never>(request: Request, convert: (rule: AnyRule) => Query | Effect.Effect<Query, E, R>): <Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases>(self: Ability<Subjects, Rules, Aliases> & (Request extends RuleQueryRequest<Subjects, Rules, Aliases> ? unknown : never)) => Effect.Effect<LogicalQuery<Query> | null, QueryGenerationError | SubjectDetectionError | E, R>;
|
|
76
76
|
<Subjects extends SubjectMap, Rules extends AnyRule, Aliases extends ActionAliases, const Request extends RuleQueryRequest<Subjects, Rules, Aliases>, Query, E = never, R = never>(self: Ability<Subjects, Rules, Aliases>, request: Request, convert: (rule: Rules) => Query | Effect.Effect<Query, E, R>): Effect.Effect<LogicalQuery<Query> | null, QueryGenerationError | SubjectDetectionError | E, R>;
|
|
77
77
|
};
|
|
78
78
|
//#endregion
|
package/dist/AbilityExtra.js
CHANGED
|
@@ -19,8 +19,6 @@ import { dual } from "effect/Function";
|
|
|
19
19
|
* or {@link rulesToQuery}.
|
|
20
20
|
*
|
|
21
21
|
* Gotchas:
|
|
22
|
-
* - Query generation rejects function predicates because they cannot be
|
|
23
|
-
* represented as static conditions.
|
|
24
22
|
* - Conversion callbacks may be synchronous or Effectful; synchronous throws are
|
|
25
23
|
* converted to `QueryGenerationError`.
|
|
26
24
|
*
|
|
@@ -101,10 +99,6 @@ const queryGenerationError = (reason, ruleIndex, cause) => {
|
|
|
101
99
|
if (cause !== void 0) error.cause = cause;
|
|
102
100
|
return new QueryGenerationError(error);
|
|
103
101
|
};
|
|
104
|
-
const assertSerializableRule = (rule, ruleIndex) => {
|
|
105
|
-
if (rule.when !== void 0) return Effect.fail(queryGenerationError("Cannot transform rules with function predicates", ruleIndex));
|
|
106
|
-
return Effect.void;
|
|
107
|
-
};
|
|
108
102
|
/**
|
|
109
103
|
* Extracts scalar condition values as default fields.
|
|
110
104
|
*
|
|
@@ -116,7 +110,6 @@ const rulesToFields = dual(2, Effect.fnUntraced(function* (self, request) {
|
|
|
116
110
|
const fields = {};
|
|
117
111
|
let index = 0;
|
|
118
112
|
for (const rule of rules) {
|
|
119
|
-
yield* assertSerializableRule(rule, index);
|
|
120
113
|
if (rule._tag === "Allow" && rule.conditions !== void 0) for (const key of Object.keys(rule.conditions)) {
|
|
121
114
|
const value = rule.conditions[key];
|
|
122
115
|
if (!isPlainObject(value)) setByPath(fields, key, value);
|
|
@@ -143,7 +136,6 @@ const rulesToConditionEffect = Effect.fnUntraced(function* (self, request, conve
|
|
|
143
136
|
let index = 0;
|
|
144
137
|
while (index < rules.length) {
|
|
145
138
|
const rule = rules[index];
|
|
146
|
-
yield* assertSerializableRule(rule, index);
|
|
147
139
|
if (rule._tag === "Deny") {
|
|
148
140
|
if (rule.conditions === void 0) break;
|
|
149
141
|
const condition = yield* convertRule(rule, convert, index);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { Ability_d_exports } from "./Ability.js";
|
|
2
2
|
import { AbilityExtra_d_exports } from "./AbilityExtra.js";
|
|
3
|
-
|
|
4
|
-
export { Ability_d_exports as Ability, AbilityExtra_d_exports as AbilityExtra, AbilityRef_d_exports as AbilityRef };
|
|
3
|
+
export { Ability_d_exports as Ability, AbilityExtra_d_exports as AbilityExtra };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { Ability_exports } from "./Ability.js";
|
|
2
2
|
import { AbilityExtra_exports } from "./AbilityExtra.js";
|
|
3
|
-
|
|
4
|
-
export { Ability_exports as Ability, AbilityExtra_exports as AbilityExtra, AbilityRef_exports as AbilityRef };
|
|
3
|
+
export { Ability_exports as Ability, AbilityExtra_exports as AbilityExtra };
|
|
@@ -40,30 +40,6 @@ declare class ConditionError extends ConditionError_base<{
|
|
|
40
40
|
readonly field?: string;
|
|
41
41
|
readonly cause: unknown;
|
|
42
42
|
}> {}
|
|
43
|
-
declare const PredicateEvaluationError_base: new <A extends Record<string, any> = {}>(args: _$effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => _$effect_Cause0.YieldableError & {
|
|
44
|
-
readonly _tag: "PredicateEvaluationError";
|
|
45
|
-
} & Readonly<A>;
|
|
46
|
-
/**
|
|
47
|
-
* @since 0.1.0
|
|
48
|
-
* @category Errors
|
|
49
|
-
*/
|
|
50
|
-
declare class PredicateEvaluationError extends PredicateEvaluationError_base<{
|
|
51
|
-
readonly action: string;
|
|
52
|
-
readonly subject: string;
|
|
53
|
-
readonly field?: string;
|
|
54
|
-
readonly cause: unknown;
|
|
55
|
-
}> {}
|
|
56
|
-
declare const SerializationError_base: new <A extends Record<string, any> = {}>(args: _$effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => _$effect_Cause0.YieldableError & {
|
|
57
|
-
readonly _tag: "SerializationError";
|
|
58
|
-
} & Readonly<A>;
|
|
59
|
-
/**
|
|
60
|
-
* @since 0.1.0
|
|
61
|
-
* @category Errors
|
|
62
|
-
*/
|
|
63
|
-
declare class SerializationError extends SerializationError_base<{
|
|
64
|
-
readonly reason: string;
|
|
65
|
-
readonly ruleIndex?: number;
|
|
66
|
-
}> {}
|
|
67
43
|
declare const RawRuleError_base: new <A extends Record<string, any> = {}>(args: _$effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => _$effect_Cause0.YieldableError & {
|
|
68
44
|
readonly _tag: "RawRuleError";
|
|
69
45
|
} & Readonly<A>;
|
|
@@ -111,4 +87,4 @@ declare class QueryGenerationError extends QueryGenerationError_base<{
|
|
|
111
87
|
readonly cause?: unknown;
|
|
112
88
|
}> {}
|
|
113
89
|
//#endregion
|
|
114
|
-
export { AliasError, AuthorizationError, ConditionError,
|
|
90
|
+
export { AliasError, AuthorizationError, ConditionError, QueryGenerationError, RawRuleError, RuleTypeId, SubjectDetectionError, SubjectTypeId, TypeId };
|