{"version":3,"file":"index.cjs","sources":["../src/core/config.ts","../src/core/cache.ts","../src/core/evaluator.ts","../src/utils/storage.ts","../src/utils/helpers.ts","../src/utils/debug.ts","../src/directives/v-permission.ts","../src/plugin.ts","../src/guards/globalGuard.ts"],"sourcesContent":["import { isRef, type Ref } from \"vue\";\r\nimport type { PermissionsArray } from \"../types\";\r\n\r\nexport interface GlobalConfig {\r\n  permissions: PermissionsArray | null;\r\n  developmentMode: boolean;\r\n}\r\n\r\nconst globalConfig: GlobalConfig = {\r\n  permissions: null,\r\n  developmentMode: false,\r\n};\r\n\r\nexport const configurePermission = (\r\n  permissions: PermissionsArray,\r\n  options?: { developmentMode?: boolean }\r\n) => {\r\n  globalConfig.permissions = permissions;\r\n  globalConfig.developmentMode = options?.developmentMode ?? false;\r\n};\r\n\r\nexport const getCurrentPermissions = (): string[] => {\r\n  const { permissions } = globalConfig;\r\n  if (!permissions) return [];\r\n\r\n  if (isRef(permissions)) return permissions.value;\r\n  return permissions;\r\n};\r\n\r\nexport const isDevMode = () => globalConfig.developmentMode;\r\n\r\nexport default globalConfig;\r\n","const permissionCache = new Map<string, boolean>();\r\n\r\nexport const getCachedPermission = (key: string) =>\r\n  permissionCache.has(key) ? permissionCache.get(key)! : null;\r\n\r\nexport const setCachedPermission = (key: string, value: boolean) =>\r\n  permissionCache.set(key, value);\r\n\r\nexport const clearPermissionCache = () => permissionCache.clear();\r\n","import { getCachedPermission, setCachedPermission } from \"@/core/cache\";\r\nimport { getCurrentPermissions, isDevMode } from \"./config\";\r\nimport type { PermissionValue } from \"../types\";\r\n\r\n/**\r\n * Main Permission Evaluator\r\n * --------------------------\r\n * Supports:\r\n * - \"*\" (universal access)\r\n * - string[]\r\n * - object { permissions, mode }\r\n * - async caching\r\n */\r\nexport const hasPermission = async (\r\n  permissionValue: PermissionValue,\r\n  userPermissions?: string[]\r\n): Promise<boolean> => {\r\n  const current = userPermissions ?? getCurrentPermissions();\r\n  const cacheKey = JSON.stringify({ permissionValue, current });\r\n  const cached = getCachedPermission(cacheKey);\r\n  if (cached !== null) return cached;\r\n\r\n  const log = (...args: any[]) => {\r\n    if (isDevMode()) console.log(\"[v-permission:core]\", ...args);\r\n  };\r\n\r\n  const evaluate = async (value: PermissionValue): Promise<boolean> => {\r\n    if (value === \"*\") return true;\r\n\r\n    if (typeof value === \"string\") return current.includes(value);\r\n    if (Array.isArray(value)) {\r\n      if (value.includes(\"*\")) return true;\r\n      return value.some((v) => current.includes(v));\r\n    }\r\n    if (typeof value === \"object\" && value.permissions && value.mode) {\r\n      const { permissions, mode } = value;\r\n\r\n      if (permissions.includes(\"*\")) return true;\r\n\r\n      const checks: Record<string, () => boolean> = {\r\n        and: () => permissions.every((p) => current.includes(p)),\r\n        or: () => permissions.some((p) => current.includes(p)),\r\n        not: () => !permissions.some((p) => current.includes(p)),\r\n        startWith: () =>\r\n          permissions.some((p) => current.some((u) => u.startsWith(p))),\r\n        endWith: () =>\r\n          permissions.some((p) => current.some((u) => u.endsWith(p))),\r\n        regex: () =>\r\n          permissions.some((p) => {\r\n            try {\r\n              const r = new RegExp(p);\r\n              return current.some((u) => r.test(u));\r\n            } catch (e) {\r\n              log(\"Invalid regex pattern:\", p, e);\r\n              return false;\r\n            }\r\n          }),\r\n      };\r\n\r\n      return checks[mode]?.() ?? false;\r\n    }\r\n\r\n    log(\"Invalid permission value:\", value);\r\n    return false;\r\n  };\r\n\r\n  const result = await evaluate(permissionValue);\r\n  setCachedPermission(cacheKey, result);\r\n  return result;\r\n};\r\n","const STORAGE_KEY = \"__v_permission__\";\r\n\r\nconst encrypt = (value: any): string => {\r\n  try {\r\n    return btoa(JSON.stringify(value));\r\n  } catch {\r\n    return \"\";\r\n  }\r\n};\r\n\r\nconst decrypt = (value: string): any => {\r\n  try {\r\n    return JSON.parse(atob(value));\r\n  } catch {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const savePermissionsToStorage = (permissions: any) => {\r\n  try {\r\n    localStorage.setItem(STORAGE_KEY, encrypt(permissions));\r\n  } catch (e) {\r\n    console.warn(\"[v-permission] Failed to save permissions to storage:\", e);\r\n  }\r\n};\r\n\r\nexport const getPermissionsFromStorage = () => {\r\n  try {\r\n    const stored = localStorage.getItem(STORAGE_KEY);\r\n    return stored ? decrypt(stored) : null;\r\n  } catch (e) {\r\n    console.warn(\"[v-permission] Failed to read permissions from storage:\", e);\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const clearPermissionsFromStorage = () => {\r\n  try {\r\n    localStorage.removeItem(STORAGE_KEY);\r\n  } catch (e) {\r\n    console.warn(\"[v-permission] Failed to clear permissions from storage:\", e);\r\n  }\r\n};\r\n","import {\r\n  configurePermission,\r\n  getCurrentPermissions,\r\n  clearPermissionCache,\r\n} from \"@/core\";\r\nimport { getPermissionsFromStorage, savePermissionsToStorage } from \"./storage\";\r\nimport type { PermissionsArray } from \"../types\";\r\n\r\nexport const initPermissionDirectiveIfNeeded = () => {\r\n  const stored = getPermissionsFromStorage();\r\n  if (stored) {\r\n    configurePermission(stored);\r\n  }\r\n};\r\n\r\nexport const refreshPermissions = (permissions: PermissionsArray) => {\r\n  clearPermissionCache();\r\n  configurePermission(permissions);\r\n  savePermissionsToStorage(permissions);\r\n};\r\n\r\nexport const logCurrentPermissions = () => {\r\n  console.log(\"[v-permission] Current Permissions:\", getCurrentPermissions());\r\n};\r\n","import { isDevMode } from \"@/core\";\r\n\r\nexport const logDebug = (...args: any[]) => {\r\n  if (isDevMode()) {\r\n    console.groupCollapsed(\"[v-permission:debug]\");\r\n    console.log(...args);\r\n    console.groupEnd();\r\n  }\r\n};\r\n","import type { DirectiveBinding } from \"vue\";\r\nimport { hasPermission } from \"@/core/evaluator\";\r\nimport { logDebug } from \"@/utils/debug\";\r\n\r\n/**\r\n * v-permission directive\r\n * -----------------------\r\n * Usage:\r\n * <button v-permission=\"'admin'\">Admin Only</button>\r\n * <div v-permission:show.once=\"['editor','moderator']\">Visible only for editors</div>\r\n */\r\n\r\nexport const vPermission = {\r\n  async mounted(el: HTMLElement, binding: DirectiveBinding) {\r\n    const { value, modifiers, arg } = binding;\r\n\r\n    el._vPermissionOriginalDisplay = el.style.display;\r\n    const allowed = await hasPermission(value);\r\n\r\n    if (!allowed) {\r\n      if (arg === \"show\" || modifiers.show) {\r\n        el.style.display = \"none\";\r\n      } else {\r\n        el.remove();\r\n      }\r\n    }\r\n\r\n    if (modifiers.once) {\r\n      el._vPermissionSkipUpdates = true;\r\n    }\r\n\r\n    logDebug(\r\n      `Mounted v-permission => ${JSON.stringify(value)} : ${\r\n        allowed ? \"allowed\" : \"denied\"\r\n      }`\r\n    );\r\n  },\r\n\r\n  async updated(el: HTMLElement, binding: DirectiveBinding) {\r\n    const { value, oldValue, modifiers, arg } = binding;\r\n\r\n    if (el._vPermissionSkipUpdates) return;\r\n\r\n    if (modifiers.lazy && value === oldValue) return;\r\n\r\n    const allowed = await hasPermission(value);\r\n\r\n    if (allowed) {\r\n      el.style.display = el._vPermissionOriginalDisplay || \"\";\r\n    } else {\r\n      if (arg === \"show\" || modifiers.show) {\r\n        el.style.display = \"none\";\r\n      } else {\r\n        el.remove();\r\n      }\r\n    }\r\n\r\n    logDebug(\r\n      `Updated v-permission => ${JSON.stringify(value)} : ${\r\n        allowed ? \"allowed\" : \"denied\"\r\n      }`\r\n    );\r\n  },\r\n\r\n  unmounted(el: HTMLElement) {\r\n    delete el._vPermissionOriginalDisplay;\r\n    delete el._vPermissionSkipUpdates;\r\n  },\r\n};\r\n\r\nexport {};\r\n","import type { App } from \"vue\";\r\nimport type { PluginOptions, PermissionsArray } from \"@/types\";\r\nimport { vPermission } from \"@/directives/v-permission\";\r\nimport { configurePermission, clearPermissionCache } from \"@/core\";\r\nimport {\r\n  getPermissionsFromStorage,\r\n  savePermissionsToStorage,\r\n} from \"@/utils/storage\";\r\nimport { logDebug } from \"@/utils/debug\";\r\n\r\nexport default {\r\n  async install(app: App, options?: PluginOptions) {\r\n    let permissions: PermissionsArray = [];\r\n\r\n    try {\r\n      if (typeof options?.fetchPermissions === \"function\") {\r\n        logDebug(\"Fetching permissions from async source...\");\r\n        const fetched = await options.fetchPermissions();\r\n        if (Array.isArray(fetched)) {\r\n          permissions = fetched;\r\n          savePermissionsToStorage(fetched);\r\n        }\r\n      } else if (Array.isArray(options?.permissions)) {\r\n        permissions = options.permissions;\r\n        savePermissionsToStorage(permissions);\r\n      } else {\r\n        const stored = getPermissionsFromStorage();\r\n        if (stored) permissions = stored;\r\n      }\r\n    } catch (e) {\r\n      console.warn(\"[v-permission] Failed to initialize permissions:\", e);\r\n    }\r\n\r\n    clearPermissionCache();\r\n    configurePermission(permissions, {\r\n      developmentMode: options?.developmentMode,\r\n    });\r\n\r\n    app.directive(\"permission\", vPermission);\r\n\r\n    logDebug(\"Plugin initialized successfully with permissions:\", permissions);\r\n  },\r\n};\r\n\r\nexport {};\r\n","import { hasPermission } from \"@/core/evaluator\";\r\nimport { getCurrentPermissions } from \"@/core/config\";\r\nimport type { RouteLocationNormalized, NavigationGuardNext } from \"vue-router\";\r\nimport type { GuardOptions } from \"@/types\";\r\n\r\n/**\r\n * Global Permission Guard\r\n * ------------------------\r\n * A ready-to-use guard for Vue/Nuxt router.\r\n *\r\n * Example:\r\n * router.beforeEach(globalGuard({\r\n *   getAuthState: () => authStore.state,\r\n *   loginPath: '/login',\r\n *   homePath: '/'\r\n * }))\r\n */\r\nexport const globalGuard = async (\r\n  to: RouteLocationNormalized,\r\n  from: RouteLocationNormalized,\r\n  next: NavigationGuardNext,\r\n  options: GuardOptions = {}\r\n) => {\r\n  const {\r\n    authRoutes = [],\r\n    protectedRoutes = [],\r\n    getAuthState,\r\n    loginPath = \"/login\",\r\n    homePath = \"/\",\r\n    onDenied,\r\n    onAllowed,\r\n  } = options;\r\n\r\n  try {\r\n    const authState = getAuthState?.() ?? { isAuthenticated: false };\r\n    const isAuthenticated = authState.isAuthenticated;\r\n    const userPermissions = authState.permissions ?? getCurrentPermissions();\r\n\r\n    const isAuthRoute = authRoutes.some((r) => r.path === to.path);\r\n    const requiresAuth = to.meta?.requiresAuth ?? false;\r\n    const checkPermission = to.meta?.checkPermission ?? false;\r\n\r\n    if (!isAuthenticated && requiresAuth) {\r\n      onDenied?.(to, from);\r\n      return next(loginPath);\r\n    }\r\n\r\n    if (isAuthenticated && isAuthRoute) {\r\n      onAllowed?.(to, from);\r\n      return next(homePath);\r\n    }\r\n\r\n    if (checkPermission && to.meta?.permissions) {\r\n      const allowed = await hasPermission(to.meta.permissions, userPermissions);\r\n      if (!allowed) {\r\n        onDenied?.(to, from);\r\n        const fallback = await findAccessibleRoute(\r\n          protectedRoutes,\r\n          userPermissions\r\n        );\r\n        return next(fallback || loginPath);\r\n      }\r\n    }\r\n\r\n    onAllowed?.(to, from);\r\n    next();\r\n  } catch (e) {\r\n    console.error(\"[v-permission:globalGuard] Unexpected error:\", e);\r\n    next(loginPath);\r\n  }\r\n};\r\n\r\n/**\r\n * Helper to find the first accessible route from protectedRoutes\r\n */\r\nasync function findAccessibleRoute(\r\n  routes: any[],\r\n  userPermissions: string[],\r\n  basePath = \"\"\r\n): Promise<string | null> {\r\n  for (const route of routes) {\r\n    const fullPath = basePath + route.path;\r\n    const requiredPermissions = route.meta?.permissions ?? \"*\";\r\n\r\n    if (await hasPermission(requiredPermissions, userPermissions)) {\r\n      return fullPath;\r\n    }\r\n\r\n    if (route.children?.length) {\r\n      const child = await findAccessibleRoute(\r\n        route.children,\r\n        userPermissions,\r\n        fullPath\r\n      );\r\n      if (child) return child;\r\n    }\r\n  }\r\n  return null;\r\n}\r\n\r\nexport default globalGuard;\r\n"],"names":["globalConfig","configurePermission","permissions","options","getCurrentPermissions","isRef","isDevMode","permissionCache","getCachedPermission","key","setCachedPermission","value","clearPermissionCache","hasPermission","permissionValue","userPermissions","current","cacheKey","cached","log","args","result","v","mode","checks","p","u","r","e","_a","STORAGE_KEY","encrypt","decrypt","savePermissionsToStorage","getPermissionsFromStorage","stored","clearPermissionsFromStorage","initPermissionDirectiveIfNeeded","refreshPermissions","logCurrentPermissions","logDebug","vPermission","el","binding","modifiers","arg","allowed","oldValue","plugin","app","fetched","globalGuard","to","from","next","authRoutes","protectedRoutes","getAuthState","loginPath","homePath","onDenied","onAllowed","authState","isAuthenticated","isAuthRoute","requiresAuth","checkPermission","_b","_c","fallback","findAccessibleRoute","routes","basePath","route","fullPath","requiredPermissions","child"],"mappings":"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"}