@tanwan/utils 1.0.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.cjs → camelCase.cjs} +0 -1
- 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 -3
- package/dist/{string/capitalize.cjs → capitalize.cjs} +1 -1
- package/dist/{string/capitalize.d.cts → capitalize.d.cts} +2 -3
- package/dist/{string/capitalize.d.ts → capitalize.d.ts} +2 -3
- package/dist/{string/capitalize.js → capitalize.js} +1 -3
- package/dist/{array/chunk.cjs → chunk.cjs} +1 -1
- package/dist/{array/chunk.d.cts → chunk.d.cts} +2 -3
- package/dist/{array/chunk.d.ts → chunk.d.ts} +2 -3
- package/dist/{array/chunk.js → chunk.js} +1 -3
- package/dist/{number/clamp.cjs → clamp.cjs} +1 -1
- package/dist/{number/clamp.d.cts → clamp.d.cts} +2 -3
- package/dist/{number/clamp.d.ts → clamp.d.ts} +2 -3
- package/dist/{number/clamp.js → clamp.js} +1 -3
- 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.cjs → debounce.cjs} +1 -1
- package/dist/{function/debounce.d.cts → debounce.d.cts} +2 -3
- package/dist/{function/debounce.d.ts → debounce.d.ts} +2 -3
- package/dist/{function/debounce.js → debounce.js} +1 -3
- 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} +3 -3
- package/dist/{base/deepClone.d.cts → deepClone.d.cts} +2 -3
- package/dist/{base/deepClone.d.ts → deepClone.d.ts} +2 -3
- package/dist/{base/deepClone.js → deepClone.js} +1 -3
- 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/delay.cjs +8 -0
- package/dist/delay.d.cts +18 -0
- package/dist/delay.d.ts +19 -0
- package/dist/delay.js +8 -0
- 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.cjs → flatten.cjs} +1 -1
- package/dist/{array/flatten.d.cts → flatten.d.cts} +2 -3
- package/dist/{array/flatten.d.ts → flatten.d.ts} +2 -3
- package/dist/{array/flatten.js → flatten.js} +1 -3
- 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.cjs → formatDate.cjs} +1 -1
- package/dist/{date/formatDate.d.cts → formatDate.d.cts} +2 -3
- package/dist/{date/formatDate.d.ts → formatDate.d.ts} +2 -3
- package/dist/{date/formatDate.js → formatDate.js} +1 -3
- 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.cjs → formatThousands.cjs} +1 -1
- package/dist/{number/formatThousands.d.cts → formatThousands.d.cts} +2 -3
- package/dist/{number/formatThousands.d.ts → formatThousands.d.ts} +2 -3
- package/dist/{number/formatThousands.js → formatThousands.js} +1 -3
- 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.cjs → getRelativeTime.cjs} +1 -1
- package/dist/{date/getRelativeTime.d.cts → getRelativeTime.d.cts} +2 -3
- package/dist/{date/getRelativeTime.d.ts → getRelativeTime.d.ts} +2 -3
- package/dist/{date/getRelativeTime.js → getRelativeTime.js} +1 -3
- 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/groupBy.cjs +36 -0
- package/dist/groupBy.d.cts +26 -0
- package/dist/groupBy.d.ts +27 -0
- package/dist/groupBy.js +36 -0
- 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 -36
- package/dist/index.d.cts +91 -19
- package/dist/index.d.ts +91 -19
- package/dist/index.iife.js +1 -1
- package/dist/index.js +91 -19
- 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.cjs → isArray.cjs} +1 -1
- package/dist/{base/isArray.d.cts → isArray.d.cts} +2 -3
- package/dist/{base/isArray.d.ts → isArray.d.ts} +2 -3
- package/dist/{base/isArray.js → isArray.js} +1 -3
- 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/isEmpty.cjs +42 -0
- package/dist/isEmpty.d.cts +33 -0
- package/dist/isEmpty.d.ts +34 -0
- package/dist/isEmpty.js +42 -0
- 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.cjs → isObject.cjs} +1 -1
- package/dist/{base/isObject.d.cts → isObject.d.cts} +2 -3
- package/dist/{base/isObject.d.ts → isObject.d.ts} +2 -3
- package/dist/{base/isObject.js → isObject.js} +1 -3
- 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.cjs → isString.cjs} +1 -1
- package/dist/{base/isString.d.cts → isString.d.cts} +2 -3
- package/dist/{base/isString.d.ts → isString.d.ts} +2 -3
- package/dist/{base/isString.js → isString.js} +1 -3
- 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/omit.cjs +23 -0
- package/dist/omit.d.cts +17 -0
- package/dist/omit.d.ts +18 -0
- package/dist/omit.js +23 -0
- 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/parseQueryString.cjs +48 -0
- package/dist/parseQueryString.d.cts +21 -0
- package/dist/parseQueryString.d.ts +22 -0
- package/dist/parseQueryString.js +48 -0
- 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/pick.cjs +22 -0
- package/dist/pick.d.cts +17 -0
- package/dist/pick.d.ts +18 -0
- package/dist/pick.js +22 -0
- package/dist/{number/randomInt.cjs → randomInt.cjs} +1 -1
- package/dist/{number/randomInt.d.cts → randomInt.d.cts} +2 -3
- package/dist/{number/randomInt.d.ts → randomInt.d.ts} +2 -3
- package/dist/{number/randomInt.js → randomInt.js} +1 -3
- package/dist/range.cjs +27 -0
- package/dist/range.d.cts +20 -0
- package/dist/range.d.ts +21 -0
- package/dist/range.js +27 -0
- 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.cjs → shuffle.cjs} +1 -1
- package/dist/{array/shuffle.d.cts → shuffle.d.cts} +2 -3
- package/dist/{array/shuffle.d.ts → shuffle.d.ts} +2 -3
- package/dist/{array/shuffle.js → shuffle.js} +1 -3
- 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/stringifyQueryString.cjs +38 -0
- package/dist/stringifyQueryString.d.cts +21 -0
- package/dist/stringifyQueryString.d.ts +22 -0
- package/dist/stringifyQueryString.js +38 -0
- package/dist/{function/throttle.cjs → throttle.cjs} +1 -1
- package/dist/{function/throttle.d.cts → throttle.d.cts} +2 -3
- package/dist/{function/throttle.d.ts → throttle.d.ts} +2 -3
- package/dist/{function/throttle.js → throttle.js} +1 -3
- 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.cjs → unique.cjs} +1 -1
- package/dist/{array/unique.d.cts → unique.d.cts} +2 -3
- package/dist/{array/unique.d.ts → unique.d.ts} +2 -3
- package/dist/{array/unique.js → unique.js} +1 -3
- package/dist/uuid.cjs +23 -0
- package/dist/uuid.d.cts +16 -0
- package/dist/uuid.d.ts +17 -0
- package/dist/uuid.js +23 -0
- 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 +351 -58
- 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/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/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/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/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/kebabCase.cjs → kebabCase.cjs} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/dom/createElement/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* 快捷创建元素并设置属性
|
|
4
|
+
*
|
|
5
|
+
* @param tag - HTML 标签名
|
|
6
|
+
* @param attrs - 属性对象,如 `{ id: 'box', class: 'card' }`
|
|
7
|
+
* @param children - 子节点(文本、元素或元素数组)
|
|
8
|
+
* @returns 创建的 DOM 元素
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import createElement from '@tanwan/utils/createElement'
|
|
13
|
+
* createElement('div', { class: 'card' }, 'Hello')
|
|
14
|
+
* createElement('ul', { id: 'list' },
|
|
15
|
+
* createElement('li', {}, 'Item 1'),
|
|
16
|
+
* createElement('li', {}, 'Item 2'),
|
|
17
|
+
* )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
function createElement(tag, attrs = {}, ...children) {
|
|
21
|
+
const el = document.createElement(tag);
|
|
22
|
+
for (const key of Object.keys(attrs)) el.setAttribute(key, attrs[key]);
|
|
23
|
+
for (const child of children) el.appendChild(typeof child === "string" ? document.createTextNode(child) : child);
|
|
24
|
+
return el;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { createElement as default };
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* 防抖函数
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import debounce from '@
|
|
6
|
+
* import debounce from '@tanwan/utils/debounce'
|
|
7
7
|
* const search = debounce((keyword: string) => {
|
|
8
8
|
* console.log('搜索:', keyword)
|
|
9
9
|
* }, 300)
|
|
10
10
|
* ```
|
|
11
11
|
*/
|
|
12
12
|
declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): (...args: Parameters<T>) => void;
|
|
13
|
-
export = debounce;
|
|
14
|
-
//# sourceMappingURL=debounce.d.cts.map
|
|
13
|
+
export = debounce;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 防抖函数
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import debounce from '@
|
|
6
|
+
* import debounce from '@tanwan/utils/debounce'
|
|
7
7
|
* const search = debounce((keyword: string) => {
|
|
8
8
|
* console.log('搜索:', keyword)
|
|
9
9
|
* }, 300)
|
|
@@ -11,5 +11,4 @@
|
|
|
11
11
|
*/
|
|
12
12
|
declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): (...args: Parameters<T>) => void;
|
|
13
13
|
//#endregion
|
|
14
|
-
export { debounce as default };
|
|
15
|
-
//# sourceMappingURL=debounce.d.ts.map
|
|
14
|
+
export { debounce as default };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 防抖函数
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import debounce from '@
|
|
6
|
+
* import debounce from '@tanwan/utils/debounce'
|
|
7
7
|
* const search = debounce((keyword: string) => {
|
|
8
8
|
* console.log('搜索:', keyword)
|
|
9
9
|
* }, 300)
|
|
@@ -27,5 +27,3 @@ function debounce(func, wait, immediate = false) {
|
|
|
27
27
|
}
|
|
28
28
|
//#endregion
|
|
29
29
|
export { debounce as default };
|
|
30
|
-
|
|
31
|
-
//# sourceMappingURL=debounce.js.map
|
|
@@ -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
|
+
module.exports = debounceSubmit;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.d.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
|
+
declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
|
|
22
|
+
export = debounceSubmit;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/business/debounceSubmit/index.d.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
|
+
declare function debounceSubmit<T extends (...args: unknown[]) => Promise<unknown>>(fn: T): T;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { debounceSubmit as default };
|
|
@@ -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,10 +1,10 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_isObject = require("./isObject.cjs");
|
|
2
2
|
//#region src/base/deepClone/index.ts
|
|
3
3
|
/**
|
|
4
4
|
* 深拷贝变量
|
|
5
5
|
* @example
|
|
6
6
|
* ```ts
|
|
7
|
-
* import deepClone from '@
|
|
7
|
+
* import deepClone from '@tanwan/utils/deepClone'
|
|
8
8
|
* const obj = { a: 1, b: { c: 2 } }
|
|
9
9
|
* const clone = deepClone(obj)
|
|
10
10
|
* clone.b.c = 3
|
|
@@ -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);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 深拷贝变量
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import deepClone from '@
|
|
6
|
+
* import deepClone from '@tanwan/utils/deepClone'
|
|
7
7
|
* const obj = { a: 1, b: { c: 2 } }
|
|
8
8
|
* const clone = deepClone(obj)
|
|
9
9
|
* clone.b.c = 3
|
|
@@ -11,5 +11,4 @@
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
declare function deepClone<T>(v: T, cache?: WeakMap<object, unknown>): T;
|
|
14
|
-
export = deepClone;
|
|
15
|
-
//# sourceMappingURL=deepClone.d.cts.map
|
|
14
|
+
export = deepClone;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* 深拷贝变量
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import deepClone from '@
|
|
6
|
+
* import deepClone from '@tanwan/utils/deepClone'
|
|
7
7
|
* const obj = { a: 1, b: { c: 2 } }
|
|
8
8
|
* const clone = deepClone(obj)
|
|
9
9
|
* clone.b.c = 3
|
|
@@ -12,5 +12,4 @@
|
|
|
12
12
|
*/
|
|
13
13
|
declare function deepClone<T>(v: T, cache?: WeakMap<object, unknown>): T;
|
|
14
14
|
//#endregion
|
|
15
|
-
export { deepClone as default };
|
|
16
|
-
//# sourceMappingURL=deepClone.d.ts.map
|
|
15
|
+
export { deepClone as default };
|
|
@@ -4,7 +4,7 @@ import isObject from "./isObject.js";
|
|
|
4
4
|
* 深拷贝变量
|
|
5
5
|
* @example
|
|
6
6
|
* ```ts
|
|
7
|
-
* import deepClone from '@
|
|
7
|
+
* import deepClone from '@tanwan/utils/deepClone'
|
|
8
8
|
* const obj = { a: 1, b: { c: 2 } }
|
|
9
9
|
* const clone = deepClone(obj)
|
|
10
10
|
* clone.b.c = 3
|
|
@@ -46,5 +46,3 @@ function deepClone(v, cache = /* @__PURE__ */ new WeakMap()) {
|
|
|
46
46
|
}
|
|
47
47
|
//#endregion
|
|
48
48
|
export { deepClone as default };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=deepClone.js.map
|
|
@@ -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 };
|
package/dist/delay.cjs
ADDED
package/dist/delay.d.cts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/function/delay/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 返回一个在指定毫秒后 resolve 的 Promise
|
|
4
|
+
*
|
|
5
|
+
* @param ms - 延迟毫秒数,默认为 0
|
|
6
|
+
* @param value - 可选,resolve 时传递的值
|
|
7
|
+
* @returns 在延迟后 resolve 的 Promise
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import delay from '@tanwan/utils/delay'
|
|
12
|
+
* await delay(1000) // 等待 1 秒后 resolve
|
|
13
|
+
* const result = await delay(500, 'done') // 500ms 后 resolve 'done'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function delay(ms?: number): Promise<void>;
|
|
17
|
+
declare function delay<T>(ms: number, value: T): Promise<T>;
|
|
18
|
+
export = delay;
|
package/dist/delay.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/function/delay/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 返回一个在指定毫秒后 resolve 的 Promise
|
|
4
|
+
*
|
|
5
|
+
* @param ms - 延迟毫秒数,默认为 0
|
|
6
|
+
* @param value - 可选,resolve 时传递的值
|
|
7
|
+
* @returns 在延迟后 resolve 的 Promise
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import delay from '@tanwan/utils/delay'
|
|
12
|
+
* await delay(1000) // 等待 1 秒后 resolve
|
|
13
|
+
* const result = await delay(500, 'done') // 500ms 后 resolve 'done'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function delay(ms?: number): Promise<void>;
|
|
17
|
+
declare function delay<T>(ms: number, value: T): Promise<T>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { delay as default };
|
package/dist/delay.js
ADDED
|
@@ -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;
|