Файловый менеджер - Редактировать - /home/freeclou/app.optimyar.com/backend/node_modules/@casl/ability/dist/es6/index.js.map
Назад
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/Rule.ts","../../src/RulesAnalyzer.ts","../../src/PureAbility.ts","../../src/RuleIndex.ts","../../src/matchers/conditions.ts","../../src/matchers/field.ts","../../src/Ability.ts","../../src/AbilityBuilder.ts","../../src/ForbiddenError.ts"],"sourcesContent":["import { AnyObject, Subject, SubjectClass, ForcedSubject, AliasesMap } from './types';\n\nexport function wrapArray<T>(value: T[] | T): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nexport function setByPath(object: AnyObject, path: string, value: unknown): void {\n let ref = object;\n let lastKey = path;\n\n if (path.indexOf('.') !== -1) {\n const keys = path.split('.');\n\n lastKey = keys.pop()!;\n ref = keys.reduce((res, prop) => {\n res[prop] = res[prop] || {};\n return res[prop] as AnyObject;\n }, object);\n }\n\n ref[lastKey] = value;\n}\n\nconst TYPE_FIELD = '__caslSubjectType__';\nexport function setSubjectType<\n T extends string,\n U extends Record<PropertyKey, any>\n>(type: T, object: U): U & ForcedSubject<T> {\n if (object) {\n if (!object.hasOwnProperty(TYPE_FIELD)) {\n Object.defineProperty(object, TYPE_FIELD, { value: type });\n } else if (type !== object[TYPE_FIELD]) {\n throw new Error(`Trying to cast object to subject type ${type} but previously it was casted to ${object[TYPE_FIELD]}`);\n }\n }\n\n return object as U & ForcedSubject<T>;\n}\n\nexport function detectSubjectType<T extends Subject>(subject?: T): string {\n if (!subject) {\n return 'all';\n }\n\n if (typeof subject === 'string') {\n return subject;\n }\n\n if (subject.hasOwnProperty(TYPE_FIELD)) {\n return (subject as any)[TYPE_FIELD];\n }\n\n const Type = typeof subject === 'function' ? subject : subject.constructor;\n return (Type as SubjectClass).modelName || Type.name;\n}\n\nexport function expandActions(aliasMap: AliasesMap, rawActions: string | string[]) {\n let actions = wrapArray(rawActions);\n let i = 0;\n\n while (i < actions.length) {\n const action = actions[i++];\n\n if (aliasMap.hasOwnProperty(action)) {\n actions = actions.concat(aliasMap[action]);\n }\n }\n\n return actions;\n}\n\nfunction assertAliasMap(aliasMap: AliasesMap) {\n if (aliasMap.manage) {\n throw new Error('Cannot add alias for \"manage\" action because it is reserved');\n }\n\n Object.keys(aliasMap).forEach((alias) => {\n const hasError = alias === aliasMap[alias]\n || Array.isArray(aliasMap[alias]) && (\n aliasMap[alias].indexOf(alias) !== -1 || aliasMap[alias].indexOf('manage') !== -1\n );\n\n if (hasError) {\n throw new Error(`Attempt to alias action to itself: ${alias} -> ${aliasMap[alias]}`);\n }\n });\n}\n\nexport const identity = <T>(x: T) => x;\nexport function createAliasResolver(aliasMap: AliasesMap) {\n if (process.env.NODE_ENV !== 'production') {\n assertAliasMap(aliasMap);\n }\n\n return (action: string | string[]) => expandActions(aliasMap, action);\n}\n","import { wrapArray } from './utils';\nimport {\n MatchConditions,\n RuleOptions,\n MatchField,\n Abilities,\n ToAbilityTypes,\n Normalize\n} from './types';\nimport { RawRule } from './RawRule';\n\ntype Tuple<A extends Abilities> = Normalize<ToAbilityTypes<A>>;\n\nexport class Rule<A extends Abilities, C> {\n private readonly _matchConditions: MatchConditions | undefined;\n private readonly _matchField: MatchField<string> | undefined;\n public readonly action!: Tuple<A>[0] | Tuple<A>[0][];\n public readonly subject!: Tuple<A>[1] | Tuple<A>[1][];\n public readonly inverted!: boolean;\n public readonly conditions!: C | undefined;\n public readonly fields!: string[] | undefined;\n public readonly reason!: string | undefined;\n\n constructor(rule: RawRule<ToAbilityTypes<A>, C>, options: RuleOptions<A, C>) {\n this.action = options.resolveAction((rule as any).actions || (rule as any).action);\n this.subject = rule.subject;\n this.inverted = !!rule.inverted;\n this.conditions = rule.conditions;\n this.reason = rule.reason;\n this.fields = !rule.fields || rule.fields.length === 0\n ? undefined\n : wrapArray(rule.fields);\n\n if ('actions' in rule) {\n // eslint-disable-next-line\n console.warn('Rule `actions` field is deprecated. Use `action` field instead');\n }\n\n if (this.conditions && options.conditionsMatcher) {\n this._matchConditions = options.conditionsMatcher(this.conditions);\n }\n\n if (this.fields && options.fieldMatcher) {\n this._matchField = options.fieldMatcher(this.fields);\n }\n }\n\n matchesConditions(object: Normalize<A>[1] | undefined): boolean {\n if (!this._matchConditions) {\n return true;\n }\n\n if (!object || typeof object === 'string' || typeof object === 'function') {\n return !this.inverted;\n }\n\n return this._matchConditions(object as object);\n }\n\n matchesField(field: string | undefined): boolean {\n if (!this._matchField) {\n return true;\n }\n\n if (!field) {\n return !this.inverted;\n }\n\n return this._matchField(field);\n }\n}\n","import { RawRuleFrom } from './RawRule';\nimport { Abilities, RuleOptions } from './types';\n\nexport default class RulesAnalyzer<A extends Abilities, C> {\n public _isAllInverted: boolean;\n public _hasPerFieldRules: boolean = false;\n public _hasRuleWithEmptyFields: boolean = false;\n\n constructor(hasRules: boolean) {\n this._isAllInverted = hasRules;\n this._analyze = this._analyze.bind(this);\n }\n\n _analyze({ fields, inverted }: RawRuleFrom<A, C>) {\n this._isAllInverted = this._isAllInverted && !!inverted;\n\n if (!this._hasRuleWithEmptyFields && Array.isArray(fields) && !fields.length) {\n this._hasRuleWithEmptyFields = true;\n }\n\n if (!this._hasPerFieldRules && fields && fields.length) {\n this._hasPerFieldRules = true;\n }\n }\n\n _validate(ruleOptions: RuleOptions<A, C>) {\n if (this._isAllInverted) {\n // eslint-disable-next-line\n console.warn('Make sure your ability has direct rules, not only inverted ones. Otherwise `ability.can` will always return `false`.');\n }\n\n if (this._hasRuleWithEmptyFields) {\n // eslint-disable-next-line\n console.warn('[error in next major version]: There are rules with `fields` property being an empty array. This results in the same as not passing fields at all. Make sure to remove empty array or pass fields.');\n }\n\n if (this._hasPerFieldRules && !ruleOptions.fieldMatcher) {\n throw new Error('Field level restrictions are ignored because \"fieldMatcher\" option is not specified. Did you unintentionally used PureAbility instead of Ability?');\n }\n }\n}\n","import { RuleIndex, RuleIndexOptions, RuleIndexOptionsOf, RawRuleOf } from './RuleIndex';\nimport { Abilities, CanParameters } from './types';\n\nexport type AbilityOptions<A extends Abilities, Conditions> = RuleIndexOptions<A, Conditions>;\nexport type AnyAbility = PureAbility<any, any>;\nexport type AbilityOptionsOf<T extends AnyAbility> = RuleIndexOptionsOf<T>;\nexport type AbilityClass<T extends AnyAbility> = new (\n rules?: RawRuleOf<T>[],\n options?: AbilityOptionsOf<T>\n) => T;\n\ninterface AbilityEvent<A extends Abilities = Abilities, Conditions = unknown> {\n /** @deprecated use \"target\" property instead */\n ability: this['target']\n target: PureAbility<A, Conditions>\n}\n\nexport class PureAbility<\n A extends Abilities = Abilities,\n Conditions = unknown\n> extends RuleIndex<A, Conditions, AbilityEvent<A, Conditions>> {\n can(...args: CanParameters<A>): boolean {\n const rule = this.relevantRuleFor(...args);\n return !!rule && !rule.inverted;\n }\n\n relevantRuleFor(...args: CanParameters<A>) {\n const rules = this.rulesFor(...args);\n const subject = args[1];\n\n for (let i = 0; i < rules.length; i++) {\n if (rules[i].matchesConditions(subject)) {\n return rules[i];\n }\n }\n\n return null;\n }\n\n cannot(...args: CanParameters<A>): boolean {\n return !this.can(...args);\n }\n}\n","import { Rule } from './Rule';\nimport { RawRuleFrom } from './RawRule';\nimport {\n DetectSubjectType,\n ResolveAction,\n CanParameters,\n Abilities,\n Normalize,\n ConditionsMatcher,\n FieldMatcher,\n RuleOptions,\n} from './types';\nimport { wrapArray, detectSubjectType, identity } from './utils';\nimport RulesAnalyzer from './RulesAnalyzer';\n\ntype AnyRuleIndex = RuleIndex<any, any, any>;\n\nexport interface RuleIndexOptions<A extends Abilities, Conditions> {\n /** @deprecated use \"detectSubjectType\" option instead */\n subjectName?: this['detectSubjectType']\n detectSubjectType?: DetectSubjectType<Normalize<A>[1]>\n conditionsMatcher?: ConditionsMatcher<Conditions>\n fieldMatcher?: FieldMatcher\n resolveAction?: ResolveAction<Normalize<A>[0]>\n}\n\nexport type Generics<T extends AnyRuleIndex> = T extends AnyRuleIndex\n ? { abilities: T['za'], conditions: T['zc'] }\n : never;\n\nexport type RuleOf<T extends AnyRuleIndex> =\n Rule<Generics<T>['abilities'], Generics<T>['conditions']>;\nexport type RawRuleOf<T extends AnyRuleIndex> =\n RawRuleFrom<Generics<T>['abilities'], Generics<T>['conditions']>;\n\nexport type RuleIndexOptionsOf<T extends AnyRuleIndex> =\n RuleIndexOptions<Generics<T>['abilities'], Generics<T>['conditions']>;\n\nexport interface UpdateEvent<T extends AnyRuleIndex> {\n rules: RawRuleOf<T>[]\n}\nexport type EventHandler<Event> = (event: Event) => void;\n\nexport type Events<T extends AnyRuleIndex, Event extends {} = {}> = {\n [K in keyof EventsMap<T, Event>]: EventHandler<EventsMap<T, Event>[K]>[]\n};\n\ninterface EventsMap<T extends AnyRuleIndex, Event extends {} = {}> {\n update: UpdateEvent<T> & Event\n updated: UpdateEvent<T> & Event\n}\n\ninterface IndexTree<A extends Abilities, C> {\n [subject: string]: {\n [action: string]: {\n [priority: number]: Rule<A, C>\n }\n }\n}\n\ntype RuleIterator<A extends Abilities, C> = (rule: RawRuleFrom<A, C>, index: number) => void;\n\nexport type Unsubscribe = () => void;\n\nexport class RuleIndex<A extends Abilities, Conditions, BaseEvent extends {} = {}> {\n private _hasPerFieldRules: boolean = false;\n private _mergedRules: Record<string, Rule<A, Conditions>[]> = Object.create(null);\n private _events: Events<this, BaseEvent> = Object.create(null);\n private _indexedRules: IndexTree<A, Conditions> = Object.create(null);\n private _rules: this['rules'] = [];\n readonly rules!: RawRuleFrom<A, Conditions>[];\n readonly _ruleOptions!: RuleOptions<A, Conditions>;\n readonly detectSubjectType!: DetectSubjectType<Normalize<A>[1]>;\n /** @private hacky property to track Abilities type */\n readonly za!: A;\n /** @private hacky property to track Conditions type */\n readonly zc!: Conditions;\n\n constructor(\n rules: RawRuleFrom<A, Conditions>[] = [],\n options: RuleIndexOptions<A, Conditions> = {}\n ) {\n this._ruleOptions = {\n conditionsMatcher: options.conditionsMatcher,\n fieldMatcher: options.fieldMatcher,\n resolveAction: options.resolveAction || identity,\n };\n Object.defineProperty(this, 'detectSubjectType', {\n value: options.detectSubjectType || options.subjectName || detectSubjectType\n });\n Object.defineProperty(this, 'rules', { get: () => this._rules });\n this.update(rules);\n }\n\n update(rules: RawRuleFrom<A, Conditions>[]): this {\n const event = {\n rules,\n ability: this,\n target: this\n } as unknown as UpdateEvent<this> & BaseEvent;\n\n this._emit('update', event);\n this._mergedRules = Object.create(null);\n\n const analyser = new RulesAnalyzer<A, Conditions>(rules.length > 0);\n const indexedRules = this._buildIndexFor(rules, analyser._analyze);\n\n analyser._validate(this._ruleOptions);\n this._indexedRules = indexedRules;\n this._rules = rules;\n this._hasPerFieldRules = analyser._hasPerFieldRules;\n this._emit('updated', event);\n\n return this;\n }\n\n private _buildIndexFor(\n rawRules: RawRuleFrom<A, Conditions>[],\n iterator: RuleIterator<A, Conditions> = identity\n ) {\n const indexedRules: IndexTree<A, Conditions> = Object.create(null);\n\n for (let i = 0; i < rawRules.length; i++) {\n iterator(rawRules[i], i);\n const rule = new Rule(rawRules[i], this._ruleOptions);\n const priority = rawRules.length - i - 1;\n const actions = wrapArray(rule.action);\n const subjects = wrapArray(rule.subject);\n\n for (let k = 0; k < subjects.length; k++) {\n const subject = this.detectSubjectType(subjects[k]);\n indexedRules[subject] = indexedRules[subject] || Object.create(null);\n\n for (let j = 0; j < actions.length; j++) {\n const action = actions[j];\n indexedRules[subject][action] = indexedRules[subject][action] || Object.create(null);\n indexedRules[subject][action][priority] = rule;\n }\n }\n }\n\n return indexedRules;\n }\n\n possibleRulesFor(...args: CanParameters<A, false>) {\n const [action, subject] = args;\n const subjectName = this.detectSubjectType(subject);\n const mergedRules = this._mergedRules;\n const key = `${subjectName}_${action}`;\n\n if (!mergedRules[key]) {\n mergedRules[key] = this._mergeRulesFor(action, subjectName);\n }\n\n return mergedRules[key];\n }\n\n private _mergeRulesFor(action: string, subjectName: string) {\n const subjects = subjectName === 'all' ? [subjectName] : [subjectName, 'all'];\n const mergedRules = subjects.reduce((rules, subjectType) => {\n const subjectRules = this._indexedRules[subjectType];\n\n if (!subjectRules) {\n return rules;\n }\n\n return Object.assign(rules, subjectRules[action], subjectRules.manage);\n }, []);\n\n // TODO: think whether there is a better way to prioritize rules\n // or convert sparse array to regular one\n return mergedRules.filter(Boolean);\n }\n\n rulesFor(...args: CanParameters<A>) {\n const [action, subject, field] = args;\n const rules: Rule<A, Conditions>[] = (this as any).possibleRulesFor(action, subject);\n\n if (field && typeof field !== 'string') {\n throw new Error('The 3rd, `field` parameter is expected to be a string. See https://stalniy.github.io/casl/en/api/casl-ability#can-of-pure-ability for details');\n }\n\n if (!this._hasPerFieldRules) {\n return rules;\n }\n\n return rules.filter(rule => rule.matchesField(field));\n }\n\n on<T extends keyof EventsMap<this, BaseEvent>>(\n event: T,\n handler: EventHandler<EventsMap<this, BaseEvent>[T]>\n ): Unsubscribe {\n const events = this._events;\n let isAttached = true;\n\n if (!events[event]) {\n events[event] = [];\n }\n\n events[event].push(handler);\n\n return () => {\n if (isAttached) {\n const index = events[event].indexOf(handler);\n events[event].splice(index, 1);\n isAttached = false;\n }\n };\n }\n\n private _emit<T extends keyof EventsMap<this, BaseEvent>>(\n eventName: T,\n event: EventsMap<this, BaseEvent>[T]\n ) {\n const handlers = this._events[eventName];\n\n if (handlers) {\n handlers.slice(0).forEach(handler => handler(event));\n }\n }\n}\n","import {\n createQueryTester as sift,\n $eq,\n $ne,\n $lt,\n $lte,\n $gt,\n $gte,\n $in,\n $nin,\n $all,\n $size,\n $regex,\n $elemMatch,\n $exists\n} from 'sift';\nimport { ConditionsMatcher as Matcher } from '../types';\n\nconst defaultOperations = {\n $eq,\n $ne,\n $lt,\n $lte,\n $gt,\n $gte,\n $in,\n $nin,\n $all,\n $size,\n $regex,\n $elemMatch,\n $exists,\n};\n\ntype RegExpOptions<T> = { $regex: T, $options?: string };\ntype Primitive = Record<PropertyKey, any> | string | number | null | boolean | undefined;\nexport type MongoQueryOperators = {\n $eq?: any,\n $ne?: any,\n $lt?: string | number | Date,\n $lte?: string | number | Date,\n $gt?: string | number | Date,\n $gte?: string | number | Date,\n $in?: any[],\n $nin?: any[],\n $all?: any[],\n /** checks by array length */\n $size?: number,\n $regex?: RegExp | RegExpOptions<string> | RegExpOptions<RegExp>,\n /** checks the shape of array item */\n $elemMatch?: {\n [k in Exclude<keyof MongoQueryOperators, '$elemMatch'>]?: MongoQueryOperators[k]\n },\n /** checks that property exists */\n $exists?: boolean\n};\n\nexport type MongoQuery<AdditionalOperators = never> =\n Record<PropertyKey, MongoQueryOperators | Primitive | AdditionalOperators>;\nexport function buildMongoQueryMatcher<T extends object>(\n operations: Record<keyof T, any>\n): Matcher<MongoQuery | T> {\n const options = { operations: { ...defaultOperations, ...operations } };\n return conditions => sift(conditions as any, options);\n}\nexport const mongoQueryMatcher = buildMongoQueryMatcher({});\n","import { FieldMatcher } from '../types';\n\nconst REGEXP_SPECIAL_CHARS = /[-/\\\\^$+?.()|[\\]{}]/g;\nconst REGEXP_ANY = /\\.?\\*+\\.?/g;\nconst REGEXP_STARS = /\\*+/;\nconst REGEXP_DOT = /\\./g;\n\nfunction detectRegexpPattern(match: string, index: number, string: string): string {\n const quantifier = string[0] === '*' || match[0] === '.' && match[match.length - 1] === '.'\n ? '+'\n : '*';\n const matcher = match.indexOf('**') === -1 ? '[^.]' : '.';\n const pattern = match.replace(REGEXP_DOT, '\\\\$&')\n .replace(REGEXP_STARS, matcher + quantifier);\n\n return index + match.length === string.length ? `(?:${pattern})?` : pattern;\n}\n\nfunction escapeRegexp(match: string, index: number, string: string): string {\n if (match === '.' && (string[index - 1] === '*' || string[index + 1] === '*')) {\n return match;\n }\n\n return `\\\\${match}`;\n}\n\nfunction createPattern(fields: string[]) {\n const patterns = fields.map(field => field\n .replace(REGEXP_SPECIAL_CHARS, escapeRegexp)\n .replace(REGEXP_ANY, detectRegexpPattern));\n const pattern = patterns.length > 1 ? `(?:${patterns.join('|')})` : patterns[0];\n\n return new RegExp(`^${pattern}$`);\n}\n\nexport const fieldPatternMatcher: FieldMatcher = (fields) => {\n let pattern: RegExp | null;\n\n return (field) => {\n if (typeof pattern === 'undefined') {\n pattern = fields.every(f => f.indexOf('*') === -1)\n ? null\n : createPattern(fields);\n }\n\n return pattern === null\n ? fields.indexOf(field) !== -1\n : pattern.test(field);\n };\n};\n","import { PureAbility, AbilityOptions } from './PureAbility';\nimport { AbilityTuple } from './types';\nimport { MongoQuery, mongoQueryMatcher } from './matchers/conditions';\nimport { RawRuleFrom } from './RawRule';\nimport { fieldPatternMatcher } from './matchers/field';\n\nexport class Ability<\n A extends AbilityTuple = AbilityTuple,\n C extends MongoQuery<any> = MongoQuery\n> extends PureAbility<A, C> {\n constructor(rules?: RawRuleFrom<A, C>[], options?: AbilityOptions<A, C>) {\n super(rules, {\n conditionsMatcher: mongoQueryMatcher,\n fieldMatcher: fieldPatternMatcher,\n ...options,\n });\n }\n}\n\nexport type AnyMongoAbility = Ability<any, MongoQuery>;\n","import { Ability, AnyMongoAbility } from './Ability';\nimport { AnyAbility, AbilityOptionsOf, AbilityClass, PureAbility } from './PureAbility';\nimport { RawRuleOf, Generics } from './RuleIndex';\nimport {\n ExtractSubjectType as E,\n AbilityTuple,\n SubjectType,\n AbilityTypes,\n ToAbilityTypes,\n AbilityParameters\n} from './types';\nimport { RawRule } from './RawRule';\n\nclass RuleBuilder<T extends RawRule<any, any>> {\n public rule!: T;\n\n constructor(rule: T) {\n this.rule = rule;\n }\n\n because(reason: string): this {\n this.rule.reason = reason;\n return this;\n }\n}\n\ntype CanFunction<T extends AbilityTypes, C, WithFields = true> = T extends AbilityTuple\n ? WithFields extends true\n // eslint-disable-next-line max-len\n ? (action: T[0] | T[0][], subject: E<T[1]> | E<T[1]>[], fields?: string | string[], conditions?: C) => 0\n : (action: T[0] | T[0][], subject: E<T[1]> | E<T[1]>[], conditions?: C) => 0\n : never;\n\nexport type BuilderCanParameters<T extends AnyAbility, WithFields extends boolean = false> =\n AbilityParameters<\n Generics<T>['abilities'],\n CanFunction<ToAbilityTypes<Generics<T>['abilities']>, Generics<T>['conditions'], WithFields>,\n (action: Generics<T>['abilities'] | Generics<T>['abilities'][]) => 0\n >;\n\nexport class AbilityBuilder<T extends AnyAbility = PureAbility> {\n public rules: RawRuleOf<T>[] = [];\n private _AbilityType!: AbilityClass<T>;\n\n constructor(AbilityType: AbilityClass<T> = PureAbility as AbilityClass<T>) {\n this._AbilityType = AbilityType;\n const self = this as any;\n self.can = self.can.bind(self);\n self.cannot = self.cannot.bind(self);\n self.build = self.build.bind(self);\n }\n\n can(...args: BuilderCanParameters<T>): RuleBuilder<RawRuleOf<T>>\n can(...args: BuilderCanParameters<T, true>): RuleBuilder<RawRuleOf<T>>\n can(\n action: string | string[],\n subject?: SubjectType | SubjectType[],\n conditionsOrFields?: string | string[] | Generics<T>['conditions'],\n conditions?: Generics<T>['conditions'],\n ): RuleBuilder<RawRuleOf<T>> {\n const rule = { action } as RawRuleOf<T>;\n\n if (subject) {\n rule.subject = subject;\n\n if (Array.isArray(conditionsOrFields) || typeof conditionsOrFields === 'string') {\n rule.fields = conditionsOrFields;\n } else if (typeof conditionsOrFields !== 'undefined') {\n rule.conditions = conditionsOrFields;\n }\n\n if (typeof conditions !== 'undefined') {\n rule.conditions = conditions;\n }\n }\n\n this.rules.push(rule);\n\n return new RuleBuilder(rule);\n }\n\n cannot(...args: BuilderCanParameters<T>): RuleBuilder<RawRuleOf<T>>\n cannot(...args: BuilderCanParameters<T, true>): RuleBuilder<RawRuleOf<T>>\n cannot(\n action: string | string[],\n subject?: SubjectType | SubjectType[],\n conditionsOrFields?: string | string[] | Generics<T>['conditions'],\n conditions?: Generics<T>['conditions'],\n ): RuleBuilder<RawRuleOf<T>> {\n const builder = (this as any).can(action, subject, conditionsOrFields, conditions);\n builder.rule.inverted = true;\n return builder;\n }\n\n build(options?: AbilityOptionsOf<T>): T {\n return new this._AbilityType(this.rules, options);\n }\n}\n\ntype AsyncDSL<T extends AnyMongoAbility> = (\n can: AbilityBuilder<T>['can'],\n cannot: AbilityBuilder<T>['cannot']\n) => Promise<void>;\ntype DSL<T extends AnyMongoAbility> = (...args: Parameters<AsyncDSL<T>>) => void;\n\nexport function defineAbility<T extends AnyMongoAbility = Ability>(\n dsl: AsyncDSL<T>\n): Promise<T>;\nexport function defineAbility<T extends AnyMongoAbility = Ability>(\n params: AbilityOptionsOf<T>,\n dsl: AsyncDSL<T>\n): Promise<T>;\nexport function defineAbility<T extends AnyMongoAbility = Ability>(\n dsl: DSL<T>\n): T;\nexport function defineAbility<T extends AnyMongoAbility = Ability>(\n params: AbilityOptionsOf<T>,\n dsl: DSL<T>\n): T;\nexport function defineAbility<T extends AnyMongoAbility = Ability>(\n params: AbilityOptionsOf<T> | DSL<T> | AsyncDSL<T>,\n dsl?: DSL<T> | AsyncDSL<T>\n): T | Promise<T> {\n let options: AbilityOptionsOf<T>;\n let define: DSL<T> | AsyncDSL<T>;\n\n if (typeof params === 'function') {\n define = params;\n options = {};\n } else if (typeof dsl === 'function') {\n options = params;\n define = dsl;\n } else {\n throw new Error('`defineAbility` expects to receive either options and dsl function or only dsl function');\n }\n\n const builder = new AbilityBuilder<T>(Ability as AbilityClass<T>);\n const result = define(builder.can, builder.cannot);\n\n return result && typeof result.then === 'function'\n ? result.then(() => builder.build(options))\n : builder.build(options);\n}\n","import { AnyAbility } from './PureAbility';\nimport { Normalize } from './types';\nimport { Generics } from './RuleIndex';\n\nexport type GetErrorMessage = (error: ForbiddenError<AnyAbility>) => string;\nexport const getDefaultErrorMessage: GetErrorMessage = error => `Cannot execute \"${error.action}\" on \"${error.subjectType}\"`;\n\nconst NativeError = function NError(this: Error, message: string) {\n this.message = message;\n} as unknown as new (message: string) => Error;\n\nNativeError.prototype = Object.create(Error.prototype);\n\nexport class ForbiddenError<T extends AnyAbility> extends NativeError {\n public readonly ability: T;\n public action!: Normalize<Generics<T>['abilities']>[0];\n public subject!: Generics<T>['abilities'][1];\n public field?: string;\n public subjectType!: string;\n\n static _defaultErrorMessage = getDefaultErrorMessage;\n\n static setDefaultMessage(messageOrFn: string | GetErrorMessage) {\n this._defaultErrorMessage = typeof messageOrFn === 'string' ? () => messageOrFn : messageOrFn;\n }\n\n static from<T extends AnyAbility>(ability: T) {\n return new this(ability);\n }\n\n private constructor(ability: T) {\n super('');\n this.ability = ability;\n\n if (typeof Error.captureStackTrace === 'function') {\n this.name = 'ForbiddenError';\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n setMessage(message: string) {\n this.message = message;\n return this;\n }\n\n throwUnlessCan(...args: Parameters<T['can']>) {\n const rule = this.ability.relevantRuleFor(...args);\n\n if (rule && !rule.inverted) {\n return;\n }\n\n this.action = args[0];\n this.subject = args[1];\n this.subjectType = this.ability.detectSubjectType(args[1]);\n this.field = args[2];\n\n const reason = rule ? rule.reason : '';\n // eslint-disable-next-line no-underscore-dangle\n this.message = this.message || reason || (this.constructor as any)._defaultErrorMessage(this);\n throw this; // eslint-disable-line\n }\n}\n"],"names":["wrapArray","value","Array","isArray","TYPE_FIELD","setSubjectType","type","object","hasOwnProperty","Error","Object","defineProperty","detectSubjectType","subject","Type","constructor","modelName","name","identity","x","createAliasResolver","aliasMap","process","env","NODE_ENV","manage","keys","forEach","alias","indexOf","assertAliasMap","action","rawActions","actions","i","length","concat","expandActions","Rule","rule","options","_matchConditions","_matchField","resolveAction","inverted","conditions","reason","fields","undefined","console","warn","this","conditionsMatcher","fieldMatcher","matchesConditions","matchesField","field","RulesAnalyzer","hasRules","_isAllInverted","_hasPerFieldRules","_hasRuleWithEmptyFields","_analyze","bind","_validate","ruleOptions","PureAbility","rules","_mergedRules","create","_events","_indexedRules","_rules","_ruleOptions","subjectName","get","update","event","ability","target","_emit","analyser","indexedRules","_buildIndexFor","rawRules","iterator","priority","subjects","k","j","possibleRulesFor","args","mergedRules","key","_mergeRulesFor","reduce","subjectType","subjectRules","assign","filter","Boolean","rulesFor","on","handler","events","isAttached","push","index","splice","eventName","handlers","slice","can","relevantRuleFor","cannot","defaultOperations","$eq","$ne","$lt","$lte","$gt","$gte","$in","$nin","$all","$size","$regex","$elemMatch","$exists","buildMongoQueryMatcher","operations","sift","mongoQueryMatcher","REGEXP_SPECIAL_CHARS","REGEXP_ANY","REGEXP_STARS","REGEXP_DOT","detectRegexpPattern","match","string","quantifier","matcher","pattern","replace","escapeRegexp","fieldPatternMatcher","every","f","patterns","map","join","RegExp","createPattern","test","Ability","RuleBuilder","because","AbilityBuilder","AbilityType","_AbilityType","build","conditionsOrFields","builder","defineAbility","params","dsl","define","result","then","getDefaultErrorMessage","error","NativeError","message","prototype","ForbiddenError","messageOrFn","_defaultErrorMessage","captureStackTrace","setMessage","throwUnlessCan"],"mappings":"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"}
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.02 |
proxy
|
phpinfo
|
Настройка