@tanwan/utils 1.1.0 → 1.2.0
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/CHANGELOG.md +19 -0
- package/dist/addClass.cjs +19 -0
- package/dist/addClass.d.cts +16 -0
- package/dist/addClass.d.ts +17 -0
- package/dist/addClass.js +19 -0
- package/dist/{string/camelCase.d.cts → camelCase.d.cts} +1 -2
- package/dist/{string/camelCase.d.ts → camelCase.d.ts} +1 -2
- package/dist/{string/camelCase.js → camelCase.js} +0 -2
- package/dist/{string/capitalize.d.cts → capitalize.d.cts} +1 -2
- package/dist/{string/capitalize.d.ts → capitalize.d.ts} +1 -2
- package/dist/{string/capitalize.js → capitalize.js} +0 -2
- package/dist/{array/chunk.d.cts → chunk.d.cts} +1 -2
- package/dist/{array/chunk.d.ts → chunk.d.ts} +1 -2
- package/dist/{array/chunk.js → chunk.js} +0 -2
- package/dist/{number/clamp.d.cts → clamp.d.cts} +1 -2
- package/dist/{number/clamp.d.ts → clamp.d.ts} +1 -2
- package/dist/{number/clamp.js → clamp.js} +0 -2
- package/dist/convertCurrencyToChinese.cjs +56 -0
- package/dist/convertCurrencyToChinese.d.cts +18 -0
- package/dist/convertCurrencyToChinese.d.ts +19 -0
- package/dist/convertCurrencyToChinese.js +56 -0
- package/dist/copyToClipboard.cjs +38 -0
- package/dist/copyToClipboard.d.cts +17 -0
- package/dist/copyToClipboard.d.ts +18 -0
- package/dist/copyToClipboard.js +38 -0
- package/dist/createElement.cjs +27 -0
- package/dist/createElement.d.cts +21 -0
- package/dist/createElement.d.ts +22 -0
- package/dist/createElement.js +27 -0
- package/dist/{function/debounce.d.cts → debounce.d.cts} +1 -2
- package/dist/{function/debounce.d.ts → debounce.d.ts} +1 -2
- package/dist/{function/debounce.js → debounce.js} +0 -2
- package/dist/debounceSubmit.cjs +34 -0
- package/dist/debounceSubmit.d.cts +22 -0
- package/dist/debounceSubmit.d.ts +23 -0
- package/dist/debounceSubmit.js +34 -0
- package/dist/decodeBase64.cjs +19 -0
- package/dist/decodeBase64.d.cts +16 -0
- package/dist/decodeBase64.d.ts +17 -0
- package/dist/decodeBase64.js +19 -0
- package/dist/{base/deepClone.cjs → deepClone.cjs} +2 -2
- package/dist/{base/deepClone.d.cts → deepClone.d.cts} +1 -2
- package/dist/{base/deepClone.d.ts → deepClone.d.ts} +1 -2
- package/dist/{base/deepClone.js → deepClone.js} +0 -2
- package/dist/deepMerge.cjs +39 -0
- package/dist/deepMerge.d.cts +25 -0
- package/dist/deepMerge.d.ts +26 -0
- package/dist/deepMerge.js +39 -0
- package/dist/{function/delay.d.cts → delay.d.cts} +1 -2
- package/dist/{function/delay.d.ts → delay.d.ts} +1 -2
- package/dist/{function/delay.js → delay.js} +0 -2
- package/dist/difference.cjs +24 -0
- package/dist/difference.d.cts +20 -0
- package/dist/difference.d.ts +21 -0
- package/dist/difference.js +24 -0
- package/dist/downloadFile.cjs +31 -0
- package/dist/downloadFile.d.cts +20 -0
- package/dist/downloadFile.d.ts +21 -0
- package/dist/downloadFile.js +31 -0
- package/dist/encodeBase64.cjs +20 -0
- package/dist/encodeBase64.d.cts +17 -0
- package/dist/encodeBase64.d.ts +18 -0
- package/dist/encodeBase64.js +20 -0
- package/dist/{array/flatten.d.cts → flatten.d.cts} +1 -2
- package/dist/{array/flatten.d.ts → flatten.d.ts} +1 -2
- package/dist/{array/flatten.js → flatten.js} +0 -2
- package/dist/formatBankCard.cjs +19 -0
- package/dist/formatBankCard.d.cts +16 -0
- package/dist/formatBankCard.d.ts +17 -0
- package/dist/formatBankCard.js +19 -0
- package/dist/formatCurrency.cjs +7 -0
- package/dist/formatCurrency.d.cts +27 -0
- package/dist/formatCurrency.d.ts +28 -0
- package/dist/formatCurrency.js +7 -0
- package/dist/{date/formatDate.d.cts → formatDate.d.cts} +1 -2
- package/dist/{date/formatDate.d.ts → formatDate.d.ts} +1 -2
- package/dist/{date/formatDate.js → formatDate.js} +0 -2
- package/dist/formatFileSize.cjs +33 -0
- package/dist/formatFileSize.d.cts +19 -0
- package/dist/formatFileSize.d.ts +20 -0
- package/dist/formatFileSize.js +33 -0
- package/dist/formatIdCard.cjs +21 -0
- package/dist/formatIdCard.d.cts +17 -0
- package/dist/formatIdCard.d.ts +18 -0
- package/dist/formatIdCard.js +21 -0
- package/dist/formatPhone.cjs +21 -0
- package/dist/formatPhone.d.cts +17 -0
- package/dist/formatPhone.d.ts +18 -0
- package/dist/formatPhone.js +21 -0
- package/dist/{number/formatThousands.d.cts → formatThousands.d.cts} +1 -2
- package/dist/{number/formatThousands.d.ts → formatThousands.d.ts} +1 -2
- package/dist/{number/formatThousands.js → formatThousands.js} +0 -2
- package/dist/generateCode.cjs +29 -0
- package/dist/generateCode.d.cts +19 -0
- package/dist/generateCode.d.ts +20 -0
- package/dist/generateCode.js +29 -0
- package/dist/getAge.cjs +30 -0
- package/dist/getAge.d.cts +18 -0
- package/dist/getAge.d.ts +19 -0
- package/dist/getAge.js +30 -0
- package/dist/getByPath.cjs +29 -0
- package/dist/getByPath.d.cts +20 -0
- package/dist/getByPath.d.ts +21 -0
- package/dist/getByPath.js +29 -0
- package/dist/getCssVar.cjs +22 -0
- package/dist/getCssVar.d.cts +18 -0
- package/dist/getCssVar.d.ts +19 -0
- package/dist/getCssVar.js +22 -0
- package/dist/{date/getRelativeTime.d.cts → getRelativeTime.d.cts} +1 -2
- package/dist/{date/getRelativeTime.d.ts → getRelativeTime.d.ts} +1 -2
- package/dist/{date/getRelativeTime.js → getRelativeTime.js} +0 -2
- package/dist/getScrollTop.cjs +28 -0
- package/dist/getScrollTop.d.cts +18 -0
- package/dist/getScrollTop.d.ts +19 -0
- package/dist/getScrollTop.js +28 -0
- package/dist/getStorage.cjs +27 -0
- package/dist/getStorage.d.cts +18 -0
- package/dist/getStorage.d.ts +19 -0
- package/dist/getStorage.js +27 -0
- package/dist/getStyle.cjs +20 -0
- package/dist/getStyle.d.cts +17 -0
- package/dist/getStyle.d.ts +18 -0
- package/dist/getStyle.js +20 -0
- package/dist/getTextWidth.cjs +26 -0
- package/dist/getTextWidth.d.cts +16 -0
- package/dist/getTextWidth.d.ts +17 -0
- package/dist/getTextWidth.js +26 -0
- package/dist/{array/groupBy.d.cts → groupBy.d.cts} +1 -2
- package/dist/{array/groupBy.d.ts → groupBy.d.ts} +1 -2
- package/dist/{array/groupBy.js → groupBy.js} +0 -2
- package/dist/hasClass.cjs +19 -0
- package/dist/hasClass.d.cts +16 -0
- package/dist/hasClass.d.ts +17 -0
- package/dist/hasClass.js +19 -0
- package/dist/index.cjs +180 -54
- package/dist/index.d.cts +91 -28
- package/dist/index.d.ts +91 -28
- package/dist/index.iife.js +1 -1
- package/dist/index.js +91 -28
- package/dist/insertAfter.cjs +19 -0
- package/dist/insertAfter.d.cts +15 -0
- package/dist/insertAfter.d.ts +16 -0
- package/dist/insertAfter.js +19 -0
- package/dist/intersection.cjs +24 -0
- package/dist/intersection.d.cts +20 -0
- package/dist/intersection.d.ts +21 -0
- package/dist/intersection.js +24 -0
- package/dist/invert.cjs +21 -0
- package/dist/invert.d.cts +16 -0
- package/dist/invert.d.ts +17 -0
- package/dist/invert.js +21 -0
- package/dist/{base/isArray.d.cts → isArray.d.cts} +1 -2
- package/dist/{base/isArray.d.ts → isArray.d.ts} +1 -2
- package/dist/{base/isArray.js → isArray.js} +0 -2
- package/dist/isBrowser.cjs +17 -0
- package/dist/isBrowser.d.cts +14 -0
- package/dist/isBrowser.d.ts +15 -0
- package/dist/isBrowser.js +17 -0
- package/dist/isDate.cjs +18 -0
- package/dist/isDate.d.cts +15 -0
- package/dist/isDate.d.ts +16 -0
- package/dist/isDate.js +18 -0
- package/dist/{base/isEmpty.cjs → isEmpty.cjs} +2 -2
- package/dist/{base/isEmpty.d.cts → isEmpty.d.cts} +1 -2
- package/dist/{base/isEmpty.d.ts → isEmpty.d.ts} +1 -2
- package/dist/{base/isEmpty.js → isEmpty.js} +0 -2
- package/dist/isFunction.cjs +19 -0
- package/dist/isFunction.d.cts +16 -0
- package/dist/isFunction.d.ts +17 -0
- package/dist/isFunction.js +19 -0
- package/dist/isInViewport.cjs +22 -0
- package/dist/isInViewport.d.cts +17 -0
- package/dist/isInViewport.d.ts +18 -0
- package/dist/isInViewport.js +22 -0
- package/dist/isNil.cjs +19 -0
- package/dist/isNil.d.cts +16 -0
- package/dist/isNil.d.ts +17 -0
- package/dist/isNil.js +19 -0
- package/dist/isNumber.cjs +19 -0
- package/dist/isNumber.d.cts +16 -0
- package/dist/isNumber.d.ts +17 -0
- package/dist/isNumber.js +19 -0
- package/dist/{base/isObject.d.cts → isObject.d.cts} +1 -2
- package/dist/{base/isObject.d.ts → isObject.d.ts} +1 -2
- package/dist/{base/isObject.js → isObject.js} +0 -2
- package/dist/isPrimitive.cjs +21 -0
- package/dist/isPrimitive.d.cts +18 -0
- package/dist/isPrimitive.d.ts +19 -0
- package/dist/isPrimitive.js +21 -0
- package/dist/isPromise.cjs +18 -0
- package/dist/isPromise.d.cts +15 -0
- package/dist/isPromise.d.ts +16 -0
- package/dist/isPromise.js +18 -0
- package/dist/{base/isString.d.cts → isString.d.cts} +1 -2
- package/dist/{base/isString.d.ts → isString.d.ts} +1 -2
- package/dist/{base/isString.js → isString.js} +0 -2
- package/dist/joinUrl.cjs +25 -0
- package/dist/joinUrl.d.cts +19 -0
- package/dist/joinUrl.d.ts +20 -0
- package/dist/joinUrl.js +25 -0
- package/dist/{string/kebabCase.d.cts → kebabCase.d.cts} +1 -2
- package/dist/{string/kebabCase.d.ts → kebabCase.d.ts} +1 -2
- package/dist/{string/kebabCase.js → kebabCase.js} +0 -2
- package/dist/lazyLoadImages.cjs +36 -0
- package/dist/lazyLoadImages.d.cts +19 -0
- package/dist/lazyLoadImages.d.ts +20 -0
- package/dist/lazyLoadImages.js +36 -0
- package/dist/listToTree.cjs +25 -0
- package/dist/listToTree.d.cts +32 -0
- package/dist/listToTree.d.ts +33 -0
- package/dist/listToTree.js +25 -0
- package/dist/mapValues.cjs +25 -0
- package/dist/mapValues.d.cts +20 -0
- package/dist/mapValues.d.ts +21 -0
- package/dist/mapValues.js +25 -0
- package/dist/maskString.cjs +28 -0
- package/dist/maskString.d.cts +24 -0
- package/dist/maskString.d.ts +25 -0
- package/dist/maskString.js +28 -0
- package/dist/memoize.cjs +32 -0
- package/dist/memoize.d.cts +22 -0
- package/dist/memoize.d.ts +23 -0
- package/dist/memoize.js +32 -0
- package/dist/off.cjs +22 -0
- package/dist/off.d.cts +19 -0
- package/dist/off.d.ts +20 -0
- package/dist/off.js +22 -0
- package/dist/{object/omit.d.cts → omit.d.cts} +1 -2
- package/dist/{object/omit.d.ts → omit.d.ts} +1 -2
- package/dist/{object/omit.js → omit.js} +0 -2
- package/dist/on.cjs +21 -0
- package/dist/on.d.cts +18 -0
- package/dist/on.d.ts +19 -0
- package/dist/on.js +21 -0
- package/dist/once.cjs +31 -0
- package/dist/once.d.cts +20 -0
- package/dist/once.d.ts +21 -0
- package/dist/once.js +31 -0
- package/dist/{url/parseQueryString.d.cts → parseQueryString.d.cts} +1 -2
- package/dist/{url/parseQueryString.d.ts → parseQueryString.d.ts} +1 -2
- package/dist/{url/parseQueryString.js → parseQueryString.js} +0 -2
- package/dist/pascalCase.cjs +18 -0
- package/dist/pascalCase.d.cts +15 -0
- package/dist/pascalCase.d.ts +16 -0
- package/dist/pascalCase.js +18 -0
- package/dist/{object/pick.d.cts → pick.d.cts} +1 -2
- package/dist/{object/pick.d.ts → pick.d.ts} +1 -2
- package/dist/{object/pick.js → pick.js} +0 -2
- package/dist/{number/randomInt.d.cts → randomInt.d.cts} +1 -2
- package/dist/{number/randomInt.d.ts → randomInt.d.ts} +1 -2
- package/dist/{number/randomInt.js → randomInt.js} +0 -2
- package/dist/{array/range.d.cts → range.d.cts} +1 -2
- package/dist/{array/range.d.ts → range.d.ts} +1 -2
- package/dist/{array/range.js → range.js} +0 -2
- package/dist/removeClass.cjs +19 -0
- package/dist/removeClass.d.cts +16 -0
- package/dist/removeClass.d.ts +17 -0
- package/dist/removeClass.js +19 -0
- package/dist/removeElement.cjs +17 -0
- package/dist/removeElement.d.cts +14 -0
- package/dist/removeElement.d.ts +15 -0
- package/dist/removeElement.js +17 -0
- package/dist/removeStorage.cjs +19 -0
- package/dist/removeStorage.d.cts +14 -0
- package/dist/removeStorage.d.ts +15 -0
- package/dist/removeStorage.js +19 -0
- package/dist/retry.cjs +27 -0
- package/dist/retry.d.cts +17 -0
- package/dist/retry.d.ts +18 -0
- package/dist/retry.js +27 -0
- package/dist/sample.cjs +20 -0
- package/dist/sample.d.cts +16 -0
- package/dist/sample.d.ts +17 -0
- package/dist/sample.js +20 -0
- package/dist/scrollToElement.cjs +23 -0
- package/dist/scrollToElement.d.cts +16 -0
- package/dist/scrollToElement.d.ts +17 -0
- package/dist/scrollToElement.js +23 -0
- package/dist/setCssVar.cjs +22 -0
- package/dist/setCssVar.d.cts +18 -0
- package/dist/setCssVar.d.ts +19 -0
- package/dist/setCssVar.js +22 -0
- package/dist/setStorage.cjs +25 -0
- package/dist/setStorage.d.cts +17 -0
- package/dist/setStorage.d.ts +18 -0
- package/dist/setStorage.js +25 -0
- package/dist/setStyle.cjs +22 -0
- package/dist/setStyle.d.cts +19 -0
- package/dist/setStyle.d.ts +20 -0
- package/dist/setStyle.js +22 -0
- package/dist/{array/shuffle.d.cts → shuffle.d.cts} +1 -2
- package/dist/{array/shuffle.d.ts → shuffle.d.ts} +1 -2
- package/dist/{array/shuffle.js → shuffle.js} +0 -2
- package/dist/snakeCase.cjs +18 -0
- package/dist/snakeCase.d.cts +15 -0
- package/dist/snakeCase.d.ts +16 -0
- package/dist/snakeCase.js +18 -0
- package/dist/sortBy.cjs +30 -0
- package/dist/sortBy.d.cts +20 -0
- package/dist/sortBy.d.ts +21 -0
- package/dist/sortBy.js +30 -0
- package/dist/{url/stringifyQueryString.d.cts → stringifyQueryString.d.cts} +1 -2
- package/dist/{url/stringifyQueryString.d.ts → stringifyQueryString.d.ts} +1 -2
- package/dist/{url/stringifyQueryString.js → stringifyQueryString.js} +0 -2
- package/dist/{function/throttle.d.cts → throttle.d.cts} +1 -2
- package/dist/{function/throttle.d.ts → throttle.d.ts} +1 -2
- package/dist/{function/throttle.js → throttle.js} +0 -2
- package/dist/toggleClass.cjs +22 -0
- package/dist/toggleClass.d.cts +19 -0
- package/dist/toggleClass.d.ts +20 -0
- package/dist/toggleClass.js +22 -0
- package/dist/treeFind.cjs +34 -0
- package/dist/treeFind.d.cts +25 -0
- package/dist/treeFind.d.ts +26 -0
- package/dist/treeFind.js +34 -0
- package/dist/treeToList.cjs +33 -0
- package/dist/treeToList.d.cts +24 -0
- package/dist/treeToList.d.ts +25 -0
- package/dist/treeToList.js +33 -0
- package/dist/truncate.cjs +23 -0
- package/dist/truncate.d.cts +19 -0
- package/dist/truncate.d.ts +20 -0
- package/dist/truncate.js +23 -0
- package/dist/uniqBy.cjs +30 -0
- package/dist/uniqBy.d.cts +20 -0
- package/dist/uniqBy.d.ts +21 -0
- package/dist/uniqBy.js +30 -0
- package/dist/{array/unique.d.cts → unique.d.cts} +1 -2
- package/dist/{array/unique.d.ts → unique.d.ts} +1 -2
- package/dist/{array/unique.js → unique.js} +0 -2
- package/dist/{string/uuid.d.cts → uuid.d.cts} +1 -2
- package/dist/{string/uuid.d.ts → uuid.d.ts} +1 -2
- package/dist/{string/uuid.js → uuid.js} +0 -2
- package/dist/validateEmail.cjs +19 -0
- package/dist/validateEmail.d.cts +16 -0
- package/dist/validateEmail.d.ts +17 -0
- package/dist/validateEmail.js +19 -0
- package/dist/validateIdCard.cjs +62 -0
- package/dist/validateIdCard.d.cts +15 -0
- package/dist/validateIdCard.d.ts +16 -0
- package/dist/validateIdCard.js +62 -0
- package/dist/validatePhone.cjs +19 -0
- package/dist/validatePhone.d.cts +16 -0
- package/dist/validatePhone.d.ts +17 -0
- package/dist/validatePhone.js +19 -0
- package/package.json +340 -83
- package/dist/array/chunk.d.cts.map +0 -1
- package/dist/array/chunk.d.ts.map +0 -1
- package/dist/array/chunk.js.map +0 -1
- package/dist/array/flatten.d.cts.map +0 -1
- package/dist/array/flatten.d.ts.map +0 -1
- package/dist/array/flatten.js.map +0 -1
- package/dist/array/groupBy.d.cts.map +0 -1
- package/dist/array/groupBy.d.ts.map +0 -1
- package/dist/array/groupBy.js.map +0 -1
- package/dist/array/range.d.cts.map +0 -1
- package/dist/array/range.d.ts.map +0 -1
- package/dist/array/range.js.map +0 -1
- package/dist/array/shuffle.d.cts.map +0 -1
- package/dist/array/shuffle.d.ts.map +0 -1
- package/dist/array/shuffle.js.map +0 -1
- package/dist/array/unique.d.cts.map +0 -1
- package/dist/array/unique.d.ts.map +0 -1
- package/dist/array/unique.js.map +0 -1
- package/dist/base/deepClone.d.cts.map +0 -1
- package/dist/base/deepClone.d.ts.map +0 -1
- package/dist/base/deepClone.js.map +0 -1
- package/dist/base/isArray.d.cts.map +0 -1
- package/dist/base/isArray.d.ts.map +0 -1
- package/dist/base/isArray.js.map +0 -1
- package/dist/base/isEmpty.d.cts.map +0 -1
- package/dist/base/isEmpty.d.ts.map +0 -1
- package/dist/base/isEmpty.js.map +0 -1
- package/dist/base/isObject.d.cts.map +0 -1
- package/dist/base/isObject.d.ts.map +0 -1
- package/dist/base/isObject.js.map +0 -1
- package/dist/base/isString.d.cts.map +0 -1
- package/dist/base/isString.d.ts.map +0 -1
- package/dist/base/isString.js.map +0 -1
- package/dist/date/formatDate.d.cts.map +0 -1
- package/dist/date/formatDate.d.ts.map +0 -1
- package/dist/date/formatDate.js.map +0 -1
- package/dist/date/getRelativeTime.d.cts.map +0 -1
- package/dist/date/getRelativeTime.d.ts.map +0 -1
- package/dist/date/getRelativeTime.js.map +0 -1
- package/dist/function/debounce.d.cts.map +0 -1
- package/dist/function/debounce.d.ts.map +0 -1
- package/dist/function/debounce.js.map +0 -1
- package/dist/function/delay.d.cts.map +0 -1
- package/dist/function/delay.d.ts.map +0 -1
- package/dist/function/delay.js.map +0 -1
- package/dist/function/throttle.d.cts.map +0 -1
- package/dist/function/throttle.d.ts.map +0 -1
- package/dist/function/throttle.js.map +0 -1
- package/dist/number/clamp.d.cts.map +0 -1
- package/dist/number/clamp.d.ts.map +0 -1
- package/dist/number/clamp.js.map +0 -1
- package/dist/number/formatThousands.d.cts.map +0 -1
- package/dist/number/formatThousands.d.ts.map +0 -1
- package/dist/number/formatThousands.js.map +0 -1
- package/dist/number/randomInt.d.cts.map +0 -1
- package/dist/number/randomInt.d.ts.map +0 -1
- package/dist/number/randomInt.js.map +0 -1
- package/dist/object/omit.d.cts.map +0 -1
- package/dist/object/omit.d.ts.map +0 -1
- package/dist/object/omit.js.map +0 -1
- package/dist/object/pick.d.cts.map +0 -1
- package/dist/object/pick.d.ts.map +0 -1
- package/dist/object/pick.js.map +0 -1
- package/dist/string/camelCase.d.cts.map +0 -1
- package/dist/string/camelCase.d.ts.map +0 -1
- package/dist/string/camelCase.js.map +0 -1
- package/dist/string/capitalize.d.cts.map +0 -1
- package/dist/string/capitalize.d.ts.map +0 -1
- package/dist/string/capitalize.js.map +0 -1
- package/dist/string/kebabCase.d.cts.map +0 -1
- package/dist/string/kebabCase.d.ts.map +0 -1
- package/dist/string/kebabCase.js.map +0 -1
- package/dist/string/uuid.d.cts.map +0 -1
- package/dist/string/uuid.d.ts.map +0 -1
- package/dist/string/uuid.js.map +0 -1
- package/dist/url/parseQueryString.d.cts.map +0 -1
- package/dist/url/parseQueryString.d.ts.map +0 -1
- package/dist/url/parseQueryString.js.map +0 -1
- package/dist/url/stringifyQueryString.d.cts.map +0 -1
- package/dist/url/stringifyQueryString.d.ts.map +0 -1
- package/dist/url/stringifyQueryString.js.map +0 -1
- /package/dist/{string/camelCase.cjs → camelCase.cjs} +0 -0
- /package/dist/{string/capitalize.cjs → capitalize.cjs} +0 -0
- /package/dist/{array/chunk.cjs → chunk.cjs} +0 -0
- /package/dist/{number/clamp.cjs → clamp.cjs} +0 -0
- /package/dist/{function/debounce.cjs → debounce.cjs} +0 -0
- /package/dist/{function/delay.cjs → delay.cjs} +0 -0
- /package/dist/{array/flatten.cjs → flatten.cjs} +0 -0
- /package/dist/{date/formatDate.cjs → formatDate.cjs} +0 -0
- /package/dist/{number/formatThousands.cjs → formatThousands.cjs} +0 -0
- /package/dist/{date/getRelativeTime.cjs → getRelativeTime.cjs} +0 -0
- /package/dist/{array/groupBy.cjs → groupBy.cjs} +0 -0
- /package/dist/{base/isArray.cjs → isArray.cjs} +0 -0
- /package/dist/{base/isObject.cjs → isObject.cjs} +0 -0
- /package/dist/{base/isString.cjs → isString.cjs} +0 -0
- /package/dist/{string/kebabCase.cjs → kebabCase.cjs} +0 -0
- /package/dist/{object/omit.cjs → omit.cjs} +0 -0
- /package/dist/{url/parseQueryString.cjs → parseQueryString.cjs} +0 -0
- /package/dist/{object/pick.cjs → pick.cjs} +0 -0
- /package/dist/{number/randomInt.cjs → randomInt.cjs} +0 -0
- /package/dist/{array/range.cjs → range.cjs} +0 -0
- /package/dist/{array/shuffle.cjs → shuffle.cjs} +0 -0
- /package/dist/{url/stringifyQueryString.cjs → stringifyQueryString.cjs} +0 -0
- /package/dist/{function/throttle.cjs → throttle.cjs} +0 -0
- /package/dist/{array/unique.cjs → unique.cjs} +0 -0
- /package/dist/{string/uuid.cjs → uuid.cjs} +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/dom/lazyLoadImages/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 为图片添加懒加载(IntersectionObserver)
|
|
4
|
+
*
|
|
5
|
+
* 图片需要有 `data-src` 属性存放真实 URL。加载时会替换到 `src`,并从 `data-src` 移除。
|
|
6
|
+
*
|
|
7
|
+
* @param selector - 图片选择器,默认 `'img[data-src]'`
|
|
8
|
+
* @returns 清理函数(调用后取消懒加载)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import lazyLoadImages from '@tanwan/utils/lazyLoadImages'
|
|
13
|
+
* lazyLoadImages()
|
|
14
|
+
* // 或指定选择器
|
|
15
|
+
* lazyLoadImages('.lazy-img')
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function lazyLoadImages(selector = "img[data-src]") {
|
|
19
|
+
const observer = new IntersectionObserver((entries) => {
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
if (!entry.isIntersecting) continue;
|
|
22
|
+
const img = entry.target;
|
|
23
|
+
const src = img.dataset.src;
|
|
24
|
+
if (src) {
|
|
25
|
+
img.src = src;
|
|
26
|
+
delete img.dataset.src;
|
|
27
|
+
}
|
|
28
|
+
observer.unobserve(img);
|
|
29
|
+
}
|
|
30
|
+
}, { rootMargin: "100px" });
|
|
31
|
+
const images = document.querySelectorAll(selector);
|
|
32
|
+
for (const img of images) observer.observe(img);
|
|
33
|
+
return () => observer.disconnect();
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { lazyLoadImages as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/tree/listToTree/index.ts
|
|
2
|
+
function listToTree(list, options = {}) {
|
|
3
|
+
const { id = "id", parentId = "parentId", children = "children", rootValue = null } = options;
|
|
4
|
+
const map = /* @__PURE__ */ new Map();
|
|
5
|
+
const result = [];
|
|
6
|
+
for (const item of list) {
|
|
7
|
+
const node = {
|
|
8
|
+
...item,
|
|
9
|
+
[children]: []
|
|
10
|
+
};
|
|
11
|
+
map.set(item[id], node);
|
|
12
|
+
}
|
|
13
|
+
for (const item of list) {
|
|
14
|
+
const node = map.get(item[id]);
|
|
15
|
+
const pid = item[parentId];
|
|
16
|
+
if (pid === rootValue) result.push(node);
|
|
17
|
+
else {
|
|
18
|
+
const parent = map.get(pid);
|
|
19
|
+
if (parent) parent[children].push(node);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
module.exports = listToTree;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/tree/listToTree/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 将扁平数组转换为树结构
|
|
4
|
+
*
|
|
5
|
+
* @param list - 扁平数据数组
|
|
6
|
+
* @param options - 配置项
|
|
7
|
+
* @param options.id - 节点唯一标识的属性名,默认 `'id'`
|
|
8
|
+
* @param options.parentId - 父节点标识的属性名,默认 `'parentId'`
|
|
9
|
+
* @param options.children - 存放子节点的属性名,默认 `'children'`
|
|
10
|
+
* @param options.rootValue - 根节点的 parentId 值,默认 `null`
|
|
11
|
+
* @returns 树结构数组
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import listToTree from '@tanwan/utils/listToTree'
|
|
16
|
+
* const list = [
|
|
17
|
+
* { id: 1, parentId: null, name: '根' },
|
|
18
|
+
* { id: 2, parentId: 1, name: '子' },
|
|
19
|
+
* { id: 3, parentId: 1, name: '子2' },
|
|
20
|
+
* ]
|
|
21
|
+
* listToTree(list)
|
|
22
|
+
* // [{ id: 1, parentId: null, name: '根', children: [{ id: 2, ... }, { id: 3, ... }] }]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
interface TreeOptions {
|
|
26
|
+
id?: string;
|
|
27
|
+
parentId?: string;
|
|
28
|
+
children?: string;
|
|
29
|
+
rootValue?: unknown;
|
|
30
|
+
}
|
|
31
|
+
declare function listToTree<T extends Record<string, unknown>>(list: T[], options?: TreeOptions): (T & Record<string, unknown[]>)[];
|
|
32
|
+
export = listToTree;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//#region src/tree/listToTree/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 将扁平数组转换为树结构
|
|
4
|
+
*
|
|
5
|
+
* @param list - 扁平数据数组
|
|
6
|
+
* @param options - 配置项
|
|
7
|
+
* @param options.id - 节点唯一标识的属性名,默认 `'id'`
|
|
8
|
+
* @param options.parentId - 父节点标识的属性名,默认 `'parentId'`
|
|
9
|
+
* @param options.children - 存放子节点的属性名,默认 `'children'`
|
|
10
|
+
* @param options.rootValue - 根节点的 parentId 值,默认 `null`
|
|
11
|
+
* @returns 树结构数组
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import listToTree from '@tanwan/utils/listToTree'
|
|
16
|
+
* const list = [
|
|
17
|
+
* { id: 1, parentId: null, name: '根' },
|
|
18
|
+
* { id: 2, parentId: 1, name: '子' },
|
|
19
|
+
* { id: 3, parentId: 1, name: '子2' },
|
|
20
|
+
* ]
|
|
21
|
+
* listToTree(list)
|
|
22
|
+
* // [{ id: 1, parentId: null, name: '根', children: [{ id: 2, ... }, { id: 3, ... }] }]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
interface TreeOptions {
|
|
26
|
+
id?: string;
|
|
27
|
+
parentId?: string;
|
|
28
|
+
children?: string;
|
|
29
|
+
rootValue?: unknown;
|
|
30
|
+
}
|
|
31
|
+
declare function listToTree<T extends Record<string, unknown>>(list: T[], options?: TreeOptions): (T & Record<string, unknown[]>)[];
|
|
32
|
+
//#endregion
|
|
33
|
+
export { listToTree as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/tree/listToTree/index.ts
|
|
2
|
+
function listToTree(list, options = {}) {
|
|
3
|
+
const { id = "id", parentId = "parentId", children = "children", rootValue = null } = options;
|
|
4
|
+
const map = /* @__PURE__ */ new Map();
|
|
5
|
+
const result = [];
|
|
6
|
+
for (const item of list) {
|
|
7
|
+
const node = {
|
|
8
|
+
...item,
|
|
9
|
+
[children]: []
|
|
10
|
+
};
|
|
11
|
+
map.set(item[id], node);
|
|
12
|
+
}
|
|
13
|
+
for (const item of list) {
|
|
14
|
+
const node = map.get(item[id]);
|
|
15
|
+
const pid = item[parentId];
|
|
16
|
+
if (pid === rootValue) result.push(node);
|
|
17
|
+
else {
|
|
18
|
+
const parent = map.get(pid);
|
|
19
|
+
if (parent) parent[children].push(node);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { listToTree as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/object/mapValues/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 映射对象的所有值,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* @param obj - 源对象
|
|
6
|
+
* @param iteratee - 值映射函数,接收 value 和 key
|
|
7
|
+
* @returns 映射值后的新对象
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import mapValues from '@tanwan/utils/mapValues'
|
|
12
|
+
* mapValues({ a: 1, b: 2 }, (v) => v * 2)
|
|
13
|
+
* // { a: 2, b: 4 }
|
|
14
|
+
*
|
|
15
|
+
* mapValues({ x: 'a', y: 'b' }, (v, k) => k + v)
|
|
16
|
+
* // { x: 'xa', y: 'yb' }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function mapValues(obj, iteratee) {
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const key of Object.keys(obj)) result[key] = iteratee(obj[key], key);
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
module.exports = mapValues;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/object/mapValues/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 映射对象的所有值,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* @param obj - 源对象
|
|
6
|
+
* @param iteratee - 值映射函数,接收 value 和 key
|
|
7
|
+
* @returns 映射值后的新对象
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import mapValues from '@tanwan/utils/mapValues'
|
|
12
|
+
* mapValues({ a: 1, b: 2 }, (v) => v * 2)
|
|
13
|
+
* // { a: 2, b: 4 }
|
|
14
|
+
*
|
|
15
|
+
* mapValues({ x: 'a', y: 'b' }, (v, k) => k + v)
|
|
16
|
+
* // { x: 'xa', y: 'yb' }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function mapValues<T extends Record<string, unknown>, V>(obj: T, iteratee: (value: T[keyof T], key: keyof T) => V): Record<keyof T, V>;
|
|
20
|
+
export = mapValues;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/object/mapValues/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 映射对象的所有值,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* @param obj - 源对象
|
|
6
|
+
* @param iteratee - 值映射函数,接收 value 和 key
|
|
7
|
+
* @returns 映射值后的新对象
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import mapValues from '@tanwan/utils/mapValues'
|
|
12
|
+
* mapValues({ a: 1, b: 2 }, (v) => v * 2)
|
|
13
|
+
* // { a: 2, b: 4 }
|
|
14
|
+
*
|
|
15
|
+
* mapValues({ x: 'a', y: 'b' }, (v, k) => k + v)
|
|
16
|
+
* // { x: 'xa', y: 'yb' }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function mapValues<T extends Record<string, unknown>, V>(obj: T, iteratee: (value: T[keyof T], key: keyof T) => V): Record<keyof T, V>;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { mapValues as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/object/mapValues/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 映射对象的所有值,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* @param obj - 源对象
|
|
6
|
+
* @param iteratee - 值映射函数,接收 value 和 key
|
|
7
|
+
* @returns 映射值后的新对象
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import mapValues from '@tanwan/utils/mapValues'
|
|
12
|
+
* mapValues({ a: 1, b: 2 }, (v) => v * 2)
|
|
13
|
+
* // { a: 2, b: 4 }
|
|
14
|
+
*
|
|
15
|
+
* mapValues({ x: 'a', y: 'b' }, (v, k) => k + v)
|
|
16
|
+
* // { x: 'xa', y: 'yb' }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function mapValues(obj, iteratee) {
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const key of Object.keys(obj)) result[key] = iteratee(obj[key], key);
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { mapValues as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/string/maskString/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 字符串脱敏处理,将中间部分替换为指定字符
|
|
4
|
+
*
|
|
5
|
+
* @param str - 原字符串
|
|
6
|
+
* @param start - 保留前几位,默认 3
|
|
7
|
+
* @param end - 保留后几位,默认 4
|
|
8
|
+
* @param mask - 脱敏字符,默认 `'*'`
|
|
9
|
+
* @returns 脱敏后的字符串
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import maskString from '@tanwan/utils/maskString'
|
|
14
|
+
* // 手机号脱敏
|
|
15
|
+
* maskString('18812345678', 3, 4)
|
|
16
|
+
* // '188****5678'
|
|
17
|
+
*
|
|
18
|
+
* // 身份证脱敏
|
|
19
|
+
* maskString('510123199001011234', 6, 4)
|
|
20
|
+
* // '510123********1234'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function maskString(str, start = 3, end = 4, mask = "*") {
|
|
24
|
+
if (str.length <= start + end) return str;
|
|
25
|
+
return str.slice(0, start) + mask.repeat(str.length - start - end) + str.slice(-end);
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
module.exports = maskString;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/string/maskString/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 字符串脱敏处理,将中间部分替换为指定字符
|
|
4
|
+
*
|
|
5
|
+
* @param str - 原字符串
|
|
6
|
+
* @param start - 保留前几位,默认 3
|
|
7
|
+
* @param end - 保留后几位,默认 4
|
|
8
|
+
* @param mask - 脱敏字符,默认 `'*'`
|
|
9
|
+
* @returns 脱敏后的字符串
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import maskString from '@tanwan/utils/maskString'
|
|
14
|
+
* // 手机号脱敏
|
|
15
|
+
* maskString('18812345678', 3, 4)
|
|
16
|
+
* // '188****5678'
|
|
17
|
+
*
|
|
18
|
+
* // 身份证脱敏
|
|
19
|
+
* maskString('510123199001011234', 6, 4)
|
|
20
|
+
* // '510123********1234'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare function maskString(str: string, start?: number, end?: number, mask?: string): string;
|
|
24
|
+
export = maskString;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/string/maskString/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 字符串脱敏处理,将中间部分替换为指定字符
|
|
4
|
+
*
|
|
5
|
+
* @param str - 原字符串
|
|
6
|
+
* @param start - 保留前几位,默认 3
|
|
7
|
+
* @param end - 保留后几位,默认 4
|
|
8
|
+
* @param mask - 脱敏字符,默认 `'*'`
|
|
9
|
+
* @returns 脱敏后的字符串
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import maskString from '@tanwan/utils/maskString'
|
|
14
|
+
* // 手机号脱敏
|
|
15
|
+
* maskString('18812345678', 3, 4)
|
|
16
|
+
* // '188****5678'
|
|
17
|
+
*
|
|
18
|
+
* // 身份证脱敏
|
|
19
|
+
* maskString('510123199001011234', 6, 4)
|
|
20
|
+
* // '510123********1234'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare function maskString(str: string, start?: number, end?: number, mask?: string): string;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { maskString as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/string/maskString/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 字符串脱敏处理,将中间部分替换为指定字符
|
|
4
|
+
*
|
|
5
|
+
* @param str - 原字符串
|
|
6
|
+
* @param start - 保留前几位,默认 3
|
|
7
|
+
* @param end - 保留后几位,默认 4
|
|
8
|
+
* @param mask - 脱敏字符,默认 `'*'`
|
|
9
|
+
* @returns 脱敏后的字符串
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import maskString from '@tanwan/utils/maskString'
|
|
14
|
+
* // 手机号脱敏
|
|
15
|
+
* maskString('18812345678', 3, 4)
|
|
16
|
+
* // '188****5678'
|
|
17
|
+
*
|
|
18
|
+
* // 身份证脱敏
|
|
19
|
+
* maskString('510123199001011234', 6, 4)
|
|
20
|
+
* // '510123********1234'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function maskString(str, start = 3, end = 4, mask = "*") {
|
|
24
|
+
if (str.length <= start + end) return str;
|
|
25
|
+
return str.slice(0, start) + mask.repeat(str.length - start - end) + str.slice(-end);
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { maskString as default };
|
package/dist/memoize.cjs
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/function/memoize/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 缓存函数调用结果,相同参数直接返回缓存值
|
|
4
|
+
*
|
|
5
|
+
* 仅支持 `JSON.stringify` 可序列化参数。不适合复杂对象、大参数字符串或副作用函数。
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 需要缓存结果的函数
|
|
8
|
+
* @returns 带缓存能力的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import memoize from '@tanwan/utils/memoize'
|
|
13
|
+
* const factorial = memoize((n: number): number => {
|
|
14
|
+
* console.log('计算中')
|
|
15
|
+
* return n <= 1 ? 1 : n * factorial(n - 1)
|
|
16
|
+
* })
|
|
17
|
+
* factorial(5) // 输出多次"计算中"
|
|
18
|
+
* factorial(5) // 直接返回缓存(无输出)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function memoize(fn) {
|
|
22
|
+
const cache = /* @__PURE__ */ new Map();
|
|
23
|
+
return ((...args) => {
|
|
24
|
+
const key = JSON.stringify(args);
|
|
25
|
+
if (cache.has(key)) return cache.get(key);
|
|
26
|
+
const result = fn(...args);
|
|
27
|
+
cache.set(key, result);
|
|
28
|
+
return result;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
module.exports = memoize;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/function/memoize/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 缓存函数调用结果,相同参数直接返回缓存值
|
|
4
|
+
*
|
|
5
|
+
* 仅支持 `JSON.stringify` 可序列化参数。不适合复杂对象、大参数字符串或副作用函数。
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 需要缓存结果的函数
|
|
8
|
+
* @returns 带缓存能力的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import memoize from '@tanwan/utils/memoize'
|
|
13
|
+
* const factorial = memoize((n: number): number => {
|
|
14
|
+
* console.log('计算中')
|
|
15
|
+
* return n <= 1 ? 1 : n * factorial(n - 1)
|
|
16
|
+
* })
|
|
17
|
+
* factorial(5) // 输出多次"计算中"
|
|
18
|
+
* factorial(5) // 直接返回缓存(无输出)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T): T;
|
|
22
|
+
export = memoize;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/function/memoize/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 缓存函数调用结果,相同参数直接返回缓存值
|
|
4
|
+
*
|
|
5
|
+
* 仅支持 `JSON.stringify` 可序列化参数。不适合复杂对象、大参数字符串或副作用函数。
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 需要缓存结果的函数
|
|
8
|
+
* @returns 带缓存能力的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import memoize from '@tanwan/utils/memoize'
|
|
13
|
+
* const factorial = memoize((n: number): number => {
|
|
14
|
+
* console.log('计算中')
|
|
15
|
+
* return n <= 1 ? 1 : n * factorial(n - 1)
|
|
16
|
+
* })
|
|
17
|
+
* factorial(5) // 输出多次"计算中"
|
|
18
|
+
* factorial(5) // 直接返回缓存(无输出)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
declare function memoize<T extends (...args: unknown[]) => unknown>(fn: T): T;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { memoize as default };
|
package/dist/memoize.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/function/memoize/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 缓存函数调用结果,相同参数直接返回缓存值
|
|
4
|
+
*
|
|
5
|
+
* 仅支持 `JSON.stringify` 可序列化参数。不适合复杂对象、大参数字符串或副作用函数。
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 需要缓存结果的函数
|
|
8
|
+
* @returns 带缓存能力的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import memoize from '@tanwan/utils/memoize'
|
|
13
|
+
* const factorial = memoize((n: number): number => {
|
|
14
|
+
* console.log('计算中')
|
|
15
|
+
* return n <= 1 ? 1 : n * factorial(n - 1)
|
|
16
|
+
* })
|
|
17
|
+
* factorial(5) // 输出多次"计算中"
|
|
18
|
+
* factorial(5) // 直接返回缓存(无输出)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function memoize(fn) {
|
|
22
|
+
const cache = /* @__PURE__ */ new Map();
|
|
23
|
+
return ((...args) => {
|
|
24
|
+
const key = JSON.stringify(args);
|
|
25
|
+
if (cache.has(key)) return cache.get(key);
|
|
26
|
+
const result = fn(...args);
|
|
27
|
+
cache.set(key, result);
|
|
28
|
+
return result;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { memoize as default };
|
package/dist/off.cjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/dom/off/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解绑元素事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数(必须与绑定时的引用相同)
|
|
8
|
+
* @param options - removeEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { on, off } from '@tanwan/utils'
|
|
13
|
+
* const handler = () => console.log('clicked')
|
|
14
|
+
* on(el, 'click', handler)
|
|
15
|
+
* off(el, 'click', handler)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function off(el, event, handler, options) {
|
|
19
|
+
el.removeEventListener(event, handler, options);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
module.exports = off;
|
package/dist/off.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/dom/off/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解绑元素事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数(必须与绑定时的引用相同)
|
|
8
|
+
* @param options - removeEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { on, off } from '@tanwan/utils'
|
|
13
|
+
* const handler = () => console.log('clicked')
|
|
14
|
+
* on(el, 'click', handler)
|
|
15
|
+
* off(el, 'click', handler)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function off(el: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: EventListenerOptions): void;
|
|
19
|
+
export = off;
|
package/dist/off.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/dom/off/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解绑元素事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数(必须与绑定时的引用相同)
|
|
8
|
+
* @param options - removeEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { on, off } from '@tanwan/utils'
|
|
13
|
+
* const handler = () => console.log('clicked')
|
|
14
|
+
* on(el, 'click', handler)
|
|
15
|
+
* off(el, 'click', handler)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function off(el: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: EventListenerOptions): void;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { off as default };
|
package/dist/off.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/dom/off/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解绑元素事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数(必须与绑定时的引用相同)
|
|
8
|
+
* @param options - removeEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { on, off } from '@tanwan/utils'
|
|
13
|
+
* const handler = () => console.log('clicked')
|
|
14
|
+
* on(el, 'click', handler)
|
|
15
|
+
* off(el, 'click', handler)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
function off(el, event, handler, options) {
|
|
19
|
+
el.removeEventListener(event, handler, options);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { off as default };
|
package/dist/on.cjs
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/dom/on/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param options - addEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import on from '@tanwan/utils/on'
|
|
13
|
+
* on(el, 'click', () => console.log('clicked'))
|
|
14
|
+
* on(el, 'scroll', handler, { passive: true })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function on(el, event, handler, options) {
|
|
18
|
+
el.addEventListener(event, handler, options);
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
module.exports = on;
|
package/dist/on.d.cts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/dom/on/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param options - addEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import on from '@tanwan/utils/on'
|
|
13
|
+
* on(el, 'click', () => console.log('clicked'))
|
|
14
|
+
* on(el, 'scroll', handler, { passive: true })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function on(el: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: AddEventListenerOptions): void;
|
|
18
|
+
export = on;
|
package/dist/on.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/dom/on/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param options - addEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import on from '@tanwan/utils/on'
|
|
13
|
+
* on(el, 'click', () => console.log('clicked'))
|
|
14
|
+
* on(el, 'scroll', handler, { passive: true })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function on(el: EventTarget, event: string, handler: EventListenerOrEventListenerObject, options?: AddEventListenerOptions): void;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { on as default };
|
package/dist/on.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/dom/on/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 给元素绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param el - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param options - addEventListener 选项
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import on from '@tanwan/utils/on'
|
|
13
|
+
* on(el, 'click', () => console.log('clicked'))
|
|
14
|
+
* on(el, 'scroll', handler, { passive: true })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
function on(el, event, handler, options) {
|
|
18
|
+
el.addEventListener(event, handler, options);
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { on as default };
|