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