@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,34 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 包装异步函数,防止重复提交
|
|
4
|
+
*
|
|
5
|
+
* 在函数执行期间,后续调用会被忽略直到第一次调用完成
|
|
6
|
+
*
|
|
7
|
+
* @param fn - 异步提交函数
|
|
8
|
+
* @returns 包装后的函数
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import debounceSubmit from '@tanwan/utils/debounceSubmit'
|
|
13
|
+
* const submit = debounceSubmit(async (data: FormData) => {
|
|
14
|
+
* await fetch('/api/submit', { method: 'POST', body: data })
|
|
15
|
+
* })
|
|
16
|
+
*
|
|
17
|
+
* await submit(formData) // 第一次执行
|
|
18
|
+
* await submit(formData) // 忽略(上一次还在执行中)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function debounceSubmit(fn) {
|
|
22
|
+
let pending = false;
|
|
23
|
+
return (async (...args) => {
|
|
24
|
+
if (pending) return;
|
|
25
|
+
pending = true;
|
|
26
|
+
try {
|
|
27
|
+
return await fn(...args);
|
|
28
|
+
} finally {
|
|
29
|
+
pending = false;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { debounceSubmit as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/business/decodeBase64/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 解码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - Base64 编码的字符串
|
|
6
|
+
* @returns 解码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* decodeBase64('SGVsbG8=') // 'Hello'
|
|
12
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function decodeBase64(str) {
|
|
16
|
+
return decodeURIComponent(escape(atob(str)));
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
module.exports = decodeBase64;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/business/decodeBase64/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 解码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - Base64 编码的字符串
|
|
6
|
+
* @returns 解码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* decodeBase64('SGVsbG8=') // 'Hello'
|
|
12
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function decodeBase64(str: string): string;
|
|
16
|
+
export = decodeBase64;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/business/decodeBase64/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 解码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - Base64 编码的字符串
|
|
6
|
+
* @returns 解码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* decodeBase64('SGVsbG8=') // 'Hello'
|
|
12
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function decodeBase64(str: string): string;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { decodeBase64 as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/business/decodeBase64/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 解码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - Base64 编码的字符串
|
|
6
|
+
* @returns 解码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* decodeBase64('SGVsbG8=') // 'Hello'
|
|
12
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function decodeBase64(str) {
|
|
16
|
+
return decodeURIComponent(escape(atob(str)));
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { decodeBase64 as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_isObject = require("./isObject.cjs");
|
|
2
2
|
//#region src/base/deepClone/index.ts
|
|
3
3
|
/**
|
|
4
4
|
* 深拷贝变量
|
|
@@ -36,7 +36,7 @@ function deepClone(v, cache = /* @__PURE__ */ new WeakMap()) {
|
|
|
36
36
|
}
|
|
37
37
|
if (v instanceof WeakMap) throw new Error("Cannot clone WeakMap");
|
|
38
38
|
if (v instanceof WeakSet) throw new Error("Cannot clone WeakSet");
|
|
39
|
-
if (
|
|
39
|
+
if (require_isObject(v)) {
|
|
40
40
|
const cloned = {};
|
|
41
41
|
cache.set(v, cloned);
|
|
42
42
|
for (const key in v) if (Object.prototype.hasOwnProperty.call(v, key)) cloned[key] = deepClone(v[key], cache);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const require_isObject = require("./isObject.cjs");
|
|
2
|
+
//#region src/object/deepMerge/index.ts
|
|
3
|
+
/**
|
|
4
|
+
* 深度合并多个对象,返回新对象
|
|
5
|
+
*
|
|
6
|
+
* - 后面的对象会覆盖前面对象的同名属性
|
|
7
|
+
* - 嵌套对象会递归合并,数组和基本类型直接覆盖
|
|
8
|
+
*
|
|
9
|
+
* @param sources - 要合并的源对象列表
|
|
10
|
+
* @returns 合并后的新对象
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import deepMerge from '@tanwan/utils/deepMerge'
|
|
15
|
+
* deepMerge({ a: 1 }, { b: 2 })
|
|
16
|
+
* // { a: 1, b: 2 }
|
|
17
|
+
*
|
|
18
|
+
* deepMerge({ a: { x: 1 } }, { a: { y: 2 } })
|
|
19
|
+
* // { a: { x: 1, y: 2 } }
|
|
20
|
+
*
|
|
21
|
+
* deepMerge({ a: [1] }, { a: [2] })
|
|
22
|
+
* // { a: [2] }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function deepMerge(...sources) {
|
|
26
|
+
const result = {};
|
|
27
|
+
for (const source of sources) {
|
|
28
|
+
if (!source) continue;
|
|
29
|
+
for (const key of Object.keys(source)) {
|
|
30
|
+
const sv = source[key];
|
|
31
|
+
const rv = result[key];
|
|
32
|
+
if (require_isObject(sv) && require_isObject(rv) && !Array.isArray(sv) && !Array.isArray(rv)) result[key] = deepMerge(rv, sv);
|
|
33
|
+
else result[key] = sv;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
module.exports = deepMerge;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/object/deepMerge/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 深度合并多个对象,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* - 后面的对象会覆盖前面对象的同名属性
|
|
6
|
+
* - 嵌套对象会递归合并,数组和基本类型直接覆盖
|
|
7
|
+
*
|
|
8
|
+
* @param sources - 要合并的源对象列表
|
|
9
|
+
* @returns 合并后的新对象
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import deepMerge from '@tanwan/utils/deepMerge'
|
|
14
|
+
* deepMerge({ a: 1 }, { b: 2 })
|
|
15
|
+
* // { a: 1, b: 2 }
|
|
16
|
+
*
|
|
17
|
+
* deepMerge({ a: { x: 1 } }, { a: { y: 2 } })
|
|
18
|
+
* // { a: { x: 1, y: 2 } }
|
|
19
|
+
*
|
|
20
|
+
* deepMerge({ a: [1] }, { a: [2] })
|
|
21
|
+
* // { a: [2] }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function deepMerge<T extends Record<string, unknown>>(...sources: T[]): T;
|
|
25
|
+
export = deepMerge;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/object/deepMerge/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 深度合并多个对象,返回新对象
|
|
4
|
+
*
|
|
5
|
+
* - 后面的对象会覆盖前面对象的同名属性
|
|
6
|
+
* - 嵌套对象会递归合并,数组和基本类型直接覆盖
|
|
7
|
+
*
|
|
8
|
+
* @param sources - 要合并的源对象列表
|
|
9
|
+
* @returns 合并后的新对象
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import deepMerge from '@tanwan/utils/deepMerge'
|
|
14
|
+
* deepMerge({ a: 1 }, { b: 2 })
|
|
15
|
+
* // { a: 1, b: 2 }
|
|
16
|
+
*
|
|
17
|
+
* deepMerge({ a: { x: 1 } }, { a: { y: 2 } })
|
|
18
|
+
* // { a: { x: 1, y: 2 } }
|
|
19
|
+
*
|
|
20
|
+
* deepMerge({ a: [1] }, { a: [2] })
|
|
21
|
+
* // { a: [2] }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function deepMerge<T extends Record<string, unknown>>(...sources: T[]): T;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { deepMerge as default };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import isObject from "./isObject.js";
|
|
2
|
+
//#region src/object/deepMerge/index.ts
|
|
3
|
+
/**
|
|
4
|
+
* 深度合并多个对象,返回新对象
|
|
5
|
+
*
|
|
6
|
+
* - 后面的对象会覆盖前面对象的同名属性
|
|
7
|
+
* - 嵌套对象会递归合并,数组和基本类型直接覆盖
|
|
8
|
+
*
|
|
9
|
+
* @param sources - 要合并的源对象列表
|
|
10
|
+
* @returns 合并后的新对象
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import deepMerge from '@tanwan/utils/deepMerge'
|
|
15
|
+
* deepMerge({ a: 1 }, { b: 2 })
|
|
16
|
+
* // { a: 1, b: 2 }
|
|
17
|
+
*
|
|
18
|
+
* deepMerge({ a: { x: 1 } }, { a: { y: 2 } })
|
|
19
|
+
* // { a: { x: 1, y: 2 } }
|
|
20
|
+
*
|
|
21
|
+
* deepMerge({ a: [1] }, { a: [2] })
|
|
22
|
+
* // { a: [2] }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function deepMerge(...sources) {
|
|
26
|
+
const result = {};
|
|
27
|
+
for (const source of sources) {
|
|
28
|
+
if (!source) continue;
|
|
29
|
+
for (const key of Object.keys(source)) {
|
|
30
|
+
const sv = source[key];
|
|
31
|
+
const rv = result[key];
|
|
32
|
+
if (isObject(sv) && isObject(rv) && !Array.isArray(sv) && !Array.isArray(rv)) result[key] = deepMerge(rv, sv);
|
|
33
|
+
else result[key] = sv;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { deepMerge as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/array/difference/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 计算两个数组的差集 —— 返回在 `source` 中但不在 `target` 中的元素
|
|
4
|
+
*
|
|
5
|
+
* @param source - 被减数组
|
|
6
|
+
* @param target - 要排除的元素数组
|
|
7
|
+
* @returns 差集新数组
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import difference from '@tanwan/utils/difference'
|
|
12
|
+
* difference([1, 2, 3], [2])
|
|
13
|
+
* // [1, 3]
|
|
14
|
+
*
|
|
15
|
+
* difference(['a', 'b', 'c'], ['b', 'd'])
|
|
16
|
+
* // ['a', 'c']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function difference(source, target) {
|
|
20
|
+
const targetSet = new Set(target);
|
|
21
|
+
return source.filter((item) => !targetSet.has(item));
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
module.exports = difference;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/array/difference/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 计算两个数组的差集 —— 返回在 `source` 中但不在 `target` 中的元素
|
|
4
|
+
*
|
|
5
|
+
* @param source - 被减数组
|
|
6
|
+
* @param target - 要排除的元素数组
|
|
7
|
+
* @returns 差集新数组
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import difference from '@tanwan/utils/difference'
|
|
12
|
+
* difference([1, 2, 3], [2])
|
|
13
|
+
* // [1, 3]
|
|
14
|
+
*
|
|
15
|
+
* difference(['a', 'b', 'c'], ['b', 'd'])
|
|
16
|
+
* // ['a', 'c']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function difference<T>(source: T[], target: T[]): T[];
|
|
20
|
+
export = difference;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/array/difference/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 计算两个数组的差集 —— 返回在 `source` 中但不在 `target` 中的元素
|
|
4
|
+
*
|
|
5
|
+
* @param source - 被减数组
|
|
6
|
+
* @param target - 要排除的元素数组
|
|
7
|
+
* @returns 差集新数组
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import difference from '@tanwan/utils/difference'
|
|
12
|
+
* difference([1, 2, 3], [2])
|
|
13
|
+
* // [1, 3]
|
|
14
|
+
*
|
|
15
|
+
* difference(['a', 'b', 'c'], ['b', 'd'])
|
|
16
|
+
* // ['a', 'c']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function difference<T>(source: T[], target: T[]): T[];
|
|
20
|
+
//#endregion
|
|
21
|
+
export { difference as default };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/array/difference/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 计算两个数组的差集 —— 返回在 `source` 中但不在 `target` 中的元素
|
|
4
|
+
*
|
|
5
|
+
* @param source - 被减数组
|
|
6
|
+
* @param target - 要排除的元素数组
|
|
7
|
+
* @returns 差集新数组
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import difference from '@tanwan/utils/difference'
|
|
12
|
+
* difference([1, 2, 3], [2])
|
|
13
|
+
* // [1, 3]
|
|
14
|
+
*
|
|
15
|
+
* difference(['a', 'b', 'c'], ['b', 'd'])
|
|
16
|
+
* // ['a', 'c']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function difference(source, target) {
|
|
20
|
+
const targetSet = new Set(target);
|
|
21
|
+
return source.filter((item) => !targetSet.has(item));
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { difference as default };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/business/downloadFile/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 下载文件(支持 URL 或 Blob)
|
|
4
|
+
*
|
|
5
|
+
* @param source - 文件 URL 地址或 Blob 对象
|
|
6
|
+
* @param filename - 下载文件名
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import downloadFile from '@tanwan/utils/downloadFile'
|
|
11
|
+
* // 下载 URL
|
|
12
|
+
* downloadFile('https://example.com/file.pdf', 'document.pdf')
|
|
13
|
+
*
|
|
14
|
+
* // 下载 Blob
|
|
15
|
+
* const blob = new Blob(['hello'], { type: 'text/plain' })
|
|
16
|
+
* downloadFile(blob, 'hello.txt')
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function downloadFile(source, filename) {
|
|
20
|
+
const url = typeof source === "string" ? source : URL.createObjectURL(source);
|
|
21
|
+
const a = document.createElement("a");
|
|
22
|
+
a.href = url;
|
|
23
|
+
a.download = filename;
|
|
24
|
+
a.style.display = "none";
|
|
25
|
+
document.body.appendChild(a);
|
|
26
|
+
a.click();
|
|
27
|
+
document.body.removeChild(a);
|
|
28
|
+
if (source instanceof Blob) URL.revokeObjectURL(url);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
module.exports = downloadFile;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/business/downloadFile/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 下载文件(支持 URL 或 Blob)
|
|
4
|
+
*
|
|
5
|
+
* @param source - 文件 URL 地址或 Blob 对象
|
|
6
|
+
* @param filename - 下载文件名
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import downloadFile from '@tanwan/utils/downloadFile'
|
|
11
|
+
* // 下载 URL
|
|
12
|
+
* downloadFile('https://example.com/file.pdf', 'document.pdf')
|
|
13
|
+
*
|
|
14
|
+
* // 下载 Blob
|
|
15
|
+
* const blob = new Blob(['hello'], { type: 'text/plain' })
|
|
16
|
+
* downloadFile(blob, 'hello.txt')
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function downloadFile(source: string | Blob, filename: string): void;
|
|
20
|
+
export = downloadFile;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/business/downloadFile/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 下载文件(支持 URL 或 Blob)
|
|
4
|
+
*
|
|
5
|
+
* @param source - 文件 URL 地址或 Blob 对象
|
|
6
|
+
* @param filename - 下载文件名
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import downloadFile from '@tanwan/utils/downloadFile'
|
|
11
|
+
* // 下载 URL
|
|
12
|
+
* downloadFile('https://example.com/file.pdf', 'document.pdf')
|
|
13
|
+
*
|
|
14
|
+
* // 下载 Blob
|
|
15
|
+
* const blob = new Blob(['hello'], { type: 'text/plain' })
|
|
16
|
+
* downloadFile(blob, 'hello.txt')
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function downloadFile(source: string | Blob, filename: string): void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { downloadFile as default };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/business/downloadFile/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 下载文件(支持 URL 或 Blob)
|
|
4
|
+
*
|
|
5
|
+
* @param source - 文件 URL 地址或 Blob 对象
|
|
6
|
+
* @param filename - 下载文件名
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import downloadFile from '@tanwan/utils/downloadFile'
|
|
11
|
+
* // 下载 URL
|
|
12
|
+
* downloadFile('https://example.com/file.pdf', 'document.pdf')
|
|
13
|
+
*
|
|
14
|
+
* // 下载 Blob
|
|
15
|
+
* const blob = new Blob(['hello'], { type: 'text/plain' })
|
|
16
|
+
* downloadFile(blob, 'hello.txt')
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
function downloadFile(source, filename) {
|
|
20
|
+
const url = typeof source === "string" ? source : URL.createObjectURL(source);
|
|
21
|
+
const a = document.createElement("a");
|
|
22
|
+
a.href = url;
|
|
23
|
+
a.download = filename;
|
|
24
|
+
a.style.display = "none";
|
|
25
|
+
document.body.appendChild(a);
|
|
26
|
+
a.click();
|
|
27
|
+
document.body.removeChild(a);
|
|
28
|
+
if (source instanceof Blob) URL.revokeObjectURL(url);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { downloadFile as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/business/encodeBase64/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 编码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - 待编码的字符串
|
|
6
|
+
* @returns Base64 编码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* encodeBase64('Hello') // 'SGVsbG8='
|
|
12
|
+
* encodeBase64('你好') // '5L2g5aW9'
|
|
13
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
function encodeBase64(str) {
|
|
17
|
+
return btoa(unescape(encodeURIComponent(str)));
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
module.exports = encodeBase64;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/business/encodeBase64/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 编码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - 待编码的字符串
|
|
6
|
+
* @returns Base64 编码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* encodeBase64('Hello') // 'SGVsbG8='
|
|
12
|
+
* encodeBase64('你好') // '5L2g5aW9'
|
|
13
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function encodeBase64(str: string): string;
|
|
17
|
+
export = encodeBase64;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/business/encodeBase64/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 编码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - 待编码的字符串
|
|
6
|
+
* @returns Base64 编码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* encodeBase64('Hello') // 'SGVsbG8='
|
|
12
|
+
* encodeBase64('你好') // '5L2g5aW9'
|
|
13
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function encodeBase64(str: string): string;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { encodeBase64 as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/business/encodeBase64/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64 编码(支持中文)
|
|
4
|
+
*
|
|
5
|
+
* @param str - 待编码的字符串
|
|
6
|
+
* @returns Base64 编码结果
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { encodeBase64, decodeBase64 } from '@tanwan/utils'
|
|
11
|
+
* encodeBase64('Hello') // 'SGVsbG8='
|
|
12
|
+
* encodeBase64('你好') // '5L2g5aW9'
|
|
13
|
+
* decodeBase64('5L2g5aW9') // '你好'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
function encodeBase64(str) {
|
|
17
|
+
return btoa(unescape(encodeURIComponent(str)));
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { encodeBase64 as default };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/business/formatBankCard/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 银行卡号格式化,每 4 位用空格分隔
|
|
4
|
+
*
|
|
5
|
+
* @param cardNo - 银行卡号
|
|
6
|
+
* @returns 格式化后的卡号
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import formatBankCard from '@tanwan/utils/formatBankCard'
|
|
11
|
+
* formatBankCard('6222021234567890')
|
|
12
|
+
* // '6222 0212 3456 7890'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
function formatBankCard(cardNo) {
|
|
16
|
+
return cardNo.replace(/(\d{4})(?=\d)/g, "$1 ");
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
module.exports = formatBankCard;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/business/formatBankCard/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 银行卡号格式化,每 4 位用空格分隔
|
|
4
|
+
*
|
|
5
|
+
* @param cardNo - 银行卡号
|
|
6
|
+
* @returns 格式化后的卡号
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import formatBankCard from '@tanwan/utils/formatBankCard'
|
|
11
|
+
* formatBankCard('6222021234567890')
|
|
12
|
+
* // '6222 0212 3456 7890'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function formatBankCard(cardNo: string): string;
|
|
16
|
+
export = formatBankCard;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/business/formatBankCard/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 银行卡号格式化,每 4 位用空格分隔
|
|
4
|
+
*
|
|
5
|
+
* @param cardNo - 银行卡号
|
|
6
|
+
* @returns 格式化后的卡号
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import formatBankCard from '@tanwan/utils/formatBankCard'
|
|
11
|
+
* formatBankCard('6222021234567890')
|
|
12
|
+
* // '6222 0212 3456 7890'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function formatBankCard(cardNo: string): string;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { formatBankCard as default };
|