locator-ars-lib 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,14 @@
1
- var h = Object.defineProperty;
2
- var y = (e, s, n) => s in e ? h(e, s, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[s] = n;
3
- var o = (e, s, n) => y(e, typeof s != "symbol" ? s + "" : s, n);
4
- import { inject as v, ref as l, computed as m, watch as _, onUnmounted as g, defineComponent as k, toRefs as w, renderSlot as u } from "vue";
5
- import P from "axios";
1
+ var y = Object.defineProperty;
2
+ var v = (e, s, r) => s in e ? y(e, s, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[s] = r;
3
+ var o = (e, s, r) => v(e, typeof s != "symbol" ? s + "" : s, r);
4
+ import { inject as _, ref as l, computed as p, watch as w, onUnmounted as k, defineComponent as g, toRefs as P, renderSlot as u } from "vue";
5
+ import C from "axios";
6
6
  class S {
7
7
  constructor(s) {
8
8
  o(this, "axios");
9
9
  o(this, "cache", /* @__PURE__ */ new Map());
10
10
  o(this, "endpoint");
11
- this.axios = P.create({
11
+ this.axios = C.create({
12
12
  baseURL: (s == null ? void 0 : s.baseUrl) || ""
13
13
  }), this.endpoint = (s == null ? void 0 : s.endpoint) || "/api/v1/dashboard/access";
14
14
  }
@@ -16,12 +16,12 @@ class S {
16
16
  if (this.cache.has(s))
17
17
  return this.cache.get(s);
18
18
  try {
19
- const a = (await this.axios.get(this.endpoint, {
19
+ const i = (await this.axios.get(this.endpoint, {
20
20
  params: { action: s }
21
21
  })).data.allowed || !1;
22
- return this.cache.set(s, a), a;
23
- } catch (n) {
24
- return console.error(`Error checking permission for ${s}:`, n), !1;
22
+ return this.cache.set(s, i), i;
23
+ } catch (r) {
24
+ return console.error(`Error checking permission for ${s}:`, r), !1;
25
25
  }
26
26
  }
27
27
  clearCache(s) {
@@ -29,51 +29,51 @@ class S {
29
29
  }
30
30
  }
31
31
  const f = Symbol("Permissions");
32
- function C(e) {
32
+ function $(e) {
33
33
  return new S(e);
34
34
  }
35
- const $ = {
35
+ const E = {
36
36
  install(e, s) {
37
- const n = C(s);
38
- e.provide(f, n);
37
+ const r = $(s);
38
+ e.provide(f, r);
39
39
  }
40
40
  };
41
- function p() {
42
- const e = v(f);
41
+ function h() {
42
+ const e = _(f);
43
43
  if (!e)
44
44
  throw new Error("Permissions plugin not installed!");
45
45
  return e;
46
46
  }
47
47
  function D(e, s = {}) {
48
- const n = p(), a = l(null), i = l(!1), t = l(null), d = m(() => typeof e == "string" ? e : e.value), c = async () => {
49
- if (d.value) {
50
- i.value = !0, t.value = null;
48
+ const r = h(), i = l(null), n = l(!1), a = l(null), m = p(() => typeof e == "string" ? e : e.value), c = async () => {
49
+ if (m.value) {
50
+ n.value = !0, a.value = null;
51
51
  try {
52
- a.value = await n.can(d.value);
53
- } catch (r) {
54
- t.value = r instanceof Error ? r : new Error(String(r)), a.value = !1;
52
+ i.value = await r.can(m.value);
53
+ } catch (t) {
54
+ a.value = t instanceof Error ? t : new Error(String(t)), i.value = !1;
55
55
  } finally {
56
- i.value = !1;
56
+ n.value = !1;
57
57
  }
58
58
  }
59
59
  };
60
60
  if (s.autoCheck !== !1 && c(), typeof e != "string") {
61
- const r = _(e, () => {
61
+ const t = w(e, () => {
62
62
  c();
63
63
  });
64
- g(() => {
65
- r();
64
+ k(() => {
65
+ t();
66
66
  });
67
67
  }
68
68
  return {
69
- isAllowed: a,
70
- isLoading: i,
71
- error: t,
69
+ isAllowed: i,
70
+ isLoading: n,
71
+ error: a,
72
72
  check: c,
73
- can: m(() => a.value === !0)
73
+ can: p(() => i.value === !0)
74
74
  };
75
75
  }
76
- const E = k({
76
+ const L = g({
77
77
  name: "Check",
78
78
  props: {
79
79
  action: {
@@ -86,49 +86,78 @@ const E = k({
86
86
  }
87
87
  },
88
88
  setup(e) {
89
- const { action: s } = w(e), { can: n, isLoading: a } = D(s, { autoCheck: !0 });
89
+ const { action: s } = P(e), { can: r, isLoading: i } = D(s, { autoCheck: !0 });
90
90
  return {
91
- can: n,
92
- isLoading: a
91
+ can: r,
92
+ isLoading: i
93
93
  };
94
94
  }
95
- }), L = (e, s) => {
96
- const n = e.__vccOpts || e;
97
- for (const [a, i] of s)
98
- n[a] = i;
99
- return n;
95
+ }), U = (e, s) => {
96
+ const r = e.__vccOpts || e;
97
+ for (const [i, n] of s)
98
+ r[i] = n;
99
+ return r;
100
100
  };
101
- function b(e, s, n, a, i, t) {
101
+ function b(e, s, r, i, n, a) {
102
102
  return e.can ? u(e.$slots, "default", { key: 0 }) : e.isLoading ? u(e.$slots, "loading", { key: 2 }) : u(e.$slots, "fallback", { key: 1 });
103
103
  }
104
- const U = /* @__PURE__ */ L(E, [["render", b]]), x = {
104
+ const R = /* @__PURE__ */ U(L, [["render", b]]), d = async (e = 5, s = 100) => {
105
+ let r = 0;
106
+ for (; r < e; )
107
+ try {
108
+ return h();
109
+ } catch {
110
+ if (r++, r >= e)
111
+ return console.warn("Could not get PermissionsService after multiple attempts"), null;
112
+ await new Promise((n) => setTimeout(n, s));
113
+ }
114
+ return null;
115
+ }, j = {
105
116
  async mounted(e, s) {
106
- const n = e.style.display;
117
+ const r = e.style.display;
107
118
  e._permission_data = {
108
119
  action: s.value,
109
- originalDisplay: n
110
- }, await p().can(s.value) || (e.style.display = "none");
120
+ originalDisplay: r,
121
+ permissionChecked: !1
122
+ };
123
+ try {
124
+ const i = await d();
125
+ i ? (await i.can(s.value) || (e.style.display = "none"), e._permission_data.permissionChecked = !0) : console.warn(`Permission check failed for action: ${s.value}`);
126
+ } catch (i) {
127
+ console.error("Error checking permission:", i);
128
+ }
111
129
  },
112
130
  async updated(e, s) {
113
- (!e._permission_data || e._permission_data.action !== s.value) && (e._permission_data = {
114
- action: s.value,
115
- originalDisplay: e.style.display || ""
116
- }, await p().can(s.value) ? e.style.display = e._permission_data.originalDisplay : e.style.display = "none");
131
+ var r;
132
+ if (!e._permission_data || e._permission_data.action !== s.value) {
133
+ const i = ((r = e._permission_data) == null ? void 0 : r.originalDisplay) || e.style.display || "";
134
+ e._permission_data = {
135
+ action: s.value,
136
+ originalDisplay: i,
137
+ permissionChecked: !1
138
+ };
139
+ try {
140
+ const n = await d();
141
+ n && (await n.can(s.value) ? e.style.display = e._permission_data.originalDisplay : e.style.display = "none", e._permission_data.permissionChecked = !0);
142
+ } catch (n) {
143
+ console.error("Error checking permission:", n);
144
+ }
145
+ }
117
146
  },
118
147
  unmounted(e) {
119
148
  e._permission_data && (e.style.display = e._permission_data.originalDisplay, delete e._permission_data);
120
149
  }
121
- }, A = {
150
+ }, F = {
122
151
  install(e, s) {
123
- e.use($, s), e.component("Check", U), e.directive("can", x);
152
+ e.use(E, s), e.component("Check", R), e.directive("can", j);
124
153
  }
125
154
  };
126
155
  export {
127
- U as Check,
128
- A as default,
129
- C as setupPermissions,
156
+ R as Check,
157
+ F as default,
158
+ $ as setupPermissions,
130
159
  D as usePermissions,
131
- p as usePermissionsService,
132
- x as vCan
160
+ h as usePermissionsService,
161
+ j as vCan
133
162
  };
134
163
  //# sourceMappingURL=locator-ars-lib.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locator-ars-lib.es.js","sources":["../src/services/permissionsService.ts","../src/plugin.ts","../src/composables/usePermissions.ts","../src/components/Check.vue","../src/directives/vCan.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nexport interface PermissionsOptions {\n baseUrl?: string\n endpoint?: string\n}\n\nexport class PermissionsService {\n private axios: AxiosInstance\n private cache: Map<string, boolean> = new Map()\n private endpoint: string\n\n constructor(options?: PermissionsOptions) {\n this.axios = axios.create({\n baseURL: options?.baseUrl || ''\n })\n this.endpoint = options?.endpoint || '/api/v1/dashboard/access'\n }\n\n async can(action: string): Promise<boolean> {\n // Check if we have a cached result\n if (this.cache.has(action)) {\n return this.cache.get(action) as boolean\n }\n\n try {\n const response = await this.axios.get(this.endpoint, {\n params: { action }\n })\n\n const allowed = response.data.allowed || false\n\n // Cache the result\n this.cache.set(action, allowed)\n\n return allowed\n } catch (error) {\n console.error(`Error checking permission for ${action}:`, error)\n return false\n }\n }\n\n clearCache(action?: string): void {\n if (action) {\n this.cache.delete(action)\n } else {\n this.cache.clear()\n }\n }\n} ","import { App, inject, InjectionKey } from 'vue'\nimport { PermissionsService, PermissionsOptions } from './services/permissionsService'\n\nexport const PermissionsKey: InjectionKey<PermissionsService> = Symbol('Permissions')\n\nexport function setupPermissions(options?: PermissionsOptions): PermissionsService {\n return new PermissionsService(options)\n}\n\nexport const PermissionsPlugin = {\n install(app: App, options?: PermissionsOptions) {\n const permissionsService = setupPermissions(options)\n app.provide(PermissionsKey, permissionsService)\n }\n}\n\nexport function usePermissionsService(): PermissionsService {\n const permissionsService = inject(PermissionsKey)\n if (!permissionsService) {\n throw new Error('Permissions plugin not installed!')\n }\n return permissionsService\n} ","import { ref, computed, Ref, watch, onUnmounted } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\nexport interface UsePermissionsOptions {\n autoCheck?: boolean\n}\n\nexport function usePermissions(action: string | Ref<string>, options: UsePermissionsOptions = {}) {\n const permissionsService = usePermissionsService()\n const isAllowed = ref<boolean | null>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n const actionValue = computed(() => {\n return typeof action === 'string' ? action : action.value\n })\n\n const checkPermission = async () => {\n if (!actionValue.value) return\n\n isLoading.value = true\n error.value = null\n\n try {\n isAllowed.value = await permissionsService.can(actionValue.value)\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err))\n isAllowed.value = false\n } finally {\n isLoading.value = false\n }\n }\n\n // Auto-check on mount if requested\n if (options.autoCheck !== false) {\n checkPermission()\n }\n\n // Re-check when action changes\n if (typeof action !== 'string') {\n const unwatch = watch(action, () => {\n checkPermission()\n })\n\n onUnmounted(() => {\n unwatch()\n })\n }\n\n return {\n isAllowed,\n isLoading,\n error,\n check: checkPermission,\n can: computed(() => isAllowed.value === true)\n }\n} ","<template>\n <slot v-if=\"can\" />\n <slot name=\"fallback\" v-else-if=\"!isLoading\" />\n <slot name=\"loading\" v-else />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, toRefs, PropType } from 'vue';\nimport { usePermissions } from '../composables/usePermissions';\n\nexport default defineComponent({\n name: 'Check',\n props: {\n action: {\n type: String as PropType<string>,\n required: true\n },\n fallback: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const { action } = toRefs(props);\n const { can, isLoading } = usePermissions(action, { autoCheck: true });\n\n return {\n can,\n isLoading\n };\n }\n});\n</script> ","import { ObjectDirective, DirectiveBinding } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\ninterface CanHTMLElement extends HTMLElement {\n _permission_data?: {\n action: string\n originalDisplay: string\n }\n}\n\nexport const vCan: ObjectDirective = {\n async mounted(el: CanHTMLElement, binding: DirectiveBinding) {\n // Store original display value\n const originalDisplay = el.style.display\n\n // Store action and original display for updates\n el._permission_data = {\n action: binding.value,\n originalDisplay\n }\n\n const permissionsService = usePermissionsService()\n const hasPermission = await permissionsService.can(binding.value)\n\n if (!hasPermission) {\n el.style.display = 'none'\n }\n },\n\n async updated(el: CanHTMLElement, binding: DirectiveBinding) {\n if (!el._permission_data || el._permission_data.action !== binding.value) {\n // Action has changed or directive is new\n el._permission_data = {\n action: binding.value,\n originalDisplay: el.style.display || ''\n }\n\n const permissionsService = usePermissionsService()\n const hasPermission = await permissionsService.can(binding.value)\n\n if (!hasPermission) {\n el.style.display = 'none'\n } else {\n el.style.display = el._permission_data.originalDisplay\n }\n }\n },\n\n unmounted(el: CanHTMLElement) {\n if (el._permission_data) {\n el.style.display = el._permission_data.originalDisplay\n delete el._permission_data\n }\n }\n} ","import { App } from 'vue'\nimport Check from './components/Check.vue'\nimport { usePermissions } from './composables/usePermissions'\nimport { PermissionsPlugin, setupPermissions, usePermissionsService } from './plugin'\nimport { vCan } from './directives/vCan'\n\n// Именованные экспорты\nexport {\n Check,\n usePermissions,\n setupPermissions,\n vCan,\n usePermissionsService\n}\n\n// Создаем основной объект плагина\nconst plugin = {\n install(app: App, options?: { baseUrl?: string }) {\n app.use(PermissionsPlugin, options)\n app.component('Check', Check)\n app.directive('can', vCan)\n }\n}\n\n// Экспортируем плагин как по умолчанию\nexport default plugin "],"names":["PermissionsService","options","__publicField","axios","action","allowed","error","PermissionsKey","setupPermissions","PermissionsPlugin","app","permissionsService","usePermissionsService","inject","usePermissions","isAllowed","ref","isLoading","actionValue","computed","checkPermission","err","unwatch","watch","onUnmounted","_sfc_main","defineComponent","props","toRefs","can","_ctx","_renderSlot","vCan","el","binding","originalDisplay","plugin","Check"],"mappings":";;;;;AAOO,MAAMA,EAAmB;AAAA,EAK5B,YAAYC,GAA8B;AAJlC,IAAAC,EAAA;AACA,IAAAA,EAAA,mCAAkC,IAAI;AACtC,IAAAA,EAAA;AAGC,SAAA,QAAQC,EAAM,OAAO;AAAA,MACtB,UAASF,KAAA,gBAAAA,EAAS,YAAW;AAAA,IAAA,CAChC,GACI,KAAA,YAAWA,KAAA,gBAAAA,EAAS,aAAY;AAAA,EAAA;AAAA,EAGzC,MAAM,IAAIG,GAAkC;AAExC,QAAI,KAAK,MAAM,IAAIA,CAAM;AACd,aAAA,KAAK,MAAM,IAAIA,CAAM;AAG5B,QAAA;AAKM,YAAAC,KAJW,MAAM,KAAK,MAAM,IAAI,KAAK,UAAU;AAAA,QACjD,QAAQ,EAAE,QAAAD,EAAO;AAAA,MAAA,CACpB,GAEwB,KAAK,WAAW;AAGpC,kBAAA,MAAM,IAAIA,GAAQC,CAAO,GAEvBA;AAAA,aACFC,GAAO;AACZ,qBAAQ,MAAM,iCAAiCF,CAAM,KAAKE,CAAK,GACxD;AAAA,IAAA;AAAA,EACX;AAAA,EAGJ,WAAWF,GAAuB;AAC9B,IAAIA,IACK,KAAA,MAAM,OAAOA,CAAM,IAExB,KAAK,MAAM,MAAM;AAAA,EACrB;AAER;AC9Ca,MAAAG,IAAmD,OAAO,aAAa;AAE7E,SAASC,EAAiBP,GAAkD;AACxE,SAAA,IAAID,EAAmBC,CAAO;AACzC;AAEO,MAAMQ,IAAoB;AAAA,EAC7B,QAAQC,GAAUT,GAA8B;AACtC,UAAAU,IAAqBH,EAAiBP,CAAO;AAC/C,IAAAS,EAAA,QAAQH,GAAgBI,CAAkB;AAAA,EAAA;AAEtD;AAEO,SAASC,IAA4C;AAClD,QAAAD,IAAqBE,EAAON,CAAc;AAChD,MAAI,CAACI;AACK,UAAA,IAAI,MAAM,mCAAmC;AAEhD,SAAAA;AACX;ACfO,SAASG,EAAeV,GAA8BH,IAAiC,IAAI;AAC9F,QAAMU,IAAqBC,EAAsB,GAC3CG,IAAYC,EAAoB,IAAI,GACpCC,IAAYD,EAAI,EAAK,GACrBV,IAAQU,EAAkB,IAAI,GAE9BE,IAAcC,EAAS,MAClB,OAAOf,KAAW,WAAWA,IAASA,EAAO,KACvD,GAEKgB,IAAkB,YAAY;AAC5B,QAACF,EAAY,OAEjB;AAAA,MAAAD,EAAU,QAAQ,IAClBX,EAAM,QAAQ;AAEV,UAAA;AACA,QAAAS,EAAU,QAAQ,MAAMJ,EAAmB,IAAIO,EAAY,KAAK;AAAA,eAC3DG,GAAK;AACJ,QAAAf,EAAA,QAAQe,aAAe,QAAQA,IAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,GAChEN,EAAU,QAAQ;AAAA,MAAA,UACpB;AACE,QAAAE,EAAU,QAAQ;AAAA,MAAA;AAAA;AAAA,EAE1B;AAQI,MALAhB,EAAQ,cAAc,MACNmB,EAAA,GAIhB,OAAOhB,KAAW,UAAU;AACtB,UAAAkB,IAAUC,EAAMnB,GAAQ,MAAM;AAChB,MAAAgB,EAAA;AAAA,IAAA,CACnB;AAED,IAAAI,EAAY,MAAM;AACN,MAAAF,EAAA;AAAA,IAAA,CACX;AAAA,EAAA;AAGE,SAAA;AAAA,IACH,WAAAP;AAAA,IACA,WAAAE;AAAA,IACA,OAAAX;AAAA,IACA,OAAOc;AAAA,IACP,KAAKD,EAAS,MAAMJ,EAAU,UAAU,EAAI;AAAA,EAChD;AACJ;AC9CA,MAAAU,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EAEb;AAAA,EACA,MAAMC,GAAO;AACX,UAAM,EAAE,QAAAvB,EAAA,IAAWwB,EAAOD,CAAK,GACzB,EAAE,KAAAE,GAAK,WAAAZ,MAAcH,EAAeV,GAAQ,EAAE,WAAW,IAAM;AAE9D,WAAA;AAAA,MACL,KAAAyB;AAAA,MACA,WAAAZ;AAAA,IACF;AAAA,EAAA;AAEJ,CAAC;;;;;;;SA9Baa,EAAZ,MAAAC,EAAmBD,uBADrB,KAEoC,EAAA,CAAA,IAAAA,EAAA,YAClCC,EAA8BD,EAHhC,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,IAEEC,EAA+CD,EAFjD,QAAA,YAAA,EAAA,KAAA,EAAA,CAAA;;iDCUaE,IAAwB;AAAA,EACjC,MAAM,QAAQC,GAAoBC,GAA2B;AAEnD,UAAAC,IAAkBF,EAAG,MAAM;AAGjC,IAAAA,EAAG,mBAAmB;AAAA,MAClB,QAAQC,EAAQ;AAAA,MAChB,iBAAAC;AAAA,IACJ,GAGsB,MADKvB,EAAsB,EACF,IAAIsB,EAAQ,KAAK,MAG5DD,EAAG,MAAM,UAAU;AAAA,EAE3B;AAAA,EAEA,MAAM,QAAQA,GAAoBC,GAA2B;AACzD,KAAI,CAACD,EAAG,oBAAoBA,EAAG,iBAAiB,WAAWC,EAAQ,WAE/DD,EAAG,mBAAmB;AAAA,MAClB,QAAQC,EAAQ;AAAA,MAChB,iBAAiBD,EAAG,MAAM,WAAW;AAAA,IACzC,GAGsB,MADKrB,EAAsB,EACF,IAAIsB,EAAQ,KAAK,IAKzDD,EAAA,MAAM,UAAUA,EAAG,iBAAiB,kBAFvCA,EAAG,MAAM,UAAU;AAAA,EAK/B;AAAA,EAEA,UAAUA,GAAoB;AAC1B,IAAIA,EAAG,qBACAA,EAAA,MAAM,UAAUA,EAAG,iBAAiB,iBACvC,OAAOA,EAAG;AAAA,EACd;AAER,GCtCMG,IAAS;AAAA,EACX,QAAQ1B,GAAUT,GAAgC;AAC1C,IAAAS,EAAA,IAAID,GAAmBR,CAAO,GAC9BS,EAAA,UAAU,SAAS2B,CAAK,GACxB3B,EAAA,UAAU,OAAOsB,CAAI;AAAA,EAAA;AAEjC;"}
1
+ {"version":3,"file":"locator-ars-lib.es.js","sources":["../src/services/permissionsService.ts","../src/plugin.ts","../src/composables/usePermissions.ts","../src/components/Check.vue","../src/directives/vCan.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nexport interface PermissionsOptions {\n baseUrl?: string\n endpoint?: string\n}\n\nexport class PermissionsService {\n private axios: AxiosInstance\n private cache: Map<string, boolean> = new Map()\n private endpoint: string\n\n constructor(options?: PermissionsOptions) {\n this.axios = axios.create({\n baseURL: options?.baseUrl || ''\n })\n this.endpoint = options?.endpoint || '/api/v1/dashboard/access'\n }\n\n async can(action: string): Promise<boolean> {\n // Check if we have a cached result\n if (this.cache.has(action)) {\n return this.cache.get(action) as boolean\n }\n\n try {\n const response = await this.axios.get(this.endpoint, {\n params: { action }\n })\n\n const allowed = response.data.allowed || false\n\n // Cache the result\n this.cache.set(action, allowed)\n\n return allowed\n } catch (error) {\n console.error(`Error checking permission for ${action}:`, error)\n return false\n }\n }\n\n clearCache(action?: string): void {\n if (action) {\n this.cache.delete(action)\n } else {\n this.cache.clear()\n }\n }\n} ","import { App, inject, InjectionKey } from 'vue'\nimport { PermissionsService, PermissionsOptions } from './services/permissionsService'\n\nexport const PermissionsKey: InjectionKey<PermissionsService> = Symbol('Permissions')\n\nexport function setupPermissions(options?: PermissionsOptions): PermissionsService {\n return new PermissionsService(options)\n}\n\nexport const PermissionsPlugin = {\n install(app: App, options?: PermissionsOptions) {\n const permissionsService = setupPermissions(options)\n app.provide(PermissionsKey, permissionsService)\n }\n}\n\nexport function usePermissionsService(): PermissionsService {\n const permissionsService = inject(PermissionsKey)\n if (!permissionsService) {\n throw new Error('Permissions plugin not installed!')\n }\n return permissionsService\n} ","import { ref, computed, Ref, watch, onUnmounted } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\nexport interface UsePermissionsOptions {\n autoCheck?: boolean\n}\n\nexport function usePermissions(action: string | Ref<string>, options: UsePermissionsOptions = {}) {\n const permissionsService = usePermissionsService()\n const isAllowed = ref<boolean | null>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n const actionValue = computed(() => {\n return typeof action === 'string' ? action : action.value\n })\n\n const checkPermission = async () => {\n if (!actionValue.value) return\n\n isLoading.value = true\n error.value = null\n\n try {\n isAllowed.value = await permissionsService.can(actionValue.value)\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err))\n isAllowed.value = false\n } finally {\n isLoading.value = false\n }\n }\n\n // Auto-check on mount if requested\n if (options.autoCheck !== false) {\n checkPermission()\n }\n\n // Re-check when action changes\n if (typeof action !== 'string') {\n const unwatch = watch(action, () => {\n checkPermission()\n })\n\n onUnmounted(() => {\n unwatch()\n })\n }\n\n return {\n isAllowed,\n isLoading,\n error,\n check: checkPermission,\n can: computed(() => isAllowed.value === true)\n }\n} ","<template>\n <slot v-if=\"can\" />\n <slot name=\"fallback\" v-else-if=\"!isLoading\" />\n <slot name=\"loading\" v-else />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, toRefs, PropType } from 'vue';\nimport { usePermissions } from '../composables/usePermissions';\n\nexport default defineComponent({\n name: 'Check',\n props: {\n action: {\n type: String as PropType<string>,\n required: true\n },\n fallback: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const { action } = toRefs(props);\n const { can, isLoading } = usePermissions(action, { autoCheck: true });\n\n return {\n can,\n isLoading\n };\n }\n});\n</script> ","import { ObjectDirective, DirectiveBinding } from 'vue'\nimport { usePermissionsService } from '../plugin'\nimport { PermissionsService } from '../services/permissionsService'\n\ninterface CanHTMLElement extends HTMLElement {\n _permission_data?: {\n action: string\n originalDisplay: string\n permissionChecked?: boolean\n }\n}\n\n// Задержка для ожидания инициализации плагина\nconst waitForPermissionsService = async (maxAttempts = 5, delay = 100): Promise<PermissionsService | null> => {\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n try {\n return usePermissionsService();\n } catch (error) {\n attempts++;\n // Если достигли максимального количества попыток, вернуть null\n if (attempts >= maxAttempts) {\n console.warn('Could not get PermissionsService after multiple attempts');\n return null;\n }\n // Ждем перед следующей попыткой\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n return null;\n};\n\nexport const vCan: ObjectDirective = {\n async mounted(el: CanHTMLElement, binding: DirectiveBinding) {\n // Store original display value\n const originalDisplay = el.style.display\n\n // Store action and original display for updates\n el._permission_data = {\n action: binding.value,\n originalDisplay,\n permissionChecked: false\n }\n\n try {\n const permissionsService = await waitForPermissionsService();\n\n if (permissionsService) {\n const hasPermission = await permissionsService.can(binding.value);\n\n if (!hasPermission) {\n el.style.display = 'none';\n }\n\n el._permission_data.permissionChecked = true;\n } else {\n // Если не удалось получить сервис, по умолчанию показываем элемент\n console.warn(`Permission check failed for action: ${binding.value}`);\n }\n } catch (error) {\n console.error('Error checking permission:', error);\n }\n },\n\n async updated(el: CanHTMLElement, binding: DirectiveBinding) {\n if (!el._permission_data || el._permission_data.action !== binding.value) {\n // Action has changed or directive is new\n const originalDisplay = el._permission_data?.originalDisplay || el.style.display || '';\n\n el._permission_data = {\n action: binding.value,\n originalDisplay,\n permissionChecked: false\n }\n\n try {\n const permissionsService = await waitForPermissionsService();\n\n if (permissionsService) {\n const hasPermission = await permissionsService.can(binding.value);\n\n if (!hasPermission) {\n el.style.display = 'none';\n } else {\n el.style.display = el._permission_data.originalDisplay;\n }\n\n el._permission_data.permissionChecked = true;\n }\n } catch (error) {\n console.error('Error checking permission:', error);\n }\n }\n },\n\n unmounted(el: CanHTMLElement) {\n if (el._permission_data) {\n el.style.display = el._permission_data.originalDisplay;\n delete el._permission_data;\n }\n }\n} ","import { App } from 'vue'\nimport Check from './components/Check.vue'\nimport { usePermissions } from './composables/usePermissions'\nimport { PermissionsPlugin, setupPermissions, usePermissionsService } from './plugin'\nimport { vCan } from './directives/vCan'\n\n// Именованные экспорты\nexport {\n Check,\n usePermissions,\n setupPermissions,\n vCan,\n usePermissionsService\n}\n\n// Создаем основной объект плагина\nconst plugin = {\n install(app: App, options?: { baseUrl?: string }) {\n // Важно: сначала нужно инициализировать PermissionsPlugin для provide/inject механизма\n app.use(PermissionsPlugin, options)\n\n // Затем регистрируем компонент и директиву\n app.component('Check', Check)\n app.directive('can', vCan)\n }\n}\n\n// Экспортируем плагин как по умолчанию\nexport default plugin "],"names":["PermissionsService","options","__publicField","axios","action","allowed","error","PermissionsKey","setupPermissions","PermissionsPlugin","app","permissionsService","usePermissionsService","inject","usePermissions","isAllowed","ref","isLoading","actionValue","computed","checkPermission","err","unwatch","watch","onUnmounted","_sfc_main","defineComponent","props","toRefs","can","_ctx","_renderSlot","waitForPermissionsService","maxAttempts","delay","attempts","resolve","vCan","el","binding","originalDisplay","_a","plugin","Check"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(n,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("axios")):typeof define=="function"&&define.amd?define(["exports","vue","axios"],i):(n=typeof globalThis<"u"?globalThis:n||self,i(n.LocatorArsLib={},n.Vue,n.axios))})(this,function(n,i,o){"use strict";var $=Object.defineProperty;var L=(n,i,o)=>i in n?$(n,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[i]=o;var d=(n,i,o)=>L(n,typeof i!="symbol"?i+"":i,o);class P{constructor(s){d(this,"axios");d(this,"cache",new Map);d(this,"endpoint");this.axios=o.create({baseURL:(s==null?void 0:s.baseUrl)||""}),this.endpoint=(s==null?void 0:s.endpoint)||"/api/v1/dashboard/access"}async can(s){if(this.cache.has(s))return this.cache.get(s);try{const a=(await this.axios.get(this.endpoint,{params:{action:s}})).data.allowed||!1;return this.cache.set(s,a),a}catch(r){return console.error(`Error checking permission for ${s}:`,r),!1}}clearCache(s){s?this.cache.delete(s):this.cache.clear()}}const p=Symbol("Permissions");function m(e){return new P(e)}const S={install(e,s){const r=m(s);e.provide(p,r)}};function l(){const e=i.inject(p);if(!e)throw new Error("Permissions plugin not installed!");return e}function h(e,s={}){const r=l(),a=i.ref(null),t=i.ref(!1),u=i.ref(null),_=i.computed(()=>typeof e=="string"?e:e.value),f=async()=>{if(_.value){t.value=!0,u.value=null;try{a.value=await r.can(_.value)}catch(c){u.value=c instanceof Error?c:new Error(String(c)),a.value=!1}finally{t.value=!1}}};if(s.autoCheck!==!1&&f(),typeof e!="string"){const c=i.watch(e,()=>{f()});i.onUnmounted(()=>{c()})}return{isAllowed:a,isLoading:t,error:u,check:f,can:i.computed(()=>a.value===!0)}}const g=i.defineComponent({name:"Check",props:{action:{type:String,required:!0},fallback:{type:Boolean,default:!1}},setup(e){const{action:s}=i.toRefs(e),{can:r,isLoading:a}=h(s,{autoCheck:!0});return{can:r,isLoading:a}}}),k=(e,s)=>{const r=e.__vccOpts||e;for(const[a,t]of s)r[a]=t;return r};function w(e,s,r,a,t,u){return e.can?i.renderSlot(e.$slots,"default",{key:0}):e.isLoading?i.renderSlot(e.$slots,"loading",{key:2}):i.renderSlot(e.$slots,"fallback",{key:1})}const y=k(g,[["render",w]]),v={async mounted(e,s){const r=e.style.display;e._permission_data={action:s.value,originalDisplay:r},await l().can(s.value)||(e.style.display="none")},async updated(e,s){(!e._permission_data||e._permission_data.action!==s.value)&&(e._permission_data={action:s.value,originalDisplay:e.style.display||""},await l().can(s.value)?e.style.display=e._permission_data.originalDisplay:e.style.display="none")},unmounted(e){e._permission_data&&(e.style.display=e._permission_data.originalDisplay,delete e._permission_data)}},C={install(e,s){e.use(S,s),e.component("Check",y),e.directive("can",v)}};n.Check=y,n.default=C,n.setupPermissions=m,n.usePermissions=h,n.usePermissionsService=l,n.vCan=v,Object.defineProperties(n,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(a,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("axios")):typeof define=="function"&&define.amd?define(["exports","vue","axios"],i):(a=typeof globalThis<"u"?globalThis:a||self,i(a.LocatorArsLib={},a.Vue,a.axios))})(this,function(a,i,o){"use strict";var E=Object.defineProperty;var L=(a,i,o)=>i in a?E(a,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[i]=o;var u=(a,i,o)=>L(a,typeof i!="symbol"?i+"":i,o);class w{constructor(s){u(this,"axios");u(this,"cache",new Map);u(this,"endpoint");this.axios=o.create({baseURL:(s==null?void 0:s.baseUrl)||""}),this.endpoint=(s==null?void 0:s.endpoint)||"/api/v1/dashboard/access"}async can(s){if(this.cache.has(s))return this.cache.get(s);try{const n=(await this.axios.get(this.endpoint,{params:{action:s}})).data.allowed||!1;return this.cache.set(s,n),n}catch(r){return console.error(`Error checking permission for ${s}:`,r),!1}}clearCache(s){s?this.cache.delete(s):this.cache.clear()}}const m=Symbol("Permissions");function p(e){return new w(e)}const P={install(e,s){const r=p(s);e.provide(m,r)}};function d(){const e=i.inject(m);if(!e)throw new Error("Permissions plugin not installed!");return e}function h(e,s={}){const r=d(),n=i.ref(null),t=i.ref(!1),c=i.ref(null),k=i.computed(()=>typeof e=="string"?e:e.value),f=async()=>{if(k.value){t.value=!0,c.value=null;try{n.value=await r.can(k.value)}catch(l){c.value=l instanceof Error?l:new Error(String(l)),n.value=!1}finally{t.value=!1}}};if(s.autoCheck!==!1&&f(),typeof e!="string"){const l=i.watch(e,()=>{f()});i.onUnmounted(()=>{l()})}return{isAllowed:n,isLoading:t,error:c,check:f,can:i.computed(()=>n.value===!0)}}const g=i.defineComponent({name:"Check",props:{action:{type:String,required:!0},fallback:{type:Boolean,default:!1}},setup(e){const{action:s}=i.toRefs(e),{can:r,isLoading:n}=h(s,{autoCheck:!0});return{can:r,isLoading:n}}}),S=(e,s)=>{const r=e.__vccOpts||e;for(const[n,t]of s)r[n]=t;return r};function C(e,s,r,n,t,c){return e.can?i.renderSlot(e.$slots,"default",{key:0}):e.isLoading?i.renderSlot(e.$slots,"loading",{key:2}):i.renderSlot(e.$slots,"fallback",{key:1})}const y=S(g,[["render",C]]),_=async(e=5,s=100)=>{let r=0;for(;r<e;)try{return d()}catch{if(r++,r>=e)return console.warn("Could not get PermissionsService after multiple attempts"),null;await new Promise(t=>setTimeout(t,s))}return null},v={async mounted(e,s){const r=e.style.display;e._permission_data={action:s.value,originalDisplay:r,permissionChecked:!1};try{const n=await _();n?(await n.can(s.value)||(e.style.display="none"),e._permission_data.permissionChecked=!0):console.warn(`Permission check failed for action: ${s.value}`)}catch(n){console.error("Error checking permission:",n)}},async updated(e,s){var r;if(!e._permission_data||e._permission_data.action!==s.value){const n=((r=e._permission_data)==null?void 0:r.originalDisplay)||e.style.display||"";e._permission_data={action:s.value,originalDisplay:n,permissionChecked:!1};try{const t=await _();t&&(await t.can(s.value)?e.style.display=e._permission_data.originalDisplay:e.style.display="none",e._permission_data.permissionChecked=!0)}catch(t){console.error("Error checking permission:",t)}}},unmounted(e){e._permission_data&&(e.style.display=e._permission_data.originalDisplay,delete e._permission_data)}},$={install(e,s){e.use(P,s),e.component("Check",y),e.directive("can",v)}};a.Check=y,a.default=$,a.setupPermissions=p,a.usePermissions=h,a.usePermissionsService=d,a.vCan=v,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
2
  //# sourceMappingURL=locator-ars-lib.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locator-ars-lib.umd.js","sources":["../src/services/permissionsService.ts","../src/plugin.ts","../src/composables/usePermissions.ts","../src/components/Check.vue","../src/directives/vCan.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nexport interface PermissionsOptions {\n baseUrl?: string\n endpoint?: string\n}\n\nexport class PermissionsService {\n private axios: AxiosInstance\n private cache: Map<string, boolean> = new Map()\n private endpoint: string\n\n constructor(options?: PermissionsOptions) {\n this.axios = axios.create({\n baseURL: options?.baseUrl || ''\n })\n this.endpoint = options?.endpoint || '/api/v1/dashboard/access'\n }\n\n async can(action: string): Promise<boolean> {\n // Check if we have a cached result\n if (this.cache.has(action)) {\n return this.cache.get(action) as boolean\n }\n\n try {\n const response = await this.axios.get(this.endpoint, {\n params: { action }\n })\n\n const allowed = response.data.allowed || false\n\n // Cache the result\n this.cache.set(action, allowed)\n\n return allowed\n } catch (error) {\n console.error(`Error checking permission for ${action}:`, error)\n return false\n }\n }\n\n clearCache(action?: string): void {\n if (action) {\n this.cache.delete(action)\n } else {\n this.cache.clear()\n }\n }\n} ","import { App, inject, InjectionKey } from 'vue'\nimport { PermissionsService, PermissionsOptions } from './services/permissionsService'\n\nexport const PermissionsKey: InjectionKey<PermissionsService> = Symbol('Permissions')\n\nexport function setupPermissions(options?: PermissionsOptions): PermissionsService {\n return new PermissionsService(options)\n}\n\nexport const PermissionsPlugin = {\n install(app: App, options?: PermissionsOptions) {\n const permissionsService = setupPermissions(options)\n app.provide(PermissionsKey, permissionsService)\n }\n}\n\nexport function usePermissionsService(): PermissionsService {\n const permissionsService = inject(PermissionsKey)\n if (!permissionsService) {\n throw new Error('Permissions plugin not installed!')\n }\n return permissionsService\n} ","import { ref, computed, Ref, watch, onUnmounted } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\nexport interface UsePermissionsOptions {\n autoCheck?: boolean\n}\n\nexport function usePermissions(action: string | Ref<string>, options: UsePermissionsOptions = {}) {\n const permissionsService = usePermissionsService()\n const isAllowed = ref<boolean | null>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n const actionValue = computed(() => {\n return typeof action === 'string' ? action : action.value\n })\n\n const checkPermission = async () => {\n if (!actionValue.value) return\n\n isLoading.value = true\n error.value = null\n\n try {\n isAllowed.value = await permissionsService.can(actionValue.value)\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err))\n isAllowed.value = false\n } finally {\n isLoading.value = false\n }\n }\n\n // Auto-check on mount if requested\n if (options.autoCheck !== false) {\n checkPermission()\n }\n\n // Re-check when action changes\n if (typeof action !== 'string') {\n const unwatch = watch(action, () => {\n checkPermission()\n })\n\n onUnmounted(() => {\n unwatch()\n })\n }\n\n return {\n isAllowed,\n isLoading,\n error,\n check: checkPermission,\n can: computed(() => isAllowed.value === true)\n }\n} ","<template>\n <slot v-if=\"can\" />\n <slot name=\"fallback\" v-else-if=\"!isLoading\" />\n <slot name=\"loading\" v-else />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, toRefs, PropType } from 'vue';\nimport { usePermissions } from '../composables/usePermissions';\n\nexport default defineComponent({\n name: 'Check',\n props: {\n action: {\n type: String as PropType<string>,\n required: true\n },\n fallback: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const { action } = toRefs(props);\n const { can, isLoading } = usePermissions(action, { autoCheck: true });\n\n return {\n can,\n isLoading\n };\n }\n});\n</script> ","import { ObjectDirective, DirectiveBinding } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\ninterface CanHTMLElement extends HTMLElement {\n _permission_data?: {\n action: string\n originalDisplay: string\n }\n}\n\nexport const vCan: ObjectDirective = {\n async mounted(el: CanHTMLElement, binding: DirectiveBinding) {\n // Store original display value\n const originalDisplay = el.style.display\n\n // Store action and original display for updates\n el._permission_data = {\n action: binding.value,\n originalDisplay\n }\n\n const permissionsService = usePermissionsService()\n const hasPermission = await permissionsService.can(binding.value)\n\n if (!hasPermission) {\n el.style.display = 'none'\n }\n },\n\n async updated(el: CanHTMLElement, binding: DirectiveBinding) {\n if (!el._permission_data || el._permission_data.action !== binding.value) {\n // Action has changed or directive is new\n el._permission_data = {\n action: binding.value,\n originalDisplay: el.style.display || ''\n }\n\n const permissionsService = usePermissionsService()\n const hasPermission = await permissionsService.can(binding.value)\n\n if (!hasPermission) {\n el.style.display = 'none'\n } else {\n el.style.display = el._permission_data.originalDisplay\n }\n }\n },\n\n unmounted(el: CanHTMLElement) {\n if (el._permission_data) {\n el.style.display = el._permission_data.originalDisplay\n delete el._permission_data\n }\n }\n} ","import { App } from 'vue'\nimport Check from './components/Check.vue'\nimport { usePermissions } from './composables/usePermissions'\nimport { PermissionsPlugin, setupPermissions, usePermissionsService } from './plugin'\nimport { vCan } from './directives/vCan'\n\n// Именованные экспорты\nexport {\n Check,\n usePermissions,\n setupPermissions,\n vCan,\n usePermissionsService\n}\n\n// Создаем основной объект плагина\nconst plugin = {\n install(app: App, options?: { baseUrl?: string }) {\n app.use(PermissionsPlugin, options)\n app.component('Check', Check)\n app.directive('can', vCan)\n }\n}\n\n// Экспортируем плагин как по умолчанию\nexport default plugin "],"names":["PermissionsService","options","__publicField","axios","action","allowed","error","PermissionsKey","setupPermissions","PermissionsPlugin","app","permissionsService","usePermissionsService","inject","usePermissions","isAllowed","ref","isLoading","actionValue","computed","checkPermission","err","unwatch","watch","onUnmounted","_sfc_main","defineComponent","props","toRefs","can","_ctx","_renderSlot","vCan","el","binding","originalDisplay","plugin","Check"],"mappings":"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"}
1
+ {"version":3,"file":"locator-ars-lib.umd.js","sources":["../src/services/permissionsService.ts","../src/plugin.ts","../src/composables/usePermissions.ts","../src/components/Check.vue","../src/directives/vCan.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nexport interface PermissionsOptions {\n baseUrl?: string\n endpoint?: string\n}\n\nexport class PermissionsService {\n private axios: AxiosInstance\n private cache: Map<string, boolean> = new Map()\n private endpoint: string\n\n constructor(options?: PermissionsOptions) {\n this.axios = axios.create({\n baseURL: options?.baseUrl || ''\n })\n this.endpoint = options?.endpoint || '/api/v1/dashboard/access'\n }\n\n async can(action: string): Promise<boolean> {\n // Check if we have a cached result\n if (this.cache.has(action)) {\n return this.cache.get(action) as boolean\n }\n\n try {\n const response = await this.axios.get(this.endpoint, {\n params: { action }\n })\n\n const allowed = response.data.allowed || false\n\n // Cache the result\n this.cache.set(action, allowed)\n\n return allowed\n } catch (error) {\n console.error(`Error checking permission for ${action}:`, error)\n return false\n }\n }\n\n clearCache(action?: string): void {\n if (action) {\n this.cache.delete(action)\n } else {\n this.cache.clear()\n }\n }\n} ","import { App, inject, InjectionKey } from 'vue'\nimport { PermissionsService, PermissionsOptions } from './services/permissionsService'\n\nexport const PermissionsKey: InjectionKey<PermissionsService> = Symbol('Permissions')\n\nexport function setupPermissions(options?: PermissionsOptions): PermissionsService {\n return new PermissionsService(options)\n}\n\nexport const PermissionsPlugin = {\n install(app: App, options?: PermissionsOptions) {\n const permissionsService = setupPermissions(options)\n app.provide(PermissionsKey, permissionsService)\n }\n}\n\nexport function usePermissionsService(): PermissionsService {\n const permissionsService = inject(PermissionsKey)\n if (!permissionsService) {\n throw new Error('Permissions plugin not installed!')\n }\n return permissionsService\n} ","import { ref, computed, Ref, watch, onUnmounted } from 'vue'\nimport { usePermissionsService } from '../plugin'\n\nexport interface UsePermissionsOptions {\n autoCheck?: boolean\n}\n\nexport function usePermissions(action: string | Ref<string>, options: UsePermissionsOptions = {}) {\n const permissionsService = usePermissionsService()\n const isAllowed = ref<boolean | null>(null)\n const isLoading = ref(false)\n const error = ref<Error | null>(null)\n\n const actionValue = computed(() => {\n return typeof action === 'string' ? action : action.value\n })\n\n const checkPermission = async () => {\n if (!actionValue.value) return\n\n isLoading.value = true\n error.value = null\n\n try {\n isAllowed.value = await permissionsService.can(actionValue.value)\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err))\n isAllowed.value = false\n } finally {\n isLoading.value = false\n }\n }\n\n // Auto-check on mount if requested\n if (options.autoCheck !== false) {\n checkPermission()\n }\n\n // Re-check when action changes\n if (typeof action !== 'string') {\n const unwatch = watch(action, () => {\n checkPermission()\n })\n\n onUnmounted(() => {\n unwatch()\n })\n }\n\n return {\n isAllowed,\n isLoading,\n error,\n check: checkPermission,\n can: computed(() => isAllowed.value === true)\n }\n} ","<template>\n <slot v-if=\"can\" />\n <slot name=\"fallback\" v-else-if=\"!isLoading\" />\n <slot name=\"loading\" v-else />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, toRefs, PropType } from 'vue';\nimport { usePermissions } from '../composables/usePermissions';\n\nexport default defineComponent({\n name: 'Check',\n props: {\n action: {\n type: String as PropType<string>,\n required: true\n },\n fallback: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const { action } = toRefs(props);\n const { can, isLoading } = usePermissions(action, { autoCheck: true });\n\n return {\n can,\n isLoading\n };\n }\n});\n</script> ","import { ObjectDirective, DirectiveBinding } from 'vue'\nimport { usePermissionsService } from '../plugin'\nimport { PermissionsService } from '../services/permissionsService'\n\ninterface CanHTMLElement extends HTMLElement {\n _permission_data?: {\n action: string\n originalDisplay: string\n permissionChecked?: boolean\n }\n}\n\n// Задержка для ожидания инициализации плагина\nconst waitForPermissionsService = async (maxAttempts = 5, delay = 100): Promise<PermissionsService | null> => {\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n try {\n return usePermissionsService();\n } catch (error) {\n attempts++;\n // Если достигли максимального количества попыток, вернуть null\n if (attempts >= maxAttempts) {\n console.warn('Could not get PermissionsService after multiple attempts');\n return null;\n }\n // Ждем перед следующей попыткой\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n return null;\n};\n\nexport const vCan: ObjectDirective = {\n async mounted(el: CanHTMLElement, binding: DirectiveBinding) {\n // Store original display value\n const originalDisplay = el.style.display\n\n // Store action and original display for updates\n el._permission_data = {\n action: binding.value,\n originalDisplay,\n permissionChecked: false\n }\n\n try {\n const permissionsService = await waitForPermissionsService();\n\n if (permissionsService) {\n const hasPermission = await permissionsService.can(binding.value);\n\n if (!hasPermission) {\n el.style.display = 'none';\n }\n\n el._permission_data.permissionChecked = true;\n } else {\n // Если не удалось получить сервис, по умолчанию показываем элемент\n console.warn(`Permission check failed for action: ${binding.value}`);\n }\n } catch (error) {\n console.error('Error checking permission:', error);\n }\n },\n\n async updated(el: CanHTMLElement, binding: DirectiveBinding) {\n if (!el._permission_data || el._permission_data.action !== binding.value) {\n // Action has changed or directive is new\n const originalDisplay = el._permission_data?.originalDisplay || el.style.display || '';\n\n el._permission_data = {\n action: binding.value,\n originalDisplay,\n permissionChecked: false\n }\n\n try {\n const permissionsService = await waitForPermissionsService();\n\n if (permissionsService) {\n const hasPermission = await permissionsService.can(binding.value);\n\n if (!hasPermission) {\n el.style.display = 'none';\n } else {\n el.style.display = el._permission_data.originalDisplay;\n }\n\n el._permission_data.permissionChecked = true;\n }\n } catch (error) {\n console.error('Error checking permission:', error);\n }\n }\n },\n\n unmounted(el: CanHTMLElement) {\n if (el._permission_data) {\n el.style.display = el._permission_data.originalDisplay;\n delete el._permission_data;\n }\n }\n} ","import { App } from 'vue'\nimport Check from './components/Check.vue'\nimport { usePermissions } from './composables/usePermissions'\nimport { PermissionsPlugin, setupPermissions, usePermissionsService } from './plugin'\nimport { vCan } from './directives/vCan'\n\n// Именованные экспорты\nexport {\n Check,\n usePermissions,\n setupPermissions,\n vCan,\n usePermissionsService\n}\n\n// Создаем основной объект плагина\nconst plugin = {\n install(app: App, options?: { baseUrl?: string }) {\n // Важно: сначала нужно инициализировать PermissionsPlugin для provide/inject механизма\n app.use(PermissionsPlugin, options)\n\n // Затем регистрируем компонент и директиву\n app.component('Check', Check)\n app.directive('can', vCan)\n }\n}\n\n// Экспортируем плагин как по умолчанию\nexport default plugin "],"names":["PermissionsService","options","__publicField","axios","action","allowed","error","PermissionsKey","setupPermissions","PermissionsPlugin","app","permissionsService","usePermissionsService","inject","usePermissions","isAllowed","ref","isLoading","actionValue","computed","checkPermission","err","unwatch","watch","onUnmounted","_sfc_main","defineComponent","props","toRefs","can","_ctx","_renderSlot","waitForPermissionsService","maxAttempts","delay","attempts","resolve","vCan","el","binding","originalDisplay","_a","plugin","Check"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "locator-ars-lib",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Permissions library for Vue 3 applications",
5
5
  "type": "module",
6
6
  "main": "./dist/locator-ars-lib.umd.js",