vue-nuxt-permission
Version:
A unified permission system for Vue 3 and Nuxt 3 / Nuxt 4 with directives, guards, and async support.
1 lines • 3.29 kB
Source Map (JSON)
{"version":3,"file":"module.cjs","sources":["../src/module.ts"],"sourcesContent":["import {\r\n addImports,\r\n addPlugin,\r\n createResolver,\r\n defineNuxtModule,\r\n} from \"@nuxt/kit\";\r\nimport { defu } from \"defu\";\r\n\r\nexport interface ModuleOptions {\r\n permissions?: string[];\r\n developmentMode?: boolean;\r\n fetchPermissions?: string | (() => Promise<string[]>);\r\n persist?: boolean;\r\n}\r\n\r\nexport default defineNuxtModule<ModuleOptions>({\r\n meta: {\r\n name: \"vue-nuxt-permission\",\r\n configKey: \"permission\",\r\n compatibility: {\r\n // Supports Nuxt 3.x and Nuxt 4.x.\r\n // The module uses only stable @nuxt/kit APIs (addPlugin, addImports,\r\n // runtimeConfig) and the runtime plugin uses defineNuxtPlugin from\r\n // #app — both unchanged in Nuxt 4.\r\n nuxt: \">=3.0.0\",\r\n },\r\n },\r\n\r\n defaults: {\r\n permissions: [],\r\n developmentMode: false,\r\n persist: true,\r\n },\r\n\r\n setup(options, nuxt) {\r\n // Validate options early\r\n if (options.permissions && !Array.isArray(options.permissions)) {\r\n throw new TypeError(\"[vue-nuxt-permission] permissions must be an array\");\r\n }\r\n\r\n if (\r\n options.fetchPermissions &&\r\n typeof options.fetchPermissions !== \"string\" &&\r\n typeof options.fetchPermissions !== \"function\"\r\n ) {\r\n throw new TypeError(\r\n \"[vue-nuxt-permission] fetchPermissions must be a URL string or async function\",\r\n );\r\n }\r\n\r\n const resolver = createResolver(import.meta.url);\r\n\r\n // Register runtime plugin\r\n addPlugin(resolver.resolve(\"./runtime/plugin\"));\r\n\r\n // Auto-import usePermission composable\r\n addImports({\r\n name: \"usePermission\",\r\n from: \"vue-nuxt-permission\",\r\n });\r\n\r\n // Expose options to runtime via runtimeConfig (merge, don't overwrite)\r\n nuxt.options.runtimeConfig.public.permission = defu(\r\n nuxt.options.runtimeConfig.public.permission as Record<string, unknown>,\r\n {\r\n permissions: options.permissions,\r\n developmentMode: options.developmentMode,\r\n persist: options.persist,\r\n // Functions can't be serialized to runtimeConfig — only pass URL strings\r\n fetchPermissions:\r\n typeof options.fetchPermissions === \"string\"\r\n ? options.fetchPermissions\r\n : undefined,\r\n },\r\n );\r\n },\r\n});\r\n"],"names":["module$1","defineNuxtModule","options","nuxt","resolver","createResolver","addPlugin","addImports","defu"],"mappings":"4LAeA,MAAAA,EAAeC,mBAAgC,CAC7C,KAAM,CACJ,KAAM,sBACN,UAAW,aACX,cAAe,CAKb,KAAM,SAAA,CACR,EAGF,SAAU,CACR,YAAa,CAAA,EACb,gBAAiB,GACjB,QAAS,EAAA,EAGX,MAAMC,EAASC,EAAM,CAEnB,GAAID,EAAQ,aAAe,CAAC,MAAM,QAAQA,EAAQ,WAAW,EAC3D,MAAM,IAAI,UAAU,oDAAoD,EAG1E,GACEA,EAAQ,kBACR,OAAOA,EAAQ,kBAAqB,UACpC,OAAOA,EAAQ,kBAAqB,WAEpC,MAAM,IAAI,UACR,+EAAA,EAIJ,MAAME,EAAWC,EAAAA,0KAA8B,EAG/CC,EAAAA,UAAUF,EAAS,QAAQ,kBAAkB,CAAC,EAG9CG,aAAW,CACT,KAAM,gBACN,KAAM,qBAAA,CACP,EAGDJ,EAAK,QAAQ,cAAc,OAAO,WAAaK,EAAAA,KAC7CL,EAAK,QAAQ,cAAc,OAAO,WAClC,CACE,YAAaD,EAAQ,YACrB,gBAAiBA,EAAQ,gBACzB,QAASA,EAAQ,QAEjB,iBACE,OAAOA,EAAQ,kBAAqB,SAChCA,EAAQ,iBACR,MAAA,CACR,CAEJ,CACF,CAAC"}