UNPKG

vue-recaptcha

Version:

ReCAPTCHA vue component

50 lines (49 loc) 1.59 kB
import pDefer from "p-defer"; import defu from "defu"; import { warn } from "../utils.mjs"; export function defineScriptLoader(fn) { return (options) => { return fn(normalizeScriptLoaderOptions(options)); }; } export function normalizeScriptLoaderOptions(options) { return { ...options, recaptchaApiURL: options.recaptchaApiURL ?? (options.useRecaptchaNet ? "https://www.recaptcha.net/recaptcha/api.js" : "https://www.google.com/recaptcha/api.js") }; } export const recaptchaLoaded = pDefer(); const ONLOAD_KEY = "__vueRecaptchaLoaded"; if (typeof window !== "undefined") { window[ONLOAD_KEY] = () => { recaptchaLoaded.resolve(); }; } export function toQueryString(params) { return new URLSearchParams(normalizeParams(params)).toString(); } export function normalizeParams(raw) { const params = defu(raw, { onload: ONLOAD_KEY, render: "explicit" }); if (params.render === "onload") { warn("passing `onload` as `render` param is not allowed"); params.render = "explicit"; } if (params.onload !== ONLOAD_KEY) { warn("passing `onload` param with other value is not allowed"); params.onload = ONLOAD_KEY; } return toStringPair(params); } export function toStringPair(params) { return Object.entries(params).filter((pair) => typeof pair[1] === "string"); } export function checkRecaptchaLoad() { if (typeof window === "undefined") { return false; } const isLoaded = Object.hasOwn(window, "grecaptcha") && Object.hasOwn(window.grecaptcha, "execute"); if (isLoaded) { recaptchaLoaded.resolve(); } return isLoaded; }