{"version":3,"file":"extra.mjs","sources":["../../../../node_modules/.pnpm/@ucast/core@1.5.0/node_modules/@ucast/core/dist/es6m/index.mjs","../../../../node_modules/.pnpm/@ucast/mongo@2.3.1/node_modules/@ucast/mongo/dist/es6m/index.mjs","../../../../node_modules/.pnpm/@ucast/js@2.2.1/node_modules/@ucast/js/dist/es6m/index.mjs","../../../../node_modules/.pnpm/@ucast/mongo2js@1.3.0/node_modules/@ucast/mongo2js/dist/es6m/index.mjs","../../src/extra.ts","../../src/utils.ts"],"sourcesContent":["class t{constructor(t,n){this.operator=t,this.value=n}}class n extends t{constructor(t,n){if(!Array.isArray(n))throw new Error(`\"${t}\" operator expects to receive an array of conditions`);super(t,n)}}const r=\"__itself__\";class o{constructor(t,n,r){this.operator=t,this.value=r,this.field=n}}const e=new t(\"__null__\",null);function c(t,n){const r=t[n];if(\"function\"!=typeof r)throw new Error(`Unable to interpret \"${n}\" condition. Did you forget to register interpreter for it?`);return r}function s(t,n){const r=n;let o;switch(r?r.numberOfArguments:0){case 1:o=n=>c(t,n.operator)(n,e);break;case 3:o=(n,r,o)=>c(t,n.operator)(n,r,o,e);break;default:o=(n,r)=>c(t,n.operator)(n,r,e)}const e=Object.assign({},r,{interpret:o});return e.interpret}function i(t,n){return(r,...o)=>{const e=t(r,...o),c=n.bind(null,e);return c.ast=e,c}}function u(t,r){return r instanceof n&&r.operator===t}function f(t,r){return 1===r.length?r[0]:new n(t,function t(n,r,o){const e=o||[];for(let o=0,c=r.length;of(\"and\",t),l=t=>f(\"or\",t);export{n as CompoundCondition,t as DocumentCondition,o as FieldCondition,r as ITSELF,e as NULL_CONDITION,a as buildAnd,l as buildOr,s as createInterpreter,i as createTranslatorFactory,u as isCompound,f as optimizedCompoundCondition};\n//# sourceMappingURL=index.mjs.map\n","import{optimizedCompoundCondition as e,FieldCondition as t,CompoundCondition as r,ITSELF as o,NULL_CONDITION as n,DocumentCondition as i,buildAnd as a}from\"@ucast/core\";function s(e){if(!e||e&&e.constructor!==Object)return!1;for(const t in e)if(e.hasOwnProperty(t)&&\"$\"===t[0])return!0;return!1}function p(e,t){if(!Array.isArray(t))throw new Error(`\"${e.name}\" expects value to be an array`)}function c(e,t){if(p(e,t),!t.length)throw new Error(`\"${e.name}\" expects to have at least one element in array`)}const l=e=>(t,r)=>{if(typeof r!==e)throw new Error(`\"${t.name}\" expects value to be a \"${e}\"`)},f={type:\"compound\",validate:c,parse(t,r,{parse:o}){const n=r.map(e=>o(e));return e(t.name,n)}},d=f,u={type:\"compound\",validate:c},h={type:\"field\",validate(e,t){if(!(t&&(t instanceof RegExp||t.constructor===Object)))throw new Error(`\"${e.name}\" expects to receive either regular expression or object of field operators`)},parse(e,o,n){const i=o instanceof RegExp?new t(\"regex\",n.field,o):n.parse(o,n);return new r(e.name,[i])}},$={type:\"field\",validate(e,t){if(!t||t.constructor!==Object)throw new Error(`\"${e.name}\" expects to receive an object with nested query or field level operators`)},parse(e,r,{parse:n,field:i}){const a=s(r)?n(r,{field:o}):n(r);return new t(e.name,i,a)}},w={type:\"field\",validate:l(\"number\")},y={type:\"field\",validate:p},v=y,b=y,m={type:\"field\",validate(e,t){if(!Array.isArray(t)||2!==t.length)throw new Error(`\"${e.name}\" expects an array with 2 numeric elements`)}},x={type:\"field\",validate:l(\"boolean\")},E={type:\"field\",validate:function(e,t){if(!(\"string\"==typeof t||\"number\"==typeof t||t instanceof Date))throw new Error(`\"${e.name}\" expects value to be comparable (i.e., string, number or date)`)}},g=E,j=g,O=g,q={type:\"field\"},_=q,R={type:\"field\",validate(e,t){if(!(t instanceof RegExp)&&\"string\"!=typeof t)throw new Error(`\"${e.name}\" expects value to be a regular expression or a string that represents regular expression`)},parse(e,r,o){const n=\"string\"==typeof r?new RegExp(r,o.query.$options||\"\"):r;return new t(e.name,o.field,n)}},U={type:\"field\",parse:()=>n},A={type:\"document\",validate:l(\"function\")};var F=Object.freeze({__proto__:null,$and:f,$or:d,$nor:u,$not:h,$elemMatch:$,$size:w,$in:y,$nin:v,$all:b,$mod:m,$exists:x,$gte:E,$gt:g,$lt:j,$lte:O,$eq:q,$ne:_,$regex:R,$options:U,$where:A});const k={compound(e,t,o){const n=(Array.isArray(t)?t:[t]).map(e=>o.parse(e));return new r(e.name,n)},field:(e,r,o)=>new t(e.name,o.field,r),document:(e,t)=>new i(e.name,t)};function z(e,t,r){\"function\"==typeof e.validate&&e.validate(e,t);return(e.parse||k[e.type])(e,t,r)}class D{constructor(e){this.t=void 0,this.o=void 0,this.t=Object.keys(e).reduce((t,r)=>(t[r]=Object.assign({},e[r],{name:r.slice(1)}),t),{}),this.parse=this.parse.bind(this),this.o={field:\"\",query:{},parse:this.parse}}setParse(e){this.parse=e,this.o.parse=e}i(e,t,r,o){const n=this.t[t];if(!n)throw new Error(`Unsupported operator \"${t}\"`);if(\"field\"!==n.type)throw new Error(`Unexpected ${n.type} operator \"${t}\" at field level`);return this.o.field=e,this.o.query=o,z(n,r,this.o)}s(e,t){const r=[],o=Object.keys(t);for(let i=0,a=o.length;i{const o=n(e,t);return void 0!==o?r.concat(o):r},[]):n(r,t)}function u(r){return(t,n,e)=>{const o=e.get(n,t.field);return Array.isArray(o)?o.some(n=>r(t,n,e)):r(t,o,e)}}const c=(r,t)=>r[t];function i(r,t,n){const e=t.lastIndexOf(\".\");return-1===e?[r,t]:[n(r,t.slice(0,e)),t.slice(e+1)]}function f(t,n,e=c){if(n===r)return t;if(!t)throw new Error(`Unable to get field \"${n}\" out of ${String(t)}.`);return function(r,t,n){if(-1===t.indexOf(\".\"))return o(r,t,n);const e=t.split(\".\");let u=r;for(let r=0,t=e.length;rf(t,n,r)}const a=(r,t)=>r===t;function l(r,t){return r===t?0:r>t?1:-1}function g(r,n={}){const e=n.compare||l;return t(r,Object.assign({get:f,compare:l,equal:(r,t)=>0===e(r,t)},n))}const p=(r,t,{interpret:n})=>r.value.some(r=>n(r,t)),y=(r,t,n)=>!p(r,t,n),b=(r,t,{interpret:n})=>r.value.every(r=>n(r,t)),m=(r,t,{interpret:n})=>!n(r.value[0],t),A=(r,t,{equal:e,get:o})=>{const u=o(t,r.field);return Array.isArray(u)&&!Array.isArray(r.value)?n(u,r.value,e):e(u,r.value)},d=(r,t,n)=>!A(r,t,n),q=u((r,t,n)=>{const e=n.compare(t,r.value);return 0===e||-1===e}),h=u((r,t,n)=>-1===n.compare(t,r.value)),j=u((r,t,n)=>1===n.compare(t,r.value)),w=u((r,t,n)=>{const e=n.compare(t,r.value);return 0===e||1===e}),_=(t,n,{get:o})=>{if(t.field===r)return void 0!==n;const[u,c]=i(n,t.field,o),f=r=>!!r&&r.hasOwnProperty(c)===t.value;return e(u,c)?u.some(f):f(u)},v=u((r,t)=>t%r.value[0]===r.value[1]),x=(t,n,{get:o})=>{const[u,c]=i(n,t.field,o),f=r=>{const n=o(r,c);return Array.isArray(n)&&n.length===t.value};return t.field!==r&&e(u,c)?u.some(f):f(u)},O=u((r,t)=>r.value.test(t)),N=u((r,t,{equal:e})=>n(r.value,t,e)),$=(r,t,n)=>!N(r,t,n),z=(r,t,{equal:e,get:o})=>{const u=o(t,r.field);return Array.isArray(u)&&r.value.every(r=>n(u,r,e))},E=(r,t,{interpret:n,get:e})=>{const o=e(t,r.field);return Array.isArray(o)&&o.some(t=>n(r.value,t))},M=(r,t)=>r.value.call(t);var S=Object.freeze({__proto__:null,or:p,nor:y,and:b,not:m,eq:A,ne:d,lte:q,lt:h,gt:j,gte:w,exists:_,mod:v,size:x,regex:O,within:N,nin:$,all:z,elemMatch:E,where:M});const U=Object.assign({},S,{in:N}),k=g(U);export{z as all,U as allInterpreters,b as and,l as compare,s as createGetter,g as createJsInterpreter,E as elemMatch,A as eq,a as equal,_ as exists,f as getObjectField,i as getObjectFieldCursor,j as gt,w as gte,k as interpret,h as lt,q as lte,v as mod,d as ne,$ as nin,y as nor,m as not,p as or,O as regex,x as size,M as where,N as within};\n//# sourceMappingURL=index.mjs.map\n","import{createTranslatorFactory as o,ITSELF as t}from\"@ucast/core\";export*from\"@ucast/core\";import{MongoQueryParser as r,allParsingInstructions as e,defaultParsers as c}from\"@ucast/mongo\";export*from\"@ucast/mongo\";import{createJsInterpreter as n,allInterpreters as f,compare as s}from\"@ucast/js\";export*from\"@ucast/js\";function i(o){return o instanceof Date?o.getTime():o&&\"function\"==typeof o.toJSON?o.toJSON():o}const m=(o,t)=>s(i(o),i(t));function p(e,c,f){const s=new r(e),i=n(c,Object.assign({compare:m},f));if(f&&f.forPrimitives){const o={field:t},r=s.parse;s.setParse(t=>r(t,o))}return o(s.parse,i)}const a=p(e,f),u=p([\"$and\",\"$or\"].reduce((o,t)=>(o[t]=Object.assign({},o[t],{type:\"field\"}),o),Object.assign({},e,{$nor:Object.assign({},e.$nor,{type:\"field\",parse:c.compound})})),f,{forPrimitives:!0}),j=a;export{p as createFactory,j as filter,a as guard,u as squire};\n//# sourceMappingURL=index.mjs.map\n","import { Condition, buildAnd, buildOr } from '@ucast/mongo2js';\nimport { PureAbility, AnyAbility } from './PureAbility';\nimport { RuleOf, Generics } from './RuleIndex';\nimport { RawRule } from './RawRule';\nimport { Rule } from './Rule';\nimport { setByPath, wrapArray } from './utils';\nimport { AnyObject, SubjectType, Normalize } from './types';\n\nexport type RuleToQueryConverter = (rule: RuleOf) => object;\nexport interface AbilityQuery {\n $or?: T[]\n $and?: T[]\n}\n\nexport function rulesToQuery(\n ability: T,\n action: Normalize['abilities']>[0],\n subject: Normalize['abilities']>[1],\n convert: RuleToQueryConverter\n): AbilityQuery | null {\n const query: AbilityQuery = Object.create(null);\n const rules = ability.rulesFor(action, subject);\n\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n const op = rule.inverted ? '$and' : '$or';\n\n if (!rule.conditions) {\n if (rule.inverted) {\n break;\n } else {\n delete query[op];\n return query;\n }\n } else {\n query[op] = query[op] || [];\n query[op]!.push(convert(rule));\n }\n }\n\n return query.$or ? query : null;\n}\n\nfunction ruleToAST(rule: RuleOf): Condition {\n if (!rule.ast) {\n throw new Error(`Ability rule \"${JSON.stringify(rule)}\" does not have \"ast\" property. So, cannot be used to generate AST`);\n }\n return rule.ast;\n}\n\nexport function rulesToAST(\n ability: T,\n action: Normalize['abilities']>[0],\n subject: Normalize['abilities']>[1]\n): Condition | null {\n const query = rulesToQuery(ability, action, subject, ruleToAST) as AbilityQuery;\n\n if (query === null) {\n return null;\n }\n\n if (!query.$and) {\n return query.$or ? buildOr(query.$or) : buildAnd([]);\n }\n\n if (query.$or) {\n query.$and.push(buildOr(query.$or));\n }\n\n return buildAnd(query.$and);\n}\n\nexport function rulesToFields>(\n ability: T,\n action: Normalize['abilities']>[0],\n subject: Normalize['abilities']>[1]\n): AnyObject {\n return ability.rulesFor(action, subject)\n .filter(rule => !rule.inverted && rule.conditions)\n .reduce((values, rule) => {\n const conditions = rule.conditions!;\n\n return Object.keys(conditions).reduce((fields, fieldName) => {\n const value = conditions[fieldName];\n\n if (!value || (value as any).constructor !== Object) {\n setByPath(fields, fieldName, value);\n }\n\n return fields;\n }, values);\n }, {} as AnyObject);\n}\n\nconst getRuleFields = (rule: RuleOf) => rule.fields;\n\nexport type GetRuleFields> = (rule: R) => string[] | undefined;\n\nexport interface PermittedFieldsOptions {\n fieldsFrom?: GetRuleFields>\n}\n\nfunction deleteKey(this: Record, key: string) {\n delete this[key];\n}\n\nfunction setKey(this: Record, key: string) {\n this[key] = true;\n}\n\nexport function permittedFieldsOf(\n ability: T,\n action: Parameters[0],\n subject: Parameters[1],\n options: PermittedFieldsOptions = {}\n): string[] {\n const fieldsFrom = options.fieldsFrom || getRuleFields;\n const uniqueFields = ability.possibleRulesFor(action, subject)\n .filter(rule => rule.matchesConditions(subject))\n .reverse()\n .reduce((fields, rule) => {\n const names = fieldsFrom(rule);\n\n if (names) {\n const toggle = rule.inverted ? deleteKey : setKey;\n names.forEach(toggle, fields);\n }\n\n return fields;\n }, {} as Record);\n\n return Object.keys(uniqueFields);\n}\n\nconst joinIfArray = (value: string | string[]) => Array.isArray(value) ? value.join(',') : value;\n\nexport type PackRule> =\n [string, string] |\n [string, string, T['conditions']] |\n [string, string, T['conditions'] | 0, 1] |\n [string, string, T['conditions'] | 0, 1 | 0, string] |\n [string, string, T['conditions'] | 0, 1 | 0, string | 0, string];\n\nexport type PackSubjectType = (type: T) => string;\n\nexport function packRules>(\n rules: T[],\n packSubject?: PackSubjectType\n): PackRule[] {\n return rules.map((rule) => { // eslint-disable-line\n const packedRule: PackRule = [\n joinIfArray((rule as any).action || (rule as any).actions),\n typeof packSubject === 'function'\n ? wrapArray(rule.subject).map(packSubject).join(',')\n : joinIfArray(rule.subject),\n rule.conditions || 0,\n rule.inverted ? 1 : 0,\n rule.fields ? joinIfArray(rule.fields) : 0,\n rule.reason || ''\n ];\n\n while (!packedRule[packedRule.length - 1]) packedRule.pop();\n\n return packedRule;\n });\n}\n\nexport type UnpackSubjectType = (type: string) => T;\n\nexport function unpackRules>(\n rules: PackRule[],\n unpackSubject?: UnpackSubjectType\n): T[] {\n return rules.map(([action, subject, conditions, inverted, fields, reason]) => {\n const subjects = subject.split(',');\n const rule = {\n inverted: !!inverted,\n action: action.split(','),\n subject: typeof unpackSubject === 'function'\n ? subjects.map(unpackSubject)\n : subjects\n } as T;\n\n if (conditions) {\n rule.conditions = conditions;\n }\n\n if (fields) {\n rule.fields = fields.split(',');\n }\n\n if (reason) {\n rule.reason = reason;\n }\n\n return rule;\n });\n}\n","import { AnyObject, Subject, SubjectClass, ForcedSubject, AliasesMap } from './types';\n\nexport function wrapArray(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\n>(type: T, object: U): U & ForcedSubject {\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;\n}\n\nexport function detectSubjectType(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 = (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\nfunction copyArrayTo(dest: T[], target: T[], start: number) {\n for (let i = start; i < target.length; i++) {\n dest.push(target[i]);\n }\n}\n\nexport function mergePrioritized(\n array?: T[],\n anotherArray?: T[]\n): T[] {\n if (!array || !array.length) {\n return anotherArray || [];\n }\n\n if (!anotherArray || !anotherArray.length) {\n return array || [];\n }\n\n let i = 0;\n let j = 0;\n const merged: T[] = [];\n\n while (i < array.length && j < anotherArray.length) {\n if (array[i].priority < anotherArray[j].priority) {\n merged.push(array[i]);\n i++;\n } else {\n merged.push(anotherArray[j]);\n j++;\n }\n }\n\n copyArrayTo(merged, array, i);\n copyArrayTo(merged, anotherArray, j);\n\n return merged;\n}\n\nexport function getOrDefault(map: Map, key: K, defaultValue: () => V) {\n let value = map.get(key);\n\n if (!value) {\n value = defaultValue();\n map.set(key, value);\n }\n\n return value;\n}\n"],"names":["t","constructor","n","operator","this","value","Array","isArray","Error","r","o","field","e","c","u","f","length","push","a","l","s","Object","hasOwnProperty","p","name","type","validate","parse","map","d","h","RegExp","i","$","w","y","v","b","m","x","E","Date","g","j","O","q","_","R","query","$options","U","A","F","freeze","__proto__","$and","$or","$nor","$not","$elemMatch","$size","$in","$nin","$all","$mod","$exists","$gte","$gt","$lt","$lte","$eq","$ne","$regex","$where","k","compound","document","z","D","keys","reduce","assign","slice","bind","setParse","M","Number","isNaN","concat","get","some","lastIndexOf","String","indexOf","split","compare","numberOfArguments","interpret","equal","test","N","S","or","nor","and","every","not","eq","ne","lte","lt","gt","gte","exists","mod","size","regex","within","nin","all","elemMatch","where","call","in","getTime","toJSON","forPrimitives","ast","rulesToQuery","ability","action","subject","convert","create","rules","rulesFor","rule","op","inverted","conditions","ruleToAST","JSON","stringify","rulesToAST","buildOr","buildAnd","rulesToFields","filter","values","fields","fieldName","object","path","ref","lastKey","pop","res","prop","setByPath","getRuleFields","deleteKey","key","setKey","permittedFieldsOf","options","fieldsFrom","uniqueFields","possibleRulesFor","matchesConditions","reverse","names","toggle","forEach","joinIfArray","join","packRules","packSubject","packedRule","actions","reason","unpackRules","unpackSubject","subjects"],"mappings":"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"}