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.44 kB
Source Map (JSON)
{"version":3,"file":"module.mjs","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","defineNuxtModule","options","nuxt","resolver","createResolver","addPlugin","addImports","defu"],"mappings":";;;AAeA,MAAAA,IAAeC,EAAgC;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,UAAU;AAAA,IACR,aAAa,CAAA;AAAA,IACb,iBAAiB;AAAA,IACjB,SAAS;AAAA,EAAA;AAAA,EAGX,MAAMC,GAASC,GAAM;AAEnB,QAAID,EAAQ,eAAe,CAAC,MAAM,QAAQA,EAAQ,WAAW;AAC3D,YAAM,IAAI,UAAU,oDAAoD;AAG1E,QACEA,EAAQ,oBACR,OAAOA,EAAQ,oBAAqB,YACpC,OAAOA,EAAQ,oBAAqB;AAEpC,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAIJ,UAAME,IAAWC,EAAe,YAAY,GAAG;AAG/C,IAAAC,EAAUF,EAAS,QAAQ,kBAAkB,CAAC,GAG9CG,EAAW;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,CACP,GAGDJ,EAAK,QAAQ,cAAc,OAAO,aAAaK;AAAA,MAC7CL,EAAK,QAAQ,cAAc,OAAO;AAAA,MAClC;AAAA,QACE,aAAaD,EAAQ;AAAA,QACrB,iBAAiBA,EAAQ;AAAA,QACzB,SAASA,EAAQ;AAAA;AAAA,QAEjB,kBACE,OAAOA,EAAQ,oBAAqB,WAChCA,EAAQ,mBACR;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AACF,CAAC;"}