ut2 1.13.0 → 1.15.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.
Files changed (138) hide show
  1. package/README.md +3 -2
  2. package/dist/ut2.js +142 -34
  3. package/dist/ut2.js.map +1 -1
  4. package/dist/ut2.min.js +1 -1
  5. package/dist/ut2.min.js.map +1 -1
  6. package/es/findKey.js +1 -1
  7. package/es/guard.js +19 -0
  8. package/es/index.js +4 -1
  9. package/es/internals/helpers.js +1 -1
  10. package/es/mergeObject.js +17 -0
  11. package/es/retry.js +43 -0
  12. package/es/tryit.js +1 -1
  13. package/lib/findKey.js +3 -3
  14. package/lib/guard.js +21 -0
  15. package/lib/index.js +8 -2
  16. package/lib/internals/helpers.js +1 -1
  17. package/lib/mergeObject.js +19 -0
  18. package/lib/retry.js +45 -0
  19. package/lib/tryit.js +2 -2
  20. package/package.json +4 -2
  21. package/types/after.d.ts +0 -1
  22. package/types/allKeys.d.ts +0 -1
  23. package/types/allKeysIn.d.ts +0 -1
  24. package/types/before.d.ts +0 -1
  25. package/types/camelCase.d.ts +1 -2
  26. package/types/capitalize.d.ts +0 -1
  27. package/types/castArray.d.ts +0 -1
  28. package/types/ceil.d.ts +1 -2
  29. package/types/chunk.d.ts +0 -1
  30. package/types/compact.d.ts +1 -2
  31. package/types/constant.d.ts +0 -1
  32. package/types/debounce.d.ts +0 -1
  33. package/types/delay.d.ts +0 -1
  34. package/types/difference.d.ts +0 -1
  35. package/types/eq.d.ts +1 -2
  36. package/types/escape.d.ts +1 -2
  37. package/types/escapeRegExp.d.ts +1 -2
  38. package/types/filter.d.ts +0 -1
  39. package/types/floor.d.ts +1 -2
  40. package/types/fromPairs.d.ts +2 -1
  41. package/types/groupBy.d.ts +0 -1
  42. package/types/guard.d.ts +22 -0
  43. package/types/identity.d.ts +0 -1
  44. package/types/inRange.d.ts +0 -1
  45. package/types/index.d.ts +4 -1
  46. package/types/internals/helpers.d.ts +2 -6
  47. package/types/internals/native.d.ts +6 -12
  48. package/types/internals/root.d.ts +2 -3
  49. package/types/internals/types.d.ts +4 -0
  50. package/types/intersection.d.ts +0 -1
  51. package/types/invert.d.ts +1 -2
  52. package/types/isArguments.d.ts +0 -1
  53. package/types/isArray.d.ts +0 -1
  54. package/types/isArrayBuffer.d.ts +0 -1
  55. package/types/isArrayLike.d.ts +0 -1
  56. package/types/isArrayLikeObject.d.ts +0 -1
  57. package/types/isBigInt.d.ts +0 -1
  58. package/types/isBlob.d.ts +2 -3
  59. package/types/isBoolean.d.ts +0 -1
  60. package/types/isBuffer.d.ts +0 -1
  61. package/types/isDataView.d.ts +0 -1
  62. package/types/isDate.d.ts +0 -1
  63. package/types/isElement.d.ts +0 -1
  64. package/types/isEmpty.d.ts +0 -1
  65. package/types/isEqual.d.ts +0 -1
  66. package/types/isError.d.ts +0 -1
  67. package/types/isFile.d.ts +1 -2
  68. package/types/isFinite.d.ts +0 -1
  69. package/types/isFunction.d.ts +0 -1
  70. package/types/isInteger.d.ts +0 -1
  71. package/types/isLength.d.ts +1 -2
  72. package/types/isMap.d.ts +0 -1
  73. package/types/isMatch.d.ts +0 -1
  74. package/types/isNaN.d.ts +0 -1
  75. package/types/isNil.d.ts +0 -1
  76. package/types/isNull.d.ts +0 -1
  77. package/types/isNumber.d.ts +0 -1
  78. package/types/isObject.d.ts +1 -2
  79. package/types/isObjectLike.d.ts +0 -1
  80. package/types/isPlainObject.d.ts +0 -1
  81. package/types/isPromiseLike.d.ts +0 -1
  82. package/types/isRegExp.d.ts +0 -1
  83. package/types/isSafeInteger.d.ts +0 -1
  84. package/types/isSet.d.ts +0 -1
  85. package/types/isString.d.ts +0 -1
  86. package/types/isSymbol.d.ts +0 -1
  87. package/types/isTypedArray.d.ts +1 -2
  88. package/types/isUndefined.d.ts +0 -1
  89. package/types/isWeakMap.d.ts +0 -1
  90. package/types/isWeakSet.d.ts +0 -1
  91. package/types/isWindow.d.ts +0 -1
  92. package/types/kebabCase.d.ts +1 -2
  93. package/types/keys.d.ts +0 -1
  94. package/types/keysIn.d.ts +0 -1
  95. package/types/lowerCase.d.ts +0 -1
  96. package/types/map.d.ts +0 -1
  97. package/types/merge.d.ts +0 -1
  98. package/types/mergeObject.d.ts +41 -0
  99. package/types/min.d.ts +0 -1
  100. package/types/move.d.ts +1 -2
  101. package/types/negate.d.ts +0 -1
  102. package/types/noop.d.ts +0 -1
  103. package/types/nth.d.ts +0 -1
  104. package/types/nthArg.d.ts +0 -1
  105. package/types/omit.d.ts +0 -1
  106. package/types/omitBy.d.ts +1 -2
  107. package/types/once.d.ts +0 -1
  108. package/types/orderBy.d.ts +1 -1
  109. package/types/partition.d.ts +2 -3
  110. package/types/pascalCase.d.ts +1 -2
  111. package/types/pick.d.ts +0 -1
  112. package/types/pickBy.d.ts +1 -2
  113. package/types/random.d.ts +0 -1
  114. package/types/randomInt.d.ts +0 -1
  115. package/types/retry.d.ts +31 -0
  116. package/types/round.d.ts +1 -2
  117. package/types/shuffle.d.ts +0 -1
  118. package/types/sleep.d.ts +0 -1
  119. package/types/snakeCase.d.ts +1 -2
  120. package/types/throttle.d.ts +0 -1
  121. package/types/toFinite.d.ts +0 -1
  122. package/types/toInteger.d.ts +0 -1
  123. package/types/toLength.d.ts +1 -2
  124. package/types/toNumber.d.ts +0 -1
  125. package/types/toSafeInteger.d.ts +0 -1
  126. package/types/toString.d.ts +0 -1
  127. package/types/tryit.d.ts +1 -2
  128. package/types/unescape.d.ts +0 -1
  129. package/types/union.d.ts +0 -1
  130. package/types/uniq.d.ts +0 -1
  131. package/types/uniqueId.d.ts +0 -1
  132. package/types/unzip.d.ts +0 -1
  133. package/types/upperCase.d.ts +0 -1
  134. package/types/words.d.ts +1 -2
  135. package/types/xor.d.ts +0 -1
  136. package/types/zip.d.ts +0 -1
  137. package/es/node_modules/.pnpm/@rollup_plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.6.3_typescript@5.5.2/node_modules/tslib/tslib.es6.js +0 -62
  138. package/lib/node_modules/.pnpm/@rollup_plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.6.3_typescript@5.5.2/node_modules/tslib/tslib.es6.js +0 -66
package/dist/ut2.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ut2.js","sources":["../src/internals/native.ts","../src/isArray.ts","../src/isObjectLike.ts","../src/isObject.ts","../src/internals/getTag.ts","../src/isSymbol.ts","../src/toNumber.ts","../src/toInteger.ts","../src/toLength.ts","../src/chunk.ts","../src/compact.ts","../src/eq.ts","../src/identity.ts","../src/internals/createIteratee.ts","../src/difference.ts","../src/fromPairs.ts","../src/intersection.ts","../src/move.ts","../src/isFunction.ts","../src/isLength.ts","../src/isArrayLike.ts","../src/nth.ts","../src/toFinite.ts","../src/randomInt.ts","../src/shuffle.ts","../src/uniq.ts","../src/union.ts","../src/isArrayLikeObject.ts","../src/unzip.ts","../src/xor.ts","../src/zip.ts","../src/internals/getSymbols.ts","../src/allKeys.ts","../src/internals/createForEach.ts","../src/forEach.ts","../src/countBy.ts","../src/every.ts","../src/find.ts","../src/filter.ts","../src/forEachRight.ts","../src/groupBy.ts","../src/keyBy.ts","../src/isNumber.ts","../src/isNil.ts","../src/toString.ts","../src/internals/compare.ts","../src/orderBy.ts","../src/map.ts","../src/partition.ts","../src/internals/createReduce.ts","../src/reduce.ts","../src/reduceRight.ts","../src/some.ts","../src/defaultTo.ts","../src/internals/helpers.ts","../src/after.ts","../src/before.ts","../src/isUndefined.ts","../src/curry.ts","../src/internals/baseDebounce.ts","../src/debounce.ts","../src/delay.ts","../src/negate.ts","../src/once.ts","../src/partial.ts","../src/throttle.ts","../src/isArguments.ts","../src/internals/nodeUtil.ts","../src/isArrayBuffer.ts","../src/isBigInt.ts","../src/isBlob.ts","../src/isBoolean.ts","../src/isBuffer.ts","../src/internals/getTagWithBugfix.ts","../src/isDataView.ts","../src/isDate.ts","../src/isPlainObject.ts","../src/isElement.ts","../src/isEmpty.ts","../src/isTypedArray.ts","../src/internals/isEqualDeep.ts","../src/isEqual.ts","../src/isError.ts","../src/isFile.ts","../src/internals/root.ts","../src/isFinite.ts","../src/isInteger.ts","../src/isMap.ts","../src/isMatch.ts","../src/isNaN.ts","../src/isNull.ts","../src/isPromiseLike.ts","../src/isRegExp.ts","../src/isSafeInteger.ts","../src/isSet.ts","../src/isString.ts","../src/isWeakMap.ts","../src/isWeakSet.ts","../src/isWindow.ts","../src/internals/decimalAdjust.ts","../src/ceil.ts","../src/floor.ts","../src/internals/comparator.ts","../src/internals/createExtremum.ts","../src/max.ts","../src/min.ts","../src/round.ts","../src/clamp.ts","../src/inRange.ts","../src/random.ts","../src/internals/getKeysIn.ts","../src/internals/getSymbolsIn.ts","../src/allKeysIn.ts","../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.6.3_typescript@5.5.2/node_modules/tslib/tslib.es6.js","../src/findKey.ts","../src/invert.ts","../src/keys.ts","../src/keysIn.ts","../src/merge.ts","../src/castArray.ts","../src/omit.ts","../src/pickBy.ts","../src/omitBy.ts","../src/pick.ts","../src/words.ts","../src/internals/splitCaseWords.ts","../src/internals/createCaseFirst.ts","../src/upperFirst.ts","../src/camelCase.ts","../src/capitalize.ts","../src/escape.ts","../src/escapeRegExp.ts","../src/kebabCase.ts","../src/lowerCase.ts","../src/lowerFirst.ts","../src/pascalCase.ts","../src/snakeCase.ts","../src/unescape.ts","../src/upperCase.ts","../src/conformsTo.ts","../src/conforms.ts","../src/constant.ts","../src/gt.ts","../src/gte.ts","../src/lt.ts","../src/lte.ts","../src/noop.ts","../src/nthArg.ts","../src/range.ts","../src/sleep.ts","../src/list.ts","../src/times.ts","../src/toSafeInteger.ts","../src/tryit.ts","../src/uniqueId.ts"],"sourcesContent":["export const nativeUndefined = void 0;\nexport const stringUndefined = 'undefined';\nexport const stringObject = 'object';\n\nexport const objectProto = Object.prototype;\nexport const objectProtoToString = objectProto.toString;\nexport const objectProtoHasOwnProperty = objectProto.hasOwnProperty;\nexport const objectProtoPropertyIsEnumerable = objectProto.propertyIsEnumerable;\n\nexport const objectGetOwnPropertySymbols = Object.getOwnPropertySymbols;\nexport const objectGetPrototypeOf = Object.getPrototypeOf;\nexport const objectKeys = Object.keys;\n\nexport const functionProto = Function.prototype;\nexport const functionProtoToString = functionProto.toString;\n\nconst symbolExisted = typeof Symbol !== stringUndefined;\nexport const symbolProto = symbolExisted ? Symbol.prototype : nativeUndefined;\n\nexport const arrayProto = Array.prototype;\nexport const arrayProtoSlice = arrayProto.slice;\n\nexport const mathMin = Math.min;\nexport const mathMax = Math.max;\nexport const mathRandom = Math.random;\nexport const mathFloor = Math.floor;\nexport const mathCeil = Math.ceil;\nexport const mathAbs = Math.abs;\n\nexport const numberIsFinite = Number.isFinite;\nexport const numberIsInteger = Number.isInteger;\nexport const numberIsSafeInteger = Number.isSafeInteger;\n\nexport const globalThisExisted = typeof globalThis === stringObject && globalThis;\n// @ts-ignore\nexport const globalExisted = typeof global === stringObject && global;\nexport const selfExisted = typeof self === stringObject && self;\n\n/**\n * 最大安全整数。\n *\n * @static\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER MAX_SAFE_INTEGER}\n */\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\n/**\n * 最小安全整数。\n *\n * @static\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER MIN_SAFE_INTEGER}\n */\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n\n/**\n * 最大数组长度 `Math.pow(2,32) - 1`。\n *\n * @static\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length length}\n */\nexport const MAX_ARRAY_LENGTH = 4294967295;\n\nexport const bigIntTag = '[object BigInt]';\nexport const numberTag = '[object Number]';\nexport const booleanTag = '[object Boolean]';\nexport const stringTag = '[object String]';\nexport const dateTag = '[object Date]';\nexport const regExpTag = '[object RegExp]';\nexport const symbolTag = '[object Symbol]';\nexport const errorTag = '[object Error]';\nexport const arrayBufferTag = '[object ArrayBuffer]';\nexport const argumentsTag = '[object Arguments]';\nexport const arrayTag = '[object Array]';\nexport const functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map((item) => '[object ' + item + ']');\nexport const weakSetTag = '[object WeakSet]';\nexport const blobTag = '[object Blob]';\nexport const fileTag = '[object File]';\nexport const domExceptionTag = '[object DOMException]';\n\nexport const objectTag = '[object Object]';\nexport const dataViewTag = '[object DataView]';\nexport const mapTag = '[object Map]';\nexport const promiseTag = '[object Promise]';\nexport const setTag = '[object Set]';\nexport const weakMapTag = '[object WeakMap]';\nexport const windowTag = '[object Window]';\n","/**\n * 检查值是否为 `Array` 对象。\n *\n * @static\n * @alias module:Language.isArray\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `Array` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArray([1, 2, 3]); // true\n *\n * isArray(document.body.children); // true\n *\n * isArray('abc'); // false\n *\n * isArray(1); // false\n *\n * isArray(()=>{}); // false\n *\n */\nfunction isArray(value: any): value is Array<any> {\n return Array.isArray(value);\n}\n\nexport default isArray;\n","/**\n * 检查值是否为类对象。\n *\n * 如果一个值不为 `null` 并且 `typeof` 结果为 `object`,则该值是类对象。\n *\n * @static\n * @alias module:Language.isObjectLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isObjectLike({}); // true\n *\n * isObjectLike([1,2,3]); // true\n *\n * isObjectLike(()=>{}); // false\n *\n * isObjectLike(null); // false\n *\n */\nfunction isObjectLike(value: any): value is object {\n return value !== null && typeof value === 'object';\n}\n\nexport default isObjectLike;\n","import { FunctionAny } from './internals/types';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为对象。(例如,数组、函数、对象、正则表达式、new Number(0) 和 new String(''))。\n *\n * @static\n * @alias module:Language.isObject\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/#sec-ecmascript-language-types language type}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isObject({}); // true\n *\n * isObject([1,2,3]); // true\n *\n * isObject(()=>{}); // true\n *\n * isObject(null); // false\n *\n */\nfunction isObject(value: any): value is object | FunctionAny {\n return typeof value === 'function' || isObjectLike(value);\n}\n\nexport default isObject;\n","import { objectProtoToString } from './native';\n\n/**\n * 获取值的 `Object.prototype.toString`。\n *\n * @private\n * @param value 要查询的值\n * @returns 对象名称\n */\nfunction getTag(value: any) {\n return objectProtoToString.call(value);\n}\n\nexport default getTag;\n","import getTag from './internals/getTag';\nimport { symbolTag } from './internals/native';\n\n/**\n * 检查值是否为 `Symbol` 类型或对象。\n *\n * @static\n * @alias module:Language.isSymbol\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Symbol` 类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSymbol(Symbol()); // true\n *\n * isSymbol(Symbol.iterator); // true\n *\n * isSymbol(\"abc\"); // false\n *\n */\nfunction isSymbol(value: any): value is symbol {\n return typeof value === 'symbol' || getTag(value) === symbolTag;\n}\n\nexport default isSymbol;\n","import isObject from './isObject';\nimport isSymbol from './isSymbol';\n\nconst reIsBinary = /^0b[01]+$/i;\n\nconst reIsOctal = /^0o[0-7]+$/i;\n\n// Number('-0x1a2b3c') // NaN\n// parseInt('-0x1a2b3c') // -1715004\n// 统一处理为 NaN\nconst reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/**\n * 转换 `value` 为数字。\n *\n * @static\n * @alias module:Util.toNumber\n * @since 1.0.0\n * @param {*} value 要处理的值。\n * @returns {number} 转换后的数字。\n * @example\n *\n * toNumber(3.2); // 3.2\n *\n * toNumber('3.2'); // 3.2\n *\n * toNumber(-0); // -0\n *\n * toNumber('-0'); // -0\n *\n * toNumber('0'); // 0\n *\n * toNumber(NaN); // NaN\n *\n * toNumber(Infinity); // Infinity\n *\n * toNumber(-Infinity); // -Infinity\n *\n */\nfunction toNumber(value: any): number {\n if (typeof value === 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NaN;\n }\n if (isObject(value)) {\n value = Number(value);\n }\n if (typeof value !== 'string') {\n return value === 0 ? value : +value;\n }\n value = value.trim();\n const isBinary = reIsBinary.test(value);\n\n return isBinary || reIsOctal.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NaN : +value;\n}\n\nexport default toNumber;\n","import toNumber from './toNumber';\n\n/**\n * 转换 `value` 为一个整数。\n *\n * 注意: 这个方法基于 [ToIntegerOrInfinity](https://tc39.es/ecma262/#sec-tointegerorinfinity) ,区别在于 `-0` 会返回 `-0`。\n *\n * @static\n * @alias module:Util.toInteger\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toInteger(3.2); // 3\n *\n * toInteger('3.2'); // 3\n *\n * toInteger(-0); // -0\n *\n * toInteger('-0'); // -0\n *\n * toInteger('0'); // 0\n *\n * toInteger(NaN); // 0\n *\n * toInteger(Infinity); // Infinity\n *\n * toInteger(-Infinity); // -Infinity\n *\n */\nfunction toInteger(value: any) {\n const result = toNumber(value);\n\n // NaN -0 +0 0 Infinity -Infinity\n if (!result || result === Infinity || result === -Infinity) {\n return result === result ? result : 0;\n }\n const remainder = result % 1;\n return remainder ? result - remainder : result;\n}\n\nexport default toInteger;\n","import { MAX_ARRAY_LENGTH } from './internals/native';\nimport toInteger from './toInteger';\n\n/**\n * 转换 `value` 为数组对象的长度整数。\n *\n * @static\n * @alias module:Util.toLength\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length length}\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toLength(3.2); // 3\n *\n * toLength('3.2'); // 3\n *\n * toLength(-0); // 0\n *\n * toLength('-0'); // 0\n *\n * toLength('0'); // 0\n *\n * toLength(NaN); // 0\n *\n * toLength(Infinity); // 4294967295\n *\n * toLength(-Infinity); // 0\n *\n */\nfunction toLength(value: any): number {\n value = toInteger(value);\n if (!value) {\n return 0;\n }\n if (value < 0) {\n return 0;\n }\n if (value > MAX_ARRAY_LENGTH) {\n return MAX_ARRAY_LENGTH;\n }\n return value;\n}\n\nexport default toLength;\n","import { mathCeil } from './internals/native';\nimport isArray from './isArray';\nimport toLength from './toLength';\n\n/**\n * 将数组拆分成多个 `size` 长度的区块,并将这些区块组成一个新数组。\n *\n * 如果数组无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。\n *\n * @static\n * @alias module:Array.chunk\n * @since 1.0.0\n * @param {Array} array 要处理的数组。\n * @param {number} [size=1] 每个数组区块的长度。默认 `1`。\n * @returns {Array} 拆分区块的新数组。\n * @example\n *\n * const array = ['a', 'b', 'c', 'd'];\n *\n * chunk(array, 2); // [['a', 'b'], ['c', 'd']]\n *\n * chunk(array, 3); // [['a', 'b', 'c'], ['d']]\n *\n */\nfunction chunk<T>(array: T[], size = 1) {\n size = toLength(size);\n if (!isArray(array) || size < 1) {\n return [];\n }\n\n const length = array.length;\n const result: T[][] = Array(mathCeil(length / size));\n let resIndex = 0,\n index = 0;\n\n while (index < length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n\n return result;\n}\n\nexport default chunk;\n","import isArray from './isArray';\n\n/**\n * 创建一个新数组,包含原数组中所有的非假值元素。\n *\n * 例如 `false` `null` `0` `\"\"` `undefined` `NaN` 都被认为是假值。\n *\n * @static\n * @alias module:Array.compact\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy Falsy}\n * @param {Array} array 待处理的数组。\n * @returns {Array} 过滤掉假值的新数组。\n * @example\n *\n * compact([0, 1, false, '', 2]); // [1, 2]\n *\n */\nfunction compact<T>(array: T[]) {\n return isArray(array) ? array.filter((item) => !!item) : [];\n}\n\nexport default compact;\n","/**\n * 检查两个值是否相等。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Util.eq\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness JavaScript 中的相等性判断}\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n * @example\n *\n * eq(-0, 0); // true\n *\n * eq(1, 1); // true\n *\n * eq(NaN, NaN); // true\n *\n * eq('a', 'a'); // true\n *\n * const object = {a: 1};\n *\n * eq(object, {a: 1}); // false\n *\n * eq(object, object); // true\n *\n * eq(-0, 0, true); // false\n *\n */\nfunction eq(value: any, other: any, strictCheck = false) {\n if (value === other) {\n return strictCheck ? value !== 0 || 1 / value === 1 / other : true;\n }\n return value !== value && other !== other;\n}\n\nexport default eq;\n","/**\n * 返回第一个参数。\n *\n * @static\n * @alias module:Util.identity\n * @since 1.0.0\n * @param {*} value 任意值。\n * @returns 返回 `value`。\n * @example\n *\n * const obj = { a: 1, b: 2 };\n *\n * console.log(identity(obj) === obj); // true\n *\n */\n\nfunction identity<T>(value?: T): T;\nfunction identity<T>(value: T, ...args: any[]): T;\nfunction identity<T>(value?: T) {\n return value;\n}\n\nexport default identity;\n","import identity from '../identity';\nimport isSymbol from '../isSymbol';\nimport { IterateeParam } from './types';\n\n/**\n * 创建迭代函数。\n *\n * @private\n * @param {Function} iteratee 迭代函数或对象属性。\n * @returns {Function} 如果参数为函数,返回该函数,否则包装一个返回对象属性的函数。\n */\nfunction createIteratee<T>(iteratee?: IterateeParam<T>) {\n if (typeof iteratee === 'function') {\n return iteratee;\n }\n\n // 属性键值可能为 Symbol, string, number\n if (typeof iteratee === 'string' || typeof iteratee === 'number' || isSymbol(iteratee)) {\n return (value: any) => value[iteratee];\n }\n return identity;\n}\n\nexport default createIteratee;\n","import eq from './eq';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建一个 `array` 排除 `values` 值的新数组。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Array.difference\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} values 排除的值。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 过滤值后的新数组。\n * @example\n *\n * difference([3, 1, 2], [4, 2]); // [3, 1]\n *\n * difference([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); // [3.1, 1.3]\n *\n * difference([{x: 2}, {x: 1}], [{x: 1}], item=>item.x); // [{x: 2}]\n *\n * // 如果迭代元素为对象,迭代函数可以直接写入对象属性。\n * difference([{x: 2}, {x: 1}], [{x: 1}], 'x'); // [{x: 2}]\n *\n * difference([-0, 0], [0]); // []\n *\n * difference([-0, 0], [0], undefined, true); // [-0]\n *\n */\nfunction difference<T>(array: T[], values: any[], iteratee: IterateeParam<T> = identity, strictCheck = false) {\n if (!isArray(array)) {\n return [];\n }\n\n if (!isArray(values)) {\n return array;\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n return array.filter((item) => {\n const current = internalIteratee(item);\n // 注意此处不能使用 `find`,如果值存在 `undefined` 不好处理。\n // 为什么不直接使用 `includes` (includes 比较用的是 sameValueZero),因为要支持 `iteratee`。\n return values.findIndex((value) => eq(internalIteratee(value), current, strictCheck)) === -1;\n });\n}\n\nexport default difference;\n","import isArray from './isArray';\n\ninterface FromPairs {\n <P extends string | number | symbol, V = any>(array: [P, V][]): Record<P, V>;\n <P extends string | number | symbol>(array: any[][]): Record<P, any>;\n}\n\n/**\n * 将键值对数组转为对象。\n *\n * 与 [Object.entries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) 正好相反。\n *\n * @static\n * @alias module:Array.fromPairs\n * @since 1.0.0\n * @param {Array} array 键值对数组。\n * @returns {Object} 新对象。\n * @example\n *\n * fromPairs([['foo', 'bar'], ['baz', 42]]); // {foo: 'bar', baz: 42}\n *\n */\nconst fromPairs: FromPairs = function <P extends string | number | symbol, V>(array: any[][]) {\n // @ts-ignore\n const result: Record<P, V> = {};\n\n if (!isArray(array)) {\n return result;\n }\n\n array.forEach((item) => {\n result[item[0] as P] = item[1];\n });\n\n return result;\n};\n\nexport default fromPairs;\n","import eq from './eq';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建唯一值的数组,该数组包含两个数组参数都包含的元素(交集)。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Array.intersection\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} other 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 包含所有传入数组交集元素的新数组。\n * @example\n *\n * intersection([2, 1, 1], [4, 2]); // [2]\n *\n * intersection([2.1, 1.2], [4.3, 2.4], Math.floor); // [2.1]\n *\n * intersection([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 1}]\n *\n * // 迭代函数可以直接写入属性。\n * intersection([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 1}]\n *\n * intersection([-0, 0], [0]); // [-0]\n *\n * intersection([-0, 0], [0], undefined, true); // [0]\n *\n */\nfunction intersection<T>(array: T[], other: T[], iteratee: IterateeParam<T> = identity, strictCheck = false) {\n if (!isArray(array) || !isArray(other)) {\n return [];\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n const caches: any[] = [];\n return array.filter((item) => {\n const current = internalIteratee(item);\n\n if (other.findIndex((value) => eq(internalIteratee(value), current, strictCheck)) !== -1 && !caches.includes(current)) {\n caches.push(current);\n return true;\n }\n return false;\n });\n}\n\nexport default intersection;\n","/**\n * 将数组 `from` 位置的元素移至 `to` 位置,返回处理后的原数组。\n *\n * @static\n * @alias module:Array.move\n * @since 1.10.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice splice}\n * @param {Array} array 要处理的数组。\n * @param {number} from 要移动的元素索引。\n * @param {number} to 要移动目标位置的元素索引。\n * @returns {*} 处理后的原数组。\n * @example\n *\n * const arr = ['a', 'b', 'c', 'd'];\n *\n * move(arr, 0, 1); // ['b', 'a', 'c', 'd']\n *\n * // 此时 arr 已经变为 ['b', 'a', 'c', 'd']\n * move(arr, -2, 0); // ['c', 'b', 'a', 'd']\n *\n */\nfunction move<T>(array: T[], from: number, to: number) {\n array.splice(to, 0, array.splice(from, 1)[0]);\n return array;\n}\n\nexport default move;\n","import getTag from './internals/getTag';\nimport { functionTags } from './internals/native';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 检查值是否为 `Function` 对象。\n *\n * `Function` `AsyncFunction` `GeneratorFunction` `Proxy` 都将返回 `true`。\n *\n * @static\n * @alias module:Language.isFunction\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Function` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFunction(()=>{})); // true\n *\n * isFunction(/x/); // false\n *\n */\nfunction isFunction(value: any): value is FunctionAny {\n if (typeof value === 'function') {\n return true;\n }\n const tag = getTag(value);\n return functionTags.some((item) => item === tag);\n}\n\nexport default isFunction;\n","import { MAX_SAFE_INTEGER } from './internals/native';\n\n/**\n * 检查值是否为有效的类数组长度。\n *\n * @static\n * @alias module:Language.isLength\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/#sec-tolength ToLength}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为有效的类数组长度,返回 `true`,否则返回 `false`。\n * @example\n *\n * isLength(3); // true\n *\n * isLength('3'); // false\n *\n * isLength(Number.Min_VALUE); // false\n *\n * isLength(Number.Infinity); // false\n *\n */\nfunction isLength(value: any): value is number {\n return typeof value === 'number' && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction';\nimport isLength from './isLength';\n\n/**\n * 检查值是否为类数组。\n *\n * 如果一个值不是函数并且其 `value.length` 是大于或等于 `0` 且小于或等于 `Number.MAX_SAFE_INTEGER` 的整数,则该值被视为类数组。\n *\n * @static\n * @alias module:Language.isArrayLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类数组,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayLike([1, 2, 3]); // true\n *\n * isArrayLike(document.body.children); // true\n *\n * isArrayLike('abc'); // true\n *\n * isArrayLike(()=>{}); // false\n *\n */\nfunction isArrayLike(value: any): value is ArrayLike<any> {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import { nativeUndefined } from './internals/native';\nimport isArrayLike from './isArrayLike';\n\ninterface Nth {\n (array: [], n?: number): undefined;\n <T>(array: ArrayLike<T>, n?: number): T;\n}\n\n/**\n * 获取类数组的第 `n` 个元素。如果 `n` 为负数,则返回从数组结尾开始的第 `n` 个元素。\n *\n * 同 `Array.prototype.at` 方法。\n *\n * @static\n * @alias module:Array.nth\n * @since 1.0.0\n * @param {ArrayLike} array 要查询的类数组。\n * @param {number} [n=0] 要返回元素的索引值。默认 `0`。\n * @returns {*} 类数组的第 `n` 个元素。\n * @example\n *\n * const arr = ['a', 'b', 'c', 'd'];\n *\n * nth(arr, 1); // 'b'\n *\n * nth(arr, -2); // 'c'\n *\n * nth('abcd', 1); // 'b'\n *\n */\nconst nth: Nth = function <T = any>(array: ArrayLike<T>, n = 0) {\n if (!isArrayLike(array)) {\n return nativeUndefined;\n }\n\n n += n < 0 ? array.length : 0;\n return array[n];\n};\n\nexport default nth;\n","import toNumber from './toNumber';\n\nconst MAX_VALUE = 1.7976931348623157e308;\n\n/**\n * 转换 `value` 为一个有限数字。\n *\n * @static\n * @alias module:Util.toFinite\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的数字。\n * @example\n *\n * toFinite(3.2); // 3.2\n *\n * toFinite('3.2'); // 3.2\n *\n * toFinite(-0); // -0\n *\n * toFinite('-0'); // -0\n *\n * toFinite('0'); // 0\n *\n * toFinite(NaN); // 0\n *\n * toFinite(Infinity); // 1.7976931348623157e+308\n *\n * toFinite(-Infinity); // -1.7976931348623157e+308\n *\n */\nfunction toFinite(value: any): number {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === Infinity || value === -Infinity) {\n const sign = value < 0 ? -1 : 1;\n return sign * MAX_VALUE;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import { mathCeil, mathFloor, mathMax, mathMin, mathRandom } from './internals/native';\nimport toFinite from './toFinite';\n\n/**\n * 产生一个包含 `lower` 与 `upper` 之间的随机整数。\n *\n * 如果参数非整数 `lower=Math.ceil(lower)` `upper=Math.floor(upper)`。如果 `lower` 大于 `upper` 会自动交换参数。\n *\n * @static\n * @alias module:Number.randomInt\n * @since 1.0.0\n * @param {number} [lower=0] 下限。默认 `0`。\n * @param {number} [upper=1] 上限。默认 `1`。\n * @returns {number} 随机整数。\n * @example\n *\n * // 0 到 1 之间的整数\n * randomInt(); // 1\n *\n * // 2 到 4 之间的整数\n * randomInt(2, 4); // 4\n *\n * // 2 到 4 之间的整数\n * randomInt(4, 2); // 3\n *\n * // 区间只有一个整数\n * randomInt(1.2, 2.4); // 2\n *\n */\nfunction randomInt(lower = 0, upper = 1) {\n lower = toFinite(lower);\n upper = toFinite(upper);\n let min = mathCeil(mathMin(lower, upper) || 0);\n let max = mathFloor(mathMax(lower, upper) || 0);\n\n // 如果两个值都是整数位相同,浮点数不同, 大小值的可能会互换。(如 1.2, 1.3)\n if (min > max) {\n // [min, max] = [max, min]\n const temp = min;\n min = max;\n max = temp;\n }\n\n return mathFloor(min + mathRandom() * (max - min + 1));\n}\n\nexport default randomInt;\n","import isArray from './isArray';\nimport randomInt from './randomInt';\n\n/**\n * 创建一个被打乱的数组。使用 [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) 版本。\n *\n * @static\n * @alias module:Array.shuffle\n * @since 1.0.0\n * @param {Array} array 要打乱的数组。\n * @returns {Array} 打乱的数组。\n * @example\n *\n * shuffle([1, 2, 3, 4]); // [2, 4, 3, 1]\n *\n * shuffle([1, 2, 3, 4]); // [3, 2, 1, 4]\n *\n */\nfunction shuffle<T>(array: T[]) {\n if (!isArray(array) || array.length < 1) {\n return [];\n }\n\n const result = array.slice();\n const length = result.length;\n const lastIndex = length - 1;\n let index = -1;\n\n while (++index < length) {\n const rand = randomInt(index, lastIndex);\n const value = result[rand];\n result[rand] = result[index];\n result[index] = value;\n }\n\n return result;\n}\n\nexport default shuffle;\n","import eq from './eq';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建一个去重后的数组副本。只有第一次出现的元素才会被保留。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Array.uniq\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee] 迭代函数,调用每个元素。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 去重后的新数组。\n * @example\n *\n * uniq([2, 1, 2]); // [2, 1]\n *\n * uniq(['a', NaN, 2, 1, NaN, 'a', 1]); // ['a', NaN, 2, 1]\n *\n * uniq([{x: 1}, {x: 2}, {x: 1}], item=>item.x); // [{x: 1}, {x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * uniq([{x: 1}, {x: 2}, {x: 1}], 'x'); // [{x: 1}, {x: 2}]\n *\n * uniq([-0, 0]); // [-0]\n *\n * uniq([-0, 0], undefined, true); // [-0, 0]\n *\n */\nfunction uniq<T>(array: T[], iteratee?: IterateeParam<T>, strickCheck = false) {\n if (!isArray(array)) {\n return [];\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n return array.filter((value, index, arr) => {\n const current = internalIteratee(value);\n return arr.findIndex((item) => eq(internalIteratee(item), current, strickCheck)) === index;\n });\n}\n\nexport default uniq;\n","import { IterateeParam } from './internals/types';\nimport isArray from './isArray';\nimport uniq from './uniq';\n\n/**\n * 创建一个按顺序排列的唯一值的数组(并集)。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。与 [`uniq`](#.uniq) 相似。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Array.union\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} [other=[]] 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee] 迭代函数,调用每个元素。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 新的联合数组。\n * @example\n *\n * union([2], [1, 2]); // [2, 1]\n *\n * union([2.1], [1.2, 2.3], Math.floor); // [2.1, 1.2]\n *\n * union([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 1}, {x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * union([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 1}, {x: 2}]\n *\n * union([-0, 0], [-0]); // [-0]\n *\n * union([-0, 0], [-0], undefined, true); // [-0, 0]\n *\n */\nfunction union<T>(array: T[], other: T[] = [], iteratee?: IterateeParam<T>, strickCheck = false) {\n array = isArray(array) ? array : [];\n other = isArray(other) ? other : [];\n return uniq(array.concat(other), iteratee, strickCheck);\n}\n\nexport default union;\n","import isArrayLike from './isArrayLike';\nimport isObjectLike from './isObjectLike';\n\ntype ArrayLikeObject = Array<any> | { length: number; [x: string | symbol]: any };\n\n/**\n * 检查值是否为类数组对象。\n *\n * @static\n * @alias module:Language.isArrayLikeObject\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为类数组对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayLikeObject([1, 2, 3]); // true\n *\n * isArrayLikeObject(document.body.children); // true\n *\n * isArrayLikeObject('abc'); // false\n *\n * isArrayLikeObject(()=>{}); // false\n *\n */\nfunction isArrayLikeObject(value: any): value is ArrayLikeObject {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import { mathMax } from './internals/native';\nimport isArray from './isArray';\nimport isArrayLikeObject from './isArrayLikeObject';\n\n/**\n * 与 [`zip`](#.zip) 类似,除了它接受分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(返回数组的第一个元素包含所有的输入数组的第一元素,第二个元素包含了所有的输入数组的第二元素,依此类推。)。\n *\n * @static\n * @alias module:Array.unzip\n * @since 1.0.0\n * @param {Array} array 要处理的分组元素数组。\n * @returns {Array} 重组元素的新数组。\n * @example\n *\n * unzip([['barney', 'fred'], [36, 40]]); // [['barney', 36], ['fred', 40]]\n *\n * unzip([['barney', 36], ['fred', 40]]); // [['barney', 'fred'], [36, 40]]\n *\n */\nfunction unzip(array: any[][]) {\n if (!isArray(array) || array.length === 0) {\n return [];\n }\n let length = 0;\n array = array.filter((group) => {\n if (isArrayLikeObject(group)) {\n length = mathMax(group.length, length);\n return true;\n }\n return false;\n });\n const result = Array(length);\n let index = -1;\n while (++index < length) {\n const item = array.map((group) => group[index]);\n result[index] = item;\n }\n return result;\n}\n\nexport default unzip;\n","import difference from './difference';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport intersection from './intersection';\nimport isArray from './isArray';\nimport union from './union';\nimport uniq from './uniq';\n\n/**\n * 创建一个唯一值的数组(并集-交集),该数组包含两个数组参数中不相同的元素。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @static\n * @alias module:Array.xor\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} [other=[]] 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 过滤值后的新数组。\n * @example\n *\n * xor([2, 1, 1], [4, 2]); // [1, 4]\n *\n * xor([2.1, 1.2], [4.3, 2.4], Math.floor); // [1.2, 4.3]\n *\n * xor([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * xor([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 2}]\n *\n * xor([-0, 0],[0]); // []\n *\n * xor([-0, 0],[0], undefined, true); // [-0]\n *\n */\nfunction xor<T>(array: T[], other: T[] = [], iteratee: IterateeParam<T> = identity, strickCheck = false) {\n if (!isArray(array) && !isArray(other)) {\n return [];\n }\n const internalIteratee = createIteratee<T>(iteratee);\n if (!isArray(other)) {\n return uniq(array, internalIteratee, strickCheck);\n }\n if (!isArray(array)) {\n return uniq(other, internalIteratee, strickCheck);\n }\n return difference(union(array, other, internalIteratee, strickCheck), intersection(array, other, internalIteratee, strickCheck), internalIteratee, strickCheck);\n}\n\nexport default xor;\n","import unzip from './unzip';\n\n/**\n * 创建一个数组,数组的第一个元素包含所有给定数组的第一元素,第二个元素包含了所有给定数组的第二元素,依此类推。\n *\n * @static\n * @alias module:Array.zip\n * @since 1.0.0\n * @param {...Array} array 要处理的分组元素数组。\n * @returns {Array} 重组元素的新数组。\n * @example\n *\n * zip(['barney', 'fred'], [36, 40]); // [['barney', 36], ['fred', 40]]\n *\n */\nfunction zip(...arrays: any[][]) {\n return unzip(arrays);\n}\n\nexport default zip;\n","import { objectGetOwnPropertySymbols, objectProtoPropertyIsEnumerable } from './native';\n\n/**\n * 创建一个数组,包含自身的可枚举 `symbol` 属性。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {Symbol[]} 自身可枚举的 `symbol` 属性数组\n */\nfunction getSymbols(object: object) {\n if (!objectGetOwnPropertySymbols || object === null) {\n return [];\n }\n\n return objectGetOwnPropertySymbols(object).filter((item) => objectProtoPropertyIsEnumerable.call(object, item));\n}\n\nexport default getSymbols;\n","import getSymbols from './internals/getSymbols';\nimport { objectKeys } from './internals/native';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身的可枚举属性(包含 `Symbol` 属性)。\n *\n * 同 `Object.keys` + `Object.getOwnPropertySymbols`。\n *\n * 注意:`Symbol` 键属性在字符串属性后面。\n *\n * @static\n * @alias module:Object.allKeys\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {Array<string|symbol>} 对象自身的可枚举属性(包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * allKeys(new Foo); // ['a', Symbol(b)]\n *\n */\nfunction allKeys(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return (objectKeys(object) as (string | symbol)[]).concat(getSymbols(object));\n}\n\nexport default allKeys;\n","import allKeys from '../allKeys';\nimport identity from '../identity';\nimport isArrayLike from '../isArrayLike';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './types';\n\nexport interface ForEach {\n <T>(collection: WithNullable<T[]>, iteratee?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, iteratee?: StringIterator<any>): string;\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ArrayLikeIterator<T, any>): ArrayLike<T>;\n <T extends object>(collection: WithNullable<T>, iteratee?: ObjectIterator<T, any>): T;\n}\n\n/**\n * 创建迭代集合方法\n *\n * @private\n * @param dir 迭代方向\n * @returns 迭代集合方法\n */\nfunction createForEach(dir: 1 | -1) {\n const forEach: ForEach = function (collection: any, iteratee: any = identity) {\n const _keys = !isArrayLike(collection) && allKeys(collection);\n const len = (_keys || collection).length;\n let i = dir > 0 ? 0 : len - 1;\n\n while (i >= 0 && i < len) {\n const currentKey = _keys ? _keys[i] : i;\n if (iteratee(collection[currentKey], currentKey, collection) === false) {\n break;\n }\n i += dir;\n }\n\n return collection;\n };\n\n return forEach;\n}\n\nexport default createForEach;\n","import createForEach from './internals/createForEach';\n\n/**\n * 迭代集合元素,为每个元素调用 `iteratee`。\n *\n * `iteratee` 函数可以通过显式返回 `false` 来提前退出迭代。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.forEach\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 迭代集合本身。\n * @example\n *\n * forEach([1,2,3], function(item){\n * console.log(item);\n * });\n * // 1\n * // 2\n * // 3\n *\n * forEach({a: 1, b: 2}, function(value, key){\n * console.log(value, key);\n * });\n * // 1 'a'\n * // 2 'b'\n *\n */\nconst forEach = createForEach(1);\n\nexport default forEach;\n","import forEach from './forEach';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface CountBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, number>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, number>;\n <T extends object>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, number>;\n <T extends object>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, number>;\n}\n\n/**\n * 创建一个组成对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果,每个 `key` 对应的值是 `iteratee` 返回该 `key` 的次数。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.countBy\n * @since 1.0.0\n * @param {ArrayLike<any> | object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。\n * @returns {Object} 组成集合对象。\n * @example\n *\n * countBy([6, 4, 6]); // {'6': 2, '4': 1}\n *\n * countBy([6.1, 4.2, 6.3], Math.floor); // {'6': 2, '4': 1}\n *\n * countBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': 2, '4': 1}\n *\n * // 迭代函数可以直接写入属性。\n * countBy(['one', 'two', 'three'], 'length'); // {'3': 2, '5': 1}\n *\n */\nconst countBy: CountBy = function <T>(collection: any, iteratee?: any) {\n const result: Record<PropertyName, number> = {};\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n if (key in result) {\n ++result[key];\n } else {\n result[key] = 1;\n }\n });\n return result;\n};\n\nexport default countBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Every {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,如果全部元素都通过 `predicate` 返回真值,则返回 `true`,否则停止迭代并返回 `false`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.every\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {boolean} 如果全部元素都通过 `predicate` 测试,则返回 `true`,否则返回 `false`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * every(arr, item => item % 2 === 0); // false\n * every(arr); // true\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * every(obj, item => item > 1); // false\n * every(obj, item => item > 0); // true\n */\nconst every: Every = function (collection: any, predicate: any = identity) {\n let result = true;\n forEach(collection, (item, index, arr) => {\n if (!predicate(item, index, arr)) {\n result = false;\n return false;\n }\n });\n return result;\n};\n\nexport default every;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Find {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T | undefined;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): string | undefined;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T | undefined;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): T[keyof T] | undefined;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,返回第一个通过 `predicate` 返回真值的元素(停止迭代),如果都不通过返回 `undefined`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.find\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 返回第一个通过 `predicate` 返回真值的元素,否则返回 `undefined`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * find(arr, item => item % 2 === 0); // 2\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * find(obj, item => item > 1); // 2\n */\nconst find: Find = function (collection: any, predicate: any = identity) {\n let result: any;\n forEach(collection, (item, index, arr) => {\n if (predicate(item, index, arr)) {\n result = item;\n return false;\n }\n });\n return result;\n};\n\nexport default find;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Filter {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, predicate?: StringIterator<any>): string[];\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T[];\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): Array<T[keyof T]>;\n}\n\n/**\n * 过滤集合元素,为每个元素执行 `predicate` 函数,返回真值的元素将保留在结果数组中(不改变原值)。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @static\n * @alias module:Collection.filter\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 返回新的过滤数组。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * filter(arr, item => item % 2 === 0); // [2, 4, 6]\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * filter(obj, item => item > 1); // [2, 3]\n */\nconst filter: Filter = function <T>(array: any, predicate: any = identity) {\n const results: T[] = [];\n forEach(array, (item, index) => {\n if (predicate(item, index, array)) {\n results.push(item);\n }\n });\n return results;\n};\n\nexport default filter;\n","import createForEach from './internals/createForEach';\n\n/**\n * 迭代集合元素(从右往左的顺序),为每个元素调用 `iteratee`。\n *\n * `iteratee` 函数可以通过显式返回 `false` 来提前退出迭代。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.forEachRight\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 迭代集合本身。\n * @example\n *\n * forEachRight([1,2,3], function(item){\n * console.log(item);\n * });\n * // 3\n * // 2\n * // 1\n *\n * forEachRight({a: 1, b: 2}, function(value, key){\n * console.log(value, key);\n * });\n * // 2 'b'\n * // 1 'a'\n *\n */\nconst forEachRight = createForEach(-1);\n\nexport default forEachRight;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, PropertyName, ObjectIterator } from './internals/types';\n\ninterface GroupBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, T[]>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, T[]>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, V[]>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, V[]>;\n}\n\n/**\n * 创建一个组成聚合对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果。分组值的顺序是由他们出现在 `collection` 的顺序确定的。每个键对应的值负责生成 `key` 的元素组成的数组。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @static\n * @alias module:Collection.groupBy\n * @since 1.0.0\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。默认 `identity`。\n * @returns {Object} 组成聚合对象。\n * @example\n *\n * groupBy([6, 4, 6]); // {'6': [6, 6], '4': [4]}\n *\n * groupBy([6.1, 4.2, 6.3], Math.floor); // {'6': [6.1, 6.3], '4': [4.2]}\n *\n * groupBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': [{n: 6.1}, {n: 6.3}], '4': [{n: 4.2}]}\n *\n * // 迭代函数可以直接写入属性。\n * groupBy(['one', 'two', 'three'], 'length'); // {'3': ['one', 'two'], '5': ['three']}\n *\n */\nconst groupBy: GroupBy = function <T>(collection: any, iteratee: any = identity) {\n const result: Record<PropertyName, T[]> = {};\n\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n if (key in result) {\n result[key].push(item);\n } else {\n result[key] = [item];\n }\n });\n return result;\n};\n\nexport default groupBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface KeyBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, T>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, T>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, V>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, V>;\n}\n\n/**\n * 创建一个组成聚合对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果。每个 `key` 对应的值是生成 `key` 的最后一个元素。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.keyBy\n * @since 1.0.0\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。默认 `identity`。\n * @returns {Object} 组成聚合对象。\n * @example\n *\n * keyBy([6, 4, 6]); // {'6': 6, '4': 4}\n *\n * keyBy([6.1, 4.2, 6.3], Math.floor); // {'6': 6.3, '4': 4.2}\n *\n * keyBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': {n: 6.3}, '4': {n: 4.2}}\n *\n * // 迭代函数可以直接写入属性。\n * keyBy(['one', 'two', 'three'], 'length'); // {'3': 'two', '5': 'three'}\n *\n */\nconst keyBy: KeyBy = function <T>(collection: any, iteratee: any = identity) {\n const result: Record<PropertyName, T> = {};\n\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n result[key] = item;\n });\n return result;\n};\n\nexport default keyBy;\n","import getTag from './internals/getTag';\nimport { numberTag } from './internals/native';\n\n/**\n * 检查值是否为数字类型或对象。\n *\n * `Infinity` `-Infinity` `NaN` 都归类为数字。如果要排除,请使用 `isFinite` 方法。\n *\n * @static\n * @alias module:Language.isNumber\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为数字类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNumber(1); // true\n *\n * isNumber(Infinity); // true\n *\n * isNumber(Number.MIN_VALUE); // true\n *\n * isNumber(NaN); // true\n *\n * isNumber(new Number(1)); // true\n *\n * isNumber('1'); // false\n *\n * isNumber(null); // false\n *\n */\nfunction isNumber(value: any): value is number {\n return typeof value === 'number' || getTag(value) === numberTag;\n}\n\nexport default isNumber;\n","/**\n * 检查值是否为 `undefined` 或 `null`。\n *\n * @static\n * @alias module:Language.isNil\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `undefined` 或 `null`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNil(undefined); // true\n *\n * isNil(void 0); // true\n *\n * isNil(null); // true\n *\n * isNil(''); // false\n *\n * isNil('a'); // false\n *\n * isNil(1); // false\n */\nfunction isNil(value: any): value is undefined | null {\n return value == null;\n}\n\nexport default isNil;\n","import { nativeUndefined, symbolProto } from './internals/native';\nimport isArray from './isArray';\nimport isNil from './isNil';\nimport isSymbol from './isSymbol';\n\nconst symbolToString = symbolProto ? symbolProto.toString : nativeUndefined;\n\nfunction baseToString(value: any): string {\n if (typeof value === 'string') {\n return value;\n }\n if (isArray(value)) {\n return '' + value.map(baseToString);\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n const result = '' + value;\n return result === '0' && 1 / value === -Infinity ? '-0' : result;\n}\n\n/**\n * 转换 `value` 为字符串。`null` 和 `undefined` 将返回空字符串。`-0` 将被转换为 `\"-0\"`。\n *\n * @static\n * @alias module:Util.toString\n * @since 1.0.0\n * @param {*} value 要处理的值。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * toString(null); // ''\n *\n * toString(-0); // '-0'\n *\n * // 数组中的 `null` `undefined` 返回 'null' 'undefined'\n * toString([undefined, null]); // 'undefined,null'\n *\n * toString('a'); // 'a'\n *\n * toString(3); // '3'\n *\n */\nfunction toString(value: any) {\n return isNil(value) ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isNumber from '../isNumber';\nimport isSymbol from '../isSymbol';\nimport toString from '../toString';\n\nfunction createCompare(dir: 1 | 0) {\n const asc = dir === 1;\n function wrapper(value: any, other: any) {\n const valueIsSymbol = isSymbol(value);\n const otherIsSymbol = isSymbol(other);\n const isNeedConvertString = !valueIsSymbol && !otherIsSymbol && !(isNumber(value) && isNumber(other));\n const _value = isNeedConvertString ? toString(value) : value;\n const _other = isNeedConvertString ? toString(other) : other;\n\n if (!otherIsSymbol && (valueIsSymbol || _value > _other)) {\n return asc ? 1 : -1;\n }\n if (!valueIsSymbol && (otherIsSymbol || _value < _other)) {\n return asc ? -1 : 1;\n }\n return 0;\n }\n return wrapper;\n}\n\nexport type CompareOrderData<T> = {\n criteria: any[];\n index: number;\n value: T;\n};\nexport type CompareOrderBase = 'asc' | 'desc';\nexport type CompareOrder = CompareOrderBase | ((a: any, b: any) => number);\n\nexport function compareMultiple<T>(object: CompareOrderData<T>, other: CompareOrderData<T>, orders: CompareOrder[]) {\n const objCriteria = object.criteria;\n const othCriteria = other.criteria;\n const length = objCriteria.length;\n let index = -1;\n\n while (++index < length) {\n const order = orders[index];\n const cmpFn = typeof order === 'function' ? order : order === 'desc' ? createCompare(0) : createCompare(1);\n const result = cmpFn(objCriteria[index], othCriteria[index]);\n if (result) {\n return result;\n }\n }\n\n return object.index - other.index;\n}\n","import identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { compareMultiple, CompareOrder, CompareOrderBase, CompareOrderData } from './internals/compare';\nimport isArray from './isArray';\nimport forEach from './forEach';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, IterateeParam, Many, ObjectIterator, PropertyName } from './internals/types';\nimport { nativeUndefined } from './internals/native';\n\ninterface OrderBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: Many<ArrayLikeIterator<T, any> | keyof T>, orders?: Many<CompareOrder>): T[];\n <T>(collection: CollectionList<T>, iteratee?: Many<ArrayLikeIterator<T, any> | PropertyName>, orders?: Many<CompareOrder>): T[];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: Many<ObjectIterator<T, any> | keyof T>, orders?: Many<CompareOrder>): V[];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: Many<PropertyName>, orders?: Many<CompareOrder>): V[];\n}\n\n/**\n * 创建一个元素数组,以迭代函数处理的结果排序。如果没有指定排序,默认为升序排序。\n *\n * `asc` 升序, `desc` 降序,默认执行稳定排序,也就是说相同元素会保持原始排序。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.orderBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sort}\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol | Array} [iteratees] 排序的迭代函数。\n * @param {'asc' | 'desc' | Array} [orders] 迭代函数的排序顺序。\n * @returns {Array} 排序后的新数组。\n * @example\n *\n * const array = [2, 1, 3, 5, 4];\n *\n * orderBy(array);; // [1, 2, 3, 4, 5]\n *\n * orderBy(array, item=>item, 'desc');; // [5, 4, 3, 2, 1]\n *\n * const objects = [\n * { a: 'x', b: 3 },\n * { a: 'y', b: 4 },\n * { a: 'x', b: 1 },\n * { a: 'y', b: 2 }\n * ];\n *\n * orderBy(objects, 'b');\n * // [{ a: 'x', b: 1 },{ a: 'y', b: 2 },{ a: 'x', b: 3 },{ a: 'y', b: 4 }]\n *\n * // 迭代函数可以直接写入属性。\n * orderBy(objects, ['a', 'b'], ['asc', 'desc']);\n * // [{ a: 'x', b: 3 },{ a: 'x', b: 1 },{ a: 'y', b: 4 },{ a: 'y', b: 2 }]\n *\n */\nconst orderBy: OrderBy = function <T>(collection: any, iteratees?: any, orders?: Many<CompareOrder>) {\n const result: CompareOrderData<T>[] = [];\n\n iteratees = (isArray(iteratees) ? iteratees : iteratees !== nativeUndefined ? [iteratees] : [identity]) as IterateeParam<T>[];\n orders = (isArray(orders) ? orders : orders !== nativeUndefined ? [orders] : []) as CompareOrderBase[];\n\n let index = -1;\n forEach(collection, (item, key, arr) => {\n const criteria = (iteratees as IterateeParam<T>[]).map((iteratee) => createIteratee<T>(iteratee)(item, key, arr));\n result.push({\n criteria,\n index: ++index,\n value: item\n });\n });\n\n return result.sort((a, b) => compareMultiple<T>(a, b, orders as CompareOrder[])).map((item) => item.value);\n};\n\nexport default orderBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Map {\n <T>(collection: WithNullable<T[]>, iteratee?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, iteratee?: StringIterator<any>): string[];\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ArrayLikeIterator<T, any>): T[];\n <T extends object>(collection: WithNullable<T>, iteratee?: ObjectIterator<T, any>): Array<T[keyof T]>;\n}\n\n/**\n * 创建一个新数组,这个数组的值由迭代集合每个元素调用 `iteratee` 函数的返回值组成。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @static\n * @alias module:Collection.map\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 一个新数组。\n * @example\n *\n * const arr = [1, 2, 3];\n * map(arr, item => item * 3); // [3, 6, 9]\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * map(obj, item => item * 3); // [3, 6, 9]\n *\n * map([[1, 2], [3, 4]], item=>item[0]); // [1, 3]\n */\nconst map: Map = function (collection: any, iteratee: any = identity) {\n const result: any[] = [];\n forEach(collection, (item, index, arr) => {\n result.push(iteratee(item, index, arr));\n });\n return result;\n};\n\nexport default map;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface Partition {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, any> | keyof T): [T[], T[]];\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, any> | PropertyName): [T[], T[]];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, any> | keyof T): [V[], V[]];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): [V[], V[]];\n}\n\n/**\n * 创建一个分成两组的元素数组,第一组包含 `predicate`(断言函数)返回为 [`Truthy`](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy)(真值)的元素,第二组包含 `predicate`(断言函数)返回为 [`Falsy`](https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy)(假值)的元素。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @static\n * @alias module:Collection.partition\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy Truthy}\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy Falsy}\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol | Array} [predicate=identity] 每次迭代调用的断言函数。默认 `identity`。\n * @returns {Array} 分组后的数组。\n * @example\n *\n * const users = [\n * { user: 'barney', age: 36, active: false },\n * { user: 'fred', age: 40, active: true },\n * { user: 'pebbles', age: 1, active: false }\n * ];\n *\n * partition(users, item => item.active);\n * // [\n * // [{ user: 'fred', age: 40, active: true }],\n * // [{ user: 'barney', age: 36, active: false }, { user: 'pebbles', age: 1, active: false }]\n * // ]\n *\n * // 迭代函数可以直接写入属性。\n * partition(users, 'active');\n * // [\n * // [{ user: 'fred', age: 40, active: true }],\n * // [{ user: 'barney', age: 36, active: false }, { user: 'pebbles', age: 1, active: false }]\n * // ]\n *\n */\nconst partition: Partition = function <T>(collection: any, predicate: any = identity) {\n const result: [T[], T[]] = [[], []];\n const internalIteratee = createIteratee<T>(predicate);\n forEach(collection, (item, index, arr) => {\n result[internalIteratee(item, index, arr) ? 0 : 1].push(item);\n });\n return result;\n};\n\nexport default partition;\n","import allKeys from '../allKeys';\nimport identity from '../identity';\nimport isArrayLike from '../isArrayLike';\nimport { FunctionAny, ReduceArrayIterator, ReduceArrayLikeIterator, ReduceObjectIterator, ReduceStringIterator, WithNullable } from './types';\n\nexport interface Reduce {\n <T, R>(collection: WithNullable<T[]>, iteratee: ReduceArrayIterator<T, R>, initialValue: R): R;\n <R>(collection: WithNullable<string>, iteratee: ReduceStringIterator<R>, initialValue: R): R;\n <T, R>(collection: WithNullable<ArrayLike<T>>, iteratee: ReduceArrayLikeIterator<T, R>, initialValue: R): R;\n <T extends object, R>(collection: WithNullable<T>, iteratee: ReduceObjectIterator<T, R>, initialValue: R): R;\n <T>(collection: WithNullable<T[]>, iteratee?: ReduceArrayIterator<T, T>): T | undefined;\n (collection: WithNullable<string>, iteratee?: ReduceStringIterator<string>): string | undefined;\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ReduceArrayLikeIterator<T, T>): T | undefined;\n <T extends object>(collection: WithNullable<T>, iteratee?: ReduceObjectIterator<T, T[keyof T]>): T[keyof T] | undefined;\n}\n\n/**\n * 创建 reducer 函数\n *\n * @private\n * @param dir 迭代方向\n * @returns reduce 方法\n */\nfunction createReduce(dir: 1 | -1) {\n function reducer(collection: any, iteratee: FunctionAny, memo: any, initial: boolean) {\n const _keys = !isArrayLike(collection) && allKeys(collection);\n const len = (_keys || collection).length;\n let i = dir > 0 ? 0 : len - 1;\n\n if (!initial && len > 0) {\n memo = collection[_keys ? _keys[i] : i];\n i += dir;\n }\n\n while (i >= 0 && i < len) {\n const currentKey = _keys ? _keys[i] : i;\n memo = iteratee(memo, collection[currentKey], currentKey, collection);\n i += dir;\n }\n return memo;\n }\n\n const reduce: Reduce = function (collection: any, iteratee: FunctionAny = identity, initialValue?: any) {\n const initial = arguments.length >= 3;\n return reducer(collection, iteratee, initialValue, initial);\n };\n return reduce;\n}\n\nexport default createReduce;\n","import createReduce from './internals/createReduce';\n\n/**\n * 对每个元素调用 `iteratee` 函数,每一次运行 `iteratee` 会将元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。\n *\n * 如果没有提供第三个参数值,则集合中的第一个元素将用作初始值。\n *\n * `iteratee` 调用时会传入四个参数 `accumulator` `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.reduce\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @param {*} [initialValue] 初始值。\n * @returns {*} 累计值。\n * @example\n *\n * reduce([1,2,3], function(accumulator, current, index){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n * reduce({a: 1, b: 2, c: 3}, function(accumulator, current, key){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n */\nconst reduce = createReduce(1);\n\nexport default reduce;\n","import createReduce from './internals/createReduce';\n\n/**\n * 对每个元素(从右往左的顺序)调用 `iteratee` 函数,每一次运行 `iteratee` 会将元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。\n *\n * 如果没有提供第三个参数值,则集合中的第一个元素将用作初始值。\n *\n * `iteratee` 调用时会传入四个参数 `accumulator` `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.reduceRight\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @param {*} [initialValue] 初始值。\n * @returns {*} 累计值。\n * @example\n *\n * reduceRight([1,2,3], function(accumulator, current, index){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n * reduceRight({a: 1, b: 2, c: 3}, function(accumulator, current, key){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n */\nconst reduceRight = createReduce(-1);\n\nexport default reduceRight;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Some {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,如果任一元素通过 `predicate` 返回真值,则停止迭代并返回 `true`,否则返回 `false`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.some\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {boolean} 如果任一元素通过 `predicate` 测试,则返回 `true`,否则返回 `false`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * some(arr, item => item % 2 === 0); // false\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * some(obj, item => item > 1); // true\n */\nconst some: Some = function (collection: any, predicate: any = identity) {\n let result = false;\n forEach(collection, (item, index, arr) => {\n if (predicate(item, index, arr)) {\n result = true;\n return false;\n }\n });\n return result;\n};\n\nexport default some;\n","interface DefaultTo {\n <T>(value: T | null | undefined, defaultValue: T): T;\n <T, D>(value: T | null | undefined, defaultValue: D): T | D;\n}\n\n/**\n * 检查值以确定是否应在其位置返回默认值。如果值为 `NaN` `null` 或 `undefined`,返回 `defaultValue`。\n *\n * @function\n * @alias module:Util.defaultTo\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @param {*} defaultValue 默认值。\n * @returns {*} 如果值为 `NaN` `null` 或 `undefined`,返回 `defaultValue`,否则返回 `value`。\n * @example\n *\n * defaultTo(undefined, 1); // 1\n *\n * defaultTo(10, 1); // 10\n *\n * defaultTo(null, undefined); // undefined\n *\n */\nconst defaultTo: DefaultTo = function <T, D>(value: T, defaultValue: D) {\n return value == null || value !== value ? defaultValue : value;\n};\n\nexport default defaultTo;\n","import isObjectLike from '../isObjectLike';\nimport getTag from './getTag';\nimport { argumentsTag, functionProtoToString, stringUndefined } from './native';\n\n/**\n * ut2 版本号。\n *\n * @static\n * @since 1.0.0\n */\nexport const VERSION = BUILD_VERSION;\n\n/**\n * 当前运行环境是否为浏览器\n *\n * @static\n * @since 1.10.0\n */\nexport const isBrowser = typeof window !== stringUndefined && isObjectLike(window) && typeof document !== stringUndefined && isObjectLike(document) && window.document === document;\n\n// @ts-ignore\nexport const supportedArgumentsType = getTag((() => arguments)()) === argumentsTag;\n\nexport const FUNC_ERROR_TEXT = 'Expected a function';\n\nexport function toSource(func: any) {\n if (func !== null) {\n try {\n return functionProtoToString.call(func);\n } catch (e) {\n /* empty */\n }\n try {\n return func + '';\n } catch (e) {\n /* empty */\n }\n }\n return '';\n}\n\nexport const stubFlase = () => false;\nexport const stubTrue = () => true;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 创建一个函数,当它被调用 `n` 或更多次之后触发 `func`。\n *\n * @static\n * @alias module:Function.after\n * @since 1.0.0\n * @param {number} n 函数应该在调用多少次后执行。\n * @param {Function} func 用来限定的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * const saves = ['profile', 'settings'];\n * const done = after(saves.length, () => console.log('done saving!'));\n *\n * saves.forEach(item=>{\n * console.log(item);\n * done();\n * });\n * // 'profile'\n * // 'settings'\n * // 'done saving!'\n *\n */\nfunction after<T extends FunctionAny>(n: number, func: T) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = defaultTo(toNumber(n), 0);\n return function () {\n if (--n < 1) {\n // @ts-ignore\n // eslint-disable-next-line prefer-rest-params\n return func.apply(this, arguments);\n }\n } as T;\n}\n\nexport default after;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { nativeUndefined } from './internals/native';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 创建一个调用 `func` 的函数,调用次数少于 `n` 次。之后再调用这个函数,将返回最后一次调用 `func` 的结果。\n *\n * @static\n * @alias module:Function.before\n * @since 1.0.0\n * @param {number} n 不再调用 `func` 的次数。\n * @param {Function} func 限制执行的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * let count = 0;\n *\n * const increment = before(3, () => {\n * return ++count;\n * });\n *\n * increment(); // 1\n * increment(); // 2\n * increment(); // 2 返回之前的结果\n *\n */\nfunction before<T extends FunctionAny>(n: number, func: T) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n let result: ReturnType<T>;\n n = defaultTo(toNumber(n), 0);\n return function () {\n if (--n > 0) {\n // @ts-expect-error\n // eslint-disable-next-line prefer-rest-params\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n // @ts-expect-error\n func = nativeUndefined;\n }\n return result;\n } as T;\n}\n\nexport default before;\n","import { nativeUndefined } from './internals/native';\n\n/**\n * 检查值是否为 `undefined`。\n *\n * @static\n * @alias module:Language.isUndefined\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `undefined`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isUndefined(undefined); // true\n *\n * isUndefined(null); // false\n *\n */\nfunction isUndefined(value: any): value is undefined {\n return value === nativeUndefined;\n}\n\nexport default isUndefined;\n","/* eslint-disable prefer-rest-params */\nimport { arrayProtoSlice, mathMax } from './internals/native';\nimport { FunctionAny } from './internals/types';\nimport isUndefined from './isUndefined';\nimport toInteger from './toInteger';\n\nconst PLACEHOLDER = {\n __ut2_curry_ph__: null\n};\n\ntype Placeholder = typeof PLACEHOLDER;\n\ninterface Curry {\n <T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;\n <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;\n <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;\n <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;\n <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;\n\n placeholder: Placeholder;\n _: Placeholder;\n}\n\ninterface CurriedFunction1<T1, R> {\n (t1: T1): R;\n\n (t1: Placeholder): CurriedFunction1<T1, R>;\n (): CurriedFunction1<T1, R>;\n}\ninterface CurriedFunction2<T1, T2, R> {\n (t1: Placeholder, t2: T2): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2): R;\n\n (t1: T1): CurriedFunction1<T2, R>;\n\n (t1: Placeholder): CurriedFunction2<T1, T2, R>;\n (): CurriedFunction2<T1, T2, R>;\n}\ninterface CurriedFunction3<T1, T2, T3, R> {\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction1<T1, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction1<T2, R>;\n (t1: T1, t2: T2, t3: T3): R;\n\n (t1: Placeholder, t2: T2): CurriedFunction2<T1, T3, R>;\n (t1: T1, t2: T2): CurriedFunction1<T3, R>;\n\n (t1: T1): CurriedFunction2<T2, T3, R>;\n\n (t1: Placeholder): CurriedFunction3<T1, T2, T3, R>;\n (): CurriedFunction3<T1, T2, T3, R>;\n}\ninterface CurriedFunction4<T1, T2, T3, T4, R> {\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T1, T2, T3, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T1, T3, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction2<T2, T3, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction1<T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction1<T2, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4): R;\n\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction3<T1, T2, T4, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction2<T2, T4, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;\n (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;\n\n (t1: Placeholder, t2: T2): CurriedFunction3<T1, T3, T4, R>;\n (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;\n\n (t1: T1): CurriedFunction3<T2, T3, T4, R>;\n\n (t1: Placeholder): CurriedFunction4<T1, T2, T3, T4, R>;\n (): CurriedFunction4<T1, T2, T3, T4, R>;\n}\ninterface CurriedFunction5<T1, T2, T3, T4, T5, R> {\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction3<T1, T2, T4, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T1, T3, T4, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T2, T3, T4, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T1, T4, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T2, T4, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction2<T3, T4, R>;\n (t1: T1, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction1<T4, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction1<T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;\n\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction3<T1, T3, T5, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T2, T3, T5, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T3, T5, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;\n\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction3<T2, T4, T5, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;\n (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;\n\n (t1: Placeholder, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;\n (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;\n\n (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;\n\n (t1: Placeholder): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n (): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n}\n\n/**\n * 创建一个函数。该函数接受 `func` 参数,在提供的参数数量达到 `arity` 后调用 `func` 并返回其结果。\n *\n * `curry._` 或 `curry.placeholder` 可用作参数的占位符。\n *\n * @function\n * @alias module:Function.curry\n * @since 1.8.0\n * @param {Function} func 需要柯里化的函数。\n * @param {number} [arity] 指定参数数量。默认值为 `func.length`。\n * @returns {Function} 新的柯里化函数。\n * @example\n *\n * function abc(a, b, c){\n * return [a, b, c];\n * }\n *\n * var curried = curry(abc);\n *\n * curried(1)(2)(3); // [1, 2, 3]\n *\n * curried(1, 2)(3); // [1, 2, 3]\n *\n * curried(1, 2, 3); // [1, 2, 3]\n *\n * curried(1)(curry._, 3)(2); // [1, 2, 3]\n *\n * curried(curry._, curry._, 3)(curry._, 2)(1); // [1, 2, 3]\n *\n */\nconst curry: Curry = function (func: FunctionAny, arity?: number) {\n arity = isUndefined(arity) ? func.length : mathMax(toInteger(arity), 0);\n\n function wrap(this: any) {\n let args: any[] = arrayProtoSlice.call(arguments);\n const context = this;\n\n function inner() {\n const argsInner = arrayProtoSlice.call(arguments);\n\n for (let i = 0; i < args.length; i++) {\n args[i] = args[i] === PLACEHOLDER && argsInner.length > 0 ? argsInner.shift() : args[i];\n }\n args = args.concat(argsInner);\n const realArgsLength = args.filter((arg) => arg !== PLACEHOLDER).length;\n if (realArgsLength >= arity!) {\n return func.apply(context, args);\n }\n return inner;\n }\n\n return inner();\n }\n\n return wrap;\n};\n\ncurry.placeholder = curry._ = PLACEHOLDER;\n\nexport default curry;\n","import defaultTo from '../defaultTo';\nimport toNumber from '../toNumber';\nimport { FUNC_ERROR_TEXT } from './helpers';\nimport { nativeUndefined } from './native';\nimport { FunctionAny } from './types';\n\nfunction baseDebounce<T extends FunctionAny>(func: T, wait: number, immediate: boolean, __throttle__ = false) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n let timer: any, lastCallTime: number | undefined, lastInvokeTime: number, lastArgs: any[] | undefined, lastThis: any, result: ReturnType<T>;\n\n wait = defaultTo(toNumber(wait), 0);\n\n function shouldInvoke(time: number) {\n if (lastCallTime === nativeUndefined) {\n return true;\n }\n const timeSinceLastCall = time - lastCallTime;\n const timeSinceLastInvoke = time - lastInvokeTime;\n return timeSinceLastCall >= wait || timeSinceLastCall < 0 || (__throttle__ && timeSinceLastInvoke >= wait);\n }\n\n function invokeFunc(time: number) {\n lastInvokeTime = time;\n result = func.apply(lastThis, lastArgs!);\n lastThis = lastArgs = nativeUndefined;\n return result;\n }\n\n function debounced(this: any, ...args: Parameters<T>) {\n lastThis = this;\n lastArgs = args;\n\n const time = Date.now();\n const isInvoke = shouldInvoke(time); // 是否可以立即调用\n\n const waitTime = !__throttle__ ? wait : !isInvoke && lastCallTime !== nativeUndefined && timer === nativeUndefined ? wait - (time - lastCallTime) : wait;\n\n lastCallTime = time;\n\n if (isInvoke) {\n // 立即调用,且没有定时器\n if (immediate && timer === nativeUndefined) {\n return invokeFunc(time);\n }\n }\n\n // 如果已有定时器,且不是节流方式,清除并重新启动定时器\n if (timer !== nativeUndefined && !__throttle__) {\n clearTimeout(timer);\n timer = nativeUndefined;\n }\n\n if (timer === nativeUndefined) {\n timer = setTimeout(() => {\n timer = nativeUndefined;\n invokeFunc(Date.now());\n }, waitTime);\n }\n\n return result;\n }\n\n function cancel() {\n if (timer !== nativeUndefined) {\n clearTimeout(timer);\n timer = nativeUndefined;\n }\n lastCallTime = timer = lastArgs = lastThis = nativeUndefined;\n }\n\n function flush() {\n if (timer !== nativeUndefined) {\n clearTimeout(timer);\n timer = nativeUndefined;\n\n if (lastArgs) {\n return invokeFunc(Date.now());\n }\n }\n return result;\n }\n\n function pending() {\n return timer !== nativeUndefined;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n\n return debounced;\n}\n\nexport default baseDebounce;\n","import baseDebounce from './internals/baseDebounce';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个防抖动函数,该函数会从上一次被调用后,延迟 `wait` 毫秒数后调用 `func` 方法。\n *\n * 防抖动函数还提供以下方法:\n * 1. `cancel` 方法取消延迟的函数调用。\n * 2. `flush` 方法立即调用。\n * 3. `pending` 方法是否在等待函数执行。\n *\n * @static\n * @alias module:Function.debounce\n * @since 1.0.0\n * @param {Function} func 要防抖动的函数。\n * @param {number} [wait=0] 需要延迟的毫秒数。默认 `0`。\n * @param {boolean} [immediate=false] 是否在延迟开始前调用。默认 `false`。\n * @returns {Function} 防抖动函数。\n * @example\n *\n * function calculateLayout(e){\n * console.log('calculate layout event: ', e);\n * }\n *\n * // 避免窗口在变动时出现昂贵的计算开销。\n * window.addEventListener('resize', debounce(calculateLayout, 200));\n *\n * const debounced = debounce(()=>{\n * // do something\n * }\n *\n * // 点击按钮立即执行,而后如果在每 300 毫秒内连续点击,将在最后一次点击延迟 300 毫秒后执行。\n * document.querySelector('button').addEventListener('click', debounced, 300, true));\n *\n * // 取消防抖动调用\n * window.addEventListener('popstate', debounced.cancel);\n *\n */\nfunction debounce<T extends FunctionAny>(func: T, wait = 0, immediate = false) {\n return baseDebounce(func, wait, immediate);\n}\n\nexport default debounce;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 延迟 `wait` 毫秒后调用 `func`。\n *\n * @static\n * @alias module:Function.delay\n * @since 1.0.0\n * @param {Function} func 要延迟的函数。\n * @param {number} wait 要延迟的毫秒数。\n * @param {...*} [args] 调用函数时传入的参数。\n * @returns {number} 定时器 `id`。\n * @example\n *\n * // 延迟 1000 毫秒后执行\n * delay(function(text){\n * console.log(text);\n * }, 1000, 'hello world');\n *\n * // 'hello world'\n *\n */\nfunction delay<T extends FunctionAny>(this: any, func: T, wait: number, ...args: Parameters<T>) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n const context = this;\n wait = defaultTo(toNumber(wait), 0);\n\n return setTimeout(() => {\n func.apply(context, args);\n }, wait);\n}\n\nexport default delay;\n","import { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个断言函数结果取反的函数。\n *\n * @static\n * @alias module:Function.negate\n * @since 1.0.0\n * @param {function} predicate 需要对结果取反的函数。\n * @returns 新的取反函数。\n * @example\n *\n * function isEven(num){\n * return num % 2 === 0;\n * }\n *\n * const nums = [1,2,3,4,5];\n * nums.filter(isEvent); // [2, 4]\n *\n * const ne = negate(isEvent);\n * nums.filter(ne); // [1, 3, 5]\n *\n */\nfunction negate<T extends FunctionAny>(this: any, predicate: T) {\n if (typeof predicate !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n return (...args: Parameters<T>) => {\n return !predicate.apply(this, args);\n };\n}\n\nexport default negate;\n","import before from './before';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个只能调用 `func` 一次的函数。重复调用将返回第一次调用 `func` 的结果。\n *\n * @static\n * @alias module:Function.once\n * @since 1.2.0\n * @requires module:Function.before\n * @param {Function} func 限制执行的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * let count = 0;\n *\n * const increment = _.once(()=>{\n * return ++count;\n * });\n *\n * increment(); // 1\n * increment(); // 1\n * increment(); // 1\n *\n */\nfunction once<T extends FunctionAny>(func: T) {\n return before(2, func);\n}\n\nexport default once;\n","/* eslint-disable prefer-rest-params */\nimport { arrayProtoSlice } from './internals/native';\n\nconst PLACEHOLDER = {\n __ut2_partial_ph__: null\n};\n\ntype Placeholder = typeof PLACEHOLDER;\ntype Function0<R> = () => R;\ntype Function1<T1, R> = (t1: T1) => R;\ntype Function2<T1, T2, R> = (t1: T1, t2: T2) => R;\ntype Function3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;\ntype Function4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;\n\ninterface Partial {\n <T1, T2, R>(func: Function2<T1, T2, R>, plc1: Placeholder, arg2: T2): Function1<T1, R>;\n <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2): Function0<R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, arg2: T2): Function2<T1, T3, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3): Function2<T1, T2, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: Placeholder, arg3: T3): Function1<T2, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, arg2: T2, arg3: T3): Function1<T1, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3): Function0<R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2): Function3<T1, T3, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3): Function3<T1, T2, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, arg3: T3): Function2<T2, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, arg3: T3): Function2<T1, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3): Function1<T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, plc3: Placeholder, arg4: T4): Function3<T1, T2, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, plc3: Placeholder, arg4: T4): Function2<T2, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, plc3: Placeholder, arg4: T4): Function2<T1, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: Placeholder, arg4: T4): Function1<T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3, arg4: T4): Function2<T1, T2, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, arg3: T3, arg4: T4): Function1<T2, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0<R>;\n <TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;\n <TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;\n <TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;\n <TS extends any[], T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3, ...ts: TS) => R, t1: T1, t2: T2, t3: T3): (...ts: TS) => R;\n <TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: TS) => R, t1: T1, t2: T2, t3: T3, t4: T4): (...ts: TS) => R;\n placeholder: Placeholder;\n _: Placeholder;\n}\n\n/**\n * 创建一个函数。该函数调用 `func`,并传入预设的 `args` 参数。\n *\n * `partial._` 或 `partial.placeholder` 可用作参数的占位符。\n *\n * @function\n * @alias module:Function.partial\n * @since 1.0.0\n * @param {Function} func 需要预设的函数。\n * @param {...*} [args] 预设的参数。\n * @returns {Function} 预设参数的函数。\n * @example\n *\n * function greet(greeting, name){\n * return greeting + ' ' + name;\n * }\n *\n * const sayHelloTo = partial(greet, 'hello');\n * sayHelloTo('jeff'); // 'hello jeff'\n *\n * const greetJeff = partial(greet, partial._, 'jeff');\n * greetJeff('hi'); // 'hi jeff'\n *\n */\nconst partial: Partial = function (func: any) {\n const argsOrig = arrayProtoSlice.call(arguments, 1);\n\n return function (this: any) {\n const args = [];\n const argsPartial = arrayProtoSlice.call(arguments);\n\n for (let i = 0; i < argsOrig.length; i++) {\n args[i] = argsOrig[i] === PLACEHOLDER ? argsPartial.shift() : argsOrig[i];\n }\n\n return func.apply(this, args.concat(argsPartial));\n };\n};\n\npartial.placeholder = partial._ = PLACEHOLDER;\n\nexport default partial;\n","import baseDebounce from './internals/baseDebounce';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个节流函数,该函数在 `wait` 毫秒数内最多执行一次 `func` 方法。\n *\n * 节流函数还提供以下方法:\n * 1. `cancel` 方法取消延迟的函数调用。\n * 2. `flush` 方法立即调用。\n * 3. `pending` 方法是否在等待函数执行。\n *\n * @static\n * @alias module:Function.throttle\n * @since 1.0.0\n * @param {Function} func 要节流的函数。\n * @param {number} [wait=0] 需要节流的毫秒数。默认 `0`。\n * @param {boolean} [immediate=true] 是否在节流开始前调用。默认 `true`。\n * @returns 节流函数。\n * @example\n *\n * function updatePosition(e){\n * console.log('update position event: ', e);\n * }\n *\n * // 避免在滚动时频繁的更新定位。\n * window.addEventListener('scroll', throttle(updatePosition, 100));\n *\n * const throttled = throttle(()=>{\n * // do something\n * }\n *\n * // 点击按钮, 300 毫秒内最多执行一次。\n * document.querySelector('button').addEventListener('click', throttled, 300));\n *\n * // 取消节流调用。\n * window.addEvenetListener('popstate', throttled.cancel);\n *\n */\nfunction throttle<T extends FunctionAny>(func: T, wait = 0, immediate = true) {\n return baseDebounce(func, wait, immediate, true);\n}\n\nexport default throttle;\n","import { argumentsTag, objectProtoHasOwnProperty, objectProtoPropertyIsEnumerable } from './internals/native';\nimport { supportedArgumentsType } from './internals/helpers';\nimport isObjectLike from './isObjectLike';\nimport getTag from './internals/getTag';\n\n/**\n * 检查值是否为 `arguments` 对象。\n *\n * @static\n * @alias module:Language.isArguments\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `arguments` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArguments(function() { return arguments }()); // true\n *\n * isArguments([1, 2, 3]); // false\n *\n */\nfunction isArguments(value: any): value is IArguments {\n if (supportedArgumentsType) {\n return getTag(value) === argumentsTag;\n }\n return isObjectLike(value) && objectProtoHasOwnProperty.call(value, 'callee') && !objectProtoPropertyIsEnumerable.call(value, 'callee');\n}\n\nexport default isArguments;\n","import { stringObject } from './native';\n\n// @ts-ignore\n// `exports`\nconst freeExports = typeof exports === stringObject && exports && !exports.nodeType && exports;\n\n// @ts-ignore\n// `module`\nconst freeModule = freeExports && typeof module === stringObject && module && !module.nodeType && module;\n\nconst nodeUtil = (function () {\n try {\n const types = freeModule && freeModule.require && freeModule.require('util').types;\n if (types) {\n return types;\n }\n } catch (e) {\n /* empty */\n }\n})();\n\ntype CheckTypeMethod = undefined | ((value: any) => boolean);\n\nexport const nodeIsArrayBuffer: CheckTypeMethod = nodeUtil && nodeUtil.isArrayBuffer;\nexport const nodeIsDate: CheckTypeMethod = nodeUtil && nodeUtil.isDate;\nexport const nodeIsMap: CheckTypeMethod = nodeUtil && nodeUtil.isMap;\nexport const nodeIsRegExp: CheckTypeMethod = nodeUtil && nodeUtil.isRegExp;\nexport const nodeIsSet: CheckTypeMethod = nodeUtil && nodeUtil.isSet;\nexport const nodeIsTypedArray: CheckTypeMethod = nodeUtil && nodeUtil.isTypedArray;\n","import getTag from './internals/getTag';\nimport { arrayBufferTag } from './internals/native';\nimport { nodeIsArrayBuffer } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `ArrayBuffer` 对象。\n *\n * @static\n * @alias module:Language.isArrayBuffer\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `ArrayBuffer` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayBuffer(new ArrayBuffer(8)); // true\n *\n * isArrayBuffer({}); // false\n *\n * isArrayBuffer('2012'); // false\n *\n */\nfunction isArrayBuffer(value: any): value is ArrayBuffer {\n return nodeIsArrayBuffer ? nodeIsArrayBuffer(value) : getTag(value) === arrayBufferTag;\n}\n\nexport default isArrayBuffer;\n","import getTag from './internals/getTag';\nimport { bigIntTag } from './internals/native';\n\n/**\n * 检查值是否为 bigint 类型或对象。\n *\n * @static\n * @alias module:Language.isBigInt\n * @since 1.8.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 bigint 类型或对象,返回 `true` 否则返回 `false`。\n * @example\n *\n * isBigInt(0n); // true\n *\n * isBigInt(1n); // true\n *\n * isBigInt(BigInt(1)); // true\n *\n * isBigInt(Object(1n)); // true\n *\n * isBigInt(1); // false\n */\nfunction isBigInt(value: any): value is bigint {\n return typeof value === 'bigint' || getTag(value) === bigIntTag;\n}\n\nexport default isBigInt;\n","import getTag from './internals/getTag';\nimport { blobTag, stringUndefined } from './internals/native';\n\n// Blob 对象是否存在\nconst blobExisted = typeof Blob !== stringUndefined;\n\n/**\n * 检查值是否为 `Blob` 对象。\n *\n * 浏览器环境的 `Blob` 或 `File` 对象,或其他继承自 `Blob` 的实例,都将返回 `true`。\n *\n * @static\n * @alias module:Language.isBlob\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/Blob Blob}\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File File}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Blob` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isBlob(new Blob(['a'])); // true\n *\n * isBlob(new File([], 'test.txt')); // true\n *\n * isBlob({}); // false\n *\n * isBlob('2012'); // false\n *\n */\nfunction isBlob(value: any): value is Blob {\n // instanceof 不支持跨域对象判断,如来自 iframe 的 Blob 对象\n if (blobExisted && value instanceof Blob) {\n return true;\n }\n return getTag(value) === blobTag;\n}\n\nexport default isBlob;\n","import getTag from './internals/getTag';\nimport { booleanTag } from './internals/native';\n\n/**\n * 检查值是否为布尔类型或对象。\n *\n * @static\n * @alias module:Language.isBoolean\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为布尔类型或对象,返回 `true` 否则返回 `false`。\n * @example\n *\n * isBoolean(false); // true\n *\n * isBoolean(new Boolean(false)); // true\n *\n * isBoolean(Object(false)); // true\n *\n * isBoolean(new Boolean(false)); // true\n *\n * isBoolean(null); // false\n *\n */\nfunction isBoolean(value: any): value is boolean {\n return value === true || value === false || getTag(value) === booleanTag;\n}\n\nexport default isBoolean;\n","/**\n * 检查值是否为 `buffer`。\n *\n * 非 Node.js 环境,始终返回 `false`。\n *\n * @static\n * @alias module:Language.isBuffer\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `buffer`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isBuffer(Buffer.alloc(2)); // true\n *\n * isBuffer({}); // false\n *\n * isBuffer('2012'); // false\n *\n */\nfunction isBuffer(value: any): value is Buffer {\n if (typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function') {\n return Buffer.isBuffer(value);\n }\n return false;\n}\n\nexport default isBuffer;\n","import { objectTag, dataViewTag, mapTag, promiseTag, setTag, weakMapTag, nativeUndefined, stringUndefined } from './native';\nimport { toSource } from './helpers';\nimport getTag from './getTag';\n\nconst dataViewExisted = typeof DataView !== stringUndefined;\nconst mapExisted = typeof Map !== stringUndefined;\nconst promiseExisted = typeof Promise !== stringUndefined;\nconst setExisted = typeof Set !== stringUndefined;\nconst weakMapExisted = typeof WeakMap !== stringUndefined;\n\nconst dataViewCtorString = toSource(DataView);\nconst mapCtorString = toSource(Map);\nconst promiseCtorString = toSource(Promise);\nconst setCtorString = toSource(Set);\nconst weakMapCtorString = toSource(WeakMap);\n\nlet getTagWithBugfix = getTag;\n\n// 以下数据类型执行 `Object.prototype.toString` 返回错误结果 `[object Object]`:\n// ie11 的 DataView、Map、Set、WeakMap ,node.js 版本 < 6 的 Promise 。\nif (\n (dataViewExisted && getTag(new DataView(new ArrayBuffer(1))) !== dataViewTag) ||\n (mapExisted && getTag(new Map()) !== mapTag) ||\n (promiseExisted && getTag(Promise.resolve()) !== promiseTag) ||\n (setExisted && getTag(new Set()) !== setTag) ||\n (weakMapExisted && getTag(new WeakMap()) !== weakMapTag)\n) {\n getTagWithBugfix = function (value: any) {\n const result = getTag(value);\n const Ctor = result === objectTag ? value.constructor : nativeUndefined;\n const ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nexport default getTagWithBugfix;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { dataViewTag } from './internals/native';\n\n/**\n * 检查值是否为 `DataView` 对象。\n *\n * @static\n * @alias module:Language.isDataView\n * @since 1.2.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `DataView` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isDataView(new DataView(new ArrayBuffer(8))); // true\n *\n */\nfunction isDataView(value: any): value is DataView {\n return getTagWithBugfix(value) === dataViewTag;\n}\n\nexport default isDataView;\n","import getTag from './internals/getTag';\nimport { dateTag } from './internals/native';\nimport { nodeIsDate } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Date` 对象。\n *\n * @static\n * @alias module:Language.isDate\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Date` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isDate(new Date); // true\n *\n * isDate('Mon April 23 2012'); // false\n *\n */\nfunction isDate(value: any): value is Date {\n return nodeIsDate ? nodeIsDate(value) : getTag(value) === dateTag;\n}\n\nexport default isDate;\n","import getTag from './internals/getTag';\nimport { functionProtoToString, objectProtoHasOwnProperty, objectGetPrototypeOf, objectTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\nconst objectCtorString = functionProtoToString.call(Object);\n\n/**\n * 检查值是否为普通对象,即由 `Object` 构造函数创建或 `[[Prototype]]` 为 `null` 的对象。\n *\n * @static\n * @alias module:Language.isPlainObject\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为普通对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * }\n *\n * isPlainObject(new Foo); // false\n *\n * isPlainObject([1,2,3]); // false\n *\n * isPlainObject({ a: 1, b: 2 }); // true\n *\n * isPlainObject(Object.create(null)); // true\n *\n */\nfunction isPlainObject(value: any): value is object {\n if (!isObjectLike(value) || getTag(value) !== objectTag) {\n return false;\n }\n const proto = objectGetPrototypeOf(Object(value));\n\n // Object.create(null)\n if (proto === null) {\n return true;\n }\n\n const Ctor = objectProtoHasOwnProperty.call(proto, 'constructor') && proto.constructor;\n // 这里如果直接比较 proto.constructor === Object ,iframe 嵌套会导致结果不准确。\n return typeof Ctor === 'function' && Ctor instanceof Ctor && functionProtoToString.call(Ctor) === objectCtorString;\n}\n\nexport default isPlainObject;\n","import isObjectLike from './isObjectLike';\nimport isPlainObject from './isPlainObject';\n\n/**\n * 检查值是否可能为 `DOM` 元素。\n *\n * @static\n * @alias module:Language.isElement\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `DOM` 元素,返回 `true`,否则返回 `false`。\n * @example\n *\n * isElement(document.body); // true\n *\n * isElement('<body>'); // false\n *\n */\nfunction isElement(value: any): value is Element {\n return isObjectLike(value) && (value as Element).nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n","import getTag from './internals/getTag';\nimport { mapTag, setTag } from './internals/native';\nimport isArrayLike from './isArrayLike';\nimport isNil from './isNil';\nimport isObjectLike from './isObjectLike';\nimport allKeys from './allKeys';\n\n/**\n * 检查值是否为空对象。\n *\n * 类数组的 `length===0`,`Map` `Set` 的 `size === 0` 表示为空。如果对象 `Object.keys` 没有可枚举属性,则被认为是空的。\n *\n * 非上述类型值,都将被认为是空的。\n *\n * @static\n * @alias module:Language.isEmpty\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为空,返回 `true`,否则返回 `false`。\n * @example\n *\n * isEmpty(null); // true\n *\n * isEmpty(true); // true\n *\n * isEmpty(1); // true\n *\n * isEmpty([]); // true\n *\n * isEmpty({}); // true\n *\n * isEmpty(''); // false\n *\n * isEmpty('abc'); // false\n *\n * isEmpty([1, 2, 3]); // false\n *\n * isEmpty({ a: 1, b: 2 }); // false\n *\n */\nfunction isEmpty(value: any) {\n if (isNil(value)) {\n return true;\n }\n\n const tag = getTag(value);\n if (tag === mapTag || tag === setTag) {\n return !value.size;\n }\n\n if (isObjectLike(value)) {\n return !allKeys(value).length;\n }\n\n if (isArrayLike(value)) {\n return !value.length;\n }\n\n return true;\n}\n\nexport default isEmpty;\n","import getTag from './internals/getTag';\nimport { nodeIsTypedArray } from './internals/nodeUtil';\nimport isArrayLikeObject from './isArrayLikeObject';\n\nconst typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n\n/**\n * 检查值是否为类型化数组。\n *\n * @static\n * @alias module:Language.isTypedArray\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays Typed_arrays}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类型化数组,返回 `true`,否则返回 `false`。\n * @example\n *\n * isTypedArray(new Uint8Array); // true\n *\n * isTypedArray([]); // false\n *\n */\nfunction isTypedArray(value: any) {\n if (nodeIsTypedArray) {\n return nodeIsTypedArray(value);\n }\n if (isArrayLikeObject(value)) {\n return typedArrayPattern.test(getTag(value));\n }\n return false;\n}\n\nexport default isTypedArray;\n","import allKeys from '../allKeys';\nimport eq from '../eq';\nimport getTagWithBugfix from './getTagWithBugfix';\nimport { argumentsTag, arrayProtoSlice, arrayBufferTag, arrayTag, booleanTag, dataViewTag, dateTag, errorTag, objectProtoHasOwnProperty, mapTag, numberTag, objectTag, regExpTag, setTag, stringTag, symbolProto, symbolTag, nativeUndefined } from './native';\nimport isBuffer from '../isBuffer';\nimport isFunction from '../isFunction';\nimport isNil from '../isNil';\nimport isObjectLike from '../isObjectLike';\nimport isTypedArray from '../isTypedArray';\nimport orderBy from '../orderBy';\n\nconst symbolValueOf = symbolProto ? symbolProto.valueOf : nativeUndefined;\n\nfunction mapToArray(map: Map<any, any>) {\n const result: [any, any][] = [];\n map.forEach((value, key) => {\n result.push([key, value]);\n });\n return orderBy(result, [0, 1]);\n}\n\nfunction setToArray(set: Set<any>) {\n const result: any[] = [];\n set.forEach((value) => {\n result.push(value);\n });\n return orderBy(result);\n}\n\nfunction argToArray(arg: IArguments) {\n return arrayProtoSlice.call(arg);\n}\n\nfunction toBufferView(bufferSource: any) {\n return new Uint8Array(bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, bufferSource.byteLength);\n}\n\nfunction isDomNode(obj: any) {\n return isObjectLike(obj) && typeof (obj as Element).nodeType === 'number' && typeof (obj as Element).nodeName === 'string' && typeof (obj as Element).isEqualNode === 'function';\n}\n\ntype Customizer = (objValue: any, othValue: any, key?: number | string | symbol, object?: any, other?: any, valueStack?: any[], otherStack?: any[]) => void | boolean;\n\n/**\n *\n * 深度比较两个值是否相等。\n *\n * 支持比较 `boolean` `number` `string` `symbol` `array` `array buffer` `date` `error` `map` `object` `regexp` `set` `typed array` 类型。对象只比较自身的属性,不包括继承和不可枚举的属性。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @private\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @param {Array} [valueStack] 值的堆栈。\n * @param {Array} [otherStack] 另一个值的堆栈。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n */\nfunction isEqualDeep(value: any, other: any, customizer?: Customizer, strictCheck?: boolean, valueStack?: any[], otherStack?: any[]): boolean {\n // 如果两个值相等,直接返回 true\n if (eq(value, other, strictCheck)) {\n return true;\n }\n\n const valType = typeof value;\n const othType = typeof other;\n\n // 严格比较时,不同类型返回 false\n // 例如,`1` `Object(1)` 不相等\n if (strictCheck && valType !== othType) {\n return false;\n }\n\n // 存在 null 或 undefined 或 都不是对象类型\n if (isNil(value) || isNil(other) || (valType !== 'object' && othType !== 'object')) {\n return false;\n }\n\n // 对象标签\n const tag = getTagWithBugfix(value);\n if (tag !== getTagWithBugfix(other)) {\n return false;\n }\n\n let convert: undefined | ((arg: any) => any);\n\n switch (tag) {\n case numberTag:\n return eq(+value, +other, strictCheck);\n case booleanTag:\n case dateTag:\n // 日期转为毫秒数进行比较,而无效日期转为 `NaN`。如果是严格比较,无效日期不相等。\n return strictCheck ? +value === +other : eq(+value, +other);\n case stringTag:\n case regExpTag:\n return '' + value === '' + other;\n case symbolTag:\n return symbolValueOf ? symbolValueOf.call(value) === symbolValueOf.call(other) : false;\n case errorTag:\n return value.name === other.name && value.message === other.message;\n case dataViewTag:\n case arrayBufferTag:\n if (value.byteLength !== other.byteLength || (value.byteOffset && value.byteOffset !== other.byteOffset)) {\n return false;\n }\n convert = toBufferView;\n break;\n case mapTag:\n convert = mapToArray;\n break;\n case setTag:\n convert = setToArray;\n break;\n case argumentsTag:\n convert = argToArray;\n break;\n }\n\n if (convert) {\n return isEqualDeep(convert(value), convert(other), customizer, strictCheck, valueStack, otherStack);\n }\n\n // 使用 DOM3 isEqualNode 方法比较 (IE>=9)\n if (isDomNode(value) && isDomNode(other)) {\n return value.isEqualNode(other);\n }\n\n let areArrays = tag === arrayTag;\n if (!areArrays && isTypedArray(value)) {\n if (value.byteLength !== other.byteLength) {\n return false;\n }\n if (value.buffer === other.buffer && value.byteOffset === other.byteOffset) {\n return true;\n }\n areArrays = true;\n }\n\n // Buffer 对象处理\n if (isBuffer(value)) {\n if (!isBuffer(other)) {\n return false;\n }\n areArrays = true;\n }\n\n // 假设循环结构是相等的。\n valueStack = valueStack || [];\n otherStack = otherStack || [];\n let length = valueStack.length;\n\n while (length--) {\n // 遍历对象的堆栈,如果存在循环依赖,立即进行比较。\n if (valueStack[length] === value) {\n return otherStack[length] === other;\n }\n }\n\n // 将对象添加到遍历对象的堆栈中。\n valueStack.push(value);\n otherStack.push(other);\n\n let result = true;\n const hasCustomizer = typeof customizer === 'function';\n\n // 递归比较对象和数组\n if (areArrays) {\n // 比较数组长度\n length = value.length;\n if (length !== other.length) {\n return false;\n }\n // 深度比较数组\n while (length--) {\n if (hasCustomizer) {\n const compared = customizer(value[length], other[length], length, value, other, valueStack, otherStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n if (!isEqualDeep(value[length], other[length], customizer, strictCheck, valueStack, otherStack)) {\n return false;\n }\n }\n } else if (tag === objectTag) {\n // 深度比较对象\n const keys = allKeys(value);\n length = keys.length;\n if (allKeys(other).length !== length) {\n return false;\n }\n // 跳过构造函数比较\n let skipCtor = false;\n while (length--) {\n const key = keys[length];\n if (hasCustomizer) {\n const compared = customizer(value[key], other[key], key, value, other, valueStack, otherStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n if (!(objectProtoHasOwnProperty.call(other, key) && isEqualDeep(value[key], other[key], customizer, strictCheck, valueStack, otherStack))) {\n return false;\n }\n\n // constructor 作为属性,非构建函数时\n if (!skipCtor && key === 'constructor') {\n skipCtor = true;\n }\n }\n\n if (!skipCtor) {\n // 不同构造函数的对象不是等价的。\n const valCtor = value.constructor;\n const othCtor = other.constructor;\n if (valCtor !== othCtor && !(isFunction(valCtor) && valCtor instanceof valCtor && isFunction(othCtor) && othCtor instanceof othCtor) && 'constructor' in value && 'constructor' in other) {\n return false;\n }\n }\n } else {\n result = false;\n }\n\n // 从遍历对象的堆栈中删除\n valueStack.pop();\n otherStack.pop();\n\n return result;\n}\n\nexport default isEqualDeep;\n","import isEqualDeep from './internals/isEqualDeep';\nimport { nativeUndefined } from './internals/native';\n\n/**\n * 深度比较两个值是否相等。\n *\n * 支持比较 `boolean` `number` `string` `symbol` `array` `array buffer` `date` `error` `map` `object` `regexp` `set` `typed array` 类型。对象只比较自身的属性,不包括继承和不可枚举的属性。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @static\n * @alias module:Language.isEqual\n * @since 1.3.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n * @example\n *\n * const value = { a: 1, b: -0 }\n * const other = { a: 1, b: 0 }\n *\n * isEqual(value, other); // true\n * value === other // false\n *\n * // 严格比较\n * isEqual(value, other, undefined, true); // false\n *\n * // 自定义比较\n * function customizer(value, other){\n * if(typeof value === 'string' && typeof other === 'string'){\n * return true;\n * }\n * }\n * isEqual('a', 'b', customizer); // true\n * isEqual(['a'], ['b'], customizer); // true\n * isEqual({foo: 'a'}, {foo: 'b'}, customizer); // true\n *\n */\nfunction isEqual(value: any, other: any, customizer?: Parameters<typeof isEqualDeep>[2], strictCheck = false) {\n // 自定义比较\n if (typeof customizer === 'function') {\n const result = customizer(value, other);\n if (result !== nativeUndefined) {\n return !!result;\n }\n }\n return isEqualDeep(value, other, customizer, strictCheck);\n}\n\nexport default isEqual;\n","import getTag from './internals/getTag';\nimport { domExceptionTag, errorTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为 `Error` 或 `DOMException`。\n *\n * 继承自 `Error` 的对象,如 `EvalError` `RangeError` `ReferenceError` `SyntaxError` `TypeError` `URIError` `AggregateError`,都将返回 `true`。\n *\n * @static\n * @alias module:Language.isError\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Error` 或 `DOMException` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isError(new Error); // true\n *\n * isError(Error); // false\n *\n */\nfunction isError(value: any): value is Error {\n if (!isObjectLike(value)) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const tag = getTag(value);\n return tag === errorTag || tag === domExceptionTag;\n}\n\nexport default isError;\n","import getTag from './internals/getTag';\nimport { fileTag, stringUndefined } from './internals/native';\n\n// File 对象是否存在\nconst fileExisted = typeof File !== stringUndefined;\n\n/**\n * 检查值是否为 `File` 对象。\n *\n * 浏览器环境的 `File` 对象,或其他继承自 `File` 的实例,都将返回 `true`。\n *\n * @static\n * @alias module:Language.isFile\n * @since 1.11.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File File}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `File` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFile(new File([], 'test.txt')); // true\n *\n * isBlob(new Blob(['a'])); // false\n *\n * isFile({}); // false\n *\n * isFile('2012'); // false\n *\n */\nfunction isFile(value: any): value is File {\n if (fileExisted && value instanceof File) {\n return true;\n }\n return getTag(value) === fileTag;\n}\n\nexport default isFile;\n","import { globalThisExisted, globalExisted, selfExisted } from './native';\n\nconst freeGlobalThis = globalThisExisted && globalThis.Object === Object && globalThis;\nconst freeGlobal = globalExisted && global.Object === Object && global;\nconst freeSelf = selfExisted && self.Object === Object && self;\n\n/**\n * 全局对象。\n *\n * 不同的 JavaScript 环境都可以获取到对应的全局对象:\n * 1. Web 中等同于 `globalThis` / `window` / `self` / `frames` (兼容旧浏览器)\n * 2. Node.js 中等同于 `globalThis` / `global` (兼容低版本 Node.js)\n * 3. Web Workers 中等同于 `self`\n *\n * @static\n * @since 1.10.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/globalThis globalThis}\n */\nconst root: typeof globalThis = freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './internals/root';\nimport { numberIsFinite } from './internals/native';\n\n/**\n * 检查值是否为有限数字。\n *\n * 同 `Number.isFinite`。\n *\n * @static\n * @alias module:Language.isFinite\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为有限数字,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFinite(1); // true\n *\n * isFinite(Infinity); // false\n *\n * isFinite(Number.MIN_VALUE); // true\n *\n * isFinite('1'); // false\n *\n * isFinite(null); // false\n *\n */\nfunction isFinite(value: any): value is number {\n return numberIsFinite ? numberIsFinite(value) : typeof value === 'number' && root.isFinite(value);\n}\n\nexport default isFinite;\n","import { mathFloor, numberIsInteger } from './internals/native';\nimport isFinite from './isFinite';\n\n/**\n * 检查值是否为整数。\n *\n * 同 `Number.isInteger`。\n *\n * @static\n * @alias module:Language.isInteger\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为整数,返回 `true`,否则返回 `false`。\n * @example\n *\n * isInteger(1); // true\n *\n * isInteger(Infinity); // false\n *\n * isInteger(Number.MIN_VALUE); // false\n *\n * isInteger('1'); // false\n *\n * isInteger(null); // false\n *\n */\nfunction isInteger(value: any): value is number {\n return numberIsInteger ? numberIsInteger(value) : isFinite(value) && mathFloor(value) === value;\n}\n\nexport default isInteger;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { mapTag } from './internals/native';\nimport { nodeIsMap } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Map` 对象。\n *\n * @static\n * @alias module:Language.isMap\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Map` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isMap(new Map); // true\n *\n * isMap(new WeakMap); // false\n *\n */\nfunction isMap(value: any): value is Map<any, any> {\n if (nodeIsMap) {\n return nodeIsMap(value);\n }\n return getTagWithBugfix(value) === mapTag;\n}\n\nexport default isMap;\n","import allKeys from './allKeys';\nimport getTag from './internals/getTag';\nimport { nativeUndefined, objectTag } from './internals/native';\nimport isEqualDeep from './internals/isEqualDeep';\n\n// 是否需要深比较\nfunction isDeepComparable(object: any, source: any) {\n return getTag(object) === objectTag && getTag(source) === objectTag;\n}\n\ntype Customizer = (objValue: any, srcValue: any, key?: number | string | symbol, object?: any, source?: any, objStack?: any[], srcStack?: any[]) => void | boolean;\n\nfunction baseIsMatch(object: Record<string | symbol, any>, source: Record<string | symbol, any>, customizer?: Customizer, strictCheck?: boolean, objStack?: any[], srcStack?: any[]) {\n const hasCustomizer = typeof customizer === 'function';\n\n if (isDeepComparable(object, source)) {\n // 假设循环结构是相等的。\n objStack = objStack || [];\n srcStack = srcStack || [];\n let stackLen = objStack.length;\n\n while (stackLen--) {\n // 遍历对象的堆栈,如果存在循环依赖,立即进行比较。\n // 相等才退出,否则必须匹配。\n if (objStack[stackLen] === object && srcStack[stackLen] === source) {\n return true;\n }\n }\n\n // 将对象添加到遍历对象的堆栈中。\n objStack.push(object);\n srcStack.push(source);\n\n const keys = allKeys(source);\n let length = keys.length;\n\n while (length--) {\n const key = keys[length];\n if (!(key in object)) {\n return false;\n }\n\n if (hasCustomizer) {\n const compared = customizer(object[key], source[key], key, object, source, objStack, srcStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n\n // 循环对象\n if (!baseIsMatch(object[key], source[key], customizer, strictCheck, objStack, srcStack)) {\n return false;\n }\n }\n\n // 从遍历对象的堆栈中删除\n objStack.pop();\n srcStack.pop();\n return true;\n }\n\n // 非对象比较\n const result = isEqualDeep(\n object,\n source,\n (objValue, srcValue, k, obj, src) => {\n if (hasCustomizer) {\n const compared = customizer(objValue, srcValue, k, obj, src, objStack, srcStack);\n if (compared !== nativeUndefined) {\n return compared;\n }\n }\n if (isDeepComparable(objValue, srcValue)) {\n return baseIsMatch(objValue, srcValue, customizer, strictCheck, objStack, srcStack);\n }\n },\n strictCheck,\n objStack,\n srcStack\n );\n\n return result;\n}\n\n/**\n * 执行一个深比较,确定 `object` 是否含有和 `source` 完全相等的属性值。\n *\n * 注意:只有普通对象才会执行部分匹配,函数、数组不会执行部分匹配。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @static\n * @alias module:Language.isMatch\n * @since 1.4.0\n * @requires module:Language.isEqual\n * @param {Object} object 要检查的对象。\n * @param {Object} source 属性值相匹配的对象。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @returns {boolean} 如果 `object` 匹配,返回 `true`,否则返回 `false`。\n * @example\n *\n * const object = { a: 1, b: -0 }\n *\n * isMatch(object, { a: 1 }); // true\n * isMatch(object, { b: 0 }); // true\n *\n * // 严格比较\n * isMatch(object, { b: 0 }, undefined, true); // false\n *\n * // 自定义比较\n * function customizer(objValue, srcValue){\n * if(typeof objValue === 'string' && typeof srcValue === 'string'){\n * return true;\n * }\n * }\n * isMatch({ foo: 'a' }, { foo: 'b' }, customizer); // true\n * isMatch({ foo: ['a'] }, { foo: ['b'] }, customizer); // true\n * isMatch({ foo: 'a' }, { foo: 'b' }, customizer); // true\n *\n */\nfunction isMatch(object: object, source: object, customizer?: Customizer, strictCheck = false) {\n if (typeof customizer === 'function') {\n const compared = customizer(object, source);\n if (compared !== nativeUndefined) {\n return !!compared;\n }\n }\n\n return baseIsMatch(object, source, customizer, strictCheck, nativeUndefined, nativeUndefined);\n}\n\nexport default isMatch;\n","import root from './internals/root';\nimport isNumber from './isNumber';\n\n/**\n * 检查值是否为 `NaN`。\n *\n * 和 `Number.isNaN` 区别是 `new Number(NaN)` 也被认为是 `NaN`。\n *\n * @static\n * @alias module:Language.isNaN\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `NaN`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNaN(NaN); // true\n *\n * isNaN(new Number(NaN)); // true\n *\n * isNaN(1); // false\n *\n */\nfunction isNaN(value: any): boolean {\n return isNumber(value) && root.isNaN(value);\n}\n\nexport default isNaN;\n","/**\n * 检查值是否为 `null`。\n *\n * @static\n * @alias module:Language.isNull\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `null`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNull(null); // true\n *\n * isNull(void 0); // false\n *\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\nexport default isNull;\n","import isObject from './isObject';\n\n/**\n * 检测值是否类似 `Promise` 对象。\n *\n * 如果一个对象包含 `then` 方法,它就是类似 `Promise` 对象。\n *\n * @static\n * @alias module:Language.isPromiseLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值类似 `Promise` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isPromiseLike(Promise.resolve()); // true\n *\n * isPromiseLike({ then: () => { } }); // true\n *\n * isPromiseLike([]); // false\n *\n */\nfunction isPromiseLike(value: any): value is Promise<any> | PromiseLike<any> {\n return isObject(value) && typeof (value as Promise<any>).then === 'function';\n}\n\nexport default isPromiseLike;\n","import getTag from './internals/getTag';\nimport { regExpTag } from './internals/native';\nimport { nodeIsRegExp } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `RegExp` 对象。\n *\n * @static\n * @alias module:Language.isRegExp\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `RegExp` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isRegExp(/abc/); // true\n *\n * isRegExp('/abc/'); // false\n *\n */\nfunction isRegExp(value: any): value is RegExp {\n return nodeIsRegExp ? nodeIsRegExp(value) : getTag(value) === regExpTag;\n}\n\nexport default isRegExp;\n","import { MAX_SAFE_INTEGER, mathAbs, numberIsSafeInteger } from './internals/native';\nimport isInteger from './isInteger';\n\n/**\n * 检查值是否为安全整数。\n *\n * 同 `Number.isSafeInteger`。\n *\n * 如果一个整数是一个 `IEEE-754` 双精度数字,它不是四舍五入的不安全整数的结果,那么它就是安全的。安全整数范围为 `-(2^53 - 1)` 到 `2^53 - 1` 之间的整数,包含 `-(2^53 - 1)` 和 `2^53 - 1`。\n *\n * @static\n * @alias module:Language.isSafeInteger\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为安全整数,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSafeInteger(1); // true\n *\n * isSafeInteger(Infinity); // false\n *\n * isSafeInteger(Number.MIN_VALUE); // false\n *\n * isSafeInteger('1'); // false\n *\n * isSafeInteger(null); // false\n *\n */\nfunction isSafeInteger(value: any): value is number {\n return numberIsSafeInteger ? numberIsSafeInteger(value) : isInteger(value) && mathAbs(value) <= MAX_SAFE_INTEGER;\n}\n\nexport default isSafeInteger;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { setTag } from './internals/native';\nimport { nodeIsSet } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Set` 对象。\n *\n * @static\n * @alias module:Language.isSet\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Set` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSet(new Set); // true\n *\n * isSet(new WeakSet); // false\n *\n */\nfunction isSet(value: any): value is Set<any> {\n return nodeIsSet ? nodeIsSet(value) : getTagWithBugfix(value) === setTag;\n}\n\nexport default isSet;\n","import getTag from './internals/getTag';\nimport { stringTag } from './internals/native';\n\n/**\n * 检查值是否为字符串类型或对象。\n *\n * @static\n * @alias module:Language.isString\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为字符串类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isString('abc'); // true\n *\n * isString(new String('abc')); // true\n *\n * isString(1); // false\n *\n */\nfunction isString(value: any): value is string {\n return typeof value === 'string' || getTag(value) === stringTag;\n}\n\nexport default isString;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { weakMapTag } from './internals/native';\n\n/**\n * 检查值是否为 `WeakMap` 对象。\n *\n * @static\n * @alias module:Language.isWeakMap\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `WeakMap` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWeakMap(new WeakMap); // true\n *\n * isWeakMap(new Map); // false\n *\n */\nfunction isWeakMap(value: any): value is WeakMap<object, any> {\n return getTagWithBugfix(value) === weakMapTag;\n}\n\nexport default isWeakMap;\n","import getTag from './internals/getTag';\nimport { weakSetTag } from './internals/native';\n\n/**\n * 检查值是否为 `WeakSet` 对象。\n *\n * @static\n * @alias module:Language.isWeakSet\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `WeakSet` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWeakSet(new WeakSet); // true\n *\n * isWeakSet(new Set); // false\n *\n */\nfunction isWeakSet(value: any): value is WeakSet<object> {\n return getTag(value) === weakSetTag;\n}\n\nexport default isWeakSet;\n","import getTag from './internals/getTag';\nimport { windowTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为 `Window` 对象。\n *\n * @static\n * @alias module:Language.isWindow\n * @since 1.10.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Window` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWindow({}); // false\n *\n * // 浏览器环境\n * isWindow(globalThis); // true\n * isWindow(window); // true\n * isWindow(self); // true\n * isWindow(frames); // true\n *\n */\nfunction isWindow(value: any): value is Window {\n return isObjectLike(value) && getTag(value) === windowTag;\n}\n\nexport default isWindow;\n","import isFinite from '../isFinite';\nimport toInteger from '../toInteger';\nimport toNumber from '../toNumber';\nimport toString from '../toString';\nimport { mathMin } from './native';\n\n/**\n * 数字调整。\n *\n * @private\n * @param {'floor' | 'ceil' | 'round'} type 调整的类型。\n * @param {number} value 要调整的数字。\n * @param {number} [precision=0] 指数(调整基数的10个对数)。\n * @returns {number} 调整后的数字。\n */\nfunction decimalAdjust(type: 'floor' | 'ceil' | 'round', value: number, precision = 0) {\n const func = Math[type];\n\n value = toNumber(value);\n precision = mathMin(toInteger(precision), 292);\n\n if (precision === 0 || !isFinite(value)) {\n return func(value);\n }\n\n // 移动\n let pair = toString(value).split('e');\n value = func(+(pair[0] + 'e' + (pair[1] ? +pair[1] + precision : precision)));\n\n // 向前移\n pair = toString(value).split('e');\n return +(pair[0] + 'e' + (pair[1] ? +pair[1] - precision : -precision));\n}\n\nexport default decimalAdjust;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度向上舍入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @static\n * @alias module:Math.ceil\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 小数舍入}\n * @param {number} number 要向上舍入的值。\n * @param {number} [precision=0] 向上舍入的精度。默认 `0`。\n * @returns {number} 向上舍入的值。\n * @example\n *\n * ceil(4.16); // 5\n *\n * ceil(4.16, 1); // 4.2\n *\n * ceil(4160, -2); // 4200\n *\n */\nfunction ceil(number: number, precision?: number) {\n return decimalAdjust('ceil', number, precision);\n}\n\nexport default ceil;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度向下舍入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @static\n * @alias module:Math.floor\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 小数舍入}\n * @param {number} number 要向下舍入的值。\n * @param {number} [precision=0] 向下舍入的精度。默认 `0`。\n * @returns {number} 向下舍入的值。\n * @example\n *\n * floor(4.16); // 4\n *\n * floor(4.16, 1); // 4.1\n *\n * floor(4160, -2); // 4100\n */\nfunction floor(number: number, precision?: number) {\n return decimalAdjust('floor', number, precision);\n}\n\nexport default floor;\n","import toNumber from '../toNumber';\n\ntype Comparator = (value: any, other: any) => boolean;\n\nexport function createOperation(comparator: Comparator) {\n return function (value: any, other: any) {\n if (!(typeof value === 'string' && typeof other === 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return comparator(value, other);\n };\n}\n\nexport const baseGt: Comparator = (value, other) => {\n return value > other;\n};\n\nexport const baseGte: Comparator = (value, other) => {\n return value >= other;\n};\n\nexport const baseLt: Comparator = (value, other) => {\n return value < other;\n};\n\nexport const baseLte: Comparator = (value, other) => {\n return value <= other;\n};\n","import isArray from '../isArray';\nimport isSymbol from '../isSymbol';\nimport createIteratee from './createIteratee';\nimport { nativeUndefined } from './native';\nimport { IterateeParam, WithNullable } from './types';\n\nfunction createExtremum<T>(array: WithNullable<T[]>, comparator: (value: any, other: any) => boolean, iteratee?: IterateeParam<T>) {\n if (!isArray(array)) {\n return;\n }\n\n let result: T | undefined, computed: number | undefined;\n const internalIteratee = createIteratee<T>(iteratee);\n\n array.forEach((value, index) => {\n const current = internalIteratee(value, index, array);\n if (current != null && (computed === nativeUndefined ? current === current && !isSymbol(current) : comparator(current, computed))) {\n computed = current;\n result = value;\n }\n });\n\n return result;\n}\n\nexport default createExtremum;\n","import { baseGt } from './internals/comparator';\nimport createExtremum from './internals/createExtremum';\nimport { ExtremumFunction, IterateeParam, WithNullable } from './internals/types';\n\n/**\n * 调用 `array` 中的每一个元素,来生成其值排序的标准,返回最大的值。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index` `array`。\n *\n * @function\n * @alias module:Math.max\n * @since 1.0.0\n * @param {Array} array 要迭代的数组。\n * @param {Function | string | number | Symbol} [iteratee] 调用每个元素的迭代函数。\n * @returns {*} 最大的值。\n * @example\n *\n * const array = [1, 2, 3];\n *\n * max(array); // 3\n *\n * const objects = [{n: 1}, {n: 2}];\n *\n * max(objects, item => item.n); // {n: 2}\n *\n * // 迭代函数可以直接写入属性。\n * max(objects, 'n'); // {n: 2};\n *\n */\nconst max: ExtremumFunction = function <T>(array: WithNullable<T[]>, iteratee?: IterateeParam<T>) {\n return createExtremum(array, baseGt, iteratee);\n};\n\nexport default max;\n","import { baseLt } from './internals/comparator';\nimport createExtremum from './internals/createExtremum';\nimport { ExtremumFunction, IterateeParam, WithNullable } from './internals/types';\n\n/**\n * 调用 `array` 中的每一个元素,来生成其值排序的标准,返回最小的值。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index` `array`。\n *\n * @static\n * @alias module:Math.min\n * @since 1.0.0\n * @param {Array} array 要迭代的数组。\n * @param {Function | string | number | Symbol} [iteratee] 调用每个元素的迭代函数。\n * @returns {*} 最小的值。\n * @example\n *\n * const array = [1, 2, 3];\n *\n * min(array); // 1\n *\n * const objects = [{n: 1}, {n: 2}];\n *\n * min(objects, item => item.n); // {n: 1}\n *\n * // 迭代函数可以直接写入属性。\n * min(objects, 'n'); // {n: 1};\n */\nconst min: ExtremumFunction = function <T>(array: WithNullable<T[]>, iteratee?: IterateeParam<T>) {\n return createExtremum(array, baseLt, iteratee);\n};\n\nexport default min;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度四舍五入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @static\n * @alias module:Math.round\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 小数舍入}\n * @param {number} number 要四舍五入的值。\n * @param {number} [precision=0] 四舍五入的精度。默认 `0`。\n * @returns {number} 四舍五入的值。\n * @example\n *\n * round(4.16); // 4\n *\n * round(4.16, 1); // 4.2\n *\n * round(4160, -2); // 4200\n */\nfunction round(number: number, precision?: number) {\n return decimalAdjust('round', number, precision);\n}\n\nexport default round;\n","import defaultTo from './defaultTo';\nimport { nativeUndefined } from './internals/native';\nimport toNumber from './toNumber';\n\ninterface Clamp {\n (number: number, upper: number): number;\n (number: number, lower: number, upper: number): number;\n}\n\n/**\n * 数字限制在 `lower` 和 `upper` 之间的值。\n *\n * @function\n * @alias module:Number.clamp\n * @since 1.0.0\n * @param {number} number 被限制的值。\n * @param {number} [lower] 下限。默认 `0`。\n * @param {number} upper 上限。默认 `0`。\n * @returns {number} 限制后的值。\n * @example\n *\n * clamp(-10, -5, 5); // -5\n *\n * clamp(-10, 0, 5); // 0\n *\n * clamp(10, -5, 5); // 5\n *\n * // 仅限制上限\n * clamp(10, 5); // 5\n *\n * clamp(-10, 5); // -10\n *\n */\nconst clamp: Clamp = function (number: number, lower?: number, upper?: number) {\n if (upper === nativeUndefined) {\n upper = lower;\n lower = nativeUndefined;\n }\n\n if (upper !== nativeUndefined) {\n upper = defaultTo(toNumber(upper), 0);\n }\n\n if (lower !== nativeUndefined) {\n lower = defaultTo(toNumber(lower), 0);\n }\n\n number = toNumber(number);\n\n if (number === number) {\n if (upper !== nativeUndefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== nativeUndefined) {\n number = number >= lower ? number : lower;\n }\n }\n\n return number;\n};\n\nexport default clamp;\n","import { mathMax, mathMin } from './internals/native';\nimport toNumber from './toNumber';\n\n/**\n * 检查数字是否在 `start` 与 `end` 之间,但不包括 `end`。\n *\n * 如果 `start` 大于 `end` 会自动交换范围参数。\n *\n * @static\n * @alias module:Number.inRange\n * @since 1.0.0\n * @param {number} number 要检查的值。\n * @param {number} start 开始范围。\n * @param {number} [end=0] 结束范围。默认 `0`。\n * @returns {number} 如果数字在范围内,返回 `true`,否则返回 `false`。\n * @example\n *\n * inRange(3, 2, 4); // true\n *\n * inRange(1, 0, 2); // true\n *\n * inRange(1.2, 0.5, 1.5); // true\n *\n * inRange(2.2, 0.5, 1.5); // false\n *\n * inRange(-2, -2, 4); // true\n *\n * inRange(4, -2, 4); // false\n *\n * // 某个范围为 0 可省略最后一个参数\n * inRange(1, 2); // true\n *\n * inRange(1, -2); // false\n *\n */\nfunction inRange(number: number, start: number, end = 0) {\n number = toNumber(number);\n start = toNumber(start);\n end = toNumber(end);\n return number >= mathMin(start, end) && number < mathMax(start, end);\n}\n\nexport default inRange;\n","import { mathMax, mathMin, mathRandom } from './internals/native';\nimport toFinite from './toFinite';\n\n/**\n * 产生一个包含 `lower` 与 `upper` 之间的随机浮点数。\n *\n * 如果 `lower` 大于 `upper` 会自动交换参数。\n *\n * @static\n * @alias module:Number.random\n * @since 1.0.0\n * @param {number} [lower=0] 下限。默认 `0`。\n * @param {number} [upper=1] 上限。默认 `1`。\n * @returns {number} 随机浮点数。\n * @example\n *\n * // 0 到 1 之间的浮点数\n * random(); // 0.40340470210512236\n *\n * // 2 到 4 之间的浮点数\n * random(2, 4); // 3.0039717466399787\n *\n * // 2 到 4 之间的浮点数\n * random(4, 2); // 2.388398370184757\n *\n * // 1.2 到 2.4 之间的浮点数\n * random(1.2, 2.4); // 1.6319041677720918\n *\n */\nfunction random(lower = 0, upper = 1) {\n lower = toFinite(lower);\n upper = toFinite(upper);\n const min = mathMin(lower, upper);\n const max = mathMax(lower, upper);\n return min + mathRandom() * (max - min);\n}\n\nexport default random;\n","/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {string[]} 对象可枚举的属性\n */\nfunction getKeysIn(object: object) {\n const result: string[] = [];\n for (const key in object) {\n result.push(key);\n }\n return result;\n}\n\nexport default getKeysIn;\n","import getSymbols from './getSymbols';\nimport { objectGetPrototypeOf } from './native';\n\n/**\n * 创建一个数组,包含自身以及继承的可枚举 `symbol` 属性。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {Symbol[]} 可枚举的 `symbol` 属性数组\n */\nfunction getSymbolsIn(object: object) {\n const result: symbol[] = [];\n\n let o = Object(object);\n\n while (o) {\n getSymbols(o).forEach((item) => {\n if (result.indexOf(item) === -1) {\n result.push(item);\n }\n });\n o = objectGetPrototypeOf(o);\n }\n\n return result;\n}\n\nexport default getSymbolsIn;\n","import getKeysIn from './internals/getKeysIn';\nimport getSymbolsIn from './internals/getSymbolsIn';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(包含 `Symbol` 属性)。\n *\n * 同 `key...in` + 递归原型 `Object.getOwnPropertySymbols`。\n *\n * 注意:`Symbol` 键属性在字符串属性后面。\n *\n * @static\n * @alias module:Object.allKeysIn\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {Array<string|symbol>} 对象自身及继承的可枚举属性(包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * allKeysIn(new Foo); // ['a', 'c', Symbol(b), Symbol(d)]\n *\n */\nfunction allKeysIn(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return (getKeysIn(object) as (string | symbol)[]).concat(getSymbolsIn(object));\n}\n\nexport default allKeysIn;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import forEach from './forEach';\nimport { stubFlase } from './internals/helpers';\nimport { MapKey, MapPredicate, ObjectPredicate, WithNullable } from './internals/types';\nimport isMap from './isMap';\nimport isObject from './isObject';\n\ninterface FindKey {\n <T extends Map<any, any>>(map: WithNullable<T>, predicate?: MapPredicate<T>): MapKey<T> | undefined;\n <T extends object, K extends keyof T = keyof T>(object: WithNullable<T>, predicate?: ObjectPredicate<T>): K | undefined;\n}\n\n/**\n * 查找对象的键。\n *\n * @alias module:Object.findKey\n * @since 1.13.0\n * @param {Object | Map} obj 对象或 Map 对象\n * @param {Function} [predicate] 迭代对象自身的可枚举属性(包含 `Symbol` 属性)调用的函数,返回 `Truthy` 表示要查找该值对应的键。\n * @returns 如果对象存在要查找的值,返回该值的键,否则返回 `undefined`。\n * @example\n * const obj = { foo: 'bar', baz: 42 }\n * findKey(obj, isNumber); // 'baz'\n * findKey(obj, v => typeof v === 'bar'); // 'foo'\n *\n * const map = new Map([['foo', 'bar'], ['baz', 42]]);\n * findKey(map, isNumber); // 'baz'\n * findKey(map, v => typeof v === 'bar'); // 'foo'\n */\nconst findKey: FindKey = (obj: object | Map<any, any>, predicate: MapPredicate<any> | ObjectPredicate<any> = stubFlase) => {\n let key;\n\n if (isMap(obj)) {\n for (const [k, v] of obj) {\n if (predicate(v, k)) {\n key = k;\n break;\n }\n }\n } else if (isObject(obj)) {\n forEach(obj, (v, k) => {\n if (predicate(v, k)) {\n key = k;\n return false;\n }\n });\n }\n\n return key;\n};\n\nexport default findKey;\n","import allKeys from './allKeys';\nimport { stubTrue } from './internals/helpers';\nimport { objectProtoToString } from './internals/native';\nimport { ObjectPredicate, PropertyName, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象由 `object` 自身可枚举属性(包含 `Symbol` 属性)和值反转组成。\n *\n * @static\n * @alias module:Object.invert\n * @since 1.8.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy Truthy}\n * @param {Object} object 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要反转,否则不反转。\n * @returns {Object} 新对象。\n * @example\n *\n * invert({ a: 1, b: 2 }); // { 1: 'a', 2: 'b' }\n *\n * invert({ a: undefined, b: null }); // { undefined: 'a', null: 'b' }\n *\n */\nfunction invert<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubTrue) {\n const _keys = allKeys(object);\n const result: Record<PropertyName, any> = {};\n\n _keys.forEach((key) => {\n const value = object![key as keyof T];\n if (predicate(value, key as keyof T)) {\n const valueProp = value != null && typeof value.toString != 'function' ? objectProtoToString.call(value) : (value as string | symbol);\n result[valueProp] = key;\n } else {\n result[key] = value;\n }\n });\n return result;\n}\n\nexport default invert;\n","import { objectKeys } from './internals/native';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身的可枚举属性(不包含 `Symbol` 属性)。\n *\n * 同 `Object.keys`。\n *\n * @static\n * @alias module:Object.keys\n * @since 1.7.0\n * @param {Object} object 要查询的对象。\n * @returns {string[]} 对象自身的可枚举属性(不包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * keys(new Foo); // ['a']\n *\n */\nfunction keys(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return objectKeys(object);\n}\n\nexport default keys;\n","import getKeysIn from './internals/getKeysIn';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n *\n * 同 `key...in`。\n *\n * @static\n * @alias module:Object.keysIn\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {string[]} 对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * keysIn(new Foo); // ['a', 'c']\n *\n */\nfunction keysIn(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return getKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isObjectLike from './isObjectLike';\nimport isPlainObject from './isPlainObject';\nimport { nativeUndefined } from './internals/native';\nimport allKeys from './allKeys';\n\ntype GetKeysMethod = <T extends object>(object: T) => (symbol | string)[];\ntype Customizer = (objValue: any, srcValue: any, key: string | symbol, object: any, source: any) => any;\n\n// 内部处理合并和循环引用\nfunction baseMerge<TObject, TSource>(object: TObject, source: TSource, getKeys: GetKeysMethod, customizer?: Customizer, stack = new WeakMap()) {\n const obj = Object(object);\n\n if (!isObject(source) || obj === source) {\n return obj;\n }\n const keys = getKeys(source as object);\n const hasCustomizer = typeof customizer === 'function';\n\n keys.forEach((key) => {\n // @ts-ignore\n const srcValue = source[key];\n const srcIsObj = isObject(srcValue);\n\n if (srcIsObj && stack.has(srcValue)) {\n obj[key] = srcValue;\n } else {\n const newValue = hasCustomizer ? customizer(obj[key], srcValue, key, obj, source) : nativeUndefined;\n if (newValue !== nativeUndefined) {\n obj[key] = newValue;\n } else {\n const objValue = obj[key];\n let newObjValue: any;\n\n if (srcIsObj) {\n stack.set(srcValue, true);\n if (isArray(srcValue)) {\n newObjValue = isArray(objValue) ? objValue : [];\n } else if (isPlainObject(srcValue)) {\n newObjValue = isObjectLike(objValue) ? objValue : {};\n }\n }\n\n if (newObjValue) {\n obj[key] = baseMerge(newObjValue, srcValue, getKeys, customizer, stack);\n } else if (srcValue !== nativeUndefined || !(key in obj)) {\n obj[key] = srcValue;\n }\n }\n }\n });\n\n return obj;\n}\n\n/**\n * 递归合并 `source` 来源对象自身的可枚举属性(包含 `Symbol` 属性)到 `object` 目标对象。\n *\n * 如果目标值存在,被解析为 `undefined` 的 `source` 来源对象属性将被跳过。数组和普通对象会递归合并,其他对象和值会被直接分配覆盖。\n *\n * 如果不需要合并数组,第三个参数传入 `merge.NOT_MERGE_ARRAYS` 。\n *\n * 如果需要合并继承的属性,第四个参数传入 {@link https://caijf.github.io/ut2/module-Object.html#.allKeysIn allKeysIn} 方法, `merge(object, source, undefined, allKeysIn)`。\n *\n * @static\n * @alias module:Object.merge\n * @since 1.0.0\n * @param {Object | Array} object 目标对象。\n * @param {Object | Array} source 来源对象。\n * @param {Function} [customizer] 自定义赋值函数,如果函数返回 `undefined` 将使用默认合并。\n * @param {Function} [getKeys=allKeys] 自定义获取对象键方法。默认 `allKeys`。\n * @returns {Object} 目标对象。\n * @example\n *\n * merge({c: 3}, {e: 5}); // { c: 3, e: 5 }\n * merge({ a: 1 }, { a: undefined, b: undefined }); // { a: 1, b: undefined }\n *\n * const object = {\n * a: [{b: 2}, {d: 4}]\n * }\n * const other = {\n * a: [{c: 3},{e: 5}]\n * }\n *\n * merge(object, other); // { a: [{b: 2, c: 3}, {d: 4, e: 5}] }\n *\n * // 数组不合并\n * merge(object, other, merge.NOT_MERGE_ARRAYS); // { a: [{c: 3},{e: 5}] }\n *\n * // 或自定义数组不合并方法\n * merge(object, other, (objValue, srcValue) => isArray(srcValue) ? srcValue : undefined); // { a: [{c: 3},{e: 5}] }\n *\n */\nfunction merge<TObject, TSource>(object: TObject, source: TSource, customizer?: Customizer, getKeys: GetKeysMethod = allKeys): TObject & TSource {\n return baseMerge(object, source, getKeys, customizer);\n}\n\nmerge.NOT_MERGE_ARRAYS = (objValue: any, srcValue: any) => (isArray(srcValue) ? srcValue : undefined);\n\nexport default merge;\n","import isArray from './isArray';\n\n/**\n * 如果值不是数组,则将其转换为数组。\n *\n * @static\n * @alias module:Util.castArray\n * @since 1.0.0\n * @param {*} [value] 要处理的值。\n * @returns {Array} 转换后的数组。\n * @example\n *\n * castArray('a'); // [\"a\"]\n *\n * castArray(1); // [1]\n *\n * castArray({ a: 1, b: 2}); // [{ a: 1, b: 2}]\n *\n * castArray(); // []\n *\n * castArray(undefined); // [undefined]\n *\n * castArray(null); // [null]\n *\n * const arr = [1, 2, 3];\n * castArray(arr); // [1, 2, 3]\n * console.log(arr === castArray(arr)); // true\n */\nfunction castArray<T>(value?: T | T[]): T[] {\n if (!arguments.length) {\n return [];\n }\n return isArray(value) ? value : [value as T];\n}\n\nexport default castArray;\n","import allKeysIn from './allKeysIn';\nimport castArray from './castArray';\nimport { Many, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象由忽略属性之外的 `object` 自身和继承的可枚举属性组成。与 [`pick`](#.pick) 相反。\n *\n * @static\n * @alias module:Object.omit\n * @since 1.0.0\n * @param {Object} object 来源对象。\n * @param {string | string[]} [fields] 要被忽略的属性。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * // 浅拷贝对象\n * omit(obj); // { name: \"jeff\", age: 18 }\n *\n * // 排除单个属性\n * omit(obj, 'name'); // { age: 18 }\n *\n * // 排除多个属性\n * omit(obj, ['name', 'age']); // {}\n *\n */\nfunction omit<T extends object, K extends keyof T = never>(object: WithNullable<T>, fields: Many<K> = []) {\n const keys = allKeysIn(object) as K[];\n const fieldArr = castArray(fields);\n const result = {} as T;\n\n keys.forEach((key) => {\n if (fieldArr.indexOf(key) === -1) {\n result[key] = object![key];\n }\n });\n\n return result as Omit<T, K>;\n}\n\nexport default omit;\n","import allKeysIn from './allKeysIn';\nimport { stubFlase } from './internals/helpers';\nimport { ObjectPredicate, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象的属性从 `object` 中经 `predicate` (断言函数)判断为真值的属性。\n *\n * `predicate` 调用时会传入两个参数 `value` `key`。\n *\n * @static\n * @alias module:Object.pickBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy Truthy}\n * @param {Object} obj 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要提取该属性,否则不提取。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * pickBy(obj); // {}\n *\n * pickBy(obj, (value) => typeof value === 'number'); // { age: 18 }\n *\n * pickBy(obj, (value) => value); // { name: \"jeff\", age: 18 }\n *\n */\nfunction pickBy<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubFlase) {\n const result: Partial<T> = {};\n\n const keys = allKeysIn(object) as (keyof T)[];\n\n keys.forEach((key) => {\n if (predicate(object![key], key)) {\n result[key] = object![key];\n }\n });\n\n return result;\n}\n\nexport default pickBy;\n","import { stubFlase } from './internals/helpers';\nimport { ObjectPredicate, WithNullable } from './internals/types';\nimport negate from './negate';\nimport pickBy from './pickBy';\n\n/**\n * 创建一个对象,该对象忽略 `predicate` (断言函数)判断不是真值的属性后,`object` 自身和继承的可枚举属性组成。与 [`pickBy`](#.pickBy) 相反。\n *\n * `predicate` 调用时会传入两个参数 `value` `key`。\n *\n * @static\n * @alias module:Object.omitBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy Truthy}\n * @param {Object} object 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要忽略该属性,否则不忽略。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * omitBy(obj); // { name: \"jeff\", age: 18 }\n *\n * omitBy(obj, (value) => typeof value === 'number'); // { name: \"jeff\" }\n *\n * omitBy(obj, (value) => value); // {}\n *\n */\nfunction omitBy<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubFlase) {\n return pickBy(object, negate(predicate));\n}\n\nexport default omitBy;\n","import castArray from './castArray';\nimport { Many, WithNullable } from './internals/types';\nimport isObject from './isObject';\n\n/**\n * 创建一个从 `object` 选中的属性的对象。\n *\n * 允许选取对象的所有属性(包含不可枚举属性)。\n *\n * @static\n * @alias module:Object.pick\n * @since 1.0.0\n * @param {Object} object 来源对象。\n * @param {string | string[]} [fields] 选中的属性。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * pick(obj); // {}\n *\n * // 选取单个属性\n * pick(obj, 'name'); // { name: \"jeff\" }\n *\n * // 选取多个属性\n * pick(obj, ['name', 'age']); // { name: \"jeff\", age: 18 }\n */\nfunction pick<T extends object, K extends keyof T = never>(object: WithNullable<T>, fields: Many<K> = []) {\n const result = {} as T;\n\n if (!isObject(object)) {\n return result;\n }\n\n const fieldArr = castArray(fields);\n\n fieldArr.forEach((field) => {\n if (field in object) {\n result[field] = object[field];\n }\n });\n\n return result as Pick<T, K>;\n}\n\nexport default pick;\n","const reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * 拆分字符串中的词为数组。\n *\n * @static\n * @alias module:String.words\n * @since 1.0.0\n * @see {@link https://zh.wikipedia.org/wiki/ASCII ASCII}\n * @param {string} string 要拆分的字符串。\n * @param {RegExp | string} [pattern=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g] 匹配模式。默认 `/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g`。\n * @returns {string[]} 拆分后的数组。\n * @example\n *\n * words('fred, barney, & pebbles'); // ['fred', 'barney', 'pebbles']\n *\n * words('fred, barney, & pebbles', /[^, ]+/g); // ['fred', 'barney', '&', 'pebbles']\n *\n */\nfunction words(string: string, pattern: RegExp | string = reAsciiWord): string[] {\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import toString from '../toString';\nimport words from '../words';\n\n/**\n * 拆分字符串词组。\n *\n * @private\n * @param {string} string 要拆分的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string[]} 拆分后的数组。\n */\nfunction splitCaseWords(string: string, pattern?: RegExp | string) {\n return words(toString(string).replace(/['\\u2019]/g, ''), pattern);\n}\n\nexport default splitCaseWords;\n","import toString from '../toString';\n\n/**\n * 生成一个首个字符串处理的函数。\n *\n * @private\n * @param {string} methodName 首个字符串的大小写方法。\n * @returns {string} 新的大小写函数。\n */\nfunction createCaseFirst(methodName: 'toLowerCase' | 'toUpperCase') {\n return (string: string) => {\n const str = toString(string);\n if (!str) {\n return '';\n }\n return str[0][methodName]() + str.slice(1);\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './internals/createCaseFirst';\n\n/**\n * 转换字符串第一个字符为大写。\n *\n * @function\n * @alias module:String.upperFirst\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * upperFirst('bar'); // 'Bar'\n *\n * upperFirst('BAR'); // 'BAR'\n *\n * lowerFirst('--foo-bar--'); // '--foo-bar--' 不进行分词处理\n *\n * lowerFirst('foo-bar'); // 'Foo-bar'\n *\n */\nconst upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import splitCaseWords from './internals/splitCaseWords';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串为驼峰写法。\n *\n * @static\n * @alias module:String.camelCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Camel_case Camel_case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 驼峰写法的字符串。\n * @example\n *\n * camelCase('foo bar'); // 'fooBar'\n *\n * camelCase('foo-bar'); // 'fooBar'\n *\n * camelCase('Foo Bar'); // 'fooBar'\n *\n * camelCase('FOO BAR'); // 'fooBar'\n *\n * camelCase('--FOO-BAR--'); // 'fooBar'\n *\n * camelCase('__FOO_BAR__'); // 'fooBar'\n *\n */\nfunction camelCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => {\n cur = cur.toLowerCase();\n return prev + (index ? upperFirst(cur) : cur);\n }, '');\n}\n\nexport default camelCase;\n","import toString from './toString';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串首字母大写,剩下为小写。\n *\n * @static\n * @alias module:String.capitalize\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 首字母大写的字符串。\n * @example\n *\n * capitalize('bar'); // 'Bar'\n *\n * capitalize('BAR'); // 'Bar'\n *\n */\nfunction capitalize(string: string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import toString from './toString';\n\nconst htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\n\nconst reUnescapedHtml = /[&<>\"']/g;\nconst reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * 转义字符串中的 `&` `<` `>` `\"` `'` 字符为 HTML 实体字符。\n *\n * 注意:不会转义其他字符。如果需要,可以使用第三方库,如 [he](https://github.com/mathiasbynens/he) 。\n *\n * 虽然 \">\" 是对称转义的,字符如 \">\" 和 \"/\" 没有特殊的意义,所以不需要在 HTML 转义。 除非它们是标签的一部分,或者是不带引号的属性值。\n *\n * 当解析 HTML 时,总应该在[属性值上使用引号](http://wonko.com/post/html-escaping)以减少 XSS 的可能性。\n *\n * @static\n * @alias module:String.escape\n * @since 1.0.0\n * @see {@link https://mathiasbynens.be/notes/ambiguous-ampersands ambiguous-ampersands}\n * @param {string} string 要转义的字符串。\n * @returns {string} 转义后的字符串。\n * @example\n *\n * escape('<script></script>'); // '&lt;script&gt;&lt;/script&gt;'\n *\n * escape('&'); // '&amp;'\n *\n */\nfunction escape(string: string) {\n string = toString(string);\n return string && reHasUnescapedHtml.test(string)\n ? string.replace(reUnescapedHtml, (chr) => {\n // @ts-ignore\n return htmlEscapes[chr];\n })\n : string || '';\n}\n\nexport default escape;\n","const reRegExpChar = /[\\\\^$.*+?\\-()[\\]{}|]/g;\nconst reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * 转义 `RegExp` 字符串中特殊的字符 `\\\\` `^` `$` `.` `*` `+` `?` `-` `(` `)` `[` `]` `{` `}` `|`。\n *\n * @static\n * @alias module:String.escapeRegExp\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/multipage/text-processing.html#sec-patterns syntax characters}\n * @param {string} string 要转义的字符串。\n * @returns {string} 转义后的字符串。\n * @example\n *\n * escapeRegExp('\\\\'); // '\\\\\\\\'\n *\n * escapeRegExp('-+='); // '\\\\-\\\\+='\n *\n * escapeRegExp('[ut2](https://caijf.github.io/ut2/)'); // '\\\\[ut2\\\\]\\\\(https://caijf\\\\.github\\\\.io/ut2/\\\\)'\n *\n */\nfunction escapeRegExp(string: string) {\n return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\\\$&') : string || '';\n}\n\nexport default escapeRegExp;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为连接符小写。\n *\n * @static\n * @alias module:String.kebabCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Letter_case#Special_case_styles kebab case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * kebabCase('foo bar'); // 'foo-bar'\n *\n * kebabCase('foo-bar'); // 'foo-bar'\n *\n * kebabCase('Foo Bar'); // 'foo-bar'\n *\n * kebabCase('FOO BAR'); // 'foo-bar'\n *\n * kebabCase('--FOO-BAR--'); // 'foo-bar'\n *\n * kebabCase('__FOO_BAR__'); // 'foo-bar'\n *\n */\nfunction kebabCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? '-' : '') + cur.toLowerCase(), '');\n}\n\nexport default kebabCase;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为空格分隔的小写单词。\n *\n * @static\n * @alias module:String.lowerCase\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 小写字符串。\n * @example\n *\n * lowerCase('foo bar'); // 'foo bar'\n *\n * lowerCase('foo-bar'); // 'foo bar'\n *\n * lowerCase('Foo Bar'); // 'foo bar'\n *\n * lowerCase('FOO BAR'); // 'foo bar'\n *\n * lowerCase('--FOO-BAR--'); // 'foo bar'\n *\n * lowerCase('__FOO_BAR__'); // 'foo bar'\n *\n */\nfunction lowerCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? ' ' : '') + cur.toLowerCase(), '');\n}\n\nexport default lowerCase;\n","import createCaseFirst from './internals/createCaseFirst';\n\n/**\n * 转换字符串第一个字符为小写。\n *\n * @function\n * @alias module:String.lowerFirst\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * lowerFirst('Bar'); // 'bar'\n *\n * lowerFirst('BAR'); // 'bAR'\n *\n * lowerFirst('--Foo-bar--'); // '--Foo-bar--' 不进行分词处理\n *\n * lowerFirst('Foo-bar'); // 'foo-bar'\n *\n */\nconst lowerFirst = createCaseFirst('toLowerCase');\n\nexport default lowerFirst;\n","import splitCaseWords from './internals/splitCaseWords';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串为帕斯卡写法。又名为大驼峰写法。\n *\n * @static\n * @alias module:String.pascalCase\n * @since 1.8.0\n * @see {@link https://en.wikipedia.org/wiki/Camel_case Camel_case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 帕斯卡写法的字符串。\n * @example\n *\n * pascalCase('foo bar'); // 'FooBar'\n *\n * pascalCase('foo-bar'); // 'FooBar'\n *\n * pascalCase('Foo Bar'); // 'FooBar'\n *\n * pascalCase('FOO BAR'); // 'FooBar'\n *\n * pascalCase('--FOO-BAR--'); // 'FooBar'\n *\n * pascalCase('__FOO_BAR__'); // 'FooBar'\n *\n */\nfunction pascalCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur) => {\n cur = cur.toLowerCase();\n return prev + upperFirst(cur);\n }, '');\n}\n\nexport default pascalCase;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为下划线小写。\n *\n * @static\n * @alias module:String.snakeCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Snake_case snake case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * snakeCase('foo bar'); // 'foo_bar'\n *\n * snakeCase('foo-bar'); // 'foo_bar'\n *\n * snakeCase('Foo Bar'); // 'foo_bar'\n *\n * snakeCase('FOO BAR'); // 'foo_bar'\n *\n * snakeCase('--FOO-BAR--'); // 'foo_bar'\n *\n * snakeCase('__FOO_BAR__'); // 'foo_bar'\n *\n */\nfunction snakeCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? '_' : '') + cur.toLowerCase(), '');\n}\n\nexport default snakeCase;\n","import toString from './toString';\n\nconst htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n};\n\nconst reEscapedHtml = /&(?:amp|lt|gt|quot|#(0+)?39);/g;\nconst reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * 转义字符串中的 HTML 实体字符 `&amp;` `&lt;` `&quot;` `&#39;` 为对应的字符。\n *\n * 注意:不会转换其他的 HTML 实体。如果需要,可以使用第三方库,如 [he](https://github.com/mathiasbynens/he) 。\n *\n * @static\n * @alias module:String.unescape\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * unescape('&lt;script&gt;&lt;/script&gt;'); // '<script></script>'\n *\n * unescape('&amp;'); // '&'\n */\nfunction unescape(string: string) {\n string = toString(string);\n return string && reHasEscapedHtml.test(string)\n ? string.replace(reEscapedHtml, (chr) => {\n // @ts-ignore\n return htmlUnescapes[chr] || \"'\";\n })\n : string || '';\n}\n\nexport default unescape;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为空格分隔的大写单词。\n *\n * @static\n * @alias module:String.upperCase\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 大写字符串。\n * @example\n *\n * upperCase('foo bar'); // 'FOO BAR'\n *\n * upperCase('foo-bar'); // 'FOO BAR'\n *\n * upperCase('Foo Bar'); // 'FOO BAR'\n *\n * upperCase('FOO BAR'); // 'FOO BAR'\n *\n * upperCase('--FOO-BAR--'); // 'FOO BAR'\n *\n * upperCase('__FOO_BAR__'); // 'FOO BAR'\n *\n */\nfunction upperCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? ' ' : '') + cur.toUpperCase(), '');\n}\n\nexport default upperCase;\n","import allKeys from './allKeys';\nimport { nativeUndefined } from './internals/native';\nimport { PropertyName, WithNullable } from './internals/types';\nimport isNil from './isNil';\n\ninterface ConformsTo {\n <T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => boolean>): boolean;\n (object: WithNullable<object>, source: Record<PropertyName, (value: any) => boolean>): boolean;\n}\n\n/**\n * 通过调用断言 `source` 的属性与 `object` 的相应属性值,检查 `object` 是否符合 `source`。\n *\n * @function\n * @alias module:Util.conformsTo\n * @since 1.0.0\n * @param {Object} object 要检查的对象。\n * @param {Object} source 要断言属性是否符合的对象。\n * @returns {boolean} 如果 `object` 符合,返回 `true`,否则返回 `false`。\n * @example\n *\n * const object = { a: 1, b: 2 }\n *\n * conformsTo(object, { b: value => value > 1 }); // true\n *\n * conformsTo(object, { b: value => value > 2 }); // false\n *\n */\nconst conformsTo: ConformsTo = function <T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => boolean>) {\n const props = allKeys(source) as unknown as K[];\n const length = props.length;\n\n if (isNil(object)) {\n return !length;\n }\n\n if (length === 0) {\n return true;\n }\n\n for (let i = 0; i < length; i++) {\n const key = props[i];\n const predicate = source[key];\n const value = object[key];\n\n if ((value === nativeUndefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default conformsTo;\n","import conformsTo from './conformsTo';\nimport { PropertyName, WithNullable } from './internals/types';\n\ninterface ConformsFunction {\n <T extends object, K extends keyof T>(source: Record<PropertyName, (value: T[K]) => boolean>): (object: WithNullable<T>) => boolean;\n (source: object): (object: any) => boolean;\n}\n\n/**\n * 创建一个函数,调用 `source` 的属性名对应的断言函数与传入对象相对应属性名的值进行断言处理。如果都符合返回 `true`,否则返回 `false`。\n *\n * @function\n * @alias module:Util.conforms\n * @since 1.0.0\n * @param {Object} source 要断言属性是否符合的对象。\n * @returns {Function} 新的函数。\n * @example\n *\n * const objs = [\n * { a: 1, b: 1 },\n * { a: 2, b: 2 }\n * ]\n *\n * objs.filter(conforms({ b: value => value > 1 })); // [{ a: 2: b: 2 }]\n */\nconst conforms: ConformsFunction = function <T extends object, K extends keyof T, S extends object = Record<PropertyName, (value: T[K]) => boolean>>(source: S) {\n return function (object: T) {\n return conformsTo(object, source);\n };\n};\n\nexport default conforms;\n","/**\n * 创建一个返回 `value` 的函数。\n *\n * @static\n * @alias module:Util.constant\n * @since 1.0.0\n * @param {*} value 新函数返回的值。\n * @returns {Function} 返回新的常量函数。\n * @example\n *\n * const obj = { a: 1 }\n *\n * const returnObj = constant(obj);\n *\n * console.log(returnObj() === obj); // true\n */\nfunction constant<T>(value: T) {\n return function () {\n return value;\n };\n}\n\nexport default constant;\n","import { baseGt, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否大于 `other`。\n *\n * @function\n * @alias module:Util.gt\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 大于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * gt(1, 3); // false\n *\n * gt(3, 3); // false\n *\n * gt(3, 1); // true\n *\n */\nconst gt = createOperation(baseGt);\n\nexport default gt;\n","import { baseGte, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否大于或等于 `other`。\n *\n * @function\n * @alias module:Util.gte\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 大于或等于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * gte(1, 3); // false\n *\n * gte(3, 3); // true\n *\n * gte(3, 1); // true\n *\n */\nconst gte = createOperation(baseGte);\n\nexport default gte;\n","import { baseLt, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否小于 `other`。\n *\n * @function\n * @alias module:Util.lt\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 小于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * lt(1, 3); // true\n *\n * lt(3, 3); // false\n *\n * lt(3, 1); // false\n *\n */\nconst lt = createOperation(baseLt);\n\nexport default lt;\n","import { baseLte, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否小于或等于 `other`。\n *\n * @function\n * @alias module:Util.lte\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 小于或等于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * lte(1, 3); // true\n *\n * lte(3, 3); // true\n *\n * lte(3, 1); // false\n *\n */\nconst lte = createOperation(baseLte);\n\nexport default lte;\n","/**\n * 空函数,返回 `undefined`。\n *\n * @static\n * @alias module:Util.noop\n * @since 1.0.0\n * @example\n *\n * noop(); // undefined\n *\n */\nfunction noop() {}\n\nexport default noop;\n","import nth from './nth';\n\n/**\n * 创建一个函数,该函数返回第 `n` 个参数。如果 `n` 为负数,则返回从结尾开始的第 `n` 个参数。\n *\n * @static\n * @alias module:Util.nthArg\n * @since 1.0.0\n * @param {number} [n=0] 要返回参数的索引值。默认 `0`。\n * @returns 新函数。\n * @example\n *\n * const func1 = nthArg(1);\n *\n * func1('a', 'b', 'c', 'd'); // 'b'\n *\n * const func2 = nthArg(-2);\n *\n * func2('a', 'b', 'c', 'd'); // 'c'\n *\n */\nfunction nthArg(n = 0) {\n return function (...args: any[]) {\n return nth(args, n);\n };\n}\n\nexport default nthArg;\n","import { mathCeil, mathMax } from './internals/native';\nimport isNil from './isNil';\nimport toFinite from './toFinite';\n\ninterface Range {\n (start: number, end: number, step: number): number[];\n (start: number, end: number): number[];\n (end: number): number[];\n}\n\n/**\n * 创建一个升序或降序的数字数组。\n *\n * 如果省略 `start` 默认为 `0`。\n *\n * @function\n * @alias module:Util.range\n * @since 1.6.0\n * @param {number} [start=0] 开始值。默认 `0`。\n * @param {number} end 结束值。\n * @param {number} [step] 要增加或减少的值。如果值为 `0`,将视为无效参数。如果 `start` 在 `end` 之前。默认为 `1`,否则默认为 `-1`。\n * @return {number[]} 从开始值(包含)到结束值(不包含)逐步递增或递减的数字数组。\n * @example\n *\n * range(4); // [0, 1, 2, 3]\n * range(-4); // [0, -1, -2, -3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(0, -4, -1); // [1, 2, 3]\n * range(1, 4, 0); // [1, 2, 3]\n * range(0); // []\n */\nconst range: Range = function (start: number, end?: number, step?: number) {\n start = toFinite(start);\n if (isNil(end)) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n\n step = toFinite(step);\n\n // 值为 0, '', null, undefined 时\n if (!step) {\n step = start < end ? 1 : -1;\n }\n\n let index = -1;\n let length = mathMax(mathCeil((end - start) / step), 0);\n const result = Array(length);\n while (length--) {\n result[++index] = start;\n start += step;\n }\n\n return result;\n};\n\nexport default range;\n","/**\n * 异步方法中等待时间后继续执行。\n *\n * @static\n * @alias module:Util.sleep\n * @since 1.0.0\n * @param {number} [ms=1000] 等待时间,单位毫秒。默认 `1000`。\n * @returns {Promise<void>} 异步对象。\n * @example\n *\n * async ()=>{\n * await sleep();\n * // do something\n * }\n *\n * sleep(300).then(()=>{\n * // do something\n * })\n *\n */\nfunction sleep(ms = 1000) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport default sleep;\n","import identity from './identity';\nimport { MAX_ARRAY_LENGTH, MAX_SAFE_INTEGER, mathFloor, mathMin } from './internals/native';\nimport isInteger from './isInteger';\nimport isFinite from './isFinite';\n\ninterface List {\n <T>(n: number, iteratee: (index: number) => T): T[];\n (n: number): number[];\n}\n\n/**\n * 调用 `iteratee` `n` 次,每次调用返回的结果存入到数组中。\n *\n * `iteratee` 调用传入一个参数 `index`。\n *\n * *注:原方法名为 `times`,自 `v1.12.0` 版本调整为 `list`。*\n *\n * @function\n * @alias module:Util.list\n * @since 1.12.0\n * @param {number} n 调用 `iteratee` 的次数。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 调用结果的数组。\n * @example\n *\n * list(3); // [0, 1, 2]\n *\n * list(3, String); // ['0', '1', '2']\n *\n * list(4, () => 0); // [0, 0, 0, 0]\n *\n */\nconst list: List = function <T>(n: number, iteratee = identity): T[] {\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n\n let index = 0;\n const length = mathMin(isInteger(n) ? n : mathFloor(isFinite(n) ? n : 0), MAX_ARRAY_LENGTH);\n const result = Array(length);\n const func = typeof iteratee === 'function' ? iteratee : identity;\n\n while (index < length) {\n result[index] = func(index);\n index++;\n }\n\n return result;\n};\n\nexport default list;\n","import list from './list';\n\ntype Times = typeof list;\n\n/**\n * @private\n * @deprecated 方法名调整为 `list` 。\n */\nconst times: Times = list;\nexport default times;\n","import { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './internals/native';\nimport toInteger from './toInteger';\n\n/**\n * 转换 `value` 为一个安全整数。\n *\n * @static\n * @alias module:Util.toSafeInteger\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toSafeInteger(3.2); // 3\n *\n * toSafeInteger('3.2'); // 3\n *\n * toSafeInteger(-0); // -0\n *\n * toSafeInteger('-0'); // -0\n *\n * toSafeInteger('0'); // 0\n *\n * toSafeInteger(NaN); // 0\n *\n * toSafeInteger(Infinity); // 9007199254740991\n *\n * toSafeInteger(-Infinity); // -9007199254740991\n *\n */\nfunction toSafeInteger(value: any): number {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toInteger(value);\n if (value > MAX_SAFE_INTEGER) {\n return MAX_SAFE_INTEGER;\n }\n if (value < MIN_SAFE_INTEGER) {\n return MIN_SAFE_INTEGER;\n }\n return value;\n}\n\nexport default toSafeInteger;\n","import { nativeUndefined } from './internals/native';\nimport isPromiseLike from './isPromiseLike';\n\ntype SyncFn<P extends any[], R> = (...args: P) => R;\ntype AsyncFn<P extends any[], R> = (...args: P) => Promise<R>;\n\ninterface Tryit {\n <P extends any[], R>(fn: AsyncFn<P, R>): (...args: P) => Promise<[null, R] | [Error, undefined]>;\n <P extends any[], R>(fn: SyncFn<P, R>): (...args: P) => [null, R] | [Error, undefined];\n}\n\n/**\n * 包装一个函数(支持异步函数),将其转为错误优先函数。\n *\n * @alias module:Util.tryit\n * @since 1.13.0\n * @param {Function} fn 要包装的函数。\n * @returns 如果执行成功返回 `[null, result]`,否则返回 `[Error, undefined]`。\n * @example\n * const getGreet = async (name: string) => {\n * return 'hello ' + name;\n * }\n * const [err, result] = await tryit(getGreet)('jeff');\n * console.log([err, result]);\n * // [null, 'hello jeff']\n *\n *\n * const errorFn = async (name: string) => {\n * throw new Error('error message');\n * return 'hello ' + name;\n * }\n * const [err2, result2] = await tryit(errorFn)('jeff');\n * console.log([err2, result2]);\n * // [Error: error message, undefined]\n */\nconst tryit: Tryit = <P extends any[], R>(fn: AsyncFn<P, R> | SyncFn<P, R>) => {\n return (...args: P): any => {\n try {\n const result = fn(...args);\n if (isPromiseLike(result)) {\n return result\n .then((res) => {\n return [null, res];\n })\n .catch((err) => {\n return [err, nativeUndefined];\n });\n }\n return [null, result];\n } catch (err) {\n return [err as Error, nativeUndefined];\n }\n };\n};\n\nexport default tryit;\n","import { mathRandom } from './internals/native';\n\n// 计数器\nlet idCounter = 0;\n\n// 默认前缀,避免不同工具库uniqueId之间产生的值冲突\nconst defaultPrefix = '_' + mathRandom().toString(36).substring(2, 4);\n\n/**\n * 生成唯一ID。如果提供了 `prefix`,会被添加到ID前缀上。\n *\n * @static\n * @alias module:Util.uniqueId\n * @since 1.0.0\n * @param {string} [prefix] 要添加到ID前缀的值。默认 `\"_\" + 2个随机生成的字符`。\n * @returns {string} 唯一ID。\n * @example\n *\n * uniqueId(); // '_vn1'\n *\n * uniqueId(); // '_vn2'\n *\n * uniqueId('abc_'); // 'abc_3'\n *\n */\nfunction uniqueId(prefix = defaultPrefix) {\n return '' + prefix + ++idCounter;\n}\n\nexport default uniqueId;\n"],"names":["PLACEHOLDER","getTagWithBugfix"],"mappings":";;;;;;IAAO,IAAM,eAAe,GAAG,KAAK,CAAC,CAAC;IAC/B,IAAM,eAAe,GAAG,WAAW,CAAC;IACpC,IAAM,YAAY,GAAG,QAAQ,CAAC;IAE9B,IAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;IACrC,IAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;IACjD,IAAM,yBAAyB,GAAG,WAAW,CAAC,cAAc,CAAC;IAC7D,IAAM,+BAA+B,GAAG,WAAW,CAAC,oBAAoB,CAAC;IAEzE,IAAM,2BAA2B,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACjE,IAAM,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC;IACnD,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAE/B,IAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;IACzC,IAAM,qBAAqB,GAAG,aAAa,CAAC,QAAQ,CAAC;IAE5D,IAAM,aAAa,GAAG,OAAO,MAAM,KAAK,eAAe,CAAC;IACjD,IAAM,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;IAEvE,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;IACnC,IAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;IAEzC,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAEzB,IAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvC,IAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;IACzC,IAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC;IAEjD,IAAM,iBAAiB,GAAG,OAAO,UAAU,KAAK,YAAY,IAAI,UAAU,CAAC;IAE3E,IAAM,aAAa,GAAG,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC;IAC/D,IAAM,WAAW,GAAG,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC;QASnD,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,iBAAiB;AAS/D,QAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,iBAAiB;AAStE,QAAM,gBAAgB,GAAG,WAAW;IAEpC,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,UAAU,GAAG,kBAAkB,CAAC;IACtC,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,OAAO,GAAG,eAAe,CAAC;IAChC,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,IAAM,cAAc,GAAG,sBAAsB,CAAC;IAC9C,IAAM,YAAY,GAAG,oBAAoB,CAAC;IAC1C,IAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,IAAM,YAAY,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,UAAU,GAAG,IAAI,GAAG,GAAG,CAAA,EAAA,CAAC,CAAC;IACxH,IAAM,UAAU,GAAG,kBAAkB,CAAC;IACtC,IAAM,OAAO,GAAG,eAAe,CAAC;IAChC,IAAM,OAAO,GAAG,eAAe,CAAC;IAChC,IAAM,eAAe,GAAG,uBAAuB,CAAC;IAEhD,IAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAM,WAAW,GAAG,mBAAmB,CAAC;IACxC,IAAM,MAAM,GAAG,cAAc,CAAC;IAC9B,IAAM,UAAU,GAAG,kBAAkB,CAAC;IACtC,IAAM,MAAM,GAAG,cAAc,CAAC;IAC9B,IAAM,UAAU,GAAG,kBAAkB,CAAC;IACtC,IAAM,SAAS,GAAG,iBAAiB;;ICnE1C,SAAS,OAAO,CAAC,KAAU,EAAA;IACzB,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B;;ICFA,SAAS,YAAY,CAAC,KAAU,EAAA;QAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;IACrD;;ICAA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5D;;IChBA,SAAS,MAAM,CAAC,KAAU,EAAA;IACxB,IAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC;;ICSA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAClE;;ICnBA,IAAM,UAAU,GAAG,YAAY,CAAC;IAEhC,IAAM,SAAS,GAAG,aAAa,CAAC;IAKhC,IAAM,UAAU,GAAG,oBAAoB,CAAC;IA6BxC,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,QAAA,OAAO,KAAK,CAAC;SACd;IACD,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,OAAO,GAAG,CAAC;SACZ;IACD,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;SACvB;IACD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;SACrC;IACD,IAAA,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,IAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;IAChI;;ICzBA,SAAS,SAAS,CAAC,KAAU,EAAA;IAC3B,IAAA,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAG/B,IAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,CAAC,QAAQ,EAAE;YAC1D,OAAO,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;SACvC;IACD,IAAA,IAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,OAAO,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD;;ICTA,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE;IACV,QAAA,OAAO,CAAC,CAAC;SACV;IACD,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;IACb,QAAA,OAAO,CAAC,CAAC;SACV;IACD,IAAA,IAAI,KAAK,GAAG,gBAAgB,EAAE;IAC5B,QAAA,OAAO,gBAAgB,CAAC;SACzB;IACD,IAAA,OAAO,KAAK,CAAC;IACf;;ICnBA,SAAS,KAAK,CAAI,KAAU,EAAE,IAAQ,EAAA;IAAR,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAQ,GAAA,CAAA,CAAA,EAAA;IACpC,IAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;IAC/B,QAAA,OAAO,EAAE,CAAC;SACX;IAED,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAM,MAAM,GAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACrD,IAAA,IAAI,QAAQ,GAAG,CAAC,EACd,KAAK,GAAG,CAAC,CAAC;IAEZ,IAAA,OAAO,KAAK,GAAG,MAAM,EAAE;IACrB,QAAA,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;SAC1D;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ICtBA,SAAS,OAAO,CAAI,KAAU,EAAA;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,CAAC,CAAC,IAAI,CAAA,EAAA,CAAC,GAAG,EAAE,CAAC;IAC9D;;ICYA,SAAS,EAAE,CAAC,KAAU,EAAE,KAAU,EAAE,WAAmB,EAAA;IAAnB,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IACrD,IAAA,IAAI,KAAK,KAAK,KAAK,EAAE;IACnB,QAAA,OAAO,WAAW,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;SACpE;IACD,IAAA,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC;IAC5C;;ICnBA,SAAS,QAAQ,CAAI,KAAS,EAAA;IAC5B,IAAA,OAAO,KAAK,CAAC;IACf;;ICTA,SAAS,cAAc,CAAI,QAA2B,EAAA;IACpD,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;IAClC,QAAA,OAAO,QAAQ,CAAC;SACjB;IAGD,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACtF,OAAO,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,CAAC,QAAQ,CAAC,CAAf,EAAe,CAAC;SACxC;IACD,IAAA,OAAO,QAAQ,CAAC;IAClB;;ICgBA,SAAS,UAAU,CAAI,KAAU,EAAE,MAAa,EAAE,QAAqC,EAAE,WAAmB,EAAA;IAA1D,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAqC,GAAA,QAAA,CAAA,EAAA;IAAE,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IAC1G,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,OAAO,EAAE,CAAC;SACX;IAED,IAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IACpB,QAAA,OAAO,KAAK,CAAC;SACd;IAED,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;IACrD,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAA;IACvB,QAAA,IAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAGvC,OAAO,MAAM,CAAC,SAAS,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAjD,EAAiD,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F,KAAC,CAAC,CAAC;IACL;;AC/BM,QAAA,SAAS,GAAc,UAAiD,KAAc,EAAA;QAE1F,IAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,OAAO,MAAM,CAAC;SACf;IAED,IAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACjB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAM,CAAC;IAChB;;ICEA,SAAS,YAAY,CAAI,KAAU,EAAE,KAAU,EAAE,QAAqC,EAAE,WAAmB,EAAA;IAA1D,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAqC,GAAA,QAAA,CAAA,EAAA;IAAE,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IACzG,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACtC,QAAA,OAAO,EAAE,CAAC;SACX;IAED,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;QACrD,IAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAA;IACvB,QAAA,IAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvC,QAAA,IAAI,KAAK,CAAC,SAAS,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAjD,EAAiD,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;IACrH,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,YAAA,OAAO,IAAI,CAAC;aACb;IACD,QAAA,OAAO,KAAK,CAAC;IACf,KAAC,CAAC,CAAC;IACL;;IChCA,SAAS,IAAI,CAAI,KAAU,EAAE,IAAY,EAAE,EAAU,EAAA;IACnD,IAAA,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAA,OAAO,KAAK,CAAC;IACf;;ICHA,SAAS,UAAU,CAAC,KAAU,EAAA;IAC5B,IAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;IAC/B,QAAA,OAAO,IAAI,CAAC;SACb;IACD,IAAA,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,KAAK,GAAG,CAAZ,EAAY,CAAC,CAAC;IACnD;;ICLA,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,gBAAgB,CAAC;IACjG;;ICAA,SAAS,WAAW,CAAC,KAAU,EAAA;IAC7B,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvE;;ACIA,QAAM,GAAG,GAAQ,UAAmB,KAAmB,EAAE,CAAK,EAAA;IAAL,IAAA,IAAA,CAAA,KAAA,KAAA,CAAA,EAAA,EAAA,CAAK,GAAA,CAAA,CAAA,EAAA;IAC5D,IAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;IACvB,QAAA,OAAO,eAAe,CAAC;SACxB;IAED,IAAA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB;;ICnCA,IAAM,SAAS,GAAG,sBAAsB,CAAC;IA6BzC,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;SAChC;IACD,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;IAC7C,QAAA,IAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,IAAI,GAAG,SAAS,CAAC;SACzB;QACD,OAAO,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IACrC;;ICZA,SAAS,SAAS,CAAC,KAAS,EAAE,KAAS,EAAA;IAApB,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAS,GAAA,CAAA,CAAA,EAAA;IAAE,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAS,GAAA,CAAA,CAAA,EAAA;IACrC,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,IAAA,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAGhD,IAAA,IAAI,GAAG,GAAG,GAAG,EAAE;YAEb,IAAM,IAAI,GAAG,GAAG,CAAC;YACjB,GAAG,GAAG,GAAG,CAAC;YACV,GAAG,GAAG,IAAI,CAAC;SACZ;IAED,IAAA,OAAO,SAAS,CAAC,GAAG,GAAG,UAAU,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD;;IC1BA,SAAS,OAAO,CAAI,KAAU,EAAA;IAC5B,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;IACvC,QAAA,OAAO,EAAE,CAAC;SACX;IAED,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAA,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAA,IAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IAC7B,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEf,IAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;YACvB,IAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzC,QAAA,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;SACvB;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ICDA,SAAS,IAAI,CAAI,KAAU,EAAE,QAA2B,EAAE,WAAmB,EAAA;IAAnB,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IAC3E,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,OAAO,EAAE,CAAC;SACX;IAED,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAA;IACpC,QAAA,IAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,GAAG,CAAC,SAAS,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAA,CAAC,KAAK,KAAK,CAAC;IAC7F,KAAC,CAAC,CAAC;IACL;;ICVA,SAAS,KAAK,CAAI,KAAU,EAAE,KAAe,EAAE,QAA2B,EAAE,WAAmB,EAAA;IAAjE,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAe,GAAA,EAAA,CAAA,EAAA;IAA+B,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IAC7F,IAAA,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACpC,IAAA,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;IACpC,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1D;;ICfA,SAAS,iBAAiB,CAAC,KAAU,EAAA;QACnC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IACnD;;ICPA,SAAS,KAAK,CAAC,KAAc,EAAA;IAC3B,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;IACzC,QAAA,OAAO,EAAE,CAAC;SACX;QACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,KAAK,EAAA;IACzB,QAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC5B,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,YAAA,OAAO,IAAI,CAAC;aACb;IACD,QAAA,OAAO,KAAK,CAAC;IACf,KAAC,CAAC,CAAC;IACH,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,KAAK,CAAC,KAAK,CAAC,CAAZ,EAAY,CAAC,CAAC;IAChD,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;SACtB;IACD,IAAA,OAAO,MAAM,CAAC;IAChB;;ICEA,SAAS,GAAG,CAAI,KAAU,EAAE,KAAe,EAAE,QAAqC,EAAE,WAAmB,EAAA;IAA3E,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAe,GAAA,EAAA,CAAA,EAAA;IAAE,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAqC,GAAA,QAAA,CAAA,EAAA;IAAE,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IACrG,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;IACtC,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;IACrD,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;SACnD;IACD,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;SACnD;IACD,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAClK;;ICrCA,SAAS,GAAG,GAAA;QAAC,IAAkB,MAAA,GAAA,EAAA,CAAA;aAAlB,IAAkB,EAAA,GAAA,CAAA,EAAlB,EAAkB,GAAA,SAAA,CAAA,MAAA,EAAlB,EAAkB,EAAA,EAAA;YAAlB,MAAkB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IAC7B,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB;;ICRA,SAAS,UAAU,CAAC,MAAc,EAAA;IAChC,IAAA,IAAI,CAAC,2BAA2B,IAAI,MAAM,KAAK,IAAI,EAAE;IACnD,QAAA,OAAO,EAAE,CAAC;SACX;QAED,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,+BAA+B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;IAClH;;ICaA,SAAS,OAAO,CAAC,MAAY,EAAA;IAC3B,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACrB,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,OAAQ,UAAU,CAAC,MAAM,CAAyB,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF;;ICdA,SAAS,aAAa,CAAC,GAAW,EAAA;IAChC,IAAA,IAAM,OAAO,GAAY,UAAU,UAAe,EAAE,QAAwB,EAAA;IAAxB,QAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAwB,GAAA,QAAA,CAAA,EAAA;IAC1E,QAAA,IAAM,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAM,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,EAAE,MAAM,CAAC;IACzC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAE9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IACxB,YAAA,IAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,YAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,KAAK,EAAE;oBACtE,MAAM;iBACP;gBACD,CAAC,IAAI,GAAG,CAAC;aACV;IAED,QAAA,OAAO,UAAU,CAAC;IACpB,KAAC,CAAC;IAEF,IAAA,OAAO,OAAO,CAAC;IACjB;;ACNA,QAAM,OAAO,GAAG,aAAa,CAAC,CAAC;;ACG/B,QAAM,OAAO,GAAY,UAAa,UAAe,EAAE,QAAc,EAAA;QACnE,IAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;QACrD,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,QAAA,IAAI,GAAG,IAAI,MAAM,EAAE;IACjB,YAAA,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;aACf;iBAAM;IACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACjB;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACdA,QAAM,KAAK,GAAU,UAAU,UAAe,EAAE,SAAyB,EAAA;IAAzB,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyB,GAAA,QAAA,CAAA,EAAA;QACvE,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;gBAChC,MAAM,GAAG,KAAK,CAAC;IACf,YAAA,OAAO,KAAK,CAAC;aACd;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACXA,QAAM,IAAI,GAAS,UAAU,UAAe,EAAE,SAAyB,EAAA;IAAzB,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyB,GAAA,QAAA,CAAA,EAAA;IACrE,IAAA,IAAI,MAAW,CAAC;QAChB,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;gBAC/B,MAAM,GAAG,IAAI,CAAC;IACd,YAAA,OAAO,KAAK,CAAC;aACd;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACTA,QAAM,MAAM,GAAW,UAAa,KAAU,EAAE,SAAyB,EAAA;IAAzB,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyB,GAAA,QAAA,CAAA,EAAA;QACvE,IAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAA,OAAO,CAAC,KAAK,EAAE,UAAC,IAAI,EAAE,KAAK,EAAA;YACzB,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;IACjC,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpB;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,OAAO,CAAC;IACjB;;ACPA,QAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC;;ACIrC,QAAM,OAAO,GAAY,UAAa,UAAe,EAAE,QAAwB,EAAA;IAAxB,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAwB,GAAA,QAAA,CAAA,EAAA;QAC7E,IAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;QACrD,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,QAAA,IAAI,GAAG,IAAI,MAAM,EAAE;gBACjB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;IACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACtB;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACbA,QAAM,KAAK,GAAU,UAAa,UAAe,EAAE,QAAwB,EAAA;IAAxB,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAwB,GAAA,QAAA,CAAA,EAAA;QACzE,IAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;QACrD,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrB,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ICdA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAClE;;ICVA,SAAS,KAAK,CAAC,KAAU,EAAA;QACvB,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB;;ICnBA,IAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,eAAe,CAAC;IAE5E,SAAS,YAAY,CAAC,KAAU,EAAA;IAC9B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,QAAA,OAAO,KAAK,CAAC;SACd;IACD,IAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACrC;IACD,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,OAAO,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;SACzD;IACD,IAAA,IAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC;IAC1B,IAAA,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IACnE,CAAC;IAwBD,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjD;;ICzCA,SAAS,aAAa,CAAC,GAAU,EAAA;IAC/B,IAAA,IAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;IACtB,IAAA,SAAS,OAAO,CAAC,KAAU,EAAE,KAAU,EAAA;IACrC,QAAA,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,QAAA,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,IAAM,mBAAmB,GAAG,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtG,QAAA,IAAM,MAAM,GAAG,mBAAmB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC7D,QAAA,IAAM,MAAM,GAAG,mBAAmB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAE7D,IAAI,CAAC,aAAa,KAAK,aAAa,IAAI,MAAM,GAAG,MAAM,CAAC,EAAE;gBACxD,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACrB;YACD,IAAI,CAAC,aAAa,KAAK,aAAa,IAAI,MAAM,GAAG,MAAM,CAAC,EAAE;gBACxD,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;IACD,QAAA,OAAO,CAAC,CAAC;SACV;IACD,IAAA,OAAO,OAAO,CAAC;IACjB,CAAC;aAUe,eAAe,CAAI,MAA2B,EAAE,KAA0B,EAAE,MAAsB,EAAA;IAChH,IAAA,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,IAAA,IAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;IACnC,IAAA,IAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEf,IAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,QAAA,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,QAAA,IAAM,KAAK,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3G,QAAA,IAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,MAAM,EAAE;IACV,YAAA,OAAO,MAAM,CAAC;aACf;SACF;IAED,IAAA,OAAO,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACpC;;ACKA,QAAM,OAAO,GAAY,UAAa,UAAe,EAAE,SAAe,EAAE,MAA2B,EAAA;QACjG,IAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,IAAA,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK,eAAe,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAuB,CAAC;QAC9H,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAuB,CAAC;IAEvG,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAA;YACjC,IAAM,QAAQ,GAAI,SAAgC,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAK,EAAA,OAAA,cAAc,CAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;YAClH,MAAM,CAAC,IAAI,CAAC;IACV,YAAA,QAAQ,EAAA,QAAA;gBACR,KAAK,EAAE,EAAE,KAAK;IACd,YAAA,KAAK,EAAE,IAAI;IACZ,SAAA,CAAC,CAAC;IACL,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA,EAAK,OAAA,eAAe,CAAI,CAAC,EAAE,CAAC,EAAE,MAAwB,CAAC,CAAA,EAAA,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,KAAK,CAAV,EAAU,CAAC,CAAC;IAC7G;;ACtCA,QAAM,GAAG,GAAQ,UAAU,UAAe,EAAE,QAAwB,EAAA;IAAxB,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAwB,GAAA,QAAA,CAAA,EAAA;QAClE,IAAM,MAAM,GAAU,EAAE,CAAC;QACzB,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;IACnC,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACSA,QAAM,SAAS,GAAc,UAAa,UAAe,EAAE,SAAyB,EAAA;IAAzB,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyB,GAAA,QAAA,CAAA,EAAA;IAClF,IAAA,IAAM,MAAM,GAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,SAAS,CAAC,CAAC;QACtD,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;IC/BA,SAAS,YAAY,CAAC,GAAW,EAAA;QAC/B,SAAS,OAAO,CAAC,UAAe,EAAE,QAAqB,EAAE,IAAS,EAAE,OAAgB,EAAA;IAClF,QAAA,IAAM,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAM,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,EAAE,MAAM,CAAC;IACzC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAE9B,QAAA,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE;IACvB,YAAA,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,CAAC,IAAI,GAAG,CAAC;aACV;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;IACxB,YAAA,IAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBACtE,CAAC,IAAI,GAAG,CAAC;aACV;IACD,QAAA,OAAO,IAAI,CAAC;SACb;IAED,IAAA,IAAM,MAAM,GAAW,UAAU,UAAe,EAAE,QAAgC,EAAE,YAAkB,EAAA;IAApD,QAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAgC,GAAA,QAAA,CAAA,EAAA;IAChF,QAAA,IAAM,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,KAAC,CAAC;IACF,IAAA,OAAO,MAAM,CAAC;IAChB;;AClBA,QAAM,MAAM,GAAG,YAAY,CAAC,CAAC;;ACA7B,QAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;;ACCnC,QAAM,IAAI,GAAS,UAAU,UAAe,EAAE,SAAyB,EAAA;IAAzB,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyB,GAAA,QAAA,CAAA,EAAA;QACrE,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,OAAO,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAA;YACnC,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;gBAC/B,MAAM,GAAG,IAAI,CAAC;IACd,YAAA,OAAO,KAAK,CAAC;aACd;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;AChBA,QAAM,SAAS,GAAc,UAAgB,KAAQ,EAAE,YAAe,EAAA;IACpE,IAAA,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC;IACjE;;ACfO,QAAM,OAAO,GAAG,SAAc;AAQ9B,QAAM,SAAS,GAAG,OAAO,MAAM,KAAK,eAAe,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,QAAQ,KAAK,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;IAG7K,IAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,YAAA,EAAM,OAAA,SAAS,GAAA,GAAG,CAAC,KAAK,YAAY,CAAC;IAE5E,IAAM,eAAe,GAAG,qBAAqB,CAAC;IAE/C,SAAU,QAAQ,CAAC,IAAS,EAAA;IAChC,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;IACjB,QAAA,IAAI;IACF,YAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC;YAAC,OAAO,CAAC,EAAE;aAEX;IACD,QAAA,IAAI;gBACF,OAAO,IAAI,GAAG,EAAE,CAAC;aAClB;YAAC,OAAO,CAAC,EAAE;aAEX;SACF;IACD,IAAA,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,IAAM,SAAS,GAAG,cAAM,OAAA,KAAK,CAAL,EAAK,CAAC;IAC9B,IAAM,QAAQ,GAAG,cAAM,OAAA,IAAI,CAAJ,EAAI;;ICdlC,SAAS,KAAK,CAAwB,CAAS,EAAE,IAAO,EAAA;IACtD,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;IAC9B,QAAA,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;SACtC;QACD,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,YAAA;IACL,QAAA,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;gBAGX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aACpC;IACH,KAAM,CAAC;IACT;;ICZA,SAAS,MAAM,CAAwB,CAAS,EAAE,IAAO,EAAA;IACvD,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;IAC9B,QAAA,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;SACtC;IAED,IAAA,IAAI,MAAqB,CAAC;QAC1B,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,YAAA;IACL,QAAA,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;gBAGX,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aACtC;IACD,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE;gBAEV,IAAI,GAAG,eAAe,CAAC;aACxB;IACD,QAAA,OAAO,MAAM,CAAC;IAChB,KAAM,CAAC;IACT;;IC9BA,SAAS,WAAW,CAAC,KAAU,EAAA;QAC7B,OAAO,KAAK,KAAK,eAAe,CAAC;IACnC;;ICbA,IAAMA,aAAW,GAAG;IAClB,IAAA,gBAAgB,EAAE,IAAI;KACvB,CAAC;AA2IF,QAAM,KAAK,GAAU,UAAU,IAAiB,EAAE,KAAc,EAAA;QAC9D,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAExE,IAAA,SAAS,IAAI,GAAA;YACX,IAAI,IAAI,GAAU,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,IAAM,OAAO,GAAG,IAAI,CAAC;IAErB,QAAA,SAAS,KAAK,GAAA;gBACZ,IAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAElD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpC,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAKA,aAAW,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBACzF;IACD,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,YAAA,IAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAA,EAAK,OAAA,GAAG,KAAKA,aAAW,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC;IACxE,YAAA,IAAI,cAAc,IAAI,KAAM,EAAE;oBAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBAClC;IACD,YAAA,OAAO,KAAK,CAAC;aACd;YAED,OAAO,KAAK,EAAE,CAAC;SAChB;IAED,IAAA,OAAO,IAAI,CAAC;IACd,EAAE;IAEF,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,GAAGA,aAAW;;ICxKzC,SAAS,YAAY,CAAwB,IAAO,EAAE,IAAY,EAAE,SAAkB,EAAE,YAAoB,EAAA;IAApB,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAoB,GAAA,KAAA,CAAA,EAAA;IAC1G,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;IAC9B,QAAA,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;SACtC;QAED,IAAI,KAAU,EAAE,YAAgC,EAAE,cAAsB,EAAE,QAA2B,EAAE,QAAa,EAAE,MAAqB,CAAC;QAE5I,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpC,SAAS,YAAY,CAAC,IAAY,EAAA;IAChC,QAAA,IAAI,YAAY,KAAK,eAAe,EAAE;IACpC,YAAA,OAAO,IAAI,CAAC;aACb;IACD,QAAA,IAAM,iBAAiB,GAAG,IAAI,GAAG,YAAY,CAAC;IAC9C,QAAA,IAAM,mBAAmB,GAAG,IAAI,GAAG,cAAc,CAAC;IAClD,QAAA,OAAO,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,GAAG,CAAC,KAAK,YAAY,IAAI,mBAAmB,IAAI,IAAI,CAAC,CAAC;SAC5G;QAED,SAAS,UAAU,CAAC,IAAY,EAAA;YAC9B,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAS,CAAC,CAAC;IACzC,QAAA,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;IACtC,QAAA,OAAO,MAAM,CAAC;SACf;IAED,IAAA,SAAS,SAAS,GAAA;YAAY,IAAsB,IAAA,GAAA,EAAA,CAAA;iBAAtB,IAAsB,EAAA,GAAA,CAAA,EAAtB,EAAsB,GAAA,SAAA,CAAA,MAAA,EAAtB,EAAsB,EAAA,EAAA;gBAAtB,IAAsB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;YAClD,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC;IAEhB,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,QAAA,IAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpC,QAAA,IAAM,QAAQ,GAAG,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,YAAY,KAAK,eAAe,IAAI,KAAK,KAAK,eAAe,GAAG,IAAI,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC;YAEzJ,YAAY,GAAG,IAAI,CAAC;YAEpB,IAAI,QAAQ,EAAE;IAEZ,YAAA,IAAI,SAAS,IAAI,KAAK,KAAK,eAAe,EAAE;IAC1C,gBAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;iBACzB;aACF;IAGD,QAAA,IAAI,KAAK,KAAK,eAAe,IAAI,CAAC,YAAY,EAAE;gBAC9C,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,eAAe,CAAC;aACzB;IAED,QAAA,IAAI,KAAK,KAAK,eAAe,EAAE;gBAC7B,KAAK,GAAG,UAAU,CAAC,YAAA;oBACjB,KAAK,GAAG,eAAe,CAAC;IACxB,gBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACxB,EAAE,QAAQ,CAAC,CAAC;aACd;IAED,QAAA,OAAO,MAAM,CAAC;SACf;IAED,IAAA,SAAS,MAAM,GAAA;IACb,QAAA,IAAI,KAAK,KAAK,eAAe,EAAE;gBAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,eAAe,CAAC;aACzB;YACD,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;SAC9D;IAED,IAAA,SAAS,KAAK,GAAA;IACZ,QAAA,IAAI,KAAK,KAAK,eAAe,EAAE;gBAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,eAAe,CAAC;gBAExB,IAAI,QAAQ,EAAE;IACZ,gBAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBAC/B;aACF;IACD,QAAA,OAAO,MAAM,CAAC;SACf;IAED,IAAA,SAAS,OAAO,GAAA;YACd,OAAO,KAAK,KAAK,eAAe,CAAC;SAClC;IAED,IAAA,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,IAAA,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,IAAA,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAE5B,IAAA,OAAO,SAAS,CAAC;IACnB;;ICxDA,SAAS,QAAQ,CAAwB,IAAO,EAAE,IAAQ,EAAE,SAAiB,EAAA;IAA3B,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAQ,GAAA,CAAA,CAAA,EAAA;IAAE,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAiB,GAAA,KAAA,CAAA,EAAA;QAC3E,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C;;ICfA,SAAS,KAAK,CAAmC,IAAO,EAAE,IAAY,EAAA;QAAE,IAAsB,IAAA,GAAA,EAAA,CAAA;aAAtB,IAAsB,EAAA,GAAA,CAAA,EAAtB,EAAsB,GAAA,SAAA,CAAA,MAAA,EAAtB,EAAsB,EAAA,EAAA;YAAtB,IAAsB,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IAC5F,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;IAC9B,QAAA,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;SACtC;QAED,IAAM,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpC,IAAA,OAAO,UAAU,CAAC,YAAA;IAChB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC3B,EAAE,IAAI,CAAC,CAAC;IACX;;ICZA,SAAS,MAAM,CAAmC,SAAY,EAAA;QAA9D,IAQC,KAAA,GAAA,IAAA,CAAA;IAPC,IAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;IACnC,QAAA,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;SACtC;QAED,OAAO,YAAA;YAAC,IAAsB,IAAA,GAAA,EAAA,CAAA;iBAAtB,IAAsB,EAAA,GAAA,CAAA,EAAtB,EAAsB,GAAA,SAAA,CAAA,MAAA,EAAtB,EAAsB,EAAA,EAAA;gBAAtB,IAAsB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;YAC5B,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAI,EAAE,IAAI,CAAC,CAAC;IACtC,KAAC,CAAC;IACJ;;ICPA,SAAS,IAAI,CAAwB,IAAO,EAAA;IAC1C,IAAA,OAAO,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzB;;ICxBA,IAAM,WAAW,GAAG;IAClB,IAAA,kBAAkB,EAAE,IAAI;KACzB,CAAC;AA+DI,QAAA,OAAO,GAAY,UAAU,IAAS,EAAA;QAC1C,IAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEpD,OAAO,YAAA;YACL,IAAM,IAAI,GAAG,EAAE,CAAC;YAChB,IAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC3E;IAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,KAAC,CAAC;IACJ,EAAE;IAEF,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,WAAW;;IC7C7C,SAAS,QAAQ,CAAwB,IAAO,EAAE,IAAQ,EAAE,SAAgB,EAAA;IAA1B,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAQ,GAAA,CAAA,CAAA,EAAA;IAAE,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAgB,GAAA,IAAA,CAAA,EAAA;QAC1E,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnD;;ICpBA,SAAS,WAAW,CAAC,KAAU,EAAA;QAC7B,IAAI,sBAAsB,EAAE;IAC1B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC;SACvC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1I;;ICrBA,IAAM,WAAW,GAAG,OAAO,OAAO,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAI/F,IAAM,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAEzG,IAAM,QAAQ,GAAG,CAAC,YAAA;IAChB,IAAA,IAAI;IACF,QAAA,IAAM,KAAK,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;YACnF,IAAI,KAAK,EAAE;IACT,YAAA,OAAO,KAAK,CAAC;aACd;SACF;QAAC,OAAO,CAAC,EAAE;SAEX;IACH,CAAC,GAAG,CAAC;IAIE,IAAM,iBAAiB,GAAoB,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC;IAC9E,IAAM,UAAU,GAAoB,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;IAChE,IAAM,SAAS,GAAoB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;IAC9D,IAAM,YAAY,GAAoB,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;IACpE,IAAM,SAAS,GAAoB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;IAC9D,IAAM,gBAAgB,GAAoB,QAAQ,IAAI,QAAQ,CAAC,YAAY;;ICPlF,SAAS,aAAa,CAAC,KAAU,EAAA;IAC/B,IAAA,OAAO,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC;IACzF;;ICAA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAClE;;ICrBA,IAAM,WAAW,GAAG,OAAO,IAAI,KAAK,eAAe,CAAC;IAyBpD,SAAS,MAAM,CAAC,KAAU,EAAA;IAExB,IAAA,IAAI,WAAW,IAAI,KAAK,YAAY,IAAI,EAAE;IACxC,QAAA,OAAO,IAAI,CAAC;SACb;IACD,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;IACnC;;ICXA,SAAS,SAAS,CAAC,KAAU,EAAA;IAC3B,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;IAC3E;;ICPA,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;IACzE,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/B;IACD,IAAA,OAAO,KAAK,CAAC;IACf;;ICpBA,IAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,eAAe,CAAC;IAC5D,IAAM,UAAU,GAAG,OAAO,GAAG,KAAK,eAAe,CAAC;IAClD,IAAM,cAAc,GAAG,OAAO,OAAO,KAAK,eAAe,CAAC;IAC1D,IAAM,UAAU,GAAG,OAAO,GAAG,KAAK,eAAe,CAAC;IAClD,IAAM,cAAc,GAAG,OAAO,OAAO,KAAK,eAAe,CAAC;IAE1D,IAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,IAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,IAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,gBAAgB,GAAG,MAAM,CAAC;IAI9B,IACE,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW;SAC3E,UAAU,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;SAC3C,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC;SAC3D,UAAU,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5C,KAAC,cAAc,IAAI,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC,EACxD;QACA,gBAAgB,GAAG,UAAU,KAAU,EAAA;IACrC,QAAA,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,QAAA,IAAM,IAAI,GAAG,MAAM,KAAK,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC;IACxE,QAAA,IAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9C,IAAI,UAAU,EAAE;gBACd,QAAQ,UAAU;IAChB,gBAAA,KAAK,kBAAkB;IACrB,oBAAA,OAAO,WAAW,CAAC;IACrB,gBAAA,KAAK,aAAa;IAChB,oBAAA,OAAO,MAAM,CAAC;IAChB,gBAAA,KAAK,iBAAiB;IACpB,oBAAA,OAAO,UAAU,CAAC;IACpB,gBAAA,KAAK,aAAa;IAChB,oBAAA,OAAO,MAAM,CAAC;IAChB,gBAAA,KAAK,iBAAiB;IACpB,oBAAA,OAAO,UAAU,CAAC;iBACrB;aACF;IAED,QAAA,OAAO,MAAM,CAAC;IAChB,KAAC,CAAC;IACJ,CAAC;AAED,6BAAe,gBAAgB;;ICnC/B,SAAS,UAAU,CAAC,KAAU,EAAA;IAC5B,IAAA,OAAOC,kBAAgB,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC;IACjD;;ICCA,SAAS,MAAM,CAAC,KAAU,EAAA;IACxB,IAAA,OAAO,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;IACpE;;ICjBA,IAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAyB5D,SAAS,aAAa,CAAC,KAAU,EAAA;IAC/B,IAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;IACvD,QAAA,OAAO,KAAK,CAAC;SACd;QACD,IAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAGlD,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;IAClB,QAAA,OAAO,IAAI,CAAC;SACb;IAED,IAAA,IAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC;IAEvF,IAAA,OAAO,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,YAAY,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC;IACrH;;ICzBA,SAAS,SAAS,CAAC,KAAU,EAAA;IAC3B,IAAA,OAAO,YAAY,CAAC,KAAK,CAAC,IAAK,KAAiB,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3F;;ICoBA,SAAS,OAAO,CAAC,KAAU,EAAA;IACzB,IAAA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;IAChB,QAAA,OAAO,IAAI,CAAC;SACb;IAED,IAAA,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;IACpC,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;SACpB;IAED,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;IACvB,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;SAC/B;IAED,IAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;IACtB,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;SACtB;IAED,IAAA,OAAO,IAAI,CAAC;IACd;;ICvDA,IAAM,iBAAiB,GAAG,6EAA6E,CAAC;IAkBxG,SAAS,YAAY,CAAC,KAAU,EAAA;QAC9B,IAAI,gBAAgB,EAAE;IACpB,QAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAChC;IACD,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;YAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SAC9C;IACD,IAAA,OAAO,KAAK,CAAC;IACf;;ICnBA,IAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,OAAO,GAAG,eAAe,CAAC;IAE1E,SAAS,UAAU,CAAC,GAAkB,EAAA;QACpC,IAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAA,GAAG,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG,EAAA;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5B,KAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,UAAU,CAAC,GAAa,EAAA;QAC/B,IAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAA,GAAG,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;IAChB,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,UAAU,CAAC,GAAe,EAAA;IACjC,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,YAAY,CAAC,YAAiB,EAAA;IACrC,IAAA,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,IAAI,YAAY,EAAE,YAAY,CAAC,UAAU,IAAI,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACpH,CAAC;IAED,SAAS,SAAS,CAAC,GAAQ,EAAA;QACzB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,OAAQ,GAAe,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAQ,GAAe,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAQ,GAAe,CAAC,WAAW,KAAK,UAAU,CAAC;IACnL,CAAC;IAyBD,SAAS,WAAW,CAAC,KAAU,EAAE,KAAU,EAAE,UAAuB,EAAE,WAAqB,EAAE,UAAkB,EAAE,UAAkB,EAAA;QAEjI,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE;IACjC,QAAA,OAAO,IAAI,CAAC;SACb;IAED,IAAA,IAAM,OAAO,GAAG,OAAO,KAAK,CAAC;IAC7B,IAAA,IAAM,OAAO,GAAG,OAAO,KAAK,CAAC;IAI7B,IAAA,IAAI,WAAW,IAAI,OAAO,KAAK,OAAO,EAAE;IACtC,QAAA,OAAO,KAAK,CAAC;SACd;QAGD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC,EAAE;IAClF,QAAA,OAAO,KAAK,CAAC;SACd;IAGD,IAAA,IAAM,GAAG,GAAGA,kBAAgB,CAAC,KAAK,CAAC,CAAC;IACpC,IAAA,IAAI,GAAG,KAAKA,kBAAgB,CAAC,KAAK,CAAC,EAAE;IACnC,QAAA,OAAO,KAAK,CAAC;SACd;IAED,IAAA,IAAI,OAAwC,CAAC;QAE7C,QAAQ,GAAG;IACT,QAAA,KAAK,SAAS;gBACZ,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACzC,QAAA,KAAK,UAAU,CAAC;IAChB,QAAA,KAAK,OAAO;gBAEV,OAAO,WAAW,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9D,QAAA,KAAK,SAAS,CAAC;IACf,QAAA,KAAK,SAAS;IACZ,YAAA,OAAO,EAAE,GAAG,KAAK,KAAK,EAAE,GAAG,KAAK,CAAC;IACnC,QAAA,KAAK,SAAS;gBACZ,OAAO,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzF,QAAA,KAAK,QAAQ;IACX,YAAA,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;IACtE,QAAA,KAAK,WAAW,CAAC;IACjB,QAAA,KAAK,cAAc;gBACjB,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC,EAAE;IACxG,gBAAA,OAAO,KAAK,CAAC;iBACd;gBACD,OAAO,GAAG,YAAY,CAAC;gBACvB,MAAM;IACR,QAAA,KAAK,MAAM;gBACT,OAAO,GAAG,UAAU,CAAC;gBACrB,MAAM;IACR,QAAA,KAAK,MAAM;gBACT,OAAO,GAAG,UAAU,CAAC;gBACrB,MAAM;IACR,QAAA,KAAK,YAAY;gBACf,OAAO,GAAG,UAAU,CAAC;gBACrB,MAAM;SACT;QAED,IAAI,OAAO,EAAE;YACX,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACrG;QAGD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;IACxC,QAAA,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACjC;IAED,IAAA,IAAI,SAAS,GAAG,GAAG,KAAK,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;IACzC,YAAA,OAAO,KAAK,CAAC;aACd;IACD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;IAC1E,YAAA,OAAO,IAAI,CAAC;aACb;YACD,SAAS,GAAG,IAAI,CAAC;SAClB;IAGD,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACpB,YAAA,OAAO,KAAK,CAAC;aACd;YACD,SAAS,GAAG,IAAI,CAAC;SAClB;IAGD,IAAA,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;IAC9B,IAAA,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;IAC9B,IAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAE/B,OAAO,MAAM,EAAE,EAAE;IAEf,QAAA,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;IAChC,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;aACrC;SACF;IAGD,IAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,IAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAA,IAAM,aAAa,GAAG,OAAO,UAAU,KAAK,UAAU,CAAC;QAGvD,IAAI,SAAS,EAAE;IAEb,QAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACtB,QAAA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;IAC3B,YAAA,OAAO,KAAK,CAAC;aACd;YAED,OAAO,MAAM,EAAE,EAAE;gBACf,IAAI,aAAa,EAAE;oBACjB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACxG,gBAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;wBAChC,IAAI,CAAC,QAAQ,EAAE;IACb,wBAAA,OAAO,KAAK,CAAC;yBACd;wBACD,SAAS;qBACV;iBACF;gBACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;IAC/F,gBAAA,OAAO,KAAK,CAAC;iBACd;aACF;SACF;IAAM,SAAA,IAAI,GAAG,KAAK,SAAS,EAAE;IAE5B,QAAA,IAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,QAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACrB,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE;IACpC,YAAA,OAAO,KAAK,CAAC;aACd;YAED,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO,MAAM,EAAE,EAAE;IACf,YAAA,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,aAAa,EAAE;oBACjB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/F,gBAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;wBAChC,IAAI,CAAC,QAAQ,EAAE;IACb,wBAAA,OAAO,KAAK,CAAC;yBACd;wBACD,SAAS;qBACV;iBACF;IACD,YAAA,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE;IACzI,gBAAA,OAAO,KAAK,CAAC;iBACd;IAGD,YAAA,IAAI,CAAC,QAAQ,IAAI,GAAG,KAAK,aAAa,EAAE;oBACtC,QAAQ,GAAG,IAAI,CAAC;iBACjB;aACF;YAED,IAAI,CAAC,QAAQ,EAAE;IAEb,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;IAClC,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;IAClC,YAAA,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,YAAY,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,YAAY,OAAO,CAAC,IAAI,aAAa,IAAI,KAAK,IAAI,aAAa,IAAI,KAAK,EAAE;IACxL,gBAAA,OAAO,KAAK,CAAC;iBACd;aACF;SACF;aAAM;YACL,MAAM,GAAG,KAAK,CAAC;SAChB;QAGD,UAAU,CAAC,GAAG,EAAE,CAAC;QACjB,UAAU,CAAC,GAAG,EAAE,CAAC;IAEjB,IAAA,OAAO,MAAM,CAAC;IAChB;;ICpMA,SAAS,OAAO,CAAC,KAAU,EAAE,KAAU,EAAE,UAA8C,EAAE,WAAmB,EAAA;IAAnB,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IAE1G,IAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;YACpC,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,QAAA,IAAI,MAAM,KAAK,eAAe,EAAE;gBAC9B,OAAO,CAAC,CAAC,MAAM,CAAC;aACjB;SACF;QACD,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC5D;;IChCA,SAAS,OAAO,CAAC,KAAU,EAAA;IACzB,IAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;IACxB,QAAA,OAAO,KAAK,CAAC;SACd;IACD,IAAA,IAAI,KAAK,YAAY,KAAK,EAAE;IAC1B,QAAA,OAAO,IAAI,CAAC;SACb;IACD,IAAA,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAA,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,eAAe,CAAC;IACrD;;IC1BA,IAAM,WAAW,GAAG,OAAO,IAAI,KAAK,eAAe,CAAC;IAwBpD,SAAS,MAAM,CAAC,KAAU,EAAA;IACxB,IAAA,IAAI,WAAW,IAAI,KAAK,YAAY,IAAI,EAAE;IACxC,QAAA,OAAO,IAAI,CAAC;SACb;IACD,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;IACnC;;IC/BA,IAAM,cAAc,GAAG,iBAAiB,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC;IACvF,IAAM,UAAU,GAAG,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC;IACvE,IAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC;AAc/D,QAAM,IAAI,GAAsB,cAAc,IAAI,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC;;ICQnG,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpG;;ICFA,SAAS,SAAS,CAAC,KAAU,EAAA;QAC3B,OAAO,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IAClG;;ICTA,SAAS,KAAK,CAAC,KAAU,EAAA;QACvB,IAAI,SAAS,EAAE;IACb,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;SACzB;IACD,IAAA,OAAOA,kBAAgB,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;IAC5C;;IClBA,SAAS,gBAAgB,CAAC,MAAW,EAAE,MAAW,EAAA;IAChD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;IACtE,CAAC;IAID,SAAS,WAAW,CAAC,MAAoC,EAAE,MAAoC,EAAE,UAAuB,EAAE,WAAqB,EAAE,QAAgB,EAAE,QAAgB,EAAA;IACjL,IAAA,IAAM,aAAa,GAAG,OAAO,UAAU,KAAK,UAAU,CAAC;IAEvD,IAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAEpC,QAAA,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC1B,QAAA,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC1B,QAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAE/B,OAAO,QAAQ,EAAE,EAAE;IAGjB,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE;IAClE,gBAAA,OAAO,IAAI,CAAC;iBACb;aACF;IAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEtB,QAAA,IAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,QAAA,IAAI,QAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAEzB,OAAO,QAAM,EAAE,EAAE;IACf,YAAA,IAAM,GAAG,GAAG,IAAI,CAAC,QAAM,CAAC,CAAC;IACzB,YAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;IACpB,gBAAA,OAAO,KAAK,CAAC;iBACd;gBAED,IAAI,aAAa,EAAE;oBACjB,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/F,gBAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;wBAChC,IAAI,CAAC,QAAQ,EAAE;IACb,wBAAA,OAAO,KAAK,CAAC;yBACd;wBACD,SAAS;qBACV;iBACF;gBAGD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACvF,gBAAA,OAAO,KAAK,CAAC;iBACd;aACF;YAGD,QAAQ,CAAC,GAAG,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,EAAE,CAAC;IACf,QAAA,OAAO,IAAI,CAAC;SACb;IAGD,IAAA,IAAM,MAAM,GAAG,WAAW,CACxB,MAAM,EACN,MAAM,EACN,UAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAA;YAC9B,IAAI,aAAa,EAAE;IACjB,YAAA,IAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjF,YAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;IAChC,gBAAA,OAAO,QAAQ,CAAC;iBACjB;aACF;IACD,QAAA,IAAI,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACxC,YAAA,OAAO,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACrF;IACH,KAAC,EACD,WAAW,EACX,QAAQ,EACR,QAAQ,CACT,CAAC;IAEF,IAAA,OAAO,MAAM,CAAC;IAChB,CAAC;IA2CD,SAAS,OAAO,CAAC,MAAc,EAAE,MAAc,EAAE,UAAuB,EAAE,WAAmB,EAAA;IAAnB,IAAA,IAAA,WAAA,KAAA,KAAA,CAAA,EAAA,EAAA,WAAmB,GAAA,KAAA,CAAA,EAAA;IAC3F,IAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;YACpC,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;gBAChC,OAAO,CAAC,CAAC,QAAQ,CAAC;aACnB;SACF;IAED,IAAA,OAAO,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;IAChG;;ICnHA,SAAS,KAAK,CAAC,KAAU,EAAA;QACvB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9C;;ICTA,SAAS,MAAM,CAAC,KAAU,EAAA;QACxB,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB;;ICIA,SAAS,aAAa,CAAC,KAAU,EAAA;QAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAsB,CAAC,IAAI,KAAK,UAAU,CAAC;IAC/E;;ICJA,SAAS,QAAQ,CAAC,KAAU,EAAA;IAC1B,IAAA,OAAO,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC1E;;ICOA,SAAS,aAAa,CAAC,KAAU,EAAA;QAC/B,OAAO,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC;IACnH;;ICXA,SAAS,KAAK,CAAC,KAAU,EAAA;IACvB,IAAA,OAAO,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAGA,kBAAgB,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;IAC3E;;ICDA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAClE;;ICJA,SAAS,SAAS,CAAC,KAAU,EAAA;IAC3B,IAAA,OAAOA,kBAAgB,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;IAChD;;ICFA,SAAS,SAAS,CAAC,KAAU,EAAA;IAC3B,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;IACtC;;ICGA,SAAS,QAAQ,CAAC,KAAU,EAAA;QAC1B,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC5D;;ICVA,SAAS,aAAa,CAAC,IAAgC,EAAE,KAAa,EAAE,SAAa,EAAA;IAAb,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAa,GAAA,CAAA,CAAA,EAAA;IACnF,IAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAExB,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;QAGD,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAA,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAG9E,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E;;ICTA,SAAS,IAAI,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC9C,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD;;ICHA,SAAS,KAAK,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC/C,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD;;ICpBM,SAAU,eAAe,CAAC,UAAsB,EAAA;QACpD,OAAO,UAAU,KAAU,EAAE,KAAU,EAAA;IACrC,QAAA,IAAI,EAAE,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;IAC7D,YAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,YAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;aACzB;IACD,QAAA,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,KAAC,CAAC;IACJ,CAAC;IAEM,IAAM,MAAM,GAAe,UAAC,KAAK,EAAE,KAAK,EAAA;QAC7C,OAAO,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC;IAEK,IAAM,OAAO,GAAe,UAAC,KAAK,EAAE,KAAK,EAAA;QAC9C,OAAO,KAAK,IAAI,KAAK,CAAC;IACxB,CAAC,CAAC;IAEK,IAAM,MAAM,GAAe,UAAC,KAAK,EAAE,KAAK,EAAA;QAC7C,OAAO,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC;IAEK,IAAM,OAAO,GAAe,UAAC,KAAK,EAAE,KAAK,EAAA;QAC9C,OAAO,KAAK,IAAI,KAAK,CAAC;IACxB,CAAC;;ICtBD,SAAS,cAAc,CAAI,KAAwB,EAAE,UAA+C,EAAE,QAA2B,EAAA;IAC/H,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO;SACR;QAED,IAAI,MAAqB,EAAE,QAA4B,CAAC;IACxD,IAAA,IAAM,gBAAgB,GAAG,cAAc,CAAI,QAAQ,CAAC,CAAC;IAErD,IAAA,KAAK,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;YACzB,IAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,QAAA,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ,KAAK,eAAe,GAAG,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE;gBACjI,QAAQ,GAAG,OAAO,CAAC;gBACnB,MAAM,GAAG,KAAK,CAAC;aAChB;IACH,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAM,CAAC;IAChB;;ACMA,QAAM,GAAG,GAAqB,UAAa,KAAwB,EAAE,QAA2B,EAAA;QAC9F,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD;;ACHA,QAAM,GAAG,GAAqB,UAAa,KAAwB,EAAE,QAA2B,EAAA;QAC9F,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD;;ICRA,SAAS,KAAK,CAAC,MAAc,EAAE,SAAkB,EAAA;QAC/C,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD;;ACSA,QAAM,KAAK,GAAU,UAAU,MAAc,EAAE,KAAc,EAAE,KAAc,EAAA;IAC3E,IAAA,IAAI,KAAK,KAAK,eAAe,EAAE;YAC7B,KAAK,GAAG,KAAK,CAAC;YACd,KAAK,GAAG,eAAe,CAAC;SACzB;IAED,IAAA,IAAI,KAAK,KAAK,eAAe,EAAE;YAC7B,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;SACvC;IAED,IAAA,IAAI,KAAK,KAAK,eAAe,EAAE;YAC7B,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;SACvC;IAED,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1B,IAAA,IAAI,MAAM,KAAK,MAAM,EAAE;IACrB,QAAA,IAAI,KAAK,KAAK,eAAe,EAAE;IAC7B,YAAA,MAAM,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;aAC3C;IACD,QAAA,IAAI,KAAK,KAAK,eAAe,EAAE;IAC7B,YAAA,MAAM,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;aAC3C;SACF;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ICxBA,SAAS,OAAO,CAAC,MAAc,EAAE,KAAa,EAAE,GAAO,EAAA;IAAP,IAAA,IAAA,GAAA,KAAA,KAAA,CAAA,EAAA,EAAA,GAAO,GAAA,CAAA,CAAA,EAAA;IACrD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpB,IAAA,OAAO,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvE;;ICXA,SAAS,MAAM,CAAC,KAAS,EAAE,KAAS,EAAA;IAApB,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAS,GAAA,CAAA,CAAA,EAAA;IAAE,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAS,GAAA,CAAA,CAAA,EAAA;IAClC,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,IAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,IAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,GAAG,GAAG,UAAU,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;IAC1C;;IC5BA,SAAS,SAAS,CAAC,MAAc,EAAA;QAC/B,IAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAA,KAAK,IAAM,GAAG,IAAI,MAAM,EAAE;IACxB,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;IACD,IAAA,OAAO,MAAM,CAAC;IAChB;;ICHA,SAAS,YAAY,CAAC,MAAc,EAAA;QAClC,IAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO,CAAC,EAAE;IACR,QAAA,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;gBACzB,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;IAC/B,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;IACH,SAAC,CAAC,CAAC;IACH,QAAA,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;SAC7B;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ICGA,SAAS,SAAS,CAAC,MAAY,EAAA;IAC7B,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACrB,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,OAAQ,SAAS,CAAC,MAAM,CAAyB,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF;;ICjCA;IACA;AACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;AAwJA;IACO,SAAS,QAAQ,CAAC,CAAC,EAAE;IAC5B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,OAAO;IAClD,QAAQ,IAAI,EAAE,YAAY;IAC1B,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,YAAY,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACpD,SAAS;IACT,KAAK,CAAC;IACN,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,CAAC;IAC3F,CAAC;AACD;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IAC7B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,IAAI;IACR,QAAQ,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnF,KAAK;IACL,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3C,YAAY;IACZ,QAAQ,IAAI;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,SAAS;IACT,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE;IACzC,KAAK;IACL,IAAI,OAAO,EAAE,CAAC;IACd,CAAC;AAiBD;IACO,SAAS,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACzF,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE;IAChC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,SAAS;IACT,KAAK;IACL,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;AAiGD;IACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;IACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;IACrF;;ACtSA,QAAM,OAAO,GAAY,UAAC,GAA2B,EAAE,SAA+D,EAAA;;IAA/D,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAA+D,GAAA,SAAA,CAAA,EAAA;IACpH,IAAA,IAAI,GAAG,CAAC;IAER,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;;IACd,YAAA,KAAqB,IAAA,KAAA,GAAA,QAAA,CAAA,GAAG,CAAA,EAAA,OAAA,GAAA,KAAA,CAAA,IAAA,EAAA,yCAAE;IAAf,gBAAA,IAAA,KAAA,MAAM,CAAA,OAAA,CAAA,KAAA,EAAA,CAAA,CAAA,EAAL,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;IACd,gBAAA,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;wBACnB,GAAG,GAAG,CAAC,CAAC;wBACR,MAAM;qBACP;iBACF;;;;;;;;;SACF;IAAM,SAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;IACxB,QAAA,OAAO,CAAC,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC,EAAA;IAChB,YAAA,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACnB,GAAG,GAAG,CAAC,CAAC;IACR,gBAAA,OAAO,KAAK,CAAC;iBACd;IACH,SAAC,CAAC,CAAC;SACJ;IAED,IAAA,OAAO,GAAG,CAAC;IACb;;IC1BA,SAAS,MAAM,CAAmB,MAAuB,EAAE,SAAwC,EAAA;IAAxC,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAwC,GAAA,QAAA,CAAA,EAAA;IACjG,IAAA,IAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,IAAA,KAAK,CAAC,OAAO,CAAC,UAAC,GAAG,EAAA;IAChB,QAAA,IAAM,KAAK,GAAG,MAAO,CAAC,GAAc,CAAC,CAAC;IACtC,QAAA,IAAI,SAAS,CAAC,KAAK,EAAE,GAAc,CAAC,EAAE;gBACpC,IAAM,SAAS,GAAG,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,QAAQ,IAAI,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAI,KAAyB,CAAC;IACtI,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;aACzB;iBAAM;IACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACrB;IACH,KAAC,CAAC,CAAC;IACH,IAAA,OAAO,MAAM,CAAC;IAChB;;ICXA,SAAS,IAAI,CAAC,MAAY,EAAA;IACxB,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACrB,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B;;ICLA,SAAS,MAAM,CAAC,MAAY,EAAA;IAC1B,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACrB,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B;;ICnBA,SAAS,SAAS,CAAmB,MAAe,EAAE,MAAe,EAAE,OAAsB,EAAE,UAAuB,EAAE,KAAqB,EAAA;QAArB,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAY,GAAA,IAAA,OAAO,EAAE,CAAA,EAAA;IAC3I,IAAA,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE;IACvC,QAAA,OAAO,GAAG,CAAC;SACZ;IACD,IAAA,IAAM,IAAI,GAAG,OAAO,CAAC,MAAgB,CAAC,CAAC;IACvC,IAAA,IAAM,aAAa,GAAG,OAAO,UAAU,KAAK,UAAU,CAAC;IAEvD,IAAA,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAA;IAEf,QAAA,IAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IACnC,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACrB;iBAAM;gBACL,IAAM,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC;IACpG,YAAA,IAAI,QAAQ,KAAK,eAAe,EAAE;IAChC,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;iBACrB;qBAAM;IACL,gBAAA,IAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,WAAW,SAAK,CAAC;oBAErB,IAAI,QAAQ,EAAE;IACZ,oBAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1B,oBAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IACrB,wBAAA,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;yBACjD;IAAM,yBAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;IAClC,wBAAA,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;yBACtD;qBACF;oBAED,IAAI,WAAW,EAAE;IACf,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;qBACzE;yBAAM,IAAI,QAAQ,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE;IACxD,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;qBACrB;iBACF;aACF;IACH,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,GAAG,CAAC;IACb,CAAC;IAwCD,SAAS,KAAK,CAAmB,MAAe,EAAE,MAAe,EAAE,UAAuB,EAAE,OAAgC,EAAA;IAAhC,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAgC,GAAA,OAAA,CAAA,EAAA;QAC1H,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,gBAAgB,GAAG,UAAC,QAAa,EAAE,QAAa,EAAA,EAAK,QAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,SAAS,EAAzC,EAA0C;;ICtErG,SAAS,SAAS,CAAI,KAAe,EAAA;IACnC,IAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;IACrB,QAAA,OAAO,EAAE,CAAC;SACX;IACD,IAAA,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAU,CAAC,CAAC;IAC/C;;ICNA,SAAS,IAAI,CAA8C,MAAuB,EAAE,MAAoB,EAAA;IAApB,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAoB,GAAA,EAAA,CAAA,EAAA;IACtG,IAAA,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAQ,CAAC;IACtC,IAAA,IAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,IAAM,MAAM,GAAG,EAAO,CAAC;IAEvB,IAAA,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAA;YACf,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAO,CAAC,GAAG,CAAC,CAAC;aAC5B;IACH,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAoB,CAAC;IAC9B;;ICZA,SAAS,MAAM,CAAmB,MAAuB,EAAE,SAAyC,EAAA;IAAzC,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyC,GAAA,SAAA,CAAA,EAAA;QAClG,IAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,IAAA,IAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAgB,CAAC;IAE9C,IAAA,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAA;YACf,IAAI,SAAS,CAAC,MAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAO,CAAC,GAAG,CAAC,CAAC;aAC5B;IACH,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAM,CAAC;IAChB;;ICXA,SAAS,MAAM,CAAmB,MAAuB,EAAE,SAAyC,EAAA;IAAzC,IAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAyC,GAAA,SAAA,CAAA,EAAA;QAClG,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C;;ICHA,SAAS,IAAI,CAA8C,MAAuB,EAAE,MAAoB,EAAA;IAApB,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAoB,GAAA,EAAA,CAAA,EAAA;QACtG,IAAM,MAAM,GAAG,EAAO,CAAC;IAEvB,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IACrB,QAAA,OAAO,MAAM,CAAC;SACf;IAED,IAAA,IAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;IACrB,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;gBACnB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aAC/B;IACH,KAAC,CAAC,CAAC;IAEH,IAAA,OAAO,MAAoB,CAAC;IAC9B;;IC3CA,IAAM,WAAW,GAAG,2CAA2C,CAAC;IAmBhE,SAAS,KAAK,CAAC,MAAc,EAAE,OAAsC,EAAA;IAAtC,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAsC,GAAA,WAAA,CAAA,EAAA;QACnE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACrC;;ICVA,SAAS,cAAc,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC/D,IAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE;;ICJA,SAAS,eAAe,CAAC,UAAyC,EAAA;IAChE,IAAA,OAAO,UAAC,MAAc,EAAA;IACpB,QAAA,IAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE;IACR,YAAA,OAAO,EAAE,CAAC;aACX;IACD,QAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,KAAC,CAAC;IACJ;;ACIA,QAAM,UAAU,GAAG,eAAe,CAAC,aAAa;;ICOhD,SAAS,SAAS,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC1D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAA;IAC7D,QAAA,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACxB,QAAA,OAAO,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAC/C,EAAE,EAAE,CAAC,CAAC;IACT;;ICfA,SAAS,UAAU,CAAC,MAAc,EAAA;QAChC,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD;;IClBA,IAAM,WAAW,GAAG;IAClB,IAAA,GAAG,EAAE,OAAO;IACZ,IAAA,GAAG,EAAE,MAAM;IACX,IAAA,GAAG,EAAE,MAAM;IACX,IAAA,GAAG,EAAE,QAAQ;IACb,IAAA,GAAG,EAAE,OAAO;KACb,CAAC;IAEF,IAAM,eAAe,GAAG,UAAU,CAAC;IACnC,IAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAwB1D,SAAS,MAAM,CAAC,MAAc,EAAA;IAC5B,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,OAAO,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;cAC5C,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,UAAC,GAAG,EAAA;IAElC,YAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,SAAC,CAAC;IACJ,UAAE,MAAM,IAAI,EAAE,CAAC;IACnB;;IC3CA,IAAM,YAAY,GAAG,uBAAuB,CAAC;IAC7C,IAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAoBpD,SAAS,YAAY,CAAC,MAAc,EAAA;QAClC,OAAO,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;IACtG;;ICIA,SAAS,SAAS,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC1D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA,EAAA,EAAE,EAAE,CAAC,CAAC;IACzH;;ICHA,SAAS,SAAS,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC1D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA,EAAA,EAAE,EAAE,CAAC,CAAC;IACzH;;ACPA,QAAM,UAAU,GAAG,eAAe,CAAC,aAAa;;ICOhD,SAAS,UAAU,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC3D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAA;IACtD,QAAA,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACxB,QAAA,OAAO,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;SAC/B,EAAE,EAAE,CAAC,CAAC;IACT;;ICNA,SAAS,SAAS,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC1D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA,EAAA,EAAE,EAAE,CAAC,CAAC;IACzH;;IC3BA,IAAM,aAAa,GAAG;IACpB,IAAA,OAAO,EAAE,GAAG;IACZ,IAAA,MAAM,EAAE,GAAG;IACX,IAAA,MAAM,EAAE,GAAG;IACX,IAAA,QAAQ,EAAE,GAAG;IACb,IAAA,OAAO,EAAE,GAAG;KACb,CAAC;IAEF,IAAM,aAAa,GAAG,gCAAgC,CAAC;IACvD,IAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAkBtD,SAAS,QAAQ,CAAC,MAAc,EAAA;IAC9B,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,OAAO,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;cAC1C,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAC,GAAG,EAAA;IAEhC,YAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACnC,SAAC,CAAC;IACJ,UAAE,MAAM,IAAI,EAAE,CAAC;IACnB;;ICXA,SAAS,SAAS,CAAC,MAAc,EAAE,OAAyB,EAAA;IAC1D,IAAA,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA,EAAA,EAAE,EAAE,CAAC,CAAC;IACzH;;ACAA,QAAM,UAAU,GAAe,UAA+C,MAAS,EAAE,MAA2C,EAAA;IAClI,IAAA,IAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAmB,CAAC;IAChD,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAA,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;YACjB,OAAO,CAAC,MAAM,CAAC;SAChB;IAED,IAAA,IAAI,MAAM,KAAK,CAAC,EAAE;IAChB,QAAA,OAAO,IAAI,CAAC;SACb;IAED,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;IAC/B,QAAA,IAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,QAAA,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,QAAA,IAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAE1B,QAAA,IAAI,CAAC,KAAK,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;IACxE,YAAA,OAAO,KAAK,CAAC;aACd;SACF;IAED,IAAA,OAAO,IAAI,CAAC;IACd;;AC1BM,QAAA,QAAQ,GAAqB,UAAkH,MAAS,EAAA;IAC5J,IAAA,OAAO,UAAU,MAAS,EAAA;IACxB,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAC,CAAC;IACJ;;ICbA,SAAS,QAAQ,CAAI,KAAQ,EAAA;QAC3B,OAAO,YAAA;IACL,QAAA,OAAO,KAAK,CAAC;IACf,KAAC,CAAC;IACJ;;ACAA,QAAM,EAAE,GAAG,eAAe,CAAC,MAAM;;ACAjC,QAAM,GAAG,GAAG,eAAe,CAAC,OAAO;;ACAnC,QAAM,EAAE,GAAG,eAAe,CAAC,MAAM;;ACAjC,QAAM,GAAG,GAAG,eAAe,CAAC,OAAO;;ICTnC,SAAS,IAAI;;ICUb,SAAS,MAAM,CAAC,CAAK,EAAA;IAAL,IAAA,IAAA,CAAA,KAAA,KAAA,CAAA,EAAA,EAAA,CAAK,GAAA,CAAA,CAAA,EAAA;QACnB,OAAO,YAAA;YAAU,IAAc,IAAA,GAAA,EAAA,CAAA;iBAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;gBAAd,IAAc,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IAC7B,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtB,KAAC,CAAC;IACJ;;ACOA,QAAM,KAAK,GAAU,UAAU,KAAa,EAAE,GAAY,EAAE,IAAa,EAAA;IACvE,IAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACd,GAAG,GAAG,KAAK,CAAC;YACZ,KAAK,GAAG,CAAC,CAAC;SACX;aAAM;IACL,QAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;SACrB;IAED,IAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAGtB,IAAI,CAAC,IAAI,EAAE;IACT,QAAA,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC7B;IAED,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAA,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,EAAE,EAAE;IACf,QAAA,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YACxB,KAAK,IAAI,IAAI,CAAC;SACf;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ICrCA,SAAS,KAAK,CAAC,EAAS,EAAA;IAAT,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,EAAA,EAAA,EAAS,GAAA,IAAA,CAAA,EAAA;IACtB,IAAA,OAAO,IAAI,OAAO,CAAO,UAAC,OAAO,EAAA;IAC/B,QAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,KAAC,CAAC,CAAC;IACL;;ACQA,QAAM,IAAI,GAAS,UAAa,CAAS,EAAE,QAAmB,EAAA;IAAnB,IAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAmB,GAAA,QAAA,CAAA,EAAA;QAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB,EAAE;IACjC,QAAA,OAAO,EAAE,CAAC;SACX;QAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC5F,IAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAA,IAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAElE,IAAA,OAAO,KAAK,GAAG,MAAM,EAAE;YACrB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,QAAA,KAAK,EAAE,CAAC;SACT;IAED,IAAA,OAAO,MAAM,CAAC;IAChB;;ACxCM,QAAA,KAAK,GAAU;;ICsBrB,SAAS,aAAa,CAAC,KAAU,EAAA;QAC/B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;SAChC;IACD,IAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,IAAA,IAAI,KAAK,GAAG,gBAAgB,EAAE;IAC5B,QAAA,OAAO,gBAAgB,CAAC;SACzB;IACD,IAAA,IAAI,KAAK,GAAG,gBAAgB,EAAE;IAC5B,QAAA,OAAO,gBAAgB,CAAC;SACzB;IACD,IAAA,OAAO,KAAK,CAAC;IACf;;ACPM,QAAA,KAAK,GAAU,UAAqB,EAAgC,EAAA;QACxE,OAAO,YAAA;YAAC,IAAU,IAAA,GAAA,EAAA,CAAA;iBAAV,IAAU,EAAA,GAAA,CAAA,EAAV,EAAU,GAAA,SAAA,CAAA,MAAA,EAAV,EAAU,EAAA,EAAA;gBAAV,IAAU,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IAChB,QAAA,IAAI;IACF,YAAA,IAAM,MAAM,GAAG,EAAE,CAAI,KAAA,CAAA,KAAA,CAAA,EAAA,aAAA,CAAA,EAAA,EAAA,MAAA,CAAA,IAAI,UAAC,CAAC;IAC3B,YAAA,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;IACzB,gBAAA,OAAO,MAAM;yBACV,IAAI,CAAC,UAAC,GAAG,EAAA;IACR,oBAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrB,iBAAC,CAAC;yBACD,KAAK,CAAC,UAAC,GAAG,EAAA;IACT,oBAAA,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAChC,iBAAC,CAAC,CAAC;iBACN;IACD,YAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACvB;YAAC,OAAO,GAAG,EAAE;IACZ,YAAA,OAAO,CAAC,GAAY,EAAE,eAAe,CAAC,CAAC;aACxC;IACH,KAAC,CAAC;IACJ;;IClDA,IAAI,SAAS,GAAG,CAAC,CAAC;IAGlB,IAAM,aAAa,GAAG,GAAG,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAmBtE,SAAS,QAAQ,CAAC,MAAsB,EAAA;IAAtB,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAsB,GAAA,aAAA,CAAA,EAAA;IACtC,IAAA,OAAO,EAAE,GAAG,MAAM,GAAG,EAAE,SAAS,CAAC;IACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[113]}
1
+ {"version":3,"file":"ut2.js","sources":["../src/internals/native.ts","../src/isArray.ts","../src/isObjectLike.ts","../src/isObject.ts","../src/internals/getTag.ts","../src/isSymbol.ts","../src/toNumber.ts","../src/toInteger.ts","../src/toLength.ts","../src/chunk.ts","../src/compact.ts","../src/eq.ts","../src/identity.ts","../src/internals/createIteratee.ts","../src/difference.ts","../src/fromPairs.ts","../src/intersection.ts","../src/move.ts","../src/isFunction.ts","../src/isLength.ts","../src/isArrayLike.ts","../src/nth.ts","../src/toFinite.ts","../src/randomInt.ts","../src/shuffle.ts","../src/uniq.ts","../src/union.ts","../src/isArrayLikeObject.ts","../src/unzip.ts","../src/xor.ts","../src/zip.ts","../src/internals/getSymbols.ts","../src/allKeys.ts","../src/internals/createForEach.ts","../src/forEach.ts","../src/countBy.ts","../src/every.ts","../src/find.ts","../src/filter.ts","../src/forEachRight.ts","../src/groupBy.ts","../src/keyBy.ts","../src/isNumber.ts","../src/isNil.ts","../src/toString.ts","../src/internals/compare.ts","../src/orderBy.ts","../src/map.ts","../src/partition.ts","../src/internals/createReduce.ts","../src/reduce.ts","../src/reduceRight.ts","../src/some.ts","../src/defaultTo.ts","../src/internals/helpers.ts","../src/after.ts","../src/before.ts","../src/isUndefined.ts","../src/curry.ts","../src/internals/baseDebounce.ts","../src/debounce.ts","../src/delay.ts","../src/negate.ts","../src/once.ts","../src/partial.ts","../src/throttle.ts","../src/isArguments.ts","../src/internals/nodeUtil.ts","../src/isArrayBuffer.ts","../src/isBigInt.ts","../src/isBlob.ts","../src/isBoolean.ts","../src/isBuffer.ts","../src/internals/getTagWithBugfix.ts","../src/isDataView.ts","../src/isDate.ts","../src/isPlainObject.ts","../src/isElement.ts","../src/isEmpty.ts","../src/isTypedArray.ts","../src/internals/isEqualDeep.ts","../src/isEqual.ts","../src/isError.ts","../src/isFile.ts","../src/internals/root.ts","../src/isFinite.ts","../src/isInteger.ts","../src/isMap.ts","../src/isMatch.ts","../src/isNaN.ts","../src/isNull.ts","../src/isPromiseLike.ts","../src/isRegExp.ts","../src/isSafeInteger.ts","../src/isSet.ts","../src/isString.ts","../src/isWeakMap.ts","../src/isWeakSet.ts","../src/isWindow.ts","../src/internals/decimalAdjust.ts","../src/ceil.ts","../src/floor.ts","../src/internals/comparator.ts","../src/internals/createExtremum.ts","../src/max.ts","../src/min.ts","../src/round.ts","../src/clamp.ts","../src/inRange.ts","../src/random.ts","../src/internals/getKeysIn.ts","../src/internals/getSymbolsIn.ts","../src/allKeysIn.ts","../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.8.0_typescript@5.5.2/node_modules/tslib/tslib.es6.js","../src/findKey.ts","../src/invert.ts","../src/keys.ts","../src/keysIn.ts","../src/merge.ts","../src/mergeObject.ts","../src/castArray.ts","../src/omit.ts","../src/pickBy.ts","../src/omitBy.ts","../src/pick.ts","../src/words.ts","../src/internals/splitCaseWords.ts","../src/internals/createCaseFirst.ts","../src/upperFirst.ts","../src/camelCase.ts","../src/capitalize.ts","../src/escape.ts","../src/escapeRegExp.ts","../src/kebabCase.ts","../src/lowerCase.ts","../src/lowerFirst.ts","../src/pascalCase.ts","../src/snakeCase.ts","../src/unescape.ts","../src/upperCase.ts","../src/conformsTo.ts","../src/conforms.ts","../src/constant.ts","../src/gt.ts","../src/gte.ts","../src/guard.ts","../src/list.ts","../src/lt.ts","../src/lte.ts","../src/noop.ts","../src/nthArg.ts","../src/range.ts","../src/sleep.ts","../src/tryit.ts","../src/retry.ts","../src/times.ts","../src/toSafeInteger.ts","../src/uniqueId.ts"],"sourcesContent":["export const nativeUndefined = void 0;\nexport const stringUndefined = 'undefined';\nexport const stringObject = 'object';\n\nexport const objectProto = Object.prototype;\nexport const objectProtoToString = objectProto.toString;\nexport const objectProtoHasOwnProperty = objectProto.hasOwnProperty;\nexport const objectProtoPropertyIsEnumerable = objectProto.propertyIsEnumerable;\n\nexport const objectGetOwnPropertySymbols = Object.getOwnPropertySymbols;\nexport const objectGetPrototypeOf = Object.getPrototypeOf;\nexport const objectKeys = Object.keys;\n\nexport const functionProto = Function.prototype;\nexport const functionProtoToString = functionProto.toString;\n\nconst symbolExisted = typeof Symbol !== stringUndefined;\nexport const symbolProto = symbolExisted ? Symbol.prototype : nativeUndefined;\n\nexport const arrayProto = Array.prototype;\nexport const arrayProtoSlice = arrayProto.slice;\n\nexport const mathMin = Math.min;\nexport const mathMax = Math.max;\nexport const mathRandom = Math.random;\nexport const mathFloor = Math.floor;\nexport const mathCeil = Math.ceil;\nexport const mathAbs = Math.abs;\n\nexport const numberIsFinite = Number.isFinite;\nexport const numberIsInteger = Number.isInteger;\nexport const numberIsSafeInteger = Number.isSafeInteger;\n\nexport const globalThisExisted = typeof globalThis === stringObject && globalThis;\n// @ts-ignore\nexport const globalExisted = typeof global === stringObject && global;\nexport const selfExisted = typeof self === stringObject && self;\n\n/**\n * @summary 最大安全整数。\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER | MAX_SAFE_INTEGER}\n */\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\n/**\n * @summary 最小安全整数。\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER | MIN_SAFE_INTEGER}\n */\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n\n/**\n * @summary 最大数组长度 `Math.pow(2,32) - 1`。\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length | length}\n */\nexport const MAX_ARRAY_LENGTH = 4294967295;\n\nexport const bigIntTag = '[object BigInt]';\nexport const numberTag = '[object Number]';\nexport const booleanTag = '[object Boolean]';\nexport const stringTag = '[object String]';\nexport const dateTag = '[object Date]';\nexport const regExpTag = '[object RegExp]';\nexport const symbolTag = '[object Symbol]';\nexport const errorTag = '[object Error]';\nexport const arrayBufferTag = '[object ArrayBuffer]';\nexport const argumentsTag = '[object Arguments]';\nexport const arrayTag = '[object Array]';\nexport const functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map((item) => '[object ' + item + ']');\nexport const weakSetTag = '[object WeakSet]';\nexport const blobTag = '[object Blob]';\nexport const fileTag = '[object File]';\nexport const domExceptionTag = '[object DOMException]';\n\nexport const objectTag = '[object Object]';\nexport const dataViewTag = '[object DataView]';\nexport const mapTag = '[object Map]';\nexport const promiseTag = '[object Promise]';\nexport const setTag = '[object Set]';\nexport const weakMapTag = '[object WeakMap]';\nexport const windowTag = '[object Window]';\n","/**\n * 检查值是否为 `Array` 对象。\n *\n * @alias module:Language.isArray\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `Array` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArray([1, 2, 3]); // true\n *\n * isArray(document.body.children); // true\n *\n * isArray('abc'); // false\n *\n * isArray(1); // false\n *\n * isArray(()=>{}); // false\n *\n */\nfunction isArray(value: any): value is Array<any> {\n return Array.isArray(value);\n}\n\nexport default isArray;\n","/**\n * 检查值是否为类对象。\n *\n * 如果一个值不为 `null` 并且 `typeof` 结果为 `object`,则该值是类对象。\n *\n * @alias module:Language.isObjectLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isObjectLike({}); // true\n *\n * isObjectLike([1,2,3]); // true\n *\n * isObjectLike(()=>{}); // false\n *\n * isObjectLike(null); // false\n *\n */\nfunction isObjectLike(value: any): value is object {\n return value !== null && typeof value === 'object';\n}\n\nexport default isObjectLike;\n","import { FunctionAny } from './internals/types';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为对象。(例如,数组、函数、对象、正则表达式、new Number(0) 和 new String(''))。\n *\n * @alias module:Language.isObject\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/#sec-ecmascript-language-types | language type}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isObject({}); // true\n *\n * isObject([1,2,3]); // true\n *\n * isObject(()=>{}); // true\n *\n * isObject(null); // false\n *\n */\nfunction isObject(value: any): value is object | FunctionAny {\n return typeof value === 'function' || isObjectLike(value);\n}\n\nexport default isObject;\n","import { objectProtoToString } from './native';\n\n/**\n * 获取值的 `Object.prototype.toString`。\n *\n * @private\n * @param value 要查询的值\n * @returns 对象名称\n */\nfunction getTag(value: any) {\n return objectProtoToString.call(value);\n}\n\nexport default getTag;\n","import getTag from './internals/getTag';\nimport { symbolTag } from './internals/native';\n\n/**\n * 检查值是否为 `Symbol` 类型或对象。\n *\n * @alias module:Language.isSymbol\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Symbol` 类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSymbol(Symbol()); // true\n *\n * isSymbol(Symbol.iterator); // true\n *\n * isSymbol(\"abc\"); // false\n *\n */\nfunction isSymbol(value: any): value is symbol {\n return typeof value === 'symbol' || getTag(value) === symbolTag;\n}\n\nexport default isSymbol;\n","import isObject from './isObject';\nimport isSymbol from './isSymbol';\n\nconst reIsBinary = /^0b[01]+$/i;\n\nconst reIsOctal = /^0o[0-7]+$/i;\n\n// Number('-0x1a2b3c') // NaN\n// parseInt('-0x1a2b3c') // -1715004\n// 统一处理为 NaN\nconst reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/**\n * 转换 `value` 为数字。\n *\n * @alias module:Util.toNumber\n * @since 1.0.0\n * @param {*} value 要处理的值。\n * @returns {number} 转换后的数字。\n * @example\n *\n * toNumber(3.2); // 3.2\n *\n * toNumber('3.2'); // 3.2\n *\n * toNumber(-0); // -0\n *\n * toNumber('-0'); // -0\n *\n * toNumber('0'); // 0\n *\n * toNumber(NaN); // NaN\n *\n * toNumber(Infinity); // Infinity\n *\n * toNumber(-Infinity); // -Infinity\n *\n */\nfunction toNumber(value: any): number {\n if (typeof value === 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NaN;\n }\n if (isObject(value)) {\n value = Number(value);\n }\n if (typeof value !== 'string') {\n return value === 0 ? value : +value;\n }\n value = value.trim();\n const isBinary = reIsBinary.test(value);\n\n return isBinary || reIsOctal.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NaN : +value;\n}\n\nexport default toNumber;\n","import toNumber from './toNumber';\n\n/**\n * 转换 `value` 为一个整数。\n *\n * 注意: 这个方法基于 [ToIntegerOrInfinity](https://tc39.es/ecma262/#sec-tointegerorinfinity) ,区别在于 `-0` 会返回 `-0`。\n *\n * @alias module:Util.toInteger\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toInteger(3.2); // 3\n *\n * toInteger('3.2'); // 3\n *\n * toInteger(-0); // -0\n *\n * toInteger('-0'); // -0\n *\n * toInteger('0'); // 0\n *\n * toInteger(NaN); // 0\n *\n * toInteger(Infinity); // Infinity\n *\n * toInteger(-Infinity); // -Infinity\n *\n */\nfunction toInteger(value: any) {\n const result = toNumber(value);\n\n // NaN -0 +0 0 Infinity -Infinity\n if (!result || result === Infinity || result === -Infinity) {\n return result === result ? result : 0;\n }\n const remainder = result % 1;\n return remainder ? result - remainder : result;\n}\n\nexport default toInteger;\n","import { MAX_ARRAY_LENGTH } from './internals/native';\nimport toInteger from './toInteger';\n\n/**\n * 转换 `value` 为数组对象的长度整数。\n *\n * @alias module:Util.toLength\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length | length}\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toLength(3.2); // 3\n *\n * toLength('3.2'); // 3\n *\n * toLength(-0); // 0\n *\n * toLength('-0'); // 0\n *\n * toLength('0'); // 0\n *\n * toLength(NaN); // 0\n *\n * toLength(Infinity); // 4294967295\n *\n * toLength(-Infinity); // 0\n *\n */\nfunction toLength(value: any): number {\n value = toInteger(value);\n if (!value) {\n return 0;\n }\n if (value < 0) {\n return 0;\n }\n if (value > MAX_ARRAY_LENGTH) {\n return MAX_ARRAY_LENGTH;\n }\n return value;\n}\n\nexport default toLength;\n","import { mathCeil } from './internals/native';\nimport isArray from './isArray';\nimport toLength from './toLength';\n\n/**\n * 将数组拆分成多个 `size` 长度的区块,并将这些区块组成一个新数组。\n *\n * 如果数组无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。\n *\n * @alias module:Array.chunk\n * @since 1.0.0\n * @param {Array} array 要处理的数组。\n * @param {number} [size=1] 每个数组区块的长度。默认 `1`。\n * @returns {Array} 拆分区块的新数组。\n * @example\n *\n * const array = ['a', 'b', 'c', 'd'];\n *\n * chunk(array, 2); // [['a', 'b'], ['c', 'd']]\n *\n * chunk(array, 3); // [['a', 'b', 'c'], ['d']]\n *\n */\nfunction chunk<T>(array: T[], size = 1) {\n size = toLength(size);\n if (!isArray(array) || size < 1) {\n return [];\n }\n\n const length = array.length;\n const result: T[][] = Array(mathCeil(length / size));\n let resIndex = 0,\n index = 0;\n\n while (index < length) {\n result[resIndex++] = array.slice(index, (index += size));\n }\n\n return result;\n}\n\nexport default chunk;\n","import isArray from './isArray';\n\n/**\n * 创建一个新数组,包含原数组中所有的非假值元素。\n *\n * 例如 `false` `null` `0` `\"\"` `undefined` `NaN` 都被认为是假值。\n *\n * @alias module:Array.compact\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy | Falsy}\n * @param {Array} array 待处理的数组。\n * @returns {Array} 过滤掉假值的新数组。\n * @example\n *\n * compact([0, 1, false, '', 2]); // [1, 2]\n *\n */\nfunction compact<T>(array: T[]) {\n return isArray(array) ? array.filter((item) => !!item) : [];\n}\n\nexport default compact;\n","/**\n * 检查两个值是否相等。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Util.eq\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness | JavaScript 中的相等性判断}\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n * @example\n *\n * eq(-0, 0); // true\n *\n * eq(1, 1); // true\n *\n * eq(NaN, NaN); // true\n *\n * eq('a', 'a'); // true\n *\n * const object = {a: 1};\n *\n * eq(object, {a: 1}); // false\n *\n * eq(object, object); // true\n *\n * eq(-0, 0, true); // false\n *\n */\nfunction eq(value: any, other: any, strictCheck = false) {\n if (value === other) {\n return strictCheck ? value !== 0 || 1 / value === 1 / other : true;\n }\n return value !== value && other !== other;\n}\n\nexport default eq;\n","/**\n * 返回第一个参数。\n *\n * @alias module:Util.identity\n * @since 1.0.0\n * @param {*} value 任意值。\n * @returns 返回 `value`。\n * @example\n *\n * const obj = { a: 1, b: 2 };\n *\n * console.log(identity(obj) === obj); // true\n *\n */\n\nfunction identity<T>(value?: T): T;\nfunction identity<T>(value: T, ...args: any[]): T;\nfunction identity<T>(value?: T) {\n return value;\n}\n\nexport default identity;\n","import identity from '../identity';\nimport isSymbol from '../isSymbol';\nimport { IterateeParam } from './types';\n\n/**\n * 创建迭代函数。\n *\n * @private\n * @param {Function} iteratee 迭代函数或对象属性。\n * @returns {Function} 如果参数为函数,返回该函数,否则包装一个返回对象属性的函数。\n */\nfunction createIteratee<T>(iteratee?: IterateeParam<T>) {\n if (typeof iteratee === 'function') {\n return iteratee;\n }\n\n // 属性键值可能为 Symbol, string, number\n if (typeof iteratee === 'string' || typeof iteratee === 'number' || isSymbol(iteratee)) {\n return (value: any) => value[iteratee];\n }\n return identity;\n}\n\nexport default createIteratee;\n","import eq from './eq';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建一个 `array` 排除 `values` 值的新数组。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Array.difference\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} values 排除的值。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 过滤值后的新数组。\n * @example\n *\n * difference([3, 1, 2], [4, 2]); // [3, 1]\n *\n * difference([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); // [3.1, 1.3]\n *\n * difference([{x: 2}, {x: 1}], [{x: 1}], item=>item.x); // [{x: 2}]\n *\n * // 如果迭代元素为对象,迭代函数可以直接写入对象属性。\n * difference([{x: 2}, {x: 1}], [{x: 1}], 'x'); // [{x: 2}]\n *\n * difference([-0, 0], [0]); // []\n *\n * difference([-0, 0], [0], undefined, true); // [-0]\n *\n */\nfunction difference<T>(array: T[], values: any[], iteratee: IterateeParam<T> = identity, strictCheck = false) {\n if (!isArray(array)) {\n return [];\n }\n\n if (!isArray(values)) {\n return array;\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n return array.filter((item) => {\n const current = internalIteratee(item);\n // 注意此处不能使用 `find`,如果值存在 `undefined` 不好处理。\n // 为什么不直接使用 `includes` (includes 比较用的是 sameValueZero),因为要支持 `iteratee`。\n return values.findIndex((value) => eq(internalIteratee(value), current, strictCheck)) === -1;\n });\n}\n\nexport default difference;\n","import isArray from './isArray';\n\ninterface FromPairs {\n <P extends string | number | symbol, V = any>(array: [P, V][]): Record<P, V>;\n <P extends string | number | symbol>(array: any[][]): Record<P, any>;\n}\n\n/**\n * 将键值对数组转为对象。\n *\n * 与 [Object.entries](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) 正好相反。\n *\n * @deprecated 即将废弃,请使用 `Object.fromEntries` 替代。\n * @private\n * @alias module:Array.fromPairs\n * @since 1.0.0\n * @param {Array} array 键值对数组。\n * @returns {Object} 新对象。\n * @example\n *\n * fromPairs([['foo', 'bar'], ['baz', 42]]); // {foo: 'bar', baz: 42}\n *\n */\nconst fromPairs: FromPairs = function <P extends string | number | symbol, V>(array: any[][]) {\n // @ts-ignore\n const result: Record<P, V> = {};\n\n if (!isArray(array)) {\n return result;\n }\n\n array.forEach((item) => {\n result[item[0] as P] = item[1];\n });\n\n return result;\n};\n\nexport default fromPairs;\n","import eq from './eq';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建唯一值的数组,该数组包含两个数组参数都包含的元素(交集)。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Array.intersection\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} other 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 包含所有传入数组交集元素的新数组。\n * @example\n *\n * intersection([2, 1, 1], [4, 2]); // [2]\n *\n * intersection([2.1, 1.2], [4.3, 2.4], Math.floor); // [2.1]\n *\n * intersection([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 1}]\n *\n * // 迭代函数可以直接写入属性。\n * intersection([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 1}]\n *\n * intersection([-0, 0], [0]); // [-0]\n *\n * intersection([-0, 0], [0], undefined, true); // [0]\n *\n */\nfunction intersection<T>(array: T[], other: T[], iteratee: IterateeParam<T> = identity, strictCheck = false) {\n if (!isArray(array) || !isArray(other)) {\n return [];\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n const caches: any[] = [];\n return array.filter((item) => {\n const current = internalIteratee(item);\n\n if (other.findIndex((value) => eq(internalIteratee(value), current, strictCheck)) !== -1 && !caches.includes(current)) {\n caches.push(current);\n return true;\n }\n return false;\n });\n}\n\nexport default intersection;\n","/**\n * 将数组 `from` 位置的元素移至 `to` 位置,返回处理后的原数组。\n *\n * @alias module:Array.move\n * @since 1.10.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | splice}\n * @param {Array} array 要处理的数组。\n * @param {number} from 要移动的元素索引。\n * @param {number} to 要移动目标位置的元素索引。\n * @returns {*} 处理后的原数组。\n * @example\n *\n * const arr = ['a', 'b', 'c', 'd'];\n *\n * move(arr, 0, 1); // ['b', 'a', 'c', 'd']\n *\n * // 此时 arr 已经变为 ['b', 'a', 'c', 'd']\n * move(arr, -2, 0); // ['c', 'b', 'a', 'd']\n *\n */\nfunction move<T>(array: T[], from: number, to: number) {\n array.splice(to, 0, array.splice(from, 1)[0]);\n return array;\n}\n\nexport default move;\n","import getTag from './internals/getTag';\nimport { functionTags } from './internals/native';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 检查值是否为 `Function` 对象。\n *\n * `Function` `AsyncFunction` `GeneratorFunction` `Proxy` 都将返回 `true`。\n *\n * @alias module:Language.isFunction\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Function` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFunction(()=>{})); // true\n *\n * isFunction(/x/); // false\n *\n */\nfunction isFunction(value: any): value is FunctionAny {\n if (typeof value === 'function') {\n return true;\n }\n const tag = getTag(value);\n return functionTags.some((item) => item === tag);\n}\n\nexport default isFunction;\n","import { MAX_SAFE_INTEGER } from './internals/native';\n\n/**\n * 检查值是否为有效的类数组长度。\n *\n * @alias module:Language.isLength\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/#sec-tolength | ToLength}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为有效的类数组长度,返回 `true`,否则返回 `false`。\n * @example\n *\n * isLength(3); // true\n *\n * isLength('3'); // false\n *\n * isLength(Number.Min_VALUE); // false\n *\n * isLength(Number.Infinity); // false\n *\n */\nfunction isLength(value: any): value is number {\n return typeof value === 'number' && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction';\nimport isLength from './isLength';\n\n/**\n * 检查值是否为类数组。\n *\n * 如果一个值不是函数并且其 `value.length` 是大于或等于 `0` 且小于或等于 `Number.MAX_SAFE_INTEGER` 的整数,则该值被视为类数组。\n *\n * @alias module:Language.isArrayLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类数组,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayLike([1, 2, 3]); // true\n *\n * isArrayLike(document.body.children); // true\n *\n * isArrayLike('abc'); // true\n *\n * isArrayLike(()=>{}); // false\n *\n */\nfunction isArrayLike(value: any): value is ArrayLike<any> {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import { nativeUndefined } from './internals/native';\nimport isArrayLike from './isArrayLike';\n\ninterface Nth {\n (array: [], n?: number): undefined;\n <T>(array: ArrayLike<T>, n?: number): T;\n}\n\n/**\n * 获取类数组的第 `n` 个元素。如果 `n` 为负数,则返回从数组结尾开始的第 `n` 个元素。\n *\n * 同 `Array.prototype.at` 方法。\n *\n * @alias module:Array.nth\n * @since 1.0.0\n * @param {ArrayLike} array 要查询的类数组。\n * @param {number} [n=0] 要返回元素的索引值。默认 `0`。\n * @returns {*} 类数组的第 `n` 个元素。\n * @example\n *\n * const arr = ['a', 'b', 'c', 'd'];\n *\n * nth(arr, 1); // 'b'\n *\n * nth(arr, -2); // 'c'\n *\n * nth('abcd', 1); // 'b'\n *\n */\nconst nth: Nth = function <T = any>(array: ArrayLike<T>, n = 0) {\n if (!isArrayLike(array)) {\n return nativeUndefined;\n }\n\n n += n < 0 ? array.length : 0;\n return array[n];\n};\n\nexport default nth;\n","import toNumber from './toNumber';\n\nconst MAX_VALUE = 1.7976931348623157e308;\n\n/**\n * 转换 `value` 为一个有限数字。\n *\n * @alias module:Util.toFinite\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的数字。\n * @example\n *\n * toFinite(3.2); // 3.2\n *\n * toFinite('3.2'); // 3.2\n *\n * toFinite(-0); // -0\n *\n * toFinite('-0'); // -0\n *\n * toFinite('0'); // 0\n *\n * toFinite(NaN); // 0\n *\n * toFinite(Infinity); // 1.7976931348623157e+308\n *\n * toFinite(-Infinity); // -1.7976931348623157e+308\n *\n */\nfunction toFinite(value: any): number {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === Infinity || value === -Infinity) {\n const sign = value < 0 ? -1 : 1;\n return sign * MAX_VALUE;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import { mathCeil, mathFloor, mathMax, mathMin, mathRandom } from './internals/native';\nimport toFinite from './toFinite';\n\n/**\n * 产生一个包含 `lower` 与 `upper` 之间的随机整数。\n *\n * 如果参数非整数 `lower=Math.ceil(lower)` `upper=Math.floor(upper)`。如果 `lower` 大于 `upper` 会自动交换参数。\n *\n * @alias module:Number.randomInt\n * @since 1.0.0\n * @param {number} [lower=0] 下限。默认 `0`。\n * @param {number} [upper=1] 上限。默认 `1`。\n * @returns {number} 随机整数。\n * @example\n *\n * // 0 到 1 之间的整数\n * randomInt(); // 1\n *\n * // 2 到 4 之间的整数\n * randomInt(2, 4); // 4\n *\n * // 2 到 4 之间的整数\n * randomInt(4, 2); // 3\n *\n * // 区间只有一个整数\n * randomInt(1.2, 2.4); // 2\n *\n */\nfunction randomInt(lower = 0, upper = 1) {\n lower = toFinite(lower);\n upper = toFinite(upper);\n let min = mathCeil(mathMin(lower, upper) || 0);\n let max = mathFloor(mathMax(lower, upper) || 0);\n\n // 如果两个值都是整数位相同,浮点数不同, 大小值的可能会互换。(如 1.2, 1.3)\n if (min > max) {\n // [min, max] = [max, min]\n const temp = min;\n min = max;\n max = temp;\n }\n\n return mathFloor(min + mathRandom() * (max - min + 1));\n}\n\nexport default randomInt;\n","import isArray from './isArray';\nimport randomInt from './randomInt';\n\n/**\n * 创建一个被打乱的数组。使用 [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) 版本。\n *\n * @alias module:Array.shuffle\n * @since 1.0.0\n * @param {Array} array 要打乱的数组。\n * @returns {Array} 打乱的数组。\n * @example\n *\n * shuffle([1, 2, 3, 4]); // [2, 4, 3, 1]\n *\n * shuffle([1, 2, 3, 4]); // [3, 2, 1, 4]\n *\n */\nfunction shuffle<T>(array: T[]) {\n if (!isArray(array) || array.length < 1) {\n return [];\n }\n\n const result = array.slice();\n const length = result.length;\n const lastIndex = length - 1;\n let index = -1;\n\n while (++index < length) {\n const rand = randomInt(index, lastIndex);\n const value = result[rand];\n result[rand] = result[index];\n result[index] = value;\n }\n\n return result;\n}\n\nexport default shuffle;\n","import eq from './eq';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport isArray from './isArray';\n\n/**\n * 创建一个去重后的数组副本。只有第一次出现的元素才会被保留。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Array.uniq\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee] 迭代函数,调用每个元素。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 去重后的新数组。\n * @example\n *\n * uniq([2, 1, 2]); // [2, 1]\n *\n * uniq(['a', NaN, 2, 1, NaN, 'a', 1]); // ['a', NaN, 2, 1]\n *\n * uniq([{x: 1}, {x: 2}, {x: 1}], item=>item.x); // [{x: 1}, {x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * uniq([{x: 1}, {x: 2}, {x: 1}], 'x'); // [{x: 1}, {x: 2}]\n *\n * uniq([-0, 0]); // [-0]\n *\n * uniq([-0, 0], undefined, true); // [-0, 0]\n *\n */\nfunction uniq<T>(array: T[], iteratee?: IterateeParam<T>, strickCheck = false) {\n if (!isArray(array)) {\n return [];\n }\n\n const internalIteratee = createIteratee<T>(iteratee);\n return array.filter((value, index, arr) => {\n const current = internalIteratee(value);\n return arr.findIndex((item) => eq(internalIteratee(item), current, strickCheck)) === index;\n });\n}\n\nexport default uniq;\n","import { IterateeParam } from './internals/types';\nimport isArray from './isArray';\nimport uniq from './uniq';\n\n/**\n * 创建一个按顺序排列的唯一值的数组(并集)。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。与 [`uniq`](#.uniq) 相似。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Array.union\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} [other=[]] 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee] 迭代函数,调用每个元素。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 新的联合数组。\n * @example\n *\n * union([2], [1, 2]); // [2, 1]\n *\n * union([2.1], [1.2, 2.3], Math.floor); // [2.1, 1.2]\n *\n * union([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 1}, {x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * union([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 1}, {x: 2}]\n *\n * union([-0, 0], [-0]); // [-0]\n *\n * union([-0, 0], [-0], undefined, true); // [-0, 0]\n *\n */\nfunction union<T>(array: T[], other: T[] = [], iteratee?: IterateeParam<T>, strickCheck = false) {\n array = isArray(array) ? array : [];\n other = isArray(other) ? other : [];\n return uniq(array.concat(other), iteratee, strickCheck);\n}\n\nexport default union;\n","import isArrayLike from './isArrayLike';\nimport isObjectLike from './isObjectLike';\n\ntype ArrayLikeObject = Array<any> | { length: number; [x: string | symbol]: any };\n\n/**\n * 检查值是否为类数组对象。\n *\n * @alias module:Language.isArrayLikeObject\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为类数组对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayLikeObject([1, 2, 3]); // true\n *\n * isArrayLikeObject(document.body.children); // true\n *\n * isArrayLikeObject('abc'); // false\n *\n * isArrayLikeObject(()=>{}); // false\n *\n */\nfunction isArrayLikeObject(value: any): value is ArrayLikeObject {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import { mathMax } from './internals/native';\nimport isArray from './isArray';\nimport isArrayLikeObject from './isArrayLikeObject';\n\n/**\n * 与 [`zip`](#.zip) 类似,除了它接受分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(返回数组的第一个元素包含所有的输入数组的第一元素,第二个元素包含了所有的输入数组的第二元素,依此类推。)。\n *\n * @alias module:Array.unzip\n * @since 1.0.0\n * @param {Array} array 要处理的分组元素数组。\n * @returns {Array} 重组元素的新数组。\n * @example\n *\n * unzip([['barney', 'fred'], [36, 40]]); // [['barney', 36], ['fred', 40]]\n *\n * unzip([['barney', 36], ['fred', 40]]); // [['barney', 'fred'], [36, 40]]\n *\n */\nfunction unzip(array: any[][]) {\n if (!isArray(array) || array.length === 0) {\n return [];\n }\n let length = 0;\n array = array.filter((group) => {\n if (isArrayLikeObject(group)) {\n length = mathMax(group.length, length);\n return true;\n }\n return false;\n });\n const result = Array(length);\n let index = -1;\n while (++index < length) {\n const item = array.map((group) => group[index]);\n result[index] = item;\n }\n return result;\n}\n\nexport default unzip;\n","import difference from './difference';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { IterateeParam } from './internals/types';\nimport intersection from './intersection';\nimport isArray from './isArray';\nimport union from './union';\nimport uniq from './uniq';\n\n/**\n * 创建一个唯一值的数组(并集-交集),该数组包含两个数组参数中不相同的元素。如果传入迭代函数,会调用数组的每个元素以产生唯一性计算的标准。\n *\n * `iteratee` 调用时会传入一个参数 `value`。\n *\n * 默认使用了 [`SameValueZero`](https://tc39.es/ecma262/#sec-samevaluezero) 做等值比较。如果 `strictCheck=true` 将使用 [`SameValue`](https://tc39.es/ecma262/#sec-samevalue) 做等值比较。\n *\n * @alias module:Array.xor\n * @since 1.0.0\n * @param {Array} array 要检查的数组。\n * @param {Array} [other=[]] 另一个要检查的数组。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,调用每个元素。默认 `identity`。\n * @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。\n * @returns {Array} 过滤值后的新数组。\n * @example\n *\n * xor([2, 1, 1], [4, 2]); // [1, 4]\n *\n * xor([2.1, 1.2], [4.3, 2.4], Math.floor); // [1.2, 4.3]\n *\n * xor([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], item=>item.x); // [{x: 2}]\n *\n * // 迭代函数可以直接写入属性。\n * xor([{x: 1}, {x: 1}, {x: 2}, {x: 2}], [{x: 1}], 'x'); // [{x: 2}]\n *\n * xor([-0, 0],[0]); // []\n *\n * xor([-0, 0],[0], undefined, true); // [-0]\n *\n */\nfunction xor<T>(array: T[], other: T[] = [], iteratee: IterateeParam<T> = identity, strickCheck = false) {\n if (!isArray(array) && !isArray(other)) {\n return [];\n }\n const internalIteratee = createIteratee<T>(iteratee);\n if (!isArray(other)) {\n return uniq(array, internalIteratee, strickCheck);\n }\n if (!isArray(array)) {\n return uniq(other, internalIteratee, strickCheck);\n }\n return difference(union(array, other, internalIteratee, strickCheck), intersection(array, other, internalIteratee, strickCheck), internalIteratee, strickCheck);\n}\n\nexport default xor;\n","import unzip from './unzip';\n\n/**\n * 创建一个数组,数组的第一个元素包含所有给定数组的第一元素,第二个元素包含了所有给定数组的第二元素,依此类推。\n *\n * @alias module:Array.zip\n * @since 1.0.0\n * @param {...Array} array 要处理的分组元素数组。\n * @returns {Array} 重组元素的新数组。\n * @example\n *\n * zip(['barney', 'fred'], [36, 40]); // [['barney', 36], ['fred', 40]]\n *\n */\nfunction zip(...arrays: any[][]) {\n return unzip(arrays);\n}\n\nexport default zip;\n","import { objectGetOwnPropertySymbols, objectProtoPropertyIsEnumerable } from './native';\n\n/**\n * 创建一个数组,包含自身的可枚举 `symbol` 属性。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {Symbol[]} 自身可枚举的 `symbol` 属性数组\n */\nfunction getSymbols(object: object) {\n if (!objectGetOwnPropertySymbols || object === null) {\n return [];\n }\n\n return objectGetOwnPropertySymbols(object).filter((item) => objectProtoPropertyIsEnumerable.call(object, item));\n}\n\nexport default getSymbols;\n","import getSymbols from './internals/getSymbols';\nimport { objectKeys } from './internals/native';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身的可枚举属性(包含 `Symbol` 属性)。\n *\n * 同 `Object.keys` + `Object.getOwnPropertySymbols`。\n *\n * 注意:`Symbol` 键属性在字符串属性后面。\n *\n * @alias module:Object.allKeys\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {Array<string|symbol>} 对象自身的可枚举属性(包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * allKeys(new Foo); // ['a', Symbol(b)]\n *\n */\nfunction allKeys(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return (objectKeys(object) as (string | symbol)[]).concat(getSymbols(object));\n}\n\nexport default allKeys;\n","import allKeys from '../allKeys';\nimport identity from '../identity';\nimport isArrayLike from '../isArrayLike';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './types';\n\nexport interface ForEach {\n <T>(collection: WithNullable<T[]>, iteratee?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, iteratee?: StringIterator<any>): string;\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ArrayLikeIterator<T, any>): ArrayLike<T>;\n <T extends object>(collection: WithNullable<T>, iteratee?: ObjectIterator<T, any>): T;\n}\n\n/**\n * 创建迭代集合方法\n *\n * @private\n * @param dir 迭代方向\n * @returns 迭代集合方法\n */\nfunction createForEach(dir: 1 | -1) {\n const forEach: ForEach = function (collection: any, iteratee: any = identity) {\n const _keys = !isArrayLike(collection) && allKeys(collection);\n const len = (_keys || collection).length;\n let i = dir > 0 ? 0 : len - 1;\n\n while (i >= 0 && i < len) {\n const currentKey = _keys ? _keys[i] : i;\n if (iteratee(collection[currentKey], currentKey, collection) === false) {\n break;\n }\n i += dir;\n }\n\n return collection;\n };\n\n return forEach;\n}\n\nexport default createForEach;\n","import createForEach from './internals/createForEach';\n\n/**\n * 迭代集合元素,为每个元素调用 `iteratee`。\n *\n * `iteratee` 函数可以通过显式返回 `false` 来提前退出迭代。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.forEach\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 迭代集合本身。\n * @example\n *\n * forEach([1,2,3], function(item){\n * console.log(item);\n * });\n * // 1\n * // 2\n * // 3\n *\n * forEach({a: 1, b: 2}, function(value, key){\n * console.log(value, key);\n * });\n * // 1 'a'\n * // 2 'b'\n *\n */\nconst forEach = createForEach(1);\n\nexport default forEach;\n","import forEach from './forEach';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface CountBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, number>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, number>;\n <T extends object>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, number>;\n <T extends object>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, number>;\n}\n\n/**\n * 创建一个组成对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果,每个 `key` 对应的值是 `iteratee` 返回该 `key` 的次数。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.countBy\n * @since 1.0.0\n * @param {ArrayLike<any> | object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。\n * @returns {Object} 组成集合对象。\n * @example\n *\n * countBy([6, 4, 6]); // {'6': 2, '4': 1}\n *\n * countBy([6.1, 4.2, 6.3], Math.floor); // {'6': 2, '4': 1}\n *\n * countBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': 2, '4': 1}\n *\n * // 迭代函数可以直接写入属性。\n * countBy(['one', 'two', 'three'], 'length'); // {'3': 2, '5': 1}\n *\n */\nconst countBy: CountBy = function <T>(collection: any, iteratee?: any) {\n const result: Record<PropertyName, number> = {};\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n if (key in result) {\n ++result[key];\n } else {\n result[key] = 1;\n }\n });\n return result;\n};\n\nexport default countBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Every {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,如果全部元素都通过 `predicate` 返回真值,则返回 `true`,否则停止迭代并返回 `false`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.every\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {boolean} 如果全部元素都通过 `predicate` 测试,则返回 `true`,否则返回 `false`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * every(arr, item => item % 2 === 0); // false\n * every(arr); // true\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * every(obj, item => item > 1); // false\n * every(obj, item => item > 0); // true\n */\nconst every: Every = function (collection: any, predicate: any = identity) {\n let result = true;\n forEach(collection, (item, index, arr) => {\n if (!predicate(item, index, arr)) {\n result = false;\n return false;\n }\n });\n return result;\n};\n\nexport default every;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Find {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T | undefined;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): string | undefined;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T | undefined;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): T[keyof T] | undefined;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,返回第一个通过 `predicate` 返回真值的元素(停止迭代),如果都不通过返回 `undefined`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.find\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 返回第一个通过 `predicate` 返回真值的元素,否则返回 `undefined`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * find(arr, item => item % 2 === 0); // 2\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * find(obj, item => item > 1); // 2\n */\nconst find: Find = function (collection: any, predicate: any = identity) {\n let result: any;\n forEach(collection, (item, index, arr) => {\n if (predicate(item, index, arr)) {\n result = item;\n return false;\n }\n });\n return result;\n};\n\nexport default find;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Filter {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, predicate?: StringIterator<any>): string[];\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): T[];\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): Array<T[keyof T]>;\n}\n\n/**\n * 过滤集合元素,为每个元素执行 `predicate` 函数,返回真值的元素将保留在结果数组中(不改变原值)。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @alias module:Collection.filter\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 返回新的过滤数组。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * filter(arr, item => item % 2 === 0); // [2, 4, 6]\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * filter(obj, item => item > 1); // [2, 3]\n */\nconst filter: Filter = function <T>(array: any, predicate: any = identity) {\n const results: T[] = [];\n forEach(array, (item, index) => {\n if (predicate(item, index, array)) {\n results.push(item);\n }\n });\n return results;\n};\n\nexport default filter;\n","import createForEach from './internals/createForEach';\n\n/**\n * 迭代集合元素(从右往左的顺序),为每个元素调用 `iteratee`。\n *\n * `iteratee` 函数可以通过显式返回 `false` 来提前退出迭代。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.forEachRight\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {ArrayLike<any> | Object} 迭代集合本身。\n * @example\n *\n * forEachRight([1,2,3], function(item){\n * console.log(item);\n * });\n * // 3\n * // 2\n * // 1\n *\n * forEachRight({a: 1, b: 2}, function(value, key){\n * console.log(value, key);\n * });\n * // 2 'b'\n * // 1 'a'\n *\n */\nconst forEachRight = createForEach(-1);\n\nexport default forEachRight;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, PropertyName, ObjectIterator } from './internals/types';\n\ninterface GroupBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, T[]>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, T[]>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, V[]>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, V[]>;\n}\n\n/**\n * 创建一个组成聚合对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果。分组值的顺序是由他们出现在 `collection` 的顺序确定的。每个键对应的值负责生成 `key` 的元素组成的数组。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @alias module:Collection.groupBy\n * @since 1.0.0\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。默认 `identity`。\n * @returns {Object} 组成聚合对象。\n * @example\n *\n * groupBy([6, 4, 6]); // {'6': [6, 6], '4': [4]}\n *\n * groupBy([6.1, 4.2, 6.3], Math.floor); // {'6': [6.1, 6.3], '4': [4.2]}\n *\n * groupBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': [{n: 6.1}, {n: 6.3}], '4': [{n: 4.2}]}\n *\n * // 迭代函数可以直接写入属性。\n * groupBy(['one', 'two', 'three'], 'length'); // {'3': ['one', 'two'], '5': ['three']}\n *\n */\nconst groupBy: GroupBy = function <T>(collection: any, iteratee: any = identity) {\n const result: Record<PropertyName, T[]> = {};\n\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n if (key in result) {\n result[key].push(item);\n } else {\n result[key] = [item];\n }\n });\n return result;\n};\n\nexport default groupBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface KeyBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | keyof T): Record<PropertyName, T>;\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, PropertyName> | PropertyName): Record<PropertyName, T>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, PropertyName> | keyof T): Record<PropertyName, V>;\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): Record<PropertyName, V>;\n}\n\n/**\n * 创建一个组成聚合对象, `key` 是经过 `iteratee` 执行处理 `collection` 中每个元素后返回的结果。每个 `key` 对应的值是生成 `key` 的最后一个元素。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.keyBy\n * @since 1.0.0\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol} [iteratee=identity] 迭代函数,用来转换键。默认 `identity`。\n * @returns {Object} 组成聚合对象。\n * @example\n *\n * keyBy([6, 4, 6]); // {'6': 6, '4': 4}\n *\n * keyBy([6.1, 4.2, 6.3], Math.floor); // {'6': 6.3, '4': 4.2}\n *\n * keyBy([{n: 6.1}, {n: 4.2}, {n: 6.3}], item=>Math.floor(item.n)); // {'6': {n: 6.3}, '4': {n: 4.2}}\n *\n * // 迭代函数可以直接写入属性。\n * keyBy(['one', 'two', 'three'], 'length'); // {'3': 'two', '5': 'three'}\n *\n */\nconst keyBy: KeyBy = function <T>(collection: any, iteratee: any = identity) {\n const result: Record<PropertyName, T> = {};\n\n const internalIteratee = createIteratee<T>(iteratee);\n forEach(collection, (item, index, arr) => {\n const key = internalIteratee(item, index, arr);\n result[key] = item;\n });\n return result;\n};\n\nexport default keyBy;\n","import getTag from './internals/getTag';\nimport { numberTag } from './internals/native';\n\n/**\n * 检查值是否为数字类型或对象。\n *\n * `Infinity` `-Infinity` `NaN` 都归类为数字。如果要排除,请使用 `isFinite` 方法。\n *\n * @alias module:Language.isNumber\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为数字类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNumber(1); // true\n *\n * isNumber(Infinity); // true\n *\n * isNumber(Number.MIN_VALUE); // true\n *\n * isNumber(NaN); // true\n *\n * isNumber(new Number(1)); // true\n *\n * isNumber('1'); // false\n *\n * isNumber(null); // false\n *\n */\nfunction isNumber(value: any): value is number {\n return typeof value === 'number' || getTag(value) === numberTag;\n}\n\nexport default isNumber;\n","/**\n * 检查值是否为 `undefined` 或 `null`。\n *\n * @alias module:Language.isNil\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `undefined` 或 `null`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNil(undefined); // true\n *\n * isNil(void 0); // true\n *\n * isNil(null); // true\n *\n * isNil(''); // false\n *\n * isNil('a'); // false\n *\n * isNil(1); // false\n */\nfunction isNil(value: any): value is undefined | null {\n return value == null;\n}\n\nexport default isNil;\n","import { nativeUndefined, symbolProto } from './internals/native';\nimport isArray from './isArray';\nimport isNil from './isNil';\nimport isSymbol from './isSymbol';\n\nconst symbolToString = symbolProto ? symbolProto.toString : nativeUndefined;\n\nfunction baseToString(value: any): string {\n if (typeof value === 'string') {\n return value;\n }\n if (isArray(value)) {\n return '' + value.map(baseToString);\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n const result = '' + value;\n return result === '0' && 1 / value === -Infinity ? '-0' : result;\n}\n\n/**\n * 转换 `value` 为字符串。`null` 和 `undefined` 将返回空字符串。`-0` 将被转换为 `\"-0\"`。\n *\n * @alias module:Util.toString\n * @since 1.0.0\n * @param {*} value 要处理的值。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * toString(null); // ''\n *\n * toString(-0); // '-0'\n *\n * // 数组中的 `null` `undefined` 返回 'null' 'undefined'\n * toString([undefined, null]); // 'undefined,null'\n *\n * toString('a'); // 'a'\n *\n * toString(3); // '3'\n *\n */\nfunction toString(value: any) {\n return isNil(value) ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isNumber from '../isNumber';\nimport isSymbol from '../isSymbol';\nimport toString from '../toString';\n\nfunction createCompare(dir: 1 | 0) {\n const asc = dir === 1;\n function wrapper(value: any, other: any) {\n const valueIsSymbol = isSymbol(value);\n const otherIsSymbol = isSymbol(other);\n const isNeedConvertString = !valueIsSymbol && !otherIsSymbol && !(isNumber(value) && isNumber(other));\n const _value = isNeedConvertString ? toString(value) : value;\n const _other = isNeedConvertString ? toString(other) : other;\n\n if (!otherIsSymbol && (valueIsSymbol || _value > _other)) {\n return asc ? 1 : -1;\n }\n if (!valueIsSymbol && (otherIsSymbol || _value < _other)) {\n return asc ? -1 : 1;\n }\n return 0;\n }\n return wrapper;\n}\n\nexport type CompareOrderData<T> = {\n criteria: any[];\n index: number;\n value: T;\n};\nexport type CompareOrderBase = 'asc' | 'desc';\nexport type CompareOrder = CompareOrderBase | ((a: any, b: any) => number);\n\nexport function compareMultiple<T>(object: CompareOrderData<T>, other: CompareOrderData<T>, orders: CompareOrder[]) {\n const objCriteria = object.criteria;\n const othCriteria = other.criteria;\n const length = objCriteria.length;\n let index = -1;\n\n while (++index < length) {\n const order = orders[index];\n const cmpFn = typeof order === 'function' ? order : order === 'desc' ? createCompare(0) : createCompare(1);\n const result = cmpFn(objCriteria[index], othCriteria[index]);\n if (result) {\n return result;\n }\n }\n\n return object.index - other.index;\n}\n","import identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { compareMultiple, CompareOrder, CompareOrderBase, CompareOrderData } from './internals/compare';\nimport isArray from './isArray';\nimport forEach from './forEach';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, IterateeParam, Many, ObjectIterator, PropertyName } from './internals/types';\nimport { nativeUndefined } from './internals/native';\n\ninterface OrderBy {\n <T extends object>(collection: CollectionList<T>, iteratee?: Many<ArrayLikeIterator<T, any> | keyof T>, orders?: Many<CompareOrder>): T[];\n <T>(collection: CollectionList<T>, iteratee?: Many<ArrayLikeIterator<T, any> | PropertyName>, orders?: Many<CompareOrder>): T[];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: Many<ObjectIterator<T, any> | keyof T>, orders?: Many<CompareOrder>): V[];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: Many<PropertyName>, orders?: Many<CompareOrder>): V[];\n}\n\n/**\n * 创建一个元素数组,以迭代函数处理的结果排序。如果没有指定排序,默认为升序排序。\n *\n * `asc` 升序, `desc` 降序,默认执行稳定排序,也就是说相同元素会保持原始排序。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.orderBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort | sort}\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol | Array} [iteratees] 排序的迭代函数。\n * @param {'asc' | 'desc' | Array} [orders] 迭代函数的排序顺序。\n * @returns {Array} 排序后的新数组。\n * @example\n *\n * const array = [2, 1, 3, 5, 4];\n *\n * orderBy(array);; // [1, 2, 3, 4, 5]\n *\n * orderBy(array, item=>item, 'desc');; // [5, 4, 3, 2, 1]\n *\n * const objects = [\n * { a: 'x', b: 3 },\n * { a: 'y', b: 4 },\n * { a: 'x', b: 1 },\n * { a: 'y', b: 2 }\n * ];\n *\n * orderBy(objects, 'b');\n * // [{ a: 'x', b: 1 },{ a: 'y', b: 2 },{ a: 'x', b: 3 },{ a: 'y', b: 4 }]\n *\n * // 迭代函数可以直接写入属性。\n * orderBy(objects, ['a', 'b'], ['asc', 'desc']);\n * // [{ a: 'x', b: 3 },{ a: 'x', b: 1 },{ a: 'y', b: 4 },{ a: 'y', b: 2 }]\n *\n */\nconst orderBy: OrderBy = function <T>(collection: any, iteratees?: any, orders?: Many<CompareOrder>) {\n const result: CompareOrderData<T>[] = [];\n\n iteratees = (isArray(iteratees) ? iteratees : iteratees !== nativeUndefined ? [iteratees] : [identity]) as IterateeParam<T>[];\n orders = (isArray(orders) ? orders : orders !== nativeUndefined ? [orders] : []) as CompareOrderBase[];\n\n let index = -1;\n forEach(collection, (item, key, arr) => {\n const criteria = (iteratees as IterateeParam<T>[]).map((iteratee) => createIteratee<T>(iteratee)(item, key, arr));\n result.push({\n criteria,\n index: ++index,\n value: item\n });\n });\n\n return result.sort((a, b) => compareMultiple<T>(a, b, orders as CompareOrder[])).map((item) => item.value);\n};\n\nexport default orderBy;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Map {\n <T>(collection: WithNullable<T[]>, iteratee?: ArrayIterator<T, any>): T[];\n (collection: WithNullable<string>, iteratee?: StringIterator<any>): string[];\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ArrayLikeIterator<T, any>): T[];\n <T extends object>(collection: WithNullable<T>, iteratee?: ObjectIterator<T, any>): Array<T[keyof T]>;\n}\n\n/**\n * 创建一个新数组,这个数组的值由迭代集合每个元素调用 `iteratee` 函数的返回值组成。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @alias module:Collection.map\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 一个新数组。\n * @example\n *\n * const arr = [1, 2, 3];\n * map(arr, item => item * 3); // [3, 6, 9]\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * map(obj, item => item * 3); // [3, 6, 9]\n *\n * map([[1, 2], [3, 4]], item=>item[0]); // [1, 3]\n */\nconst map: Map = function (collection: any, iteratee: any = identity) {\n const result: any[] = [];\n forEach(collection, (item, index, arr) => {\n result.push(iteratee(item, index, arr));\n });\n return result;\n};\n\nexport default map;\n","import forEach from './forEach';\nimport identity from './identity';\nimport createIteratee from './internals/createIteratee';\nimport { ArrayLikeIterator, CollectionList, CollectionObject, ObjectIterator, PropertyName } from './internals/types';\n\ninterface Partition {\n <T extends object>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, any> | keyof T): [T[], T[]];\n <T>(collection: CollectionList<T>, iteratee?: ArrayLikeIterator<T, any> | PropertyName): [T[], T[]];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: ObjectIterator<T, any> | keyof T): [V[], V[]];\n <T extends object, V extends T[keyof T]>(collection: CollectionObject<T>, iteratee?: PropertyName): [V[], V[]];\n}\n\n/**\n * 创建一个分成两组的元素数组,第一组包含 `predicate`(断言函数)返回为 [`Truthy`](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy)(真值)的元素,第二组包含 `predicate`(断言函数)返回为 [`Falsy`](https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy)(假值)的元素。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @alias module:Collection.partition\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy | Truthy}\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy | Falsy}\n * @param {ArrayLike<any> | Object} collection 一个用来迭代的集合。\n * @param {Function | string | number | Symbol | Array} [predicate=identity] 每次迭代调用的断言函数。默认 `identity`。\n * @returns {Array} 分组后的数组。\n * @example\n *\n * const users = [\n * { user: 'barney', age: 36, active: false },\n * { user: 'fred', age: 40, active: true },\n * { user: 'pebbles', age: 1, active: false }\n * ];\n *\n * partition(users, item => item.active);\n * // [\n * // [{ user: 'fred', age: 40, active: true }],\n * // [{ user: 'barney', age: 36, active: false }, { user: 'pebbles', age: 1, active: false }]\n * // ]\n *\n * // 迭代函数可以直接写入属性。\n * partition(users, 'active');\n * // [\n * // [{ user: 'fred', age: 40, active: true }],\n * // [{ user: 'barney', age: 36, active: false }, { user: 'pebbles', age: 1, active: false }]\n * // ]\n *\n */\nconst partition: Partition = function <T>(collection: any, predicate: any = identity) {\n const result: [T[], T[]] = [[], []];\n const internalIteratee = createIteratee<T>(predicate);\n forEach(collection, (item, index, arr) => {\n result[internalIteratee(item, index, arr) ? 0 : 1].push(item);\n });\n return result;\n};\n\nexport default partition;\n","import allKeys from '../allKeys';\nimport identity from '../identity';\nimport isArrayLike from '../isArrayLike';\nimport { FunctionAny, ReduceArrayIterator, ReduceArrayLikeIterator, ReduceObjectIterator, ReduceStringIterator, WithNullable } from './types';\n\nexport interface Reduce {\n <T, R>(collection: WithNullable<T[]>, iteratee: ReduceArrayIterator<T, R>, initialValue: R): R;\n <R>(collection: WithNullable<string>, iteratee: ReduceStringIterator<R>, initialValue: R): R;\n <T, R>(collection: WithNullable<ArrayLike<T>>, iteratee: ReduceArrayLikeIterator<T, R>, initialValue: R): R;\n <T extends object, R>(collection: WithNullable<T>, iteratee: ReduceObjectIterator<T, R>, initialValue: R): R;\n <T>(collection: WithNullable<T[]>, iteratee?: ReduceArrayIterator<T, T>): T | undefined;\n (collection: WithNullable<string>, iteratee?: ReduceStringIterator<string>): string | undefined;\n <T>(collection: WithNullable<ArrayLike<T>>, iteratee?: ReduceArrayLikeIterator<T, T>): T | undefined;\n <T extends object>(collection: WithNullable<T>, iteratee?: ReduceObjectIterator<T, T[keyof T]>): T[keyof T] | undefined;\n}\n\n/**\n * 创建 reducer 函数\n *\n * @private\n * @param dir 迭代方向\n * @returns reduce 方法\n */\nfunction createReduce(dir: 1 | -1) {\n function reducer(collection: any, iteratee: FunctionAny, memo: any, initial: boolean) {\n const _keys = !isArrayLike(collection) && allKeys(collection);\n const len = (_keys || collection).length;\n let i = dir > 0 ? 0 : len - 1;\n\n if (!initial && len > 0) {\n memo = collection[_keys ? _keys[i] : i];\n i += dir;\n }\n\n while (i >= 0 && i < len) {\n const currentKey = _keys ? _keys[i] : i;\n memo = iteratee(memo, collection[currentKey], currentKey, collection);\n i += dir;\n }\n return memo;\n }\n\n const reduce: Reduce = function (collection: any, iteratee: FunctionAny = identity, initialValue?: any) {\n const initial = arguments.length >= 3;\n return reducer(collection, iteratee, initialValue, initial);\n };\n return reduce;\n}\n\nexport default createReduce;\n","import createReduce from './internals/createReduce';\n\n/**\n * 对每个元素调用 `iteratee` 函数,每一次运行 `iteratee` 会将元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。\n *\n * 如果没有提供第三个参数值,则集合中的第一个元素将用作初始值。\n *\n * `iteratee` 调用时会传入四个参数 `accumulator` `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.reduce\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @param {*} [initialValue] 初始值。\n * @returns {*} 累计值。\n * @example\n *\n * reduce([1,2,3], function(accumulator, current, index){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n * reduce({a: 1, b: 2, c: 3}, function(accumulator, current, key){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n */\nconst reduce = createReduce(1);\n\nexport default reduce;\n","import createReduce from './internals/createReduce';\n\n/**\n * 对每个元素(从右往左的顺序)调用 `iteratee` 函数,每一次运行 `iteratee` 会将元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。\n *\n * 如果没有提供第三个参数值,则集合中的第一个元素将用作初始值。\n *\n * `iteratee` 调用时会传入四个参数 `accumulator` `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.reduceRight\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @param {*} [initialValue] 初始值。\n * @returns {*} 累计值。\n * @example\n *\n * reduceRight([1,2,3], function(accumulator, current, index){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n * reduceRight({a: 1, b: 2, c: 3}, function(accumulator, current, key){\n * return accumulator + current;\n * }, 0);\n * // 6\n *\n */\nconst reduceRight = createReduce(-1);\n\nexport default reduceRight;\n","import forEach from './forEach';\nimport identity from './identity';\nimport { ArrayIterator, ArrayLikeIterator, ObjectIterator, StringIterator, WithNullable } from './internals/types';\n\ninterface Some {\n <T>(collection: WithNullable<T[]>, predicate?: ArrayIterator<T, any>): boolean;\n (collection: WithNullable<string>, predicate?: StringIterator<any>): boolean;\n <T>(collection: WithNullable<ArrayLike<T>>, predicate?: ArrayLikeIterator<T, any>): boolean;\n <T extends object>(collection: WithNullable<T>, predicate?: ObjectIterator<T, any>): boolean;\n}\n\n/**\n * 迭代集合中的元素执行 `predicate` 函数,如果任一元素通过 `predicate` 返回真值,则停止迭代并返回 `true`,否则返回 `false`。\n *\n * `predicate` 调用时会传入三个参数 `value` `index|key` `collection`。\n *\n * @function\n * @alias module:Collection.some\n * @since 1.7.0\n * @param {ArrayLike<any> | Object} collection 要迭代的集合。\n * @param {function} [predicate=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {boolean} 如果任一元素通过 `predicate` 测试,则返回 `true`,否则返回 `false`。\n * @example\n *\n * const arr = [1, 2, 3, 4, 5, 6];\n * some(arr, item => item % 2 === 0); // false\n *\n * const obj = { one: 1, two: 2, three: 3 };\n * some(obj, item => item > 1); // true\n */\nconst some: Some = function (collection: any, predicate: any = identity) {\n let result = false;\n forEach(collection, (item, index, arr) => {\n if (predicate(item, index, arr)) {\n result = true;\n return false;\n }\n });\n return result;\n};\n\nexport default some;\n","interface DefaultTo {\n <T>(value: T | null | undefined, defaultValue: T): T;\n <T, D>(value: T | null | undefined, defaultValue: D): T | D;\n}\n\n/**\n * 检查值以确定是否应在其位置返回默认值。如果值为 `NaN` `null` 或 `undefined`,返回 `defaultValue`。\n *\n * @function\n * @alias module:Util.defaultTo\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @param {*} defaultValue 默认值。\n * @returns {*} 如果值为 `NaN` `null` 或 `undefined`,返回 `defaultValue`,否则返回 `value`。\n * @example\n *\n * defaultTo(undefined, 1); // 1\n *\n * defaultTo(10, 1); // 10\n *\n * defaultTo(null, undefined); // undefined\n *\n */\nconst defaultTo: DefaultTo = function <T, D>(value: T, defaultValue: D) {\n return value == null || value !== value ? defaultValue : value;\n};\n\nexport default defaultTo;\n","import isObjectLike from '../isObjectLike';\nimport getTag from './getTag';\nimport { argumentsTag, functionProtoToString, stringUndefined } from './native';\n\n/**\n * @summary ut2 版本号。\n * @since 1.0.0\n */\nexport const VERSION = BUILD_VERSION;\n\n/**\n * @summary 当前运行环境是否为浏览器。\n * @since 1.10.0\n */\nexport const isBrowser = typeof window !== stringUndefined && isObjectLike(window) && typeof document !== stringUndefined && isObjectLike(document) && window.document === document;\n\n// @ts-ignore\nexport const supportedArgumentsType = getTag((() => arguments)()) === argumentsTag;\n\nexport const FUNC_ERROR_TEXT = 'Expected a function';\n\nexport function toSource(func: any) {\n if (func !== null) {\n try {\n return functionProtoToString.call(func);\n } catch (e) {\n /* empty */\n }\n try {\n return func + '';\n } catch (e) {\n /* empty */\n }\n }\n return '';\n}\n\nexport const stubFlase = () => false;\nexport const stubTrue = () => true;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 创建一个函数,当它被调用 `n` 或更多次之后触发 `func`。\n *\n * @alias module:Function.after\n * @since 1.0.0\n * @param {number} n 函数应该在调用多少次后执行。\n * @param {Function} func 用来限定的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * const saves = ['profile', 'settings'];\n * const done = after(saves.length, () => console.log('done saving!'));\n *\n * saves.forEach(item=>{\n * console.log(item);\n * done();\n * });\n * // 'profile'\n * // 'settings'\n * // 'done saving!'\n *\n */\nfunction after<T extends FunctionAny>(n: number, func: T) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = defaultTo(toNumber(n), 0);\n return function () {\n if (--n < 1) {\n // @ts-ignore\n // eslint-disable-next-line prefer-rest-params\n return func.apply(this, arguments);\n }\n } as T;\n}\n\nexport default after;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { nativeUndefined } from './internals/native';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 创建一个调用 `func` 的函数,调用次数少于 `n` 次。之后再调用这个函数,将返回最后一次调用 `func` 的结果。\n *\n * @alias module:Function.before\n * @since 1.0.0\n * @param {number} n 不再调用 `func` 的次数。\n * @param {Function} func 限制执行的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * let count = 0;\n *\n * const increment = before(3, () => {\n * return ++count;\n * });\n *\n * increment(); // 1\n * increment(); // 2\n * increment(); // 2 返回之前的结果\n *\n */\nfunction before<T extends FunctionAny>(n: number, func: T) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n let result: ReturnType<T>;\n n = defaultTo(toNumber(n), 0);\n return function () {\n if (--n > 0) {\n // @ts-expect-error\n // eslint-disable-next-line prefer-rest-params\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n // @ts-expect-error\n func = nativeUndefined;\n }\n return result;\n } as T;\n}\n\nexport default before;\n","import { nativeUndefined } from './internals/native';\n\n/**\n * 检查值是否为 `undefined`。\n *\n * @alias module:Language.isUndefined\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `undefined`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isUndefined(undefined); // true\n *\n * isUndefined(null); // false\n *\n */\nfunction isUndefined(value: any): value is undefined {\n return value === nativeUndefined;\n}\n\nexport default isUndefined;\n","/* eslint-disable prefer-rest-params */\nimport { arrayProtoSlice, mathMax } from './internals/native';\nimport { FunctionAny } from './internals/types';\nimport isUndefined from './isUndefined';\nimport toInteger from './toInteger';\n\nconst PLACEHOLDER = {\n __ut2_curry_ph__: null\n};\n\ntype Placeholder = typeof PLACEHOLDER;\n\ninterface Curry {\n <T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;\n <T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;\n <T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;\n <T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;\n <T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n (func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;\n\n placeholder: Placeholder;\n _: Placeholder;\n}\n\ninterface CurriedFunction1<T1, R> {\n (t1: T1): R;\n\n (t1: Placeholder): CurriedFunction1<T1, R>;\n (): CurriedFunction1<T1, R>;\n}\ninterface CurriedFunction2<T1, T2, R> {\n (t1: Placeholder, t2: T2): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2): R;\n\n (t1: T1): CurriedFunction1<T2, R>;\n\n (t1: Placeholder): CurriedFunction2<T1, T2, R>;\n (): CurriedFunction2<T1, T2, R>;\n}\ninterface CurriedFunction3<T1, T2, T3, R> {\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction1<T1, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction1<T2, R>;\n (t1: T1, t2: T2, t3: T3): R;\n\n (t1: Placeholder, t2: T2): CurriedFunction2<T1, T3, R>;\n (t1: T1, t2: T2): CurriedFunction1<T3, R>;\n\n (t1: T1): CurriedFunction2<T2, T3, R>;\n\n (t1: Placeholder): CurriedFunction3<T1, T2, T3, R>;\n (): CurriedFunction3<T1, T2, T3, R>;\n}\ninterface CurriedFunction4<T1, T2, T3, T4, R> {\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T1, T2, T3, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T1, T3, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction2<T2, T3, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction1<T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction1<T2, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4): R;\n\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction3<T1, T2, T4, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction2<T2, T4, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;\n (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;\n\n (t1: Placeholder, t2: T2): CurriedFunction3<T1, T3, T4, R>;\n (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;\n\n (t1: T1): CurriedFunction3<T2, T3, T4, R>;\n\n (t1: Placeholder): CurriedFunction4<T1, T2, T3, T4, R>;\n (): CurriedFunction4<T1, T2, T3, T4, R>;\n}\ninterface CurriedFunction5<T1, T2, T3, T4, T5, R> {\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction3<T1, T2, T4, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T1, T3, T4, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction3<T2, T3, T4, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T1, T4, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: Placeholder, t5: T5): CurriedFunction2<T2, T4, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: Placeholder, t5: T5): CurriedFunction2<T3, T4, R>;\n (t1: T1, t2: T2, t3: T3, t4: Placeholder, t5: T5): CurriedFunction1<T4, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4, t5: T5): CurriedFunction1<T3, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;\n\n (t1: Placeholder, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;\n (t1: Placeholder, t2: Placeholder, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;\n (t1: Placeholder, t2: T2, t3: Placeholder, t4: T4): CurriedFunction3<T1, T3, T5, R>;\n (t1: T1, t2: Placeholder, t3: Placeholder, t4: T4): CurriedFunction3<T2, T3, T5, R>;\n (t1: T1, t2: T2, t3: Placeholder, t4: T4): CurriedFunction2<T3, T5, R>;\n (t1: T1, t2: Placeholder, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;\n (t1: Placeholder, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;\n (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;\n\n (t1: Placeholder, t2: Placeholder, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;\n (t1: T1, t2: Placeholder, t3: T3): CurriedFunction3<T2, T4, T5, R>;\n (t1: Placeholder, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;\n (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;\n\n (t1: Placeholder, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;\n (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;\n\n (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;\n\n (t1: Placeholder): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n (): CurriedFunction5<T1, T2, T3, T4, T5, R>;\n}\n\n/**\n * 创建一个函数。该函数接受 `func` 参数,在提供的参数数量达到 `arity` 后调用 `func` 并返回其结果。\n *\n * `curry._` 或 `curry.placeholder` 可用作参数的占位符。\n *\n * @function\n * @alias module:Function.curry\n * @since 1.8.0\n * @param {Function} func 需要柯里化的函数。\n * @param {number} [arity] 指定参数数量。默认值为 `func.length`。\n * @returns {Function} 新的柯里化函数。\n * @example\n *\n * function abc(a, b, c){\n * return [a, b, c];\n * }\n *\n * var curried = curry(abc);\n *\n * curried(1)(2)(3); // [1, 2, 3]\n *\n * curried(1, 2)(3); // [1, 2, 3]\n *\n * curried(1, 2, 3); // [1, 2, 3]\n *\n * curried(1)(curry._, 3)(2); // [1, 2, 3]\n *\n * curried(curry._, curry._, 3)(curry._, 2)(1); // [1, 2, 3]\n *\n */\nconst curry: Curry = function (func: FunctionAny, arity?: number) {\n arity = isUndefined(arity) ? func.length : mathMax(toInteger(arity), 0);\n\n function wrap(this: any) {\n let args: any[] = arrayProtoSlice.call(arguments);\n const context = this;\n\n function inner() {\n const argsInner = arrayProtoSlice.call(arguments);\n\n for (let i = 0; i < args.length; i++) {\n args[i] = args[i] === PLACEHOLDER && argsInner.length > 0 ? argsInner.shift() : args[i];\n }\n args = args.concat(argsInner);\n const realArgsLength = args.filter((arg) => arg !== PLACEHOLDER).length;\n if (realArgsLength >= arity!) {\n return func.apply(context, args);\n }\n return inner;\n }\n\n return inner();\n }\n\n return wrap;\n};\n\ncurry.placeholder = curry._ = PLACEHOLDER;\n\nexport default curry;\n","import defaultTo from '../defaultTo';\nimport toNumber from '../toNumber';\nimport { FUNC_ERROR_TEXT } from './helpers';\nimport { nativeUndefined } from './native';\nimport { FunctionAny } from './types';\n\nfunction baseDebounce<T extends FunctionAny>(func: T, wait: number, immediate: boolean, __throttle__ = false) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n let timer: any, lastCallTime: number | undefined, lastInvokeTime: number, lastArgs: any[] | undefined, lastThis: any, result: ReturnType<T>;\n\n wait = defaultTo(toNumber(wait), 0);\n\n function shouldInvoke(time: number) {\n if (lastCallTime === nativeUndefined) {\n return true;\n }\n const timeSinceLastCall = time - lastCallTime;\n const timeSinceLastInvoke = time - lastInvokeTime;\n return timeSinceLastCall >= wait || timeSinceLastCall < 0 || (__throttle__ && timeSinceLastInvoke >= wait);\n }\n\n function invokeFunc(time: number) {\n lastInvokeTime = time;\n result = func.apply(lastThis, lastArgs!);\n lastThis = lastArgs = nativeUndefined;\n return result;\n }\n\n function debounced(this: any, ...args: Parameters<T>) {\n lastThis = this;\n lastArgs = args;\n\n const time = Date.now();\n const isInvoke = shouldInvoke(time); // 是否可以立即调用\n\n const waitTime = !__throttle__ ? wait : !isInvoke && lastCallTime !== nativeUndefined && timer === nativeUndefined ? wait - (time - lastCallTime) : wait;\n\n lastCallTime = time;\n\n if (isInvoke) {\n // 立即调用,且没有定时器\n if (immediate && timer === nativeUndefined) {\n return invokeFunc(time);\n }\n }\n\n // 如果已有定时器,且不是节流方式,清除并重新启动定时器\n if (timer !== nativeUndefined && !__throttle__) {\n clearTimeout(timer);\n timer = nativeUndefined;\n }\n\n if (timer === nativeUndefined) {\n timer = setTimeout(() => {\n timer = nativeUndefined;\n invokeFunc(Date.now());\n }, waitTime);\n }\n\n return result;\n }\n\n function cancel() {\n if (timer !== nativeUndefined) {\n clearTimeout(timer);\n timer = nativeUndefined;\n }\n lastCallTime = timer = lastArgs = lastThis = nativeUndefined;\n }\n\n function flush() {\n if (timer !== nativeUndefined) {\n clearTimeout(timer);\n timer = nativeUndefined;\n\n if (lastArgs) {\n return invokeFunc(Date.now());\n }\n }\n return result;\n }\n\n function pending() {\n return timer !== nativeUndefined;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n\n return debounced;\n}\n\nexport default baseDebounce;\n","import baseDebounce from './internals/baseDebounce';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个防抖动函数,该函数会从上一次被调用后,延迟 `wait` 毫秒数后调用 `func` 方法。\n *\n * 防抖动函数还提供以下方法:\n * 1. `cancel` 方法取消延迟的函数调用。\n * 2. `flush` 方法立即调用。\n * 3. `pending` 方法是否在等待函数执行。\n *\n * @alias module:Function.debounce\n * @since 1.0.0\n * @param {Function} func 要防抖动的函数。\n * @param {number} [wait=0] 需要延迟的毫秒数。默认 `0`。\n * @param {boolean} [immediate=false] 是否在延迟开始前调用。默认 `false`。\n * @returns {Function} 防抖动函数。\n * @example\n *\n * function calculateLayout(e){\n * console.log('calculate layout event: ', e);\n * }\n *\n * // 避免窗口在变动时出现昂贵的计算开销。\n * window.addEventListener('resize', debounce(calculateLayout, 200));\n *\n * const debounced = debounce(()=>{\n * // do something\n * }\n *\n * // 点击按钮立即执行,而后如果在每 300 毫秒内连续点击,将在最后一次点击延迟 300 毫秒后执行。\n * document.querySelector('button').addEventListener('click', debounced, 300, true));\n *\n * // 取消防抖动调用\n * window.addEventListener('popstate', debounced.cancel);\n *\n */\nfunction debounce<T extends FunctionAny>(func: T, wait = 0, immediate = false) {\n return baseDebounce(func, wait, immediate);\n}\n\nexport default debounce;\n","import defaultTo from './defaultTo';\nimport { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\nimport toNumber from './toNumber';\n\n/**\n * 延迟 `wait` 毫秒后调用 `func`。\n *\n * @alias module:Function.delay\n * @since 1.0.0\n * @param {Function} func 要延迟的函数。\n * @param {number} wait 要延迟的毫秒数。\n * @param {...*} [args] 调用函数时传入的参数。\n * @returns {number} 定时器 `id`。\n * @example\n *\n * // 延迟 1000 毫秒后执行\n * delay(function(text){\n * console.log(text);\n * }, 1000, 'hello world');\n *\n * // 'hello world'\n *\n */\nfunction delay<T extends FunctionAny>(this: any, func: T, wait: number, ...args: Parameters<T>) {\n if (typeof func !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n const context = this;\n wait = defaultTo(toNumber(wait), 0);\n\n return setTimeout(() => {\n func.apply(context, args);\n }, wait);\n}\n\nexport default delay;\n","import { FUNC_ERROR_TEXT } from './internals/helpers';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个断言函数结果取反的函数。\n *\n * @alias module:Function.negate\n * @since 1.0.0\n * @param {function} predicate 需要对结果取反的函数。\n * @returns 新的取反函数。\n * @example\n *\n * function isEven(num){\n * return num % 2 === 0;\n * }\n *\n * const nums = [1,2,3,4,5];\n * nums.filter(isEvent); // [2, 4]\n *\n * const ne = negate(isEvent);\n * nums.filter(ne); // [1, 3, 5]\n *\n */\nfunction negate<T extends FunctionAny>(this: any, predicate: T) {\n if (typeof predicate !== 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n return (...args: Parameters<T>) => {\n return !predicate.apply(this, args);\n };\n}\n\nexport default negate;\n","import before from './before';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个只能调用 `func` 一次的函数。重复调用将返回第一次调用 `func` 的结果。\n *\n * @alias module:Function.once\n * @since 1.2.0\n * @requires module:Function.before\n * @param {Function} func 限制执行的函数。\n * @returns {Function} 新的限定函数。\n * @example\n *\n * let count = 0;\n *\n * const increment = _.once(()=>{\n * return ++count;\n * });\n *\n * increment(); // 1\n * increment(); // 1\n * increment(); // 1\n *\n */\nfunction once<T extends FunctionAny>(func: T) {\n return before(2, func);\n}\n\nexport default once;\n","/* eslint-disable prefer-rest-params */\nimport { arrayProtoSlice } from './internals/native';\n\nconst PLACEHOLDER = {\n __ut2_partial_ph__: null\n};\n\ntype Placeholder = typeof PLACEHOLDER;\ntype Function0<R> = () => R;\ntype Function1<T1, R> = (t1: T1) => R;\ntype Function2<T1, T2, R> = (t1: T1, t2: T2) => R;\ntype Function3<T1, T2, T3, R> = (t1: T1, t2: T2, t3: T3) => R;\ntype Function4<T1, T2, T3, T4, R> = (t1: T1, t2: T2, t3: T3, t4: T4) => R;\n\ninterface Partial {\n <T1, T2, R>(func: Function2<T1, T2, R>, plc1: Placeholder, arg2: T2): Function1<T1, R>;\n <T1, T2, R>(func: Function2<T1, T2, R>, arg1: T1, arg2: T2): Function0<R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, arg2: T2): Function2<T1, T3, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3): Function2<T1, T2, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, plc2: Placeholder, arg3: T3): Function1<T2, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, plc1: Placeholder, arg2: T2, arg3: T3): Function1<T1, R>;\n <T1, T2, T3, R>(func: Function3<T1, T2, T3, R>, arg1: T1, arg2: T2, arg3: T3): Function0<R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2): Function3<T1, T3, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3): Function3<T1, T2, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, arg3: T3): Function2<T2, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, arg3: T3): Function2<T1, T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3): Function1<T4, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, plc3: Placeholder, arg4: T4): Function3<T1, T2, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, plc3: Placeholder, arg4: T4): Function2<T2, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, plc3: Placeholder, arg4: T4): Function2<T1, T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, plc3: Placeholder, arg4: T4): Function1<T3, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, plc2: Placeholder, arg3: T3, arg4: T4): Function2<T1, T2, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, plc2: Placeholder, arg3: T3, arg4: T4): Function1<T2, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, plc1: Placeholder, arg2: T2, arg3: T3, arg4: T4): Function1<T1, R>;\n <T1, T2, T3, T4, R>(func: Function4<T1, T2, T3, T4, R>, arg1: T1, arg2: T2, arg3: T3, arg4: T4): Function0<R>;\n <TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;\n <TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;\n <TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;\n <TS extends any[], T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3, ...ts: TS) => R, t1: T1, t2: T2, t3: T3): (...ts: TS) => R;\n <TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: TS) => R, t1: T1, t2: T2, t3: T3, t4: T4): (...ts: TS) => R;\n placeholder: Placeholder;\n _: Placeholder;\n}\n\n/**\n * 创建一个函数。该函数调用 `func`,并传入预设的 `args` 参数。\n *\n * `partial._` 或 `partial.placeholder` 可用作参数的占位符。\n *\n * @function\n * @alias module:Function.partial\n * @since 1.0.0\n * @param {Function} func 需要预设的函数。\n * @param {...*} [args] 预设的参数。\n * @returns {Function} 预设参数的函数。\n * @example\n *\n * function greet(greeting, name){\n * return greeting + ' ' + name;\n * }\n *\n * const sayHelloTo = partial(greet, 'hello');\n * sayHelloTo('jeff'); // 'hello jeff'\n *\n * const greetJeff = partial(greet, partial._, 'jeff');\n * greetJeff('hi'); // 'hi jeff'\n *\n */\nconst partial: Partial = function (func: any) {\n const argsOrig = arrayProtoSlice.call(arguments, 1);\n\n return function (this: any) {\n const args = [];\n const argsPartial = arrayProtoSlice.call(arguments);\n\n for (let i = 0; i < argsOrig.length; i++) {\n args[i] = argsOrig[i] === PLACEHOLDER ? argsPartial.shift() : argsOrig[i];\n }\n\n return func.apply(this, args.concat(argsPartial));\n };\n};\n\npartial.placeholder = partial._ = PLACEHOLDER;\n\nexport default partial;\n","import baseDebounce from './internals/baseDebounce';\nimport { FunctionAny } from './internals/types';\n\n/**\n * 创建一个节流函数,该函数在 `wait` 毫秒数内最多执行一次 `func` 方法。\n *\n * 节流函数还提供以下方法:\n * 1. `cancel` 方法取消延迟的函数调用。\n * 2. `flush` 方法立即调用。\n * 3. `pending` 方法是否在等待函数执行。\n *\n * @alias module:Function.throttle\n * @since 1.0.0\n * @param {Function} func 要节流的函数。\n * @param {number} [wait=0] 需要节流的毫秒数。默认 `0`。\n * @param {boolean} [immediate=true] 是否在节流开始前调用。默认 `true`。\n * @returns 节流函数。\n * @example\n *\n * function updatePosition(e){\n * console.log('update position event: ', e);\n * }\n *\n * // 避免在滚动时频繁的更新定位。\n * window.addEventListener('scroll', throttle(updatePosition, 100));\n *\n * const throttled = throttle(()=>{\n * // do something\n * }\n *\n * // 点击按钮, 300 毫秒内最多执行一次。\n * document.querySelector('button').addEventListener('click', throttled, 300));\n *\n * // 取消节流调用。\n * window.addEvenetListener('popstate', throttled.cancel);\n *\n */\nfunction throttle<T extends FunctionAny>(func: T, wait = 0, immediate = true) {\n return baseDebounce(func, wait, immediate, true);\n}\n\nexport default throttle;\n","import { argumentsTag, objectProtoHasOwnProperty, objectProtoPropertyIsEnumerable } from './internals/native';\nimport { supportedArgumentsType } from './internals/helpers';\nimport isObjectLike from './isObjectLike';\nimport getTag from './internals/getTag';\n\n/**\n * 检查值是否为 `arguments` 对象。\n *\n * @alias module:Language.isArguments\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `arguments` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArguments(function() { return arguments }()); // true\n *\n * isArguments([1, 2, 3]); // false\n *\n */\nfunction isArguments(value: any): value is IArguments {\n if (supportedArgumentsType) {\n return getTag(value) === argumentsTag;\n }\n return isObjectLike(value) && objectProtoHasOwnProperty.call(value, 'callee') && !objectProtoPropertyIsEnumerable.call(value, 'callee');\n}\n\nexport default isArguments;\n","import { stringObject } from './native';\n\n// @ts-ignore\n// `exports`\nconst freeExports = typeof exports === stringObject && exports && !exports.nodeType && exports;\n\n// @ts-ignore\n// `module`\nconst freeModule = freeExports && typeof module === stringObject && module && !module.nodeType && module;\n\nconst nodeUtil = (function () {\n try {\n const types = freeModule && freeModule.require && freeModule.require('util').types;\n if (types) {\n return types;\n }\n } catch (e) {\n /* empty */\n }\n})();\n\ntype CheckTypeMethod = undefined | ((value: any) => boolean);\n\nexport const nodeIsArrayBuffer: CheckTypeMethod = nodeUtil && nodeUtil.isArrayBuffer;\nexport const nodeIsDate: CheckTypeMethod = nodeUtil && nodeUtil.isDate;\nexport const nodeIsMap: CheckTypeMethod = nodeUtil && nodeUtil.isMap;\nexport const nodeIsRegExp: CheckTypeMethod = nodeUtil && nodeUtil.isRegExp;\nexport const nodeIsSet: CheckTypeMethod = nodeUtil && nodeUtil.isSet;\nexport const nodeIsTypedArray: CheckTypeMethod = nodeUtil && nodeUtil.isTypedArray;\n","import getTag from './internals/getTag';\nimport { arrayBufferTag } from './internals/native';\nimport { nodeIsArrayBuffer } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `ArrayBuffer` 对象。\n *\n * @alias module:Language.isArrayBuffer\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `ArrayBuffer` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isArrayBuffer(new ArrayBuffer(8)); // true\n *\n * isArrayBuffer({}); // false\n *\n * isArrayBuffer('2012'); // false\n *\n */\nfunction isArrayBuffer(value: any): value is ArrayBuffer {\n return nodeIsArrayBuffer ? nodeIsArrayBuffer(value) : getTag(value) === arrayBufferTag;\n}\n\nexport default isArrayBuffer;\n","import getTag from './internals/getTag';\nimport { bigIntTag } from './internals/native';\n\n/**\n * 检查值是否为 bigint 类型或对象。\n *\n * @alias module:Language.isBigInt\n * @since 1.8.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 bigint 类型或对象,返回 `true` 否则返回 `false`。\n * @example\n *\n * isBigInt(0n); // true\n *\n * isBigInt(1n); // true\n *\n * isBigInt(BigInt(1)); // true\n *\n * isBigInt(Object(1n)); // true\n *\n * isBigInt(1); // false\n */\nfunction isBigInt(value: any): value is bigint {\n return typeof value === 'bigint' || getTag(value) === bigIntTag;\n}\n\nexport default isBigInt;\n","import getTag from './internals/getTag';\nimport { blobTag, stringUndefined } from './internals/native';\n\n// Blob 对象是否存在\nconst blobExisted = typeof Blob !== stringUndefined;\n\n/**\n * 检查值是否为 `Blob` 对象。\n *\n * 浏览器环境的 `Blob` 或 `File` 对象,或其他继承自 `Blob` 的实例,都将返回 `true`。\n *\n * @alias module:Language.isBlob\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/Blob | Blob}\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File | File}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Blob` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isBlob(new Blob(['a'])); // true\n *\n * isBlob(new File([], 'test.txt')); // true\n *\n * isBlob({}); // false\n *\n * isBlob('2012'); // false\n *\n */\nfunction isBlob(value: any): value is Blob {\n // instanceof 不支持跨域对象判断,如来自 iframe 的 Blob 对象\n if (blobExisted && value instanceof Blob) {\n return true;\n }\n return getTag(value) === blobTag;\n}\n\nexport default isBlob;\n","import getTag from './internals/getTag';\nimport { booleanTag } from './internals/native';\n\n/**\n * 检查值是否为布尔类型或对象。\n *\n * @alias module:Language.isBoolean\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为布尔类型或对象,返回 `true` 否则返回 `false`。\n * @example\n *\n * isBoolean(false); // true\n *\n * isBoolean(new Boolean(false)); // true\n *\n * isBoolean(Object(false)); // true\n *\n * isBoolean(new Boolean(false)); // true\n *\n * isBoolean(null); // false\n *\n */\nfunction isBoolean(value: any): value is boolean {\n return value === true || value === false || getTag(value) === booleanTag;\n}\n\nexport default isBoolean;\n","/**\n * 检查值是否为 `buffer`。\n *\n * 非 Node.js 环境,始终返回 `false`。\n *\n * @alias module:Language.isBuffer\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `buffer`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isBuffer(Buffer.alloc(2)); // true\n *\n * isBuffer({}); // false\n *\n * isBuffer('2012'); // false\n *\n */\nfunction isBuffer(value: any): value is Buffer {\n if (typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function') {\n return Buffer.isBuffer(value);\n }\n return false;\n}\n\nexport default isBuffer;\n","import { objectTag, dataViewTag, mapTag, promiseTag, setTag, weakMapTag, nativeUndefined, stringUndefined } from './native';\nimport { toSource } from './helpers';\nimport getTag from './getTag';\n\nconst dataViewExisted = typeof DataView !== stringUndefined;\nconst mapExisted = typeof Map !== stringUndefined;\nconst promiseExisted = typeof Promise !== stringUndefined;\nconst setExisted = typeof Set !== stringUndefined;\nconst weakMapExisted = typeof WeakMap !== stringUndefined;\n\nconst dataViewCtorString = toSource(DataView);\nconst mapCtorString = toSource(Map);\nconst promiseCtorString = toSource(Promise);\nconst setCtorString = toSource(Set);\nconst weakMapCtorString = toSource(WeakMap);\n\nlet getTagWithBugfix = getTag;\n\n// 以下数据类型执行 `Object.prototype.toString` 返回错误结果 `[object Object]`:\n// ie11 的 DataView、Map、Set、WeakMap ,node.js 版本 < 6 的 Promise 。\nif (\n (dataViewExisted && getTag(new DataView(new ArrayBuffer(1))) !== dataViewTag) ||\n (mapExisted && getTag(new Map()) !== mapTag) ||\n (promiseExisted && getTag(Promise.resolve()) !== promiseTag) ||\n (setExisted && getTag(new Set()) !== setTag) ||\n (weakMapExisted && getTag(new WeakMap()) !== weakMapTag)\n) {\n getTagWithBugfix = function (value: any) {\n const result = getTag(value);\n const Ctor = result === objectTag ? value.constructor : nativeUndefined;\n const ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nexport default getTagWithBugfix;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { dataViewTag } from './internals/native';\n\n/**\n * 检查值是否为 `DataView` 对象。\n *\n * @alias module:Language.isDataView\n * @since 1.2.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `DataView` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isDataView(new DataView(new ArrayBuffer(8))); // true\n *\n */\nfunction isDataView(value: any): value is DataView {\n return getTagWithBugfix(value) === dataViewTag;\n}\n\nexport default isDataView;\n","import getTag from './internals/getTag';\nimport { dateTag } from './internals/native';\nimport { nodeIsDate } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Date` 对象。\n *\n * @alias module:Language.isDate\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Date` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isDate(new Date); // true\n *\n * isDate('Mon April 23 2012'); // false\n *\n */\nfunction isDate(value: any): value is Date {\n return nodeIsDate ? nodeIsDate(value) : getTag(value) === dateTag;\n}\n\nexport default isDate;\n","import getTag from './internals/getTag';\nimport { functionProtoToString, objectProtoHasOwnProperty, objectGetPrototypeOf, objectTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\nconst objectCtorString = functionProtoToString.call(Object);\n\n/**\n * 检查值是否为普通对象,即由 `Object` 构造函数创建或 `[[Prototype]]` 为 `null` 的对象。\n *\n * @alias module:Language.isPlainObject\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为普通对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * }\n *\n * isPlainObject(new Foo); // false\n *\n * isPlainObject([1,2,3]); // false\n *\n * isPlainObject({ a: 1, b: 2 }); // true\n *\n * isPlainObject(Object.create(null)); // true\n *\n */\nfunction isPlainObject(value: any): value is object {\n if (!isObjectLike(value) || getTag(value) !== objectTag) {\n return false;\n }\n const proto = objectGetPrototypeOf(Object(value));\n\n // Object.create(null)\n if (proto === null) {\n return true;\n }\n\n const Ctor = objectProtoHasOwnProperty.call(proto, 'constructor') && proto.constructor;\n // 这里如果直接比较 proto.constructor === Object ,iframe 嵌套会导致结果不准确。\n return typeof Ctor === 'function' && Ctor instanceof Ctor && functionProtoToString.call(Ctor) === objectCtorString;\n}\n\nexport default isPlainObject;\n","import isObjectLike from './isObjectLike';\nimport isPlainObject from './isPlainObject';\n\n/**\n * 检查值是否可能为 `DOM` 元素。\n *\n * @alias module:Language.isElement\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `DOM` 元素,返回 `true`,否则返回 `false`。\n * @example\n *\n * isElement(document.body); // true\n *\n * isElement('<body>'); // false\n *\n */\nfunction isElement(value: any): value is Element {\n return isObjectLike(value) && (value as Element).nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n","import getTag from './internals/getTag';\nimport { mapTag, setTag } from './internals/native';\nimport isArrayLike from './isArrayLike';\nimport isNil from './isNil';\nimport isObjectLike from './isObjectLike';\nimport allKeys from './allKeys';\n\n/**\n * 检查值是否为空对象。\n *\n * 类数组的 `length===0`,`Map` `Set` 的 `size === 0` 表示为空。如果对象 `Object.keys` 没有可枚举属性,则被认为是空的。\n *\n * 非上述类型值,都将被认为是空的。\n *\n * @alias module:Language.isEmpty\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为空,返回 `true`,否则返回 `false`。\n * @example\n *\n * isEmpty(null); // true\n *\n * isEmpty(true); // true\n *\n * isEmpty(1); // true\n *\n * isEmpty([]); // true\n *\n * isEmpty({}); // true\n *\n * isEmpty(''); // false\n *\n * isEmpty('abc'); // false\n *\n * isEmpty([1, 2, 3]); // false\n *\n * isEmpty({ a: 1, b: 2 }); // false\n *\n */\nfunction isEmpty(value: any) {\n if (isNil(value)) {\n return true;\n }\n\n const tag = getTag(value);\n if (tag === mapTag || tag === setTag) {\n return !value.size;\n }\n\n if (isObjectLike(value)) {\n return !allKeys(value).length;\n }\n\n if (isArrayLike(value)) {\n return !value.length;\n }\n\n return true;\n}\n\nexport default isEmpty;\n","import getTag from './internals/getTag';\nimport { nodeIsTypedArray } from './internals/nodeUtil';\nimport isArrayLikeObject from './isArrayLikeObject';\n\nconst typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n\n/**\n * 检查值是否为类型化数组。\n *\n * @alias module:Language.isTypedArray\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays | Typed_arrays}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为类型化数组,返回 `true`,否则返回 `false`。\n * @example\n *\n * isTypedArray(new Uint8Array); // true\n *\n * isTypedArray([]); // false\n *\n */\nfunction isTypedArray(value: any) {\n if (nodeIsTypedArray) {\n return nodeIsTypedArray(value);\n }\n if (isArrayLikeObject(value)) {\n return typedArrayPattern.test(getTag(value));\n }\n return false;\n}\n\nexport default isTypedArray;\n","import allKeys from '../allKeys';\nimport eq from '../eq';\nimport getTagWithBugfix from './getTagWithBugfix';\nimport { argumentsTag, arrayProtoSlice, arrayBufferTag, arrayTag, booleanTag, dataViewTag, dateTag, errorTag, objectProtoHasOwnProperty, mapTag, numberTag, objectTag, regExpTag, setTag, stringTag, symbolProto, symbolTag, nativeUndefined } from './native';\nimport isBuffer from '../isBuffer';\nimport isFunction from '../isFunction';\nimport isNil from '../isNil';\nimport isObjectLike from '../isObjectLike';\nimport isTypedArray from '../isTypedArray';\nimport orderBy from '../orderBy';\n\nconst symbolValueOf = symbolProto ? symbolProto.valueOf : nativeUndefined;\n\nfunction mapToArray(map: Map<any, any>) {\n const result: [any, any][] = [];\n map.forEach((value, key) => {\n result.push([key, value]);\n });\n return orderBy(result, [0, 1]);\n}\n\nfunction setToArray(set: Set<any>) {\n const result: any[] = [];\n set.forEach((value) => {\n result.push(value);\n });\n return orderBy(result);\n}\n\nfunction argToArray(arg: IArguments) {\n return arrayProtoSlice.call(arg);\n}\n\nfunction toBufferView(bufferSource: any) {\n return new Uint8Array(bufferSource.buffer || bufferSource, bufferSource.byteOffset || 0, bufferSource.byteLength);\n}\n\nfunction isDomNode(obj: any) {\n return isObjectLike(obj) && typeof (obj as Element).nodeType === 'number' && typeof (obj as Element).nodeName === 'string' && typeof (obj as Element).isEqualNode === 'function';\n}\n\ntype Customizer = (objValue: any, othValue: any, key?: number | string | symbol, object?: any, other?: any, valueStack?: any[], otherStack?: any[]) => void | boolean;\n\n/**\n *\n * 深度比较两个值是否相等。\n *\n * 支持比较 `boolean` `number` `string` `symbol` `array` `array buffer` `date` `error` `map` `object` `regexp` `set` `typed array` 类型。对象只比较自身的属性,不包括继承和不可枚举的属性。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @private\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @param {Array} [valueStack] 值的堆栈。\n * @param {Array} [otherStack] 另一个值的堆栈。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n */\nfunction isEqualDeep(value: any, other: any, customizer?: Customizer, strictCheck?: boolean, valueStack?: any[], otherStack?: any[]): boolean {\n // 如果两个值相等,直接返回 true\n if (eq(value, other, strictCheck)) {\n return true;\n }\n\n const valType = typeof value;\n const othType = typeof other;\n\n // 严格比较时,不同类型返回 false\n // 例如,`1` `Object(1)` 不相等\n if (strictCheck && valType !== othType) {\n return false;\n }\n\n // 存在 null 或 undefined 或 都不是对象类型\n if (isNil(value) || isNil(other) || (valType !== 'object' && othType !== 'object')) {\n return false;\n }\n\n // 对象标签\n const tag = getTagWithBugfix(value);\n if (tag !== getTagWithBugfix(other)) {\n return false;\n }\n\n let convert: undefined | ((arg: any) => any);\n\n switch (tag) {\n case numberTag:\n return eq(+value, +other, strictCheck);\n case booleanTag:\n case dateTag:\n // 日期转为毫秒数进行比较,而无效日期转为 `NaN`。如果是严格比较,无效日期不相等。\n return strictCheck ? +value === +other : eq(+value, +other);\n case stringTag:\n case regExpTag:\n return '' + value === '' + other;\n case symbolTag:\n return symbolValueOf ? symbolValueOf.call(value) === symbolValueOf.call(other) : false;\n case errorTag:\n return value.name === other.name && value.message === other.message;\n case dataViewTag:\n case arrayBufferTag:\n if (value.byteLength !== other.byteLength || (value.byteOffset && value.byteOffset !== other.byteOffset)) {\n return false;\n }\n convert = toBufferView;\n break;\n case mapTag:\n convert = mapToArray;\n break;\n case setTag:\n convert = setToArray;\n break;\n case argumentsTag:\n convert = argToArray;\n break;\n }\n\n if (convert) {\n return isEqualDeep(convert(value), convert(other), customizer, strictCheck, valueStack, otherStack);\n }\n\n // 使用 DOM3 isEqualNode 方法比较 (IE>=9)\n if (isDomNode(value) && isDomNode(other)) {\n return value.isEqualNode(other);\n }\n\n let areArrays = tag === arrayTag;\n if (!areArrays && isTypedArray(value)) {\n if (value.byteLength !== other.byteLength) {\n return false;\n }\n if (value.buffer === other.buffer && value.byteOffset === other.byteOffset) {\n return true;\n }\n areArrays = true;\n }\n\n // Buffer 对象处理\n if (isBuffer(value)) {\n if (!isBuffer(other)) {\n return false;\n }\n areArrays = true;\n }\n\n // 假设循环结构是相等的。\n valueStack = valueStack || [];\n otherStack = otherStack || [];\n let length = valueStack.length;\n\n while (length--) {\n // 遍历对象的堆栈,如果存在循环依赖,立即进行比较。\n if (valueStack[length] === value) {\n return otherStack[length] === other;\n }\n }\n\n // 将对象添加到遍历对象的堆栈中。\n valueStack.push(value);\n otherStack.push(other);\n\n let result = true;\n const hasCustomizer = typeof customizer === 'function';\n\n // 递归比较对象和数组\n if (areArrays) {\n // 比较数组长度\n length = value.length;\n if (length !== other.length) {\n return false;\n }\n // 深度比较数组\n while (length--) {\n if (hasCustomizer) {\n const compared = customizer(value[length], other[length], length, value, other, valueStack, otherStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n if (!isEqualDeep(value[length], other[length], customizer, strictCheck, valueStack, otherStack)) {\n return false;\n }\n }\n } else if (tag === objectTag) {\n // 深度比较对象\n const keys = allKeys(value);\n length = keys.length;\n if (allKeys(other).length !== length) {\n return false;\n }\n // 跳过构造函数比较\n let skipCtor = false;\n while (length--) {\n const key = keys[length];\n if (hasCustomizer) {\n const compared = customizer(value[key], other[key], key, value, other, valueStack, otherStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n if (!(objectProtoHasOwnProperty.call(other, key) && isEqualDeep(value[key], other[key], customizer, strictCheck, valueStack, otherStack))) {\n return false;\n }\n\n // constructor 作为属性,非构建函数时\n if (!skipCtor && key === 'constructor') {\n skipCtor = true;\n }\n }\n\n if (!skipCtor) {\n // 不同构造函数的对象不是等价的。\n const valCtor = value.constructor;\n const othCtor = other.constructor;\n if (valCtor !== othCtor && !(isFunction(valCtor) && valCtor instanceof valCtor && isFunction(othCtor) && othCtor instanceof othCtor) && 'constructor' in value && 'constructor' in other) {\n return false;\n }\n }\n } else {\n result = false;\n }\n\n // 从遍历对象的堆栈中删除\n valueStack.pop();\n otherStack.pop();\n\n return result;\n}\n\nexport default isEqualDeep;\n","import isEqualDeep from './internals/isEqualDeep';\nimport { nativeUndefined } from './internals/native';\n\n/**\n * 深度比较两个值是否相等。\n *\n * 支持比较 `boolean` `number` `string` `symbol` `array` `array buffer` `date` `error` `map` `object` `regexp` `set` `typed array` 类型。对象只比较自身的属性,不包括继承和不可枚举的属性。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @alias module:Language.isEqual\n * @since 1.3.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @returns {boolean} 如果两个值相等,返回 `true`,否则返回 `false`。\n * @example\n *\n * const value = { a: 1, b: -0 }\n * const other = { a: 1, b: 0 }\n *\n * isEqual(value, other); // true\n * value === other // false\n *\n * // 严格比较\n * isEqual(value, other, undefined, true); // false\n *\n * // 自定义比较\n * function customizer(value, other){\n * if(typeof value === 'string' && typeof other === 'string'){\n * return true;\n * }\n * }\n * isEqual('a', 'b', customizer); // true\n * isEqual(['a'], ['b'], customizer); // true\n * isEqual({foo: 'a'}, {foo: 'b'}, customizer); // true\n *\n */\nfunction isEqual(value: any, other: any, customizer?: Parameters<typeof isEqualDeep>[2], strictCheck = false) {\n // 自定义比较\n if (typeof customizer === 'function') {\n const result = customizer(value, other);\n if (result !== nativeUndefined) {\n return !!result;\n }\n }\n return isEqualDeep(value, other, customizer, strictCheck);\n}\n\nexport default isEqual;\n","import getTag from './internals/getTag';\nimport { domExceptionTag, errorTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为 `Error` 或 `DOMException`。\n *\n * 继承自 `Error` 的对象,如 `EvalError` `RangeError` `ReferenceError` `SyntaxError` `TypeError` `URIError` `AggregateError`,都将返回 `true`。\n *\n * @alias module:Language.isError\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Error` 或 `DOMException` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isError(new Error); // true\n *\n * isError(Error); // false\n *\n */\nfunction isError(value: any): value is Error {\n if (!isObjectLike(value)) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const tag = getTag(value);\n return tag === errorTag || tag === domExceptionTag;\n}\n\nexport default isError;\n","import getTag from './internals/getTag';\nimport { fileTag, stringUndefined } from './internals/native';\n\n// File 对象是否存在\nconst fileExisted = typeof File !== stringUndefined;\n\n/**\n * 检查值是否为 `File` 对象。\n *\n * 浏览器环境的 `File` 对象,或其他继承自 `File` 的实例,都将返回 `true`。\n *\n * @alias module:Language.isFile\n * @since 1.11.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File | File}\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `File` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFile(new File([], 'test.txt')); // true\n *\n * isBlob(new Blob(['a'])); // false\n *\n * isFile({}); // false\n *\n * isFile('2012'); // false\n *\n */\nfunction isFile(value: any): value is File {\n if (fileExisted && value instanceof File) {\n return true;\n }\n return getTag(value) === fileTag;\n}\n\nexport default isFile;\n","import { globalThisExisted, globalExisted, selfExisted } from './native';\n\nconst freeGlobalThis = globalThisExisted && globalThis.Object === Object && globalThis;\nconst freeGlobal = globalExisted && global.Object === Object && global;\nconst freeSelf = selfExisted && self.Object === Object && self;\n\n/**\n * @summary 全局对象。\n *\n * 不同的 JavaScript 环境都可以获取到对应的全局对象:\n * 1. Web 中等同于 `globalThis` / `window` / `self` / `frames` (兼容旧浏览器)\n * 2. Node.js 中等同于 `globalThis` / `global` (兼容低版本 Node.js)\n * 3. Web Workers 中等同于 `self`\n *\n * @since 1.10.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/globalThis | globalThis}\n */\nconst root: typeof globalThis = freeGlobalThis || freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './internals/root';\nimport { numberIsFinite } from './internals/native';\n\n/**\n * 检查值是否为有限数字。\n *\n * 同 `Number.isFinite`。\n *\n * @alias module:Language.isFinite\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为有限数字,返回 `true`,否则返回 `false`。\n * @example\n *\n * isFinite(1); // true\n *\n * isFinite(Infinity); // false\n *\n * isFinite(Number.MIN_VALUE); // true\n *\n * isFinite('1'); // false\n *\n * isFinite(null); // false\n *\n */\nfunction isFinite(value: any): value is number {\n return numberIsFinite ? numberIsFinite(value) : typeof value === 'number' && root.isFinite(value);\n}\n\nexport default isFinite;\n","import { mathFloor, numberIsInteger } from './internals/native';\nimport isFinite from './isFinite';\n\n/**\n * 检查值是否为整数。\n *\n * 同 `Number.isInteger`。\n *\n * @alias module:Language.isInteger\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为整数,返回 `true`,否则返回 `false`。\n * @example\n *\n * isInteger(1); // true\n *\n * isInteger(Infinity); // false\n *\n * isInteger(Number.MIN_VALUE); // false\n *\n * isInteger('1'); // false\n *\n * isInteger(null); // false\n *\n */\nfunction isInteger(value: any): value is number {\n return numberIsInteger ? numberIsInteger(value) : isFinite(value) && mathFloor(value) === value;\n}\n\nexport default isInteger;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { mapTag } from './internals/native';\nimport { nodeIsMap } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Map` 对象。\n *\n * @alias module:Language.isMap\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Map` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isMap(new Map); // true\n *\n * isMap(new WeakMap); // false\n *\n */\nfunction isMap(value: any): value is Map<any, any> {\n if (nodeIsMap) {\n return nodeIsMap(value);\n }\n return getTagWithBugfix(value) === mapTag;\n}\n\nexport default isMap;\n","import allKeys from './allKeys';\nimport getTag from './internals/getTag';\nimport { nativeUndefined, objectTag } from './internals/native';\nimport isEqualDeep from './internals/isEqualDeep';\n\n// 是否需要深比较\nfunction isDeepComparable(object: any, source: any) {\n return getTag(object) === objectTag && getTag(source) === objectTag;\n}\n\ntype Customizer = (objValue: any, srcValue: any, key?: number | string | symbol, object?: any, source?: any, objStack?: any[], srcStack?: any[]) => void | boolean;\n\nfunction baseIsMatch(object: Record<string | symbol, any>, source: Record<string | symbol, any>, customizer?: Customizer, strictCheck?: boolean, objStack?: any[], srcStack?: any[]) {\n const hasCustomizer = typeof customizer === 'function';\n\n if (isDeepComparable(object, source)) {\n // 假设循环结构是相等的。\n objStack = objStack || [];\n srcStack = srcStack || [];\n let stackLen = objStack.length;\n\n while (stackLen--) {\n // 遍历对象的堆栈,如果存在循环依赖,立即进行比较。\n // 相等才退出,否则必须匹配。\n if (objStack[stackLen] === object && srcStack[stackLen] === source) {\n return true;\n }\n }\n\n // 将对象添加到遍历对象的堆栈中。\n objStack.push(object);\n srcStack.push(source);\n\n const keys = allKeys(source);\n let length = keys.length;\n\n while (length--) {\n const key = keys[length];\n if (!(key in object)) {\n return false;\n }\n\n if (hasCustomizer) {\n const compared = customizer(object[key], source[key], key, object, source, objStack, srcStack);\n if (compared !== nativeUndefined) {\n if (!compared) {\n return false;\n }\n continue;\n }\n }\n\n // 循环对象\n if (!baseIsMatch(object[key], source[key], customizer, strictCheck, objStack, srcStack)) {\n return false;\n }\n }\n\n // 从遍历对象的堆栈中删除\n objStack.pop();\n srcStack.pop();\n return true;\n }\n\n // 非对象比较\n const result = isEqualDeep(\n object,\n source,\n (objValue, srcValue, k, obj, src) => {\n if (hasCustomizer) {\n const compared = customizer(objValue, srcValue, k, obj, src, objStack, srcStack);\n if (compared !== nativeUndefined) {\n return compared;\n }\n }\n if (isDeepComparable(objValue, srcValue)) {\n return baseIsMatch(objValue, srcValue, customizer, strictCheck, objStack, srcStack);\n }\n },\n strictCheck,\n objStack,\n srcStack\n );\n\n return result;\n}\n\n/**\n * 执行一个深比较,确定 `object` 是否含有和 `source` 完全相等的属性值。\n *\n * 注意:只有普通对象才会执行部分匹配,函数、数组不会执行部分匹配。\n *\n * 如果 `strictCheck=true`, 以下值不相等:\n *\n * 1. `0` `-0`\n * 2. `typeof` 不同类型,如 `1` `Object(1)`\n * 3. 无效日期对象,如 `new Date('')` `new Date('abc')`\n *\n * @alias module:Language.isMatch\n * @since 1.4.0\n * @requires module:Language.isEqual\n * @param {Object} object 要检查的对象。\n * @param {Object} source 属性值相匹配的对象。\n * @param {Function} [customizer] 自定义比较。\n * @param {boolean} [strictCheck=false] 严格比较。默认 `false`。\n * @returns {boolean} 如果 `object` 匹配,返回 `true`,否则返回 `false`。\n * @example\n *\n * const object = { a: 1, b: -0 }\n *\n * isMatch(object, { a: 1 }); // true\n * isMatch(object, { b: 0 }); // true\n *\n * // 严格比较\n * isMatch(object, { b: 0 }, undefined, true); // false\n *\n * // 自定义比较\n * function customizer(objValue, srcValue){\n * if(typeof objValue === 'string' && typeof srcValue === 'string'){\n * return true;\n * }\n * }\n * isMatch({ foo: 'a' }, { foo: 'b' }, customizer); // true\n * isMatch({ foo: ['a'] }, { foo: ['b'] }, customizer); // true\n * isMatch({ foo: 'a' }, { foo: 'b' }, customizer); // true\n *\n */\nfunction isMatch(object: object, source: object, customizer?: Customizer, strictCheck = false) {\n if (typeof customizer === 'function') {\n const compared = customizer(object, source);\n if (compared !== nativeUndefined) {\n return !!compared;\n }\n }\n\n return baseIsMatch(object, source, customizer, strictCheck, nativeUndefined, nativeUndefined);\n}\n\nexport default isMatch;\n","import root from './internals/root';\nimport isNumber from './isNumber';\n\n/**\n * 检查值是否为 `NaN`。\n *\n * 和 `Number.isNaN` 区别是 `new Number(NaN)` 也被认为是 `NaN`。\n *\n * @alias module:Language.isNaN\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `NaN`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNaN(NaN); // true\n *\n * isNaN(new Number(NaN)); // true\n *\n * isNaN(1); // false\n *\n */\nfunction isNaN(value: any): boolean {\n return isNumber(value) && root.isNaN(value);\n}\n\nexport default isNaN;\n","/**\n * 检查值是否为 `null`。\n *\n * @alias module:Language.isNull\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `null`,返回 `true`,否则返回 `false`。\n * @example\n *\n * isNull(null); // true\n *\n * isNull(void 0); // false\n *\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\nexport default isNull;\n","import isObject from './isObject';\n\n/**\n * 检测值是否类似 `Promise` 对象。\n *\n * 如果一个对象包含 `then` 方法,它就是类似 `Promise` 对象。\n *\n * @alias module:Language.isPromiseLike\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值类似 `Promise` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isPromiseLike(Promise.resolve()); // true\n *\n * isPromiseLike({ then: () => { } }); // true\n *\n * isPromiseLike([]); // false\n *\n */\nfunction isPromiseLike(value: any): value is Promise<any> | PromiseLike<any> {\n return isObject(value) && typeof (value as Promise<any>).then === 'function';\n}\n\nexport default isPromiseLike;\n","import getTag from './internals/getTag';\nimport { regExpTag } from './internals/native';\nimport { nodeIsRegExp } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `RegExp` 对象。\n *\n * @alias module:Language.isRegExp\n * @since 1.0.0\n * @param {*} value 要检查的值\n * @returns {boolean} 如果值为 `RegExp` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isRegExp(/abc/); // true\n *\n * isRegExp('/abc/'); // false\n *\n */\nfunction isRegExp(value: any): value is RegExp {\n return nodeIsRegExp ? nodeIsRegExp(value) : getTag(value) === regExpTag;\n}\n\nexport default isRegExp;\n","import { MAX_SAFE_INTEGER, mathAbs, numberIsSafeInteger } from './internals/native';\nimport isInteger from './isInteger';\n\n/**\n * 检查值是否为安全整数。\n *\n * 同 `Number.isSafeInteger`。\n *\n * 如果一个整数是一个 `IEEE-754` 双精度数字,它不是四舍五入的不安全整数的结果,那么它就是安全的。安全整数范围为 `-(2^53 - 1)` 到 `2^53 - 1` 之间的整数,包含 `-(2^53 - 1)` 和 `2^53 - 1`。\n *\n * @alias module:Language.isSafeInteger\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为安全整数,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSafeInteger(1); // true\n *\n * isSafeInteger(Infinity); // false\n *\n * isSafeInteger(Number.MIN_VALUE); // false\n *\n * isSafeInteger('1'); // false\n *\n * isSafeInteger(null); // false\n *\n */\nfunction isSafeInteger(value: any): value is number {\n return numberIsSafeInteger ? numberIsSafeInteger(value) : isInteger(value) && mathAbs(value) <= MAX_SAFE_INTEGER;\n}\n\nexport default isSafeInteger;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { setTag } from './internals/native';\nimport { nodeIsSet } from './internals/nodeUtil';\n\n/**\n * 检查值是否为 `Set` 对象。\n *\n * @alias module:Language.isSet\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Set` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isSet(new Set); // true\n *\n * isSet(new WeakSet); // false\n *\n */\nfunction isSet(value: any): value is Set<any> {\n return nodeIsSet ? nodeIsSet(value) : getTagWithBugfix(value) === setTag;\n}\n\nexport default isSet;\n","import getTag from './internals/getTag';\nimport { stringTag } from './internals/native';\n\n/**\n * 检查值是否为字符串类型或对象。\n *\n * @alias module:Language.isString\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为字符串类型或对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isString('abc'); // true\n *\n * isString(new String('abc')); // true\n *\n * isString(1); // false\n *\n */\nfunction isString(value: any): value is string {\n return typeof value === 'string' || getTag(value) === stringTag;\n}\n\nexport default isString;\n","import getTagWithBugfix from './internals/getTagWithBugfix';\nimport { weakMapTag } from './internals/native';\n\n/**\n * 检查值是否为 `WeakMap` 对象。\n *\n * @alias module:Language.isWeakMap\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `WeakMap` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWeakMap(new WeakMap); // true\n *\n * isWeakMap(new Map); // false\n *\n */\nfunction isWeakMap(value: any): value is WeakMap<object, any> {\n return getTagWithBugfix(value) === weakMapTag;\n}\n\nexport default isWeakMap;\n","import getTag from './internals/getTag';\nimport { weakSetTag } from './internals/native';\n\n/**\n * 检查值是否为 `WeakSet` 对象。\n *\n * @alias module:Language.isWeakSet\n * @since 1.0.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `WeakSet` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWeakSet(new WeakSet); // true\n *\n * isWeakSet(new Set); // false\n *\n */\nfunction isWeakSet(value: any): value is WeakSet<object> {\n return getTag(value) === weakSetTag;\n}\n\nexport default isWeakSet;\n","import getTag from './internals/getTag';\nimport { windowTag } from './internals/native';\nimport isObjectLike from './isObjectLike';\n\n/**\n * 检查值是否为 `Window` 对象。\n *\n * @alias module:Language.isWindow\n * @since 1.10.0\n * @param {*} value 要检查的值。\n * @returns {boolean} 如果值为 `Window` 对象,返回 `true`,否则返回 `false`。\n * @example\n *\n * isWindow({}); // false\n *\n * // 浏览器环境\n * isWindow(globalThis); // true\n * isWindow(window); // true\n * isWindow(self); // true\n * isWindow(frames); // true\n *\n */\nfunction isWindow(value: any): value is Window {\n return isObjectLike(value) && getTag(value) === windowTag;\n}\n\nexport default isWindow;\n","import isFinite from '../isFinite';\nimport toInteger from '../toInteger';\nimport toNumber from '../toNumber';\nimport toString from '../toString';\nimport { mathMin } from './native';\n\n/**\n * 数字调整。\n *\n * @private\n * @param {'floor' | 'ceil' | 'round'} type 调整的类型。\n * @param {number} value 要调整的数字。\n * @param {number} [precision=0] 指数(调整基数的10个对数)。\n * @returns {number} 调整后的数字。\n */\nfunction decimalAdjust(type: 'floor' | 'ceil' | 'round', value: number, precision = 0) {\n const func = Math[type];\n\n value = toNumber(value);\n precision = mathMin(toInteger(precision), 292);\n\n if (precision === 0 || !isFinite(value)) {\n return func(value);\n }\n\n // 移动\n let pair = toString(value).split('e');\n value = func(+(pair[0] + 'e' + (pair[1] ? +pair[1] + precision : precision)));\n\n // 向前移\n pair = toString(value).split('e');\n return +(pair[0] + 'e' + (pair[1] ? +pair[1] - precision : -precision));\n}\n\nexport default decimalAdjust;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度向上舍入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @alias module:Math.ceil\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 | 小数舍入}\n * @param {number} number 要向上舍入的值。\n * @param {number} [precision=0] 向上舍入的精度。默认 `0`。\n * @returns {number} 向上舍入的值。\n * @example\n *\n * ceil(4.16); // 5\n *\n * ceil(4.16, 1); // 4.2\n *\n * ceil(4160, -2); // 4200\n *\n */\nfunction ceil(number: number, precision?: number) {\n return decimalAdjust('ceil', number, precision);\n}\n\nexport default ceil;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度向下舍入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @alias module:Math.floor\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 | 小数舍入}\n * @param {number} number 要向下舍入的值。\n * @param {number} [precision=0] 向下舍入的精度。默认 `0`。\n * @returns {number} 向下舍入的值。\n * @example\n *\n * floor(4.16); // 4\n *\n * floor(4.16, 1); // 4.1\n *\n * floor(4160, -2); // 4100\n */\nfunction floor(number: number, precision?: number) {\n return decimalAdjust('floor', number, precision);\n}\n\nexport default floor;\n","import toNumber from '../toNumber';\n\ntype Comparator = (value: any, other: any) => boolean;\n\nexport function createOperation(comparator: Comparator) {\n return function (value: any, other: any) {\n if (!(typeof value === 'string' && typeof other === 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return comparator(value, other);\n };\n}\n\nexport const baseGt: Comparator = (value, other) => {\n return value > other;\n};\n\nexport const baseGte: Comparator = (value, other) => {\n return value >= other;\n};\n\nexport const baseLt: Comparator = (value, other) => {\n return value < other;\n};\n\nexport const baseLte: Comparator = (value, other) => {\n return value <= other;\n};\n","import isArray from '../isArray';\nimport isSymbol from '../isSymbol';\nimport createIteratee from './createIteratee';\nimport { nativeUndefined } from './native';\nimport { IterateeParam, WithNullable } from './types';\n\nfunction createExtremum<T>(array: WithNullable<T[]>, comparator: (value: any, other: any) => boolean, iteratee?: IterateeParam<T>) {\n if (!isArray(array)) {\n return;\n }\n\n let result: T | undefined, computed: number | undefined;\n const internalIteratee = createIteratee<T>(iteratee);\n\n array.forEach((value, index) => {\n const current = internalIteratee(value, index, array);\n if (current != null && (computed === nativeUndefined ? current === current && !isSymbol(current) : comparator(current, computed))) {\n computed = current;\n result = value;\n }\n });\n\n return result;\n}\n\nexport default createExtremum;\n","import { baseGt } from './internals/comparator';\nimport createExtremum from './internals/createExtremum';\nimport { ExtremumFunction, IterateeParam, WithNullable } from './internals/types';\n\n/**\n * 调用 `array` 中的每一个元素,来生成其值排序的标准,返回最大的值。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index` `array`。\n *\n * @function\n * @alias module:Math.max\n * @since 1.0.0\n * @param {Array} array 要迭代的数组。\n * @param {Function | string | number | Symbol} [iteratee] 调用每个元素的迭代函数。\n * @returns {*} 最大的值。\n * @example\n *\n * const array = [1, 2, 3];\n *\n * max(array); // 3\n *\n * const objects = [{n: 1}, {n: 2}];\n *\n * max(objects, item => item.n); // {n: 2}\n *\n * // 迭代函数可以直接写入属性。\n * max(objects, 'n'); // {n: 2};\n *\n */\nconst max: ExtremumFunction = function <T>(array: WithNullable<T[]>, iteratee?: IterateeParam<T>) {\n return createExtremum(array, baseGt, iteratee);\n};\n\nexport default max;\n","import { baseLt } from './internals/comparator';\nimport createExtremum from './internals/createExtremum';\nimport { ExtremumFunction, IterateeParam, WithNullable } from './internals/types';\n\n/**\n * 调用 `array` 中的每一个元素,来生成其值排序的标准,返回最小的值。\n *\n * `iteratee` 调用时会传入三个参数 `value` `index` `array`。\n *\n * @alias module:Math.min\n * @since 1.0.0\n * @param {Array} array 要迭代的数组。\n * @param {Function | string | number | Symbol} [iteratee] 调用每个元素的迭代函数。\n * @returns {*} 最小的值。\n * @example\n *\n * const array = [1, 2, 3];\n *\n * min(array); // 1\n *\n * const objects = [{n: 1}, {n: 2}];\n *\n * min(objects, item => item.n); // {n: 1}\n *\n * // 迭代函数可以直接写入属性。\n * min(objects, 'n'); // {n: 1};\n */\nconst min: ExtremumFunction = function <T>(array: WithNullable<T[]>, iteratee?: IterateeParam<T>) {\n return createExtremum(array, baseLt, iteratee);\n};\n\nexport default min;\n","import decimalAdjust from './internals/decimalAdjust';\n\n/**\n * 根据精度四舍五入 `number`。\n *\n * 注:精度可以理解为保留几位小数。\n *\n * @alias module:Math.round\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 | 小数舍入}\n * @param {number} number 要四舍五入的值。\n * @param {number} [precision=0] 四舍五入的精度。默认 `0`。\n * @returns {number} 四舍五入的值。\n * @example\n *\n * round(4.16); // 4\n *\n * round(4.16, 1); // 4.2\n *\n * round(4160, -2); // 4200\n */\nfunction round(number: number, precision?: number) {\n return decimalAdjust('round', number, precision);\n}\n\nexport default round;\n","import defaultTo from './defaultTo';\nimport { nativeUndefined } from './internals/native';\nimport toNumber from './toNumber';\n\ninterface Clamp {\n (number: number, upper: number): number;\n (number: number, lower: number, upper: number): number;\n}\n\n/**\n * 数字限制在 `lower` 和 `upper` 之间的值。\n *\n * @function\n * @alias module:Number.clamp\n * @since 1.0.0\n * @param {number} number 被限制的值。\n * @param {number} [lower] 下限。默认 `0`。\n * @param {number} upper 上限。默认 `0`。\n * @returns {number} 限制后的值。\n * @example\n *\n * clamp(-10, -5, 5); // -5\n *\n * clamp(-10, 0, 5); // 0\n *\n * clamp(10, -5, 5); // 5\n *\n * // 仅限制上限\n * clamp(10, 5); // 5\n *\n * clamp(-10, 5); // -10\n *\n */\nconst clamp: Clamp = function (number: number, lower?: number, upper?: number) {\n if (upper === nativeUndefined) {\n upper = lower;\n lower = nativeUndefined;\n }\n\n if (upper !== nativeUndefined) {\n upper = defaultTo(toNumber(upper), 0);\n }\n\n if (lower !== nativeUndefined) {\n lower = defaultTo(toNumber(lower), 0);\n }\n\n number = toNumber(number);\n\n if (number === number) {\n if (upper !== nativeUndefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== nativeUndefined) {\n number = number >= lower ? number : lower;\n }\n }\n\n return number;\n};\n\nexport default clamp;\n","import { mathMax, mathMin } from './internals/native';\nimport toNumber from './toNumber';\n\n/**\n * 检查数字是否在 `start` 与 `end` 之间,但不包括 `end`。\n *\n * 如果 `start` 大于 `end` 会自动交换范围参数。\n *\n * @alias module:Number.inRange\n * @since 1.0.0\n * @param {number} number 要检查的值。\n * @param {number} start 开始范围。\n * @param {number} [end=0] 结束范围。默认 `0`。\n * @returns {number} 如果数字在范围内,返回 `true`,否则返回 `false`。\n * @example\n *\n * inRange(3, 2, 4); // true\n *\n * inRange(1, 0, 2); // true\n *\n * inRange(1.2, 0.5, 1.5); // true\n *\n * inRange(2.2, 0.5, 1.5); // false\n *\n * inRange(-2, -2, 4); // true\n *\n * inRange(4, -2, 4); // false\n *\n * // 某个范围为 0 可省略最后一个参数\n * inRange(1, 2); // true\n *\n * inRange(1, -2); // false\n *\n */\nfunction inRange(number: number, start: number, end = 0) {\n number = toNumber(number);\n start = toNumber(start);\n end = toNumber(end);\n return number >= mathMin(start, end) && number < mathMax(start, end);\n}\n\nexport default inRange;\n","import { mathMax, mathMin, mathRandom } from './internals/native';\nimport toFinite from './toFinite';\n\n/**\n * 产生一个包含 `lower` 与 `upper` 之间的随机浮点数。\n *\n * 如果 `lower` 大于 `upper` 会自动交换参数。\n *\n * @alias module:Number.random\n * @since 1.0.0\n * @param {number} [lower=0] 下限。默认 `0`。\n * @param {number} [upper=1] 上限。默认 `1`。\n * @returns {number} 随机浮点数。\n * @example\n *\n * // 0 到 1 之间的浮点数\n * random(); // 0.40340470210512236\n *\n * // 2 到 4 之间的浮点数\n * random(2, 4); // 3.0039717466399787\n *\n * // 2 到 4 之间的浮点数\n * random(4, 2); // 2.388398370184757\n *\n * // 1.2 到 2.4 之间的浮点数\n * random(1.2, 2.4); // 1.6319041677720918\n *\n */\nfunction random(lower = 0, upper = 1) {\n lower = toFinite(lower);\n upper = toFinite(upper);\n const min = mathMin(lower, upper);\n const max = mathMax(lower, upper);\n return min + mathRandom() * (max - min);\n}\n\nexport default random;\n","/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {string[]} 对象可枚举的属性\n */\nfunction getKeysIn(object: object) {\n const result: string[] = [];\n for (const key in object) {\n result.push(key);\n }\n return result;\n}\n\nexport default getKeysIn;\n","import getSymbols from './getSymbols';\nimport { objectGetPrototypeOf } from './native';\n\n/**\n * 创建一个数组,包含自身以及继承的可枚举 `symbol` 属性。\n *\n * @private\n * @param {Object} object 要查询的对象\n * @returns {Symbol[]} 可枚举的 `symbol` 属性数组\n */\nfunction getSymbolsIn(object: object) {\n const result: symbol[] = [];\n\n let o = Object(object);\n\n while (o) {\n getSymbols(o).forEach((item) => {\n if (result.indexOf(item) === -1) {\n result.push(item);\n }\n });\n o = objectGetPrototypeOf(o);\n }\n\n return result;\n}\n\nexport default getSymbolsIn;\n","import getKeysIn from './internals/getKeysIn';\nimport getSymbolsIn from './internals/getSymbolsIn';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(包含 `Symbol` 属性)。\n *\n * 同 `key...in` + 递归原型 `Object.getOwnPropertySymbols`。\n *\n * 注意:`Symbol` 键属性在字符串属性后面。\n *\n * @alias module:Object.allKeysIn\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {Array<string|symbol>} 对象自身及继承的可枚举属性(包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * allKeysIn(new Foo); // ['a', 'c', Symbol(b), Symbol(d)]\n *\n */\nfunction allKeysIn(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return (getKeysIn(object) as (string | symbol)[]).concat(getSymbolsIn(object));\n}\n\nexport default allKeysIn;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import forEach from './forEach';\nimport { stubFlase } from './internals/helpers';\nimport { MapKey, MapPredicate, ObjectPredicate, WithNullable } from './internals/types';\nimport isMap from './isMap';\nimport isObject from './isObject';\n\ninterface FindKey {\n <T extends Map<any, any>>(map: WithNullable<T>, predicate?: MapPredicate<T>): MapKey<T> | undefined;\n <T extends object, K extends keyof T = keyof T>(object: WithNullable<T>, predicate?: ObjectPredicate<T>): K | undefined;\n}\n\n/**\n * 查找对象的键。\n *\n * @alias module:Object.findKey\n * @since 1.13.0\n * @param {Object | Map} obj 对象或 Map 对象\n * @param {Function} [predicate] 迭代对象自身的可枚举属性(包含 `Symbol` 属性)调用的函数,返回 `Truthy` 表示要查找该值对应的键。\n * @returns 如果对象存在要查找的值,返回该值的键,否则返回 `undefined`。\n * @example\n * const obj = { foo: 'bar', baz: 42 }\n * findKey(obj, isNumber); // 'baz'\n * findKey(obj, v => typeof v === 'bar'); // 'foo'\n *\n * const map = new Map([['foo', 'bar'], ['baz', 42]]);\n * findKey(map, isNumber); // 'baz'\n * findKey(map, v => typeof v === 'bar'); // 'foo'\n */\nconst findKey: FindKey = (obj: object | Map<any, any>, predicate: MapPredicate<any> | ObjectPredicate<any> = stubFlase) => {\n let key;\n\n if (isMap(obj)) {\n for (const [k, v] of obj) {\n if (predicate(v, k)) {\n key = k;\n break;\n }\n }\n } else if (isObject(obj)) {\n forEach(obj, (v, k) => {\n if (predicate(v, k)) {\n key = k;\n return false;\n }\n });\n }\n\n return key;\n};\n\nexport default findKey;\n","import allKeys from './allKeys';\nimport { stubTrue } from './internals/helpers';\nimport { objectProtoToString } from './internals/native';\nimport { ObjectPredicate, PropertyName, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象由 `object` 自身可枚举属性(包含 `Symbol` 属性)和值反转组成。\n *\n * @alias module:Object.invert\n * @since 1.8.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy | Truthy}\n * @param {Object} object 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要反转,否则不反转。\n * @returns {Object} 新对象。\n * @example\n *\n * invert({ a: 1, b: 2 }); // { 1: 'a', 2: 'b' }\n *\n * invert({ a: undefined, b: null }); // { undefined: 'a', null: 'b' }\n *\n */\nfunction invert<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubTrue) {\n const _keys = allKeys(object);\n const result: Record<PropertyName, any> = {};\n\n _keys.forEach((key) => {\n const value = object![key as keyof T];\n if (predicate(value, key as keyof T)) {\n const valueProp = value != null && typeof value.toString != 'function' ? objectProtoToString.call(value) : (value as string | symbol);\n result[valueProp] = key;\n } else {\n result[key] = value;\n }\n });\n return result;\n}\n\nexport default invert;\n","import { objectKeys } from './internals/native';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身的可枚举属性(不包含 `Symbol` 属性)。\n *\n * 同 `Object.keys`。\n *\n * @alias module:Object.keys\n * @since 1.7.0\n * @param {Object} object 要查询的对象。\n * @returns {string[]} 对象自身的可枚举属性(不包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * keys(new Foo); // ['a']\n *\n */\nfunction keys(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return objectKeys(object);\n}\n\nexport default keys;\n","import getKeysIn from './internals/getKeysIn';\nimport isObject from './isObject';\n\n/**\n * 创建一个数组,包含对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n *\n * 同 `key...in`。\n *\n * @alias module:Object.keysIn\n * @since 1.1.0\n * @param {Object} object 要查询的对象。\n * @returns {string[]} 对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。\n * @example\n *\n * function Foo(){\n * this.a = 1;\n * this[Symbol.for('b')] = 2;\n * }\n * Foo.prototype.c = 3;\n * Foo.prototype[Symbol.for('d')] = 4;\n *\n * keysIn(new Foo); // ['a', 'c']\n *\n */\nfunction keysIn(object?: any) {\n if (!isObject(object)) {\n return [];\n }\n return getKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isObjectLike from './isObjectLike';\nimport isPlainObject from './isPlainObject';\nimport { nativeUndefined } from './internals/native';\nimport allKeys from './allKeys';\n\ntype GetKeysMethod = <T extends object>(object: T) => (symbol | string)[];\ntype Customizer = (objValue: any, srcValue: any, key: string | symbol, object: any, source: any) => any;\n\n// 内部处理合并和循环引用\nfunction baseMerge<TObject, TSource>(object: TObject, source: TSource, getKeys: GetKeysMethod, customizer?: Customizer, stack = new WeakMap()) {\n const obj = Object(object);\n\n if (!isObject(source) || obj === source) {\n return obj;\n }\n const keys = getKeys(source as object);\n const hasCustomizer = typeof customizer === 'function';\n\n keys.forEach((key) => {\n // @ts-ignore\n const srcValue = source[key];\n const srcIsObj = isObject(srcValue);\n\n if (srcIsObj && stack.has(srcValue)) {\n obj[key] = srcValue;\n } else {\n const newValue = hasCustomizer ? customizer(obj[key], srcValue, key, obj, source) : nativeUndefined;\n if (newValue !== nativeUndefined) {\n obj[key] = newValue;\n } else {\n const objValue = obj[key];\n let newObjValue: any;\n\n if (srcIsObj) {\n stack.set(srcValue, true);\n if (isArray(srcValue)) {\n newObjValue = isArray(objValue) ? objValue : [];\n } else if (isPlainObject(srcValue)) {\n newObjValue = isObjectLike(objValue) ? objValue : {};\n }\n }\n\n if (newObjValue) {\n obj[key] = baseMerge(newObjValue, srcValue, getKeys, customizer, stack);\n } else if (srcValue !== nativeUndefined || !(key in obj)) {\n obj[key] = srcValue;\n }\n }\n }\n });\n\n return obj;\n}\n\n/**\n * 递归合并 `source` 来源对象自身的可枚举属性(包含 `Symbol` 属性)到 `object` 目标对象。\n *\n * 如果目标值存在,被解析为 `undefined` 的 `source` 来源对象属性将被跳过。数组和普通对象会递归合并,其他对象和值会被直接分配覆盖。\n *\n * 如果不需要合并数组,第三个参数传入 `merge.NOT_MERGE_ARRAYS` 。\n *\n * 如果需要合并继承的属性,第四个参数传入 {@link https://caijf.github.io/ut2/module-Object.html#.allKeysIn allKeysIn} 方法, `merge(object, source, undefined, allKeysIn)`。\n *\n * @alias module:Object.merge\n * @since 1.0.0\n * @param {Object | Array} object 目标对象。\n * @param {Object | Array} source 来源对象。\n * @param {Function} [customizer] 自定义赋值函数,如果函数返回 `undefined` 将使用默认合并。\n * @param {Function} [getKeys=allKeys] 自定义获取对象键方法。默认 `allKeys`。\n * @returns {Object} 目标对象。\n * @example\n *\n * merge({c: 3}, {e: 5}); // { c: 3, e: 5 }\n * merge({ a: 1 }, { a: undefined, b: undefined }); // { a: 1, b: undefined }\n *\n * const object = {\n * a: [{b: 2}, {d: 4}]\n * }\n * const other = {\n * a: [{c: 3},{e: 5}]\n * }\n *\n * merge(object, other); // { a: [{b: 2, c: 3}, {d: 4, e: 5}] }\n *\n * // 数组不合并\n * merge(object, other, merge.NOT_MERGE_ARRAYS); // { a: [{c: 3},{e: 5}] }\n *\n * // 或自定义数组不合并方法\n * merge(object, other, (objValue, srcValue) => isArray(srcValue) ? srcValue : undefined); // { a: [{c: 3},{e: 5}] }\n *\n */\nfunction merge<TObject, TSource>(object: TObject, source: TSource, customizer?: Customizer, getKeys: GetKeysMethod = allKeys): TObject & TSource {\n return baseMerge(object, source, getKeys, customizer);\n}\n\nmerge.NOT_MERGE_ARRAYS = (objValue: any, srcValue: any) => (isArray(srcValue) ? srcValue : undefined);\n\nexport default merge;\n","import merge from './merge';\n\ninterface MergeObject {\n <T1, T2>(t1: T1, t2: T2): T1 & T2;\n <T1, T2, T3>(t1: T1, t2: T2, t3: T3): T1 & T2 & T3;\n <T1, T2, T3, T4>(t1: T1, t2: T2, t3: T3, t4: T4): T1 & T2 & T3 & T4;\n <T1, T2, T3, T4, T5>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): T1 & T2 & T3 & T4 & T5;\n <T1, T2, T3, T4, T5, T6>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6): T1 & T2 & T3 & T4 & T5 & T6;\n <T1, T2, T3, T4, T5, T6, T7>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7): T1 & T2 & T3 & T4 & T5 & T6 & T7;\n <T1, T2, T3, T4, T5, T6, T7, T8>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8): T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8;\n <T1, T2, T3, T4, T5, T6, T7, T8, T9>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9): T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9;\n <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6, t7: T7, t8: T8, t9: T9, t10: T10): T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10;\n <T1, T2, T>(t1: T1, t2: T2, ...args: T[]): T1 & T2 & T;\n}\n\n/**\n * 递归合并 `source` 来源对象自身的可枚举属性(包含 `Symbol` 属性)到 `object` 目标对象。\n *\n * 与 `merge` 方法的区别:\n *\n * 1. 不合并数组,如果只传入 `2` 个参数,同 `merge(obj, src, merge.NOT_MERGE_ARRAYS)`\n * 2. 不支持自定义赋值函数和获取对象键,但支持多个来源对象参数\n *\n * @alias module:Object.mergeObject\n * @since 1.15.0\n * @param {Object | Array} object 目标对象。\n * @param {...object} args 展开的来源对象。\n * @returns 目标对象。\n * @example\n *\n * mergeObject({c: 3}, {e: 5}); // { c: 3, e: 5 }\n * mergeObject({ a: 1 }, { a: undefined, b: undefined }); // { a: 1, b: undefined }\n * mergeObject({ a: 1 }, { a: undefined, b: undefined }, {c:'x'}); // { a: 1, b: undefined, c: 'x' }\n *\n * const source = {\n * a: [{b: 2}, {d: 4}]\n * }\n * const otherSource = {\n * a: [{c: 3},{e: 5}]\n * }\n * mergeObject({}, source, otherSource); // { a: [{c: 3}, {e: 5}] }\n */\nconst mergeObject: MergeObject = <TObject, TSource, TArgs>(object: TObject, source: TSource, ...args: TArgs[]) => {\n if (args.length > 0) {\n const [arg1, ...restArgs] = args;\n const obj = merge(object, source, merge.NOT_MERGE_ARRAYS);\n return mergeObject(obj, arg1, ...restArgs);\n }\n return merge(object, source, merge.NOT_MERGE_ARRAYS);\n};\n\nexport default mergeObject;\n","import isArray from './isArray';\n\n/**\n * 如果值不是数组,则将其转换为数组。\n *\n * @alias module:Util.castArray\n * @since 1.0.0\n * @param {*} [value] 要处理的值。\n * @returns {Array} 转换后的数组。\n * @example\n *\n * castArray('a'); // [\"a\"]\n *\n * castArray(1); // [1]\n *\n * castArray({ a: 1, b: 2}); // [{ a: 1, b: 2}]\n *\n * castArray(); // []\n *\n * castArray(undefined); // [undefined]\n *\n * castArray(null); // [null]\n *\n * const arr = [1, 2, 3];\n * castArray(arr); // [1, 2, 3]\n * console.log(arr === castArray(arr)); // true\n */\nfunction castArray<T>(value?: T | T[]): T[] {\n if (!arguments.length) {\n return [];\n }\n return isArray(value) ? value : [value as T];\n}\n\nexport default castArray;\n","import allKeysIn from './allKeysIn';\nimport castArray from './castArray';\nimport { Many, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象由忽略属性之外的 `object` 自身和继承的可枚举属性组成。与 [`pick`](#.pick) 相反。\n *\n * @alias module:Object.omit\n * @since 1.0.0\n * @param {Object} object 来源对象。\n * @param {string | string[]} [fields] 要被忽略的属性。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * // 浅拷贝对象\n * omit(obj); // { name: \"jeff\", age: 18 }\n *\n * // 排除单个属性\n * omit(obj, 'name'); // { age: 18 }\n *\n * // 排除多个属性\n * omit(obj, ['name', 'age']); // {}\n *\n */\nfunction omit<T extends object, K extends keyof T = never>(object: WithNullable<T>, fields: Many<K> = []) {\n const keys = allKeysIn(object) as K[];\n const fieldArr = castArray(fields);\n const result = {} as T;\n\n keys.forEach((key) => {\n if (fieldArr.indexOf(key) === -1) {\n result[key] = object![key];\n }\n });\n\n return result as Omit<T, K>;\n}\n\nexport default omit;\n","import allKeysIn from './allKeysIn';\nimport { stubFlase } from './internals/helpers';\nimport { ObjectPredicate, WithNullable } from './internals/types';\n\n/**\n * 创建一个对象,该对象的属性从 `object` 中经 `predicate` (断言函数)判断为真值的属性。\n *\n * `predicate` 调用时会传入两个参数 `value` `key`。\n *\n * @alias module:Object.pickBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy | Truthy}\n * @param {Object} obj 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要提取该属性,否则不提取。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * pickBy(obj); // {}\n *\n * pickBy(obj, (value) => typeof value === 'number'); // { age: 18 }\n *\n * pickBy(obj, (value) => value); // { name: \"jeff\", age: 18 }\n *\n */\nfunction pickBy<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubFlase) {\n const result: Partial<T> = {};\n\n const keys = allKeysIn(object) as (keyof T)[];\n\n keys.forEach((key) => {\n if (predicate(object![key], key)) {\n result[key] = object![key];\n }\n });\n\n return result;\n}\n\nexport default pickBy;\n","import { stubFlase } from './internals/helpers';\nimport { ObjectPredicate, WithNullable } from './internals/types';\nimport negate from './negate';\nimport pickBy from './pickBy';\n\n/**\n * 创建一个对象,该对象忽略 `predicate` (断言函数)判断不是真值的属性后,`object` 自身和继承的可枚举属性组成。与 [`pickBy`](#.pickBy) 相反。\n *\n * `predicate` 调用时会传入两个参数 `value` `key`。\n *\n * @alias module:Object.omitBy\n * @since 1.0.0\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy | Truthy}\n * @param {Object} object 来源对象。\n * @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要忽略该属性,否则不忽略。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * omitBy(obj); // { name: \"jeff\", age: 18 }\n *\n * omitBy(obj, (value) => typeof value === 'number'); // { name: \"jeff\" }\n *\n * omitBy(obj, (value) => value); // {}\n *\n */\nfunction omitBy<T extends object>(object: WithNullable<T>, predicate: ObjectPredicate<T> = stubFlase) {\n return pickBy(object, negate(predicate));\n}\n\nexport default omitBy;\n","import castArray from './castArray';\nimport { Many, WithNullable } from './internals/types';\nimport isObject from './isObject';\n\n/**\n * 创建一个从 `object` 选中的属性的对象。\n *\n * 允许选取对象的所有属性(包含不可枚举属性)。\n *\n * @alias module:Object.pick\n * @since 1.0.0\n * @param {Object} object 来源对象。\n * @param {string | string[]} [fields] 选中的属性。\n * @returns {Object} 新对象。\n * @example\n *\n * const obj = { name: \"jeff\", age: 18 };\n *\n * pick(obj); // {}\n *\n * // 选取单个属性\n * pick(obj, 'name'); // { name: \"jeff\" }\n *\n * // 选取多个属性\n * pick(obj, ['name', 'age']); // { name: \"jeff\", age: 18 }\n */\nfunction pick<T extends object, K extends keyof T = never>(object: WithNullable<T>, fields: Many<K> = []) {\n const result = {} as T;\n\n if (!isObject(object)) {\n return result;\n }\n\n const fieldArr = castArray(fields);\n\n fieldArr.forEach((field) => {\n if (field in object) {\n result[field] = object[field];\n }\n });\n\n return result as Pick<T, K>;\n}\n\nexport default pick;\n","const reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * 拆分字符串中的词为数组。\n *\n * @alias module:String.words\n * @since 1.0.0\n * @see {@link https://zh.wikipedia.org/wiki/ASCII | ASCII}\n * @param {string} string 要拆分的字符串。\n * @param {RegExp | string} [pattern=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g] 匹配模式。默认 `/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g`。\n * @returns {string[]} 拆分后的数组。\n * @example\n *\n * words('fred, barney, & pebbles'); // ['fred', 'barney', 'pebbles']\n *\n * words('fred, barney, & pebbles', /[^, ]+/g); // ['fred', 'barney', '&', 'pebbles']\n *\n */\nfunction words(string: string, pattern: RegExp | string = reAsciiWord): string[] {\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import toString from '../toString';\nimport words from '../words';\n\n/**\n * 拆分字符串词组。\n *\n * @private\n * @param {string} string 要拆分的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string[]} 拆分后的数组。\n */\nfunction splitCaseWords(string: string, pattern?: RegExp | string) {\n return words(toString(string).replace(/['\\u2019]/g, ''), pattern);\n}\n\nexport default splitCaseWords;\n","import toString from '../toString';\n\n/**\n * 生成一个首个字符串处理的函数。\n *\n * @private\n * @param {string} methodName 首个字符串的大小写方法。\n * @returns {string} 新的大小写函数。\n */\nfunction createCaseFirst(methodName: 'toLowerCase' | 'toUpperCase') {\n return (string: string) => {\n const str = toString(string);\n if (!str) {\n return '';\n }\n return str[0][methodName]() + str.slice(1);\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './internals/createCaseFirst';\n\n/**\n * 转换字符串第一个字符为大写。\n *\n * @function\n * @alias module:String.upperFirst\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * upperFirst('bar'); // 'Bar'\n *\n * upperFirst('BAR'); // 'BAR'\n *\n * lowerFirst('--foo-bar--'); // '--foo-bar--' 不进行分词处理\n *\n * lowerFirst('foo-bar'); // 'Foo-bar'\n *\n */\nconst upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import splitCaseWords from './internals/splitCaseWords';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串为驼峰写法。\n *\n * @alias module:String.camelCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Camel_case | Camel_case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 驼峰写法的字符串。\n * @example\n *\n * camelCase('foo bar'); // 'fooBar'\n *\n * camelCase('foo-bar'); // 'fooBar'\n *\n * camelCase('Foo Bar'); // 'fooBar'\n *\n * camelCase('FOO BAR'); // 'fooBar'\n *\n * camelCase('--FOO-BAR--'); // 'fooBar'\n *\n * camelCase('__FOO_BAR__'); // 'fooBar'\n *\n */\nfunction camelCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => {\n cur = cur.toLowerCase();\n return prev + (index ? upperFirst(cur) : cur);\n }, '');\n}\n\nexport default camelCase;\n","import toString from './toString';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串首字母大写,剩下为小写。\n *\n * @alias module:String.capitalize\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 首字母大写的字符串。\n * @example\n *\n * capitalize('bar'); // 'Bar'\n *\n * capitalize('BAR'); // 'Bar'\n *\n */\nfunction capitalize(string: string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import toString from './toString';\n\nconst htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\n\nconst reUnescapedHtml = /[&<>\"']/g;\nconst reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * 转义字符串中的 `&` `<` `>` `\"` `'` 字符为 HTML 实体字符。\n *\n * 注意:不会转义其他字符。如果需要,可以使用第三方库,如 [he](https://github.com/mathiasbynens/he) 。\n *\n * 虽然 \">\" 是对称转义的,字符如 \">\" 和 \"/\" 没有特殊的意义,所以不需要在 HTML 转义。 除非它们是标签的一部分,或者是不带引号的属性值。\n *\n * 当解析 HTML 时,总应该在[属性值上使用引号](http://wonko.com/post/html-escaping)以减少 XSS 的可能性。\n *\n * @alias module:String.escape\n * @since 1.0.0\n * @see {@link https://mathiasbynens.be/notes/ambiguous-ampersands | ambiguous-ampersands}\n * @param {string} string 要转义的字符串。\n * @returns {string} 转义后的字符串。\n * @example\n *\n * escape('<script></script>'); // '&lt;script&gt;&lt;/script&gt;'\n *\n * escape('&'); // '&amp;'\n *\n */\nfunction escape(string: string) {\n string = toString(string);\n return string && reHasUnescapedHtml.test(string)\n ? string.replace(reUnescapedHtml, (chr) => {\n // @ts-ignore\n return htmlEscapes[chr];\n })\n : string || '';\n}\n\nexport default escape;\n","const reRegExpChar = /[\\\\^$.*+?\\-()[\\]{}|]/g;\nconst reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * 转义 `RegExp` 字符串中特殊的字符 `\\\\` `^` `$` `.` `*` `+` `?` `-` `(` `)` `[` `]` `{` `}` `|`。\n *\n * @alias module:String.escapeRegExp\n * @since 1.0.0\n * @see {@link https://tc39.es/ecma262/multipage/text-processing.html#sec-patterns | syntax characters}\n * @param {string} string 要转义的字符串。\n * @returns {string} 转义后的字符串。\n * @example\n *\n * escapeRegExp('\\\\'); // '\\\\\\\\'\n *\n * escapeRegExp('-+='); // '\\\\-\\\\+='\n *\n * escapeRegExp('[ut2](https://caijf.github.io/ut2/)'); // '\\\\[ut2\\\\]\\\\(https://caijf\\\\.github\\\\.io/ut2/\\\\)'\n *\n */\nfunction escapeRegExp(string: string) {\n return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\\\$&') : string || '';\n}\n\nexport default escapeRegExp;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为连接符小写。\n *\n * @alias module:String.kebabCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Letter_case#Special_case_styles | kebab case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * kebabCase('foo bar'); // 'foo-bar'\n *\n * kebabCase('foo-bar'); // 'foo-bar'\n *\n * kebabCase('Foo Bar'); // 'foo-bar'\n *\n * kebabCase('FOO BAR'); // 'foo-bar'\n *\n * kebabCase('--FOO-BAR--'); // 'foo-bar'\n *\n * kebabCase('__FOO_BAR__'); // 'foo-bar'\n *\n */\nfunction kebabCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? '-' : '') + cur.toLowerCase(), '');\n}\n\nexport default kebabCase;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为空格分隔的小写单词。\n *\n * @alias module:String.lowerCase\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 小写字符串。\n * @example\n *\n * lowerCase('foo bar'); // 'foo bar'\n *\n * lowerCase('foo-bar'); // 'foo bar'\n *\n * lowerCase('Foo Bar'); // 'foo bar'\n *\n * lowerCase('FOO BAR'); // 'foo bar'\n *\n * lowerCase('--FOO-BAR--'); // 'foo bar'\n *\n * lowerCase('__FOO_BAR__'); // 'foo bar'\n *\n */\nfunction lowerCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? ' ' : '') + cur.toLowerCase(), '');\n}\n\nexport default lowerCase;\n","import createCaseFirst from './internals/createCaseFirst';\n\n/**\n * 转换字符串第一个字符为小写。\n *\n * @function\n * @alias module:String.lowerFirst\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * lowerFirst('Bar'); // 'bar'\n *\n * lowerFirst('BAR'); // 'bAR'\n *\n * lowerFirst('--Foo-bar--'); // '--Foo-bar--' 不进行分词处理\n *\n * lowerFirst('Foo-bar'); // 'foo-bar'\n *\n */\nconst lowerFirst = createCaseFirst('toLowerCase');\n\nexport default lowerFirst;\n","import splitCaseWords from './internals/splitCaseWords';\nimport upperFirst from './upperFirst';\n\n/**\n * 转换字符串为帕斯卡写法。又名为大驼峰写法。\n *\n * @alias module:String.pascalCase\n * @since 1.8.0\n * @see {@link https://en.wikipedia.org/wiki/Camel_case | Camel_case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 帕斯卡写法的字符串。\n * @example\n *\n * pascalCase('foo bar'); // 'FooBar'\n *\n * pascalCase('foo-bar'); // 'FooBar'\n *\n * pascalCase('Foo Bar'); // 'FooBar'\n *\n * pascalCase('FOO BAR'); // 'FooBar'\n *\n * pascalCase('--FOO-BAR--'); // 'FooBar'\n *\n * pascalCase('__FOO_BAR__'); // 'FooBar'\n *\n */\nfunction pascalCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur) => {\n cur = cur.toLowerCase();\n return prev + upperFirst(cur);\n }, '');\n}\n\nexport default pascalCase;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为下划线小写。\n *\n * @alias module:String.snakeCase\n * @since 1.0.0\n * @see {@link https://en.wikipedia.org/wiki/Snake_case | snake case}\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * snakeCase('foo bar'); // 'foo_bar'\n *\n * snakeCase('foo-bar'); // 'foo_bar'\n *\n * snakeCase('Foo Bar'); // 'foo_bar'\n *\n * snakeCase('FOO BAR'); // 'foo_bar'\n *\n * snakeCase('--FOO-BAR--'); // 'foo_bar'\n *\n * snakeCase('__FOO_BAR__'); // 'foo_bar'\n *\n */\nfunction snakeCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? '_' : '') + cur.toLowerCase(), '');\n}\n\nexport default snakeCase;\n","import toString from './toString';\n\nconst htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n};\n\nconst reEscapedHtml = /&(?:amp|lt|gt|quot|#(0+)?39);/g;\nconst reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * 转义字符串中的 HTML 实体字符 `&amp;` `&lt;` `&quot;` `&#39;` 为对应的字符。\n *\n * 注意:不会转换其他的 HTML 实体。如果需要,可以使用第三方库,如 [he](https://github.com/mathiasbynens/he) 。\n *\n * @alias module:String.unescape\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @returns {string} 转换后的字符串。\n * @example\n *\n * unescape('&lt;script&gt;&lt;/script&gt;'); // '<script></script>'\n *\n * unescape('&amp;'); // '&'\n */\nfunction unescape(string: string) {\n string = toString(string);\n return string && reHasEscapedHtml.test(string)\n ? string.replace(reEscapedHtml, (chr) => {\n // @ts-ignore\n return htmlUnescapes[chr] || \"'\";\n })\n : string || '';\n}\n\nexport default unescape;\n","import splitCaseWords from './internals/splitCaseWords';\n\n/**\n * 转换字符串为空格分隔的大写单词。\n *\n * @alias module:String.upperCase\n * @since 1.0.0\n * @param {string} string 要转换的字符串。\n * @param {RegExp | string} [pattern] 拆分词组的匹配模式。\n * @returns {string} 大写字符串。\n * @example\n *\n * upperCase('foo bar'); // 'FOO BAR'\n *\n * upperCase('foo-bar'); // 'FOO BAR'\n *\n * upperCase('Foo Bar'); // 'FOO BAR'\n *\n * upperCase('FOO BAR'); // 'FOO BAR'\n *\n * upperCase('--FOO-BAR--'); // 'FOO BAR'\n *\n * upperCase('__FOO_BAR__'); // 'FOO BAR'\n *\n */\nfunction upperCase(string: string, pattern?: RegExp | string) {\n return splitCaseWords(string, pattern).reduce((prev, cur, index) => prev + (index ? ' ' : '') + cur.toUpperCase(), '');\n}\n\nexport default upperCase;\n","import allKeys from './allKeys';\nimport { nativeUndefined } from './internals/native';\nimport { PropertyName, WithNullable } from './internals/types';\nimport isNil from './isNil';\n\ninterface ConformsTo {\n <T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => boolean>): boolean;\n (object: WithNullable<object>, source: Record<PropertyName, (value: any) => boolean>): boolean;\n}\n\n/**\n * 通过调用断言 `source` 的属性与 `object` 的相应属性值,检查 `object` 是否符合 `source`。\n *\n * @function\n * @alias module:Util.conformsTo\n * @since 1.0.0\n * @param {Object} object 要检查的对象。\n * @param {Object} source 要断言属性是否符合的对象。\n * @returns {boolean} 如果 `object` 符合,返回 `true`,否则返回 `false`。\n * @example\n *\n * const object = { a: 1, b: 2 }\n *\n * conformsTo(object, { b: value => value > 1 }); // true\n *\n * conformsTo(object, { b: value => value > 2 }); // false\n *\n */\nconst conformsTo: ConformsTo = function <T extends object, K extends keyof T>(object: T, source: Record<K, (value: T[K]) => boolean>) {\n const props = allKeys(source) as unknown as K[];\n const length = props.length;\n\n if (isNil(object)) {\n return !length;\n }\n\n if (length === 0) {\n return true;\n }\n\n for (let i = 0; i < length; i++) {\n const key = props[i];\n const predicate = source[key];\n const value = object[key];\n\n if ((value === nativeUndefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n\n return true;\n};\n\nexport default conformsTo;\n","import conformsTo from './conformsTo';\nimport { PropertyName, WithNullable } from './internals/types';\n\ninterface ConformsFunction {\n <T extends object, K extends keyof T>(source: Record<PropertyName, (value: T[K]) => boolean>): (object: WithNullable<T>) => boolean;\n (source: object): (object: any) => boolean;\n}\n\n/**\n * 创建一个函数,调用 `source` 的属性名对应的断言函数与传入对象相对应属性名的值进行断言处理。如果都符合返回 `true`,否则返回 `false`。\n *\n * @function\n * @alias module:Util.conforms\n * @since 1.0.0\n * @param {Object} source 要断言属性是否符合的对象。\n * @returns {Function} 新的函数。\n * @example\n *\n * const objs = [\n * { a: 1, b: 1 },\n * { a: 2, b: 2 }\n * ]\n *\n * objs.filter(conforms({ b: value => value > 1 })); // [{ a: 2: b: 2 }]\n */\nconst conforms: ConformsFunction = function <T extends object, K extends keyof T, S extends object = Record<PropertyName, (value: T[K]) => boolean>>(source: S) {\n return function (object: T) {\n return conformsTo(object, source);\n };\n};\n\nexport default conforms;\n","/**\n * 创建一个返回 `value` 的函数。\n *\n * @alias module:Util.constant\n * @since 1.0.0\n * @param {*} value 新函数返回的值。\n * @returns {Function} 返回新的常量函数。\n * @example\n *\n * const obj = { a: 1 }\n *\n * const returnObj = constant(obj);\n *\n * console.log(returnObj() === obj); // true\n */\nfunction constant<T>(value: T) {\n return function () {\n return value;\n };\n}\n\nexport default constant;\n","import { baseGt, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否大于 `other`。\n *\n * @function\n * @alias module:Util.gt\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 大于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * gt(1, 3); // false\n *\n * gt(3, 3); // false\n *\n * gt(3, 1); // true\n *\n */\nconst gt = createOperation(baseGt);\n\nexport default gt;\n","import { baseGte, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否大于或等于 `other`。\n *\n * @function\n * @alias module:Util.gte\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 大于或等于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * gte(1, 3); // false\n *\n * gte(3, 3); // true\n *\n * gte(3, 1); // true\n *\n */\nconst gte = createOperation(baseGte);\n\nexport default gte;\n","import { SingleAsyncFn, SingleSyncFn } from './internals/types';\nimport isPromiseLike from './isPromiseLike';\n\ninterface Guard {\n <R>(fn: SingleAsyncFn<R>, shouldGuard?: () => boolean): Promise<R | undefined>;\n <R>(fn: SingleSyncFn<R>, shouldGuard?: () => boolean): R | undefined;\n}\n\n/**\n * 函数守卫。\n *\n * @alias module:Util.guard\n * @since 1.14.0\n * @param {Function} fn 要执行的函数。\n * @param {Function} [shouldGuard] 函数守卫断言。如果返回 `Truthy` 表示需要守卫,否则不需要守卫。\n * @returns 如果函数执行成功,正常返回结果;如果异步函数拒绝或抛出错误时,有函数守卫返回 `undefined`,否则抛出错误。\n * @example\n * guard(() => 42); // 42\n * await guard(() => Primise.resolve(42)); // 42\n *\n * guard(() => { throw new Error() }); // undefined\n * await guard(() => Promise.reject()); // undefined\n */\nconst guard: Guard = <R>(fn: SingleAsyncFn<R> | SingleSyncFn<R>, shouldGuard?: (err: any) => boolean) => {\n const _guard = (err: any) => {\n if (shouldGuard && !shouldGuard(err)) {\n throw err;\n }\n return undefined;\n };\n try {\n const result = fn();\n return isPromiseLike(result) ? result.catch(_guard) : result;\n } catch (err) {\n return _guard(err);\n }\n};\n\nexport default guard;\n","import identity from './identity';\nimport { MAX_ARRAY_LENGTH, MAX_SAFE_INTEGER, mathFloor, mathMin } from './internals/native';\nimport isInteger from './isInteger';\nimport isFinite from './isFinite';\n\ninterface List {\n <T>(n: number, iteratee: (index: number) => T): T[];\n (n: number): number[];\n}\n\n/**\n * 调用 `iteratee` `n` 次,每次调用返回的结果存入到数组中。\n *\n * `iteratee` 调用传入一个参数 `index`。\n *\n * *注:原方法名为 `times`,自 `v1.12.0` 版本调整为 `list`。*\n *\n * @function\n * @alias module:Util.list\n * @since 1.12.0\n * @param {number} n 调用 `iteratee` 的次数。\n * @param {Function} [iteratee=identity] 每次迭代调用的函数。默认 `identity`。\n * @returns {Array} 调用结果的数组。\n * @example\n *\n * list(3); // [0, 1, 2]\n *\n * list(3, String); // ['0', '1', '2']\n *\n * list(4, () => 0); // [0, 0, 0, 0]\n *\n */\nconst list: List = function <T>(n: number, iteratee = identity): T[] {\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n\n let index = 0;\n const length = mathMin(isInteger(n) ? n : mathFloor(isFinite(n) ? n : 0), MAX_ARRAY_LENGTH);\n const result = Array(length);\n const func = typeof iteratee === 'function' ? iteratee : identity;\n\n while (index < length) {\n result[index] = func(index);\n index++;\n }\n\n return result;\n};\n\nexport default list;\n","import { baseLt, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否小于 `other`。\n *\n * @function\n * @alias module:Util.lt\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 小于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * lt(1, 3); // true\n *\n * lt(3, 3); // false\n *\n * lt(3, 1); // false\n *\n */\nconst lt = createOperation(baseLt);\n\nexport default lt;\n","import { baseLte, createOperation } from './internals/comparator';\n\n/**\n * 检查 `value` 是否小于或等于 `other`。\n *\n * @function\n * @alias module:Util.lte\n * @since 1.0.0\n * @param {*} value 要比较的值。\n * @param {*} other 另一个要比较的值。\n * @returns {boolean} 如果 `value` 小于或等于 `other` 返回 `true`,否则返回 `false`。\n * @example\n *\n * lte(1, 3); // true\n *\n * lte(3, 3); // true\n *\n * lte(3, 1); // false\n *\n */\nconst lte = createOperation(baseLte);\n\nexport default lte;\n","/**\n * 空函数,返回 `undefined`。\n *\n * @alias module:Util.noop\n * @since 1.0.0\n * @example\n *\n * noop(); // undefined\n *\n */\nfunction noop() {}\n\nexport default noop;\n","import nth from './nth';\n\n/**\n * 创建一个函数,该函数返回第 `n` 个参数。如果 `n` 为负数,则返回从结尾开始的第 `n` 个参数。\n *\n * @alias module:Util.nthArg\n * @since 1.0.0\n * @param {number} [n=0] 要返回参数的索引值。默认 `0`。\n * @returns 新函数。\n * @example\n *\n * const func1 = nthArg(1);\n *\n * func1('a', 'b', 'c', 'd'); // 'b'\n *\n * const func2 = nthArg(-2);\n *\n * func2('a', 'b', 'c', 'd'); // 'c'\n *\n */\nfunction nthArg(n = 0) {\n return function (...args: any[]) {\n return nth(args, n);\n };\n}\n\nexport default nthArg;\n","import { mathCeil, mathMax } from './internals/native';\nimport isNil from './isNil';\nimport toFinite from './toFinite';\n\ninterface Range {\n (start: number, end: number, step: number): number[];\n (start: number, end: number): number[];\n (end: number): number[];\n}\n\n/**\n * 创建一个升序或降序的数字数组。\n *\n * 如果省略 `start` 默认为 `0`。\n *\n * @function\n * @alias module:Util.range\n * @since 1.6.0\n * @param {number} [start=0] 开始值。默认 `0`。\n * @param {number} end 结束值。\n * @param {number} [step] 要增加或减少的值。如果值为 `0`,将视为无效参数。如果 `start` 在 `end` 之前。默认为 `1`,否则默认为 `-1`。\n * @return {number[]} 从开始值(包含)到结束值(不包含)逐步递增或递减的数字数组。\n * @example\n *\n * range(4); // [0, 1, 2, 3]\n * range(-4); // [0, -1, -2, -3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(0, -4, -1); // [1, 2, 3]\n * range(1, 4, 0); // [1, 2, 3]\n * range(0); // []\n */\nconst range: Range = function (start: number, end?: number, step?: number) {\n start = toFinite(start);\n if (isNil(end)) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n\n step = toFinite(step);\n\n // 值为 0, '', null, undefined 时\n if (!step) {\n step = start < end ? 1 : -1;\n }\n\n let index = -1;\n let length = mathMax(mathCeil((end - start) / step), 0);\n const result = Array(length);\n while (length--) {\n result[++index] = start;\n start += step;\n }\n\n return result;\n};\n\nexport default range;\n","/**\n * 异步方法中等待时间后继续执行。\n *\n * @alias module:Util.sleep\n * @since 1.0.0\n * @param {number} [ms=1000] 等待时间,单位毫秒。默认 `1000`。\n * @returns {Promise<void>} 异步对象。\n * @example\n *\n * async ()=>{\n * await sleep();\n * // do something\n * }\n *\n * sleep(300).then(()=>{\n * // do something\n * })\n *\n */\nfunction sleep(ms = 1000) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport default sleep;\n","import { nativeUndefined } from './internals/native';\nimport { AsyncFn, SyncFn } from './internals/types';\nimport isPromiseLike from './isPromiseLike';\n\ninterface Tryit {\n <P extends any[], R>(fn: AsyncFn<P, R>): (...args: P) => Promise<[null, R] | [Error, undefined]>;\n <P extends any[], R>(fn: SyncFn<P, R>): (...args: P) => [null, R] | [Error, undefined];\n}\n\n/**\n * 包装一个函数(支持异步函数),将其转为错误优先函数。\n *\n * @alias module:Util.tryit\n * @since 1.13.0\n * @param {Function} fn 要包装的函数。\n * @returns 如果执行成功返回 `[null, result]`,否则返回 `[Error, undefined]`。\n * @example\n * const getGreet = async (name: string) => {\n * return 'hello ' + name;\n * }\n * const [err, result] = await tryit(getGreet)('jeff');\n * console.log([err, result]);\n * // [null, 'hello jeff']\n *\n *\n * const errorFn = async (name: string) => {\n * throw new Error('error message');\n * return 'hello ' + name;\n * }\n * const [err2, result2] = await tryit(errorFn)('jeff');\n * console.log([err2, result2]);\n * // [Error: error message, undefined]\n */\nconst tryit: Tryit = <P extends any[], R>(fn: AsyncFn<P, R> | SyncFn<P, R>) => {\n return (...args: P): any => {\n try {\n const result = fn(...args);\n if (isPromiseLike(result)) {\n return result\n .then((res) => {\n return [null, res];\n })\n .catch((err) => {\n return [err, nativeUndefined];\n });\n }\n return [null, result];\n } catch (err) {\n return [err as Error, nativeUndefined];\n }\n };\n};\n\nexport default tryit;\n","import sleep from './sleep';\nimport tryit from './tryit';\n\n/**\n * 异步函数错误重试。\n *\n * @alias module:Util.retry\n * @since 1.14.0\n * @param {Function} fn 异步函数。\n * @param {Object} [options] 配置项。\n * @param {number} [options.times=3] 异步函数发生错误,最多重试次数。默认 `3`。\n * @param {number} [options.delay] 重试延迟时长,单位毫秒。\n * @param {Function} [options.backoff] 类似于延迟,便于实现指数后退。\n * @param {Function} [options.exit] 主动退出断言。\n * @returns 如果异步函数 `resolve` ,返回异步函数结果,否则抛出错误。\n * @example\n * let count = 1;\n * const fn = () => ++count < 3 ? Promise.reject('error') : Promise.resolve('success');\n * const result = await retry(fn); // 'success';\n *\n * try{\n * // 延迟使用指数后退。\n * await retry(verifySecret, { times: 100, backoff(count){ return count*count } })\n * }catch(err){\n * console.log(err);\n * }\n */\nasync function retry<T>(\n fn: () => Promise<T>,\n options?: {\n times?: number;\n delay?: number;\n backoff?: (count: number) => number;\n exit?: (err: any, count: number) => boolean;\n }\n // @ts-ignore\n): Promise<T> {\n const { times = 3, delay, backoff, exit } = options || {};\n for (let i = 1; i <= times; i++) {\n const [err, result] = await tryit(fn)();\n if (!err) return result;\n if ((exit && exit(err, i)) || i === times) throw err;\n if (delay) await sleep(delay);\n if (backoff) await sleep(backoff(i));\n }\n}\n\nexport default retry;\n","import list from './list';\n\ntype Times = typeof list;\n\n/**\n * @private\n * @deprecated 方法名调整为 `list` 。\n */\nconst times: Times = list;\nexport default times;\n","import { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } from './internals/native';\nimport toInteger from './toInteger';\n\n/**\n * 转换 `value` 为一个安全整数。\n *\n * @alias module:Util.toSafeInteger\n * @since 1.0.0\n * @param {*} value 要转换的值。\n * @returns {number} 转换后的整数。\n * @example\n *\n * toSafeInteger(3.2); // 3\n *\n * toSafeInteger('3.2'); // 3\n *\n * toSafeInteger(-0); // -0\n *\n * toSafeInteger('-0'); // -0\n *\n * toSafeInteger('0'); // 0\n *\n * toSafeInteger(NaN); // 0\n *\n * toSafeInteger(Infinity); // 9007199254740991\n *\n * toSafeInteger(-Infinity); // -9007199254740991\n *\n */\nfunction toSafeInteger(value: any): number {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toInteger(value);\n if (value > MAX_SAFE_INTEGER) {\n return MAX_SAFE_INTEGER;\n }\n if (value < MIN_SAFE_INTEGER) {\n return MIN_SAFE_INTEGER;\n }\n return value;\n}\n\nexport default toSafeInteger;\n","import { mathRandom } from './internals/native';\n\n// 计数器\nlet idCounter = 0;\n\n// 默认前缀,避免不同工具库uniqueId之间产生的值冲突\nconst defaultPrefix = '_' + mathRandom().toString(36).substring(2, 4);\n\n/**\n * 生成唯一ID。如果提供了 `prefix`,会被添加到ID前缀上。\n *\n * @alias module:Util.uniqueId\n * @since 1.0.0\n * @param {string} [prefix] 要添加到ID前缀的值。默认 `\"_\" + 2个随机生成的字符`。\n * @returns {string} 唯一ID。\n * @example\n *\n * uniqueId(); // '_vn1'\n *\n * uniqueId(); // '_vn2'\n *\n * uniqueId('abc_'); // 'abc_3'\n *\n */\nfunction uniqueId(prefix = defaultPrefix) {\n return '' + prefix + ++idCounter;\n}\n\nexport default uniqueId;\n"],"names":["PLACEHOLDER","getTagWithBugfix"],"mappings":"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","x_google_ignoreList":[113]}