Файловый менеджер - Редактировать - /home/freeclou/app.optimyar.com/backend/node_modules/@casl/ability/dist/es6m/index.js.map
Назад
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/Rule.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 type { Condition } from '@ucast/mongo2js';\nimport { wrapArray } from './utils';\nimport {\n MatchConditions,\n RuleOptions,\n MatchField,\n Abilities,\n ToAbilityTypes,\n Normalize\n} from './types';\nimport { RawRule, RawRuleFrom } from './RawRule';\n\ntype Tuple<A extends Abilities> = Normalize<ToAbilityTypes<A>>;\n\nfunction validate<A extends Abilities, C>(rule: RawRuleFrom<A, C>, options: RuleOptions<A, C>) {\n if (Array.isArray(rule.fields) && !rule.fields.length) {\n throw new Error('`rawRule.fields` cannot be an empty array. https://bit.ly/390miLa');\n }\n\n if (rule.fields && !options.fieldMatcher) {\n throw new Error('You need to pass \"fieldMatcher\" option in order to restrict access by fields');\n }\n\n if (rule.conditions && !options.conditionsMatcher) {\n throw new Error('You need to pass \"conditionsMatcher\" option in order to restrict access by conditions');\n }\n}\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 public readonly ast?: Condition;\n\n constructor(rule: RawRule<ToAbilityTypes<A>, C>, options: RuleOptions<A, C>) {\n validate(rule, options);\n\n this.action = options.resolveAction(rule.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 ? wrapArray(rule.fields) : undefined;\n\n if (this.conditions) {\n this._matchConditions = options.conditionsMatcher!(this.conditions);\n this.ast = this._matchConditions.ast;\n }\n\n if (this.fields) {\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 { 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';\n\ntype AnyRuleIndex = RuleIndex<any, any, any>;\n\nexport interface RuleIndexOptions<A extends Abilities, Conditions> {\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 || 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 this._indexedRules = this._buildIndexFor(rules);\n this._rules = rules;\n this._emit('updated', event);\n\n return this;\n }\n\n private _buildIndexFor(rawRules: RawRuleFrom<A, Conditions>[]) {\n const indexedRules: IndexTree<A, Conditions> = Object.create(null);\n\n for (let i = 0; i < rawRules.length; 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 this._analyze(rule);\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 private _analyze(rule: Rule<A, Conditions>) {\n if (!this._hasPerFieldRules && rule.fields) {\n this._hasPerFieldRules = true;\n }\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 $eq,\n eq,\n $ne,\n ne,\n $lt,\n lt,\n $lte,\n lte,\n $gt,\n gt,\n $gte,\n gte,\n $in,\n within,\n $nin,\n nin,\n $all,\n all,\n $size,\n size,\n $regex,\n regex,\n $elemMatch,\n elemMatch,\n $exists,\n exists,\n createFactory,\n} from '@ucast/mongo2js';\nimport type { MongoQuery } from '@ucast/mongo2js';\nimport { ConditionsMatcher } from '../types';\n\nconst defaultInstructions = {\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};\nconst defaultInterpreters = {\n eq,\n ne,\n lt,\n lte,\n gt,\n gte,\n in: within,\n nin,\n all,\n size,\n regex,\n elemMatch,\n exists,\n};\n\ntype MongoQueryMatcher =\n (...args: Partial<Parameters<typeof createFactory>>) => ConditionsMatcher<MongoQuery>;\nexport const buildMongoQueryMatcher: MongoQueryMatcher = (instructions, interpreters, options) => {\n return createFactory(\n { ...defaultInstructions, ...instructions },\n { ...defaultInterpreters, ...interpreters },\n options\n );\n};\n\nexport const mongoQueryMatcher = buildMongoQueryMatcher();\nexport type {\n MongoQuery,\n MongoQueryFieldOperators,\n MongoQueryTopLevelOperators,\n MongoQueryOperators,\n} from '@ucast/mongo2js';\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.join('').indexOf('*') === -1\n ? null\n : createPattern(fields);\n }\n\n if (pattern === null || field.indexOf('*') !== -1) {\n return fields.indexOf(field) !== -1;\n }\n\n return 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 = 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","ast","fields","fieldMatcher","conditions","conditionsMatcher","validate","resolveAction","inverted","reason","undefined","this","matchesConditions","matchesField","field","PureAbility","rules","_hasPerFieldRules","_mergedRules","create","_events","_indexedRules","_rules","_ruleOptions","get","update","event","ability","target","_emit","_buildIndexFor","rawRules","indexedRules","priority","subjects","_analyze","k","j","possibleRulesFor","args","subjectName","mergedRules","key","_mergeRulesFor","reduce","subjectType","subjectRules","assign","filter","Boolean","rulesFor","on","handler","events","isAttached","push","index","splice","eventName","handlers","slice","can","relevantRuleFor","cannot","defaultInstructions","$eq","$ne","$lt","$lte","$gt","$gte","$in","$nin","$all","$size","$regex","$elemMatch","$exists","defaultInterpreters","eq","ne","lt","lte","gt","gte","in","within","nin","all","size","regex","elemMatch","exists","buildMongoQueryMatcher","instructions","interpreters","createFactory","mongoQueryMatcher","REGEXP_SPECIAL_CHARS","REGEXP_ANY","REGEXP_STARS","REGEXP_DOT","detectRegexpPattern","match","string","quantifier","matcher","pattern","replace","escapeRegexp","fieldPatternMatcher","join","patterns","map","RegExp","createPattern","test","Ability","RuleBuilder","_rule","because","AbilityBuilder","AbilityType","_AbilityType","bind","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.01 |
proxy
|
phpinfo
|
Настройка