(function(t,r){"object"===typeof exports&&"undefined"!==typeof module?r(exports,require("@ucast/mongo2js")):"function"===typeof define&&define.amd?define(["exports","@ucast/mongo2js"],r):(t="undefined"!==typeof globalThis?globalThis:t||self,r(t.casl={},t.ucast.mongo2js))})(this,(function(t,r){"use strict";function i(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 _(r[n],this.v,e);var o=c(u.action);var f=c(u.subject||this.p);if(!this.h&&u.fields)this.h=true;for(var s=0;s1?"(?:"+r.join("|")+")":r[0];return new RegExp("^"+i+"$")}var K=function t(r){var i;return function(t){if("undefined"===typeof i)i=r.every((function(t){return-1===t.indexOf("*")}))?null:J(r);return null===i?-1!==r.indexOf(t):i.test(t)}};var Q=function(t){u(Ability,t);function Ability(r,i){if(void 0===r)r=[];if(void 0===i)i={};return t.call(this,r,e({conditionsMatcher:Y,fieldMatcher:K},i))||this}return Ability}(k);function createMongoAbility(t,r){if(void 0===t)t=[];if(void 0===r)r={};return new k(t,e({conditionsMatcher:Y,fieldMatcher:K},r))}function isAbilityClass(t){return"function"===typeof t.prototype.possibleRulesFor}var U=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 V=function(){function AbilityBuilder(t){var r=this;this.rules=[];this._=t;this.can=function(t,i,n,e){return r.F(t,i,n,e,false)};this.cannot=function(t,i,n,e){return r.F(t,i,n,e,true)};this.build=function(t){return isAbilityClass(r._)?new r._(r.rules,t):r._(r.rules,t)}}var t=AbilityBuilder.prototype;t.F=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 U(o)};return AbilityBuilder}();function defineAbility(t,r){var i=new V(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 W=function t(r){return'Cannot execute "'+r.action+'" on "'+r.subjectType+'"'};var X=function t(r){this.message=r};X.prototype=Object.create(Error.prototype);var Z=function(t){u(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(f(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=y(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}(X);Z.S=W;var tt=Object.freeze({__proto__:null});t.Ability=Q;t.AbilityBuilder=V;t.ForbiddenError=Z;t.PureAbility=k;t.buildMongoQueryMatcher=z;t.createAliasResolver=E;t.createMongoAbility=createMongoAbility;t.defineAbility=defineAbility;t.detectSubjectType=p;t.fieldPatternMatcher=K;t.getDefaultErrorMessage=W;t.hkt=tt;t.mongoQueryMatcher=Y;t.subject=l;t.wrapArray=c;Object.defineProperty(t,"__esModule",{value:true})})); //# sourceMappingURL=index.js.map