UNPKG

@pedwise/next-firebase-auth-edge

Version:

Next.js 13 Firebase Authentication for Edge and server runtimes. Dedicated for Next 13 server components. Compatible with Next.js middleware.

97 lines (80 loc) 2.26 kB
export function isString(value: any): value is string { return typeof value === "string"; } export function isNonEmptyString(value: any): value is string { return isString(value) && value !== ""; } export function isObject(value: any): boolean { return typeof value === "object" && !isArray(value); } export function isArray<T>(value: any): value is T[] { return Array.isArray(value); } export function isNonNullObject<T>(value: T | null | undefined): value is T { return isObject(value) && value !== null; } export function isUid(uid: any): boolean { return typeof uid === "string" && uid.length > 0 && uid.length <= 128; } export function isNumber(value: any): boolean { return typeof value === "number" && !isNaN(value); } export function isISODateString(dateString: any): boolean { try { return ( isNonEmptyString(dateString) && new Date(dateString).toISOString() === dateString ); } catch (e) { return false; } } export function isURL(urlStr: any): boolean { if (typeof urlStr !== "string") { return false; } const re = /[^a-z0-9:/?#[\]@!$&'()*+,;=.\-_~%]/i; if (re.test(urlStr)) { return false; } try { const uri = new URL(urlStr); const scheme = uri.protocol; const hostname = uri.hostname; const pathname = uri.pathname; if (scheme !== "http:" && scheme !== "https:") { return false; } if ( !hostname || !/^[a-zA-Z0-9]+[\w-]*([.]?[a-zA-Z0-9]+[\w-]*)*$/.test(hostname) ) { return false; } const pathnameRe = /^(\/[\w\-.~!$'()*+,;=:@%]+)*\/?$/; if (pathname && pathname !== "/" && !pathnameRe.test(pathname)) { return false; } } catch (e) { return false; } return true; } export function isEmail(email: any): boolean { if (typeof email !== "string") { return false; } const re = /^[^@]+@[^@]+$/; return re.test(email); } export function isPhoneNumber(phoneNumber: any): boolean { if (typeof phoneNumber !== "string") { return false; } const re1 = /^\+/; const re2 = /[\da-zA-Z]+/; return re1.test(phoneNumber) && re2.test(phoneNumber); } export function isPassword(password: any): boolean { return typeof password === "string" && password.length >= 6; }