!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(((n=n||self).casl=n.casl||{},n.casl.extra={}))}(this,(function(n){"use strict";function r(n,r,t){var e=n,u=r;if(-1!==r.indexOf(".")){var f=r.split(".");u=f.pop(),e=f.reduce((function(n,r){return n[r]=n[r]||{},n[r]}),n)}e[u]=t}var t=function(n){return n.fields};function e(n){delete this[n]}function u(n){this[n]=!0}var f=function(n){return Array.isArray(n)?n.join(","):n};n.packRules=function(n,r){return n.map((function(n){for(var t,e=[f(n.action||n.actions),"function"==typeof r?(t=n.subject,Array.isArray(t)?t:[t]).map(r).join(","):f(n.subject),n.conditions||0,n.inverted?1:0,n.fields?f(n.fields):0,n.reason||""];!e[e.length-1];)e.pop();return e}))},n.permittedFieldsOf=function(n,r,f,o){void 0===o&&(o={});var i=o.fieldsFrom||t,c=n.possibleRulesFor(r,f).filter((function(n){return n.matchesConditions(f)})).reverse().reduce((function(n,r){var t=i(r);if(t){var f=r.inverted?e:u;t.forEach(f,n)}return n}),{});return Object.keys(c)},n.rulesToFields=function(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),u=1;u1?r-1:0),e=1;e