/** * Type Helpers * * @module Types */ /** * Promise, or maybe not * @category Types */ type Awaitable = T | PromiseLike; /** * Function * @category Types */ type Fn = (...args: any[]) => T; /** * Async Function * @category Types */ type AsyncFn = (...args: any[]) => Promise; /** * The return type of an async function * @category Types */ type AsyncReturnType = Awaited>; /** * null or whatever * @category Types */ type Nullable = T | null | undefined; /** * array or not yet * @category Types */ type Arrayable = T | T[]; /** * Constructor * @category Types */ type Constructor = new (...arg: any[]) => T; /** * Infers the element type of an array * @category Types */ type ElementOf = T extends (infer E)[] ? E : never; /** * Processing array-type data * * 处理数组类型的数据 * * @module Array */ /** * Convert `Arrayable` to `Array` * * 将 `Arrayable` 转换为 `Array` * * @category Array * @example * ```ts * toArray(null) // => [] * toArray(undefined) // => [] * toArray([]) // => [] * toArray(1) // => [1] * ``` */ declare function toArray(v: Nullable>): Array; /** * Unique array * * 数组去重 * * @category Array * @example * ```ts * uniq([1, 1, 2, 2, 3, 3]) // => [1, 2, 3] * ``` */ declare function uniq(v: T[]): T[]; /** * Unique array by a custom equality function * * 通过自定义相等函数实现数组去重 * * @category Array * @example * ```ts * uniqueBy([1, 1, 2, 2, 3, 3], (a, b) => a === b) // => [1, 2, 3] * ``` */ declare function uniqueBy(array: T[], equalFn: (a: T, b: T) => boolean): T[]; /** * Remove value from array * * 从数组中移除值 * * @category Array * * @param array - the array * @param value - the value to remove - 待移除的值 * @returns - if `true`, the value is removed, `false` otherwise. * - 如果成功移除,返回 `true`, 否则返回 `false` * * @example * ```ts * const arr = [1, 2, 3] * remove(arr, 2) // => true * console.log(arr) // => [1, 3] * remove(arr, 4) // => false * ``` */ declare function remove(array: T[], value: T): boolean; /** * Generate a range array of numbers starting from `0`. The `stop` is exclusive. * * 从 `0` 开始生成一个数字范围的数组, `stop` 是不包含的。 * * @category Array * * @param stop - the end of the range. 范围结束数字。 * * @example * ```ts * range(5) // => [0, 1, 2, 3, 4] * ``` */ declare function range(stop: number): number[]; /** * Generate a range array of numbers. The `stop` is exclusive. * * 生成一个数字范围的数组, `stop` 是不包含的。 * * @category Array * * @param start - the start of the range. 范围开始数字 * @param stop - the end of the range. 范围结束数字 * @param step - the step of the range. 步进 * * @example * ```ts * range(5, 10) // => [5, 6, 7, 8, 9] * range(5, 10, 2) // => [5, 7, 9] * ``` */ declare function range(start: number, stop: number, step?: number): number[]; /** * Move item in an array * * 移动数组中的项 * * @category Array * * @param arr - the array * @param from - the index of the item to move. 要移动的项的索引 * @param to - the index to move to. 要移动到的索引 * @returns the array with the item moved. 返回移动后的数组 * @example * ```ts * move([1, 2, 3], 0, 2) // => [3, 1, 2] * ``` */ declare function move(arr: T[], from: number, to: number): T[]; /** * Shuffle array * * 数组洗牌,随机打乱数组中的顺序 * * @category Array * @example * ```ts * shuffle([1, 2, 3]) // => [1, 3, 2] * ``` */ declare function shuffle(array: T[]): T[]; /** * Sort array * * 数组排序 * * @category Array * @example * ```ts * const arr = [ * { name: 'Mark', age: 20 }, * { name: 'John', age: 18 }, * { name: 'Jack', age: 21 }, * { name: 'Tom', age: 18 }, * ] * sortBy(arr, (item) => item.age) // => [ { name: 'John', age: 18 }, { name: 'Tom', age: 18 }, { name: 'Mark', age: 20 }, { name: 'Jack', age: 21 } ] * ``` */ declare function sortBy(array: T[], cb: (item: T) => number): T[]; /** * Split array into chunks * * 将数组拆分成块 * * @category Array * * @param input - the array * @param size - the chunk size. 块的大小 * * @example * ```ts * chunk([1, 2, 3, 4, 5], 2) // => [[1, 2], [3, 4], [5]] * ``` */ declare function chunk(input: T[], size?: number): T[][]; /** * Union two arrays * * 两个数组的并集 * * @category Array * * @example * ```ts * union([1, 2, 3], [2, 4, 5, 6]) // => [1, 2, 3, 4, 5, 6] * ``` */ declare function union(a: T[], b: T[]): T[]; /** * Intersection of two arrays * * 两个数组的交集 * * @category Array * @example * ```ts * intersection([1, 2, 3], [2, 4, 5, 6]) // => [2] * ``` */ declare function intersection(firstArr: readonly T[], secondArr: readonly T[]): T[]; /** * clone data * * 克隆数据 * * @module Clone */ /** * simple clone, use JSON.parse and JSON.stringify * * 简单的克隆,使用 JSON.parse 和 JSON.stringify * @category Clone */ declare function simpleClone(source: T): T; /** * shallow clone, only clone the first level * * 浅克隆,只克隆第一层 * * @category Clone */ declare function shallowClone(source: T): T; /** * Deep Clone. * * 深度克隆 * * @category Clone */ declare function deepClone(source: T): T; /** * Common functions * * @module Common */ /** * Asserts that a condition is true * * @param condition the condition to assert * @param message the message to display if the condition is false * * @category Common */ declare function assert(condition: unknown, message?: string): asserts condition; /** * Get the string representation of a value * * 获取值的字符串表示 * * @category Common */ declare function toString(s: unknown): string; /** * Get type name of a value * * 获取值的类型名称 * * @category Common * @example * ```ts * getTypeName(null) // => 'null' * getTypeName(undefined) // => 'undefined' * getTypeName({}) // => 'object' * ``` */ declare function getTypeName(s: unknown): string; /** * Equal * * @module Equal */ /** * Deep equality two values, support array and object * * @category Equal */ declare function deepEqual(v1: any, v2: any): boolean; /** * Base Event * * @module Event */ /** * @category Event */ declare class BaseEvent { private _listeners; constructor(); /** * Adds a listener to the specified event. * * @param event - the event to listen for * @param listener - the listener function to be called when the event is triggered * @return */ on(event: string, listener: (...args: any[]) => void): void; /** * Emits the specified event with the given arguments to all registered listeners. * * @param event - the name of the event to emit * @param args - the arguments to pass to the event listeners * @return */ emit(event: string, ...args: any[]): void; /** * Turn off the specified event listener. * * @param event - the name of the event to turn off * @param listener - (optional) the listener function to turn off */ off(event: string, listener?: (...args: any[]) => void): void; /** * Execute the listener at most once for a particular event. * * @param event - the event to listen for * @param listener - the function to be executed once for the event */ once(event: string, listener: (...args: any[]) => void): void; } /** * Function Helpers * * @module Function */ /** * noop function * * 空函数 * * @category Function */ declare function noop(): void; /** * Create a function that can only be called once, * and repeated calls return the result of the first call * * 创建只能被调用一次的函数,重复调用返回第一次调用的结果 * * @category Function */ declare function once any>(func: T): T; /** * call the function * * 调用函数 * * @category Function */ declare function invoke(fn: Fn): T; /** * call every functions in an array * * 调用数组中的每个函数 * * @category Function * * @param fns - an array of functions */ declare function invoke(fns: Nullable[]): void; type ComposeFn = (...args: any[]) => any; type LastArray = T extends [...any[], infer U] ? U : Fn; type FirstArray = T extends [infer U, ...any[]] ? U : Fn; /** * compose multiple functions, right to left * * 组合多个函数,从右到左执行 * * @category Function * @example * ```ts * const add = (a) => a + 1 * const subtract = (a) => a - 2 * const multiply = (a, b) => a * b * compose(add, subtract, multiply)(1, 2) => (1 * 2) - 2 + 1 = 1 * ``` */ declare function compose(...fns: T): (...args: Parameters>) => ReturnType>; /** * guard function that returns if val is truthy * * 守卫函数,返回 val 是否为真值 * * @category Function * @example * ```ts * [1, 2, 3, '', false, undefined].filter(isTruthy) // => [1, 2, 3] * ``` */ declare function isTruthy(val: unknown): boolean; /** * guard function that returns if val is not undefined * * 守卫函数,返回 val 不为 undefined * * @category Function * @example * ```ts * [1, '', false, undefined].filter(NotUndefined) // => [1, '', false] * ``` */ declare function notUndefined(val: unknown): boolean; /** * guard function that returns if val is not null or undefined * * 守卫函数,返回 val 不为 null 或 undefined * * @category Function * @example * ```ts * [1, '', false, null, undefined].filter(notNullish) // => [1, '', false] * ``` */ declare function notNullish(val: T | null | undefined): val is NonNullable; /** * Checks if the input is defined * @category Is */ declare function isDef(v?: T): v is T; /** * Checks if the input is a primitive * @category Is */ declare function isPrimitive(v: unknown): v is null | undefined | boolean | number | string | symbol | bigint; /** * Checks if the input is a boolean * @category Is */ declare function isBoolean(v: unknown): v is boolean; /** * Checks if the input is a function. * @category Is */ declare function isFunction any>(v: unknown): v is T; /** * Checks if the input is a number * @category Is */ declare function isNumber(v: unknown): v is number; /** * Checks if the input is a string * @category Is */ declare function isString(v: unknown): v is string; /** * Checks if the input is a symbol * @category Is */ declare function isSymbol(v: unknown): v is symbol; /** * Checks if the input is an object * @category Is */ declare function isPlainObject(v: unknown): v is Record; /** * Checks if the input is an array * @category Is */ declare function isArray(v: unknown): v is T[]; /** * Checks if the input is undefined */ declare function isUndefined(v: unknown): v is undefined; /** * Checks if the input is null * @category Is */ declare function isNull(v: unknown): v is null; /** * Checks if the input is a regexp * @category Is */ declare function isRegexp(v: unknown): v is RegExp; /** * Checks if the input is a date * @category Is */ declare function isDate(v: unknown): v is Date; /** * Checks if the input is an empty object * @category Is */ declare function isEmptyObject(v: unknown): boolean; /** * Checks if the input is a blob * @category Is */ declare function isBlob(v: unknown): v is Blob; /** * Checks if the input is a typed array * @category Is */ declare function isTypedArray(v: unknown): v is Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; /** * Checks if the input is a window * @category Is */ declare function isWindow(v: unknown): boolean; /** * Checks if the input is a browser * @category Is */ declare function isBrowser(): boolean; /** * Checks if a value is a JSON object. * @category Is */ declare function isJSONObject(obj: unknown): obj is Record; /** * Checks if a given value is a valid JSON array. * @category Is */ declare function isJSONArray(value: unknown): value is any[]; /** * Checks if a given value is a valid JSON value. * @category Is */ declare function isJSONValue(value: unknown): value is Record | any[] | string | number | boolean | null; /** * Math Helpers * * @module Math */ /** * Clamp a number between min and max * * 返回一个介于最小值和最大值之间的数字 * * @category Math */ declare function clamp(n: number, min: number, max: number): number; /** * Check if a number is in range [0, max] * * 检查一个数字是否在 [0, max] 范围内 * * @category Math * * @param n - the number * @param max - the maximum number * @example * ```ts * inRange(5, 10) // => true * inRange(10, 5) // => false * ``` */ declare function inRange(n: number, max: number): boolean; /** * Check if a number is in range [min, max] * * 检查一个数字是否在 [min, max] 范围内 * * @category Math * * @param n - the number * @param min - the minimum number * @param max - the maximum number * @example * ```ts * inRange(5, 0, 10) // => true * inRange(10, 0, 5) // => false * ``` */ declare function inRange(n: number, min: number, max: number): boolean; /** * Random number * * 返回一个介于 0 和 max 之间的随机数 * * @category Math * * @param max - the maximum number. 最大值 * @param float - (optional) if `true`, returns a floating-point number. 是否返回浮点数 * * @example * ```ts * random(5) // => an integer between 0 and 5 * random(5, true) // => a floating-point number between 0 and 5 * ``` */ declare function random(max: number, float?: boolean): number; /** * Random number between min and max * * 返回一个介于 min 和 max 之间的随机数 * * @category Math * * @param min - the minimum number. 最小值 * @param max - the maximum number. 最大值 * @param float - (optional) if `true`, returns a floating-point number. 是否返回浮点数 * * @example * ```ts * random(1, 5) // => an integer between 1 and 5 * random(1, 5, true) // => a floating-point number between 1 and 5 * ``` */ declare function random(min: number, max: number, float?: boolean): number; type GenNode = IsRoot extends true ? `${K}` : `.${K}` | (K extends number ? `[${K}]` | `.[${K}]` : never); /** * Object key paths * @category Types */ type ObjectKeyPaths = K extends string | number ? GenNode | (T[K] extends object ? `${GenNode}${ObjectKeyPaths}` : never) : never; type KeysPaths = T extends `${infer R}['${infer K}']${infer Rest}` ? KeysPaths : T extends `${infer R}["${infer K}"]${infer Rest}` ? KeysPaths : T extends `${infer R}[${infer K}]${infer Rest}` ? KeysPaths : T extends '' ? O : `${O extends '' ? O : `${O}.`}${T}`; /** * Get a value from an object * @category Types */ type ObjectGet, P extends string> = KeysPaths

