UNPKG

permission-js-core

Version:
3 lines (2 loc) 3.03 kB
function e(e){return"object"==typeof e}function t(t){try{const s=Object.getPrototypeOf(t);Object.getOwnPropertyNames(s).forEach((r=>function(t,s,r){if(!e(r))return;if(!e(s))return;if("constructor"===t)return;const i=Object.getOwnPropertyDescriptor(r,t);i&&(i.get||i.set?Object.defineProperty(r,t,{...i,get:i.get?i.get.bind(s):void 0,set:i.set?i.set.bind(s):void 0}):"function"==typeof i.value&&(s[t]=r[t].bind(s)))}(r,t,s)))}catch(e){throw new Error(`Cannot get prototype of ${t}`)}}class s{mapSubscribers=null;timeout=null;config={delay:20};queue=new Set;constructor(e=null,s={delay:20}){t(this),this.mapSubscribers=e,this.config=s}set(e,t,s){this.mapSubscribers||(this.mapSubscribers={}),this.mapSubscribers[e]||(this.mapSubscribers[e]={}),this.mapSubscribers[e][t]||(this.mapSubscribers[e][t]=new Set),this.mapSubscribers[e][t].add(s)}remove(e,t,s){this.mapSubscribers?.[e]&&this.mapSubscribers?.[e]?.[t]&&this.mapSubscribers[e][t].delete(s)}call(e,t){if(this.mapSubscribers){const s=this.mapSubscribers[e][t];s.forEach((e=>this.queue.add(e))),s.clear(),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout((()=>this.fetch()),this.config.delay)}}fetch(){const{queue:e}=this;e.forEach((e=>e())),this.clear()}clear(){this.queue.clear(),this.timeout&&(clearTimeout(this.timeout),this.timeout=null)}}const r=(e,t,s,r,i)=>Array.isArray(e)&&"string"==typeof t?e.length?e[r]((e=>s(e,t))):i:Array.isArray(t)&&"string"==typeof e?t.length?t[r]((t=>s(e,t))):i:Array.isArray(e)&&Array.isArray(t)?e.length&&t.length?e[r]((e=>t[r]((t=>s(e,t))))):i:"string"==typeof e&&"string"==typeof t?s(e,t):i;class i{rules;subscribeManager=new s;constructor(e=null){t(this),this.rules=e}update(e,t,s){this.rules||(this.rules={}),this.rules?.[e]||(this.rules[e]={}),this.rules?.[e]&&this.rules[e]?.[t]!==s&&(this.rules[e][t]=s,this.subscribeManager.call(e,t))}subscribedCheck({signal:e,prevSignal:t,...s}){return t&&this.removeSubscribe({subject:s.subject,action:s.action,prevSignal:t}),this.setSubscribe({subject:s.subject,action:s.action,signal:e}),this.checkPermission(s)}setSubscribe({subject:e,action:t,signal:s}){r(e,t,((e,t)=>{this.subscribeManager.set(e,t,s)}),"forEach",null)}removeSubscribe({subject:e,action:t,prevSignal:s}){r(e,t,((e,t)=>{this.subscribeManager.remove(e,t,s)}),"forEach",null)}checkPermission({subject:e,action:t,conditions:s,mode:i="some"}){return r(e,t,((e,t)=>this.checkPermissions(e,t,s)),i,!1)}checkPermissions(e,t,s){if(!this.rules)return!1;const r=this.rules?.[e];if(!r)return!1;const i=r?.[t];if("boolean"==typeof i)return i;if(i&&"object"==typeof i&&s){const e=i;return Object.keys(e).every((t=>Array.isArray(s[t])?s[t].some((s=>s===e[t])):e[t]===s[t]))}return!1}}const{subscribedCheck:c}=new i;c({subject:"image",action:["download","upload"],signal:()=>{}});const n=()=>{const{checkPermission:e,subscribedCheck:t,update:s}=new i;return{can:e,subscribe:()=>{let e;return s=>{const r=t({...s,prevSignal:e});return e=s.signal,r}},update:s}};export{n as factoryPermission}; //# sourceMappingURL=index.mjs.map