@casl/ability
Version:
CASL is an isomorphic authorization JavaScript library which restricts what resources a given user is allowed to access
167 lines (149 loc) • 4.42 kB
JavaScript
const e = Object.hasOwn || ((e, t) => Object.prototype.hasOwnProperty.call(e, t));
function t(e) {
return Array.isArray(e) ? e : [ e ];
}
const n = new Set([ "__proto__", "constructor", "prototype" ]);
function r(e, t, r) {
let o = e, u = t;
if (-1 !== t.indexOf(".")) {
const r = t.split(".");
u = r.pop(), o = r.reduce((e, t) => n.has(t) ? e : (e[t] = e[t] || {}, e[t]), e);
}
n.has(u) || (o[u] = r);
}
const o = "__caslSubjectType__";
function u(t, n) {
if (n) if (e(n, o)) {
if (t !== n[o]) throw new Error(`Trying to cast object to subject type ${t} but previously it was casted to ${n[o]}`);
} else Object.defineProperty(n, o, {
value: t
});
return n;
}
const c = e => {
const t = typeof e;
return "string" === t || "function" === t;
}, i = e => e.modelName || e.name;
function s(e) {
return "string" == typeof e ? e : i(e);
}
function f(t) {
return e(t, o) ? t[o] : i(t.constructor);
}
const a = {
function: e => e.constructor,
string: f
};
function b(n, r, o) {
let u = t(r), c = 0;
for (;c < u.length; ) {
const t = u[c++];
e(n, t) && (u = o(u, n[t]));
}
return u;
}
const l = (e, t) => e.concat(t);
function p(e, t) {
return t && !1 === t.skipValidate || function(e, t) {
if (t in e) throw new Error(`Cannot use "${t}" as an alias because it's reserved action.`);
const n = Object.keys(e), r = (e, n) => {
const r = function(e, t) {
if ("string" == typeof t && -1 !== e.indexOf(t)) return t;
for (let n = 0; n < t.length; n++) if (-1 !== e.indexOf(t[n])) return t[n];
return null;
}(e, n);
if (r) throw new Error(`Detected cycle ${r} -> ${e.join(", ")}`);
if ("string" == typeof n && n === t || -1 !== e.indexOf(t) || Array.isArray(n) && -1 !== n.indexOf(t)) throw new Error(`Cannot make an alias to "${t}" because this is reserved action`);
return e.concat(n);
};
for (let t = 0; t < n.length; t++) b(e, n[t], r);
}(e, t && t.anyAction || "manage"), t => b(e, t, l);
}
function j(e, t, n) {
for (let r = n; r < t.length; r++) e.push(t[r]);
}
function g(e, t) {
if (!e || !e.length) return t || [];
if (!t || !t.length) return e || [];
let n = 0, r = 0;
const o = [];
for (;n < e.length && r < t.length; ) e[n].priority < t[r].priority ? (o.push(e[n]),
n++) : e[n].priority > t[r].priority ? (o.push(t[r]), r++) : (o.push(e[n]), n++,
r++);
return j(o, e, n), j(o, t, r), o;
}
function y(e, t, n) {
let r = e.get(t);
return r || (r = n(), e.set(t, r)), r;
}
const O = e => e;
function m(e, t) {
let n;
for (let r = 0; r < e.length; r++) {
const o = t(e[r]);
n && o && n.push(e[r]), o || (n ?? (n = e.slice(0, r)));
}
return n || e;
}
Object.defineProperty(exports, "DETECT_SUBJECT_TYPE_STRATEGY", {
enumerable: !0,
get: function() {
return a;
}
}), Object.defineProperty(exports, "createAliasResolver", {
enumerable: !0,
get: function() {
return p;
}
}), Object.defineProperty(exports, "detectSubjectType", {
enumerable: !0,
get: function() {
return f;
}
}), Object.defineProperty(exports, "filterWithLazyAllocation", {
enumerable: !0,
get: function() {
return m;
}
}), Object.defineProperty(exports, "getOrDefault", {
enumerable: !0,
get: function() {
return y;
}
}), Object.defineProperty(exports, "getSubjectTypeName", {
enumerable: !0,
get: function() {
return s;
}
}), Object.defineProperty(exports, "identity", {
enumerable: !0,
get: function() {
return O;
}
}), Object.defineProperty(exports, "isSubjectType", {
enumerable: !0,
get: function() {
return c;
}
}), Object.defineProperty(exports, "mergePrioritized", {
enumerable: !0,
get: function() {
return g;
}
}), Object.defineProperty(exports, "setByPath", {
enumerable: !0,
get: function() {
return r;
}
}), Object.defineProperty(exports, "setSubjectType", {
enumerable: !0,
get: function() {
return u;
}
}), Object.defineProperty(exports, "wrapArray", {
enumerable: !0,
get: function() {
return t;
}
});
//# sourceMappingURL=utils-DKsJWNoq.cjs.map