Файловый менеджер - Редактировать - /home/freeclou/app.optimyar.com/backend/node_modules/@casl/ability/dist/umd/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","detectSubjectType","subject","hasOwnProperty","Type","constructor","modelName","name","identity","x","Rule","rule","options","_matchConditions","_matchField","action","resolveAction","actions","inverted","conditions","reason","fields","length","undefined","console","warn","this","conditionsMatcher","fieldMatcher","matchesConditions","object","matchesField","field","RulesAnalyzer","hasRules","_isAllInverted","_hasPerFieldRules","_hasRuleWithEmptyFields","_analyze","bind","_validate","ruleOptions","Error","PureAbility","can","relevantRuleFor","rules","rulesFor","i","cannot","_mergedRules","Object","create","_events","_indexedRules","_rules","_ruleOptions","defineProperty","subjectName","get","_this","update","event","ability","target","_emit","analyser","indexedRules","_buildIndexFor","rawRules","iterator","priority","subjects","k","j","possibleRulesFor","args","mergedRules","key","_mergeRulesFor","reduce","subjectType","subjectRules","_this2","assign","manage","filter","Boolean","on","handler","events","isAttached","push","index","indexOf","splice","eventName","handlers","slice","forEach","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","_PureAbility","RuleBuilder","because","AbilityBuilder","AbilityType","_AbilityType","build","conditionsOrFields","builder","getDefaultErrorMessage","error","NativeError","message","prototype","ForbiddenError","captureStackTrace","setDefaultMessage","messageOrFn","_defaultErrorMessage","from","setMessage","throwUnlessCan","aliasMap","process","env","NODE_ENV","keys","alias","assertAliasMap","rawActions","concat","expandActions","params","dsl","define","result","then","type"],"mappings":"ghBAEO,SAASA,EAAaC,UACpBC,MAAMC,QAAQF,GAASA,EAAQ,CAACA,GAoBzC,IAAMG,EAAa,sBAgBZ,SAASC,EAAqCC,OAC9CA,QACI,SAGc,iBAAZA,SACFA,KAGLA,EAAQC,eAAeH,UACjBE,EAAgBF,OAGpBI,EAA0B,mBAAZF,EAAyBA,EAAUA,EAAQG,mBACvDD,EAAsBE,WAAaF,EAAKG,KAmC3C,IAAMC,EAAW,SAAIC,UAASA,OC3ExBC,wBAUCC,EAAqCC,QAThCC,cACAC,cASVC,OAASH,EAAQI,cAAeL,EAAaM,SAAYN,EAAaI,aACtEb,QAAUS,EAAKT,aACfgB,WAAaP,EAAKO,cAClBC,WAAaR,EAAKQ,gBAClBC,OAAST,EAAKS,YACdC,OAAUV,EAAKU,QAAiC,IAAvBV,EAAKU,OAAOC,OAEtC1B,EAAUe,EAAKU,aADfE,EAGA,YAAaZ,GAEfa,QAAQC,KAAK,kEAGXC,KAAKP,YAAcP,EAAQe,yBACxBd,EAAmBD,EAAQe,kBAAkBD,KAAKP,aAGrDO,KAAKL,QAAUT,EAAQgB,oBACpBd,EAAcF,EAAQgB,aAAaF,KAAKL,oCAIjDQ,kBAAA,SAAkBC,UACXJ,KAAKb,IAILiB,GAA4B,iBAAXA,GAAyC,mBAAXA,EAI7CJ,KAAKb,EAAiBiB,IAHnBJ,KAAKR,aAMjBa,aAAA,SAAaC,UACNN,KAAKZ,IAILkB,EAIEN,KAAKZ,EAAYkB,IAHdN,KAAKR,gBC9DEe,wBAKPC,QAJLC,cACAC,GAA6B,OAC7BC,GAAmC,OAGnCF,EAAiBD,OACjBI,EAAWZ,KAAKY,EAASC,KAAKb,iCAGrCY,EAAA,gBAAWjB,IAAAA,OAAQH,IAAAA,cACZiB,EAAiBT,KAAKS,KAAoBjB,EAE1CQ,KAAKW,IAA2BvC,MAAMC,QAAQsB,IAAYA,EAAOC,cAC/De,GAA0B,IAG5BX,KAAKU,GAAqBf,GAAUA,EAAOC,cACzCc,GAAoB,MAI7BI,EAAA,SAAUC,MACJf,KAAKS,GAEPX,QAAQC,KAAK,wHAGXC,KAAKW,GAEPb,QAAQC,KAAK,sMAGXC,KAAKU,IAAsBK,EAAYb,mBACnC,IAAIc,MAAM,2JCpBTC,kGAIXC,IAAA,eACQjC,EAAOe,KAAKmB,8CACTlC,IAASA,EAAKO,YAGzB2B,gBAAA,mBACQC,EAAQpB,KAAKqB,+BACb7C,0CAEG8C,EAAI,EAAGA,EAAIF,EAAMxB,OAAQ0B,OAC5BF,EAAME,GAAGnB,kBAAkB3B,UACtB4C,EAAME,UAIV,QAGTC,OAAA,kBACUvB,KAAKkB,oDCuCbE,EACAlC,uBADAkC,IAAAA,EAAsC,aACtClC,IAAAA,EAA2C,SAfrCwB,GAA6B,OAC7Bc,EAAsDC,OAAOC,OAAO,WACpEC,EAAmCF,OAAOC,OAAO,WACjDE,EAA0CH,OAAOC,OAAO,WACxDG,EAAwB,QAazBC,EAAe,CAClB7B,kBAAmBf,EAAQe,kBAC3BC,aAAchB,EAAQgB,aACtBZ,cAAeJ,EAAQI,eAAiBR,GAE1C2C,OAAOM,eAAe/B,KAAM,oBAAqB,CAC/C7B,MAAOe,EAAQX,mBAAqBW,EAAQ8C,aAAezD,IAE7DkD,OAAOM,eAAe/B,KAAM,QAAS,CAAEiC,IAAK,kBAAMC,EAAKL,UAClDM,OAAOf,8BAGde,OAAA,SAAOf,OACCgB,EAAQ,CACZhB,MAAAA,EACAiB,QAASrC,KACTsC,OAAQtC,WAGLuC,EAAM,SAAUH,QAChBZ,EAAeC,OAAOC,OAAO,UAE5Bc,EAAW,IAAIjC,EAA6Ba,EAAMxB,OAAS,GAC3D6C,EAAezC,KAAK0C,EAAetB,EAAOoB,EAAS5B,UAEzD4B,EAAS1B,EAAUd,KAAK8B,QACnBF,EAAgBa,OAChBZ,EAAST,OACTV,EAAoB8B,EAAS9B,OAC7B6B,EAAM,UAAWH,GAEfpC,QAGD0C,EAAR,SACEC,EACAC,YAAAA,IAAAA,EAAwC9D,WAElC2D,EAAyChB,OAAOC,OAAO,MAEpDJ,EAAI,EAAGA,EAAIqB,EAAS/C,OAAQ0B,IAAK,CACxCsB,EAASD,EAASrB,GAAIA,WAChBrC,EAAO,IAAID,EAAK2D,EAASrB,GAAItB,KAAK8B,GAClCe,EAAWF,EAAS/C,OAAS0B,EAAI,EACjC/B,EAAUrB,EAAUe,EAAKI,QACzByD,EAAW5E,EAAUe,EAAKT,SAEvBuE,EAAI,EAAGA,EAAID,EAASlD,OAAQmD,IAAK,KAClCvE,EAAUwB,KAAKzB,kBAAkBuE,EAASC,IAChDN,EAAajE,GAAWiE,EAAajE,IAAYiD,OAAOC,OAAO,UAE1D,IAAIsB,EAAI,EAAGA,EAAIzD,EAAQK,OAAQoD,IAAK,KACjC3D,EAASE,EAAQyD,GACvBP,EAAajE,GAASa,GAAUoD,EAAajE,GAASa,IAAWoC,OAAOC,OAAO,MAC/Ee,EAAajE,GAASa,GAAQwD,GAAY5D,WAKzCwD,KAGTQ,iBAAA,sCAAoBC,2BAAAA,sBACX7D,EAAmB6D,KAAX1E,EAAW0E,KACpBlB,EAAchC,KAAKzB,kBAAkBC,GACrC2E,EAAcnD,KAAKwB,EACnB4B,EAASpB,MAAe3C,SAEzB8D,EAAYC,KACfD,EAAYC,GAAOpD,KAAKqD,EAAehE,EAAQ2C,IAG1CmB,EAAYC,MAGbC,EAAR,SAAuBhE,EAAgB2C,qBACJ,QAAhBA,EAAwB,CAACA,GAAe,CAACA,EAAa,QAC1CsB,QAAO,SAAClC,EAAOmC,OACpCC,EAAeC,EAAK7B,EAAc2B,UAEnCC,EAIE/B,OAAOiC,OAAOtC,EAAOoC,EAAanE,GAASmE,EAAaG,QAHtDvC,IAIR,IAIgBwC,OAAOC,YAG5BxC,SAAA,sCAAY6B,2BAAAA,sBACH7D,EAA0B6D,KAAlB1E,EAAkB0E,KAAT5C,EAAS4C,KAC3B9B,EAAgCpB,KAAaiD,iBAAiB5D,EAAQb,MAExE8B,GAA0B,iBAAVA,QACZ,IAAIU,MAAM,wJAGbhB,KAAKU,EAIHU,EAAMwC,QAAO,SAAA3E,UAAQA,EAAKoB,aAAaC,MAHrCc,KAMX0C,GAAA,SACE1B,EACA2B,OAEMC,EAAShE,KAAK2B,EAChBsC,GAAa,SAEZD,EAAO5B,KACV4B,EAAO5B,GAAS,IAGlB4B,EAAO5B,GAAO8B,KAAKH,GAEZ,cACDE,EAAY,KACRE,EAAQH,EAAO5B,GAAOgC,QAAQL,GACpCC,EAAO5B,GAAOiC,OAAOF,EAAO,GAC5BF,GAAa,OAKX1B,EAAR,SACE+B,EACAlC,OAEMmC,EAAWvE,KAAK2B,EAAQ2C,GAE1BC,GACFA,EAASC,MAAM,GAAGC,SAAQ,SAAAV,UAAWA,EAAQ3B,aCxM7CsC,EAAoB,CACxBC,IAAAA,MACAC,IAAAA,MACAC,IAAAA,MACAC,KAAAA,OACAC,IAAAA,MACAC,KAAAA,OACAC,IAAAA,MACAC,KAAAA,OACAC,KAAAA,OACAC,MAAAA,QACAC,OAAAA,SACAC,WAAAA,aACAC,QAAAA,WA4BK,SAASC,EACdC,OAEMvG,EAAU,CAAEuG,gBAAiBf,EAAsBe,WAClD,SAAAhG,UAAciG,oBAAKjG,EAAmBP,QAElCyG,EAAoBH,EAAuB,IC/DlDI,EAAuB,uBACvBC,EAAa,aACbC,EAAe,MACfC,EAAa,MAEnB,SAASC,EAAoBC,EAAe9B,EAAe+B,OACnDC,EAA2B,MAAdD,EAAO,IAA2B,MAAbD,EAAM,IAA0C,MAA5BA,EAAMA,EAAMrG,OAAS,GAC7E,IACA,IACEwG,GAAmC,IAAzBH,EAAM7B,QAAQ,MAAe,OAAS,IAChDiC,EAAUJ,EAAMK,QAAQP,EAAY,QACvCO,QAAQR,EAAcM,EAAUD,UAE5BhC,EAAQ8B,EAAMrG,SAAWsG,EAAOtG,aAAeyG,OAAcA,EAGtE,SAASE,EAAaN,EAAe9B,EAAe+B,SACpC,MAAVD,GAAwC,MAAtBC,EAAO/B,EAAQ,IAAoC,MAAtB+B,EAAO/B,EAAQ,QAItD8B,EAHHA,MAeEO,EAAoC,SAAC7G,OAC5C0G,SAEG,SAAC/F,eACiB,IAAZ+F,IACTA,EAAU1G,EAAO8G,OAAM,SAAAC,UAAyB,IAApBA,EAAEtC,QAAQ,QAClC,KAfV,SAAuBzE,OACfgH,EAAWhH,EAAOiH,KAAI,SAAAtG,UAASA,EAClCgG,QAAQV,EAAsBW,GAC9BD,QAAQT,EAAYG,MACjBK,EAAUM,EAAS/G,OAAS,QAAU+G,EAASE,KAAK,SAAUF,EAAS,UAEtE,IAAIG,WAAWT,OAUdU,CAAcpH,IAGD,OAAZ0G,GACwB,IAA3B1G,EAAOyE,QAAQ9D,GACf+F,EAAQW,KAAK1G,KCzCR2G,yBAIC7F,EAA6BlC,UACvCgI,YAAM9F,KACJnB,kBAAmB0F,EACnBzF,aAAcsG,GACXtH,2BALC+B,GCIJkG,wBAGQlI,QACLA,KAAOA,qBAGdmI,QAAA,SAAQ1H,eACDT,KAAKS,OAASA,EACZM,WAkBEqH,wBAICC,YAAAA,IAAAA,EAA+BrG,QAHpCG,MAAwB,QAIxBmG,EAAeD,EACPtH,KACRkB,IADQlB,KACGkB,IAAIL,KADPb,MAAAA,KAERuB,OAFQvB,KAEMuB,OAAOV,KAFbb,MAAAA,KAGRwH,MAHQxH,KAGKwH,MAAM3G,KAHXb,iCAQfkB,IAAA,SACE7B,EACAb,EACAiJ,EACAhI,OAEMR,EAAO,CAAEI,OAAAA,UAEXb,IACFS,EAAKT,QAAUA,EAEXJ,MAAMC,QAAQoJ,IAAqD,iBAAvBA,EAC9CxI,EAAKU,OAAS8H,OACyB,IAAvBA,IAChBxI,EAAKQ,WAAagI,QAGM,IAAfhI,IACTR,EAAKQ,WAAaA,SAIjB2B,MAAM8C,KAAKjF,GAET,IAAIkI,EAAYlI,MAKzBsC,OAAA,SACElC,EACAb,EACAiJ,EACAhI,OAEMiI,EAAW1H,KAAakB,IAAI7B,EAAQb,EAASiJ,EAAoBhI,UACvEiI,EAAQzI,KAAKO,UAAW,EACjBkI,KAGTF,MAAA,SAAMtI,UACG,IAAIc,KAAKuH,EAAavH,KAAKoB,MAAOlC,aC1FhCyI,EAA0C,SAAAC,4BAA4BA,EAAMvI,gBAAeuI,EAAMrE,iBAExGsE,EAAc,SAA6BC,QAC1CA,QAAUA,GAGjBD,EAAYE,UAAYtG,OAAOC,OAAOV,MAAM+G,eAE/BC,yBAiBS3F,8BACZ,WAjBQA,iBAGT/B,eAeA+B,QAAUA,EAEwB,mBAA5BrB,MAAMiH,sBACVpJ,KAAO,iBACZmC,MAAMiH,+IAAwB/F,EAAKvD,yBAdhCuJ,kBAAP,SAAyBC,QAClBC,EAA8C,iBAAhBD,EAA2B,kBAAMA,GAAcA,KAG7EE,KAAP,SAAkChG,UACzB,IAAIrC,KAAKqC,+BAalBiG,WAAA,SAAWR,eACJA,QAAUA,EACR9H,QAGTuI,eAAA,iBACQtJ,UAAYoD,SAAQlB,uCAEtBlC,GAASA,EAAKO,eAIbH,oDACAb,qDACA+E,YAAcvD,KAAKqC,QAAQ9D,gEAC3B+B,kDAECZ,EAAST,EAAOA,EAAKS,OAAS,cAE/BoI,QAAU9H,KAAK8H,SAAWpI,GAAWM,KAAKrB,YAAoByJ,EAAqBpI,MAClFA,UA/CgD6H,GAA7CG,EAOJI,EAAuBT,qHTqEzB,SAA6Ba,SACL,eAAzBC,QAAQC,IAAIC,UAnBlB,SAAwBH,MAClBA,EAAS7E,aACL,IAAI3C,MAAM,+DAGlBS,OAAOmH,KAAKJ,GAAU/D,SAAQ,SAACoE,MACZA,IAAUL,EAASK,IAC/BzK,MAAMC,QAAQmK,EAASK,OACY,IAApCL,EAASK,GAAOzE,QAAQyE,KAAwD,IAAvCL,EAASK,GAAOzE,QAAQ,iBAI7D,IAAIpD,4CAA4C6H,SAAYL,EAASK,OAQ7EC,CAAeN,GAGV,SAACnJ,UAtCH,SAAuBmJ,EAAsBO,WAC9CxJ,EAAUrB,EAAU6K,GACpBzH,EAAI,EAEDA,EAAI/B,EAAQK,QAAQ,KACnBP,EAASE,EAAQ+B,KAEnBkH,EAAS/J,eAAeY,KAC1BE,EAAUA,EAAQyJ,OAAOR,EAASnJ,YAI/BE,EA0B+B0J,CAAcT,EAAUnJ,qBQyBzD,SACL6J,EACAC,OAEIjK,EACAkK,KAEkB,mBAAXF,EACTE,EAASF,EACThK,EAAU,OACL,CAAA,GAAmB,mBAARiK,QAIV,IAAInI,MAAM,2FAHhB9B,EAAUgK,EACVE,EAASD,MAKLzB,EAAU,IAAIL,EAAkBJ,GAChCoC,EAASD,EAAO1B,EAAQxG,IAAKwG,EAAQnG,eAEpC8H,GAAiC,mBAAhBA,EAAOC,KAC3BD,EAAOC,MAAK,kBAAM5B,EAAQF,MAAMtI,MAChCwI,EAAQF,MAAMtI,6GRrHb,SAGLqK,EAASnJ,MACLA,KACGA,EAAO3B,eAAeH,IAEpB,GAAIiL,IAASnJ,EAAO9B,SACnB,IAAI0C,+CAA+CuI,sCAAwCnJ,EAAO9B,SAFxGmD,OAAOM,eAAe3B,EAAQ9B,EAAY,CAAEH,MAAOoL,WAMhDnJ"}
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.01 |
proxy
|
phpinfo
|
Настройка