@casl/vue
Version:
Vue plugin for CASL which makes it easy to add permissions in any Vue application
3 lines (2 loc) • 2 kB
JavaScript
(function(i,t){typeof exports==="object"&&typeof module!=="undefined"?t(exports,require("vue"),require("@casl/ability")):typeof define==="function"&&define.amd?define(["exports","vue","@casl/ability"],t):(i=typeof globalThis!=="undefined"?globalThis:i||self,t((i.casl=i.casl||{},i.casl.vue={}),i.Vue,i.casl))})(this,(function(i,t,n){"use strict";function reactiveAbility(i){if(Object.hasOwn(i,"possibleRulesFor"))return i;var n=t.ref(true);i.on("updated",(function(){n.value=!n.value}));var e=i.possibleRulesFor.bind(i);i.possibleRulesFor=function(i,t){n.value=n.value;return e(i,t)};i.can=i.can.bind(i);i.cannot=i.cannot.bind(i);return i}var e=Symbol("ability");function useAbility(){var i=t.inject(e);if(!i)throw new Error("Cannot inject Ability instance because it was not provided");return i}function provideAbility(i){t.provide(e,reactiveAbility(i))}function r(i){if(i.a!==void 0)return"a";if(i.this!==void 0)return"this";if(i.an!==void 0)return"an";return""}var o=t.defineComponent({name:"Can",props:{I:String,do:String,a:[String,Function],an:[String,Function],this:[String,Function,Object],on:[String,Function,Object],not:Boolean,passThrough:Boolean,field:String},setup:function i(t,n){var e=n.slots;var o=t;var u="do";var a="on";if(o[u]===void 0){u="I";a=r(t)}if(!o[u])throw new Error("Neither `I` nor `do` prop was passed in <Can>");if(!e.default)throw new Error("Expects to receive default slot");var l=useAbility();return function(){var i=l.can(o[u],o[a],o.field);var n=t.not?!i:i;if(!t.passThrough)return n?e.default():null;return e.default({allowed:n,ability:l})}}});function u(i,t,r){if(!t||!(t instanceof n.PureAbility))throw new Error("Please provide an Ability instance to abilitiesPlugin plugin");i.provide(e,reactiveAbility(t));if(r&&r.useGlobalProperties){i.config.globalProperties.$ability=t;i.config.globalProperties.$can=t.can.bind(t)}}i.ABILITY_TOKEN=e;i.Can=o;i.abilitiesPlugin=u;i.provideAbility=provideAbility;i.useAbility=useAbility}));
//# sourceMappingURL=index.js.map