vue-recaptcha
Version:
ReCAPTCHA vue component
71 lines (70 loc) • 1.92 kB
JavaScript
import { addComponent, addImports, addPlugin, createResolver, defineNuxtModule, useLogger, useNuxt } from "@nuxt/kit";
const COMPONENTS = {
RecaptchaCheckbox: "Checkbox",
RecaptchaChallengeV2: "ChallengeV2",
RecaptchaChallengeV3: "ChallengeV3"
};
export default defineNuxtModule({
meta: {
name: "vue-recaptcha",
configKey: "recaptcha",
compatibility: {
nuxt: "^3.0.0"
}
},
defaults: {
enterprise: false,
installPlugin: true,
_globalComponent: false
},
async setup(opt) {
const logger = useLogger("vue-recaptcha");
const nuxt = useNuxt();
const resolver = createResolver(import.meta.url);
nuxt.options.build.transpile.push(resolver.resolve("."), "vue-recaptcha");
for (const [name, fileName] of Object.entries(COMPONENTS)) {
await addComponent({
name,
global: opt._globalComponent,
filePath: resolver.resolve(`./components/${fileName}.vue`)
});
}
addImports([
{
from: resolver.resolve("./composables/context"),
name: "useRecaptchaContext"
},
{
from: resolver.resolve("./composables/context"),
name: "useRecaptchaProxy"
},
{
from: resolver.resolve("./composables/challenge-v2"),
name: "useChallengeV2"
},
{
from: resolver.resolve("./composables/challenge-v3"),
name: "useChallengeV3"
},
{
from: resolver.resolve("./composables/script-provider"),
name: "useRecaptchaProvider"
}
]);
if (!opt.installPlugin) {
if (opt.enterprise) {
logger.warn("`enterprise` option is ignored when `installPlugin` is false");
}
return;
}
if (opt.enterprise) {
addPlugin({
src: resolver.resolve("./nuxt-enterprise-plugin")
});
} else {
addPlugin({
src: resolver.resolve("./nuxt-plugin")
});
}
}
});