@odinlin/utils 0.0.2 → 1.0.1
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 +13 -0
- package/README.md +16 -20
- package/dist/browser/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/browser/array/arrayCast.cjs +29 -0
- package/dist/browser/array/arrayCast.d.ts +27 -0
- package/dist/browser/array/arrayCast.d.ts.map +1 -0
- package/dist/browser/array/arrayCast.js +30 -0
- package/dist/browser/array/arrayCast.js.map +1 -0
- package/dist/browser/array/index.cjs +3 -0
- package/dist/browser/array/index.d.ts +2 -0
- package/dist/browser/array/index.js +3 -0
- package/dist/browser/browser.cjs +198 -0
- package/dist/browser/browser.d.ts +38 -0
- package/dist/browser/browser.js +31 -0
- package/dist/browser/constants/index.cjs +19 -0
- package/dist/browser/constants/index.d.ts +16 -0
- package/dist/browser/constants/index.d.ts.map +1 -0
- package/dist/browser/constants/index.js +17 -0
- package/dist/browser/constants/index.js.map +1 -0
- package/dist/browser/date/index.cjs +8 -0
- package/dist/browser/date/index.d.ts +3 -0
- package/dist/browser/date/index.js +4 -0
- package/dist/browser/date/prettyMs.cjs +9 -0
- package/dist/browser/date/prettyMs.d.ts +8 -0
- package/dist/browser/date/prettyMs.d.ts.map +1 -0
- package/dist/browser/date/prettyMs.js +8 -0
- package/dist/browser/date/prettyMs.js.map +1 -0
- package/dist/browser/date/timeAgo.cjs +14 -0
- package/dist/browser/date/timeAgo.d.ts +15 -0
- package/dist/browser/date/timeAgo.d.ts.map +1 -0
- package/dist/browser/date/timeAgo.js +11 -0
- package/dist/browser/date/timeAgo.js.map +1 -0
- package/dist/browser/file/browser.cjs +25 -0
- package/dist/browser/file/browser.d.ts +7 -0
- package/dist/browser/file/browser.js +7 -0
- package/dist/browser/file/fileBuffer.browser.cjs +115 -0
- package/dist/browser/file/fileBuffer.browser.d.ts +88 -0
- package/dist/browser/file/fileBuffer.browser.d.ts.map +1 -0
- package/dist/browser/file/fileBuffer.browser.js +115 -0
- package/dist/browser/file/fileBuffer.browser.js.map +1 -0
- package/dist/browser/file/fileBytes.cjs +9 -0
- package/dist/browser/file/fileBytes.d.ts +8 -0
- package/dist/browser/file/fileBytes.d.ts.map +1 -0
- package/dist/browser/file/fileBytes.js +8 -0
- package/dist/browser/file/fileBytes.js.map +1 -0
- package/dist/browser/file/fileType.browser.cjs +22 -0
- package/dist/browser/file/fileType.browser.d.ts +19 -0
- package/dist/browser/file/fileType.browser.d.ts.map +1 -0
- package/dist/browser/file/fileType.browser.js +15 -0
- package/dist/browser/file/fileType.browser.js.map +1 -0
- package/dist/browser/file/fileXml.browser.cjs +8 -0
- package/dist/browser/file/fileXml.browser.d.ts +12 -0
- package/dist/browser/file/fileXml.browser.d.ts.map +1 -0
- package/dist/browser/file/fileXml.browser.js +7 -0
- package/dist/browser/file/fileXml.browser.js.map +1 -0
- package/dist/browser/file/interface.d.ts +26 -0
- package/dist/browser/file/interface.d.ts.map +1 -0
- package/dist/browser/function/index.cjs +10 -0
- package/dist/browser/function/index.d.ts +8 -0
- package/dist/browser/function/index.d.ts.map +1 -0
- package/dist/browser/function/index.js +9 -0
- package/dist/browser/function/index.js.map +1 -0
- package/dist/browser/is/index.cjs +42 -0
- package/dist/browser/is/index.d.ts +7 -0
- package/dist/browser/is/index.js +8 -0
- package/dist/browser/is/isJSON.cjs +44 -0
- package/dist/browser/is/isJSON.d.ts +30 -0
- package/dist/browser/is/isJSON.d.ts.map +1 -0
- package/dist/browser/is/isJSON.js +41 -0
- package/dist/browser/is/isJSON.js.map +1 -0
- package/dist/browser/is/isPlatform.cjs +20 -0
- package/dist/browser/is/isPlatform.d.ts +16 -0
- package/dist/browser/is/isPlatform.d.ts.map +1 -0
- package/dist/browser/is/isPlatform.js +19 -0
- package/dist/browser/is/isPlatform.js.map +1 -0
- package/dist/browser/is/isPrimitive.cjs +91 -0
- package/dist/browser/is/isPrimitive.d.ts +79 -0
- package/dist/browser/is/isPrimitive.d.ts.map +1 -0
- package/dist/browser/is/isPrimitive.js +79 -0
- package/dist/browser/is/isPrimitive.js.map +1 -0
- package/dist/browser/is/isPrimitiveWithout.cjs +86 -0
- package/dist/browser/is/isPrimitiveWithout.d.ts +72 -0
- package/dist/browser/is/isPrimitiveWithout.d.ts.map +1 -0
- package/dist/browser/is/isPrimitiveWithout.js +74 -0
- package/dist/browser/is/isPrimitiveWithout.js.map +1 -0
- package/dist/browser/is/isTagOf.cjs +21 -0
- package/dist/browser/is/isTagOf.d.ts +12 -0
- package/dist/browser/is/isTagOf.d.ts.map +1 -0
- package/dist/browser/is/isTagOf.js +21 -0
- package/dist/browser/is/isTagOf.js.map +1 -0
- package/dist/browser/is/isTypeOf.cjs +29 -0
- package/dist/browser/is/isTypeOf.d.ts +16 -0
- package/dist/browser/is/isTypeOf.d.ts.map +1 -0
- package/dist/browser/is/isTypeOf.js +28 -0
- package/dist/browser/is/isTypeOf.js.map +1 -0
- package/dist/browser/object/index.cjs +3 -0
- package/dist/browser/object/index.d.ts +2 -0
- package/dist/browser/object/index.js +3 -0
- package/dist/browser/object/objectClone.cjs +22 -0
- package/dist/browser/object/objectClone.d.ts +8 -0
- package/dist/browser/object/objectClone.d.ts.map +1 -0
- package/dist/browser/object/objectClone.js +22 -0
- package/dist/browser/object/objectClone.js.map +1 -0
- package/dist/browser/promise/awaitTo.cjs +8 -0
- package/dist/browser/promise/awaitTo.d.ts +7 -0
- package/dist/browser/promise/awaitTo.d.ts.map +1 -0
- package/dist/browser/promise/awaitTo.js +8 -0
- package/dist/browser/promise/awaitTo.js.map +1 -0
- package/dist/browser/promise/delay.cjs +8 -0
- package/dist/browser/promise/delay.d.ts +5 -0
- package/dist/browser/promise/delay.d.ts.map +1 -0
- package/dist/browser/promise/delay.js +8 -0
- package/dist/browser/promise/delay.js.map +1 -0
- package/dist/browser/promise/index.cjs +8 -0
- package/dist/browser/promise/index.d.ts +4 -0
- package/dist/browser/promise/index.js +5 -0
- package/dist/browser/promise/pLimit.cjs +11 -0
- package/dist/browser/promise/pLimit.d.ts +10 -0
- package/dist/browser/promise/pLimit.d.ts.map +1 -0
- package/dist/browser/promise/pLimit.js +9 -0
- package/dist/browser/promise/pLimit.js.map +1 -0
- package/dist/browser/regexp/OTHERS.cjs +16 -0
- package/dist/browser/regexp/OTHERS.d.ts +14 -0
- package/dist/browser/regexp/OTHERS.d.ts.map +1 -0
- package/dist/browser/regexp/OTHERS.js +15 -0
- package/dist/browser/regexp/OTHERS.js.map +1 -0
- package/dist/browser/regexp/RULES.cjs +698 -0
- package/dist/browser/regexp/RULES.d.ts +434 -0
- package/dist/browser/regexp/RULES.d.ts.map +1 -0
- package/dist/browser/regexp/RULES.js +615 -0
- package/dist/browser/regexp/RULES.js.map +1 -0
- package/dist/browser/regexp/index.cjs +89 -0
- package/dist/browser/regexp/index.d.ts +13 -0
- package/dist/browser/regexp/index.d.ts.map +1 -0
- package/dist/browser/regexp/index.js +4 -0
- package/dist/browser/request/browser.cjs +8 -0
- package/dist/browser/request/browser.d.ts +4 -0
- package/dist/browser/request/browser.js +4 -0
- package/dist/browser/request/instance.cjs +135 -0
- package/dist/browser/request/instance.d.ts +45 -0
- package/dist/browser/request/instance.d.ts.map +1 -0
- package/dist/browser/request/instance.js +134 -0
- package/dist/browser/request/instance.js.map +1 -0
- package/dist/browser/request/interceptors.browser.cjs +66 -0
- package/dist/browser/request/interceptors.browser.d.ts +25 -0
- package/dist/browser/request/interceptors.browser.d.ts.map +1 -0
- package/dist/browser/request/interceptors.browser.js +63 -0
- package/dist/browser/request/interceptors.browser.js.map +1 -0
- package/dist/browser/request/interface.d.ts +54 -0
- package/dist/browser/request/interface.d.ts.map +1 -0
- package/dist/browser/string/className.cjs +13 -0
- package/dist/browser/string/className.d.ts +11 -0
- package/dist/browser/string/className.d.ts.map +1 -0
- package/dist/browser/string/className.js +10 -0
- package/dist/browser/string/className.js.map +1 -0
- package/dist/browser/string/index.cjs +7 -0
- package/dist/browser/string/index.d.ts +3 -0
- package/dist/browser/string/index.js +4 -0
- package/dist/browser/string/proto.cjs +37 -0
- package/dist/browser/string/proto.d.ts +19 -0
- package/dist/browser/string/proto.d.ts.map +1 -0
- package/dist/browser/string/proto.js +36 -0
- package/dist/browser/string/proto.js.map +1 -0
- package/dist/browser/tree/index.cjs +7 -0
- package/dist/browser/tree/index.d.ts +5 -0
- package/dist/browser/tree/index.js +5 -0
- package/dist/browser/tree/interface.d.ts +40 -0
- package/dist/browser/tree/interface.d.ts.map +1 -0
- package/dist/browser/tree/treeFilter.cjs +58 -0
- package/dist/browser/tree/treeFilter.d.ts +14 -0
- package/dist/browser/tree/treeFilter.d.ts.map +1 -0
- package/dist/browser/tree/treeFilter.js +59 -0
- package/dist/browser/tree/treeFilter.js.map +1 -0
- package/dist/browser/tree/treeFlatten.cjs +23 -0
- package/dist/browser/tree/treeFlatten.d.ts +15 -0
- package/dist/browser/tree/treeFlatten.d.ts.map +1 -0
- package/dist/browser/tree/treeFlatten.js +24 -0
- package/dist/browser/tree/treeFlatten.js.map +1 -0
- package/dist/browser/tree/treeGenerate.cjs +37 -0
- package/dist/browser/tree/treeGenerate.d.ts +16 -0
- package/dist/browser/tree/treeGenerate.d.ts.map +1 -0
- package/dist/browser/tree/treeGenerate.js +37 -0
- package/dist/browser/tree/treeGenerate.js.map +1 -0
- package/dist/noExternal/browser.esm.html +94 -0
- package/dist/noExternal/browser.esm.js +10740 -0
- package/dist/noExternal/browser.esm.min.js +16 -0
- package/dist/noExternal/browser.esm.min.js.map +1 -0
- package/dist/noExternal/browser.umd.html +28 -0
- package/dist/noExternal/browser.umd.js +10912 -0
- package/dist/noExternal/browser.umd.min.js +16 -0
- package/dist/noExternal/browser.umd.min.js.map +1 -0
- package/dist/noExternal/node.cjs.js +21905 -0
- package/dist/noExternal/node.cjs.min.js +37 -0
- package/dist/noExternal/node.cjs.min.js.map +1 -0
- package/dist/noExternal/node.esm.js +21733 -0
- package/dist/noExternal/node.esm.min.js +36 -0
- package/dist/noExternal/node.esm.min.js.map +1 -0
- package/dist/node/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/node/array/arrayCast.cjs +29 -0
- package/dist/node/array/arrayCast.d.ts +27 -0
- package/dist/node/array/arrayCast.d.ts.map +1 -0
- package/dist/node/array/arrayCast.js +30 -0
- package/dist/node/array/arrayCast.js.map +1 -0
- package/dist/node/array/index.cjs +3 -0
- package/dist/node/array/index.d.ts +2 -0
- package/dist/node/array/index.js +3 -0
- package/dist/node/constants/index.cjs +19 -0
- package/dist/node/constants/index.d.ts +16 -0
- package/dist/node/constants/index.d.ts.map +1 -0
- package/dist/node/constants/index.js +17 -0
- package/dist/node/constants/index.js.map +1 -0
- package/dist/node/date/index.cjs +8 -0
- package/dist/node/date/index.d.ts +3 -0
- package/dist/node/date/index.js +4 -0
- package/dist/node/date/prettyMs.cjs +9 -0
- package/dist/node/date/prettyMs.d.ts +8 -0
- package/dist/node/date/prettyMs.d.ts.map +1 -0
- package/dist/node/date/prettyMs.js +8 -0
- package/dist/node/date/prettyMs.js.map +1 -0
- package/dist/node/date/timeAgo.cjs +14 -0
- package/dist/node/date/timeAgo.d.ts +15 -0
- package/dist/node/date/timeAgo.d.ts.map +1 -0
- package/dist/node/date/timeAgo.js +11 -0
- package/dist/node/date/timeAgo.js.map +1 -0
- package/dist/node/file/fileBuffer.node.cjs +115 -0
- package/dist/node/file/fileBuffer.node.d.ts +88 -0
- package/dist/node/file/fileBuffer.node.d.ts.map +1 -0
- package/dist/node/file/fileBuffer.node.js +115 -0
- package/dist/node/file/fileBuffer.node.js.map +1 -0
- package/dist/node/file/fileBytes.cjs +9 -0
- package/dist/node/file/fileBytes.d.ts +8 -0
- package/dist/node/file/fileBytes.d.ts.map +1 -0
- package/dist/node/file/fileBytes.js +8 -0
- package/dist/node/file/fileBytes.js.map +1 -0
- package/dist/node/file/fileType.node.cjs +22 -0
- package/dist/node/file/fileType.node.d.ts +19 -0
- package/dist/node/file/fileType.node.d.ts.map +1 -0
- package/dist/node/file/fileType.node.js +15 -0
- package/dist/node/file/fileType.node.js.map +1 -0
- package/dist/node/file/fileXml.node.cjs +10 -0
- package/dist/node/file/fileXml.node.d.ts +8 -0
- package/dist/node/file/fileXml.node.d.ts.map +1 -0
- package/dist/node/file/fileXml.node.js +9 -0
- package/dist/node/file/fileXml.node.js.map +1 -0
- package/dist/node/file/interface.d.ts +26 -0
- package/dist/node/file/interface.d.ts.map +1 -0
- package/dist/node/file/node.cjs +25 -0
- package/dist/node/file/node.d.ts +7 -0
- package/dist/node/file/node.js +7 -0
- package/dist/node/function/index.cjs +10 -0
- package/dist/node/function/index.d.ts +8 -0
- package/dist/node/function/index.d.ts.map +1 -0
- package/dist/node/function/index.js +9 -0
- package/dist/node/function/index.js.map +1 -0
- package/dist/node/is/index.cjs +42 -0
- package/dist/node/is/index.d.ts +7 -0
- package/dist/node/is/index.js +8 -0
- package/dist/node/is/isJSON.cjs +44 -0
- package/dist/node/is/isJSON.d.ts +30 -0
- package/dist/node/is/isJSON.d.ts.map +1 -0
- package/dist/node/is/isJSON.js +41 -0
- package/dist/node/is/isJSON.js.map +1 -0
- package/dist/node/is/isPlatform.cjs +20 -0
- package/dist/node/is/isPlatform.d.ts +16 -0
- package/dist/node/is/isPlatform.d.ts.map +1 -0
- package/dist/node/is/isPlatform.js +19 -0
- package/dist/node/is/isPlatform.js.map +1 -0
- package/dist/node/is/isPrimitive.cjs +91 -0
- package/dist/node/is/isPrimitive.d.ts +79 -0
- package/dist/node/is/isPrimitive.d.ts.map +1 -0
- package/dist/node/is/isPrimitive.js +79 -0
- package/dist/node/is/isPrimitive.js.map +1 -0
- package/dist/node/is/isPrimitiveWithout.cjs +86 -0
- package/dist/node/is/isPrimitiveWithout.d.ts +72 -0
- package/dist/node/is/isPrimitiveWithout.d.ts.map +1 -0
- package/dist/node/is/isPrimitiveWithout.js +74 -0
- package/dist/node/is/isPrimitiveWithout.js.map +1 -0
- package/dist/node/is/isTagOf.cjs +21 -0
- package/dist/node/is/isTagOf.d.ts +12 -0
- package/dist/node/is/isTagOf.d.ts.map +1 -0
- package/dist/node/is/isTagOf.js +21 -0
- package/dist/node/is/isTagOf.js.map +1 -0
- package/dist/node/is/isTypeOf.cjs +29 -0
- package/dist/node/is/isTypeOf.d.ts +16 -0
- package/dist/node/is/isTypeOf.d.ts.map +1 -0
- package/dist/node/is/isTypeOf.js +28 -0
- package/dist/node/is/isTypeOf.js.map +1 -0
- package/dist/node/node.cjs +198 -0
- package/dist/node/node.d.ts +38 -0
- package/dist/node/node.js +31 -0
- package/dist/node/object/index.cjs +3 -0
- package/dist/node/object/index.d.ts +2 -0
- package/dist/node/object/index.js +3 -0
- package/dist/node/object/objectClone.cjs +22 -0
- package/dist/node/object/objectClone.d.ts +8 -0
- package/dist/node/object/objectClone.d.ts.map +1 -0
- package/dist/node/object/objectClone.js +22 -0
- package/dist/node/object/objectClone.js.map +1 -0
- package/dist/node/promise/awaitTo.cjs +8 -0
- package/dist/node/promise/awaitTo.d.ts +7 -0
- package/dist/node/promise/awaitTo.d.ts.map +1 -0
- package/dist/node/promise/awaitTo.js +8 -0
- package/dist/node/promise/awaitTo.js.map +1 -0
- package/dist/node/promise/delay.cjs +8 -0
- package/dist/node/promise/delay.d.ts +5 -0
- package/dist/node/promise/delay.d.ts.map +1 -0
- package/dist/node/promise/delay.js +8 -0
- package/dist/node/promise/delay.js.map +1 -0
- package/dist/node/promise/index.cjs +8 -0
- package/dist/node/promise/index.d.ts +4 -0
- package/dist/node/promise/index.js +5 -0
- package/dist/node/promise/pLimit.cjs +11 -0
- package/dist/node/promise/pLimit.d.ts +10 -0
- package/dist/node/promise/pLimit.d.ts.map +1 -0
- package/dist/node/promise/pLimit.js +9 -0
- package/dist/node/promise/pLimit.js.map +1 -0
- package/dist/node/regexp/OTHERS.cjs +16 -0
- package/dist/node/regexp/OTHERS.d.ts +14 -0
- package/dist/node/regexp/OTHERS.d.ts.map +1 -0
- package/dist/node/regexp/OTHERS.js +15 -0
- package/dist/node/regexp/OTHERS.js.map +1 -0
- package/dist/node/regexp/RULES.cjs +698 -0
- package/dist/node/regexp/RULES.d.ts +434 -0
- package/dist/node/regexp/RULES.d.ts.map +1 -0
- package/dist/node/regexp/RULES.js +615 -0
- package/dist/node/regexp/RULES.js.map +1 -0
- package/dist/node/regexp/index.cjs +89 -0
- package/dist/node/regexp/index.d.ts +13 -0
- package/dist/node/regexp/index.d.ts.map +1 -0
- package/dist/node/regexp/index.js +4 -0
- package/dist/node/request/instance.cjs +135 -0
- package/dist/node/request/instance.d.ts +45 -0
- package/dist/node/request/instance.d.ts.map +1 -0
- package/dist/node/request/instance.js +134 -0
- package/dist/node/request/instance.js.map +1 -0
- package/dist/node/request/interceptors.node.cjs +66 -0
- package/dist/node/request/interceptors.node.d.ts +25 -0
- package/dist/node/request/interceptors.node.d.ts.map +1 -0
- package/dist/node/request/interceptors.node.js +63 -0
- package/dist/node/request/interceptors.node.js.map +1 -0
- package/dist/node/request/interface.d.ts +54 -0
- package/dist/node/request/interface.d.ts.map +1 -0
- package/dist/node/request/node.cjs +8 -0
- package/dist/node/request/node.d.ts +4 -0
- package/dist/node/request/node.js +4 -0
- package/dist/node/string/className.cjs +13 -0
- package/dist/node/string/className.d.ts +11 -0
- package/dist/node/string/className.d.ts.map +1 -0
- package/dist/node/string/className.js +10 -0
- package/dist/node/string/className.js.map +1 -0
- package/dist/node/string/index.cjs +7 -0
- package/dist/node/string/index.d.ts +3 -0
- package/dist/node/string/index.js +4 -0
- package/dist/node/string/proto.cjs +37 -0
- package/dist/node/string/proto.d.ts +19 -0
- package/dist/node/string/proto.d.ts.map +1 -0
- package/dist/node/string/proto.js +36 -0
- package/dist/node/string/proto.js.map +1 -0
- package/dist/node/tree/index.cjs +7 -0
- package/dist/node/tree/index.d.ts +5 -0
- package/dist/node/tree/index.js +5 -0
- package/dist/node/tree/interface.d.ts +40 -0
- package/dist/node/tree/interface.d.ts.map +1 -0
- package/dist/node/tree/treeFilter.cjs +58 -0
- package/dist/node/tree/treeFilter.d.ts +14 -0
- package/dist/node/tree/treeFilter.d.ts.map +1 -0
- package/dist/node/tree/treeFilter.js +59 -0
- package/dist/node/tree/treeFilter.js.map +1 -0
- package/dist/node/tree/treeFlatten.cjs +23 -0
- package/dist/node/tree/treeFlatten.d.ts +15 -0
- package/dist/node/tree/treeFlatten.d.ts.map +1 -0
- package/dist/node/tree/treeFlatten.js +24 -0
- package/dist/node/tree/treeFlatten.js.map +1 -0
- package/dist/node/tree/treeGenerate.cjs +37 -0
- package/dist/node/tree/treeGenerate.d.ts +16 -0
- package/dist/node/tree/treeGenerate.d.ts.map +1 -0
- package/dist/node/tree/treeGenerate.js +37 -0
- package/dist/node/tree/treeGenerate.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +98 -57
- package/LICENSE +0 -21
- package/dist/index.cjs +0 -403
- package/dist/index.d.ts +0 -496
- package/dist/index.mjs +0 -307
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isNull, isString } from "../is/isPrimitive.js";
|
|
2
|
+
import { isJSONString } from "../is/isJSON.js";
|
|
3
|
+
import { FileBuffer } from "../file/fileBuffer.node.js";
|
|
4
|
+
import { Request } from "./instance.js";
|
|
5
|
+
import { AxiosError } from "axios";
|
|
6
|
+
|
|
7
|
+
//#region src/request/interceptors.node.ts
|
|
8
|
+
/**
|
|
9
|
+
* 预设拦截器 - 响应耗时
|
|
10
|
+
*/
|
|
11
|
+
const presetInterceptorWithResponseLog = { response: {
|
|
12
|
+
onFulfilled(res) {
|
|
13
|
+
const { config } = res;
|
|
14
|
+
const requestId = config.headers["X-Request-Id"];
|
|
15
|
+
Request.getOptionValue(config, "enableTimeConsuming") && console.timeEnd(`[presetInterceptorWithLog] ${requestId}`);
|
|
16
|
+
return res;
|
|
17
|
+
},
|
|
18
|
+
onRejected(err) {
|
|
19
|
+
const requestId = err.config.headers["X-Request-Id"];
|
|
20
|
+
Request.getOptionValue(err.config, "enableTimeConsuming") && console.timeEnd(`[presetInterceptorWithLog] ${requestId}`);
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
} };
|
|
24
|
+
/**
|
|
25
|
+
* 预设拦截器 - 响应尝试 JSON 解析,若解析成功,则将解析结果赋值给 res.dataJSON,不会影响后续拦截器的参数
|
|
26
|
+
* @description 若 responseType 为 json 或 forcedJSONParsing 为 true ,则尝试解析响应体为 JSON 字符串
|
|
27
|
+
* @description 其中前提是通过 `transformResponse: []` 覆盖内置的默认 transformResponse 函数
|
|
28
|
+
*/
|
|
29
|
+
const presetInterceptorWithResponseJSON = { response: { async onFulfilled(res) {
|
|
30
|
+
const { config, request, data } = res;
|
|
31
|
+
const allowJSONRequested = config.responseType === "json" || (config.transitional?.forcedJSONParsing ?? true);
|
|
32
|
+
let tempData = null;
|
|
33
|
+
if (isString(data) && allowJSONRequested) tempData = data;
|
|
34
|
+
else if (FileBuffer.isBlob(data) && data.type === "application/json" && allowJSONRequested) tempData = (await FileBuffer.fromBlob(data)).toString();
|
|
35
|
+
if (isNull(tempData)) return res;
|
|
36
|
+
const [err, json] = isJSONString(tempData, config.parseReviver);
|
|
37
|
+
if (err) {
|
|
38
|
+
if (!(config.transitional?.silentJSONParsing ?? false)) throw err.name === "SyntaxError" ? AxiosError.from(err, AxiosError.ERR_BAD_RESPONSE, config, request, res) : err;
|
|
39
|
+
return res;
|
|
40
|
+
}
|
|
41
|
+
res.dataJSON = json;
|
|
42
|
+
return res;
|
|
43
|
+
} } };
|
|
44
|
+
/**
|
|
45
|
+
* 预设拦截器 - 请求耗时
|
|
46
|
+
*/
|
|
47
|
+
const presetInterceptorWithRequestLog = { request: { onFulfilled(config) {
|
|
48
|
+
const requestId = Date.now().toString();
|
|
49
|
+
config.headers["X-Request-Id"] = requestId;
|
|
50
|
+
Request.getOptionValue(config, "enableTimeConsuming") && console.time(`[presetInterceptorWithLog] ${requestId}`);
|
|
51
|
+
return config;
|
|
52
|
+
} } };
|
|
53
|
+
/**
|
|
54
|
+
* 预设拦截器 - 请求认证
|
|
55
|
+
*/
|
|
56
|
+
const presetInterceptorWithRequestAuth = { request: { onFulfilled(config) {
|
|
57
|
+
config.headers.setAuthorization(`Bearer ${sessionStorage.getItem("Authorization") || ""}`);
|
|
58
|
+
return config;
|
|
59
|
+
} } };
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { presetInterceptorWithRequestAuth, presetInterceptorWithRequestLog, presetInterceptorWithResponseJSON, presetInterceptorWithResponseLog };
|
|
63
|
+
//# sourceMappingURL=interceptors.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptors.node.js","names":["presetInterceptorWithResponseLog: AxiosInterceptorParameters","presetInterceptorWithResponseJSON: AxiosInterceptorParameters","tempData: string | null","presetInterceptorWithRequestLog: AxiosInterceptorParameters","presetInterceptorWithRequestAuth: AxiosInterceptorParameters"],"sources":["../../../src/request/interceptors.node.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { AxiosInterceptorParameters } from './interface'\nimport { AxiosError } from 'axios'\nimport { FileBuffer } from '../file/node'\nimport { isJSONString, isNull, isString } from '../is'\nimport { Request } from './instance'\n\n/**\n * 预设拦截器 - 响应耗时\n */\nexport const presetInterceptorWithResponseLog: AxiosInterceptorParameters = {\n response: {\n onFulfilled(res) {\n const { config } = res\n const requestId = config.headers['X-Request-Id']\n const enableTimeConsuming = Request.getOptionValue<boolean | undefined>(config, 'enableTimeConsuming')\n enableTimeConsuming && console.timeEnd(`[presetInterceptorWithLog] ${requestId}`)\n return res\n },\n onRejected(err) {\n const requestId = err.config.headers['X-Request-Id']\n const enableTimeConsuming = Request.getOptionValue<boolean | undefined>(err.config, 'enableTimeConsuming')\n enableTimeConsuming && console.timeEnd(`[presetInterceptorWithLog] ${requestId}`)\n throw err\n },\n },\n}\n\n/**\n * 预设拦截器 - 响应尝试 JSON 解析,若解析成功,则将解析结果赋值给 res.dataJSON,不会影响后续拦截器的参数\n * @description 若 responseType 为 json 或 forcedJSONParsing 为 true ,则尝试解析响应体为 JSON 字符串\n * @description 其中前提是通过 `transformResponse: []` 覆盖内置的默认 transformResponse 函数\n */\nexport const presetInterceptorWithResponseJSON: AxiosInterceptorParameters = {\n response: {\n async onFulfilled(res) {\n const { config, request, data } = res\n const responseType = config.responseType\n const JSONRequested = responseType === 'json'\n const allowJSONRequested = JSONRequested || (config.transitional?.forcedJSONParsing ?? true)\n\n let tempData: string | null = null\n // 类型为字符串,且 allowJSONRequested 为 true ,则尝试解析\n if (isString(data) && allowJSONRequested) {\n tempData = data\n }\n // 类型为 Blob ,且 mime type 为 application/json ,且 allowJSONRequested 为 true ,则尝试解析\n else if (FileBuffer.isBlob(data) && data.type === 'application/json' && allowJSONRequested) {\n const buf = await FileBuffer.fromBlob(data)\n tempData = buf.toString()\n }\n\n // 不满足上述条件,直接返回\n if (isNull(tempData)) return res\n // 通过 parseReviver 尝试解析 tempData 字符串\n const [err, json] = isJSONString<any>(tempData, config.parseReviver)\n // 优先处理错误,若 silentJSONParsing 为 false ,则抛出错误;否则返回原始值\n if (err) {\n const silentJSONParsing = config.transitional?.silentJSONParsing ?? false\n if (!silentJSONParsing) {\n throw err.name === 'SyntaxError' ? AxiosError.from(err, AxiosError.ERR_BAD_RESPONSE, config, request, res) : err\n }\n return res\n }\n // 若解析成功,则返回解析结果\n (res as any).dataJSON = json\n return res\n },\n },\n}\n\n/**\n * 预设拦截器 - 请求耗时\n */\nexport const presetInterceptorWithRequestLog: AxiosInterceptorParameters = {\n request: {\n onFulfilled(config) {\n const requestId = Date.now().toString()\n config.headers['X-Request-Id'] = requestId\n const enableTimeConsuming = Request.getOptionValue<boolean | undefined>(config, 'enableTimeConsuming')\n enableTimeConsuming && console.time(`[presetInterceptorWithLog] ${requestId}`)\n return config\n },\n },\n}\n\n/**\n * 预设拦截器 - 请求认证\n */\nexport const presetInterceptorWithRequestAuth: AxiosInterceptorParameters = {\n request: {\n onFulfilled(config) {\n config.headers.setAuthorization(`Bearer ${sessionStorage.getItem('Authorization') || ''}`)\n return config\n },\n },\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAaA,mCAA+D,EAC1E,UAAU;CACR,YAAY,KAAK;EACf,MAAM,EAAE,WAAW;EACnB,MAAM,YAAY,OAAO,QAAQ;AAEjC,EAD4B,QAAQ,eAAoC,QAAQ,sBAAsB,IAC/E,QAAQ,QAAQ,8BAA8B,YAAY;AACjF,SAAO;;CAET,WAAW,KAAK;EACd,MAAM,YAAY,IAAI,OAAO,QAAQ;AAErC,EAD4B,QAAQ,eAAoC,IAAI,QAAQ,sBAAsB,IACnF,QAAQ,QAAQ,8BAA8B,YAAY;AACjF,QAAM;;CAET,EACF;;;;;;AAOD,MAAaC,oCAAgE,EAC3E,UAAU,EACR,MAAM,YAAY,KAAK;CACrB,MAAM,EAAE,QAAQ,SAAS,SAAS;CAGlC,MAAM,qBAFe,OAAO,iBACW,WACM,OAAO,cAAc,qBAAqB;CAEvF,IAAIC,WAA0B;AAE9B,KAAI,SAAS,KAAK,IAAI,mBACpB,YAAW;UAGJ,WAAW,OAAO,KAAK,IAAI,KAAK,SAAS,sBAAsB,mBAEtE,aADY,MAAM,WAAW,SAAS,KAAK,EAC5B,UAAU;AAI3B,KAAI,OAAO,SAAS,CAAE,QAAO;CAE7B,MAAM,CAAC,KAAK,QAAQ,aAAkB,UAAU,OAAO,aAAa;AAEpE,KAAI,KAAK;AAEP,MAAI,EADsB,OAAO,cAAc,qBAAqB,OAElE,OAAM,IAAI,SAAS,gBAAgB,WAAW,KAAK,KAAK,WAAW,kBAAkB,QAAQ,SAAS,IAAI,GAAG;AAE/G,SAAO;;AAGT,CAAC,IAAY,WAAW;AACxB,QAAO;GAEV,EACF;;;;AAKD,MAAaC,kCAA8D,EACzE,SAAS,EACP,YAAY,QAAQ;CAClB,MAAM,YAAY,KAAK,KAAK,CAAC,UAAU;AACvC,QAAO,QAAQ,kBAAkB;AAEjC,CAD4B,QAAQ,eAAoC,QAAQ,sBAAsB,IAC/E,QAAQ,KAAK,8BAA8B,YAAY;AAC9E,QAAO;GAEV,EACF;;;;AAKD,MAAaC,mCAA+D,EAC1E,SAAS,EACP,YAAY,QAAQ;AAClB,QAAO,QAAQ,iBAAiB,UAAU,eAAe,QAAQ,gBAAgB,IAAI,KAAK;AAC1F,QAAO;GAEV,EACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Axios, AxiosRequestConfig, CreateAxiosDefaults } from "axios";
|
|
2
|
+
|
|
3
|
+
//#region src/request/interface.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 提取 axios 拦截器参数类型
|
|
7
|
+
*/
|
|
8
|
+
interface AxiosInterceptorParameters {
|
|
9
|
+
/** 请求拦截器 */
|
|
10
|
+
request?: {
|
|
11
|
+
onFulfilled?: Parameters<Axios['interceptors']['request']['use']>[0];
|
|
12
|
+
onRejected?: Parameters<Axios['interceptors']['request']['use']>[1];
|
|
13
|
+
options?: Parameters<Axios['interceptors']['request']['use']>[2];
|
|
14
|
+
};
|
|
15
|
+
/** 响应拦截器 */
|
|
16
|
+
response?: {
|
|
17
|
+
onFulfilled?: Parameters<Axios['interceptors']['response']['use']>[0];
|
|
18
|
+
onRejected?: Parameters<Axios['interceptors']['response']['use']>[1];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 包装 axios.create 参数,额外传递自定义参数
|
|
23
|
+
* @function 1. 支持将额外的自定义 options 合并到 fetchOptions 并往下传递
|
|
24
|
+
* @function 2. 待注册的自定义拦截器
|
|
25
|
+
*/
|
|
26
|
+
interface AxiosCreateDefaultsWrapper<CustomOptions extends Record<string, any> = Record<string, any>, ReqData = any> extends CreateAxiosDefaults<ReqData> {
|
|
27
|
+
/** custom 可在拦截器内传递的配置选项 */
|
|
28
|
+
options?: CustomOptions;
|
|
29
|
+
/** custom 待注册的自定义拦截器 - 拦截器 request 先注册后执行,拦截器 response 先注册先执行 */
|
|
30
|
+
interceptors?: Array<AxiosInterceptorParameters>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 包装 axios 请求体
|
|
34
|
+
* @function 1. 支持 params 泛型
|
|
35
|
+
* @function 2. 支持 argsRegexp、args 实现动态路径
|
|
36
|
+
* @function 3. 支持将额外的自定义 options 合并到 fetchOptions 并往下传递
|
|
37
|
+
*/
|
|
38
|
+
interface AxiosRequestConfigWrapper<CustomOptions extends Record<string, any> = Record<string, any>, ReqData = any, ReqParams = any, ReqArgs extends Record<string, any> = Record<string, any>> extends AxiosRequestConfig<ReqData> {
|
|
39
|
+
/** override 指定 query 参数的类型定义 */
|
|
40
|
+
params?: ReqParams;
|
|
41
|
+
/** custom 动态路径匹配规则 */
|
|
42
|
+
argsRegexp?: RegExp;
|
|
43
|
+
/** custom 动态路径匹配对象 */
|
|
44
|
+
args?: ReqArgs;
|
|
45
|
+
/** custom 可在拦截器内传递的配置选项 */
|
|
46
|
+
options?: CustomOptions;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 包装 axios 响应体,参考 await-to-js 包装 promise 实现错误优先,并实现类型收窄
|
|
50
|
+
*/
|
|
51
|
+
type AxiosResponseWrapper<E extends Error, R = any> = [null, R] | [E, undefined];
|
|
52
|
+
//#endregion
|
|
53
|
+
export { AxiosCreateDefaultsWrapper, AxiosInterceptorParameters, AxiosRequestConfigWrapper, AxiosResponseWrapper };
|
|
54
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","names":[],"sources":["../../../src/request/interface.ts"],"sourcesContent":[],"mappings":";;;;;;AAKA;AAG6B,UAHZ,0BAAA,CAGY;EAAX;EACU,OAAA,CAAA,EAAA;IAAX,WAAA,CAAA,EADC,UACD,CADY,KACZ,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACQ,UAAA,CAAA,EADR,UACQ,CADG,KACH,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAAX,OAAA,CAAA,EAAA,UAAA,CAAW,KAAX,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAIe,CAAA;EAAX;EACU,QAAA,CAAA,EAAA;IAAX,WAAA,CAAA,EADC,UACD,CADY,KACZ,CAAA,cAAA,CAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAAU,UAAA,CAAA,EAAV,UAAU,CAAC,KAAD,CAAA,cAAA,CAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EASV,CAAA;;;;;;;AAAmH,UAAnH,0BAAmH,CAAA,sBAAlE,MAAkE,CAAA,MAAA,EAAA,GAAA,CAAA,GAA5C,MAA4C,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,UAAA,GAAA,CAAA,SAAA,mBAAA,CAAoB,OAApB,CAAA,CAAA;EAAmB;EAatI,OAAA,CAAA,EAXL,aAWK;EAAgD;EAAsB,YAAA,CAAA,EATtE,KASsE,CAThE,0BASgE,CAAA;;;;;;;;AAC7E,UADO,yBACP,CAAA,sBADuD,MACvD,CAAA,MAAA,EAAA,GAAA,CAAA,GAD6E,MAC7E,CAAA,MAAA,EAAA,GAAA,CAAA,EAAA,UAAA,GAAA,EAAA,YAAA,GAAA,EAAA,gBADkJ,MAClJ,CAAA,MAAA,EAAA,GAAA,CAAA,GADwK,MACxK,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,SAAA,kBAAA,CAAmB,OAAnB,CAAA,CAAA;EAAkB;EAchB,MAAA,CAAA,EAZD,SAYC;EAA+B;EAAyB,UAAA,CAAA,EAVrD,MAUqD;EAAM;EAAC,IAAA,CAAA,EARlE,OAQkE;;YAN/D;;;;;KAMA,+BAA+B,yBAAyB,MAAM"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const require_instance = require('./instance.cjs');
|
|
2
|
+
const require_interceptors_node = require('./interceptors.node.cjs');
|
|
3
|
+
|
|
4
|
+
exports.Request = require_instance.Request;
|
|
5
|
+
exports.presetInterceptorWithRequestAuth = require_interceptors_node.presetInterceptorWithRequestAuth;
|
|
6
|
+
exports.presetInterceptorWithRequestLog = require_interceptors_node.presetInterceptorWithRequestLog;
|
|
7
|
+
exports.presetInterceptorWithResponseJSON = require_interceptors_node.presetInterceptorWithResponseJSON;
|
|
8
|
+
exports.presetInterceptorWithResponseLog = require_interceptors_node.presetInterceptorWithResponseLog;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AxiosCreateDefaultsWrapper, AxiosInterceptorParameters, AxiosRequestConfigWrapper, AxiosResponseWrapper } from "./interface.js";
|
|
2
|
+
import { presetInterceptorWithRequestAuth, presetInterceptorWithRequestLog, presetInterceptorWithResponseJSON, presetInterceptorWithResponseLog } from "./interceptors.node.js";
|
|
3
|
+
import { Request } from "./instance.js";
|
|
4
|
+
export { AxiosCreateDefaultsWrapper, AxiosInterceptorParameters, AxiosRequestConfigWrapper, AxiosResponseWrapper, Request, presetInterceptorWithRequestAuth, presetInterceptorWithRequestLog, presetInterceptorWithResponseJSON, presetInterceptorWithResponseLog };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Request } from "./instance.js";
|
|
2
|
+
import { presetInterceptorWithRequestAuth, presetInterceptorWithRequestLog, presetInterceptorWithResponseJSON, presetInterceptorWithResponseLog } from "./interceptors.node.js";
|
|
3
|
+
|
|
4
|
+
export { Request, presetInterceptorWithRequestAuth, presetInterceptorWithRequestLog, presetInterceptorWithResponseJSON, presetInterceptorWithResponseLog };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let classnames = require("classnames");
|
|
3
|
+
classnames = require_rolldown_runtime.__toESM(classnames);
|
|
4
|
+
let clsx = require("clsx");
|
|
5
|
+
clsx = require_rolldown_runtime.__toESM(clsx);
|
|
6
|
+
|
|
7
|
+
//#region src/string/className.ts
|
|
8
|
+
const stringClsn = (...args) => (0, classnames.default)(...args);
|
|
9
|
+
const stringClsx = clsx.default;
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.stringClsn = stringClsn;
|
|
13
|
+
exports.stringClsx = stringClsx;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Argument } from "classnames";
|
|
2
|
+
import clsx, { ClassValue } from "clsx";
|
|
3
|
+
|
|
4
|
+
//#region src/string/className.d.ts
|
|
5
|
+
type StringClsnValue = Argument;
|
|
6
|
+
type StringClsxValue = ClassValue;
|
|
7
|
+
declare const stringClsn: (...args: Argument[]) => string;
|
|
8
|
+
declare const stringClsx: typeof clsx;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { StringClsnValue, StringClsxValue, stringClsn, stringClsx };
|
|
11
|
+
//# sourceMappingURL=className.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"className.d.ts","names":[],"sources":["../../../src/string/className.ts"],"sourcesContent":[],"mappings":";;;;KAKY,eAAA,GAAkB;AAAlB,KACA,eAAA,GAAkB,UADA;AAClB,cAEC,UAFc,EAAG,CAAA,GAAA,IAAA,EAEM,QAFI,EAAA,EAAA,GAAA,MAAA;AAE3B,cACA,UADuB,EAAA,OACb,IADqB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import clsn from "classnames";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
|
|
4
|
+
//#region src/string/className.ts
|
|
5
|
+
const stringClsn = (...args) => clsn(...args);
|
|
6
|
+
const stringClsx = clsx;
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { stringClsn, stringClsx };
|
|
10
|
+
//# sourceMappingURL=className.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"className.js","names":[],"sources":["../../../src/string/className.ts"],"sourcesContent":["import type { Argument } from 'classnames'\nimport type { ClassValue } from 'clsx'\nimport clsn from 'classnames'\nimport clsx from 'clsx'\n\nexport type StringClsnValue = Argument\nexport type StringClsxValue = ClassValue\n\nexport const stringClsn = (...args: Argument[]): string => clsn(...args)\nexport const stringClsx = clsx\n"],"mappings":";;;;AAQA,MAAa,cAAc,GAAG,SAA6B,KAAK,GAAG,KAAK;AACxE,MAAa,aAAa"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_className = require('./className.cjs');
|
|
2
|
+
const require_proto = require('./proto.cjs');
|
|
3
|
+
|
|
4
|
+
exports.stringClsn = require_className.stringClsn;
|
|
5
|
+
exports.stringClsx = require_className.stringClsx;
|
|
6
|
+
exports.stringReplaceParametersWithObj = require_proto.stringReplaceParametersWithObj;
|
|
7
|
+
exports.stringSliceParametersWithSort = require_proto.stringSliceParametersWithSort;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { StringClsnValue, StringClsxValue, stringClsn, stringClsx } from "./className.js";
|
|
2
|
+
import { stringReplaceParametersWithObj, stringSliceParametersWithSort } from "./proto.js";
|
|
3
|
+
export { StringClsnValue, StringClsxValue, stringClsn, stringClsx, stringReplaceParametersWithObj, stringSliceParametersWithSort };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_isPrimitive = require('../is/isPrimitive.cjs');
|
|
3
|
+
let es_toolkit = require("es-toolkit");
|
|
4
|
+
|
|
5
|
+
//#region src/string/proto.ts
|
|
6
|
+
/**
|
|
7
|
+
* 方法 `String.prototype.replace` 的第二个参数的快捷实现,可根据对象的键值对进行替换
|
|
8
|
+
*
|
|
9
|
+
* @example args = [ 'h', 0, 'hello' ]
|
|
10
|
+
* @example args = [ '[h]', 'h', 0, '[h][e][l][l][o]' ]
|
|
11
|
+
*/
|
|
12
|
+
function stringReplaceParametersWithObj(obj) {
|
|
13
|
+
return (...args) => {
|
|
14
|
+
const substring = (0, es_toolkit.at)(args, [-3])[0];
|
|
15
|
+
if (substring && Object.prototype.hasOwnProperty.call(obj, substring)) return obj[substring];
|
|
16
|
+
return (0, es_toolkit.head)(args);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 方法 `String.prototype.slice` 的参数,额外支持索引区间排序问题
|
|
21
|
+
*
|
|
22
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice
|
|
23
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring
|
|
24
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
|
|
25
|
+
*/
|
|
26
|
+
function stringSliceParametersWithSort(start, end) {
|
|
27
|
+
const startArg = Number.isSafeInteger(start) ? start : 0;
|
|
28
|
+
const endArg = !require_isPrimitive.isNotNumber(end) ? end : 0;
|
|
29
|
+
if (require_isPrimitive.isUndefined(endArg)) return [startArg];
|
|
30
|
+
if (startArg >= 0 && endArg < 0) return [startArg, endArg];
|
|
31
|
+
if (startArg < 0 && endArg >= 0) return [endArg, startArg];
|
|
32
|
+
return [startArg, endArg].sort((a, b) => a - b);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
exports.stringReplaceParametersWithObj = stringReplaceParametersWithObj;
|
|
37
|
+
exports.stringSliceParametersWithSort = stringSliceParametersWithSort;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/string/proto.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 方法 `String.prototype.replace` 的第二个参数的快捷实现,可根据对象的键值对进行替换
|
|
4
|
+
*
|
|
5
|
+
* @example args = [ 'h', 0, 'hello' ]
|
|
6
|
+
* @example args = [ '[h]', 'h', 0, '[h][e][l][l][o]' ]
|
|
7
|
+
*/
|
|
8
|
+
declare function stringReplaceParametersWithObj(obj: Record<string, string>): (...args: any[]) => string;
|
|
9
|
+
/**
|
|
10
|
+
* 方法 `String.prototype.slice` 的参数,额外支持索引区间排序问题
|
|
11
|
+
*
|
|
12
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice
|
|
13
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring
|
|
14
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
|
|
15
|
+
*/
|
|
16
|
+
declare function stringSliceParametersWithSort(start?: number, end?: number): [number, number?];
|
|
17
|
+
//#endregion
|
|
18
|
+
export { stringReplaceParametersWithObj, stringSliceParametersWithSort };
|
|
19
|
+
//# sourceMappingURL=proto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proto.d.ts","names":[],"sources":["../../../src/string/proto.ts"],"sourcesContent":[],"mappings":";;AASA;AAiBA;;;;iBAjBgB,8BAAA,MAAoC;;;;;;;;iBAiBpC,6BAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isNotNumber, isUndefined as isUndefined$1 } from "../is/isPrimitive.js";
|
|
2
|
+
import { at, head } from "es-toolkit";
|
|
3
|
+
|
|
4
|
+
//#region src/string/proto.ts
|
|
5
|
+
/**
|
|
6
|
+
* 方法 `String.prototype.replace` 的第二个参数的快捷实现,可根据对象的键值对进行替换
|
|
7
|
+
*
|
|
8
|
+
* @example args = [ 'h', 0, 'hello' ]
|
|
9
|
+
* @example args = [ '[h]', 'h', 0, '[h][e][l][l][o]' ]
|
|
10
|
+
*/
|
|
11
|
+
function stringReplaceParametersWithObj(obj) {
|
|
12
|
+
return (...args) => {
|
|
13
|
+
const substring = at(args, [-3])[0];
|
|
14
|
+
if (substring && Object.prototype.hasOwnProperty.call(obj, substring)) return obj[substring];
|
|
15
|
+
return head(args);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 方法 `String.prototype.slice` 的参数,额外支持索引区间排序问题
|
|
20
|
+
*
|
|
21
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice
|
|
22
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring
|
|
23
|
+
* @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
|
|
24
|
+
*/
|
|
25
|
+
function stringSliceParametersWithSort(start, end) {
|
|
26
|
+
const startArg = Number.isSafeInteger(start) ? start : 0;
|
|
27
|
+
const endArg = !isNotNumber(end) ? end : 0;
|
|
28
|
+
if (isUndefined$1(endArg)) return [startArg];
|
|
29
|
+
if (startArg >= 0 && endArg < 0) return [startArg, endArg];
|
|
30
|
+
if (startArg < 0 && endArg >= 0) return [endArg, startArg];
|
|
31
|
+
return [startArg, endArg].sort((a, b) => a - b);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { stringReplaceParametersWithObj, stringSliceParametersWithSort };
|
|
36
|
+
//# sourceMappingURL=proto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proto.js","names":["isUndefined"],"sources":["../../../src/string/proto.ts"],"sourcesContent":["import { at, head } from 'es-toolkit'\nimport { isNotNumber, isUndefined } from '../is'\n\n/**\n * 方法 `String.prototype.replace` 的第二个参数的快捷实现,可根据对象的键值对进行替换\n *\n * @example args = [ 'h', 0, 'hello' ]\n * @example args = [ '[h]', 'h', 0, '[h][e][l][l][o]' ]\n */\nexport function stringReplaceParametersWithObj(obj: Record<string, string>) {\n return (...args: any[]): string => {\n const substring = at(args, [-3])[0]\n if (substring && Object.prototype.hasOwnProperty.call(obj, substring)) {\n return obj[substring]\n }\n return head(args)\n }\n}\n\n/**\n * 方法 `String.prototype.slice` 的参数,额外支持索引区间排序问题\n *\n * @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n * @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n * @reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nexport function stringSliceParametersWithSort(start?: number, end?: number): [number, number?] {\n const startArg = (Number.isSafeInteger(start) ? start : 0) as number // 不允许 undefined\n const endArg = !isNotNumber(end) ? end : 0 // 允许 undefined\n\n if (isUndefined(endArg)) {\n return [startArg]\n }\n if (startArg >= 0 && endArg < 0) {\n return [startArg, endArg]\n }\n if (startArg < 0 && endArg >= 0) {\n return [endArg, startArg]\n }\n // 相同区间按数值大小升序排列\n return ([startArg, endArg].sort((a, b) => a - b)) as [number, number]\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,+BAA+B,KAA6B;AAC1E,SAAQ,GAAG,SAAwB;EACjC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,MAAI,aAAa,OAAO,UAAU,eAAe,KAAK,KAAK,UAAU,CACnE,QAAO,IAAI;AAEb,SAAO,KAAK,KAAK;;;;;;;;;;AAWrB,SAAgB,8BAA8B,OAAgB,KAAiC;CAC7F,MAAM,WAAY,OAAO,cAAc,MAAM,GAAG,QAAQ;CACxD,MAAM,SAAS,CAAC,YAAY,IAAI,GAAG,MAAM;AAEzC,KAAIA,cAAY,OAAO,CACrB,QAAO,CAAC,SAAS;AAEnB,KAAI,YAAY,KAAK,SAAS,EAC5B,QAAO,CAAC,UAAU,OAAO;AAE3B,KAAI,WAAW,KAAK,UAAU,EAC5B,QAAO,CAAC,QAAQ,SAAS;AAG3B,QAAQ,CAAC,UAAU,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_treeFilter = require('./treeFilter.cjs');
|
|
2
|
+
const require_treeFlatten = require('./treeFlatten.cjs');
|
|
3
|
+
const require_treeGenerate = require('./treeGenerate.cjs');
|
|
4
|
+
|
|
5
|
+
exports.treeFilter = require_treeFilter.treeFilter;
|
|
6
|
+
exports.treeFlatten = require_treeFlatten.treeFlatten;
|
|
7
|
+
exports.treeGenerate = require_treeGenerate.treeGenerate;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TreeFilterParams, TreeOptions } from "./interface.js";
|
|
2
|
+
import { treeFilter } from "./treeFilter.js";
|
|
3
|
+
import { treeFlatten } from "./treeFlatten.js";
|
|
4
|
+
import { treeGenerate } from "./treeGenerate.js";
|
|
5
|
+
export { TreeFilterParams, TreeOptions, treeFilter, treeFlatten, treeGenerate };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/tree/interface.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 树形结构过滤函数的参数
|
|
4
|
+
*/
|
|
5
|
+
interface TreeFilterParams {
|
|
6
|
+
/** 树节点 */
|
|
7
|
+
node: any;
|
|
8
|
+
/** 树节点当前层级的索引 */
|
|
9
|
+
index: number;
|
|
10
|
+
/** 树节点层级 */
|
|
11
|
+
level: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 树形相关函数的配置参数,聚合在一个 interface 内便于复用
|
|
15
|
+
*/
|
|
16
|
+
interface TreeOptions {
|
|
17
|
+
/**
|
|
18
|
+
* @zh 当前节点关联父节点键名,默认值为 'pid'
|
|
19
|
+
*/
|
|
20
|
+
parentIdKey?: string;
|
|
21
|
+
/**
|
|
22
|
+
* @zh 当前节点主键键名,默认值为 'id'
|
|
23
|
+
*/
|
|
24
|
+
primaryIdKey?: string;
|
|
25
|
+
/**
|
|
26
|
+
* @zh 当前节点子树键名,默认值为 'children'
|
|
27
|
+
*/
|
|
28
|
+
childrenKey?: string;
|
|
29
|
+
/**
|
|
30
|
+
* @zh 根节点关联值判断依据,默认值为 null
|
|
31
|
+
*/
|
|
32
|
+
rootValue?: any;
|
|
33
|
+
/**
|
|
34
|
+
* @zh 树节点筛选函数,默认值为 null,表示不筛选
|
|
35
|
+
*/
|
|
36
|
+
filter?: (node: TreeFilterParams['node'], index: TreeFilterParams['index'], level: TreeFilterParams['level']) => boolean;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { TreeFilterParams, TreeOptions };
|
|
40
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","names":[],"sources":["../../../src/tree/interface.ts"],"sourcesContent":[],"mappings":";;AAGA;AAYA;AAoBkB,UAhCD,gBAAA,CAgCC;EAAiC;EAAkC,IAAA,EAAA,GAAA;EAAgB;;;;;;;;UApBpF,WAAA;;;;;;;;;;;;;;;;;;;;kBAoBC,iCAAiC,kCAAkC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const require_isPrimitiveWithout = require('../is/isPrimitiveWithout.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFilter.ts
|
|
4
|
+
/**
|
|
5
|
+
* 递归过滤节点 - 保留匹配节点及其所有父节点路径
|
|
6
|
+
* @param {TreeFilterParams} params 递归过滤节点的参数
|
|
7
|
+
* @param {Required<Pick<TreeOptions, 'childrenKey' | 'filter'>>} options 递归过滤节点的选项
|
|
8
|
+
* @returns {[boolean, any]} [过滤结果, 过滤后的节点]
|
|
9
|
+
*/
|
|
10
|
+
function treeFilterNode(params, options) {
|
|
11
|
+
const { node, index, level } = params;
|
|
12
|
+
const { childrenKey, filter } = options;
|
|
13
|
+
const filteredChildren = [];
|
|
14
|
+
const children = node[childrenKey];
|
|
15
|
+
if (require_isPrimitiveWithout.isArray(children) && children.length > 0) for (let i = 0; i < children.length; i++) {
|
|
16
|
+
const [flag, filteredNode] = treeFilterNode({
|
|
17
|
+
node: children[i],
|
|
18
|
+
index: i,
|
|
19
|
+
level: level + 1
|
|
20
|
+
}, options);
|
|
21
|
+
flag && filteredChildren.push(filteredNode);
|
|
22
|
+
}
|
|
23
|
+
if (filteredChildren.length > 0) return [true, {
|
|
24
|
+
...node,
|
|
25
|
+
[childrenKey]: filteredChildren
|
|
26
|
+
}];
|
|
27
|
+
if (filter(node, index, level)) return [true, {
|
|
28
|
+
...node,
|
|
29
|
+
[childrenKey]: []
|
|
30
|
+
}];
|
|
31
|
+
return [false, null];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 过滤树形结构 -保留匹配节点及其完整父节点路径
|
|
35
|
+
* @param items 原始树形数据数组
|
|
36
|
+
* @param options 配置选项
|
|
37
|
+
* @returns {any[]} 过滤后的树形数据
|
|
38
|
+
*/
|
|
39
|
+
function treeFilter(items, options) {
|
|
40
|
+
const { childrenKey = "children", filter } = options || {};
|
|
41
|
+
if (!filter) return items;
|
|
42
|
+
const result = [];
|
|
43
|
+
for (let i = 0; i < items.length; i++) {
|
|
44
|
+
const [flag, filteredNode] = treeFilterNode({
|
|
45
|
+
node: items[i],
|
|
46
|
+
index: i,
|
|
47
|
+
level: 0
|
|
48
|
+
}, {
|
|
49
|
+
childrenKey,
|
|
50
|
+
filter
|
|
51
|
+
});
|
|
52
|
+
flag && result.push(filteredNode);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
exports.treeFilter = treeFilter;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TreeOptions } from "./interface.js";
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFilter.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 过滤树形结构 -保留匹配节点及其完整父节点路径
|
|
7
|
+
* @param items 原始树形数据数组
|
|
8
|
+
* @param options 配置选项
|
|
9
|
+
* @returns {any[]} 过滤后的树形数据
|
|
10
|
+
*/
|
|
11
|
+
declare function treeFilter(items: any[], options?: Pick<TreeOptions, 'childrenKey' | 'filter'>): any[];
|
|
12
|
+
//#endregion
|
|
13
|
+
export { treeFilter };
|
|
14
|
+
//# sourceMappingURL=treeFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeFilter.d.ts","names":[],"sources":["../../../src/tree/treeFilter.ts"],"sourcesContent":[],"mappings":";;;;;;AA6CA;;;;iBAAgB,UAAA,yBAAmC,KAAK"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isArray } from "../is/isPrimitiveWithout.js";
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFilter.ts
|
|
4
|
+
/**
|
|
5
|
+
* 递归过滤节点 - 保留匹配节点及其所有父节点路径
|
|
6
|
+
* @param {TreeFilterParams} params 递归过滤节点的参数
|
|
7
|
+
* @param {Required<Pick<TreeOptions, 'childrenKey' | 'filter'>>} options 递归过滤节点的选项
|
|
8
|
+
* @returns {[boolean, any]} [过滤结果, 过滤后的节点]
|
|
9
|
+
*/
|
|
10
|
+
function treeFilterNode(params, options) {
|
|
11
|
+
const { node, index, level } = params;
|
|
12
|
+
const { childrenKey, filter } = options;
|
|
13
|
+
const filteredChildren = [];
|
|
14
|
+
const children = node[childrenKey];
|
|
15
|
+
if (isArray(children) && children.length > 0) for (let i = 0; i < children.length; i++) {
|
|
16
|
+
const [flag, filteredNode] = treeFilterNode({
|
|
17
|
+
node: children[i],
|
|
18
|
+
index: i,
|
|
19
|
+
level: level + 1
|
|
20
|
+
}, options);
|
|
21
|
+
flag && filteredChildren.push(filteredNode);
|
|
22
|
+
}
|
|
23
|
+
if (filteredChildren.length > 0) return [true, {
|
|
24
|
+
...node,
|
|
25
|
+
[childrenKey]: filteredChildren
|
|
26
|
+
}];
|
|
27
|
+
if (filter(node, index, level)) return [true, {
|
|
28
|
+
...node,
|
|
29
|
+
[childrenKey]: []
|
|
30
|
+
}];
|
|
31
|
+
return [false, null];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 过滤树形结构 -保留匹配节点及其完整父节点路径
|
|
35
|
+
* @param items 原始树形数据数组
|
|
36
|
+
* @param options 配置选项
|
|
37
|
+
* @returns {any[]} 过滤后的树形数据
|
|
38
|
+
*/
|
|
39
|
+
function treeFilter(items, options) {
|
|
40
|
+
const { childrenKey = "children", filter } = options || {};
|
|
41
|
+
if (!filter) return items;
|
|
42
|
+
const result = [];
|
|
43
|
+
for (let i = 0; i < items.length; i++) {
|
|
44
|
+
const [flag, filteredNode] = treeFilterNode({
|
|
45
|
+
node: items[i],
|
|
46
|
+
index: i,
|
|
47
|
+
level: 0
|
|
48
|
+
}, {
|
|
49
|
+
childrenKey,
|
|
50
|
+
filter
|
|
51
|
+
});
|
|
52
|
+
flag && result.push(filteredNode);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { treeFilter };
|
|
59
|
+
//# sourceMappingURL=treeFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeFilter.js","names":["filteredChildren: any[]","result: any[]"],"sources":["../../../src/tree/treeFilter.ts"],"sourcesContent":["import type { TreeFilterParams, TreeOptions } from './interface'\nimport { isArray } from '../is'\n\n/**\n * 递归过滤节点 - 保留匹配节点及其所有父节点路径\n * @param {TreeFilterParams} params 递归过滤节点的参数\n * @param {Required<Pick<TreeOptions, 'childrenKey' | 'filter'>>} options 递归过滤节点的选项\n * @returns {[boolean, any]} [过滤结果, 过滤后的节点]\n */\nfunction treeFilterNode(params: TreeFilterParams, options: Required<Pick<TreeOptions, 'childrenKey' | 'filter'>>): [boolean, any] {\n const { node, index, level } = params\n const { childrenKey, filter } = options\n\n // 存储当前节点有匹配的子节点\n const filteredChildren: any[] = []\n // 得到子节点,并遍历子节点,递归处理子节点\n const children = node[childrenKey]\n if (isArray(children) && children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n const [flag, filteredNode] = treeFilterNode({ node: children[i], index: i, level: level + 1 }, options)\n // 如果子节点被保留(可能是匹配节点或包含匹配子节点的节点)\n flag && filteredChildren.push(filteredNode)\n }\n }\n // 如果有过滤后的子节点,更新子节点列表, 则直接返回\n if (filteredChildren.length > 0) {\n return [true, { ...node, [childrenKey]: filteredChildren }]\n }\n\n // 如果没有过滤后的子节点,则需检查当前节点是否匹配,则清空 children 属性并返回\n const matched = filter(node, index, level)\n if (matched) {\n return [true, { ...node, [childrenKey]: [] }]\n }\n\n // 当前节点既不匹配也没有匹配的子节点,则不保留该节点\n return [false, null]\n}\n\n/**\n * 过滤树形结构 -保留匹配节点及其完整父节点路径\n * @param items 原始树形数据数组\n * @param options 配置选项\n * @returns {any[]} 过滤后的树形数据\n */\nexport function treeFilter(items: any[], options?: Pick<TreeOptions, 'childrenKey' | 'filter'>): any[] {\n const { childrenKey = 'children', filter } = options || {}\n\n // 如果没有提供过滤函数,直接返回原始数据\n if (!filter) return items\n\n // 处理根节点数组\n const result: any[] = []\n for (let i = 0; i < items.length; i++) {\n const [flag, filteredNode] = treeFilterNode({ node: items[i], index: i, level: 0 }, { childrenKey, filter })\n flag && result.push(filteredNode)\n }\n\n return result\n}\n"],"mappings":";;;;;;;;;AASA,SAAS,eAAe,QAA0B,SAAgF;CAChI,MAAM,EAAE,MAAM,OAAO,UAAU;CAC/B,MAAM,EAAE,aAAa,WAAW;CAGhC,MAAMA,mBAA0B,EAAE;CAElC,MAAM,WAAW,KAAK;AACtB,KAAI,QAAQ,SAAS,IAAI,SAAS,SAAS,EACzC,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,CAAC,MAAM,gBAAgB,eAAe;GAAE,MAAM,SAAS;GAAI,OAAO;GAAG,OAAO,QAAQ;GAAG,EAAE,QAAQ;AAEvG,UAAQ,iBAAiB,KAAK,aAAa;;AAI/C,KAAI,iBAAiB,SAAS,EAC5B,QAAO,CAAC,MAAM;EAAE,GAAG;GAAO,cAAc;EAAkB,CAAC;AAK7D,KADgB,OAAO,MAAM,OAAO,MAAM,CAExC,QAAO,CAAC,MAAM;EAAE,GAAG;GAAO,cAAc,EAAE;EAAE,CAAC;AAI/C,QAAO,CAAC,OAAO,KAAK;;;;;;;;AAStB,SAAgB,WAAW,OAAc,SAA8D;CACrG,MAAM,EAAE,cAAc,YAAY,WAAW,WAAW,EAAE;AAG1D,KAAI,CAAC,OAAQ,QAAO;CAGpB,MAAMC,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,CAAC,MAAM,gBAAgB,eAAe;GAAE,MAAM,MAAM;GAAI,OAAO;GAAG,OAAO;GAAG,EAAE;GAAE;GAAa;GAAQ,CAAC;AAC5G,UAAQ,OAAO,KAAK,aAAa;;AAGnC,QAAO"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const require_isPrimitiveWithout = require('../is/isPrimitiveWithout.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFlatten.ts
|
|
4
|
+
/**
|
|
5
|
+
* @title 借助对象的引用将树形结构转化为平铺结构
|
|
6
|
+
* @param {any[]} items 树形结构数组
|
|
7
|
+
* @param {any} options 配置项
|
|
8
|
+
* @param {any} options.childrenKey 配置项,默认值为 'children'
|
|
9
|
+
* @returns 平铺结构数组
|
|
10
|
+
*/
|
|
11
|
+
function treeFlatten(items, options) {
|
|
12
|
+
const { childrenKey = "children" } = options || {};
|
|
13
|
+
const aFlatten = [];
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
const { [childrenKey]: children, ...restItem } = item;
|
|
16
|
+
aFlatten.push(restItem);
|
|
17
|
+
if (require_isPrimitiveWithout.isArray(children) && children.length) aFlatten.push(...treeFlatten(children, options));
|
|
18
|
+
}
|
|
19
|
+
return aFlatten;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.treeFlatten = treeFlatten;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TreeOptions } from "./interface.js";
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFlatten.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @title 借助对象的引用将树形结构转化为平铺结构
|
|
7
|
+
* @param {any[]} items 树形结构数组
|
|
8
|
+
* @param {any} options 配置项
|
|
9
|
+
* @param {any} options.childrenKey 配置项,默认值为 'children'
|
|
10
|
+
* @returns 平铺结构数组
|
|
11
|
+
*/
|
|
12
|
+
declare function treeFlatten(items: any[], options?: Pick<TreeOptions, 'childrenKey'>): any[];
|
|
13
|
+
//#endregion
|
|
14
|
+
export { treeFlatten };
|
|
15
|
+
//# sourceMappingURL=treeFlatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeFlatten.d.ts","names":[],"sources":["../../../src/tree/treeFlatten.ts"],"sourcesContent":[],"mappings":";;;;;;AAUA;;;;;iBAAgB,WAAA,yBAAoC,KAAK"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isArray } from "../is/isPrimitiveWithout.js";
|
|
2
|
+
|
|
3
|
+
//#region src/tree/treeFlatten.ts
|
|
4
|
+
/**
|
|
5
|
+
* @title 借助对象的引用将树形结构转化为平铺结构
|
|
6
|
+
* @param {any[]} items 树形结构数组
|
|
7
|
+
* @param {any} options 配置项
|
|
8
|
+
* @param {any} options.childrenKey 配置项,默认值为 'children'
|
|
9
|
+
* @returns 平铺结构数组
|
|
10
|
+
*/
|
|
11
|
+
function treeFlatten(items, options) {
|
|
12
|
+
const { childrenKey = "children" } = options || {};
|
|
13
|
+
const aFlatten = [];
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
const { [childrenKey]: children, ...restItem } = item;
|
|
16
|
+
aFlatten.push(restItem);
|
|
17
|
+
if (isArray(children) && children.length) aFlatten.push(...treeFlatten(children, options));
|
|
18
|
+
}
|
|
19
|
+
return aFlatten;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { treeFlatten };
|
|
24
|
+
//# sourceMappingURL=treeFlatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeFlatten.js","names":["aFlatten: any[]"],"sources":["../../../src/tree/treeFlatten.ts"],"sourcesContent":["import type { TreeOptions } from './interface'\nimport { isArray } from '../is'\n\n/**\n * @title 借助对象的引用将树形结构转化为平铺结构\n * @param {any[]} items 树形结构数组\n * @param {any} options 配置项\n * @param {any} options.childrenKey 配置项,默认值为 'children'\n * @returns 平铺结构数组\n */\nexport function treeFlatten(items: any[], options?: Pick<TreeOptions, 'childrenKey'>): any[] {\n const { childrenKey = 'children' } = options || {}\n\n // 平铺结构最终结果\n const aFlatten: any[] = []\n\n for (const item of items) {\n const { [childrenKey]: children, ...restItem } = item\n aFlatten.push(restItem)\n // item 若包含 children 则递归调用\n if (isArray(children) && children.length) {\n aFlatten.push(...treeFlatten(children, options))\n }\n }\n\n return aFlatten\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,YAAY,OAAc,SAAmD;CAC3F,MAAM,EAAE,cAAc,eAAe,WAAW,EAAE;CAGlD,MAAMA,WAAkB,EAAE;AAE1B,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,GAAG,cAAc,UAAU,GAAG,aAAa;AACjD,WAAS,KAAK,SAAS;AAEvB,MAAI,QAAQ,SAAS,IAAI,SAAS,OAChC,UAAS,KAAK,GAAG,YAAY,UAAU,QAAQ,CAAC;;AAIpD,QAAO"}
|