UNPKG

@etsoo/shared

Version:

TypeScript shared utilities and functions

211 lines (210 loc) 7.02 kB
import { DataTypes } from "./DataTypes"; import { ErrorData, ErrorType } from "./types/ErrorData"; import { FormDataFieldValue, IFormData } from "./types/FormData"; /** * User agent data, maybe replaced by navigator.userAgentData in future * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData */ export type UserAgentData = { /** * Browser brands */ brands: { brand: string; version: string; }[]; /** * Is mobile device */ mobile: boolean; /** * Device brand (name) */ device: string; /** * Platform (OS) */ platform: string; /** * Platform version */ platformVersion?: string; }; /** * Dom Utilities * Not all methods support Node */ export declare namespace DomUtils { /** * Language cache parameter name */ const CultureField = "culture"; /** * Country cache parameter name */ const CountryField = "country"; /** * Clear form data * @param data Form data * @param source Source data to match * @param keepFields Fields need to be kept */ function clearFormData(data: IFormData, source?: object, keepFields?: string[]): IFormData; /** * Cast data as template format * @param source Source data * @param template Format template * @param keepSource Keep other source properties * @returns Result */ function dataAs<T extends DataTypes.BasicTemplate>(source: unknown, template: T, keepSource?: boolean): DataTypes.BasicTemplateType<T>; /** * Cast data to target type * @param source Source data * @param template Template for generation * @param keepSource Means even the template does not include the definition, still keep the item * @returns Result */ function dataValueAs<T extends object>(source: IFormData | object, templateValue: T, keepSource?: boolean): Partial<T>; /** * Current detected country */ const detectedCountry: string | null; /** * Current detected culture */ const detectedCulture: string; /** * Is two dimensions equal * @param d1 Dimension 1 * @param d2 Dimension 2 */ function dimensionEqual(d1?: DOMRect, d2?: DOMRect): boolean; /** * Download file from API fetch response body * @param data Data * @param suggestedName Suggested file name * @param autoDetect Auto detect, false will use link click way */ function downloadFile(data: ReadableStream | Blob, suggestedName?: string, autoDetect?: boolean): Promise<boolean | undefined>; /** * File to data URL * @param file File * @returns Data URL */ function fileToDataURL(file: File): Promise<string>; /** * Form data to object * @param form Form data * @returns Object */ function formDataToObject(form: IFormData): Record<string, FormDataFieldValue | FormDataFieldValue[]>; /** * Is wechat client * @param data User agent data * @returns Result */ function isWechatClient(data?: UserAgentData | null): boolean; /** * Culture match case Enum */ enum CultureMatch { Exact = 0, Compatible = 1, SamePart = 2, Default = 3 } /** * Get English resources definition * @param resources Resources * @returns Result */ const en: <T extends DataTypes.StringRecord = DataTypes.StringRecord>(resources: T | (() => Promise<T>)) => DataTypes.CultureDefinition<T>; /** * Get simplified Chinese resources definition * @param resources Resources * @returns Result */ const zhHans: <T extends DataTypes.StringRecord = DataTypes.StringRecord>(resources: T | (() => Promise<T>)) => DataTypes.CultureDefinition<T>; /** * Get traditional Chinese resources definition * @param resources Resources * @returns Result */ const zhHant: <T extends DataTypes.StringRecord = DataTypes.StringRecord>(resources: T | (() => Promise<T>)) => DataTypes.CultureDefinition<T>; /** * Get the available culture definition * @param items Available cultures * @param culture Detected culture */ const getCulture: <T extends DataTypes.StringRecord>(items: DataTypes.CultureDefinition<T>[], culture: string) => [DataTypes.CultureDefinition<T>, CultureMatch]; /** * Get input value depending on its type * @param input HTML input * @returns Result */ function getInputValue(input: HTMLInputElement): string | number | Date | null | undefined; /** * Get an unique key combined with current URL * @param key Key */ const getLocationKey: (key: string) => string; /** * Convert headers to object * @param headers Heaers */ function headersToObject(headers: HeadersInit | Iterable<[string, string]>): Record<string, string>; /** * Is IFormData type guard * @param input Input object * @returns result */ function isFormData(input: unknown): input is IFormData; /** * Is JSON content type * @param contentType Content type string */ function isJSONContentType(contentType: string): boolean; /** * Merge form data to primary one * @param form Primary form data * @param forms Other form data * @returns Merged form data */ function mergeFormData(form: IFormData, ...forms: IFormData[]): IFormData; /** * Merge URL search parameters * @param base URL search parameters * @param data New simple object data to merge */ function mergeURLSearchParams(base: URLSearchParams, data: DataTypes.SimpleObject): URLSearchParams; /** * Parse navigator's user agent string * Lightweight User-Agent string parser * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent * @param ua User agent string * @returns User agent data */ function parseUserAgent(ua?: string): UserAgentData | null; /** * Set HTML element focus by name * @param name Element name or first collection item * @param container Container, limits the element range */ function setFocus(name: string | object, container?: HTMLElement): void; /** * Setup frontend logging * @param action Logging action * @param preventDefault Is prevent default action * @param window Window object */ function setupLogging(action: (data: ErrorData) => void | Promise<void>, preventDefault?: ((type: ErrorType) => boolean) | boolean, window?: Window & typeof globalThis): void; /** * Verify file system permission * https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle/requestPermission * @param fileHandle FileSystemHandle * @param withWrite With write permission * @returns Result */ function verifyPermission(fileHandle: any, withWrite?: boolean): Promise<boolean>; }