UNPKG

@nuxtjs/hanko

Version:
100 lines (97 loc) 3.17 kB
import { defineNuxtModule, createResolver, addPlugin, addServerHandler, addRouteMiddleware, addImportsSources, addTemplate } from '@nuxt/kit'; import { defu } from 'defu'; const module$1 = defineNuxtModule({ meta: { name: "@nuxtjs/hanko", configKey: "hanko" }, defaults: { apiURL: "", registerComponents: true, augmentContext: true, cookieName: "hanko", redirects: { login: "/login", home: "/", success: "/", followRedirect: true } }, setup(options, nuxt) { const resolver = createResolver(import.meta.url); const isCustomElement = nuxt.options.vue.compilerOptions.isCustomElement; nuxt.options.vue.compilerOptions.isCustomElement = (tag) => tag.startsWith("hanko-") || isCustomElement?.(tag) || false; nuxt.options.runtimeConfig.public = defu(nuxt.options.runtimeConfig.public, { hanko: { apiURL: options.apiURL, cookieName: options.cookieName, cookieSameSite: options.cookieSameSite || void 0, cookieDomain: options.cookieDomain || void 0, storageKey: options.storageKey || void 0, components: options.components || {} } }); nuxt.options.appConfig = defu(nuxt.options.appConfig, { hanko: { redirects: options.redirects } }); if (options.registerComponents) { if (nuxt.options.vue.runtimeCompiler) { addPlugin(resolver.resolve("./runtime/plugins/custom-elements")); } addPlugin(resolver.resolve("./runtime/plugins/components.client")); nuxt.hook("prepare:types", ({ references }) => { references.push({ path: resolver.resolve("./runtime/components.d.ts") }); }); } if (options.augmentContext) { addServerHandler({ middleware: true, handler: resolver.resolve("./runtime/server/middleware/auth") }); nuxt.hook("prepare:types", ({ references }) => { references.push({ path: resolver.resolve("./runtime/auth.d.ts") }); }); } for (const name of ["logged-in", "logged-out"]) { addRouteMiddleware({ name: `hanko-${name}`, path: resolver.resolve(`./runtime/middleware/${name}`) }); } addImportsSources({ from: resolver.resolve("./runtime/composables/index"), imports: ["useHanko"] }); const hankoElementsTemplate = addTemplate({ filename: "hanko-elements.mjs", getContents: () => `export const Hanko = () => null` }); nuxt.hook("vite:extendConfig", (config, { isServer }) => { if (isServer) { config.resolve.alias = defu(config.resolve.alias, { "@teamhanko/hanko-elements": hankoElementsTemplate.dst }); } }); nuxt.hook("nitro:config", (config) => { config.externals = defu(config.externals, { inline: [resolver.resolve("./runtime/server")] }); config.imports = defu(config.imports, { presets: [ { from: resolver.resolve("./runtime/server/utils/index"), imports: ["verifyHankoEvent"] } ] }); }); } }); export { module$1 as default };