Something went wrong. Try again.
forked from tailscale/tailscale
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859// Copyright (c) Tailscale Inc & contributors// SPDX-License-Identifier: BSD-3-Clause
/** * assertNever ensures a branch of code can never be reached, * resulting in a Typescript error if it can. */export function assertNever(a: never): never { return a}
/** * noop is an empty function for use as a default value. */export function noop() {}
/** * isObject checks if a value is an object. */export function isObject(val: unknown): val is object { return Boolean(val && typeof val === "object" && val.constructor === Object)}
/** * pluralize is a very simple function that returns either * the singular or plural form of a string based on the given * quantity. * * TODO: Ideally this would use a localized pluralization. */export function pluralize(signular: string, plural: string, qty: number) { return qty === 1 ? signular : plural}
/** * isTailscaleIPv6 returns true when the ip matches * Tailnet's IPv6 format. */export function isTailscaleIPv6(ip: string): boolean { return ip.startsWith("fd7a:115c:a1e0")}
/** * isPromise returns whether the current value is a promise. */export function isPromise<T = unknown>(val: unknown): val is Promise<T> { if (!val) { return false } return typeof val === "object" && "then" in val}
/** * isHTTPS reports whether the current page is loaded over HTTPS. */export function isHTTPS() { return window.location.protocol === "https:"}