extends `${infer R}.${infer Rest}` ? ObjectGet : T[P]; type MergeInsertions = T extends object ? { [K in keyof T]: MergeInsertions; } : T; /** * Deep merge * @category Types */ type DeepMerge = MergeInsertions<{ [K in keyof F | keyof S]: K extends keyof S & keyof F ? DeepMerge : K extends keyof S ? S[K] : K extends keyof F ? F[K] : never; }>; /** * Object Helpers * * @module Object */ /** * Check if an object has a non-inherited property * * 检查一个对象是否具有非继承属性 * * @category Object */ declare function hasOwn(obj: T, key: keyof any): key is keyof T; /** * Freeze an object recursively and its properties * * 递归冻结一个对象及其属性 * * @category Object */ declare function deepFreeze(obj: T): T; /** * Check if an object has a property * * 检查一个对象是否有属性 * * @category Object */ declare function isKeyof(obj: T, key: keyof any): key is keyof T; /** * Get a value from an object * * 从一个对象中获取一个值 * * @category Object * @example * ```ts * objectGet({ a: 1 }, 'a') // => 1 * objectGet({ a: { b: 2 } }, 'a.b') // => 2 * objectGet({ a: [{ b: 2 }] }, 'a[0].b') // => 2 * ``` */ declare function objectGet, P extends ObjectKeyPaths>(source: T, path: P): ObjectGet; /** * Map key/value pairs for an object, and construct a new one * * 为一个对象映射键值对,并构造一个新对象 * * @category Object * * Transform: * @example * ``` * objectMap({ a: 1, b: 2 }, (k, v) => [k.toString().toUpperCase(), v.toString()]) * // { A: '1', B: '2' } * ``` * * Swap key/value: * @example * ``` * objectMap({ a: 1, b: 2 }, (k, v) => [v, k]) * // { 1: 'a', 2: 'b' } * ``` * * Filter keys: * @example * ``` * objectMap({ a: 1, b: 2 }, (k, v) => k === 'a' ? undefined : [k, v]) * // { b: 2 } * ``` */ declare function objectMap(obj: Record, fn: (key: K, value: V) => [NK, NV] | undefined): Record; /** * Strict typed `Object.keys` * * @category Object * @example * ```ts * objectKeys({ a: 1, b: 2 }) // => ['a', 'b'] * ``` */ declare function objectKeys(obj: T): Array<`${keyof T & (string | number | boolean | null | undefined)}`>; /** * Strict typed `Object.entries` * * @category Object * @example * ```ts * objectEntries({ a: 1, b: 2 }) // => [['a', 1], ['b', 2]] * ``` */ declare function objectEntries(obj: T): Array<[keyof T, T[keyof T]]>; /** * Creates a new object with specified keys omitted. * * 创建一个新对象,省略指定的键。 * * @category Object * @example * ```ts * omit({ a: 1, b: 2 }, ['a']) // => { b: 2 } * ``` */ declare function omit(obj: T, keys: readonly K[]): Omit; /** * Creates a new object composed of the picked object properties. * * 创建一个由所选对象属性组成的新对象。 * * @category Object * @example * ```ts * pick({ a: 1, b: 2 }, ['a']) // => { a: 1 } * ``` */ declare function pick(obj: T, keys: K[]): Pick; /** * Deep merge * * The first argument is the target object, the rest are the sources. * The target object will be mutated and returned. * * 深度合并 * * 第一个参数是目标对象,其余的是源对象。 * 目标对象将被修改并返回。 * * @category Object */ declare function deepMerge(target: T, ...sources: S[]): DeepMerge; /** * Deep merge * * Differs from `deepMerge` in that it merges arrays instead of overriding them. * * The first argument is the target object, the rest are the sources. * The target object will be mutated and returned. * * 深度合并 * * 与 `deepMerge` 不同,它合并数组而不是覆盖它们。 * * 第一个参数是目标对象,其余的是源。 * 目标对象将被修改并返回。 * * @category Object */ declare function deepMergeWithArray(target: T, ...sources: S[]): DeepMerge; /** * Promise Helpers * * @module Promise */ /** * Sleeps for the given number of milliseconds. * * 给定毫秒数睡眠。 * @param ms - the number of milliseconds to sleep. 睡眠的毫秒数 * @param callback - (optional) the function to execute after the sleep. 睡眠完成后执行的函数。 * @returns a promise */ declare function sleep(ms: number, callback?: Fn): Promise; /** * Executes an array of promises in parallel with a given concurrency. The function * returns a Promise that resolves with an array containing the resolved values of * each promise. * If any promise is rejected, the returned promise will be rejected. * * 以指定的并发数并行执行一组 promise。该函数返回一个 promise,该承诺解析为一个数组,包含每个 promise 的解析值。 * 任意一个 promise 拒绝,返回的 promise 将被拒绝。 * * @category Promise * * @param promises - the array of promises to execute * @param concurrency - (optional) the maximum number of promises to execute in parallel 最大并发数 */ declare function promiseParallel(promises: (PromiseLike | (() => PromiseLike))[], concurrency?: number): Promise; /** * Creates a promise that is resolved with an array of promise settlement results, * in the same order as the input promises array. * The returned promise will be fulfilled when all of the input promises have settled, * either fulfilled or rejected. * * 创建一个以输入 promise 数组的结果数组解决的 promise, * 按照输入 promise 数组的相同顺序。 * 当所有输入 promise 都已解决时,返回的 promise将被实现, * 要么实现,要么拒绝。 * * @category Promise * * @param promises - the array of promises to execute * @param concurrency - (optional) the maximum number of promises to execute in parallel */ declare function promiseParallelSettled(promises: (PromiseLike | (() => PromiseLike))[], concurrency?: number): Promise[]>; /** * An error class representing an timeout operation. * @category Promise * @augments Error */ declare class TimeoutError extends Error { constructor(message?: string); } /** * Returns a promise that rejects with a `TimeoutError` after a specified delay. * * 返回一个 promise,该 promise 在指定的延迟时间后拒绝,抛出一个 `TimeoutError`。 * * @category Promise * @param ms - the number of milliseconds to wait before rejecting the promise. 超时的毫秒数 * @throws Throws a `TimeoutError` after the specified delay. * @example * ```ts * @example * ``` * try { * await timeout(1000); // Timeout exception after 1 second * } catch (error) { * console.error(error); // Will log 'The operation was timed out' * } * ``` */ declare function timeout(ms: number): Promise; /** * Executes an async function and enforces a timeout. * * 执行异步函数, 超时则强制拒绝 * * @category Promise * @param run - the async function to execute. * @param ms - the number of milliseconds to wait before rejecting the promise. * @returns A promise that resolves with the result of the async function, or rejects with a `TimeoutError` if the function does not resolve within the specified timeout. 一个 promise,它将解析为异步函数的结果,或者如果在指定超时内函数未解析,则拒绝并抛出`TimeoutError`。 * @example * ```ts * async function fetchData() { * const response = await fetch('https://example.com/data'); * return response.json(); * } * * try { * const data = await withTimeout(fetchData, 1000); * console.log(data); // Logs the fetched data if `fetchData` is resolved within 1 second. * } catch (error) { * console.error(error); // Will log 'TimeoutError' if `fetchData` is not resolved within 1 second. * } * ``` */ declare function withTimeout(run: () => Promise, ms: number): Promise; interface SingletonPromiseReturn { (): Promise; /** * Reset current staled promise. * Await it to have proper shutdown. */ reset: () => Promise; } /** * Create singleton promise function * * 创建单例 promise * * @category Promise */ declare function createSingletonPromise(fn: () => Promise): SingletonPromiseReturn; /** * Create a promise lock * * 创建一个 promise 锁 * * @category Promise * @example * ``` * const lock = createPromiseLock() * * lock.run(async () => { * await doSomething() * }) * * // in anther context: * await lock.wait() // it will wait all tasking finished * ``` */ declare function createPromiseLock(): { run: (fn: () => Promise) => Promise; wait: () => Promise; isWaiting: () => boolean; clear: () => void; }; /** * Promise with `resolve` and `reject` methods of itself * * @category Promise */ interface ControlledPromise extends Promise { resolve: (value: T | PromiseLike) => void; reject: (reason?: any) => void; } /** * Return a Promise with `resolve` and `reject` methods * * 返回一个 Promise,带有 `resolve` 和 `reject` 方法 * * @category Promise * @example * ``` * const promise = createControlledPromise() * * await promise * * // in anther context: * promise.resolve(data) * ``` */ declare function createControlledPromise(): ControlledPromise; /** * String Helpers * * @module String */ /** * Ensure prefix, if str does not start with prefix, it will be added * * 确保前缀,如果字符串不以前缀开头,则将添加前缀。 * * @category String * * @example * ```ts * ensurePrefix('http://', 'example.com') // => http://example.com * ensurePrefix('//', '//example.com') // => //example.com * ``` */ declare function ensurePrefix(prefix: string, str: string): string; /** * Ensure suffix, if str does not end with suffix, it will be added * * 确保后缀,如果字符串不以该后缀结尾,则将添加该后缀。 * * @category String * * @example * ```ts * ensureSuffix('.com', 'example.com') // => example.com * ensureSuffix('.com', 'example') // => example.com * ``` */ declare function ensureSuffix(suffix: string, str: string): string; declare const CASE_SPLIT_PATTERN: RegExp; /** * Split string into as words array * * 将字符串拆分为单词数组 * * @category String * @example * ```ts * words('helloWorld🚀') // => ['hello', 'world', '🚀'] * ``` */ declare function words(str: string): string[]; /** * First letter uppercase, other lowercase * @category String * @example * ```ts * capitalize('hello') // 'Hello' * ``` */ declare function capitalize(s: string): string; /** * Convert string to kebab-case * @category String * * @example * ```ts * kebabCase('a b c') // => a-b-c * kebabCase('orderBy') // => order-by * ``` */ declare function kebabCase(str: string): string; /** * Convert string to snake_case * @category String * @example * ```ts * snakeCase('a b c') // => a_b_c * snakeCase('orderBy') // => order_by * ``` */ declare function snakeCase(str: string): string; /** * Convert string to camelCase * * @category String * * @example * ```ts * camelCase('foo bar') // => fooBar * camelCase('foo-bar') // => fooBar * ``` */ declare function camelCase(str: string): string; /** * Convert string to lowercase * @category String * @example * ```ts * lowerCase('Hello World') // => 'hello world' * lowerCase('HELLO WORLD') // => 'hello world' * lowerCase('order-by') // => 'order by' * ``` */ declare function lowerCase(str: string): string; /** * Convert string to uppercase * @category String * @example * ```ts * upperCase('Hello World') // => 'HELLO WORLD' * upperCase('hello world') // => 'HELLO WORLD' * upperCase('order-by') // => 'ORDER BY' * ``` */ declare function upperCase(str: string): string; /** * Converts a string to Pascal case. * @category String * @example * ```ts * pascalCase('foo bar') // => FooBar * pascalCase('foo-bar') // => FooBar * ``` */ declare function pascalCase(str: string): string; /** * Converts the characters "&", "<", ">", '"', and "'" in `str` to their corresponding HTML entities. * * 将`str`中的字符"&"、"<"、">"、'"'和"'"转换为对应的HTML实体。 * * @category String * @example * ```ts * escape('') // => <script>alert(1)</script> * ``` */ declare function escape(str: string): string; /** * Escapes the RegExp special characters "^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", and "|" in `str`. * * 转义`str`中的正则表达式特殊字符"^"、"$"、"\\"、"."、"*"、"+"、"?"、"("、")"、"["、"]"、"{"、"}"以及"|"。 * * @category String * @example * ```ts * escapeRegExp('[link](https://sub.domain.com/)'); // '\[link\]\(https://sub\.domain\.com/\)' * ``` */ declare function escapeRegExp(str: string): string; /** * Converts the HTML entities `&`, `<`, `>`, `"`, and `'` in `str` to their corresponding characters. * It is the inverse of `escape`. * * 将`str`中的HTML实体`&`、`<`、`>`、`"`和`'`转换回对应的字符。 * 此操作是`escape`的逆向过程。 * * @category String * @example * ```ts * unescape('<script>alert(1)</script>') // => * ``` */ declare function unescape(str: string): string; /** * Throttle Options * @category Types */ interface ThrottleOptions { /** * Optional, defaults to false. If noTrailing is true, callback will only execute * every `delay` milliseconds while the throttled-function is being called. If * noTrailing is false or unspecified, callback will be executed one final time * after the last throttled-function call. (After the throttled-function has not * been called for `delay` milliseconds, the internal counter is reset) */ noTrailing?: boolean; /** * Optional, defaults to false. If noLeading is false, the first throttled-function * call will execute callback immediately. If noLeading is true, the first the * callback execution will be skipped. It should be noted that callback will never * executed if both noLeading = true and noTrailing = true. */ noLeading?: boolean; /** * If `debounceMode` is true (at begin), schedule * `callback` to execute after `delay` ms. If `debounceMode` is false (at end), * schedule `callback` to execute after `delay` ms. */ debounceMode?: boolean; } interface CancelOptions { upcomingOnly?: boolean; } interface Cancel { cancel: (options?: CancelOptions) => void; } interface NoReturn any> { (...args: Parameters): void; } /** * Throttle execution of a function. Especially useful for rate limiting * execution of handlers on events like resize and scroll. * * @category Function * * @param delay * A zero-or-greater delay in milliseconds. For event callbacks, values around * 100 or 250 (or even higher) are most useful. * * @param callback * A function to be executed after delay milliseconds. The `this` context and * all arguments are passed through, as-is, to `callback` when the * throttled-function is executed. * * @param options * An object to configure options. * * @return * A new, throttled, function. */ declare function throttle any>(delay: number, callback: T, options?: ThrottleOptions): NoReturn & Cancel; /** * Debounce Options * @category Types */ interface DebounceOptions { /** * If atBegin is false or unspecified, callback will only be executed `delay` * milliseconds after the last debounced-function call. If atBegin is true, * callback will be executed only at the first debounced-function call. (After * the throttled-function has not been called for `delay` milliseconds, the * internal counter is reset). */ atBegin?: boolean; } /** * Debounce execution of a function. Debouncing, unlike throttling, * guarantees that a function is only executed a single time, either at the * very beginning of a series of calls, or at the very end. * * @category Functions * * @param delay * A zero-or-greater delay in milliseconds. For event callbacks, values around * 100 or 250 (or even higher) are most useful. * * @param callback * A function to be executed after delay milliseconds. The `this` context and * all arguments are passed through, as-is, to `callback` when the * debounced-function is executed. * * @param options * An object to configure options. * * @return * A new, debounced function. */ declare function debounce any>(delay: number, callback: T, options?: DebounceOptions): NoReturn & Cancel; /** * Recommended time library: * * - [dayjs](https://day.js.org/) * - [date-fns](https://date-fns.org) * * @module */ /** * Get current timestamp * @category Time */ declare function timestamp(): number; /** * Check if two dates is same day * @category Time */ declare function isSameDay(date1: Date | number | string, date2?: Date | number | string): boolean; /** * URL Helpers * * @module URL */ /** * Replace all backslashes with forward slashes * * 将所有反斜杠替换为正斜杠 * * @category String * @example * ```ts * slash('foo\\bar') // => foo/bar * ``` */ declare function slash(s: string): string; /** * Ensure leading slash, if str does not start with slash, it will be added * * 确保前缀,如果字符串不以斜杠开头,则将添加斜杠 * * @category String * @example * ```ts * ensureLeadingSlash('foo/bar') // => /foo/bar * ``` */ declare function ensureLeadingSlash(str: string): string; /** * Ensure trailing slash, if str does not end with slash, it will be added * * 确保后缀,如果字符串不以斜杠结尾,则将添加斜杠 * * @category String * @example * ```ts * ensureTrailingSlash('/foo/bar') // => /foo/bar/ * ``` */ declare function ensureTrailingSlash(str: string): string; /** * Remove leading slash, if str starts with slash, it will be removed * * 删除斜杆前缀,如果字符串以斜杠开头,则将删除 * * @category String * @example * ```ts * removeLeadingSlash('/foo/bar') // => foo/bar * ``` */ declare function removeLeadingSlash(str: string): string; /** * Remove trailing slash, if str ends with slash, it will be removed * * 删除斜杆后缀,如果字符串以斜杠结尾,则将删除 * * @category String * @example * ```ts * removeTrailingSlash('/foo/bar/') // => /foo/bar * ``` */ declare function removeTrailingSlash(str: string): string; /** * Check if url is http * @category URL */ declare function isHttp(url: string): boolean; /** * Check if url is valid * @category URL */ declare function isUrl(url: string): boolean; /** * combines urls * @category URL * @example * ```ts * combineURLs('http://example.com', 'foo', 'bar') // => http://example.com/foo/bar * combineURLs('//example.com', '/foo') // => //example.com/foo * combineURLs('/foo', 'bar', 'index.html') // => /foo/bar/index.html * ``` */ declare function combineURLs(baseUrl: string, ...urls: string[]): string; /** * Parse protocol from url * * @category URL * @example * ```ts * parseProtocol('http://example.com') // => http * parseProtocol('mailto:user@example.com') // => mailto * ``` */ declare function parseProtocol(url: string): string; export { BaseEvent, CASE_SPLIT_PATTERN, TimeoutError, assert, camelCase, capitalize, chunk, clamp, combineURLs, compose, createControlledPromise, createPromiseLock, createSingletonPromise, debounce, deepClone, deepEqual, deepFreeze, deepMerge, deepMergeWithArray, ensureLeadingSlash, ensurePrefix, ensureSuffix, ensureTrailingSlash, escape, escapeRegExp, getTypeName, hasOwn, inRange, intersection, invoke, isArray, isBlob, isBoolean, isBrowser, isDate, isDef, isEmptyObject, isFunction, isHttp, isJSONArray, isJSONObject, isJSONValue, isKeyof, isNull, isNumber, isPlainObject, isPrimitive, isRegexp, isSameDay, isString, isSymbol, isTruthy, isTypedArray, isUndefined, isUrl, isWindow, kebabCase, lowerCase, move, noop, notNullish, notUndefined, objectEntries, objectGet, objectKeys, objectMap, omit, once, parseProtocol, pascalCase, pick, promiseParallel, promiseParallelSettled, random, range, remove, removeLeadingSlash, removeTrailingSlash, shallowClone, shuffle, simpleClone, slash, sleep, snakeCase, sortBy, throttle, timeout, timestamp, toArray, toString, unescape, union, uniq, uniqueBy, upperCase, withTimeout, words }; export type { Arrayable, AsyncFn, AsyncReturnType, Awaitable, Constructor, ControlledPromise, DebounceOptions, ElementOf, Fn, Nullable, SingletonPromiseReturn, ThrottleOptions };