import{createFactory as t,$eq as r,$ne as i,$lt as n,$lte as e,$gt as u,$gte as o,$in as s,$nin as a,$all as f,$size as c,$regex as h,$options as v,$elemMatch as l,$exists as d,eq as b,ne as y,lt as p,lte as w,gt as g,gte as A,within as j,nin as E,all as m,size as $,regex as M,elemMatch as O,exists as x,and as F}from"@ucast/mongo2js";function _(t,r){for(var i=0;i "+i.join(", "));var u="string"===typeof n&&n===r||-1!==i.indexOf(r)||Array.isArray(n)&&-1!==n.indexOf(r);if(u)throw new Error('Cannot make an alias to "'+r+'" because this is reserved action');return i.concat(n)};for(var e=0;e=0;n--){var e=r.length-n-1;var u=new rt(r[n],this.v,e);var o=q(u.action);var s=q(u.subject||this.p);if(!this.h&&u.fields)this.h=true;for(var a=0;a1?"(?:"+r.join("|")+")":r[0];return new RegExp("^"+i+"$")}var At=function t(r){var i;return function(t){if("undefined"===typeof i)i=r.every((function(t){return-1===t.indexOf("*")}))?null:gt(r);return null===i?-1!==r.indexOf(t):i.test(t)}};var jt=function(t){P(Ability,t);function Ability(r,i){if(void 0===r)r=[];if(void 0===i)i={};return t.call(this,r,C({conditionsMatcher:vt,fieldMatcher:At},i))||this}return Ability}(at);function createMongoAbility(t,r){if(void 0===t)t=[];if(void 0===r)r={};return new at(t,C({conditionsMatcher:vt,fieldMatcher:At},r))}function isAbilityClass(t){return"function"===typeof t.prototype.possibleRulesFor}var Et=function(){function t(t){this.O=t}var r=t.prototype;r.because=function t(r){this.O.reason=r;return this};return t}();var mt=function(){function AbilityBuilder(t){var r=this;this.rules=[];this.F=t;this.can=function(t,i,n,e){return r._(t,i,n,e,false)};this.cannot=function(t,i,n,e){return r._(t,i,n,e,true)};this.build=function(t){return isAbilityClass(r.F)?new r.F(r.rules,t):r.F(r.rules,t)}}var t=AbilityBuilder.prototype;t._=function t(r,i,n,e,u){var o={action:r};if(u)o.inverted=u;if(i){o.subject=i;if(Array.isArray(n)||"string"===typeof n)o.fields=n;else if("undefined"!==typeof n)o.conditions=n;if("undefined"!==typeof e)o.conditions=e}this.rules.push(o);return new Et(o)};return AbilityBuilder}();function defineAbility(t,r){var i=new mt(createMongoAbility);var n=t(i.can,i.cannot);if(n&&"function"===typeof n.then)return n.then((function(){return i.build(r)}));return i.build(r)}var $t=function t(r){return'Cannot execute "'+r.action+'" on "'+r.subjectType+'"'};var Mt=function t(r){this.message=r};Mt.prototype=Object.create(Error.prototype);var Ot=function(t){P(ForbiddenError,t);ForbiddenError.setDefaultMessage=function t(r){this.S="string"===typeof r?function(){return r}:r};ForbiddenError.from=function t(r){return new this(r)};function ForbiddenError(r){var i;i=t.call(this,"")||this;i.ability=r;if("function"===typeof Error.captureStackTrace){i.name="ForbiddenError";Error.captureStackTrace(T(i),i.constructor)}return i}var r=ForbiddenError.prototype;r.setMessage=function t(r){this.message=r;return this};r.throwUnlessCan=function t(r,i,n){var e=this.unlessCan(r,i,n);if(e)throw e};r.unlessCan=function t(r,i,n){var e=this.ability.relevantRuleFor(r,i,n);if(e&&!e.inverted)return;this.action=r;this.subject=i;this.subjectType=G(this.ability.detectSubjectType(i));this.field=n;var u=e?e.reason:"";this.message=this.message||u||this.constructor.S(this);return this};return ForbiddenError}(Mt);Ot.S=$t;var xt=Object.freeze({__proto__:null});export{jt as Ability,mt as AbilityBuilder,Ot as ForbiddenError,at as PureAbility,ht as buildMongoQueryMatcher,U as createAliasResolver,createMongoAbility,defineAbility,H as detectSubjectType,At as fieldPatternMatcher,$t as getDefaultErrorMessage,xt as hkt,vt as mongoQueryMatcher,D as subject,q as wrapArray}; //# sourceMappingURL=index.js.map