@pawover/kit 0.0.0-alpha.2 → 0.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/enums.d.ts +25 -0
- package/dist/enums.d.ts.map +1 -0
- package/dist/enums.js +25 -0
- package/dist/enums.js.map +1 -0
- package/dist/hooks-alova.d.ts +23 -0
- package/dist/hooks-alova.d.ts.map +1 -0
- package/dist/hooks-alova.js +39 -0
- package/dist/hooks-alova.js.map +1 -0
- package/dist/hooks-react.d.ts +90 -0
- package/dist/hooks-react.d.ts.map +1 -0
- package/dist/hooks-react.js +296 -0
- package/dist/hooks-react.js.map +1 -0
- package/dist/index.d.ts +383 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1124 -2
- package/dist/index.js.map +1 -0
- package/dist/vite.d.ts +13 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +22 -0
- package/dist/vite.js.map +1 -0
- package/dist/zod.d.ts +105 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +138 -0
- package/dist/zod.js.map +1 -0
- package/metadata.json +139 -0
- package/package.json +46 -42
- package/dist/enums/index.js +0 -20
- package/dist/hooks/react/index.js +0 -5
- package/dist/hooks/react/useCreation.js +0 -11
- package/dist/hooks/react/useLatest.js +0 -6
- package/dist/hooks/react/useMount.js +0 -29
- package/dist/hooks/react/useResponsive.js +0 -59
- package/dist/hooks/react/useUnmount.js +0 -17
- package/dist/types/enums/index.d.ts +0 -20
- package/dist/types/hooks/react/index.d.ts +0 -5
- package/dist/types/hooks/react/useCreation.d.ts +0 -2
- package/dist/types/hooks/react/useLatest.d.ts +0 -1
- package/dist/types/hooks/react/useMount.d.ts +0 -11
- package/dist/types/hooks/react/useResponsive.d.ts +0 -16
- package/dist/types/hooks/react/useUnmount.d.ts +0 -6
- package/dist/types/index.d.ts +0 -2
- package/dist/types/utils/array.d.ts +0 -76
- package/dist/types/utils/index.d.ts +0 -6
- package/dist/types/utils/object.d.ts +0 -53
- package/dist/types/utils/string.d.ts +0 -13
- package/dist/types/utils/to.d.ts +0 -5
- package/dist/types/utils/tree/index.d.ts +0 -6
- package/dist/types/utils/tree/rowsToTree.d.ts +0 -10
- package/dist/types/utils/tree/treeFilter.d.ts +0 -6
- package/dist/types/utils/tree/treeFind.d.ts +0 -8
- package/dist/types/utils/tree/treeForEach.d.ts +0 -5
- package/dist/types/utils/tree/treeMap.d.ts +0 -6
- package/dist/types/utils/tree/treeToRows.d.ts +0 -9
- package/dist/types/utils/tree/types.d.ts +0 -24
- package/dist/types/utils/typeof.d.ts +0 -29
- package/dist/utils/array.js +0 -196
- package/dist/utils/index.js +0 -6
- package/dist/utils/object.js +0 -138
- package/dist/utils/string.js +0 -70
- package/dist/utils/to.js +0 -16
- package/dist/utils/tree/index.js +0 -6
- package/dist/utils/tree/rowsToTree.js +0 -35
- package/dist/utils/tree/treeFilter.js +0 -92
- package/dist/utils/tree/treeFind.js +0 -82
- package/dist/utils/tree/treeForEach.js +0 -60
- package/dist/utils/tree/treeMap.js +0 -79
- package/dist/utils/tree/treeToRows.js +0 -13
- package/dist/utils/tree/types.js +0 -10
- package/dist/utils/typeof.js +0 -114
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-react.js","names":["defaultResponsiveValues: ResponsiveValues","responsiveConfig: ResponsiveConfig","responsiveValues: ResponsiveValues","tokens: BREAK_POINT_TOKEN_TYPE"],"sources":["../src/utils/typeof/types.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/object/objectKeys.ts","../node_modules/.pnpm/radashi@12.7.1/node_modules/radashi/dist/radashi.js","../src/utils/object/objectAssign.ts","../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/enums/grid.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useUnmount.ts"],"sourcesContent":["export const prototypeStrings = {\n string: \"[object String]\",\n number: \"[object Number]\",\n boolean: \"[object Boolean]\",\n object: \"[object Object]\",\n array: \"[object Array]\",\n bigInt: \"[object BigInt]\",\n symbol: \"[object Symbol]\",\n function: \"[object Function]\",\n generatorFunction: \"[object GeneratorFunction]\",\n asyncFunction: \"[object AsyncFunction]\",\n promise: \"[object Promise]\",\n null: \"[object Null]\",\n undefined: \"[object Undefined]\",\n date: \"[object Date]\",\n regExp: \"[object RegExp]\",\n error: \"[object Error]\",\n file: \"[object File]\",\n map: \"[object Map]\",\n weakMap: \"[object WeakMap]\",\n set: \"[object Set]\",\n weakSet: \"[object WeakSet]\",\n window: \"[object Window]\",\n webSocket: \"[object WebSocket]\",\n URLSearchParams: \"[object URLSearchParams]\",\n} as const;\n\nexport function resolvePrototypeString(value: unknown) {\n return Object.prototype.toString.call(value);\n}\n","/**\n * 判断给定的值是否相等\n * @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts\n *\n * @param {T} x\n * @param {T} y\n */\nexport function isEqual<T>(x: T, y: T): boolean {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n\n const keysX = Reflect.ownKeys(x) as (keyof typeof x)[];\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n\n for (const key of keysX) {\n if (!Reflect.has(y, key)) {\n return false;\n }\n if (!isEqual(x[key], y[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isFunction<T extends Func>(value: unknown): value is T {\n const prototypeList: string[] = [prototypeStrings.function, prototypeStrings.generatorFunction, prototypeStrings.asyncFunction];\n\n return prototypeList.includes(resolvePrototypeString(value));\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isObject<T extends Record<PropertyKey, unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.object;\n}\n","import { prototypeStrings, resolvePrototypeString } from \"./types\";\n\nexport function isPromise<T extends Promise<unknown>>(value: unknown): value is T {\n return resolvePrototypeString(value) === prototypeStrings.promise;\n}\n","import { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\nimport { isPromise } from \"./isPromise\";\n\nexport function isPromiseLike<T extends PromiseLike<unknown>>(value: unknown): value is T {\n return isPromise(value) || (isObject(value) && isFunction(value[\"then\"]));\n}\n","/**\n * 返回对象的可枚举属性和方法的名称\n * - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型\n *\n * @param obj 对象\n */\nexport function objectKeys<O extends AnyObject>(obj: O): (keyof O)[] {\n return Object.keys(obj);\n}\n","// src/array/alphabetical.ts\nfunction alphabetical(array, getter, direction = \"asc\") {\n if (!array) {\n return [];\n }\n const asc = (a, b) => `${getter(a)}`.localeCompare(getter(b));\n const dsc = (a, b) => `${getter(b)}`.localeCompare(getter(a));\n return array.slice().sort(direction === \"desc\" ? dsc : asc);\n}\n\n// src/array/boil.ts\nfunction boil(array, compareFunc) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n return array.reduce(compareFunc);\n}\n\n// src/array/cartesianProduct.ts\nfunction cartesianProduct(...arrays) {\n let out = [[]];\n for (const array of arrays) {\n const result = [];\n for (const currentArray of out) {\n for (const item of array) {\n const currentArrayCopy = currentArray.slice();\n currentArrayCopy.push(item);\n result.push(currentArrayCopy);\n }\n }\n out = result;\n }\n return out;\n}\n\n// src/array/castArray.ts\nfunction castArray(value) {\n return Array.isArray(value) ? value.slice() : [value];\n}\n\n// src/array/castArrayIfExists.ts\nfunction castArrayIfExists(value) {\n return Array.isArray(value) ? value.slice() : value != null ? [value] : value;\n}\n\n// src/array/cluster.ts\nfunction cluster(array, size = 2) {\n const clusters = [];\n if (size > 0) {\n for (let i = 0; i < array.length; i += size) {\n clusters.push(array.slice(i, i + size));\n }\n }\n return clusters;\n}\n\n// src/array/concat.ts\nfunction concat(...values) {\n const result = [];\n const append = (value) => value != null && result.push(value);\n for (const value of values) {\n if (Array.isArray(value)) {\n value.forEach(append);\n } else {\n append(value);\n }\n }\n return result;\n}\n\n// src/array/counting.ts\nfunction counting(array, identity2) {\n if (!array) {\n return {};\n }\n return array.reduce(\n (acc, item) => {\n const id = identity2(item);\n acc[id] = (acc[id] ?? 0) + 1;\n return acc;\n },\n {}\n );\n}\n\n// src/array/diff.ts\nfunction diff(root, other, identity2 = (t) => t) {\n if (!(root == null ? void 0 : root.length) && !(other == null ? void 0 : other.length)) {\n return [];\n }\n if ((root == null ? void 0 : root.length) === void 0) {\n return [...other];\n }\n if (!(other == null ? void 0 : other.length)) {\n return [...root];\n }\n const bKeys = other.reduce(\n (acc, item) => {\n acc[identity2(item)] = true;\n return acc;\n },\n {}\n );\n return root.filter((a) => !bKeys[identity2(a)]);\n}\n\n// src/array/first.ts\nfunction first(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[0] : defaultValue;\n}\n\n// src/array/flat.ts\nfunction flat(lists) {\n return lists.reduce((acc, list2) => {\n acc.push(...list2);\n return acc;\n }, []);\n}\n\n// src/array/fork.ts\nfunction fork(array, condition) {\n const forked = [[], []];\n if (array) {\n for (const item of array) {\n forked[condition(item) ? 0 : 1].push(item);\n }\n }\n return forked;\n}\n\n// src/array/group.ts\nfunction group(array, getGroupId) {\n const groups = /* @__PURE__ */ Object.create(null);\n array.forEach((item, index) => {\n const groupId = getGroupId(item, index);\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n groups[groupId].push(item);\n });\n return groups;\n}\n\n// src/array/intersects.ts\nfunction intersects(listA, listB, identity2) {\n if (!listA || !listB) {\n return false;\n }\n if (identity2) {\n const known = new Set(listA.map(identity2));\n return listB.some((item) => known.has(identity2(item)));\n }\n return listB.some((item) => listA.includes(item));\n}\n\n// src/array/isArrayEqual.ts\nfunction isArrayEqual(array1, array2) {\n if (array1 !== array2) {\n if (array1.length !== array2.length) {\n return false;\n }\n for (let i = 0; i < array1.length; i++) {\n if (!Object.is(array1[i], array2[i])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// src/array/iterate.ts\nfunction iterate(count, func, initValue) {\n let value = initValue;\n for (let i = 1; i <= count; i++) {\n value = func(value, i);\n }\n return value;\n}\n\n// src/array/last.ts\nfunction last(array, defaultValue) {\n return (array == null ? void 0 : array.length) > 0 ? array[array.length - 1] : defaultValue;\n}\n\n// src/array/list.ts\nfunction list(startOrLength, end, valueOrMapper, step) {\n return Array.from(range(startOrLength, end, valueOrMapper, step));\n}\n\n// src/array/mapify.ts\nfunction mapify(array, getKey, getValue = (item) => item) {\n const map2 = /* @__PURE__ */ new Map();\n for (const [index, item] of array.entries()) {\n map2.set(getKey(item, index), getValue(item, index));\n }\n return map2;\n}\n\n// src/array/merge.ts\nfunction merge(prev, array, toKey) {\n if (!array && !prev) {\n return [];\n }\n if (!array) {\n return [...prev];\n }\n if (!prev) {\n return [];\n }\n if (!toKey) {\n return [...prev];\n }\n const keys2 = /* @__PURE__ */ new Map();\n for (const item of array) {\n keys2.set(toKey(item), item);\n }\n return prev.map((prevItem) => {\n const key = toKey(prevItem);\n return keys2.has(key) ? keys2.get(key) : prevItem;\n });\n}\n\n// src/array/objectify.ts\nfunction objectify(array, getKey, getValue = (item) => item) {\n return array.reduce(\n (acc, item, i) => {\n acc[getKey(item, i)] = getValue(item, i);\n return acc;\n },\n {}\n );\n}\n\n// src/array/pluck.ts\nfunction pluck(array, mappings) {\n return array.map(\n mappings ? (item) => mappings.map(\n (mapping) => isFunction(mapping) ? mapping(item) : item[mapping]\n ) : Object.values\n );\n}\n\n// src/array/remove.ts\nfunction remove(array, predicate) {\n return array.filter((item) => !predicate(item));\n}\n\n// src/array/replace.ts\nfunction replace(array, newItem, match) {\n if (!array) {\n return [];\n }\n if (newItem === void 0) {\n return [...array];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n break;\n }\n }\n return out;\n}\n\n// src/array/replaceOrAppend.ts\nfunction replaceOrAppend(array, newItem, match) {\n if (!array && !newItem) {\n return [];\n }\n if (!newItem) {\n return [...array];\n }\n if (!array) {\n return [newItem];\n }\n const out = array.slice();\n for (let index = 0; index < array.length; index++) {\n if (match(array[index], index)) {\n out[index] = newItem;\n return out;\n }\n }\n out.push(newItem);\n return out;\n}\n\n// src/array/select.ts\nfunction select(array, mapper, condition) {\n if (!array) {\n return [];\n }\n let mapped;\n return array.reduce((acc, item, index) => {\n if (condition) {\n condition(item, index) && acc.push(mapper(item, index));\n } else if ((mapped = mapper(item, index)) != null) {\n acc.push(mapped);\n }\n return acc;\n }, []);\n}\n\n// src/array/selectFirst.ts\nfunction selectFirst(array, mapper, condition) {\n if (!array) {\n return void 0;\n }\n let foundIndex = -1;\n const found = array.find((item, index) => {\n foundIndex = index;\n return condition ? condition(item, index) : mapper(item, index) != null;\n });\n return found === void 0 ? void 0 : mapper(found, foundIndex);\n}\n\n// src/array/shift.ts\nfunction shift(arr, n) {\n if (arr.length === 0) {\n return [...arr];\n }\n const shiftNumber = n % arr.length;\n if (shiftNumber === 0) {\n return [...arr];\n }\n return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)];\n}\n\n// src/array/sift.ts\nfunction sift(array) {\n return (array == null ? void 0 : array.filter((x) => !!x)) ?? [];\n}\n\n// src/array/sort.ts\nfunction sort(array, getter = identity, desc = false) {\n if (!array) {\n return [];\n }\n const asc = (a, b) => getter(a) - getter(b);\n const dsc = (a, b) => getter(b) - getter(a);\n return array.slice().sort(desc === true ? dsc : asc);\n}\n\n// src/array/toggle.ts\nfunction toggle(array, item, toKey, options) {\n if (!array) {\n return item !== void 0 ? [item] : [];\n }\n if (item === void 0) {\n return [...array];\n }\n let matcher;\n if (toKey) {\n const key = toKey(item, -1);\n matcher = (x, idx) => toKey(x, idx) === key;\n } else {\n matcher = (x) => x === item;\n }\n const existing = array.find(matcher);\n if (existing !== void 0) {\n return array.filter((x, idx) => !matcher(x, idx));\n }\n return (options == null ? void 0 : options.strategy) === \"prepend\" ? [item, ...array] : [...array, item];\n}\n\n// src/array/unique.ts\nfunction unique(array, toKey) {\n if (toKey) {\n const keys2 = /* @__PURE__ */ new Set();\n return array.reduce((acc, item) => {\n const key = toKey(item);\n if (!keys2.has(key)) {\n keys2.add(key);\n acc.push(item);\n }\n return acc;\n }, []);\n }\n return [...new Set(array)];\n}\n\n// src/array/unzip.ts\nfunction unzip(arrays) {\n if (!arrays || !arrays.length) {\n return [];\n }\n const out = new Array(\n arrays.reduce((max2, arr) => Math.max(max2, arr.length), 0)\n );\n let index = 0;\n const get2 = (array) => array[index];\n for (; index < out.length; index++) {\n out[index] = Array.from(arrays, get2);\n }\n return out;\n}\n\n// src/array/zip.ts\nfunction zip(...arrays) {\n return unzip(arrays);\n}\n\n// src/array/zipToObject.ts\nfunction zipToObject(keys2, values) {\n if (!keys2 || !keys2.length) {\n return {};\n }\n const getValue = isFunction(values) ? values : isArray(values) ? (_k, i) => values[i] : (_k, _i) => values;\n return keys2.reduce(\n (acc, key, idx) => {\n acc[key] = getValue(key, idx);\n return acc;\n },\n {}\n );\n}\n\n// src/async/all.ts\nasync function all(input) {\n const errors = [];\n const onError = (err) => {\n errors.push(err);\n };\n let output;\n if (isArray(input)) {\n output = await Promise.all(\n input.map((value) => Promise.resolve(value).catch(onError))\n );\n } else {\n output = { ...input };\n await Promise.all(\n Object.keys(output).map(async (key) => {\n output[key] = await Promise.resolve(output[key]).catch(onError);\n })\n );\n }\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors);\n }\n return output;\n}\n\n// src/async/defer.ts\nasync function defer(func) {\n const callbacks = [];\n const register = (fn, options) => callbacks.push({\n fn,\n rethrow: (options == null ? void 0 : options.rethrow) ?? false\n });\n const [err, response] = await tryit(func)(register);\n for (const { fn, rethrow } of callbacks) {\n const [rethrown] = await tryit(fn)(err);\n if (rethrown && rethrow) {\n throw rethrown;\n }\n }\n if (err) {\n throw err;\n }\n return response;\n}\n\n// src/async/guard.ts\nfunction guard(func, shouldGuard) {\n const onError = (err) => {\n if (shouldGuard && !shouldGuard(err)) {\n throw err;\n }\n };\n try {\n const result = func();\n return result instanceof Promise ? result.catch(onError) : result;\n } catch (err) {\n return onError(err);\n }\n}\n\n// src/async/map.ts\nasync function map(array, asyncMapFunc) {\n if (!array) {\n return [];\n }\n const result = [];\n let index = 0;\n for (const value of array) {\n const newValue = await asyncMapFunc(value, index++);\n result.push(newValue);\n }\n return result;\n}\n\n// src/async/parallel.ts\nasync function parallel(options, array, func) {\n if (!array.length) {\n return [];\n }\n const work = array.map((item, index) => ({\n index,\n item\n }));\n let signal;\n if (isNumber(options)) {\n options = {\n limit: options\n };\n } else {\n signal = options.signal;\n signal == null ? void 0 : signal.throwIfAborted();\n }\n const processor = async (resolve) => {\n const results2 = [];\n while (!(signal == null ? void 0 : signal.aborted)) {\n const next = work.pop();\n if (!next) {\n break;\n }\n const [error, result] = await tryit(func)(next.item);\n results2.push({\n error,\n result,\n index: next.index\n });\n }\n return resolve(results2);\n };\n const queues = Promise.all(\n list(1, clamp(options.limit, 1, array.length)).map(\n () => new Promise(processor)\n )\n );\n let signalPromise;\n if (signal) {\n signalPromise = new Promise((_, reject) => {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort);\n queues.then(() => signal.removeEventListener(\"abort\", onAbort));\n });\n }\n const itemResults = await (signalPromise ? Promise.race([queues, signalPromise]) : queues);\n const [errors, results] = fork(\n sort(flat(itemResults), (r) => r.index),\n (x) => !!x.error\n );\n if (errors.length > 0) {\n throw new AggregateErrorOrPolyfill(errors.map((error) => error.error));\n }\n return results.map((r) => r.result);\n}\n\n// src/async/queueByKey.ts\nfunction queueByKey(asyncFn, keyFn) {\n const queues = /* @__PURE__ */ new Map();\n return async (...args) => {\n const key = keyFn(...args);\n const next = () => asyncFn(...args);\n const queue = (queues.get(key) || Promise.resolve()).then(next, next);\n queues.set(key, queue);\n const cleanup = () => queues.get(key) === queue && queues.delete(key);\n queue.then(cleanup, cleanup);\n return queue;\n };\n}\n\n// src/async/reduce.ts\nasync function reduce(array, reducer, initialValue) {\n if (!array) {\n array = [];\n }\n let index = 0;\n let acc = initialValue;\n if (acc === void 0 && arguments.length < 3) {\n if (!array.length) {\n throw new TypeError(\"Reduce of empty array with no initial value\");\n }\n acc = array[index++];\n }\n while (index < array.length) {\n acc = await reducer(acc, array[index], index++);\n }\n return acc;\n}\n\n// src/async/retry.ts\nasync function retry(options, func) {\n const times = (options == null ? void 0 : options.times) ?? 3;\n const delay = options == null ? void 0 : options.delay;\n const backoff = (options == null ? void 0 : options.backoff) ?? null;\n const signal = options == null ? void 0 : options.signal;\n let i = 0;\n while (true) {\n const [err, result] = await tryit(func)((err2) => {\n throw { _exited: err2 };\n });\n signal == null ? void 0 : signal.throwIfAborted();\n if (!err) {\n return result;\n }\n if (err._exited) {\n throw err._exited;\n }\n if (++i >= times) {\n throw err;\n }\n if (delay) {\n await sleep(delay);\n }\n if (backoff) {\n await sleep(backoff(i));\n }\n }\n}\n\n// src/async/sleep.ts\nfunction sleep(milliseconds) {\n return new Promise((res) => setTimeout(res, milliseconds));\n}\n\n// src/async/timeout.ts\nfunction timeout(ms, error) {\n return new Promise(\n (_, reject) => setTimeout(\n () => reject(isFunction(error) ? error() : new TimeoutError(error)),\n ms\n )\n );\n}\n\n// src/async/toResult.ts\nasync function toResult(promise) {\n try {\n const result = await promise;\n return [void 0, result];\n } catch (error) {\n if (isError(error)) {\n return [error, void 0];\n }\n throw error;\n }\n}\n\n// src/async/tryit.ts\nfunction tryit(func) {\n return (...args) => {\n try {\n const result = func(...args);\n return isPromise(result) ? result.then(\n (value) => [void 0, value],\n (err) => [err, void 0]\n ) : [void 0, result];\n } catch (err) {\n return [err, void 0];\n }\n };\n}\n\n// src/async/withResolvers.ts\nfunction withResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise };\n}\n\n// src/curry/callable.ts\nfunction callable(obj, fn) {\n return new Proxy(Object.assign(fn.bind(null), obj), {\n get: (target, key) => target[key],\n set: (target, key, value) => {\n target[key] = value;\n return true;\n },\n apply: (target, _, args) => fn(Object.assign({}, target))(...args)\n });\n}\n\n// src/curry/chain.ts\nfunction chain(...funcs) {\n return (...args) => {\n return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args));\n };\n}\n\n// src/curry/compose.ts\nfunction compose(...funcs) {\n return funcs.reverse().reduce((acc, fn) => fn(acc));\n}\n\n// src/curry/debounce.ts\nfunction debounce({ delay, leading }, func) {\n let timer = void 0;\n let active = true;\n const debounced = (...args) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n active && func(...args);\n timer = void 0;\n }, delay);\n if (leading) {\n func(...args);\n leading = false;\n }\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== void 0;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args) => func(...args);\n return debounced;\n}\n\n// src/curry/flip.ts\nfunction flip(fn) {\n return (arg2, arg1, ...args) => fn(arg1, arg2, ...args);\n}\n\n// src/curry/memo.ts\nfunction memoize(cache, func, keyFunc, ttl) {\n return function callWithMemo(...args) {\n const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args });\n const existing = cache[key];\n if (existing !== void 0) {\n if (!existing.exp) {\n return existing.value;\n }\n if (existing.exp > (/* @__PURE__ */ new Date()).getTime()) {\n return existing.value;\n }\n }\n const result = func(...args);\n cache[key] = {\n exp: ttl ? (/* @__PURE__ */ new Date()).getTime() + ttl : null,\n value: result\n };\n return result;\n };\n}\nfunction memo(func, options = {}) {\n return memoize({}, func, options.key ?? null, options.ttl ?? null);\n}\n\n// src/curry/memoLastCall.ts\nfunction memoLastCall(fn) {\n let lastArgs = null;\n let lastResult = null;\n return (...args) => {\n if (lastArgs && lastArgs.length === args.length && lastArgs.every((arg, i) => Object.is(arg, args[i]))) {\n return lastResult;\n }\n const result = fn(...args);\n lastArgs = args;\n lastResult = result;\n return result;\n };\n}\n\n// src/curry/once.ts\nvar once = /* @__PURE__ */ (() => {\n const onceSymbol = /* @__PURE__ */ Symbol();\n const once2 = (fn) => {\n const onceFn = function(...args) {\n if (onceFn[onceSymbol] === onceSymbol) {\n onceFn[onceSymbol] = fn.apply(this, args);\n }\n return onceFn[onceSymbol];\n };\n onceFn[onceSymbol] = onceSymbol;\n return onceFn;\n };\n once2.reset = (fn) => {\n fn[onceSymbol] = onceSymbol;\n };\n return once2;\n})();\n\n// src/curry/partial.ts\nfunction partial(fn, ...args) {\n return (...rest) => fn(...[...args, ...rest]);\n}\n\n// src/curry/partob.ts\nfunction partob(fn, argObj) {\n return (restObj) => fn({ ...argObj, ...restObj });\n}\n\n// src/curry/promiseChain.ts\nfunction promiseChain(...funcs) {\n return async (...args) => {\n let result = await funcs[0](...args);\n for (let i = 1; i < funcs.length; i++) {\n result = await funcs[i](result);\n }\n return result;\n };\n}\n\n// src/curry/proxied.ts\nfunction proxied(handler) {\n return new Proxy(\n {},\n {\n get: (target, propertyName) => handler(propertyName)\n }\n );\n}\n\n// src/curry/throttle.ts\nfunction throttle({ interval, trailing }, func) {\n let timer;\n let lastCalled = 0;\n let trailingArgs;\n const throttled = (...args) => {\n if (!isThrottled()) {\n trigger(...args);\n } else if (trailing) {\n trailingArgs = args;\n }\n };\n const isThrottled = () => Date.now() - lastCalled < interval;\n throttled.isThrottled = isThrottled;\n const trigger = throttled.trigger = (...args) => {\n func(...args);\n lastCalled = Date.now();\n if (trailing) {\n trailingArgs = void 0;\n clearTimeout(timer);\n timer = setTimeout(\n () => trailingArgs && trigger(...trailingArgs),\n interval\n );\n }\n };\n return throttled;\n}\n\n// src/function/always.ts\nfunction always(value) {\n return () => value;\n}\n\n// src/function/castComparator.ts\nfunction castComparator(mapping, compare, reverse) {\n const map2 = isFunction(mapping) ? mapping : (obj) => obj[mapping];\n const comparator = (left, right) => {\n const mappedLeft = map2(left);\n const mappedRight = map2(right);\n if (compare) {\n return compare(mappedLeft, mappedRight);\n }\n return mappedLeft > mappedRight ? 1 : mappedLeft < mappedRight ? -1 : 0;\n };\n return reverse ? flip(comparator) : comparator;\n}\n\n// src/function/castMapping.ts\nfunction castMapping(mapping) {\n return isFunction(mapping) ? mapping : mapping != null ? (input) => input[mapping] : (input) => input;\n}\n\n// src/function/identity.ts\nfunction identity(value) {\n return value;\n}\n\n// src/function/noop.ts\nfunction noop() {\n}\n\n// src/number/clamp.ts\nfunction clamp(n, min2, max2) {\n if (max2 != null && min2 != null && min2 > max2) {\n throw new Error(\"invalid clamp range\");\n }\n return max2 != null && n > max2 ? max2 : min2 != null && n < min2 ? min2 : n;\n}\n\n// src/number/inRange.ts\nfunction inRange(number, start, end) {\n const isTypeSafe = typeof number === \"number\" && typeof start === \"number\" && (typeof end === \"undefined\" || typeof end === \"number\");\n if (!isTypeSafe) {\n return false;\n }\n if (typeof end === \"undefined\") {\n end = start;\n start = 0;\n }\n return number >= Math.min(start, end) && number < Math.max(start, end);\n}\n\n// src/number/lerp.ts\nfunction lerp(from, to, amount) {\n return from + (to - from) * amount;\n}\n\n// src/number/max.ts\nfunction max(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) > get2(b) ? a : b);\n}\n\n// src/number/min.ts\nfunction min(array, getter) {\n if (!array || (array.length ?? 0) === 0) {\n return null;\n }\n const get2 = getter ?? ((v) => v);\n return array.reduce((a, b) => get2(a) < get2(b) ? a : b);\n}\n\n// src/number/parseDuration.ts\nfunction parseDuration(duration, options) {\n return new DurationParser(options).parse(duration);\n}\n\n// src/number/parseQuantity.ts\nfunction parseQuantity(quantity, options) {\n return new QuantityParser(options).parse(quantity);\n}\n\n// src/number/range.ts\nfunction* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {\n const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;\n const start = end !== void 0 ? startOrLength : 0;\n const final = end ?? startOrLength;\n for (let i = start; i <= final; i += step) {\n yield mapper(i);\n }\n}\n\n// src/number/round.ts\nfunction round(value, precision, toInteger = Math.round) {\n if (precision) {\n const p = precision > 0 ? Math.min(precision, 292) : Math.max(precision, -323);\n let [q, e] = `${value}e`.split(\"e\");\n [q, e] = `${toInteger(+`${q}e${+e + p}`)}e`.split(\"e\");\n return +`${q}e${+e - p}`;\n }\n return toInteger(value);\n}\n\n// src/number/sum.ts\nfunction sum(array, fn) {\n return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0);\n}\n\n// src/number/toFloat.ts\nfunction toFloat(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseFloat(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/number/toInt.ts\nfunction toInt(value, defaultValue) {\n const parsedValue = isSymbol(value) ? Number.NaN : Number.parseInt(value);\n return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;\n}\n\n// src/object/assign.ts\nfunction assign(initial, override) {\n if (!initial || !override) {\n return initial ?? override ?? {};\n }\n const proto = Object.getPrototypeOf(initial);\n const merged = proto ? { ...initial } : Object.assign(Object.create(proto), initial);\n for (const key of Object.keys(override)) {\n merged[key] = isPlainObject(initial[key]) && isPlainObject(override[key]) ? assign(initial[key], override[key]) : override[key];\n }\n return merged;\n}\n\n// src/object/clone.ts\nfunction clone(obj) {\n if (isPrimitive(obj)) {\n return obj;\n }\n if (typeof obj === \"function\") {\n return obj.bind({});\n }\n const proto = Object.getPrototypeOf(obj);\n const newObj = typeof (proto == null ? void 0 : proto.constructor) === \"function\" ? new proto.constructor() : Object.create(proto);\n for (const key of Object.getOwnPropertyNames(obj)) {\n newObj[key] = obj[key];\n }\n return newObj;\n}\n\n// src/object/cloneDeep.ts\nvar DefaultCloningStrategy = {\n cloneMap(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Map());\n for (const [key, value] of input) {\n output.set(key, clone2(value));\n }\n return output;\n },\n cloneSet(input, track, clone2) {\n const output = track(/* @__PURE__ */ new Set());\n for (const value of input) {\n output.add(clone2(value));\n }\n return output;\n },\n cloneArray(input, track, clone2) {\n const output = track(new Array(input.length));\n input.forEach((value, index) => {\n output[index] = clone2(value);\n });\n return output;\n },\n cloneObject(input, track, clone2) {\n const output = track(Object.create(Object.getPrototypeOf(input)));\n for (const key of Reflect.ownKeys(input)) {\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (\"value\" in descriptor) {\n descriptor.value = clone2(descriptor.value);\n }\n Object.defineProperty(output, key, descriptor);\n }\n return output;\n },\n cloneOther(input, track) {\n return track(input);\n }\n};\nvar FastCloningStrategy = {\n cloneObject: (input, track, clone2) => {\n const output = track({ ...input });\n for (const key of Object.keys(input)) {\n output[key] = clone2(input[key]);\n }\n return output;\n }\n};\nfunction cloneDeep(root, customStrategy) {\n const strategy = { ...DefaultCloningStrategy, ...customStrategy };\n const tracked = /* @__PURE__ */ new Map();\n const track = (parent, newParent) => {\n tracked.set(parent, newParent);\n return newParent;\n };\n const clone2 = (value) => value && typeof value === \"object\" ? tracked.get(value) ?? cloneDeep2(value, strategy) : value;\n const cloneDeep2 = (parent, strategy2) => {\n const cloneParent = isObject(parent) ? strategy2.cloneObject : isArray(parent) ? strategy2.cloneArray : isMap(parent) ? strategy2.cloneMap : isSet(parent) ? strategy2.cloneSet : strategy2.cloneOther;\n const newParent = cloneParent(parent, track.bind(null, parent), clone2);\n if (!newParent) {\n return cloneDeep2(parent, DefaultCloningStrategy);\n }\n tracked.set(parent, newParent);\n return newParent;\n };\n return cloneDeep2(root, strategy);\n}\n\n// src/object/construct.ts\nfunction construct(obj) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, path) => {\n return set(acc, path, obj[path]);\n }, {});\n}\n\n// src/object/crush.ts\nfunction crush(value) {\n if (!value) {\n return {};\n }\n return function crushReducer(crushed, value2, path) {\n if (isObject(value2) || isArray(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n crushReducer(crushed, propValue, path ? `${path}.${prop}` : prop);\n }\n } else {\n crushed[path] = value2;\n }\n return crushed;\n }({}, value, \"\");\n}\n\n// src/object/filterKey.ts\nfunction filterKey(obj, key, filter) {\n return Object.prototype.hasOwnProperty.call(obj, key) && (filter == null || (isArray(filter) ? filter.includes(key) : filter(obj[key], key, obj)));\n}\n\n// src/object/get.ts\nfunction get(value, path, defaultValue) {\n const segments = path.split(/[\\.\\[\\]]/g);\n let current = value;\n for (const key of segments) {\n if (current === null) {\n return defaultValue;\n }\n if (current === void 0) {\n return defaultValue;\n }\n const unquotedKey = key.replace(/['\"]/g, \"\");\n if (unquotedKey.trim() === \"\") {\n continue;\n }\n current = current[unquotedKey];\n }\n if (current === void 0) {\n return defaultValue;\n }\n return current;\n}\n\n// src/object/getOrInsert.ts\nfunction getOrInsert(map2, key, value) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n map2.set(key, value);\n return value;\n}\n\n// src/object/getOrInsertComputed.ts\nfunction getOrInsertComputed(map2, key, compute) {\n if (map2.has(key)) {\n return map2.get(key);\n }\n const newValue = compute();\n map2.set(key, newValue);\n return newValue;\n}\n\n// src/object/invert.ts\nfunction invert(obj) {\n if (!obj) {\n return {};\n }\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[obj[key]] = key;\n return acc;\n },\n {}\n );\n}\n\n// src/object/isDangerousKey.ts\nfunction isDangerousKey(key, object) {\n return !(object && !Object.getPrototypeOf(object)) && (key === \"__proto__\" || key === \"prototype\" || key === \"constructor\");\n}\n\n// src/object/keys.ts\nfunction keys(value) {\n if (!value) {\n return [];\n }\n const keys2 = [];\n const keyPath = [];\n const recurse = (value2) => {\n if (isPlainObject(value2)) {\n for (const [prop, propValue] of Object.entries(value2)) {\n keyPath.push(prop);\n recurse(propValue);\n keyPath.pop();\n }\n } else if (isArray(value2)) {\n value2.forEach((item, index) => {\n keyPath.push(index);\n recurse(item);\n keyPath.pop();\n });\n } else {\n keys2.push(keyPath.join(\".\"));\n }\n };\n recurse(value);\n return keys2;\n}\n\n// src/object/listify.ts\nfunction listify(obj, toItem) {\n if (!obj) {\n return [];\n }\n const entries = Object.entries(obj);\n if (entries.length === 0) {\n return [];\n }\n return entries.reduce((acc, entry) => {\n acc.push(toItem(entry[0], entry[1]));\n return acc;\n }, []);\n}\n\n// src/object/lowerize.ts\nfunction lowerize(obj) {\n return mapKeys(obj, (k) => k.toLowerCase());\n}\n\n// src/object/mapEntries.ts\nfunction mapEntries(obj, toEntry) {\n if (!obj) {\n return {};\n }\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n const [newKey, newValue] = toEntry(key, value);\n acc[newKey] = newValue;\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapKeys.ts\nfunction mapKeys(obj, mapFunc) {\n const keys2 = Object.keys(obj);\n return keys2.reduce(\n (acc, key) => {\n acc[mapFunc(key, obj[key])] = obj[key];\n return acc;\n },\n {}\n );\n}\n\n// src/object/mapValues.ts\nfunction mapValues(obj, mapFunc) {\n return Object.keys(obj).reduce(\n (acc, key) => {\n acc[key] = mapFunc(obj[key], key);\n return acc;\n },\n {}\n );\n}\n\n// src/object/omit.ts\nfunction omit(obj, keys2) {\n if (!obj) {\n return {};\n }\n if (!keys2 || keys2.length === 0) {\n return obj;\n }\n return keys2.reduce(\n (acc, key) => {\n delete acc[key];\n return acc;\n },\n { ...obj }\n );\n}\n\n// src/object/pick.ts\nfunction pick(obj, filter) {\n if (!obj) {\n return {};\n }\n let keys2 = filter;\n if (isArray(filter)) {\n filter = null;\n } else {\n keys2 = Reflect.ownKeys(obj);\n }\n return keys2.reduce((acc, key) => {\n if (filterKey(obj, key, filter)) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/set.ts\nfunction set(initial, path, value) {\n if (!initial) {\n return {};\n }\n if (!path || value === void 0) {\n return initial;\n }\n return function recurse(object, keys2, index) {\n const key = keys2[index];\n object ??= isIntString(key) ? [] : {};\n if (isDangerousKey(key, object)) {\n throw new Error(\"Unsafe key in path: \" + key);\n }\n if (index < keys2.length - 1) {\n value = recurse(object[key], keys2, index + 1);\n }\n if (!Object.is(object[key], value)) {\n object = clone(object);\n object[key] = value;\n }\n return object;\n }(initial, path.match(/[^.[\\]]+/g), 0);\n}\n\n// src/object/shake.ts\nfunction shake(obj, filter = (value) => value === void 0) {\n if (!obj) {\n return {};\n }\n return Object.keys(obj).reduce((acc, key) => {\n if (!filter(obj[key])) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n}\n\n// src/object/traverse.ts\nfunction traverse(root, visitor, options, outerContext) {\n const context = outerContext ?? {\n value: null,\n key: null,\n parent: null,\n parents: [],\n path: [],\n skipped: /* @__PURE__ */ new Set(),\n skip(obj) {\n context.skipped.add(obj ?? context.value);\n }\n };\n const { rootNeedsVisit } = options ??= {};\n const ownKeys = options.ownKeys ?? Object.keys;\n const nestedOptions = {\n ...options,\n rootNeedsVisit: null\n };\n let ok = true;\n const visit = (value, key) => {\n if (context.parent.constructor === Map) {\n [key, value] = value;\n }\n context.path.push(key);\n const result = visitor(\n context.value = value,\n context.key = key,\n context.parent,\n context,\n nestedOptions\n );\n if (result === false) {\n return ok = false;\n }\n if (value !== null && typeof value === \"object\" && (isArray(value) || isPlainObject(value)) && !context.skipped.has(value) && !context.parents.includes(value)) {\n traverse2(value, result);\n }\n context.path.pop();\n return ok;\n };\n const traverse2 = (parent, parentResult) => {\n context.parents.push(parent);\n context.parent = parent;\n if (rootNeedsVisit && parent === root) {\n parentResult = visitor(\n context.value = parent,\n context.key = null,\n context.parent,\n context,\n nestedOptions\n );\n if (parentResult === false) {\n return ok;\n }\n }\n if (isArray(parent)) {\n parent.slice().forEach((value, index, values) => {\n if (visit(value, index) === false) {\n values.length = 0;\n }\n });\n } else if (parent === root && isIterable(parent)) {\n let index = 0;\n for (const value of parent) {\n if (visit(value, index) === false) {\n return ok;\n }\n index++;\n }\n } else {\n for (const key of ownKeys(parent)) {\n if (visit(parent[key], key) === false) {\n return ok;\n }\n }\n }\n context.parents.pop();\n context.parent = last(context.parents);\n if (ok && isFunction(parentResult)) {\n ok = parentResult() !== false;\n }\n return ok;\n };\n if (outerContext) {\n if (outerContext.skipped.has(root)) {\n return true;\n }\n const { value, key } = context;\n traverse2(root);\n context.value = value;\n context.key = key;\n return ok;\n }\n return traverse2(root);\n}\n\n// src/object/upperize.ts\nfunction upperize(obj) {\n return mapKeys(obj, (k) => k.toUpperCase());\n}\n\n// src/oop/AggregateError.ts\nvar AggregateErrorOrPolyfill = /* @__PURE__ */ (() => globalThis.AggregateError ?? class AggregateError extends Error {\n constructor(errors = []) {\n var _a, _b;\n super();\n const name = ((_a = errors.find((e) => e.name)) == null ? void 0 : _a.name) ?? \"\";\n this.name = `AggregateError(${name}...)`;\n this.message = `AggregateError with ${errors.length} errors`;\n this.stack = ((_b = errors.find((e) => e.stack)) == null ? void 0 : _b.stack) ?? this.stack;\n this.errors = errors;\n }\n})();\n\n// src/oop/QuantityParser.ts\nvar QuantityParser = class {\n constructor({ units, short }) {\n this.units = units;\n this.short = short;\n }\n /**\n * Parse a quantity string into its numeric value\n *\n * @throws {Error} If the quantity string is invalid or contains an unknown unit\n */\n parse(quantity) {\n var _a;\n const match = quantity.match(/^(-?\\d+(?:\\.\\d+)?) ?(\\w+)?s?$/);\n if (!match) {\n throw new Error(`Invalid quantity, cannot parse: ${quantity}`);\n }\n let unit = match[2];\n unit = ((_a = this.short) == null ? void 0 : _a[unit]) || unit;\n const count = Number.parseFloat(match[1]);\n if (Math.abs(count) > 1 && unit.endsWith(\"s\")) {\n unit = unit.substring(0, unit.length - 1);\n }\n if (!this.units[unit]) {\n throw new Error(\n `Invalid unit: ${unit}, makes sure it is one of: ${Object.keys(this.units).join(\", \")}`\n );\n }\n return count * this.units[unit];\n }\n};\n\n// src/oop/DurationParser.ts\nvar DURATION_UNITS = {\n week: 6048e5,\n day: 864e5,\n hour: 36e5,\n minute: 6e4,\n second: 1e3,\n millisecond: 1\n};\nvar DURATION_SHORT_UNITS = {\n w: \"week\",\n d: \"day\",\n h: \"hour\",\n m: \"minute\",\n s: \"second\",\n ms: \"millisecond\"\n};\nvar DurationParser = class _DurationParser extends QuantityParser {\n constructor(options) {\n super({\n units: {\n ..._DurationParser.units,\n ...options == null ? void 0 : options.units\n },\n short: {\n ..._DurationParser.shortUnits,\n ...options == null ? void 0 : options.short\n }\n });\n }\n static get units() {\n return DURATION_UNITS;\n }\n static get shortUnits() {\n return DURATION_SHORT_UNITS;\n }\n};\n\n// src/oop/Semaphore.ts\nvar SemaphorePermit = class {\n constructor(semaphore, request, weight) {\n this.semaphore = semaphore;\n this.request = request;\n this.weight = weight;\n }\n /**\n * Releases this permit back to the semaphore, allowing another\n * operation to acquire it.\n */\n release() {\n this.semaphore.release(this);\n this.release = noop;\n }\n};\nvar Semaphore = class {\n /**\n * Creates a new semaphore with the specified capacity.\n * @param maxCapacity Maximum number of permits that can be issued simultaneously\n */\n constructor(maxCapacity) {\n this.maxCapacity = maxCapacity;\n this.queue = [];\n if (maxCapacity <= 0) {\n throw new Error(\"maxCapacity must be > 0\");\n }\n this.capacity = maxCapacity;\n }\n /**\n * Number of pending acquisition requests.\n */\n get queueLength() {\n return this.queue.length;\n }\n /**\n * Acquires a permit from this semaphore, waiting if necessary until\n * one becomes available.\n * @param options.signal - The signal to abort the acquisition\n * @param options.weight - The weight of the permit to acquire\n * @returns A promise that resolves to a permit when one is\n * available\n */\n async acquire({\n signal,\n weight = 1\n } = {}) {\n if (weight <= 0) {\n throw new Error(\"weight must be > 0\");\n }\n if (weight > this.maxCapacity) {\n throw new Error(\"weight must be \\u2264 maxCapacity\");\n }\n const request = withResolvers();\n const permit = new SemaphorePermit(this, request, weight);\n if (signal) {\n const abort = () => {\n const index = this.queue.indexOf(permit);\n if (index >= 0) {\n this.queue.splice(index, 1);\n request.reject(signal.reason);\n }\n };\n signal.addEventListener(\"abort\", abort);\n const cleanup = () => {\n signal.removeEventListener(\"abort\", abort);\n };\n request.promise.then(cleanup, cleanup);\n }\n if (this.capacity < weight) {\n this.queue.push(permit);\n await request.promise;\n } else {\n this.capacity -= weight;\n }\n return permit;\n }\n /**\n * Rejects all pending acquisition requests.\n */\n reject(error) {\n this.acquire = () => Promise.reject(error);\n this.queue.forEach((permit) => permit.request.reject(error));\n this.queue = [];\n }\n /**\n * Releases a permit back to the semaphore, increasing capacity and\n * potentially fulfilling a pending acquisition request.\n */\n release(permit) {\n this.capacity += permit.weight;\n const nextPermit = this.queue[0];\n if (nextPermit && this.capacity >= nextPermit.weight) {\n this.capacity -= nextPermit.weight;\n this.queue.shift();\n nextPermit.request.resolve();\n }\n }\n};\n\n// src/oop/TimeoutError.ts\nvar TimeoutError = class extends Error {\n constructor(message) {\n super(message ?? \"Operation timed out\");\n this.name = \"TimeoutError\";\n }\n};\n\n// src/random/absoluteJitter.ts\nfunction absoluteJitter(base, offset) {\n return base + offset * (2 * Math.random() - 1);\n}\n\n// src/random/draw.ts\nfunction draw(array) {\n const max2 = array.length;\n if (max2 === 0) {\n return null;\n }\n const index = random(0, max2 - 1);\n return array[index];\n}\n\n// src/random/proportionalJitter.ts\nfunction proportionalJitter(base, factor) {\n return base * (1 - factor * (2 * Math.random() - 1));\n}\n\n// src/random/random.ts\nfunction random(min2, max2) {\n return Math.floor(Math.random() * (max2 - min2 + 1) + min2);\n}\n\n// src/random/shuffle.ts\nfunction shuffle(array, random2 = random) {\n const newArray = array.slice();\n for (let idx = array.length - 1, randomIdx, item; idx > 0; idx--) {\n randomIdx = random2(0, idx);\n item = newArray[idx];\n newArray[idx] = newArray[randomIdx];\n newArray[randomIdx] = item;\n }\n return newArray;\n}\n\n// src/random/uid.ts\nfunction uid(length, specials = \"\") {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" + specials;\n return iterate(\n length,\n (acc) => {\n return acc + characters.charAt(random(0, characters.length - 1));\n },\n \"\"\n );\n}\n\n// src/series/series.ts\nvar series = (items, toKey = (item) => `${item}`) => {\n const indexesByKey = {};\n const itemsByIndex = {};\n for (const idx of range(items.length - 1)) {\n const item = items[idx];\n indexesByKey[toKey(item)] = idx;\n itemsByIndex[idx] = item;\n }\n const first2 = () => itemsByIndex[0];\n const last2 = () => itemsByIndex[items.length - 1];\n const next = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first2();\n const previous = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last2();\n return {\n /**\n * Given two values in the series, returns the value that occurs\n * earlier in the series.\n */\n min(a, b) {\n return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b;\n },\n /**\n * Given two values in the series, returns the value that occurs\n * later in the series.\n */\n max(a, b) {\n return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b;\n },\n first: first2,\n last: last2,\n next,\n previous,\n /**\n * A more dynamic method than `next` and `previous` that lets you move\n * many times in either direction.\n *\n * ```ts\n * series(weekdays).spin('wednesday', 3) // => 'monday'\n * series(weekdays).spin('wednesday', -3) // => 'friday'\n * ```\n */\n spin(current, num) {\n if (num === 0) {\n return current;\n }\n const abs = Math.abs(num);\n const rel = abs > items.length ? abs % items.length : abs;\n return list(0, rel - 1).reduce(\n (acc) => num > 0 ? next(acc) : previous(acc),\n current\n );\n }\n };\n};\n\n// src/string/camel.ts\nfunction camel(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`;\n });\n}\n\n// src/string/capitalize.ts\nfunction capitalize(str) {\n if (!str || str.length === 0) {\n return \"\";\n }\n const lower = str.toLowerCase();\n return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length);\n}\n\n// src/string/dash.ts\nfunction dash(str) {\n var _a;\n const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts.reduce((acc, part) => {\n return `${acc}-${part.toLowerCase()}`;\n });\n}\n\n// src/string/dedent.ts\nfunction dedent(text, ...values) {\n var _a;\n if (isArray(text)) {\n if (values.length > 0) {\n return dedent(\n text.reduce((acc, input, i) => {\n var _a2;\n let value = String(values[i] ?? \"\");\n const indent2 = value.includes(\"\\n\") && ((_a2 = input.match(/[ \\t]*(?=[^\\n]*$)/)) == null ? void 0 : _a2[0]);\n if (indent2) {\n value = value.replace(/\\n(?=[^\\n]*?\\S)/g, \"\\n\" + indent2);\n }\n return acc + input + value;\n }, \"\")\n );\n }\n text = text[0];\n }\n const indent = values[0] ?? ((_a = text.match(/^[ \\t]*(?=\\S)/m)) == null ? void 0 : _a[0]);\n const output = indent ? text.replace(new RegExp(`^${indent}`, \"gm\"), \"\") : text;\n return output.replace(/^[ \\t]*\\n|\\n[ \\t]*$/g, \"\");\n}\n\n// src/string/escapeHTML.ts\nvar htmlCharacters = /[&<>\"']/g;\nvar replacements = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\"\n};\nfunction escapeHTML(input) {\n return input.replace(htmlCharacters, (char) => replacements[char]);\n}\n\n// src/string/pascal.ts\nfunction pascal(str) {\n if (!str) {\n return \"\";\n }\n const result = str.replace(\n /(?:[^\\w\\d]|_|\\s)+(\\w)([A-Z]+)?/g,\n (_, firstCharacter, capitalizedLetters) => {\n if (capitalizedLetters) {\n return firstCharacter.toUpperCase() + capitalizedLetters.toLowerCase();\n }\n return firstCharacter.toUpperCase();\n }\n );\n return result[0].toUpperCase() + result.substring(1);\n}\n\n// src/string/similarity.ts\nfunction similarity(str1, str2) {\n if (str1 === str2) {\n return 0;\n }\n let start = 0;\n let end1 = str1.length - 1;\n let end2 = str2.length - 1;\n while (start <= end1 && start <= end2 && str1[start] === str2[start]) {\n start++;\n }\n while (end1 >= start && end2 >= start && str1[end1] === str2[end2]) {\n end1--;\n end2--;\n }\n const length1 = end1 - start + 1;\n const length2 = end2 - start + 1;\n if (length1 === 0) {\n return length2;\n }\n if (length2 === 0) {\n return length1;\n }\n const numRows = length1 + 1;\n const numColumns = length2 + 1;\n const distances = new Array(numRows * numColumns).fill(0);\n for (let x = 1; x < numColumns; x++) {\n distances[x] = x;\n }\n for (let y = 1; y < numRows; y++) {\n distances[y * numColumns] = y;\n }\n for (let x = 1; x < numColumns; x++) {\n for (let y = 1; y < numRows; y++) {\n const i = y * numColumns + x;\n distances[i] = Math.min(\n // Cost of a deletion.\n distances[i - numColumns] + 1,\n // Cost of an insertion.\n distances[i - 1] + 1,\n // Cost of a substitution.\n distances[i - numColumns - 1] + (str1[start + y - 1] === str2[start + x - 1] ? 0 : 1)\n );\n }\n }\n return distances[length1 * numColumns + length2];\n}\n\n// src/string/snake.ts\nfunction snake(str, options) {\n const parts = (str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize).split(/(?=[A-Z])|[\\.\\-\\s_]/).map((x) => x.toLowerCase())) ?? [];\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n const result = parts.reduce((acc, part) => {\n return `${acc}_${part.toLowerCase()}`;\n });\n return (options == null ? void 0 : options.splitOnNumber) === false ? result : result.replace(/([A-Za-z]{1}[0-9]{1})/, (val) => `${val[0]}_${val[1]}`);\n}\n\n// src/string/template.ts\nfunction template(str, data, regex = /\\{\\{(.+?)\\}\\}/g) {\n let result = \"\";\n let from = 0;\n let match;\n while (match = regex.exec(str)) {\n result += str.slice(from, match.index) + data[match[1]];\n from = regex.lastIndex;\n }\n return result + str.slice(from);\n}\n\n// src/string/title.ts\nfunction title(str) {\n if (!str) {\n return \"\";\n }\n return str.split(/(?=[A-Z])|[\\.\\-\\s_]/).map((s) => s.trim()).filter((s) => !!s).map((s) => capitalize(s.toLowerCase())).join(\" \");\n}\n\n// src/string/trim.ts\nfunction trim(str, charsToTrim = \" \") {\n if (!str) {\n return \"\";\n }\n const toTrim = charsToTrim.replace(/[\\W]{1}/g, \"\\\\$&\");\n const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, \"g\");\n return str.replace(regex, \"\");\n}\n\n// src/typed/assert.ts\nfunction assert(condition, message) {\n if (!condition) {\n throw message instanceof Error ? message : new Error(message ?? \"Assertion failed\");\n }\n}\n\n// src/typed/isArray.ts\nvar isArray = /* @__PURE__ */ (() => Array.isArray)();\n\n// src/typed/isAsyncIterable.ts\nvar asyncIteratorSymbol = (\n /* c8 ignore next */\n Symbol.asyncIterator || /* @__PURE__ */ Symbol.for(\"Symbol.asyncIterator\")\n);\nfunction isAsyncIterable(value) {\n return !!value && typeof value === \"object\" && typeof value[asyncIteratorSymbol] === \"function\";\n}\n\n// src/typed/isBigInt.ts\nfunction isBigInt(value) {\n return typeof value === \"bigint\";\n}\n\n// src/typed/isBoolean.ts\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n\n// src/typed/isClass.ts\nfunction isClass(value) {\n return isFunction(value) && Function.prototype.toString.call(value).startsWith(\"class \");\n}\n\n// src/typed/isDate.ts\nfunction isDate(value) {\n return isTagged(value, \"[object Date]\");\n}\n\n// src/typed/isEmpty.ts\nfunction isEmpty(value) {\n if (typeof value !== \"object\" || value === null) {\n return !value || value === true;\n }\n if (isDate(value)) {\n return Number.isNaN(value.getTime());\n }\n const length = value.length;\n if (isNumber(length)) {\n return length === 0;\n }\n const size = value.size;\n if (isNumber(size)) {\n return size === 0;\n }\n const keys2 = Object.keys(value).length;\n return keys2 === 0;\n}\n\n// src/typed/isEqual.ts\nfunction isEqual(x, y) {\n if (Object.is(x, y)) {\n return true;\n }\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== \"object\" || x === null || typeof y !== \"object\" || y === null) {\n return false;\n }\n const keysX = Reflect.ownKeys(x);\n const keysY = Reflect.ownKeys(y);\n if (keysX.length !== keysY.length) {\n return false;\n }\n for (let i = 0; i < keysX.length; i++) {\n if (!Reflect.has(y, keysX[i])) {\n return false;\n }\n if (!isEqual(x[keysX[i]], y[keysX[i]])) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isError.ts\nfunction isError(value) {\n return isTagged(value, \"[object Error]\");\n}\n\n// src/typed/isFloat.ts\nfunction isFloat(value) {\n return isNumber(value) && value % 1 !== 0;\n}\n\n// src/typed/isFunction.ts\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/typed/isInt.ts\nvar isInt = /* @__PURE__ */ (() => Number.isInteger)();\n\n// src/typed/isIntString.ts\nfunction isIntString(value) {\n if (!isString(value)) {\n return false;\n }\n const num = +value;\n return Number.isInteger(num) && `${num}` === value;\n}\n\n// src/typed/isIterable.ts\nfunction isIterable(value) {\n return typeof value === \"object\" && value !== null && Symbol.iterator in value;\n}\n\n// src/typed/isMap.ts\nfunction isMap(value) {\n return isTagged(value, \"[object Map]\");\n}\n\n// src/typed/isMapEqual.ts\nfunction isMapEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const [key, value] of x) {\n if (!isEqual(value, y.get(key))) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isNullish.ts\nfunction isNullish(value) {\n return value === null || value === void 0;\n}\n\n// src/typed/isNumber.ts\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n\n// src/typed/isObject.ts\nfunction isObject(value) {\n return isTagged(value, \"[object Object]\");\n}\n\n// src/typed/isPlainObject.ts\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return (\n // Fast path for most common objects.\n prototype === Object.prototype || // Support objects created without a prototype.\n prototype === null || // Support plain objects from other realms.\n Object.getPrototypeOf(prototype) === null\n );\n}\n\n// src/typed/isPrimitive.ts\nfunction isPrimitive(value) {\n return value === void 0 || value === null || typeof value !== \"object\" && typeof value !== \"function\";\n}\n\n// src/typed/isPromise.ts\nfunction isPromise(value) {\n return !!value && isFunction(value.then);\n}\n\n// src/typed/isRegExp.ts\nfunction isRegExp(value) {\n return isTagged(value, \"[object RegExp]\");\n}\n\n// src/typed/isResult.ts\nfunction isResult(value) {\n return isArray(value) && value.length === 2 && (isError(value[0]) ? value[1] : value[0]) === void 0;\n}\n\n// src/typed/isResultErr.ts\nfunction isResultErr(value) {\n return isResult(value) && value[0] !== void 0;\n}\n\n// src/typed/isResultOk.ts\nfunction isResultOk(value) {\n return isResult(value) && value[0] === void 0;\n}\n\n// src/typed/isSet.ts\nfunction isSet(value) {\n return isTagged(value, \"[object Set]\");\n}\n\n// src/typed/isSetEqual.ts\nfunction isSetEqual(x, y) {\n if (x.size !== y.size) {\n return false;\n }\n for (const item of x) {\n if (!y.has(item)) {\n return false;\n }\n }\n return true;\n}\n\n// src/typed/isString.ts\nfunction isString(value) {\n return typeof value === \"string\";\n}\n\n// src/typed/isSymbol.ts\nfunction isSymbol(value) {\n return typeof value === \"symbol\";\n}\n\n// src/typed/isTagged.ts\nfunction isTagged(value, tag) {\n return Object.prototype.toString.call(value) === tag;\n}\n\n// src/typed/isUndefined.ts\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n\n// src/typed/isWeakMap.ts\nfunction isWeakMap(value) {\n return isTagged(value, \"[object WeakMap]\");\n}\n\n// src/typed/isWeakSet.ts\nfunction isWeakSet(value) {\n return isTagged(value, \"[object WeakSet]\");\n}\n\nexport { AggregateErrorOrPolyfill as AggregateError, DefaultCloningStrategy, DurationParser, FastCloningStrategy, QuantityParser, Semaphore, SemaphorePermit, TimeoutError, absoluteJitter, all, alphabetical, always, assert, assign, boil, callable, camel, capitalize, cartesianProduct, castArray, castArrayIfExists, castComparator, castMapping, chain, clamp, clone, cloneDeep, cluster, compose, concat, construct, counting, crush, dash, debounce, dedent, defer, diff, draw, escapeHTML, filterKey, first, flat, flip, fork, get, getOrInsert, getOrInsertComputed, group, guard, identity, inRange, intersects, invert, isArray, isArrayEqual, isAsyncIterable, isBigInt, isBoolean, isClass, isDangerousKey, isDate, isEmpty, isEqual, isError, isFloat, isFunction, isInt, isIntString, isIterable, isMap, isMapEqual, isNullish, isNumber, isObject, isPlainObject, isPrimitive, isPromise, isRegExp, isResult, isResultErr, isResultOk, isSet, isSetEqual, isString, isSymbol, isTagged, isUndefined, isWeakMap, isWeakSet, iterate, keys, last, lerp, list, listify, lowerize, map, mapEntries, mapKeys, mapValues, mapify, max, memo, memoLastCall, merge, min, noop, objectify, omit, once, parallel, parseDuration, parseQuantity, partial, partob, pascal, pick, pluck, promiseChain, proportionalJitter, proxied, queueByKey, random, range, reduce, remove, replace, replaceOrAppend, retry, round, select, selectFirst, series, set, shake, shift, shuffle, sift, similarity, sleep, snake, sort, sum, template, throttle, timeout, title, toFloat, toInt, toResult, toggle, traverse, trim, tryit as try, tryit, uid, unique, unzip, upperize, withResolvers, zip, zipToObject };\n","import { assign } from \"radashi\";\n\nexport const objectAssign = assign;\n","import { useRef, type DependencyList } from \"react\";\nimport { isEqual } from \"src/utils\";\n\ninterface RefObject<T> {\n deps: DependencyList;\n result: T;\n isInitialized: boolean;\n}\n\n/**\n * useCreation\n * @reference https://ahooks.js.org/zh-CN/hooks/use-creation\n *\n * @template T\n * @param {() => T} factory\n * @param {DependencyList} deps\n */\nexport function useCreation<T>(factory: () => T, deps: DependencyList) {\n const { current } = useRef<RefObject<T>>({ deps, result: undefined!, isInitialized: false });\n\n if (current.isInitialized === false || !isEqual(current.deps, deps)) {\n current.deps = deps;\n current.result = factory();\n current.isInitialized = true;\n }\n\n return current.result;\n}\n\n","import { useRef } from \"react\";\n\n/**\n * 返回当前最新值的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-latest\n *\n * @template T\n * @param {T} value\n */\nexport function useLatest<T>(value: T) {\n const ref = useRef(value);\n ref.current = value;\n\n return ref;\n}\n\n","import { useEffect, useRef, type EffectCallback } from \"react\";\nimport { isFunction, isPromiseLike } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\ntype MountCallback = EffectCallback | AsyncFunc;\n\n/**\n * 在组件初始化时执行的 Hook\n * - 即使在严格模式下也只执行一次\n * @reference https://ahooks.js.org/hooks/use-mount\n *\n * @param {MountCallback} effect 副作用函数\n */\nexport function useMount(effect: MountCallback) {\n if (!isFunction(effect)) {\n console.error(`useMount expected parameter is a function, but got ${typeof effect}`);\n }\n\n const isMountedRef = useRef(false);\n const effectRef = useLatest(effect);\n\n useEffect(() => {\n if (isMountedRef.current) {\n return;\n }\n\n isMountedRef.current = true;\n const result = effectRef.current?.();\n // If fn returns a Promise, don't return it as cleanup function\n if (isPromiseLike(result)) {\n return;\n }\n\n return result as ReturnType<EffectCallback>;\n }, []);\n}\n\n","export type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;\n/** 屏幕响应断点 token 配置 */\nexport const BREAK_POINT_TOKEN_ENUM = {\n XS: 576,\n XSMin: 576,\n XSMax: 767,\n SM: 768,\n SMMin: 768,\n SMMax: 991,\n MD: 992,\n MDMin: 992,\n MDMax: 1199,\n LG: 1200,\n LGMin: 1200,\n LGMax: 1599,\n XL: 1600,\n XLMin: 1600,\n XLMax: 1919,\n XXL: 1920,\n XXLMin: 1920,\n} as const;\n","import type { Breakpoint } from \"@pawover/types\";\nimport { useEffect, useState } from \"react\";\nimport { BREAK_POINT_TOKEN_ENUM, type BREAK_POINT_TOKEN_TYPE } from \"src/enums\";\nimport { objectAssign, objectKeys } from \"src/utils\";\n\ntype Subscriber = () => void;\ntype ResponsiveConfig = Record<Breakpoint, number>;\ntype ResponsiveValues = Record<Breakpoint, boolean>;\n\nconst subscriberList = new Set<Subscriber>();\nconst { XS, SM, MD, LG, XL, XXL } = BREAK_POINT_TOKEN_ENUM;\nconst defaultResponsiveValues: ResponsiveValues = { xxl: false, xl: false, lg: false, md: false, sm: false, xs: false };\nlet responsiveConfig: ResponsiveConfig = { xxl: XXL, xl: XL, lg: LG, md: MD, sm: SM, xs: XS };\nlet responsiveValues: ResponsiveValues = { ...defaultResponsiveValues };\n\ninterface ResponsiveHookOptions {\n /**\n * 紧凑布局断点\n * - 低于此断点时使用紧凑布局\n * @default \"xl\"\n */\n compactBreakPoint?: Breakpoint;\n /** 屏幕响应断点 token 配置 */\n breakPointTokens?: BREAK_POINT_TOKEN_TYPE;\n}\nexport function useResponsive(options?: ResponsiveHookOptions) {\n const { compactBreakPoint = \"xl\", breakPointTokens = {} } = options || {};\n const tokens: BREAK_POINT_TOKEN_TYPE = objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens);\n responsiveConfig = { xxl: tokens.XXL, xl: tokens.XL, lg: tokens.LG, md: tokens.MD, sm: tokens.SM, xs: tokens.XS };\n\n calculate();\n\n const [responsive, setResponsive] = useState<ResponsiveValues>(responsiveValues);\n const isCompact = !responsive[compactBreakPoint];\n const current = objectKeys(defaultResponsiveValues).find((key) => responsive[key] === true) || \"xs\";\n\n useEffect(() => {\n addListener();\n\n const subscriber = () => {\n setResponsive(responsiveValues);\n };\n\n subscriberList.add(subscriber);\n\n return () => {\n subscriberList.delete(subscriber);\n\n if (subscriberList.size === 0) {\n removeListener();\n }\n };\n }, []);\n\n return { responsive, current, isCompact, breakPointTokens: tokens };\n}\n\nfunction resizeListener() {\n const oldInfo = responsiveValues;\n calculate();\n\n if (oldInfo === responsiveValues) {\n return;\n }\n\n for (const subscriber of subscriberList) {\n subscriber();\n }\n}\nfunction addListener() {\n window.addEventListener(\"resize\", resizeListener);\n}\nfunction removeListener() {\n window.removeEventListener(\"resize\", resizeListener);\n}\nfunction calculate() {\n const width = window.innerWidth;\n const newValues = { ...defaultResponsiveValues };\n let shouldUpdate = false;\n\n for (const key of objectKeys(responsiveConfig)) {\n newValues[key] = width >= responsiveConfig[key];\n if (newValues[key] !== responsiveValues[key]) {\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n responsiveValues = newValues;\n }\n}\n\n","import { useEffect } from \"react\";\nimport { isFunction } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\n/**\n * 在组件卸载时执行的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount\n *\n * @param {Func} effect 副作用函数\n */\nexport function useUnmount(effect: Func) {\n if (!isFunction(effect)) {\n console.error(`useUnmount expected parameter is a function, got ${typeof effect}`);\n }\n\n const effectRef = useLatest(effect);\n\n useEffect(\n () => () => {\n effectRef.current?.();\n },\n [],\n );\n}\n\n"],"x_google_ignoreList":[7],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { Class, NonEmptyObject, Replace, SetOptional, UnionToTuple, ValueOf } from "type-fest";
|
|
2
|
+
import { assign } from "radashi";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/array/arrayCast.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 构造数组
|
|
8
|
+
* @param candidate 待构造项
|
|
9
|
+
* @param checkEmpty 是否检查 `undefined` 和 `null`
|
|
10
|
+
*/
|
|
11
|
+
declare function arrayCast<T>(candidate: T | T[], checkEmpty?: boolean): T[];
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/utils/array/arrayCompete.d.ts
|
|
14
|
+
/**
|
|
15
|
+
* 数组竞争
|
|
16
|
+
* - 返回在匹配函数的比较条件中获胜的最终项目,适用于更复杂的最小值/最大值计算
|
|
17
|
+
*
|
|
18
|
+
* @param initialList 数组
|
|
19
|
+
* @param match 匹配函数
|
|
20
|
+
*/
|
|
21
|
+
declare function arrayCompete<T>(initialList: readonly T[], match: (a: T, b: T) => T): T | null;
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/utils/array/arrayCounting.d.ts
|
|
24
|
+
/**
|
|
25
|
+
* 统计数组的项目出现次数
|
|
26
|
+
* - 通过给定的标识符匹配函数,返回一个对象,其中键是回调函数返回的 key 值,每个值是一个整数,表示该 key 出现的次数
|
|
27
|
+
*
|
|
28
|
+
* @param initialList 初始数组
|
|
29
|
+
* @param match 匹配函数
|
|
30
|
+
*/
|
|
31
|
+
declare function arrayCounting<T, K extends PropertyKey>(initialList: readonly T[], match: (row: T) => K): Record<string, number>;
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/utils/array/arrayDifference.d.ts
|
|
34
|
+
/**
|
|
35
|
+
* 求数组差集
|
|
36
|
+
*
|
|
37
|
+
* @param initialList 初始数组
|
|
38
|
+
* @param diffList 对比数组
|
|
39
|
+
* @param match 匹配函数
|
|
40
|
+
*/
|
|
41
|
+
declare function arrayDifference<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[];
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/utils/array/arrayFirst.d.ts
|
|
44
|
+
/**
|
|
45
|
+
* 获取数组第一项
|
|
46
|
+
*
|
|
47
|
+
* @param initialList 初始数组
|
|
48
|
+
* @param saveValue 安全值
|
|
49
|
+
*/
|
|
50
|
+
declare function arrayFirst<T>(initialList: readonly T[], saveValue?: T): T | undefined;
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/utils/array/arrayFork.d.ts
|
|
53
|
+
/**
|
|
54
|
+
* 数组分组过滤
|
|
55
|
+
* - 给定一个数组和一个条件,返回一个由两个数组组成的元组,其中第一个数组包含所有满足条件的项,第二个数组包含所有不满足条件的项
|
|
56
|
+
*
|
|
57
|
+
* @param initialList 初始数组
|
|
58
|
+
* @param match 条件匹配函数
|
|
59
|
+
*/
|
|
60
|
+
declare function arrayFork<T>(initialList: readonly T[], match: (item: T) => boolean): [T[], T[]];
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/utils/array/arrayIntersection.d.ts
|
|
63
|
+
/**
|
|
64
|
+
* 求数组交集
|
|
65
|
+
*
|
|
66
|
+
* @param initialList 初始数组
|
|
67
|
+
* @param diffList 对比数组
|
|
68
|
+
* @param match 匹配函数
|
|
69
|
+
*/
|
|
70
|
+
declare function arrayIntersection<T>(initialList: readonly T[], diffList: readonly T[], match?: (row: T) => unknown): T[];
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region src/utils/array/arrayLast.d.ts
|
|
73
|
+
/**
|
|
74
|
+
* 获取数组最后一项
|
|
75
|
+
*
|
|
76
|
+
* @param initialList 初始数组
|
|
77
|
+
* @param saveValue 安全值
|
|
78
|
+
*/
|
|
79
|
+
declare function arrayLast<T>(initialList: readonly T[], saveValue?: T): T | undefined;
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/utils/array/arrayMerge.d.ts
|
|
82
|
+
/**
|
|
83
|
+
* 数组合并
|
|
84
|
+
* - 通过给定的标识符匹配函数,用第二个数组中的匹配项替换第一个数组中匹配项的所有内容
|
|
85
|
+
*
|
|
86
|
+
* @param initialList 初始数组
|
|
87
|
+
* @param mergeList 待合并数组
|
|
88
|
+
* @param match 匹配函数
|
|
89
|
+
*/
|
|
90
|
+
declare function arrayMerge<T>(initialList: readonly T[], mergeList: readonly T[], match?: (item: T) => unknown): T[];
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region src/utils/array/arrayPick.d.ts
|
|
93
|
+
/**
|
|
94
|
+
* 数组选择
|
|
95
|
+
* - 一次性应用 `filter` 和 `map` 操作
|
|
96
|
+
*
|
|
97
|
+
* @param initialList 初始数组
|
|
98
|
+
* @param filter filter 函数
|
|
99
|
+
* @param mapper map 函数
|
|
100
|
+
*/
|
|
101
|
+
declare function arrayPick<T, K = T>(initialList: readonly T[], filter: (row: T, index: number) => boolean, mapper?: ((row: T, index: number) => K) | undefined): T[] | K[];
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/utils/array/arrayReplace.d.ts
|
|
104
|
+
/**
|
|
105
|
+
* 数组项替换
|
|
106
|
+
* - 在给定的数组中,替换符合匹配函数结果的项目。只替换第一个匹配项。始终返回原始数组的副本。
|
|
107
|
+
*
|
|
108
|
+
* @param initialList 初始数组
|
|
109
|
+
* @param newItem 替换项
|
|
110
|
+
* @param match 匹配函数
|
|
111
|
+
*/
|
|
112
|
+
declare function arrayReplace<T>(initialList: readonly T[], newItem: T, match: (row: T, index: number) => boolean): T[];
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/utils/array/arraySplit.d.ts
|
|
115
|
+
/**
|
|
116
|
+
* 数组切分
|
|
117
|
+
* - 将数组以指定的长度切分后,组合在高维数组中
|
|
118
|
+
*
|
|
119
|
+
* @param initialList 初始数组
|
|
120
|
+
* @param size 分割尺寸,默认 `10`
|
|
121
|
+
*/
|
|
122
|
+
declare function arraySplit<T>(initialList: readonly T[], size?: number): T[][];
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region src/utils/function/to.d.ts
|
|
125
|
+
/**
|
|
126
|
+
* @param promise
|
|
127
|
+
* @param errorExt - 可以传递给err对象的其他信息
|
|
128
|
+
*/
|
|
129
|
+
declare function to<T, U = Error>(promise: Readonly<Promise<T>>, errorExt?: UnknownObject): Promise<[U, undefined] | [null, T]>;
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/utils/object/cloneDeep.d.ts
|
|
132
|
+
interface CloningStrategy {
|
|
133
|
+
cloneMap: <K, V>(parent: Map<K, V>, track: (newParent: Map<K, V>) => Map<K, V>, clone: <T>(value: T) => T) => Map<K, V> | null;
|
|
134
|
+
cloneSet: <T>(parent: Set<T>, track: (newParent: Set<T>) => Set<T>, clone: <T>(value: T) => T) => Set<T> | null;
|
|
135
|
+
cloneArray: <T>(parent: readonly T[], track: (newParent: T[]) => T[], clone: <T>(value: T) => T) => T[] | null;
|
|
136
|
+
cloneObject: <T extends AnyObject>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;
|
|
137
|
+
cloneOther: <T>(parent: T, track: (newParent: T) => T, clone: <T>(value: T) => T) => T | null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* cloneDeep
|
|
141
|
+
* @reference https://github.com/radashi-org/radashi/blob/main/src/object/cloneDeep.ts
|
|
142
|
+
*/
|
|
143
|
+
declare function cloneDeep<T extends AnyObject>(root: T, customStrategy?: Partial<CloningStrategy>): T;
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/utils/object/enumEntries.d.ts
|
|
146
|
+
/**
|
|
147
|
+
* 返回枚举的属性的键/值数组
|
|
148
|
+
*
|
|
149
|
+
* @param enumeration 枚举
|
|
150
|
+
*/
|
|
151
|
+
declare function enumEntries<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, E[keyof E]][];
|
|
152
|
+
//#endregion
|
|
153
|
+
//#region src/utils/object/enumKeys.d.ts
|
|
154
|
+
/**
|
|
155
|
+
* 获取枚举所有属性的键
|
|
156
|
+
*
|
|
157
|
+
* @param enumeration 枚举
|
|
158
|
+
*/
|
|
159
|
+
declare function enumKeys<E extends AnyObject>(enumeration: NonEmptyObject<E>): [keyof E, ...(keyof E)[]];
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/utils/object/enumTypeCheck.d.ts
|
|
162
|
+
declare function enumTypeCheck<E extends AnyObject>(enumeration: E): E & Record<PropertyKey, unknown>;
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region src/utils/object/enumValues.d.ts
|
|
165
|
+
/**
|
|
166
|
+
* 获取枚举所有属性的值
|
|
167
|
+
*
|
|
168
|
+
* @param enumeration 枚举
|
|
169
|
+
*/
|
|
170
|
+
declare function enumValues<E extends AnyObject>(enumeration: NonEmptyObject<E>): UnionToTuple<ValueOf<E>>;
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region src/utils/object/mapEntries.d.ts
|
|
173
|
+
declare function mapEntries<TKey extends PropertyKey, TValue, TNewKey extends PropertyKey, TNewValue>(obj: UnknownObject<TKey, TValue>, toEntry: (key: TKey, value: TValue) => [TNewKey, TNewValue]): UnknownObject<TNewKey, TNewValue>;
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/utils/object/objectAssign.d.ts
|
|
176
|
+
declare const objectAssign: typeof assign;
|
|
177
|
+
//#endregion
|
|
178
|
+
//#region src/utils/object/objectEntries.d.ts
|
|
179
|
+
/**
|
|
180
|
+
* 返回对象的可枚举属性的键/值数组
|
|
181
|
+
*
|
|
182
|
+
* @param obj 对象
|
|
183
|
+
*/
|
|
184
|
+
declare function objectEntries<O extends AnyObject>(obj: O): [string & keyof O, O[keyof O]][];
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/utils/object/objectKeys.d.ts
|
|
187
|
+
/**
|
|
188
|
+
* 返回对象的可枚举属性和方法的名称
|
|
189
|
+
* - `Object.keys` 始终返回 `string[]` 类型,此函数可以返回具体类型
|
|
190
|
+
*
|
|
191
|
+
* @param obj 对象
|
|
192
|
+
*/
|
|
193
|
+
declare function objectKeys<O extends AnyObject>(obj: O): (keyof O)[];
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/utils/object/objectPick.d.ts
|
|
196
|
+
declare function objectPick<O extends AnyObject, K extends keyof O>(obj: O, keys: readonly K[]): Pick<O, K>;
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region src/utils/object/objectSwitch.d.ts
|
|
199
|
+
/**
|
|
200
|
+
* 对象反转
|
|
201
|
+
* - 返回交换了对象的可枚举属性的值/键对象
|
|
202
|
+
*
|
|
203
|
+
* @param obj 对象
|
|
204
|
+
*/
|
|
205
|
+
declare function objectSwitch<O extends AnyObject>(obj: NonEmptyObject<O>): Record<O[keyof O], keyof O>;
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region src/utils/object/objectValues.d.ts
|
|
208
|
+
/**
|
|
209
|
+
* 返回对象的可枚举属性的值数组
|
|
210
|
+
*
|
|
211
|
+
* @param obj 对象
|
|
212
|
+
*/
|
|
213
|
+
declare function objectValues<O extends AnyObject>(obj: O): UnionToTuple<ValueOf<O>>;
|
|
214
|
+
//#endregion
|
|
215
|
+
//#region src/utils/string/stringInitialCase.d.ts
|
|
216
|
+
/**
|
|
217
|
+
* 首字母大小写
|
|
218
|
+
*/
|
|
219
|
+
declare function stringInitialCase(value: string, type: "lower" | "upper"): string;
|
|
220
|
+
//#endregion
|
|
221
|
+
//#region src/utils/string/stringReplace.d.ts
|
|
222
|
+
declare function stringReplace<I extends string, S extends string, R extends string>(input: I, search: S, replacement: R): Replace<I, S, R>;
|
|
223
|
+
//#endregion
|
|
224
|
+
//#region src/utils/string/stringToJson.d.ts
|
|
225
|
+
declare function stringToJson<R extends AnyObject = AnyObject, D extends R = R>(data: string | null | undefined, safeValue: D): R;
|
|
226
|
+
//#endregion
|
|
227
|
+
//#region src/utils/string/stringToValues.d.ts
|
|
228
|
+
declare function stringToValues<T extends number | string = number>(data: string | null | undefined, valueType?: "number" | "string", splitSymbol?: string): T[];
|
|
229
|
+
//#endregion
|
|
230
|
+
//#region src/utils/tree/types.d.ts
|
|
231
|
+
type RowKey = "id";
|
|
232
|
+
type ParentIdKey = "parentId";
|
|
233
|
+
type ChildrenKey = "children";
|
|
234
|
+
type Strategy = "pre" | "post" | "breadth";
|
|
235
|
+
interface BaseCallbackMeta<T> {
|
|
236
|
+
depth: number;
|
|
237
|
+
parents?: T[];
|
|
238
|
+
}
|
|
239
|
+
interface BaseOptions<T, CK extends string> {
|
|
240
|
+
childrenKey?: CK;
|
|
241
|
+
strategy?: Strategy;
|
|
242
|
+
getChildrenKey?: (row: T, meta: BaseCallbackMeta<T>) => CK | undefined;
|
|
243
|
+
}
|
|
244
|
+
//#endregion
|
|
245
|
+
//#region src/utils/tree/treeFilter.d.ts
|
|
246
|
+
type TreeFilterOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;
|
|
247
|
+
type TreeFilterCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;
|
|
248
|
+
declare function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T[];
|
|
249
|
+
declare function treeFilter<T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeFilterCallback<T>, options?: TreeFilterOptions<T, CK>): T;
|
|
250
|
+
//#endregion
|
|
251
|
+
//#region src/utils/tree/treeFind.d.ts
|
|
252
|
+
type TreeFindOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;
|
|
253
|
+
type TreeFindCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => boolean;
|
|
254
|
+
/**
|
|
255
|
+
* 查找树节点,找到第一个返回非空值的节点
|
|
256
|
+
*/
|
|
257
|
+
declare function treeFind<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeFindCallback<T>, options?: TreeFindOptions<T, CK>): T | undefined;
|
|
258
|
+
//#endregion
|
|
259
|
+
//#region src/utils/tree/treeForEach.d.ts
|
|
260
|
+
type TreeForeachOptions<T extends AnyObject, CK extends string = ChildrenKey> = BaseOptions<T, CK>;
|
|
261
|
+
type TreeForeachCallback<T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => void;
|
|
262
|
+
declare function treeForEach<T extends AnyObject, CK extends string = ChildrenKey>(tree: T | T[], callback: TreeForeachCallback<T>, options?: TreeForeachOptions<T, CK>): void;
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/utils/tree/treeMap.d.ts
|
|
265
|
+
type TreeMapOptions<T extends AnyObject, CK extends string> = BaseOptions<T, CK>;
|
|
266
|
+
type TreeMapCallback<R extends AnyObject, T extends AnyObject> = (row: T, meta: BaseCallbackMeta<T>) => R;
|
|
267
|
+
declare function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T[], callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>[];
|
|
268
|
+
declare function treeMap<R extends AnyObject, T extends AnyObject, CK extends string = ChildrenKey>(tree: T, callback: TreeMapCallback<R, T>, options?: TreeMapOptions<T, CK>): TreeLike<R, CK>;
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region src/utils/tree/rowsToTree.d.ts
|
|
271
|
+
interface RowsToTreeOptions<RK extends string = RowKey, PK extends string = ParentIdKey, CK extends string = ChildrenKey> {
|
|
272
|
+
rowKey?: RK;
|
|
273
|
+
parentIdKey?: PK;
|
|
274
|
+
childrenKey?: CK;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* 行结构 转 树结构
|
|
278
|
+
*/
|
|
279
|
+
declare function rowsToTree<T extends AnyObject = AnyObject, CK extends string = ChildrenKey, R = TreeLike<T, CK>, RK extends string = RowKey, PK extends string = ParentIdKey>(rows: T[], options?: RowsToTreeOptions<RK, PK, CK> | undefined): R[];
|
|
280
|
+
//#endregion
|
|
281
|
+
//#region src/utils/tree/treeToRows.d.ts
|
|
282
|
+
type TreeToRowsOptions<T extends AnyObject, CK extends string = ChildrenKey> = TreeForeachOptions<T, CK>;
|
|
283
|
+
/**
|
|
284
|
+
* 树结构 转 行结构
|
|
285
|
+
*/
|
|
286
|
+
declare function treeToRows<T extends AnyObject, CK extends string = ChildrenKey, R extends AnyObject = SetOptional<T, CK>>(tree: T | T[], options?: TreeToRowsOptions<T, CK>): R[];
|
|
287
|
+
//#endregion
|
|
288
|
+
//#region src/utils/typeof/isArray.d.ts
|
|
289
|
+
declare function isArray<T extends unknown[]>(value: unknown): value is T;
|
|
290
|
+
//#endregion
|
|
291
|
+
//#region src/utils/typeof/isAsyncFunction.d.ts
|
|
292
|
+
declare function isAsyncFunction<T extends AsyncFunc>(value: unknown): value is T;
|
|
293
|
+
//#endregion
|
|
294
|
+
//#region src/utils/typeof/isBigInt.d.ts
|
|
295
|
+
declare function isBigInt<T extends bigint>(value: unknown): value is T;
|
|
296
|
+
//#endregion
|
|
297
|
+
//#region src/utils/typeof/isBoolean.d.ts
|
|
298
|
+
declare function isBoolean<T extends boolean>(value: unknown): value is T;
|
|
299
|
+
//#endregion
|
|
300
|
+
//#region src/utils/typeof/isClass.d.ts
|
|
301
|
+
declare function isClass<T extends Class<AnyObject>>(value: unknown): value is T;
|
|
302
|
+
//#endregion
|
|
303
|
+
//#region src/utils/typeof/isDate.d.ts
|
|
304
|
+
declare function isDate<T extends Date>(value: unknown): value is T;
|
|
305
|
+
//#endregion
|
|
306
|
+
//#region src/utils/typeof/isEqual.d.ts
|
|
307
|
+
/**
|
|
308
|
+
* 判断给定的值是否相等
|
|
309
|
+
* @reference https://github.com/radashi-org/radashi/blob/main/src/typed/isEqual.ts
|
|
310
|
+
*
|
|
311
|
+
* @param {T} x
|
|
312
|
+
* @param {T} y
|
|
313
|
+
*/
|
|
314
|
+
declare function isEqual<T>(x: T, y: T): boolean;
|
|
315
|
+
//#endregion
|
|
316
|
+
//#region src/utils/typeof/isError.d.ts
|
|
317
|
+
declare function isError<T extends Error>(value: unknown): value is T;
|
|
318
|
+
//#endregion
|
|
319
|
+
//#region src/utils/typeof/isFile.d.ts
|
|
320
|
+
declare function isFile<T extends File>(value: unknown): value is T;
|
|
321
|
+
//#endregion
|
|
322
|
+
//#region src/utils/typeof/isFunction.d.ts
|
|
323
|
+
declare function isFunction<T extends Func>(value: unknown): value is T;
|
|
324
|
+
//#endregion
|
|
325
|
+
//#region src/utils/typeof/isGeneratorFunction.d.ts
|
|
326
|
+
declare function isGeneratorFunction<T extends Func>(value: unknown): value is T;
|
|
327
|
+
//#endregion
|
|
328
|
+
//#region src/utils/typeof/isInteger.d.ts
|
|
329
|
+
declare function isInteger<T extends number>(value: unknown): value is T;
|
|
330
|
+
//#endregion
|
|
331
|
+
//#region src/utils/typeof/isIterable.d.ts
|
|
332
|
+
declare function isIterable<T extends Iterable<unknown>>(value: unknown): value is T;
|
|
333
|
+
//#endregion
|
|
334
|
+
//#region src/utils/typeof/isMap.d.ts
|
|
335
|
+
declare function isMap<T extends Map<unknown, unknown>>(value: unknown): value is T;
|
|
336
|
+
//#endregion
|
|
337
|
+
//#region src/utils/typeof/isNull.d.ts
|
|
338
|
+
declare function isNull<T extends null>(value: unknown): value is T;
|
|
339
|
+
//#endregion
|
|
340
|
+
//#region src/utils/typeof/isNumber.d.ts
|
|
341
|
+
declare function isNumber<T extends number>(value: unknown): value is T;
|
|
342
|
+
//#endregion
|
|
343
|
+
//#region src/utils/typeof/isObject.d.ts
|
|
344
|
+
declare function isObject<T extends Record<PropertyKey, unknown>>(value: unknown): value is T;
|
|
345
|
+
//#endregion
|
|
346
|
+
//#region src/utils/typeof/isPromise.d.ts
|
|
347
|
+
declare function isPromise<T extends Promise<unknown>>(value: unknown): value is T;
|
|
348
|
+
//#endregion
|
|
349
|
+
//#region src/utils/typeof/isPromiseLike.d.ts
|
|
350
|
+
declare function isPromiseLike<T extends PromiseLike<unknown>>(value: unknown): value is T;
|
|
351
|
+
//#endregion
|
|
352
|
+
//#region src/utils/typeof/isRegExp.d.ts
|
|
353
|
+
declare function isRegExp<T extends RegExp>(value: unknown): value is T;
|
|
354
|
+
//#endregion
|
|
355
|
+
//#region src/utils/typeof/isSet.d.ts
|
|
356
|
+
declare function isSet<T extends Set<unknown>>(value: unknown): value is T;
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region src/utils/typeof/isString.d.ts
|
|
359
|
+
declare function isString<T extends string>(value: unknown): value is T;
|
|
360
|
+
//#endregion
|
|
361
|
+
//#region src/utils/typeof/isSymbol.d.ts
|
|
362
|
+
declare function isSymbol<T extends symbol>(value: unknown): value is T;
|
|
363
|
+
//#endregion
|
|
364
|
+
//#region src/utils/typeof/isUndefined.d.ts
|
|
365
|
+
declare function isUndefined<T extends undefined>(value: unknown): value is T;
|
|
366
|
+
//#endregion
|
|
367
|
+
//#region src/utils/typeof/isURLSearchParams.d.ts
|
|
368
|
+
declare function isURLSearchParams<T extends Window>(value: unknown): value is T;
|
|
369
|
+
//#endregion
|
|
370
|
+
//#region src/utils/typeof/isWeakMap.d.ts
|
|
371
|
+
declare function isWeakMap<T extends WeakMap<AnyObject, unknown>>(value: unknown): value is T;
|
|
372
|
+
//#endregion
|
|
373
|
+
//#region src/utils/typeof/isWeakSet.d.ts
|
|
374
|
+
declare function isWeakSet<T extends WeakSet<AnyObject>>(value: unknown): value is T;
|
|
375
|
+
//#endregion
|
|
376
|
+
//#region src/utils/typeof/isWebSocket.d.ts
|
|
377
|
+
declare function isWebSocket<T extends WebSocket>(value: unknown): value is T;
|
|
378
|
+
//#endregion
|
|
379
|
+
//#region src/utils/typeof/isWindow.d.ts
|
|
380
|
+
declare function isWindow<T extends Window>(value: unknown): value is T;
|
|
381
|
+
//#endregion
|
|
382
|
+
export { arrayCast, arrayCompete, arrayCounting, arrayDifference, arrayFirst, arrayFork, arrayIntersection, arrayLast, arrayMerge, arrayPick, arrayReplace, arraySplit, cloneDeep, enumEntries, enumKeys, enumTypeCheck, enumValues, isArray, isAsyncFunction, isBigInt, isBoolean, isClass, isDate, isEqual, isError, isFile, isFunction, isGeneratorFunction, isInteger, isIterable, isMap, isNull, isNumber, isObject, isPromise, isPromiseLike, isRegExp, isSet, isString, isSymbol, isURLSearchParams, isUndefined, isWeakMap, isWeakSet, isWebSocket, isWindow, mapEntries, objectAssign, objectEntries, objectKeys, objectPick, objectSwitch, objectValues, rowsToTree, stringInitialCase, stringReplace, stringToJson, stringToValues, to, treeFilter, treeFind, treeForEach, treeMap, treeToRows };
|
|
383
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/utils/array/arrayCast.ts","../src/utils/array/arrayCompete.ts","../src/utils/array/arrayCounting.ts","../src/utils/array/arrayDifference.ts","../src/utils/array/arrayFirst.ts","../src/utils/array/arrayFork.ts","../src/utils/array/arrayIntersection.ts","../src/utils/array/arrayLast.ts","../src/utils/array/arrayMerge.ts","../src/utils/array/arrayPick.ts","../src/utils/array/arrayReplace.ts","../src/utils/array/arraySplit.ts","../src/utils/function/to.ts","../src/utils/object/cloneDeep.ts","../src/utils/object/enumEntries.ts","../src/utils/object/enumKeys.ts","../src/utils/object/enumTypeCheck.ts","../src/utils/object/enumValues.ts","../src/utils/object/mapEntries.ts","../src/utils/object/objectAssign.ts","../src/utils/object/objectEntries.ts","../src/utils/object/objectKeys.ts","../src/utils/object/objectPick.ts","../src/utils/object/objectSwitch.ts","../src/utils/object/objectValues.ts","../src/utils/string/stringInitialCase.ts","../src/utils/string/stringReplace.ts","../src/utils/string/stringToJson.ts","../src/utils/string/stringToValues.ts","../src/utils/tree/types.ts","../src/utils/tree/treeFilter.ts","../src/utils/tree/treeFind.ts","../src/utils/tree/treeForEach.ts","../src/utils/tree/treeMap.ts","../src/utils/tree/rowsToTree.ts","../src/utils/tree/treeToRows.ts","../src/utils/typeof/isArray.ts","../src/utils/typeof/isAsyncFunction.ts","../src/utils/typeof/isBigInt.ts","../src/utils/typeof/isBoolean.ts","../src/utils/typeof/isClass.ts","../src/utils/typeof/isDate.ts","../src/utils/typeof/isEqual.ts","../src/utils/typeof/isError.ts","../src/utils/typeof/isFile.ts","../src/utils/typeof/isFunction.ts","../src/utils/typeof/isGeneratorFunction.ts","../src/utils/typeof/isInteger.ts","../src/utils/typeof/isIterable.ts","../src/utils/typeof/isMap.ts","../src/utils/typeof/isNull.ts","../src/utils/typeof/isNumber.ts","../src/utils/typeof/isObject.ts","../src/utils/typeof/isPromise.ts","../src/utils/typeof/isPromiseLike.ts","../src/utils/typeof/isRegExp.ts","../src/utils/typeof/isSet.ts","../src/utils/typeof/isString.ts","../src/utils/typeof/isSymbol.ts","../src/utils/typeof/isUndefined.ts","../src/utils/typeof/isURLSearchParams.ts","../src/utils/typeof/isWeakMap.ts","../src/utils/typeof/isWeakSet.ts","../src/utils/typeof/isWebSocket.ts","../src/utils/typeof/isWindow.ts"],"sourcesContent":[],"mappings":"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"}
|