fca-shadow 0.0.1-security → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fca-shadow might be problematic. Click here for more details.

Files changed (502) hide show
  1. package/.1obgge4cxlazf1346921747~ +0 -0
  2. package/CHANGELOG.md +2 -0
  3. package/DOCS.md +1738 -0
  4. package/GetThreads/GetThreadInfo.js +128 -0
  5. package/GetThreads/Last-Run.js +65 -0
  6. package/LICENSE-MIT +21 -0
  7. package/README.md +132 -3
  8. package/StateCrypt.js +96 -0
  9. package/broadcast.js +22 -0
  10. package/index.html +1200 -0
  11. package/index.js +684 -0
  12. package/languages/index.json +150 -0
  13. package/lib/getInfoNew.js +34 -0
  14. package/lib/getToken.js +44 -0
  15. package/logger.js +23 -0
  16. package/package/database/SyntheticDatabase.sqlite +0 -0
  17. package/package/database/index.js +358 -0
  18. package/package/database/node_modules/lodash/_baseGet/README.md +20 -0
  19. package/package/database/node_modules/lodash/_baseGet/index.js +74 -0
  20. package/package/database/node_modules/lodash/_baseGet/package.json +18 -0
  21. package/package/database/node_modules/lodash/add.js +22 -0
  22. package/package/database/node_modules/lodash/after.js +42 -0
  23. package/package/database/node_modules/lodash/array.js +67 -0
  24. package/package/database/node_modules/lodash/ary.js +29 -0
  25. package/package/database/node_modules/lodash/assign.js +58 -0
  26. package/package/database/node_modules/lodash/assignIn.js +40 -0
  27. package/package/database/node_modules/lodash/assignInWith.js +38 -0
  28. package/package/database/node_modules/lodash/assignWith.js +37 -0
  29. package/package/database/node_modules/lodash/at.js +23 -0
  30. package/package/database/node_modules/lodash/attempt.js +35 -0
  31. package/package/database/node_modules/lodash/before.js +40 -0
  32. package/package/database/node_modules/lodash/bind.js +57 -0
  33. package/package/database/node_modules/lodash/bindAll.js +41 -0
  34. package/package/database/node_modules/lodash/bindKey.js +68 -0
  35. package/package/database/node_modules/lodash/camelCase.js +29 -0
  36. package/package/database/node_modules/lodash/capitalize.js +23 -0
  37. package/package/database/node_modules/lodash/castArray.js +44 -0
  38. package/package/database/node_modules/lodash/ceil.js +26 -0
  39. package/package/database/node_modules/lodash/chain.js +38 -0
  40. package/package/database/node_modules/lodash/chunk.js +50 -0
  41. package/package/database/node_modules/lodash/clamp.js +39 -0
  42. package/package/database/node_modules/lodash/clone.js +36 -0
  43. package/package/database/node_modules/lodash/cloneDeep.js +29 -0
  44. package/package/database/node_modules/lodash/cloneDeepWith.js +40 -0
  45. package/package/database/node_modules/lodash/cloneWith.js +42 -0
  46. package/package/database/node_modules/lodash/collection.js +30 -0
  47. package/package/database/node_modules/lodash/commit.js +33 -0
  48. package/package/database/node_modules/lodash/compact.js +31 -0
  49. package/package/database/node_modules/lodash/concat.js +43 -0
  50. package/package/database/node_modules/lodash/cond.js +60 -0
  51. package/package/database/node_modules/lodash/conforms.js +35 -0
  52. package/package/database/node_modules/lodash/conformsTo.js +32 -0
  53. package/package/database/node_modules/lodash/constant.js +26 -0
  54. package/package/database/node_modules/lodash/core.js +3877 -0
  55. package/package/database/node_modules/lodash/core.min.js +29 -0
  56. package/package/database/node_modules/lodash/countBy.js +40 -0
  57. package/package/database/node_modules/lodash/create.js +43 -0
  58. package/package/database/node_modules/lodash/curry.js +57 -0
  59. package/package/database/node_modules/lodash/curryRight.js +54 -0
  60. package/package/database/node_modules/lodash/date.js +3 -0
  61. package/package/database/node_modules/lodash/debounce.js +191 -0
  62. package/package/database/node_modules/lodash/deburr.js +45 -0
  63. package/package/database/node_modules/lodash/defaultTo.js +25 -0
  64. package/package/database/node_modules/lodash/defaults.js +64 -0
  65. package/package/database/node_modules/lodash/defaultsDeep.js +30 -0
  66. package/package/database/node_modules/lodash/defer.js +26 -0
  67. package/package/database/node_modules/lodash/delay.js +28 -0
  68. package/package/database/node_modules/lodash/difference.js +33 -0
  69. package/package/database/node_modules/lodash/differenceBy.js +44 -0
  70. package/package/database/node_modules/lodash/differenceWith.js +40 -0
  71. package/package/database/node_modules/lodash/divide.js +22 -0
  72. package/package/database/node_modules/lodash/drop.js +38 -0
  73. package/package/database/node_modules/lodash/dropRight.js +39 -0
  74. package/package/database/node_modules/lodash/dropRightWhile.js +45 -0
  75. package/package/database/node_modules/lodash/dropWhile.js +45 -0
  76. package/package/database/node_modules/lodash/each.js +1 -0
  77. package/package/database/node_modules/lodash/eachRight.js +1 -0
  78. package/package/database/node_modules/lodash/endsWith.js +43 -0
  79. package/package/database/node_modules/lodash/entries.js +1 -0
  80. package/package/database/node_modules/lodash/entriesIn.js +1 -0
  81. package/package/database/node_modules/lodash/eq.js +37 -0
  82. package/package/database/node_modules/lodash/escape.js +43 -0
  83. package/package/database/node_modules/lodash/escapeRegExp.js +32 -0
  84. package/package/database/node_modules/lodash/every.js +56 -0
  85. package/package/database/node_modules/lodash/extend.js +1 -0
  86. package/package/database/node_modules/lodash/extendWith.js +1 -0
  87. package/package/database/node_modules/lodash/fill.js +45 -0
  88. package/package/database/node_modules/lodash/filter.js +52 -0
  89. package/package/database/node_modules/lodash/find.js +42 -0
  90. package/package/database/node_modules/lodash/findIndex.js +55 -0
  91. package/package/database/node_modules/lodash/findKey.js +44 -0
  92. package/package/database/node_modules/lodash/findLast.js +25 -0
  93. package/package/database/node_modules/lodash/findLastIndex.js +59 -0
  94. package/package/database/node_modules/lodash/findLastKey.js +44 -0
  95. package/package/database/node_modules/lodash/first.js +1 -0
  96. package/package/database/node_modules/lodash/flake.lock +40 -0
  97. package/package/database/node_modules/lodash/flake.nix +20 -0
  98. package/package/database/node_modules/lodash/flatMap.js +29 -0
  99. package/package/database/node_modules/lodash/flatMapDeep.js +31 -0
  100. package/package/database/node_modules/lodash/flatMapDepth.js +31 -0
  101. package/package/database/node_modules/lodash/flatten.js +22 -0
  102. package/package/database/node_modules/lodash/flattenDeep.js +25 -0
  103. package/package/database/node_modules/lodash/flattenDepth.js +33 -0
  104. package/package/database/node_modules/lodash/flip.js +28 -0
  105. package/package/database/node_modules/lodash/floor.js +26 -0
  106. package/package/database/node_modules/lodash/flow.js +27 -0
  107. package/package/database/node_modules/lodash/flowRight.js +26 -0
  108. package/package/database/node_modules/lodash/forEach.js +41 -0
  109. package/package/database/node_modules/lodash/forEachRight.js +31 -0
  110. package/package/database/node_modules/lodash/forIn.js +39 -0
  111. package/package/database/node_modules/lodash/forInRight.js +37 -0
  112. package/package/database/node_modules/lodash/forOwn.js +36 -0
  113. package/package/database/node_modules/lodash/forOwnRight.js +34 -0
  114. package/package/database/node_modules/lodash/fp/F.js +1 -0
  115. package/package/database/node_modules/lodash/fp/add.js +5 -0
  116. package/package/database/node_modules/lodash/fp/after.js +5 -0
  117. package/package/database/node_modules/lodash/fp/all.js +1 -0
  118. package/package/database/node_modules/lodash/fp/allPass.js +1 -0
  119. package/package/database/node_modules/lodash/fp/always.js +1 -0
  120. package/package/database/node_modules/lodash/fp/any.js +1 -0
  121. package/package/database/node_modules/lodash/fp/anyPass.js +1 -0
  122. package/package/database/node_modules/lodash/fp/apply.js +1 -0
  123. package/package/database/node_modules/lodash/fp/array.js +2 -0
  124. package/package/database/node_modules/lodash/fp/ary.js +5 -0
  125. package/package/database/node_modules/lodash/fp/assign.js +5 -0
  126. package/package/database/node_modules/lodash/fp/assignAll.js +5 -0
  127. package/package/database/node_modules/lodash/fp/assignAllWith.js +5 -0
  128. package/package/database/node_modules/lodash/fp/assignIn.js +5 -0
  129. package/package/database/node_modules/lodash/fp/assignInAll.js +5 -0
  130. package/package/database/node_modules/lodash/fp/assignInAllWith.js +5 -0
  131. package/package/database/node_modules/lodash/fp/assignInWith.js +5 -0
  132. package/package/database/node_modules/lodash/fp/assignWith.js +5 -0
  133. package/package/database/node_modules/lodash/fp/assoc.js +1 -0
  134. package/package/database/node_modules/lodash/fp/assocPath.js +1 -0
  135. package/package/database/node_modules/lodash/fp/at.js +5 -0
  136. package/package/database/node_modules/lodash/fp/attempt.js +5 -0
  137. package/package/database/node_modules/lodash/fp/before.js +5 -0
  138. package/package/database/node_modules/lodash/fp/bind.js +5 -0
  139. package/package/database/node_modules/lodash/fp/bindAll.js +5 -0
  140. package/package/database/node_modules/lodash/fp/bindKey.js +5 -0
  141. package/package/database/node_modules/lodash/fp/camelCase.js +5 -0
  142. package/package/database/node_modules/lodash/fp/capitalize.js +5 -0
  143. package/package/database/node_modules/lodash/fp/castArray.js +5 -0
  144. package/package/database/node_modules/lodash/fp/ceil.js +5 -0
  145. package/package/database/node_modules/lodash/fp/chain.js +5 -0
  146. package/package/database/node_modules/lodash/fp/chunk.js +5 -0
  147. package/package/database/node_modules/lodash/fp/clamp.js +5 -0
  148. package/package/database/node_modules/lodash/fp/clone.js +5 -0
  149. package/package/database/node_modules/lodash/fp/cloneDeep.js +5 -0
  150. package/package/database/node_modules/lodash/fp/cloneDeepWith.js +5 -0
  151. package/package/database/node_modules/lodash/fp/cloneWith.js +5 -0
  152. package/package/database/node_modules/lodash/fp/collection.js +2 -0
  153. package/package/database/node_modules/lodash/fp/commit.js +5 -0
  154. package/package/database/node_modules/lodash/fp/compact.js +5 -0
  155. package/package/database/node_modules/lodash/fp/complement.js +1 -0
  156. package/package/database/node_modules/lodash/fp/compose.js +1 -0
  157. package/package/database/node_modules/lodash/fp/concat.js +5 -0
  158. package/package/database/node_modules/lodash/fp/cond.js +5 -0
  159. package/package/database/node_modules/lodash/fp/conforms.js +1 -0
  160. package/package/database/node_modules/lodash/fp/conformsTo.js +5 -0
  161. package/package/database/node_modules/lodash/fp/constant.js +5 -0
  162. package/package/database/node_modules/lodash/fp/contains.js +1 -0
  163. package/package/database/node_modules/lodash/fp/convert.js +18 -0
  164. package/package/database/node_modules/lodash/fp/countBy.js +5 -0
  165. package/package/database/node_modules/lodash/fp/create.js +5 -0
  166. package/package/database/node_modules/lodash/fp/curry.js +5 -0
  167. package/package/database/node_modules/lodash/fp/curryN.js +5 -0
  168. package/package/database/node_modules/lodash/fp/curryRight.js +5 -0
  169. package/package/database/node_modules/lodash/fp/curryRightN.js +5 -0
  170. package/package/database/node_modules/lodash/fp/date.js +2 -0
  171. package/package/database/node_modules/lodash/fp/debounce.js +5 -0
  172. package/package/database/node_modules/lodash/fp/deburr.js +5 -0
  173. package/package/database/node_modules/lodash/fp/defaultTo.js +5 -0
  174. package/package/database/node_modules/lodash/fp/defaults.js +5 -0
  175. package/package/database/node_modules/lodash/fp/defaultsAll.js +5 -0
  176. package/package/database/node_modules/lodash/fp/defaultsDeep.js +5 -0
  177. package/package/database/node_modules/lodash/fp/defaultsDeepAll.js +5 -0
  178. package/package/database/node_modules/lodash/fp/defer.js +5 -0
  179. package/package/database/node_modules/lodash/fp/delay.js +5 -0
  180. package/package/database/node_modules/lodash/fp/difference.js +5 -0
  181. package/package/database/node_modules/lodash/fp/differenceBy.js +5 -0
  182. package/package/database/node_modules/lodash/fp/differenceWith.js +5 -0
  183. package/package/database/node_modules/lodash/fp/dissoc.js +1 -0
  184. package/package/database/node_modules/lodash/fp/dissocPath.js +1 -0
  185. package/package/database/node_modules/lodash/fp/divide.js +5 -0
  186. package/package/database/node_modules/lodash/fp/drop.js +5 -0
  187. package/package/database/node_modules/lodash/fp/dropLast.js +1 -0
  188. package/package/database/node_modules/lodash/fp/dropLastWhile.js +1 -0
  189. package/package/database/node_modules/lodash/fp/dropRight.js +5 -0
  190. package/package/database/node_modules/lodash/fp/dropRightWhile.js +5 -0
  191. package/package/database/node_modules/lodash/fp/dropWhile.js +5 -0
  192. package/package/database/node_modules/lodash/fp/each.js +1 -0
  193. package/package/database/node_modules/lodash/fp/eachRight.js +1 -0
  194. package/package/database/node_modules/lodash/fp/endsWith.js +5 -0
  195. package/package/database/node_modules/lodash/fp/entries.js +1 -0
  196. package/package/database/node_modules/lodash/fp/entriesIn.js +1 -0
  197. package/package/database/node_modules/lodash/fp/eq.js +5 -0
  198. package/package/database/node_modules/lodash/fp/equals.js +1 -0
  199. package/package/database/node_modules/lodash/fp/escape.js +5 -0
  200. package/package/database/node_modules/lodash/fp/escapeRegExp.js +5 -0
  201. package/package/database/node_modules/lodash/fp/every.js +5 -0
  202. package/package/database/node_modules/lodash/fp/extend.js +1 -0
  203. package/package/database/node_modules/lodash/fp/extendAll.js +1 -0
  204. package/package/database/node_modules/lodash/fp/extendAllWith.js +1 -0
  205. package/package/database/node_modules/lodash/fp/extendWith.js +1 -0
  206. package/package/database/node_modules/lodash/fp/fill.js +5 -0
  207. package/package/database/node_modules/lodash/fp/filter.js +5 -0
  208. package/package/database/node_modules/lodash/fp/find.js +5 -0
  209. package/package/database/node_modules/lodash/fp/findFrom.js +5 -0
  210. package/package/database/node_modules/lodash/fp/findIndex.js +5 -0
  211. package/package/database/node_modules/lodash/fp/findIndexFrom.js +5 -0
  212. package/package/database/node_modules/lodash/fp/findKey.js +5 -0
  213. package/package/database/node_modules/lodash/fp/findLast.js +5 -0
  214. package/package/database/node_modules/lodash/fp.js +2 -0
  215. package/package/database/node_modules/lodash/fromPairs.js +28 -0
  216. package/package/database/node_modules/lodash/function.js +25 -0
  217. package/package/database/node_modules/lodash/functions.js +31 -0
  218. package/package/database/node_modules/lodash/functionsIn.js +31 -0
  219. package/package/database/node_modules/lodash/get.js +33 -0
  220. package/package/database/node_modules/node-fetch/CHANGELOG.md +266 -0
  221. package/package/database/node_modules/node-fetch/LICENSE.md +22 -0
  222. package/package/database/node_modules/node-fetch/README.md +583 -0
  223. package/package/database/node_modules/node-fetch/browser.js +23 -0
  224. package/package/database/node_modules/node-fetch/lib/index.es.js +1633 -0
  225. package/package/database/node_modules/node-fetch/lib/index.js +1642 -0
  226. package/package/database/node_modules/node-fetch/lib/index.mjs +1631 -0
  227. package/package/database/node_modules/node-fetch/package.json +70 -0
  228. package/package/database/node_modules/sqlite3/CHANGELOG.md +313 -0
  229. package/package/database/node_modules/sqlite3/CONTRIBUTING.md +57 -0
  230. package/package/database/node_modules/sqlite3/LICENSE +25 -0
  231. package/package/database/node_modules/sqlite3/README.md +259 -0
  232. package/package/database/node_modules/sqlite3/binding.gyp +66 -0
  233. package/package/database/node_modules/sqlite3/deps/common-sqlite.gypi +60 -0
  234. package/package/database/node_modules/sqlite3/deps/extract.js +10 -0
  235. package/package/database/node_modules/sqlite3/deps/sqlite-autoconf-3380200.tar.gz +0 -0
  236. package/package/database/node_modules/sqlite3/deps/sqlite3.gyp +121 -0
  237. package/package/database/node_modules/sqlite3/lib/binding/napi-v6-linux-x64/node_sqlite3.node +0 -0
  238. package/package/database/node_modules/sqlite3/lib/index.js +1 -0
  239. package/package/database/node_modules/sqlite3/lib/sqlite3-binding.js +5 -0
  240. package/package/database/node_modules/sqlite3/lib/sqlite3.js +205 -0
  241. package/package/database/node_modules/sqlite3/lib/trace.js +38 -0
  242. package/package/database/node_modules/sqlite3/package.json +82 -0
  243. package/package/database/node_modules/sqlite3/sqlite3.js +1 -0
  244. package/package/database/node_modules/sqlite3/src/async.h +82 -0
  245. package/package/database/node_modules/sqlite3/src/backup.cc +420 -0
  246. package/package/database/node_modules/sqlite3/src/backup.h +221 -0
  247. package/package/database/node_modules/sqlite3/src/database.cc +738 -0
  248. package/package/database/node_modules/sqlite3/src/database.h +206 -0
  249. package/package/database/node_modules/sqlite3/src/gcc-preinclude.h +6 -0
  250. package/package/database/node_modules/sqlite3/src/macros.h +212 -0
  251. package/package/database/node_modules/sqlite3/src/node_sqlite3.cc +115 -0
  252. package/package/database/node_modules/sqlite3/src/statement.cc +947 -0
  253. package/package/database/node_modules/sqlite3/src/statement.h +249 -0
  254. package/package/database/node_modules/sqlite3/src/threading.h +48 -0
  255. package/package/database/package.json +31 -0
  256. package/package/database/readme.md +8 -0
  257. package/package/database/test.js +3 -0
  258. package/package/horizon-sp/README.md +11 -0
  259. package/package/horizon-sp/index.js +41 -0
  260. package/package/horizon-sp/logger.js +16 -0
  261. package/package/horizon-sp/node_modules/.package-lock.json +140 -0
  262. package/package/horizon-sp/node_modules/asynckit/LICENSE +21 -0
  263. package/package/horizon-sp/node_modules/asynckit/README.md +233 -0
  264. package/package/horizon-sp/node_modules/asynckit/bench.js +76 -0
  265. package/package/horizon-sp/node_modules/asynckit/index.js +6 -0
  266. package/package/horizon-sp/node_modules/asynckit/lib/abort.js +29 -0
  267. package/package/horizon-sp/node_modules/asynckit/lib/async.js +34 -0
  268. package/package/horizon-sp/node_modules/asynckit/lib/defer.js +26 -0
  269. package/package/horizon-sp/node_modules/asynckit/lib/iterate.js +75 -0
  270. package/package/horizon-sp/node_modules/asynckit/lib/readable_asynckit.js +91 -0
  271. package/package/horizon-sp/node_modules/asynckit/lib/readable_parallel.js +25 -0
  272. package/package/horizon-sp/node_modules/asynckit/lib/readable_serial.js +25 -0
  273. package/package/horizon-sp/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
  274. package/package/horizon-sp/node_modules/asynckit/lib/state.js +37 -0
  275. package/package/horizon-sp/node_modules/asynckit/lib/streamify.js +141 -0
  276. package/package/horizon-sp/node_modules/asynckit/lib/terminator.js +29 -0
  277. package/package/horizon-sp/node_modules/asynckit/package.json +63 -0
  278. package/package/horizon-sp/node_modules/asynckit/parallel.js +43 -0
  279. package/package/horizon-sp/node_modules/asynckit/serial.js +17 -0
  280. package/package/horizon-sp/node_modules/asynckit/serialOrdered.js +75 -0
  281. package/package/horizon-sp/node_modules/asynckit/stream.js +21 -0
  282. package/package/horizon-sp/node_modules/axios/CHANGELOG.md +410 -0
  283. package/package/horizon-sp/node_modules/axios/LICENSE +7 -0
  284. package/package/horizon-sp/node_modules/axios/MIGRATION_GUIDE.md +3 -0
  285. package/package/horizon-sp/node_modules/axios/README.md +1310 -0
  286. package/package/horizon-sp/node_modules/axios/SECURITY.md +6 -0
  287. package/package/horizon-sp/node_modules/axios/index.d.cts +524 -0
  288. package/package/horizon-sp/node_modules/axios/index.d.ts +539 -0
  289. package/package/horizon-sp/node_modules/axios/index.js +41 -0
  290. package/package/horizon-sp/node_modules/axios/lib/adapters/README.md +37 -0
  291. package/package/horizon-sp/node_modules/axios/lib/adapters/adapters.js +59 -0
  292. package/package/horizon-sp/node_modules/axios/lib/adapters/http.js +608 -0
  293. package/package/horizon-sp/node_modules/axios/lib/adapters/xhr.js +249 -0
  294. package/package/horizon-sp/node_modules/axios/lib/axios.js +86 -0
  295. package/package/horizon-sp/node_modules/axios/lib/cancel/CancelToken.js +121 -0
  296. package/package/horizon-sp/node_modules/axios/lib/cancel/CanceledError.js +25 -0
  297. package/package/horizon-sp/node_modules/axios/lib/cancel/isCancel.js +5 -0
  298. package/package/horizon-sp/node_modules/axios/lib/core/Axios.js +197 -0
  299. package/package/horizon-sp/node_modules/axios/lib/core/AxiosError.js +100 -0
  300. package/package/horizon-sp/node_modules/axios/lib/core/AxiosHeaders.js +274 -0
  301. package/package/horizon-sp/node_modules/axios/lib/core/InterceptorManager.js +71 -0
  302. package/package/horizon-sp/node_modules/axios/lib/core/README.md +8 -0
  303. package/package/horizon-sp/node_modules/axios/lib/core/buildFullPath.js +21 -0
  304. package/package/horizon-sp/node_modules/axios/lib/core/dispatchRequest.js +81 -0
  305. package/package/horizon-sp/node_modules/axios/lib/core/mergeConfig.js +105 -0
  306. package/package/horizon-sp/node_modules/axios/lib/core/settle.js +27 -0
  307. package/package/horizon-sp/node_modules/axios/lib/core/transformData.js +28 -0
  308. package/package/horizon-sp/node_modules/axios/lib/defaults/index.js +166 -0
  309. package/package/horizon-sp/node_modules/axios/lib/defaults/transitional.js +7 -0
  310. package/package/horizon-sp/node_modules/axios/lib/env/README.md +3 -0
  311. package/package/horizon-sp/node_modules/axios/lib/env/classes/FormData.js +2 -0
  312. package/package/horizon-sp/node_modules/axios/lib/env/data.js +1 -0
  313. package/package/horizon-sp/node_modules/axios/lib/helpers/AxiosTransformStream.js +191 -0
  314. package/package/horizon-sp/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +58 -0
  315. package/package/horizon-sp/node_modules/axios/lib/helpers/HttpStatusCode.js +71 -0
  316. package/package/horizon-sp/node_modules/axios/lib/helpers/README.md +7 -0
  317. package/package/horizon-sp/node_modules/axios/lib/helpers/bind.js +7 -0
  318. package/package/horizon-sp/node_modules/axios/lib/helpers/buildURL.js +63 -0
  319. package/package/horizon-sp/node_modules/axios/lib/helpers/combineURLs.js +15 -0
  320. package/package/horizon-sp/node_modules/axios/lib/helpers/cookies.js +52 -0
  321. package/package/horizon-sp/node_modules/axios/lib/helpers/deprecatedMethod.js +26 -0
  322. package/package/horizon-sp/node_modules/axios/lib/helpers/formDataToJSON.js +92 -0
  323. package/package/horizon-sp/node_modules/axios/lib/helpers/fromDataURI.js +53 -0
  324. package/package/horizon-sp/node_modules/axios/lib/helpers/isAbsoluteURL.js +15 -0
  325. package/package/horizon-sp/node_modules/axios/lib/helpers/isAxiosError.js +14 -0
  326. package/package/horizon-sp/node_modules/axios/lib/helpers/isURLSameOrigin.js +67 -0
  327. package/package/horizon-sp/node_modules/axios/lib/helpers/null.js +2 -0
  328. package/package/horizon-sp/node_modules/axios/lib/helpers/parseHeaders.js +55 -0
  329. package/package/horizon-sp/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
  330. package/package/horizon-sp/node_modules/axios/lib/helpers/speedometer.js +55 -0
  331. package/package/horizon-sp/node_modules/axios/lib/helpers/spread.js +28 -0
  332. package/package/horizon-sp/node_modules/axios/lib/helpers/throttle.js +33 -0
  333. package/package/horizon-sp/node_modules/axios/lib/helpers/toFormData.js +229 -0
  334. package/package/horizon-sp/node_modules/axios/lib/helpers/toURLEncodedForm.js +18 -0
  335. package/package/horizon-sp/node_modules/axios/lib/helpers/validator.js +91 -0
  336. package/package/horizon-sp/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
  337. package/package/horizon-sp/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +4 -0
  338. package/package/horizon-sp/node_modules/axios/lib/platform/browser/index.js +63 -0
  339. package/package/horizon-sp/node_modules/axios/lib/platform/index.js +3 -0
  340. package/package/horizon-sp/node_modules/axios/lib/platform/node/classes/FormData.js +3 -0
  341. package/package/horizon-sp/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +4 -0
  342. package/package/horizon-sp/node_modules/axios/lib/platform/node/index.js +12 -0
  343. package/package/horizon-sp/node_modules/axios/lib/utils.js +677 -0
  344. package/package/horizon-sp/node_modules/axios/package.json +197 -0
  345. package/package/horizon-sp/node_modules/child_process/README.md +9 -0
  346. package/package/horizon-sp/node_modules/child_process/package.json +20 -0
  347. package/package/horizon-sp/node_modules/combined-stream/License +19 -0
  348. package/package/horizon-sp/node_modules/combined-stream/Readme.md +138 -0
  349. package/package/horizon-sp/node_modules/combined-stream/lib/combined_stream.js +208 -0
  350. package/package/horizon-sp/node_modules/combined-stream/package.json +25 -0
  351. package/package/horizon-sp/node_modules/delayed-stream/License +19 -0
  352. package/package/horizon-sp/node_modules/delayed-stream/Makefile +7 -0
  353. package/package/horizon-sp/node_modules/delayed-stream/Readme.md +141 -0
  354. package/package/horizon-sp/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
  355. package/package/horizon-sp/node_modules/delayed-stream/package.json +27 -0
  356. package/package/horizon-sp/node_modules/follow-redirects/LICENSE +18 -0
  357. package/package/horizon-sp/node_modules/follow-redirects/README.md +155 -0
  358. package/package/horizon-sp/node_modules/follow-redirects/debug.js +15 -0
  359. package/package/horizon-sp/node_modules/follow-redirects/http.js +1 -0
  360. package/package/horizon-sp/node_modules/follow-redirects/https.js +1 -0
  361. package/package/horizon-sp/node_modules/follow-redirects/index.js +621 -0
  362. package/package/horizon-sp/node_modules/follow-redirects/package.json +59 -0
  363. package/package/horizon-sp/node_modules/form-data/License +19 -0
  364. package/package/horizon-sp/node_modules/form-data/README.md.bak +358 -0
  365. package/package/horizon-sp/node_modules/form-data/Readme.md +358 -0
  366. package/package/horizon-sp/node_modules/form-data/index.d.ts +62 -0
  367. package/package/horizon-sp/node_modules/form-data/lib/browser.js +2 -0
  368. package/package/horizon-sp/node_modules/form-data/lib/form_data.js +501 -0
  369. package/package/horizon-sp/node_modules/form-data/lib/populate.js +10 -0
  370. package/package/horizon-sp/node_modules/form-data/package.json +68 -0
  371. package/package/horizon-sp/node_modules/fs-extra/LICENSE +15 -0
  372. package/package/horizon-sp/node_modules/fs-extra/README.md +290 -0
  373. package/package/horizon-sp/node_modules/fs-extra/lib/copy/copy-sync.js +161 -0
  374. package/package/horizon-sp/node_modules/fs-extra/lib/copy/copy.js +238 -0
  375. package/package/horizon-sp/node_modules/fs-extra/lib/copy/index.js +7 -0
  376. package/package/horizon-sp/node_modules/fs-extra/lib/empty/index.js +39 -0
  377. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/file.js +69 -0
  378. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/index.js +23 -0
  379. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/link.js +64 -0
  380. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/symlink-paths.js +99 -0
  381. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/symlink-type.js +31 -0
  382. package/package/horizon-sp/node_modules/fs-extra/lib/ensure/symlink.js +82 -0
  383. package/package/horizon-sp/node_modules/fs-extra/lib/esm.mjs +68 -0
  384. package/package/horizon-sp/node_modules/fs-extra/lib/fs/index.js +140 -0
  385. package/package/horizon-sp/node_modules/fs-extra/lib/index.js +16 -0
  386. package/package/horizon-sp/node_modules/fs-extra/lib/json/index.js +16 -0
  387. package/package/horizon-sp/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  388. package/package/horizon-sp/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  389. package/package/horizon-sp/node_modules/fs-extra/lib/json/output-json.js +12 -0
  390. package/package/horizon-sp/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  391. package/package/horizon-sp/node_modules/fs-extra/lib/mkdirs/make-dir.js +27 -0
  392. package/package/horizon-sp/node_modules/fs-extra/lib/mkdirs/utils.js +21 -0
  393. package/package/horizon-sp/node_modules/fs-extra/lib/move/index.js +7 -0
  394. package/package/horizon-sp/node_modules/fs-extra/lib/move/move-sync.js +54 -0
  395. package/package/horizon-sp/node_modules/fs-extra/lib/move/move.js +75 -0
  396. package/package/horizon-sp/node_modules/fs-extra/lib/output-file/index.js +40 -0
  397. package/package/horizon-sp/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  398. package/package/horizon-sp/node_modules/fs-extra/lib/remove/index.js +17 -0
  399. package/package/horizon-sp/node_modules/fs-extra/lib/util/stat.js +154 -0
  400. package/package/horizon-sp/node_modules/fs-extra/lib/util/utimes.js +26 -0
  401. package/package/horizon-sp/node_modules/fs-extra/package.json +71 -0
  402. package/package/horizon-sp/node_modules/graceful-fs/LICENSE +15 -0
  403. package/package/horizon-sp/node_modules/graceful-fs/README.md +143 -0
  404. package/package/horizon-sp/node_modules/graceful-fs/clone.js +23 -0
  405. package/package/horizon-sp/node_modules/graceful-fs/graceful-fs.js +448 -0
  406. package/package/horizon-sp/node_modules/graceful-fs/legacy-streams.js +118 -0
  407. package/package/horizon-sp/node_modules/graceful-fs/package.json +50 -0
  408. package/package/horizon-sp/node_modules/graceful-fs/polyfills.js +355 -0
  409. package/package/horizon-sp/node_modules/jsonfile/CHANGELOG.md +171 -0
  410. package/package/horizon-sp/node_modules/jsonfile/LICENSE +15 -0
  411. package/package/horizon-sp/node_modules/jsonfile/README.md +230 -0
  412. package/package/horizon-sp/node_modules/jsonfile/index.js +88 -0
  413. package/package/horizon-sp/node_modules/jsonfile/package.json +40 -0
  414. package/package/horizon-sp/node_modules/jsonfile/utils.js +14 -0
  415. package/package/horizon-sp/node_modules/mime-db/HISTORY.md +507 -0
  416. package/package/horizon-sp/node_modules/mime-db/LICENSE +23 -0
  417. package/package/horizon-sp/node_modules/mime-db/README.md +100 -0
  418. package/package/horizon-sp/node_modules/mime-db/db.json +8519 -0
  419. package/package/horizon-sp/node_modules/mime-db/index.js +12 -0
  420. package/package/horizon-sp/node_modules/mime-db/package.json +60 -0
  421. package/package/horizon-sp/node_modules/mime-types/HISTORY.md +397 -0
  422. package/package/horizon-sp/node_modules/mime-types/LICENSE +23 -0
  423. package/package/horizon-sp/node_modules/mime-types/README.md +113 -0
  424. package/package/horizon-sp/node_modules/mime-types/index.js +188 -0
  425. package/package/horizon-sp/node_modules/mime-types/package.json +44 -0
  426. package/package/horizon-sp/node_modules/proxy-from-env/LICENSE +20 -0
  427. package/package/horizon-sp/node_modules/proxy-from-env/README.md +131 -0
  428. package/package/horizon-sp/node_modules/proxy-from-env/index.js +108 -0
  429. package/package/horizon-sp/node_modules/proxy-from-env/package.json +34 -0
  430. package/package/horizon-sp/node_modules/proxy-from-env/test.js +483 -0
  431. package/package/horizon-sp/node_modules/universalify/LICENSE +20 -0
  432. package/package/horizon-sp/node_modules/universalify/README.md +76 -0
  433. package/package/horizon-sp/node_modules/universalify/index.js +24 -0
  434. package/package/horizon-sp/node_modules/universalify/package.json +34 -0
  435. package/package/horizon-sp/package-lock.json +150 -0
  436. package/package/horizon-sp/package.json +20 -0
  437. package/package.json +134 -3
  438. package/src/ReportV1.js +55 -0
  439. package/src/addExternalModule.js +16 -0
  440. package/src/addUserToGroup.js +78 -0
  441. package/src/changeAdminStatus.js +79 -0
  442. package/src/changeArchivedStatus.js +41 -0
  443. package/src/changeAvt.js +86 -0
  444. package/src/changeBio.js +65 -0
  445. package/src/changeBlockedStatus.js +36 -0
  446. package/src/changeGroupImage.js +106 -0
  447. package/src/changeNickname.js +45 -0
  448. package/src/changeThreadColor.js +62 -0
  449. package/src/changeThreadEmoji.js +42 -0
  450. package/src/createNewGroup.js +70 -0
  451. package/src/createPoll.js +60 -0
  452. package/src/data/getThreadInfo.json +31985 -0
  453. package/src/deleteMessage.js +45 -0
  454. package/src/deleteThread.js +43 -0
  455. package/src/forwardAttachment.js +48 -0
  456. package/src/getAccessToken.js +33 -0
  457. package/src/getCurrentUserID.js +7 -0
  458. package/src/getEmojiUrl.js +27 -0
  459. package/src/getFriendsList.js +73 -0
  460. package/src/getMessage.js +80 -0
  461. package/src/getThreadHistory.js +537 -0
  462. package/src/getThreadHistoryDeprecated.js +71 -0
  463. package/src/getThreadInfo.js +193 -0
  464. package/src/getThreadInfoDeprecated.js +56 -0
  465. package/src/getThreadList.js +213 -0
  466. package/src/getThreadListDeprecated.js +46 -0
  467. package/src/getThreadMain.js +219 -0
  468. package/src/getThreadPictures.js +59 -0
  469. package/src/getUserID.js +62 -0
  470. package/src/getUserInfo.js +66 -0
  471. package/src/getUserInfoMain.js +65 -0
  472. package/src/getUserInfoV2.js +36 -0
  473. package/src/getUserInfoV3.js +63 -0
  474. package/src/getUserInfoV4.js +55 -0
  475. package/src/getUserInfoV5.js +61 -0
  476. package/src/handleFriendRequest.js +46 -0
  477. package/src/handleMessageRequest.js +49 -0
  478. package/src/httpGet.js +49 -0
  479. package/src/httpPost.js +48 -0
  480. package/src/httpPostFormData.js +41 -0
  481. package/src/listenMqtt.js +629 -0
  482. package/src/logout.js +68 -0
  483. package/src/markAsDelivered.js +48 -0
  484. package/src/markAsRead.js +70 -0
  485. package/src/markAsReadAll.js +43 -0
  486. package/src/markAsSeen.js +51 -0
  487. package/src/muteThread.js +47 -0
  488. package/src/removeUserFromGroup.js +49 -0
  489. package/src/resolvePhotoUrl.js +37 -0
  490. package/src/searchForThread.js +43 -0
  491. package/src/sendMessage.js +321 -0
  492. package/src/sendTypingIndicator.js +80 -0
  493. package/src/setMessageReaction.js +109 -0
  494. package/src/setPostReaction.js +102 -0
  495. package/src/setTitle.js +74 -0
  496. package/src/threadColors.js +39 -0
  497. package/src/unfriend.js +43 -0
  498. package/src/unsendMessage.js +40 -0
  499. package/test/example-config.json +18 -0
  500. package/test/test-page.js +140 -0
  501. package/test/test.js +385 -0
  502. package/utils.js +1246 -0
@@ -0,0 +1,3877 @@
1
+ /**
2
+ * @license
3
+ * Lodash (Custom Build) <https://lodash.com/>
4
+ * Build: `lodash core -o ./dist/lodash.core.js`
5
+ * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
6
+ * Released under MIT license <https://lodash.com/license>
7
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
8
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
9
+ */
10
+ ;(function() {
11
+
12
+ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
13
+ var undefined;
14
+
15
+ /** Used as the semantic version number. */
16
+ var VERSION = '4.17.21';
17
+
18
+ /** Error message constants. */
19
+ var FUNC_ERROR_TEXT = 'Expected a function';
20
+
21
+ /** Used to compose bitmasks for value comparisons. */
22
+ var COMPARE_PARTIAL_FLAG = 1,
23
+ COMPARE_UNORDERED_FLAG = 2;
24
+
25
+ /** Used to compose bitmasks for function metadata. */
26
+ var WRAP_BIND_FLAG = 1,
27
+ WRAP_PARTIAL_FLAG = 32;
28
+
29
+ /** Used as references for various `Number` constants. */
30
+ var INFINITY = 1 / 0,
31
+ MAX_SAFE_INTEGER = 9007199254740991;
32
+
33
+ /** `Object#toString` result references. */
34
+ var argsTag = '[object Arguments]',
35
+ arrayTag = '[object Array]',
36
+ asyncTag = '[object AsyncFunction]',
37
+ boolTag = '[object Boolean]',
38
+ dateTag = '[object Date]',
39
+ errorTag = '[object Error]',
40
+ funcTag = '[object Function]',
41
+ genTag = '[object GeneratorFunction]',
42
+ numberTag = '[object Number]',
43
+ objectTag = '[object Object]',
44
+ proxyTag = '[object Proxy]',
45
+ regexpTag = '[object RegExp]',
46
+ stringTag = '[object String]';
47
+
48
+ /** Used to match HTML entities and HTML characters. */
49
+ var reUnescapedHtml = /[&<>"']/g,
50
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
51
+
52
+ /** Used to detect unsigned integer values. */
53
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
54
+
55
+ /** Used to map characters to HTML entities. */
56
+ var htmlEscapes = {
57
+ '&': '&amp;',
58
+ '<': '&lt;',
59
+ '>': '&gt;',
60
+ '"': '&quot;',
61
+ "'": '&#39;'
62
+ };
63
+
64
+ /** Detect free variable `global` from Node.js. */
65
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
66
+
67
+ /** Detect free variable `self`. */
68
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
69
+
70
+ /** Used as a reference to the global object. */
71
+ var root = freeGlobal || freeSelf || Function('return this')();
72
+
73
+ /** Detect free variable `exports`. */
74
+ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
75
+
76
+ /** Detect free variable `module`. */
77
+ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
78
+
79
+ /*--------------------------------------------------------------------------*/
80
+
81
+ /**
82
+ * Appends the elements of `values` to `array`.
83
+ *
84
+ * @private
85
+ * @param {Array} array The array to modify.
86
+ * @param {Array} values The values to append.
87
+ * @returns {Array} Returns `array`.
88
+ */
89
+ function arrayPush(array, values) {
90
+ array.push.apply(array, values);
91
+ return array;
92
+ }
93
+
94
+ /**
95
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
96
+ * support for iteratee shorthands.
97
+ *
98
+ * @private
99
+ * @param {Array} array The array to inspect.
100
+ * @param {Function} predicate The function invoked per iteration.
101
+ * @param {number} fromIndex The index to search from.
102
+ * @param {boolean} [fromRight] Specify iterating from right to left.
103
+ * @returns {number} Returns the index of the matched value, else `-1`.
104
+ */
105
+ function baseFindIndex(array, predicate, fromIndex, fromRight) {
106
+ var length = array.length,
107
+ index = fromIndex + (fromRight ? 1 : -1);
108
+
109
+ while ((fromRight ? index-- : ++index < length)) {
110
+ if (predicate(array[index], index, array)) {
111
+ return index;
112
+ }
113
+ }
114
+ return -1;
115
+ }
116
+
117
+ /**
118
+ * The base implementation of `_.property` without support for deep paths.
119
+ *
120
+ * @private
121
+ * @param {string} key The key of the property to get.
122
+ * @returns {Function} Returns the new accessor function.
123
+ */
124
+ function baseProperty(key) {
125
+ return function(object) {
126
+ return object == null ? undefined : object[key];
127
+ };
128
+ }
129
+
130
+ /**
131
+ * The base implementation of `_.propertyOf` without support for deep paths.
132
+ *
133
+ * @private
134
+ * @param {Object} object The object to query.
135
+ * @returns {Function} Returns the new accessor function.
136
+ */
137
+ function basePropertyOf(object) {
138
+ return function(key) {
139
+ return object == null ? undefined : object[key];
140
+ };
141
+ }
142
+
143
+ /**
144
+ * The base implementation of `_.reduce` and `_.reduceRight`, without support
145
+ * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
146
+ *
147
+ * @private
148
+ * @param {Array|Object} collection The collection to iterate over.
149
+ * @param {Function} iteratee The function invoked per iteration.
150
+ * @param {*} accumulator The initial value.
151
+ * @param {boolean} initAccum Specify using the first or last element of
152
+ * `collection` as the initial value.
153
+ * @param {Function} eachFunc The function to iterate over `collection`.
154
+ * @returns {*} Returns the accumulated value.
155
+ */
156
+ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
157
+ eachFunc(collection, function(value, index, collection) {
158
+ accumulator = initAccum
159
+ ? (initAccum = false, value)
160
+ : iteratee(accumulator, value, index, collection);
161
+ });
162
+ return accumulator;
163
+ }
164
+
165
+ /**
166
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
167
+ * array of `object` property values corresponding to the property names
168
+ * of `props`.
169
+ *
170
+ * @private
171
+ * @param {Object} object The object to query.
172
+ * @param {Array} props The property names to get values for.
173
+ * @returns {Object} Returns the array of property values.
174
+ */
175
+ function baseValues(object, props) {
176
+ return baseMap(props, function(key) {
177
+ return object[key];
178
+ });
179
+ }
180
+
181
+ /**
182
+ * Used by `_.escape` to convert characters to HTML entities.
183
+ *
184
+ * @private
185
+ * @param {string} chr The matched character to escape.
186
+ * @returns {string} Returns the escaped character.
187
+ */
188
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
189
+
190
+ /**
191
+ * Creates a unary function that invokes `func` with its argument transformed.
192
+ *
193
+ * @private
194
+ * @param {Function} func The function to wrap.
195
+ * @param {Function} transform The argument transform.
196
+ * @returns {Function} Returns the new function.
197
+ */
198
+ function overArg(func, transform) {
199
+ return function(arg) {
200
+ return func(transform(arg));
201
+ };
202
+ }
203
+
204
+ /*--------------------------------------------------------------------------*/
205
+
206
+ /** Used for built-in method references. */
207
+ var arrayProto = Array.prototype,
208
+ objectProto = Object.prototype;
209
+
210
+ /** Used to check objects for own properties. */
211
+ var hasOwnProperty = objectProto.hasOwnProperty;
212
+
213
+ /** Used to generate unique IDs. */
214
+ var idCounter = 0;
215
+
216
+ /**
217
+ * Used to resolve the
218
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
219
+ * of values.
220
+ */
221
+ var nativeObjectToString = objectProto.toString;
222
+
223
+ /** Used to restore the original `_` reference in `_.noConflict`. */
224
+ var oldDash = root._;
225
+
226
+ /** Built-in value references. */
227
+ var objectCreate = Object.create,
228
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
229
+
230
+ /* Built-in method references for those with the same name as other `lodash` methods. */
231
+ var nativeIsFinite = root.isFinite,
232
+ nativeKeys = overArg(Object.keys, Object),
233
+ nativeMax = Math.max;
234
+
235
+ /*------------------------------------------------------------------------*/
236
+
237
+ /**
238
+ * Creates a `lodash` object which wraps `value` to enable implicit method
239
+ * chain sequences. Methods that operate on and return arrays, collections,
240
+ * and functions can be chained together. Methods that retrieve a single value
241
+ * or may return a primitive value will automatically end the chain sequence
242
+ * and return the unwrapped value. Otherwise, the value must be unwrapped
243
+ * with `_#value`.
244
+ *
245
+ * Explicit chain sequences, which must be unwrapped with `_#value`, may be
246
+ * enabled using `_.chain`.
247
+ *
248
+ * The execution of chained methods is lazy, that is, it's deferred until
249
+ * `_#value` is implicitly or explicitly called.
250
+ *
251
+ * Lazy evaluation allows several methods to support shortcut fusion.
252
+ * Shortcut fusion is an optimization to merge iteratee calls; this avoids
253
+ * the creation of intermediate arrays and can greatly reduce the number of
254
+ * iteratee executions. Sections of a chain sequence qualify for shortcut
255
+ * fusion if the section is applied to an array and iteratees accept only
256
+ * one argument. The heuristic for whether a section qualifies for shortcut
257
+ * fusion is subject to change.
258
+ *
259
+ * Chaining is supported in custom builds as long as the `_#value` method is
260
+ * directly or indirectly included in the build.
261
+ *
262
+ * In addition to lodash methods, wrappers have `Array` and `String` methods.
263
+ *
264
+ * The wrapper `Array` methods are:
265
+ * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
266
+ *
267
+ * The wrapper `String` methods are:
268
+ * `replace` and `split`
269
+ *
270
+ * The wrapper methods that support shortcut fusion are:
271
+ * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
272
+ * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
273
+ * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
274
+ *
275
+ * The chainable wrapper methods are:
276
+ * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
277
+ * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
278
+ * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
279
+ * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
280
+ * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
281
+ * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
282
+ * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
283
+ * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
284
+ * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
285
+ * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
286
+ * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
287
+ * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
288
+ * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
289
+ * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
290
+ * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
291
+ * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
292
+ * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
293
+ * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
294
+ * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
295
+ * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
296
+ * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
297
+ * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
298
+ * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
299
+ * `zipObject`, `zipObjectDeep`, and `zipWith`
300
+ *
301
+ * The wrapper methods that are **not** chainable by default are:
302
+ * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
303
+ * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
304
+ * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
305
+ * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
306
+ * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
307
+ * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
308
+ * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
309
+ * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
310
+ * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
311
+ * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
312
+ * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
313
+ * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
314
+ * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
315
+ * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
316
+ * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
317
+ * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
318
+ * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
319
+ * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
320
+ * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
321
+ * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
322
+ * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
323
+ * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
324
+ * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
325
+ * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
326
+ * `upperFirst`, `value`, and `words`
327
+ *
328
+ * @name _
329
+ * @constructor
330
+ * @category Seq
331
+ * @param {*} value The value to wrap in a `lodash` instance.
332
+ * @returns {Object} Returns the new `lodash` wrapper instance.
333
+ * @example
334
+ *
335
+ * function square(n) {
336
+ * return n * n;
337
+ * }
338
+ *
339
+ * var wrapped = _([1, 2, 3]);
340
+ *
341
+ * // Returns an unwrapped value.
342
+ * wrapped.reduce(_.add);
343
+ * // => 6
344
+ *
345
+ * // Returns a wrapped value.
346
+ * var squares = wrapped.map(square);
347
+ *
348
+ * _.isArray(squares);
349
+ * // => false
350
+ *
351
+ * _.isArray(squares.value());
352
+ * // => true
353
+ */
354
+ function lodash(value) {
355
+ return value instanceof LodashWrapper
356
+ ? value
357
+ : new LodashWrapper(value);
358
+ }
359
+
360
+ /**
361
+ * The base implementation of `_.create` without support for assigning
362
+ * properties to the created object.
363
+ *
364
+ * @private
365
+ * @param {Object} proto The object to inherit from.
366
+ * @returns {Object} Returns the new object.
367
+ */
368
+ var baseCreate = (function() {
369
+ function object() {}
370
+ return function(proto) {
371
+ if (!isObject(proto)) {
372
+ return {};
373
+ }
374
+ if (objectCreate) {
375
+ return objectCreate(proto);
376
+ }
377
+ object.prototype = proto;
378
+ var result = new object;
379
+ object.prototype = undefined;
380
+ return result;
381
+ };
382
+ }());
383
+
384
+ /**
385
+ * The base constructor for creating `lodash` wrapper objects.
386
+ *
387
+ * @private
388
+ * @param {*} value The value to wrap.
389
+ * @param {boolean} [chainAll] Enable explicit method chain sequences.
390
+ */
391
+ function LodashWrapper(value, chainAll) {
392
+ this.__wrapped__ = value;
393
+ this.__actions__ = [];
394
+ this.__chain__ = !!chainAll;
395
+ }
396
+
397
+ LodashWrapper.prototype = baseCreate(lodash.prototype);
398
+ LodashWrapper.prototype.constructor = LodashWrapper;
399
+
400
+ /*------------------------------------------------------------------------*/
401
+
402
+ /**
403
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
404
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
405
+ * for equality comparisons.
406
+ *
407
+ * @private
408
+ * @param {Object} object The object to modify.
409
+ * @param {string} key The key of the property to assign.
410
+ * @param {*} value The value to assign.
411
+ */
412
+ function assignValue(object, key, value) {
413
+ var objValue = object[key];
414
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
415
+ (value === undefined && !(key in object))) {
416
+ baseAssignValue(object, key, value);
417
+ }
418
+ }
419
+
420
+ /**
421
+ * The base implementation of `assignValue` and `assignMergeValue` without
422
+ * value checks.
423
+ *
424
+ * @private
425
+ * @param {Object} object The object to modify.
426
+ * @param {string} key The key of the property to assign.
427
+ * @param {*} value The value to assign.
428
+ */
429
+ function baseAssignValue(object, key, value) {
430
+ object[key] = value;
431
+ }
432
+
433
+ /**
434
+ * The base implementation of `_.delay` and `_.defer` which accepts `args`
435
+ * to provide to `func`.
436
+ *
437
+ * @private
438
+ * @param {Function} func The function to delay.
439
+ * @param {number} wait The number of milliseconds to delay invocation.
440
+ * @param {Array} args The arguments to provide to `func`.
441
+ * @returns {number|Object} Returns the timer id or timeout object.
442
+ */
443
+ function baseDelay(func, wait, args) {
444
+ if (typeof func != 'function') {
445
+ throw new TypeError(FUNC_ERROR_TEXT);
446
+ }
447
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
448
+ }
449
+
450
+ /**
451
+ * The base implementation of `_.forEach` without support for iteratee shorthands.
452
+ *
453
+ * @private
454
+ * @param {Array|Object} collection The collection to iterate over.
455
+ * @param {Function} iteratee The function invoked per iteration.
456
+ * @returns {Array|Object} Returns `collection`.
457
+ */
458
+ var baseEach = createBaseEach(baseForOwn);
459
+
460
+ /**
461
+ * The base implementation of `_.every` without support for iteratee shorthands.
462
+ *
463
+ * @private
464
+ * @param {Array|Object} collection The collection to iterate over.
465
+ * @param {Function} predicate The function invoked per iteration.
466
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
467
+ * else `false`
468
+ */
469
+ function baseEvery(collection, predicate) {
470
+ var result = true;
471
+ baseEach(collection, function(value, index, collection) {
472
+ result = !!predicate(value, index, collection);
473
+ return result;
474
+ });
475
+ return result;
476
+ }
477
+
478
+ /**
479
+ * The base implementation of methods like `_.max` and `_.min` which accepts a
480
+ * `comparator` to determine the extremum value.
481
+ *
482
+ * @private
483
+ * @param {Array} array The array to iterate over.
484
+ * @param {Function} iteratee The iteratee invoked per iteration.
485
+ * @param {Function} comparator The comparator used to compare values.
486
+ * @returns {*} Returns the extremum value.
487
+ */
488
+ function baseExtremum(array, iteratee, comparator) {
489
+ var index = -1,
490
+ length = array.length;
491
+
492
+ while (++index < length) {
493
+ var value = array[index],
494
+ current = iteratee(value);
495
+
496
+ if (current != null && (computed === undefined
497
+ ? (current === current && !false)
498
+ : comparator(current, computed)
499
+ )) {
500
+ var computed = current,
501
+ result = value;
502
+ }
503
+ }
504
+ return result;
505
+ }
506
+
507
+ /**
508
+ * The base implementation of `_.filter` without support for iteratee shorthands.
509
+ *
510
+ * @private
511
+ * @param {Array|Object} collection The collection to iterate over.
512
+ * @param {Function} predicate The function invoked per iteration.
513
+ * @returns {Array} Returns the new filtered array.
514
+ */
515
+ function baseFilter(collection, predicate) {
516
+ var result = [];
517
+ baseEach(collection, function(value, index, collection) {
518
+ if (predicate(value, index, collection)) {
519
+ result.push(value);
520
+ }
521
+ });
522
+ return result;
523
+ }
524
+
525
+ /**
526
+ * The base implementation of `_.flatten` with support for restricting flattening.
527
+ *
528
+ * @private
529
+ * @param {Array} array The array to flatten.
530
+ * @param {number} depth The maximum recursion depth.
531
+ * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
532
+ * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
533
+ * @param {Array} [result=[]] The initial result value.
534
+ * @returns {Array} Returns the new flattened array.
535
+ */
536
+ function baseFlatten(array, depth, predicate, isStrict, result) {
537
+ var index = -1,
538
+ length = array.length;
539
+
540
+ predicate || (predicate = isFlattenable);
541
+ result || (result = []);
542
+
543
+ while (++index < length) {
544
+ var value = array[index];
545
+ if (depth > 0 && predicate(value)) {
546
+ if (depth > 1) {
547
+ // Recursively flatten arrays (susceptible to call stack limits).
548
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
549
+ } else {
550
+ arrayPush(result, value);
551
+ }
552
+ } else if (!isStrict) {
553
+ result[result.length] = value;
554
+ }
555
+ }
556
+ return result;
557
+ }
558
+
559
+ /**
560
+ * The base implementation of `baseForOwn` which iterates over `object`
561
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
562
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
563
+ *
564
+ * @private
565
+ * @param {Object} object The object to iterate over.
566
+ * @param {Function} iteratee The function invoked per iteration.
567
+ * @param {Function} keysFunc The function to get the keys of `object`.
568
+ * @returns {Object} Returns `object`.
569
+ */
570
+ var baseFor = createBaseFor();
571
+
572
+ /**
573
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
574
+ *
575
+ * @private
576
+ * @param {Object} object The object to iterate over.
577
+ * @param {Function} iteratee The function invoked per iteration.
578
+ * @returns {Object} Returns `object`.
579
+ */
580
+ function baseForOwn(object, iteratee) {
581
+ return object && baseFor(object, iteratee, keys);
582
+ }
583
+
584
+ /**
585
+ * The base implementation of `_.functions` which creates an array of
586
+ * `object` function property names filtered from `props`.
587
+ *
588
+ * @private
589
+ * @param {Object} object The object to inspect.
590
+ * @param {Array} props The property names to filter.
591
+ * @returns {Array} Returns the function names.
592
+ */
593
+ function baseFunctions(object, props) {
594
+ return baseFilter(props, function(key) {
595
+ return isFunction(object[key]);
596
+ });
597
+ }
598
+
599
+ /**
600
+ * The base implementation of `getTag` without fallbacks for buggy environments.
601
+ *
602
+ * @private
603
+ * @param {*} value The value to query.
604
+ * @returns {string} Returns the `toStringTag`.
605
+ */
606
+ function baseGetTag(value) {
607
+ return objectToString(value);
608
+ }
609
+
610
+ /**
611
+ * The base implementation of `_.gt` which doesn't coerce arguments.
612
+ *
613
+ * @private
614
+ * @param {*} value The value to compare.
615
+ * @param {*} other The other value to compare.
616
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
617
+ * else `false`.
618
+ */
619
+ function baseGt(value, other) {
620
+ return value > other;
621
+ }
622
+
623
+ /**
624
+ * The base implementation of `_.isArguments`.
625
+ *
626
+ * @private
627
+ * @param {*} value The value to check.
628
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
629
+ */
630
+ var baseIsArguments = noop;
631
+
632
+ /**
633
+ * The base implementation of `_.isDate` without Node.js optimizations.
634
+ *
635
+ * @private
636
+ * @param {*} value The value to check.
637
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
638
+ */
639
+ function baseIsDate(value) {
640
+ return isObjectLike(value) && baseGetTag(value) == dateTag;
641
+ }
642
+
643
+ /**
644
+ * The base implementation of `_.isEqual` which supports partial comparisons
645
+ * and tracks traversed objects.
646
+ *
647
+ * @private
648
+ * @param {*} value The value to compare.
649
+ * @param {*} other The other value to compare.
650
+ * @param {boolean} bitmask The bitmask flags.
651
+ * 1 - Unordered comparison
652
+ * 2 - Partial comparison
653
+ * @param {Function} [customizer] The function to customize comparisons.
654
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
655
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
656
+ */
657
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
658
+ if (value === other) {
659
+ return true;
660
+ }
661
+ if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
662
+ return value !== value && other !== other;
663
+ }
664
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
665
+ }
666
+
667
+ /**
668
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
669
+ * deep comparisons and tracks traversed objects enabling objects with circular
670
+ * references to be compared.
671
+ *
672
+ * @private
673
+ * @param {Object} object The object to compare.
674
+ * @param {Object} other The other object to compare.
675
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
676
+ * @param {Function} customizer The function to customize comparisons.
677
+ * @param {Function} equalFunc The function to determine equivalents of values.
678
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
679
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
680
+ */
681
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
682
+ var objIsArr = isArray(object),
683
+ othIsArr = isArray(other),
684
+ objTag = objIsArr ? arrayTag : baseGetTag(object),
685
+ othTag = othIsArr ? arrayTag : baseGetTag(other);
686
+
687
+ objTag = objTag == argsTag ? objectTag : objTag;
688
+ othTag = othTag == argsTag ? objectTag : othTag;
689
+
690
+ var objIsObj = objTag == objectTag,
691
+ othIsObj = othTag == objectTag,
692
+ isSameTag = objTag == othTag;
693
+
694
+ stack || (stack = []);
695
+ var objStack = find(stack, function(entry) {
696
+ return entry[0] == object;
697
+ });
698
+ var othStack = find(stack, function(entry) {
699
+ return entry[0] == other;
700
+ });
701
+ if (objStack && othStack) {
702
+ return objStack[1] == other;
703
+ }
704
+ stack.push([object, other]);
705
+ stack.push([other, object]);
706
+ if (isSameTag && !objIsObj) {
707
+ var result = (objIsArr)
708
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
709
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
710
+ stack.pop();
711
+ return result;
712
+ }
713
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
714
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
715
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
716
+
717
+ if (objIsWrapped || othIsWrapped) {
718
+ var objUnwrapped = objIsWrapped ? object.value() : object,
719
+ othUnwrapped = othIsWrapped ? other.value() : other;
720
+
721
+ var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
722
+ stack.pop();
723
+ return result;
724
+ }
725
+ }
726
+ if (!isSameTag) {
727
+ return false;
728
+ }
729
+ var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack);
730
+ stack.pop();
731
+ return result;
732
+ }
733
+
734
+ /**
735
+ * The base implementation of `_.isRegExp` without Node.js optimizations.
736
+ *
737
+ * @private
738
+ * @param {*} value The value to check.
739
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
740
+ */
741
+ function baseIsRegExp(value) {
742
+ return isObjectLike(value) && baseGetTag(value) == regexpTag;
743
+ }
744
+
745
+ /**
746
+ * The base implementation of `_.iteratee`.
747
+ *
748
+ * @private
749
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
750
+ * @returns {Function} Returns the iteratee.
751
+ */
752
+ function baseIteratee(func) {
753
+ if (typeof func == 'function') {
754
+ return func;
755
+ }
756
+ if (func == null) {
757
+ return identity;
758
+ }
759
+ return (typeof func == 'object' ? baseMatches : baseProperty)(func);
760
+ }
761
+
762
+ /**
763
+ * The base implementation of `_.lt` which doesn't coerce arguments.
764
+ *
765
+ * @private
766
+ * @param {*} value The value to compare.
767
+ * @param {*} other The other value to compare.
768
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
769
+ * else `false`.
770
+ */
771
+ function baseLt(value, other) {
772
+ return value < other;
773
+ }
774
+
775
+ /**
776
+ * The base implementation of `_.map` without support for iteratee shorthands.
777
+ *
778
+ * @private
779
+ * @param {Array|Object} collection The collection to iterate over.
780
+ * @param {Function} iteratee The function invoked per iteration.
781
+ * @returns {Array} Returns the new mapped array.
782
+ */
783
+ function baseMap(collection, iteratee) {
784
+ var index = -1,
785
+ result = isArrayLike(collection) ? Array(collection.length) : [];
786
+
787
+ baseEach(collection, function(value, key, collection) {
788
+ result[++index] = iteratee(value, key, collection);
789
+ });
790
+ return result;
791
+ }
792
+
793
+ /**
794
+ * The base implementation of `_.matches` which doesn't clone `source`.
795
+ *
796
+ * @private
797
+ * @param {Object} source The object of property values to match.
798
+ * @returns {Function} Returns the new spec function.
799
+ */
800
+ function baseMatches(source) {
801
+ var props = nativeKeys(source);
802
+ return function(object) {
803
+ var length = props.length;
804
+ if (object == null) {
805
+ return !length;
806
+ }
807
+ object = Object(object);
808
+ while (length--) {
809
+ var key = props[length];
810
+ if (!(key in object &&
811
+ baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)
812
+ )) {
813
+ return false;
814
+ }
815
+ }
816
+ return true;
817
+ };
818
+ }
819
+
820
+ /**
821
+ * The base implementation of `_.pick` without support for individual
822
+ * property identifiers.
823
+ *
824
+ * @private
825
+ * @param {Object} object The source object.
826
+ * @param {string[]} paths The property paths to pick.
827
+ * @returns {Object} Returns the new object.
828
+ */
829
+ function basePick(object, props) {
830
+ object = Object(object);
831
+ return reduce(props, function(result, key) {
832
+ if (key in object) {
833
+ result[key] = object[key];
834
+ }
835
+ return result;
836
+ }, {});
837
+ }
838
+
839
+ /**
840
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
841
+ *
842
+ * @private
843
+ * @param {Function} func The function to apply a rest parameter to.
844
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
845
+ * @returns {Function} Returns the new function.
846
+ */
847
+ function baseRest(func, start) {
848
+ return setToString(overRest(func, start, identity), func + '');
849
+ }
850
+
851
+ /**
852
+ * The base implementation of `_.slice` without an iteratee call guard.
853
+ *
854
+ * @private
855
+ * @param {Array} array The array to slice.
856
+ * @param {number} [start=0] The start position.
857
+ * @param {number} [end=array.length] The end position.
858
+ * @returns {Array} Returns the slice of `array`.
859
+ */
860
+ function baseSlice(array, start, end) {
861
+ var index = -1,
862
+ length = array.length;
863
+
864
+ if (start < 0) {
865
+ start = -start > length ? 0 : (length + start);
866
+ }
867
+ end = end > length ? length : end;
868
+ if (end < 0) {
869
+ end += length;
870
+ }
871
+ length = start > end ? 0 : ((end - start) >>> 0);
872
+ start >>>= 0;
873
+
874
+ var result = Array(length);
875
+ while (++index < length) {
876
+ result[index] = array[index + start];
877
+ }
878
+ return result;
879
+ }
880
+
881
+ /**
882
+ * Copies the values of `source` to `array`.
883
+ *
884
+ * @private
885
+ * @param {Array} source The array to copy values from.
886
+ * @param {Array} [array=[]] The array to copy values to.
887
+ * @returns {Array} Returns `array`.
888
+ */
889
+ function copyArray(source) {
890
+ return baseSlice(source, 0, source.length);
891
+ }
892
+
893
+ /**
894
+ * The base implementation of `_.some` without support for iteratee shorthands.
895
+ *
896
+ * @private
897
+ * @param {Array|Object} collection The collection to iterate over.
898
+ * @param {Function} predicate The function invoked per iteration.
899
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
900
+ * else `false`.
901
+ */
902
+ function baseSome(collection, predicate) {
903
+ var result;
904
+
905
+ baseEach(collection, function(value, index, collection) {
906
+ result = predicate(value, index, collection);
907
+ return !result;
908
+ });
909
+ return !!result;
910
+ }
911
+
912
+ /**
913
+ * The base implementation of `wrapperValue` which returns the result of
914
+ * performing a sequence of actions on the unwrapped `value`, where each
915
+ * successive action is supplied the return value of the previous.
916
+ *
917
+ * @private
918
+ * @param {*} value The unwrapped value.
919
+ * @param {Array} actions Actions to perform to resolve the unwrapped value.
920
+ * @returns {*} Returns the resolved value.
921
+ */
922
+ function baseWrapperValue(value, actions) {
923
+ var result = value;
924
+ return reduce(actions, function(result, action) {
925
+ return action.func.apply(action.thisArg, arrayPush([result], action.args));
926
+ }, result);
927
+ }
928
+
929
+ /**
930
+ * Compares values to sort them in ascending order.
931
+ *
932
+ * @private
933
+ * @param {*} value The value to compare.
934
+ * @param {*} other The other value to compare.
935
+ * @returns {number} Returns the sort order indicator for `value`.
936
+ */
937
+ function compareAscending(value, other) {
938
+ if (value !== other) {
939
+ var valIsDefined = value !== undefined,
940
+ valIsNull = value === null,
941
+ valIsReflexive = value === value,
942
+ valIsSymbol = false;
943
+
944
+ var othIsDefined = other !== undefined,
945
+ othIsNull = other === null,
946
+ othIsReflexive = other === other,
947
+ othIsSymbol = false;
948
+
949
+ if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
950
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
951
+ (valIsNull && othIsDefined && othIsReflexive) ||
952
+ (!valIsDefined && othIsReflexive) ||
953
+ !valIsReflexive) {
954
+ return 1;
955
+ }
956
+ if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
957
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
958
+ (othIsNull && valIsDefined && valIsReflexive) ||
959
+ (!othIsDefined && valIsReflexive) ||
960
+ !othIsReflexive) {
961
+ return -1;
962
+ }
963
+ }
964
+ return 0;
965
+ }
966
+
967
+ /**
968
+ * Copies properties of `source` to `object`.
969
+ *
970
+ * @private
971
+ * @param {Object} source The object to copy properties from.
972
+ * @param {Array} props The property identifiers to copy.
973
+ * @param {Object} [object={}] The object to copy properties to.
974
+ * @param {Function} [customizer] The function to customize copied values.
975
+ * @returns {Object} Returns `object`.
976
+ */
977
+ function copyObject(source, props, object, customizer) {
978
+ var isNew = !object;
979
+ object || (object = {});
980
+
981
+ var index = -1,
982
+ length = props.length;
983
+
984
+ while (++index < length) {
985
+ var key = props[index];
986
+
987
+ var newValue = customizer
988
+ ? customizer(object[key], source[key], key, object, source)
989
+ : undefined;
990
+
991
+ if (newValue === undefined) {
992
+ newValue = source[key];
993
+ }
994
+ if (isNew) {
995
+ baseAssignValue(object, key, newValue);
996
+ } else {
997
+ assignValue(object, key, newValue);
998
+ }
999
+ }
1000
+ return object;
1001
+ }
1002
+
1003
+ /**
1004
+ * Creates a function like `_.assign`.
1005
+ *
1006
+ * @private
1007
+ * @param {Function} assigner The function to assign values.
1008
+ * @returns {Function} Returns the new assigner function.
1009
+ */
1010
+ function createAssigner(assigner) {
1011
+ return baseRest(function(object, sources) {
1012
+ var index = -1,
1013
+ length = sources.length,
1014
+ customizer = length > 1 ? sources[length - 1] : undefined;
1015
+
1016
+ customizer = (assigner.length > 3 && typeof customizer == 'function')
1017
+ ? (length--, customizer)
1018
+ : undefined;
1019
+
1020
+ object = Object(object);
1021
+ while (++index < length) {
1022
+ var source = sources[index];
1023
+ if (source) {
1024
+ assigner(object, source, index, customizer);
1025
+ }
1026
+ }
1027
+ return object;
1028
+ });
1029
+ }
1030
+
1031
+ /**
1032
+ * Creates a `baseEach` or `baseEachRight` function.
1033
+ *
1034
+ * @private
1035
+ * @param {Function} eachFunc The function to iterate over a collection.
1036
+ * @param {boolean} [fromRight] Specify iterating from right to left.
1037
+ * @returns {Function} Returns the new base function.
1038
+ */
1039
+ function createBaseEach(eachFunc, fromRight) {
1040
+ return function(collection, iteratee) {
1041
+ if (collection == null) {
1042
+ return collection;
1043
+ }
1044
+ if (!isArrayLike(collection)) {
1045
+ return eachFunc(collection, iteratee);
1046
+ }
1047
+ var length = collection.length,
1048
+ index = fromRight ? length : -1,
1049
+ iterable = Object(collection);
1050
+
1051
+ while ((fromRight ? index-- : ++index < length)) {
1052
+ if (iteratee(iterable[index], index, iterable) === false) {
1053
+ break;
1054
+ }
1055
+ }
1056
+ return collection;
1057
+ };
1058
+ }
1059
+
1060
+ /**
1061
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
1062
+ *
1063
+ * @private
1064
+ * @param {boolean} [fromRight] Specify iterating from right to left.
1065
+ * @returns {Function} Returns the new base function.
1066
+ */
1067
+ function createBaseFor(fromRight) {
1068
+ return function(object, iteratee, keysFunc) {
1069
+ var index = -1,
1070
+ iterable = Object(object),
1071
+ props = keysFunc(object),
1072
+ length = props.length;
1073
+
1074
+ while (length--) {
1075
+ var key = props[fromRight ? length : ++index];
1076
+ if (iteratee(iterable[key], key, iterable) === false) {
1077
+ break;
1078
+ }
1079
+ }
1080
+ return object;
1081
+ };
1082
+ }
1083
+
1084
+ /**
1085
+ * Creates a function that produces an instance of `Ctor` regardless of
1086
+ * whether it was invoked as part of a `new` expression or by `call` or `apply`.
1087
+ *
1088
+ * @private
1089
+ * @param {Function} Ctor The constructor to wrap.
1090
+ * @returns {Function} Returns the new wrapped function.
1091
+ */
1092
+ function createCtor(Ctor) {
1093
+ return function() {
1094
+ // Use a `switch` statement to work with class constructors. See
1095
+ // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
1096
+ // for more details.
1097
+ var args = arguments;
1098
+ var thisBinding = baseCreate(Ctor.prototype),
1099
+ result = Ctor.apply(thisBinding, args);
1100
+
1101
+ // Mimic the constructor's `return` behavior.
1102
+ // See https://es5.github.io/#x13.2.2 for more details.
1103
+ return isObject(result) ? result : thisBinding;
1104
+ };
1105
+ }
1106
+
1107
+ /**
1108
+ * Creates a `_.find` or `_.findLast` function.
1109
+ *
1110
+ * @private
1111
+ * @param {Function} findIndexFunc The function to find the collection index.
1112
+ * @returns {Function} Returns the new find function.
1113
+ */
1114
+ function createFind(findIndexFunc) {
1115
+ return function(collection, predicate, fromIndex) {
1116
+ var iterable = Object(collection);
1117
+ if (!isArrayLike(collection)) {
1118
+ var iteratee = baseIteratee(predicate, 3);
1119
+ collection = keys(collection);
1120
+ predicate = function(key) { return iteratee(iterable[key], key, iterable); };
1121
+ }
1122
+ var index = findIndexFunc(collection, predicate, fromIndex);
1123
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
1124
+ };
1125
+ }
1126
+
1127
+ /**
1128
+ * Creates a function that wraps `func` to invoke it with the `this` binding
1129
+ * of `thisArg` and `partials` prepended to the arguments it receives.
1130
+ *
1131
+ * @private
1132
+ * @param {Function} func The function to wrap.
1133
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
1134
+ * @param {*} thisArg The `this` binding of `func`.
1135
+ * @param {Array} partials The arguments to prepend to those provided to
1136
+ * the new function.
1137
+ * @returns {Function} Returns the new wrapped function.
1138
+ */
1139
+ function createPartial(func, bitmask, thisArg, partials) {
1140
+ if (typeof func != 'function') {
1141
+ throw new TypeError(FUNC_ERROR_TEXT);
1142
+ }
1143
+ var isBind = bitmask & WRAP_BIND_FLAG,
1144
+ Ctor = createCtor(func);
1145
+
1146
+ function wrapper() {
1147
+ var argsIndex = -1,
1148
+ argsLength = arguments.length,
1149
+ leftIndex = -1,
1150
+ leftLength = partials.length,
1151
+ args = Array(leftLength + argsLength),
1152
+ fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
1153
+
1154
+ while (++leftIndex < leftLength) {
1155
+ args[leftIndex] = partials[leftIndex];
1156
+ }
1157
+ while (argsLength--) {
1158
+ args[leftIndex++] = arguments[++argsIndex];
1159
+ }
1160
+ return fn.apply(isBind ? thisArg : this, args);
1161
+ }
1162
+ return wrapper;
1163
+ }
1164
+
1165
+ /**
1166
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
1167
+ * partial deep comparisons.
1168
+ *
1169
+ * @private
1170
+ * @param {Array} array The array to compare.
1171
+ * @param {Array} other The other array to compare.
1172
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1173
+ * @param {Function} customizer The function to customize comparisons.
1174
+ * @param {Function} equalFunc The function to determine equivalents of values.
1175
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
1176
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
1177
+ */
1178
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
1179
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1180
+ arrLength = array.length,
1181
+ othLength = other.length;
1182
+
1183
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
1184
+ return false;
1185
+ }
1186
+ // Check that cyclic values are equal.
1187
+ var arrStacked = stack.get(array);
1188
+ var othStacked = stack.get(other);
1189
+ if (arrStacked && othStacked) {
1190
+ return arrStacked == other && othStacked == array;
1191
+ }
1192
+ var index = -1,
1193
+ result = true,
1194
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;
1195
+
1196
+ // Ignore non-index properties.
1197
+ while (++index < arrLength) {
1198
+ var arrValue = array[index],
1199
+ othValue = other[index];
1200
+
1201
+ var compared;
1202
+ if (compared !== undefined) {
1203
+ if (compared) {
1204
+ continue;
1205
+ }
1206
+ result = false;
1207
+ break;
1208
+ }
1209
+ // Recursively compare arrays (susceptible to call stack limits).
1210
+ if (seen) {
1211
+ if (!baseSome(other, function(othValue, othIndex) {
1212
+ if (!indexOf(seen, othIndex) &&
1213
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
1214
+ return seen.push(othIndex);
1215
+ }
1216
+ })) {
1217
+ result = false;
1218
+ break;
1219
+ }
1220
+ } else if (!(
1221
+ arrValue === othValue ||
1222
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
1223
+ )) {
1224
+ result = false;
1225
+ break;
1226
+ }
1227
+ }
1228
+ return result;
1229
+ }
1230
+
1231
+ /**
1232
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
1233
+ * the same `toStringTag`.
1234
+ *
1235
+ * **Note:** This function only supports comparing values with tags of
1236
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
1237
+ *
1238
+ * @private
1239
+ * @param {Object} object The object to compare.
1240
+ * @param {Object} other The other object to compare.
1241
+ * @param {string} tag The `toStringTag` of the objects to compare.
1242
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1243
+ * @param {Function} customizer The function to customize comparisons.
1244
+ * @param {Function} equalFunc The function to determine equivalents of values.
1245
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
1246
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1247
+ */
1248
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
1249
+ switch (tag) {
1250
+
1251
+ case boolTag:
1252
+ case dateTag:
1253
+ case numberTag:
1254
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
1255
+ // Invalid dates are coerced to `NaN`.
1256
+ return eq(+object, +other);
1257
+
1258
+ case errorTag:
1259
+ return object.name == other.name && object.message == other.message;
1260
+
1261
+ case regexpTag:
1262
+ case stringTag:
1263
+ // Coerce regexes to strings and treat strings, primitives and objects,
1264
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
1265
+ // for more details.
1266
+ return object == (other + '');
1267
+
1268
+ }
1269
+ return false;
1270
+ }
1271
+
1272
+ /**
1273
+ * A specialized version of `baseIsEqualDeep` for objects with support for
1274
+ * partial deep comparisons.
1275
+ *
1276
+ * @private
1277
+ * @param {Object} object The object to compare.
1278
+ * @param {Object} other The other object to compare.
1279
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1280
+ * @param {Function} customizer The function to customize comparisons.
1281
+ * @param {Function} equalFunc The function to determine equivalents of values.
1282
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
1283
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1284
+ */
1285
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
1286
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1287
+ objProps = keys(object),
1288
+ objLength = objProps.length,
1289
+ othProps = keys(other),
1290
+ othLength = othProps.length;
1291
+
1292
+ if (objLength != othLength && !isPartial) {
1293
+ return false;
1294
+ }
1295
+ var index = objLength;
1296
+ while (index--) {
1297
+ var key = objProps[index];
1298
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
1299
+ return false;
1300
+ }
1301
+ }
1302
+ // Check that cyclic values are equal.
1303
+ var objStacked = stack.get(object);
1304
+ var othStacked = stack.get(other);
1305
+ if (objStacked && othStacked) {
1306
+ return objStacked == other && othStacked == object;
1307
+ }
1308
+ var result = true;
1309
+
1310
+ var skipCtor = isPartial;
1311
+ while (++index < objLength) {
1312
+ key = objProps[index];
1313
+ var objValue = object[key],
1314
+ othValue = other[key];
1315
+
1316
+ var compared;
1317
+ // Recursively compare objects (susceptible to call stack limits).
1318
+ if (!(compared === undefined
1319
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
1320
+ : compared
1321
+ )) {
1322
+ result = false;
1323
+ break;
1324
+ }
1325
+ skipCtor || (skipCtor = key == 'constructor');
1326
+ }
1327
+ if (result && !skipCtor) {
1328
+ var objCtor = object.constructor,
1329
+ othCtor = other.constructor;
1330
+
1331
+ // Non `Object` object instances with different constructors are not equal.
1332
+ if (objCtor != othCtor &&
1333
+ ('constructor' in object && 'constructor' in other) &&
1334
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
1335
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
1336
+ result = false;
1337
+ }
1338
+ }
1339
+ return result;
1340
+ }
1341
+
1342
+ /**
1343
+ * A specialized version of `baseRest` which flattens the rest array.
1344
+ *
1345
+ * @private
1346
+ * @param {Function} func The function to apply a rest parameter to.
1347
+ * @returns {Function} Returns the new function.
1348
+ */
1349
+ function flatRest(func) {
1350
+ return setToString(overRest(func, undefined, flatten), func + '');
1351
+ }
1352
+
1353
+ /**
1354
+ * Checks if `value` is a flattenable `arguments` object or array.
1355
+ *
1356
+ * @private
1357
+ * @param {*} value The value to check.
1358
+ * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
1359
+ */
1360
+ function isFlattenable(value) {
1361
+ return isArray(value) || isArguments(value);
1362
+ }
1363
+
1364
+ /**
1365
+ * Checks if `value` is a valid array-like index.
1366
+ *
1367
+ * @private
1368
+ * @param {*} value The value to check.
1369
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
1370
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
1371
+ */
1372
+ function isIndex(value, length) {
1373
+ var type = typeof value;
1374
+ length = length == null ? MAX_SAFE_INTEGER : length;
1375
+
1376
+ return !!length &&
1377
+ (type == 'number' ||
1378
+ (type != 'symbol' && reIsUint.test(value))) &&
1379
+ (value > -1 && value % 1 == 0 && value < length);
1380
+ }
1381
+
1382
+ /**
1383
+ * Checks if the given arguments are from an iteratee call.
1384
+ *
1385
+ * @private
1386
+ * @param {*} value The potential iteratee value argument.
1387
+ * @param {*} index The potential iteratee index or key argument.
1388
+ * @param {*} object The potential iteratee object argument.
1389
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
1390
+ * else `false`.
1391
+ */
1392
+ function isIterateeCall(value, index, object) {
1393
+ if (!isObject(object)) {
1394
+ return false;
1395
+ }
1396
+ var type = typeof index;
1397
+ if (type == 'number'
1398
+ ? (isArrayLike(object) && isIndex(index, object.length))
1399
+ : (type == 'string' && index in object)
1400
+ ) {
1401
+ return eq(object[index], value);
1402
+ }
1403
+ return false;
1404
+ }
1405
+
1406
+ /**
1407
+ * This function is like
1408
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
1409
+ * except that it includes inherited enumerable properties.
1410
+ *
1411
+ * @private
1412
+ * @param {Object} object The object to query.
1413
+ * @returns {Array} Returns the array of property names.
1414
+ */
1415
+ function nativeKeysIn(object) {
1416
+ var result = [];
1417
+ if (object != null) {
1418
+ for (var key in Object(object)) {
1419
+ result.push(key);
1420
+ }
1421
+ }
1422
+ return result;
1423
+ }
1424
+
1425
+ /**
1426
+ * Converts `value` to a string using `Object.prototype.toString`.
1427
+ *
1428
+ * @private
1429
+ * @param {*} value The value to convert.
1430
+ * @returns {string} Returns the converted string.
1431
+ */
1432
+ function objectToString(value) {
1433
+ return nativeObjectToString.call(value);
1434
+ }
1435
+
1436
+ /**
1437
+ * A specialized version of `baseRest` which transforms the rest array.
1438
+ *
1439
+ * @private
1440
+ * @param {Function} func The function to apply a rest parameter to.
1441
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
1442
+ * @param {Function} transform The rest array transform.
1443
+ * @returns {Function} Returns the new function.
1444
+ */
1445
+ function overRest(func, start, transform) {
1446
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
1447
+ return function() {
1448
+ var args = arguments,
1449
+ index = -1,
1450
+ length = nativeMax(args.length - start, 0),
1451
+ array = Array(length);
1452
+
1453
+ while (++index < length) {
1454
+ array[index] = args[start + index];
1455
+ }
1456
+ index = -1;
1457
+ var otherArgs = Array(start + 1);
1458
+ while (++index < start) {
1459
+ otherArgs[index] = args[index];
1460
+ }
1461
+ otherArgs[start] = transform(array);
1462
+ return func.apply(this, otherArgs);
1463
+ };
1464
+ }
1465
+
1466
+ /**
1467
+ * Sets the `toString` method of `func` to return `string`.
1468
+ *
1469
+ * @private
1470
+ * @param {Function} func The function to modify.
1471
+ * @param {Function} string The `toString` result.
1472
+ * @returns {Function} Returns `func`.
1473
+ */
1474
+ var setToString = identity;
1475
+
1476
+ /*------------------------------------------------------------------------*/
1477
+
1478
+ /**
1479
+ * Creates an array with all falsey values removed. The values `false`, `null`,
1480
+ * `0`, `""`, `undefined`, and `NaN` are falsey.
1481
+ *
1482
+ * @static
1483
+ * @memberOf _
1484
+ * @since 0.1.0
1485
+ * @category Array
1486
+ * @param {Array} array The array to compact.
1487
+ * @returns {Array} Returns the new array of filtered values.
1488
+ * @example
1489
+ *
1490
+ * _.compact([0, 1, false, 2, '', 3]);
1491
+ * // => [1, 2, 3]
1492
+ */
1493
+ function compact(array) {
1494
+ return baseFilter(array, Boolean);
1495
+ }
1496
+
1497
+ /**
1498
+ * Creates a new array concatenating `array` with any additional arrays
1499
+ * and/or values.
1500
+ *
1501
+ * @static
1502
+ * @memberOf _
1503
+ * @since 4.0.0
1504
+ * @category Array
1505
+ * @param {Array} array The array to concatenate.
1506
+ * @param {...*} [values] The values to concatenate.
1507
+ * @returns {Array} Returns the new concatenated array.
1508
+ * @example
1509
+ *
1510
+ * var array = [1];
1511
+ * var other = _.concat(array, 2, [3], [[4]]);
1512
+ *
1513
+ * console.log(other);
1514
+ * // => [1, 2, 3, [4]]
1515
+ *
1516
+ * console.log(array);
1517
+ * // => [1]
1518
+ */
1519
+ function concat() {
1520
+ var length = arguments.length;
1521
+ if (!length) {
1522
+ return [];
1523
+ }
1524
+ var args = Array(length - 1),
1525
+ array = arguments[0],
1526
+ index = length;
1527
+
1528
+ while (index--) {
1529
+ args[index - 1] = arguments[index];
1530
+ }
1531
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
1532
+ }
1533
+
1534
+ /**
1535
+ * This method is like `_.find` except that it returns the index of the first
1536
+ * element `predicate` returns truthy for instead of the element itself.
1537
+ *
1538
+ * @static
1539
+ * @memberOf _
1540
+ * @since 1.1.0
1541
+ * @category Array
1542
+ * @param {Array} array The array to inspect.
1543
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
1544
+ * @param {number} [fromIndex=0] The index to search from.
1545
+ * @returns {number} Returns the index of the found element, else `-1`.
1546
+ * @example
1547
+ *
1548
+ * var users = [
1549
+ * { 'user': 'barney', 'active': false },
1550
+ * { 'user': 'fred', 'active': false },
1551
+ * { 'user': 'pebbles', 'active': true }
1552
+ * ];
1553
+ *
1554
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
1555
+ * // => 0
1556
+ *
1557
+ * // The `_.matches` iteratee shorthand.
1558
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
1559
+ * // => 1
1560
+ *
1561
+ * // The `_.matchesProperty` iteratee shorthand.
1562
+ * _.findIndex(users, ['active', false]);
1563
+ * // => 0
1564
+ *
1565
+ * // The `_.property` iteratee shorthand.
1566
+ * _.findIndex(users, 'active');
1567
+ * // => 2
1568
+ */
1569
+ function findIndex(array, predicate, fromIndex) {
1570
+ var length = array == null ? 0 : array.length;
1571
+ if (!length) {
1572
+ return -1;
1573
+ }
1574
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
1575
+ if (index < 0) {
1576
+ index = nativeMax(length + index, 0);
1577
+ }
1578
+ return baseFindIndex(array, baseIteratee(predicate, 3), index);
1579
+ }
1580
+
1581
+ /**
1582
+ * Flattens `array` a single level deep.
1583
+ *
1584
+ * @static
1585
+ * @memberOf _
1586
+ * @since 0.1.0
1587
+ * @category Array
1588
+ * @param {Array} array The array to flatten.
1589
+ * @returns {Array} Returns the new flattened array.
1590
+ * @example
1591
+ *
1592
+ * _.flatten([1, [2, [3, [4]], 5]]);
1593
+ * // => [1, 2, [3, [4]], 5]
1594
+ */
1595
+ function flatten(array) {
1596
+ var length = array == null ? 0 : array.length;
1597
+ return length ? baseFlatten(array, 1) : [];
1598
+ }
1599
+
1600
+ /**
1601
+ * Recursively flattens `array`.
1602
+ *
1603
+ * @static
1604
+ * @memberOf _
1605
+ * @since 3.0.0
1606
+ * @category Array
1607
+ * @param {Array} array The array to flatten.
1608
+ * @returns {Array} Returns the new flattened array.
1609
+ * @example
1610
+ *
1611
+ * _.flattenDeep([1, [2, [3, [4]], 5]]);
1612
+ * // => [1, 2, 3, 4, 5]
1613
+ */
1614
+ function flattenDeep(array) {
1615
+ var length = array == null ? 0 : array.length;
1616
+ return length ? baseFlatten(array, INFINITY) : [];
1617
+ }
1618
+
1619
+ /**
1620
+ * Gets the first element of `array`.
1621
+ *
1622
+ * @static
1623
+ * @memberOf _
1624
+ * @since 0.1.0
1625
+ * @alias first
1626
+ * @category Array
1627
+ * @param {Array} array The array to query.
1628
+ * @returns {*} Returns the first element of `array`.
1629
+ * @example
1630
+ *
1631
+ * _.head([1, 2, 3]);
1632
+ * // => 1
1633
+ *
1634
+ * _.head([]);
1635
+ * // => undefined
1636
+ */
1637
+ function head(array) {
1638
+ return (array && array.length) ? array[0] : undefined;
1639
+ }
1640
+
1641
+ /**
1642
+ * Gets the index at which the first occurrence of `value` is found in `array`
1643
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
1644
+ * for equality comparisons. If `fromIndex` is negative, it's used as the
1645
+ * offset from the end of `array`.
1646
+ *
1647
+ * @static
1648
+ * @memberOf _
1649
+ * @since 0.1.0
1650
+ * @category Array
1651
+ * @param {Array} array The array to inspect.
1652
+ * @param {*} value The value to search for.
1653
+ * @param {number} [fromIndex=0] The index to search from.
1654
+ * @returns {number} Returns the index of the matched value, else `-1`.
1655
+ * @example
1656
+ *
1657
+ * _.indexOf([1, 2, 1, 2], 2);
1658
+ * // => 1
1659
+ *
1660
+ * // Search from the `fromIndex`.
1661
+ * _.indexOf([1, 2, 1, 2], 2, 2);
1662
+ * // => 3
1663
+ */
1664
+ function indexOf(array, value, fromIndex) {
1665
+ var length = array == null ? 0 : array.length;
1666
+ if (typeof fromIndex == 'number') {
1667
+ fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
1668
+ } else {
1669
+ fromIndex = 0;
1670
+ }
1671
+ var index = (fromIndex || 0) - 1,
1672
+ isReflexive = value === value;
1673
+
1674
+ while (++index < length) {
1675
+ var other = array[index];
1676
+ if ((isReflexive ? other === value : other !== other)) {
1677
+ return index;
1678
+ }
1679
+ }
1680
+ return -1;
1681
+ }
1682
+
1683
+ /**
1684
+ * Gets the last element of `array`.
1685
+ *
1686
+ * @static
1687
+ * @memberOf _
1688
+ * @since 0.1.0
1689
+ * @category Array
1690
+ * @param {Array} array The array to query.
1691
+ * @returns {*} Returns the last element of `array`.
1692
+ * @example
1693
+ *
1694
+ * _.last([1, 2, 3]);
1695
+ * // => 3
1696
+ */
1697
+ function last(array) {
1698
+ var length = array == null ? 0 : array.length;
1699
+ return length ? array[length - 1] : undefined;
1700
+ }
1701
+
1702
+ /**
1703
+ * Creates a slice of `array` from `start` up to, but not including, `end`.
1704
+ *
1705
+ * **Note:** This method is used instead of
1706
+ * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
1707
+ * returned.
1708
+ *
1709
+ * @static
1710
+ * @memberOf _
1711
+ * @since 3.0.0
1712
+ * @category Array
1713
+ * @param {Array} array The array to slice.
1714
+ * @param {number} [start=0] The start position.
1715
+ * @param {number} [end=array.length] The end position.
1716
+ * @returns {Array} Returns the slice of `array`.
1717
+ */
1718
+ function slice(array, start, end) {
1719
+ var length = array == null ? 0 : array.length;
1720
+ start = start == null ? 0 : +start;
1721
+ end = end === undefined ? length : +end;
1722
+ return length ? baseSlice(array, start, end) : [];
1723
+ }
1724
+
1725
+ /*------------------------------------------------------------------------*/
1726
+
1727
+ /**
1728
+ * Creates a `lodash` wrapper instance that wraps `value` with explicit method
1729
+ * chain sequences enabled. The result of such sequences must be unwrapped
1730
+ * with `_#value`.
1731
+ *
1732
+ * @static
1733
+ * @memberOf _
1734
+ * @since 1.3.0
1735
+ * @category Seq
1736
+ * @param {*} value The value to wrap.
1737
+ * @returns {Object} Returns the new `lodash` wrapper instance.
1738
+ * @example
1739
+ *
1740
+ * var users = [
1741
+ * { 'user': 'barney', 'age': 36 },
1742
+ * { 'user': 'fred', 'age': 40 },
1743
+ * { 'user': 'pebbles', 'age': 1 }
1744
+ * ];
1745
+ *
1746
+ * var youngest = _
1747
+ * .chain(users)
1748
+ * .sortBy('age')
1749
+ * .map(function(o) {
1750
+ * return o.user + ' is ' + o.age;
1751
+ * })
1752
+ * .head()
1753
+ * .value();
1754
+ * // => 'pebbles is 1'
1755
+ */
1756
+ function chain(value) {
1757
+ var result = lodash(value);
1758
+ result.__chain__ = true;
1759
+ return result;
1760
+ }
1761
+
1762
+ /**
1763
+ * This method invokes `interceptor` and returns `value`. The interceptor
1764
+ * is invoked with one argument; (value). The purpose of this method is to
1765
+ * "tap into" a method chain sequence in order to modify intermediate results.
1766
+ *
1767
+ * @static
1768
+ * @memberOf _
1769
+ * @since 0.1.0
1770
+ * @category Seq
1771
+ * @param {*} value The value to provide to `interceptor`.
1772
+ * @param {Function} interceptor The function to invoke.
1773
+ * @returns {*} Returns `value`.
1774
+ * @example
1775
+ *
1776
+ * _([1, 2, 3])
1777
+ * .tap(function(array) {
1778
+ * // Mutate input array.
1779
+ * array.pop();
1780
+ * })
1781
+ * .reverse()
1782
+ * .value();
1783
+ * // => [2, 1]
1784
+ */
1785
+ function tap(value, interceptor) {
1786
+ interceptor(value);
1787
+ return value;
1788
+ }
1789
+
1790
+ /**
1791
+ * This method is like `_.tap` except that it returns the result of `interceptor`.
1792
+ * The purpose of this method is to "pass thru" values replacing intermediate
1793
+ * results in a method chain sequence.
1794
+ *
1795
+ * @static
1796
+ * @memberOf _
1797
+ * @since 3.0.0
1798
+ * @category Seq
1799
+ * @param {*} value The value to provide to `interceptor`.
1800
+ * @param {Function} interceptor The function to invoke.
1801
+ * @returns {*} Returns the result of `interceptor`.
1802
+ * @example
1803
+ *
1804
+ * _(' abc ')
1805
+ * .chain()
1806
+ * .trim()
1807
+ * .thru(function(value) {
1808
+ * return [value];
1809
+ * })
1810
+ * .value();
1811
+ * // => ['abc']
1812
+ */
1813
+ function thru(value, interceptor) {
1814
+ return interceptor(value);
1815
+ }
1816
+
1817
+ /**
1818
+ * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
1819
+ *
1820
+ * @name chain
1821
+ * @memberOf _
1822
+ * @since 0.1.0
1823
+ * @category Seq
1824
+ * @returns {Object} Returns the new `lodash` wrapper instance.
1825
+ * @example
1826
+ *
1827
+ * var users = [
1828
+ * { 'user': 'barney', 'age': 36 },
1829
+ * { 'user': 'fred', 'age': 40 }
1830
+ * ];
1831
+ *
1832
+ * // A sequence without explicit chaining.
1833
+ * _(users).head();
1834
+ * // => { 'user': 'barney', 'age': 36 }
1835
+ *
1836
+ * // A sequence with explicit chaining.
1837
+ * _(users)
1838
+ * .chain()
1839
+ * .head()
1840
+ * .pick('user')
1841
+ * .value();
1842
+ * // => { 'user': 'barney' }
1843
+ */
1844
+ function wrapperChain() {
1845
+ return chain(this);
1846
+ }
1847
+
1848
+ /**
1849
+ * Executes the chain sequence to resolve the unwrapped value.
1850
+ *
1851
+ * @name value
1852
+ * @memberOf _
1853
+ * @since 0.1.0
1854
+ * @alias toJSON, valueOf
1855
+ * @category Seq
1856
+ * @returns {*} Returns the resolved unwrapped value.
1857
+ * @example
1858
+ *
1859
+ * _([1, 2, 3]).value();
1860
+ * // => [1, 2, 3]
1861
+ */
1862
+ function wrapperValue() {
1863
+ return baseWrapperValue(this.__wrapped__, this.__actions__);
1864
+ }
1865
+
1866
+ /*------------------------------------------------------------------------*/
1867
+
1868
+ /**
1869
+ * Checks if `predicate` returns truthy for **all** elements of `collection`.
1870
+ * Iteration is stopped once `predicate` returns falsey. The predicate is
1871
+ * invoked with three arguments: (value, index|key, collection).
1872
+ *
1873
+ * **Note:** This method returns `true` for
1874
+ * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
1875
+ * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
1876
+ * elements of empty collections.
1877
+ *
1878
+ * @static
1879
+ * @memberOf _
1880
+ * @since 0.1.0
1881
+ * @category Collection
1882
+ * @param {Array|Object} collection The collection to iterate over.
1883
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
1884
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
1885
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
1886
+ * else `false`.
1887
+ * @example
1888
+ *
1889
+ * _.every([true, 1, null, 'yes'], Boolean);
1890
+ * // => false
1891
+ *
1892
+ * var users = [
1893
+ * { 'user': 'barney', 'age': 36, 'active': false },
1894
+ * { 'user': 'fred', 'age': 40, 'active': false }
1895
+ * ];
1896
+ *
1897
+ * // The `_.matches` iteratee shorthand.
1898
+ * _.every(users, { 'user': 'barney', 'active': false });
1899
+ * // => false
1900
+ *
1901
+ * // The `_.matchesProperty` iteratee shorthand.
1902
+ * _.every(users, ['active', false]);
1903
+ * // => true
1904
+ *
1905
+ * // The `_.property` iteratee shorthand.
1906
+ * _.every(users, 'active');
1907
+ * // => false
1908
+ */
1909
+ function every(collection, predicate, guard) {
1910
+ predicate = guard ? undefined : predicate;
1911
+ return baseEvery(collection, baseIteratee(predicate));
1912
+ }
1913
+
1914
+ /**
1915
+ * Iterates over elements of `collection`, returning an array of all elements
1916
+ * `predicate` returns truthy for. The predicate is invoked with three
1917
+ * arguments: (value, index|key, collection).
1918
+ *
1919
+ * **Note:** Unlike `_.remove`, this method returns a new array.
1920
+ *
1921
+ * @static
1922
+ * @memberOf _
1923
+ * @since 0.1.0
1924
+ * @category Collection
1925
+ * @param {Array|Object} collection The collection to iterate over.
1926
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
1927
+ * @returns {Array} Returns the new filtered array.
1928
+ * @see _.reject
1929
+ * @example
1930
+ *
1931
+ * var users = [
1932
+ * { 'user': 'barney', 'age': 36, 'active': true },
1933
+ * { 'user': 'fred', 'age': 40, 'active': false }
1934
+ * ];
1935
+ *
1936
+ * _.filter(users, function(o) { return !o.active; });
1937
+ * // => objects for ['fred']
1938
+ *
1939
+ * // The `_.matches` iteratee shorthand.
1940
+ * _.filter(users, { 'age': 36, 'active': true });
1941
+ * // => objects for ['barney']
1942
+ *
1943
+ * // The `_.matchesProperty` iteratee shorthand.
1944
+ * _.filter(users, ['active', false]);
1945
+ * // => objects for ['fred']
1946
+ *
1947
+ * // The `_.property` iteratee shorthand.
1948
+ * _.filter(users, 'active');
1949
+ * // => objects for ['barney']
1950
+ *
1951
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
1952
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
1953
+ * // => objects for ['fred', 'barney']
1954
+ */
1955
+ function filter(collection, predicate) {
1956
+ return baseFilter(collection, baseIteratee(predicate));
1957
+ }
1958
+
1959
+ /**
1960
+ * Iterates over elements of `collection`, returning the first element
1961
+ * `predicate` returns truthy for. The predicate is invoked with three
1962
+ * arguments: (value, index|key, collection).
1963
+ *
1964
+ * @static
1965
+ * @memberOf _
1966
+ * @since 0.1.0
1967
+ * @category Collection
1968
+ * @param {Array|Object} collection The collection to inspect.
1969
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
1970
+ * @param {number} [fromIndex=0] The index to search from.
1971
+ * @returns {*} Returns the matched element, else `undefined`.
1972
+ * @example
1973
+ *
1974
+ * var users = [
1975
+ * { 'user': 'barney', 'age': 36, 'active': true },
1976
+ * { 'user': 'fred', 'age': 40, 'active': false },
1977
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
1978
+ * ];
1979
+ *
1980
+ * _.find(users, function(o) { return o.age < 40; });
1981
+ * // => object for 'barney'
1982
+ *
1983
+ * // The `_.matches` iteratee shorthand.
1984
+ * _.find(users, { 'age': 1, 'active': true });
1985
+ * // => object for 'pebbles'
1986
+ *
1987
+ * // The `_.matchesProperty` iteratee shorthand.
1988
+ * _.find(users, ['active', false]);
1989
+ * // => object for 'fred'
1990
+ *
1991
+ * // The `_.property` iteratee shorthand.
1992
+ * _.find(users, 'active');
1993
+ * // => object for 'barney'
1994
+ */
1995
+ var find = createFind(findIndex);
1996
+
1997
+ /**
1998
+ * Iterates over elements of `collection` and invokes `iteratee` for each element.
1999
+ * The iteratee is invoked with three arguments: (value, index|key, collection).
2000
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
2001
+ *
2002
+ * **Note:** As with other "Collections" methods, objects with a "length"
2003
+ * property are iterated like arrays. To avoid this behavior use `_.forIn`
2004
+ * or `_.forOwn` for object iteration.
2005
+ *
2006
+ * @static
2007
+ * @memberOf _
2008
+ * @since 0.1.0
2009
+ * @alias each
2010
+ * @category Collection
2011
+ * @param {Array|Object} collection The collection to iterate over.
2012
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
2013
+ * @returns {Array|Object} Returns `collection`.
2014
+ * @see _.forEachRight
2015
+ * @example
2016
+ *
2017
+ * _.forEach([1, 2], function(value) {
2018
+ * console.log(value);
2019
+ * });
2020
+ * // => Logs `1` then `2`.
2021
+ *
2022
+ * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
2023
+ * console.log(key);
2024
+ * });
2025
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
2026
+ */
2027
+ function forEach(collection, iteratee) {
2028
+ return baseEach(collection, baseIteratee(iteratee));
2029
+ }
2030
+
2031
+ /**
2032
+ * Creates an array of values by running each element in `collection` thru
2033
+ * `iteratee`. The iteratee is invoked with three arguments:
2034
+ * (value, index|key, collection).
2035
+ *
2036
+ * Many lodash methods are guarded to work as iteratees for methods like
2037
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
2038
+ *
2039
+ * The guarded methods are:
2040
+ * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
2041
+ * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
2042
+ * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
2043
+ * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
2044
+ *
2045
+ * @static
2046
+ * @memberOf _
2047
+ * @since 0.1.0
2048
+ * @category Collection
2049
+ * @param {Array|Object} collection The collection to iterate over.
2050
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
2051
+ * @returns {Array} Returns the new mapped array.
2052
+ * @example
2053
+ *
2054
+ * function square(n) {
2055
+ * return n * n;
2056
+ * }
2057
+ *
2058
+ * _.map([4, 8], square);
2059
+ * // => [16, 64]
2060
+ *
2061
+ * _.map({ 'a': 4, 'b': 8 }, square);
2062
+ * // => [16, 64] (iteration order is not guaranteed)
2063
+ *
2064
+ * var users = [
2065
+ * { 'user': 'barney' },
2066
+ * { 'user': 'fred' }
2067
+ * ];
2068
+ *
2069
+ * // The `_.property` iteratee shorthand.
2070
+ * _.map(users, 'user');
2071
+ * // => ['barney', 'fred']
2072
+ */
2073
+ function map(collection, iteratee) {
2074
+ return baseMap(collection, baseIteratee(iteratee));
2075
+ }
2076
+
2077
+ /**
2078
+ * Reduces `collection` to a value which is the accumulated result of running
2079
+ * each element in `collection` thru `iteratee`, where each successive
2080
+ * invocation is supplied the return value of the previous. If `accumulator`
2081
+ * is not given, the first element of `collection` is used as the initial
2082
+ * value. The iteratee is invoked with four arguments:
2083
+ * (accumulator, value, index|key, collection).
2084
+ *
2085
+ * Many lodash methods are guarded to work as iteratees for methods like
2086
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
2087
+ *
2088
+ * The guarded methods are:
2089
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
2090
+ * and `sortBy`
2091
+ *
2092
+ * @static
2093
+ * @memberOf _
2094
+ * @since 0.1.0
2095
+ * @category Collection
2096
+ * @param {Array|Object} collection The collection to iterate over.
2097
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
2098
+ * @param {*} [accumulator] The initial value.
2099
+ * @returns {*} Returns the accumulated value.
2100
+ * @see _.reduceRight
2101
+ * @example
2102
+ *
2103
+ * _.reduce([1, 2], function(sum, n) {
2104
+ * return sum + n;
2105
+ * }, 0);
2106
+ * // => 3
2107
+ *
2108
+ * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
2109
+ * (result[value] || (result[value] = [])).push(key);
2110
+ * return result;
2111
+ * }, {});
2112
+ * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
2113
+ */
2114
+ function reduce(collection, iteratee, accumulator) {
2115
+ return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach);
2116
+ }
2117
+
2118
+ /**
2119
+ * Gets the size of `collection` by returning its length for array-like
2120
+ * values or the number of own enumerable string keyed properties for objects.
2121
+ *
2122
+ * @static
2123
+ * @memberOf _
2124
+ * @since 0.1.0
2125
+ * @category Collection
2126
+ * @param {Array|Object|string} collection The collection to inspect.
2127
+ * @returns {number} Returns the collection size.
2128
+ * @example
2129
+ *
2130
+ * _.size([1, 2, 3]);
2131
+ * // => 3
2132
+ *
2133
+ * _.size({ 'a': 1, 'b': 2 });
2134
+ * // => 2
2135
+ *
2136
+ * _.size('pebbles');
2137
+ * // => 7
2138
+ */
2139
+ function size(collection) {
2140
+ if (collection == null) {
2141
+ return 0;
2142
+ }
2143
+ collection = isArrayLike(collection) ? collection : nativeKeys(collection);
2144
+ return collection.length;
2145
+ }
2146
+
2147
+ /**
2148
+ * Checks if `predicate` returns truthy for **any** element of `collection`.
2149
+ * Iteration is stopped once `predicate` returns truthy. The predicate is
2150
+ * invoked with three arguments: (value, index|key, collection).
2151
+ *
2152
+ * @static
2153
+ * @memberOf _
2154
+ * @since 0.1.0
2155
+ * @category Collection
2156
+ * @param {Array|Object} collection The collection to iterate over.
2157
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
2158
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
2159
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
2160
+ * else `false`.
2161
+ * @example
2162
+ *
2163
+ * _.some([null, 0, 'yes', false], Boolean);
2164
+ * // => true
2165
+ *
2166
+ * var users = [
2167
+ * { 'user': 'barney', 'active': true },
2168
+ * { 'user': 'fred', 'active': false }
2169
+ * ];
2170
+ *
2171
+ * // The `_.matches` iteratee shorthand.
2172
+ * _.some(users, { 'user': 'barney', 'active': false });
2173
+ * // => false
2174
+ *
2175
+ * // The `_.matchesProperty` iteratee shorthand.
2176
+ * _.some(users, ['active', false]);
2177
+ * // => true
2178
+ *
2179
+ * // The `_.property` iteratee shorthand.
2180
+ * _.some(users, 'active');
2181
+ * // => true
2182
+ */
2183
+ function some(collection, predicate, guard) {
2184
+ predicate = guard ? undefined : predicate;
2185
+ return baseSome(collection, baseIteratee(predicate));
2186
+ }
2187
+
2188
+ /**
2189
+ * Creates an array of elements, sorted in ascending order by the results of
2190
+ * running each element in a collection thru each iteratee. This method
2191
+ * performs a stable sort, that is, it preserves the original sort order of
2192
+ * equal elements. The iteratees are invoked with one argument: (value).
2193
+ *
2194
+ * @static
2195
+ * @memberOf _
2196
+ * @since 0.1.0
2197
+ * @category Collection
2198
+ * @param {Array|Object} collection The collection to iterate over.
2199
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
2200
+ * The iteratees to sort by.
2201
+ * @returns {Array} Returns the new sorted array.
2202
+ * @example
2203
+ *
2204
+ * var users = [
2205
+ * { 'user': 'fred', 'age': 48 },
2206
+ * { 'user': 'barney', 'age': 36 },
2207
+ * { 'user': 'fred', 'age': 30 },
2208
+ * { 'user': 'barney', 'age': 34 }
2209
+ * ];
2210
+ *
2211
+ * _.sortBy(users, [function(o) { return o.user; }]);
2212
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
2213
+ *
2214
+ * _.sortBy(users, ['user', 'age']);
2215
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
2216
+ */
2217
+ function sortBy(collection, iteratee) {
2218
+ var index = 0;
2219
+ iteratee = baseIteratee(iteratee);
2220
+
2221
+ return baseMap(baseMap(collection, function(value, key, collection) {
2222
+ return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) };
2223
+ }).sort(function(object, other) {
2224
+ return compareAscending(object.criteria, other.criteria) || (object.index - other.index);
2225
+ }), baseProperty('value'));
2226
+ }
2227
+
2228
+ /*------------------------------------------------------------------------*/
2229
+
2230
+ /**
2231
+ * Creates a function that invokes `func`, with the `this` binding and arguments
2232
+ * of the created function, while it's called less than `n` times. Subsequent
2233
+ * calls to the created function return the result of the last `func` invocation.
2234
+ *
2235
+ * @static
2236
+ * @memberOf _
2237
+ * @since 3.0.0
2238
+ * @category Function
2239
+ * @param {number} n The number of calls at which `func` is no longer invoked.
2240
+ * @param {Function} func The function to restrict.
2241
+ * @returns {Function} Returns the new restricted function.
2242
+ * @example
2243
+ *
2244
+ * jQuery(element).on('click', _.before(5, addContactToList));
2245
+ * // => Allows adding up to 4 contacts to the list.
2246
+ */
2247
+ function before(n, func) {
2248
+ var result;
2249
+ if (typeof func != 'function') {
2250
+ throw new TypeError(FUNC_ERROR_TEXT);
2251
+ }
2252
+ n = toInteger(n);
2253
+ return function() {
2254
+ if (--n > 0) {
2255
+ result = func.apply(this, arguments);
2256
+ }
2257
+ if (n <= 1) {
2258
+ func = undefined;
2259
+ }
2260
+ return result;
2261
+ };
2262
+ }
2263
+
2264
+ /**
2265
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
2266
+ * and `partials` prepended to the arguments it receives.
2267
+ *
2268
+ * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
2269
+ * may be used as a placeholder for partially applied arguments.
2270
+ *
2271
+ * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
2272
+ * property of bound functions.
2273
+ *
2274
+ * @static
2275
+ * @memberOf _
2276
+ * @since 0.1.0
2277
+ * @category Function
2278
+ * @param {Function} func The function to bind.
2279
+ * @param {*} thisArg The `this` binding of `func`.
2280
+ * @param {...*} [partials] The arguments to be partially applied.
2281
+ * @returns {Function} Returns the new bound function.
2282
+ * @example
2283
+ *
2284
+ * function greet(greeting, punctuation) {
2285
+ * return greeting + ' ' + this.user + punctuation;
2286
+ * }
2287
+ *
2288
+ * var object = { 'user': 'fred' };
2289
+ *
2290
+ * var bound = _.bind(greet, object, 'hi');
2291
+ * bound('!');
2292
+ * // => 'hi fred!'
2293
+ *
2294
+ * // Bound with placeholders.
2295
+ * var bound = _.bind(greet, object, _, '!');
2296
+ * bound('hi');
2297
+ * // => 'hi fred!'
2298
+ */
2299
+ var bind = baseRest(function(func, thisArg, partials) {
2300
+ return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials);
2301
+ });
2302
+
2303
+ /**
2304
+ * Defers invoking the `func` until the current call stack has cleared. Any
2305
+ * additional arguments are provided to `func` when it's invoked.
2306
+ *
2307
+ * @static
2308
+ * @memberOf _
2309
+ * @since 0.1.0
2310
+ * @category Function
2311
+ * @param {Function} func The function to defer.
2312
+ * @param {...*} [args] The arguments to invoke `func` with.
2313
+ * @returns {number} Returns the timer id.
2314
+ * @example
2315
+ *
2316
+ * _.defer(function(text) {
2317
+ * console.log(text);
2318
+ * }, 'deferred');
2319
+ * // => Logs 'deferred' after one millisecond.
2320
+ */
2321
+ var defer = baseRest(function(func, args) {
2322
+ return baseDelay(func, 1, args);
2323
+ });
2324
+
2325
+ /**
2326
+ * Invokes `func` after `wait` milliseconds. Any additional arguments are
2327
+ * provided to `func` when it's invoked.
2328
+ *
2329
+ * @static
2330
+ * @memberOf _
2331
+ * @since 0.1.0
2332
+ * @category Function
2333
+ * @param {Function} func The function to delay.
2334
+ * @param {number} wait The number of milliseconds to delay invocation.
2335
+ * @param {...*} [args] The arguments to invoke `func` with.
2336
+ * @returns {number} Returns the timer id.
2337
+ * @example
2338
+ *
2339
+ * _.delay(function(text) {
2340
+ * console.log(text);
2341
+ * }, 1000, 'later');
2342
+ * // => Logs 'later' after one second.
2343
+ */
2344
+ var delay = baseRest(function(func, wait, args) {
2345
+ return baseDelay(func, toNumber(wait) || 0, args);
2346
+ });
2347
+
2348
+ /**
2349
+ * Creates a function that negates the result of the predicate `func`. The
2350
+ * `func` predicate is invoked with the `this` binding and arguments of the
2351
+ * created function.
2352
+ *
2353
+ * @static
2354
+ * @memberOf _
2355
+ * @since 3.0.0
2356
+ * @category Function
2357
+ * @param {Function} predicate The predicate to negate.
2358
+ * @returns {Function} Returns the new negated function.
2359
+ * @example
2360
+ *
2361
+ * function isEven(n) {
2362
+ * return n % 2 == 0;
2363
+ * }
2364
+ *
2365
+ * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
2366
+ * // => [1, 3, 5]
2367
+ */
2368
+ function negate(predicate) {
2369
+ if (typeof predicate != 'function') {
2370
+ throw new TypeError(FUNC_ERROR_TEXT);
2371
+ }
2372
+ return function() {
2373
+ var args = arguments;
2374
+ return !predicate.apply(this, args);
2375
+ };
2376
+ }
2377
+
2378
+ /**
2379
+ * Creates a function that is restricted to invoking `func` once. Repeat calls
2380
+ * to the function return the value of the first invocation. The `func` is
2381
+ * invoked with the `this` binding and arguments of the created function.
2382
+ *
2383
+ * @static
2384
+ * @memberOf _
2385
+ * @since 0.1.0
2386
+ * @category Function
2387
+ * @param {Function} func The function to restrict.
2388
+ * @returns {Function} Returns the new restricted function.
2389
+ * @example
2390
+ *
2391
+ * var initialize = _.once(createApplication);
2392
+ * initialize();
2393
+ * initialize();
2394
+ * // => `createApplication` is invoked once
2395
+ */
2396
+ function once(func) {
2397
+ return before(2, func);
2398
+ }
2399
+
2400
+ /*------------------------------------------------------------------------*/
2401
+
2402
+ /**
2403
+ * Creates a shallow clone of `value`.
2404
+ *
2405
+ * **Note:** This method is loosely based on the
2406
+ * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
2407
+ * and supports cloning arrays, array buffers, booleans, date objects, maps,
2408
+ * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
2409
+ * arrays. The own enumerable properties of `arguments` objects are cloned
2410
+ * as plain objects. An empty object is returned for uncloneable values such
2411
+ * as error objects, functions, DOM nodes, and WeakMaps.
2412
+ *
2413
+ * @static
2414
+ * @memberOf _
2415
+ * @since 0.1.0
2416
+ * @category Lang
2417
+ * @param {*} value The value to clone.
2418
+ * @returns {*} Returns the cloned value.
2419
+ * @see _.cloneDeep
2420
+ * @example
2421
+ *
2422
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
2423
+ *
2424
+ * var shallow = _.clone(objects);
2425
+ * console.log(shallow[0] === objects[0]);
2426
+ * // => true
2427
+ */
2428
+ function clone(value) {
2429
+ if (!isObject(value)) {
2430
+ return value;
2431
+ }
2432
+ return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value));
2433
+ }
2434
+
2435
+ /**
2436
+ * Performs a
2437
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
2438
+ * comparison between two values to determine if they are equivalent.
2439
+ *
2440
+ * @static
2441
+ * @memberOf _
2442
+ * @since 4.0.0
2443
+ * @category Lang
2444
+ * @param {*} value The value to compare.
2445
+ * @param {*} other The other value to compare.
2446
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2447
+ * @example
2448
+ *
2449
+ * var object = { 'a': 1 };
2450
+ * var other = { 'a': 1 };
2451
+ *
2452
+ * _.eq(object, object);
2453
+ * // => true
2454
+ *
2455
+ * _.eq(object, other);
2456
+ * // => false
2457
+ *
2458
+ * _.eq('a', 'a');
2459
+ * // => true
2460
+ *
2461
+ * _.eq('a', Object('a'));
2462
+ * // => false
2463
+ *
2464
+ * _.eq(NaN, NaN);
2465
+ * // => true
2466
+ */
2467
+ function eq(value, other) {
2468
+ return value === other || (value !== value && other !== other);
2469
+ }
2470
+
2471
+ /**
2472
+ * Checks if `value` is likely an `arguments` object.
2473
+ *
2474
+ * @static
2475
+ * @memberOf _
2476
+ * @since 0.1.0
2477
+ * @category Lang
2478
+ * @param {*} value The value to check.
2479
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
2480
+ * else `false`.
2481
+ * @example
2482
+ *
2483
+ * _.isArguments(function() { return arguments; }());
2484
+ * // => true
2485
+ *
2486
+ * _.isArguments([1, 2, 3]);
2487
+ * // => false
2488
+ */
2489
+ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
2490
+ return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
2491
+ !propertyIsEnumerable.call(value, 'callee');
2492
+ };
2493
+
2494
+ /**
2495
+ * Checks if `value` is classified as an `Array` object.
2496
+ *
2497
+ * @static
2498
+ * @memberOf _
2499
+ * @since 0.1.0
2500
+ * @category Lang
2501
+ * @param {*} value The value to check.
2502
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
2503
+ * @example
2504
+ *
2505
+ * _.isArray([1, 2, 3]);
2506
+ * // => true
2507
+ *
2508
+ * _.isArray(document.body.children);
2509
+ * // => false
2510
+ *
2511
+ * _.isArray('abc');
2512
+ * // => false
2513
+ *
2514
+ * _.isArray(_.noop);
2515
+ * // => false
2516
+ */
2517
+ var isArray = Array.isArray;
2518
+
2519
+ /**
2520
+ * Checks if `value` is array-like. A value is considered array-like if it's
2521
+ * not a function and has a `value.length` that's an integer greater than or
2522
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
2523
+ *
2524
+ * @static
2525
+ * @memberOf _
2526
+ * @since 4.0.0
2527
+ * @category Lang
2528
+ * @param {*} value The value to check.
2529
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
2530
+ * @example
2531
+ *
2532
+ * _.isArrayLike([1, 2, 3]);
2533
+ * // => true
2534
+ *
2535
+ * _.isArrayLike(document.body.children);
2536
+ * // => true
2537
+ *
2538
+ * _.isArrayLike('abc');
2539
+ * // => true
2540
+ *
2541
+ * _.isArrayLike(_.noop);
2542
+ * // => false
2543
+ */
2544
+ function isArrayLike(value) {
2545
+ return value != null && isLength(value.length) && !isFunction(value);
2546
+ }
2547
+
2548
+ /**
2549
+ * Checks if `value` is classified as a boolean primitive or object.
2550
+ *
2551
+ * @static
2552
+ * @memberOf _
2553
+ * @since 0.1.0
2554
+ * @category Lang
2555
+ * @param {*} value The value to check.
2556
+ * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
2557
+ * @example
2558
+ *
2559
+ * _.isBoolean(false);
2560
+ * // => true
2561
+ *
2562
+ * _.isBoolean(null);
2563
+ * // => false
2564
+ */
2565
+ function isBoolean(value) {
2566
+ return value === true || value === false ||
2567
+ (isObjectLike(value) && baseGetTag(value) == boolTag);
2568
+ }
2569
+
2570
+ /**
2571
+ * Checks if `value` is classified as a `Date` object.
2572
+ *
2573
+ * @static
2574
+ * @memberOf _
2575
+ * @since 0.1.0
2576
+ * @category Lang
2577
+ * @param {*} value The value to check.
2578
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
2579
+ * @example
2580
+ *
2581
+ * _.isDate(new Date);
2582
+ * // => true
2583
+ *
2584
+ * _.isDate('Mon April 23 2012');
2585
+ * // => false
2586
+ */
2587
+ var isDate = baseIsDate;
2588
+
2589
+ /**
2590
+ * Checks if `value` is an empty object, collection, map, or set.
2591
+ *
2592
+ * Objects are considered empty if they have no own enumerable string keyed
2593
+ * properties.
2594
+ *
2595
+ * Array-like values such as `arguments` objects, arrays, buffers, strings, or
2596
+ * jQuery-like collections are considered empty if they have a `length` of `0`.
2597
+ * Similarly, maps and sets are considered empty if they have a `size` of `0`.
2598
+ *
2599
+ * @static
2600
+ * @memberOf _
2601
+ * @since 0.1.0
2602
+ * @category Lang
2603
+ * @param {*} value The value to check.
2604
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
2605
+ * @example
2606
+ *
2607
+ * _.isEmpty(null);
2608
+ * // => true
2609
+ *
2610
+ * _.isEmpty(true);
2611
+ * // => true
2612
+ *
2613
+ * _.isEmpty(1);
2614
+ * // => true
2615
+ *
2616
+ * _.isEmpty([1, 2, 3]);
2617
+ * // => false
2618
+ *
2619
+ * _.isEmpty({ 'a': 1 });
2620
+ * // => false
2621
+ */
2622
+ function isEmpty(value) {
2623
+ if (isArrayLike(value) &&
2624
+ (isArray(value) || isString(value) ||
2625
+ isFunction(value.splice) || isArguments(value))) {
2626
+ return !value.length;
2627
+ }
2628
+ return !nativeKeys(value).length;
2629
+ }
2630
+
2631
+ /**
2632
+ * Performs a deep comparison between two values to determine if they are
2633
+ * equivalent.
2634
+ *
2635
+ * **Note:** This method supports comparing arrays, array buffers, booleans,
2636
+ * date objects, error objects, maps, numbers, `Object` objects, regexes,
2637
+ * sets, strings, symbols, and typed arrays. `Object` objects are compared
2638
+ * by their own, not inherited, enumerable properties. Functions and DOM
2639
+ * nodes are compared by strict equality, i.e. `===`.
2640
+ *
2641
+ * @static
2642
+ * @memberOf _
2643
+ * @since 0.1.0
2644
+ * @category Lang
2645
+ * @param {*} value The value to compare.
2646
+ * @param {*} other The other value to compare.
2647
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2648
+ * @example
2649
+ *
2650
+ * var object = { 'a': 1 };
2651
+ * var other = { 'a': 1 };
2652
+ *
2653
+ * _.isEqual(object, other);
2654
+ * // => true
2655
+ *
2656
+ * object === other;
2657
+ * // => false
2658
+ */
2659
+ function isEqual(value, other) {
2660
+ return baseIsEqual(value, other);
2661
+ }
2662
+
2663
+ /**
2664
+ * Checks if `value` is a finite primitive number.
2665
+ *
2666
+ * **Note:** This method is based on
2667
+ * [`Number.isFinite`](https://mdn.io/Number/isFinite).
2668
+ *
2669
+ * @static
2670
+ * @memberOf _
2671
+ * @since 0.1.0
2672
+ * @category Lang
2673
+ * @param {*} value The value to check.
2674
+ * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
2675
+ * @example
2676
+ *
2677
+ * _.isFinite(3);
2678
+ * // => true
2679
+ *
2680
+ * _.isFinite(Number.MIN_VALUE);
2681
+ * // => true
2682
+ *
2683
+ * _.isFinite(Infinity);
2684
+ * // => false
2685
+ *
2686
+ * _.isFinite('3');
2687
+ * // => false
2688
+ */
2689
+ function isFinite(value) {
2690
+ return typeof value == 'number' && nativeIsFinite(value);
2691
+ }
2692
+
2693
+ /**
2694
+ * Checks if `value` is classified as a `Function` object.
2695
+ *
2696
+ * @static
2697
+ * @memberOf _
2698
+ * @since 0.1.0
2699
+ * @category Lang
2700
+ * @param {*} value The value to check.
2701
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
2702
+ * @example
2703
+ *
2704
+ * _.isFunction(_);
2705
+ * // => true
2706
+ *
2707
+ * _.isFunction(/abc/);
2708
+ * // => false
2709
+ */
2710
+ function isFunction(value) {
2711
+ if (!isObject(value)) {
2712
+ return false;
2713
+ }
2714
+ // The use of `Object#toString` avoids issues with the `typeof` operator
2715
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
2716
+ var tag = baseGetTag(value);
2717
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
2718
+ }
2719
+
2720
+ /**
2721
+ * Checks if `value` is a valid array-like length.
2722
+ *
2723
+ * **Note:** This method is loosely based on
2724
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
2725
+ *
2726
+ * @static
2727
+ * @memberOf _
2728
+ * @since 4.0.0
2729
+ * @category Lang
2730
+ * @param {*} value The value to check.
2731
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
2732
+ * @example
2733
+ *
2734
+ * _.isLength(3);
2735
+ * // => true
2736
+ *
2737
+ * _.isLength(Number.MIN_VALUE);
2738
+ * // => false
2739
+ *
2740
+ * _.isLength(Infinity);
2741
+ * // => false
2742
+ *
2743
+ * _.isLength('3');
2744
+ * // => false
2745
+ */
2746
+ function isLength(value) {
2747
+ return typeof value == 'number' &&
2748
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
2749
+ }
2750
+
2751
+ /**
2752
+ * Checks if `value` is the
2753
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
2754
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
2755
+ *
2756
+ * @static
2757
+ * @memberOf _
2758
+ * @since 0.1.0
2759
+ * @category Lang
2760
+ * @param {*} value The value to check.
2761
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
2762
+ * @example
2763
+ *
2764
+ * _.isObject({});
2765
+ * // => true
2766
+ *
2767
+ * _.isObject([1, 2, 3]);
2768
+ * // => true
2769
+ *
2770
+ * _.isObject(_.noop);
2771
+ * // => true
2772
+ *
2773
+ * _.isObject(null);
2774
+ * // => false
2775
+ */
2776
+ function isObject(value) {
2777
+ var type = typeof value;
2778
+ return value != null && (type == 'object' || type == 'function');
2779
+ }
2780
+
2781
+ /**
2782
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
2783
+ * and has a `typeof` result of "object".
2784
+ *
2785
+ * @static
2786
+ * @memberOf _
2787
+ * @since 4.0.0
2788
+ * @category Lang
2789
+ * @param {*} value The value to check.
2790
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
2791
+ * @example
2792
+ *
2793
+ * _.isObjectLike({});
2794
+ * // => true
2795
+ *
2796
+ * _.isObjectLike([1, 2, 3]);
2797
+ * // => true
2798
+ *
2799
+ * _.isObjectLike(_.noop);
2800
+ * // => false
2801
+ *
2802
+ * _.isObjectLike(null);
2803
+ * // => false
2804
+ */
2805
+ function isObjectLike(value) {
2806
+ return value != null && typeof value == 'object';
2807
+ }
2808
+
2809
+ /**
2810
+ * Checks if `value` is `NaN`.
2811
+ *
2812
+ * **Note:** This method is based on
2813
+ * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
2814
+ * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
2815
+ * `undefined` and other non-number values.
2816
+ *
2817
+ * @static
2818
+ * @memberOf _
2819
+ * @since 0.1.0
2820
+ * @category Lang
2821
+ * @param {*} value The value to check.
2822
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
2823
+ * @example
2824
+ *
2825
+ * _.isNaN(NaN);
2826
+ * // => true
2827
+ *
2828
+ * _.isNaN(new Number(NaN));
2829
+ * // => true
2830
+ *
2831
+ * isNaN(undefined);
2832
+ * // => true
2833
+ *
2834
+ * _.isNaN(undefined);
2835
+ * // => false
2836
+ */
2837
+ function isNaN(value) {
2838
+ // An `NaN` primitive is the only value that is not equal to itself.
2839
+ // Perform the `toStringTag` check first to avoid errors with some
2840
+ // ActiveX objects in IE.
2841
+ return isNumber(value) && value != +value;
2842
+ }
2843
+
2844
+ /**
2845
+ * Checks if `value` is `null`.
2846
+ *
2847
+ * @static
2848
+ * @memberOf _
2849
+ * @since 0.1.0
2850
+ * @category Lang
2851
+ * @param {*} value The value to check.
2852
+ * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
2853
+ * @example
2854
+ *
2855
+ * _.isNull(null);
2856
+ * // => true
2857
+ *
2858
+ * _.isNull(void 0);
2859
+ * // => false
2860
+ */
2861
+ function isNull(value) {
2862
+ return value === null;
2863
+ }
2864
+
2865
+ /**
2866
+ * Checks if `value` is classified as a `Number` primitive or object.
2867
+ *
2868
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
2869
+ * classified as numbers, use the `_.isFinite` method.
2870
+ *
2871
+ * @static
2872
+ * @memberOf _
2873
+ * @since 0.1.0
2874
+ * @category Lang
2875
+ * @param {*} value The value to check.
2876
+ * @returns {boolean} Returns `true` if `value` is a number, else `false`.
2877
+ * @example
2878
+ *
2879
+ * _.isNumber(3);
2880
+ * // => true
2881
+ *
2882
+ * _.isNumber(Number.MIN_VALUE);
2883
+ * // => true
2884
+ *
2885
+ * _.isNumber(Infinity);
2886
+ * // => true
2887
+ *
2888
+ * _.isNumber('3');
2889
+ * // => false
2890
+ */
2891
+ function isNumber(value) {
2892
+ return typeof value == 'number' ||
2893
+ (isObjectLike(value) && baseGetTag(value) == numberTag);
2894
+ }
2895
+
2896
+ /**
2897
+ * Checks if `value` is classified as a `RegExp` object.
2898
+ *
2899
+ * @static
2900
+ * @memberOf _
2901
+ * @since 0.1.0
2902
+ * @category Lang
2903
+ * @param {*} value The value to check.
2904
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
2905
+ * @example
2906
+ *
2907
+ * _.isRegExp(/abc/);
2908
+ * // => true
2909
+ *
2910
+ * _.isRegExp('/abc/');
2911
+ * // => false
2912
+ */
2913
+ var isRegExp = baseIsRegExp;
2914
+
2915
+ /**
2916
+ * Checks if `value` is classified as a `String` primitive or object.
2917
+ *
2918
+ * @static
2919
+ * @since 0.1.0
2920
+ * @memberOf _
2921
+ * @category Lang
2922
+ * @param {*} value The value to check.
2923
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
2924
+ * @example
2925
+ *
2926
+ * _.isString('abc');
2927
+ * // => true
2928
+ *
2929
+ * _.isString(1);
2930
+ * // => false
2931
+ */
2932
+ function isString(value) {
2933
+ return typeof value == 'string' ||
2934
+ (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
2935
+ }
2936
+
2937
+ /**
2938
+ * Checks if `value` is `undefined`.
2939
+ *
2940
+ * @static
2941
+ * @since 0.1.0
2942
+ * @memberOf _
2943
+ * @category Lang
2944
+ * @param {*} value The value to check.
2945
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
2946
+ * @example
2947
+ *
2948
+ * _.isUndefined(void 0);
2949
+ * // => true
2950
+ *
2951
+ * _.isUndefined(null);
2952
+ * // => false
2953
+ */
2954
+ function isUndefined(value) {
2955
+ return value === undefined;
2956
+ }
2957
+
2958
+ /**
2959
+ * Converts `value` to an array.
2960
+ *
2961
+ * @static
2962
+ * @since 0.1.0
2963
+ * @memberOf _
2964
+ * @category Lang
2965
+ * @param {*} value The value to convert.
2966
+ * @returns {Array} Returns the converted array.
2967
+ * @example
2968
+ *
2969
+ * _.toArray({ 'a': 1, 'b': 2 });
2970
+ * // => [1, 2]
2971
+ *
2972
+ * _.toArray('abc');
2973
+ * // => ['a', 'b', 'c']
2974
+ *
2975
+ * _.toArray(1);
2976
+ * // => []
2977
+ *
2978
+ * _.toArray(null);
2979
+ * // => []
2980
+ */
2981
+ function toArray(value) {
2982
+ if (!isArrayLike(value)) {
2983
+ return values(value);
2984
+ }
2985
+ return value.length ? copyArray(value) : [];
2986
+ }
2987
+
2988
+ /**
2989
+ * Converts `value` to an integer.
2990
+ *
2991
+ * **Note:** This method is loosely based on
2992
+ * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
2993
+ *
2994
+ * @static
2995
+ * @memberOf _
2996
+ * @since 4.0.0
2997
+ * @category Lang
2998
+ * @param {*} value The value to convert.
2999
+ * @returns {number} Returns the converted integer.
3000
+ * @example
3001
+ *
3002
+ * _.toInteger(3.2);
3003
+ * // => 3
3004
+ *
3005
+ * _.toInteger(Number.MIN_VALUE);
3006
+ * // => 0
3007
+ *
3008
+ * _.toInteger(Infinity);
3009
+ * // => 1.7976931348623157e+308
3010
+ *
3011
+ * _.toInteger('3.2');
3012
+ * // => 3
3013
+ */
3014
+ var toInteger = Number;
3015
+
3016
+ /**
3017
+ * Converts `value` to a number.
3018
+ *
3019
+ * @static
3020
+ * @memberOf _
3021
+ * @since 4.0.0
3022
+ * @category Lang
3023
+ * @param {*} value The value to process.
3024
+ * @returns {number} Returns the number.
3025
+ * @example
3026
+ *
3027
+ * _.toNumber(3.2);
3028
+ * // => 3.2
3029
+ *
3030
+ * _.toNumber(Number.MIN_VALUE);
3031
+ * // => 5e-324
3032
+ *
3033
+ * _.toNumber(Infinity);
3034
+ * // => Infinity
3035
+ *
3036
+ * _.toNumber('3.2');
3037
+ * // => 3.2
3038
+ */
3039
+ var toNumber = Number;
3040
+
3041
+ /**
3042
+ * Converts `value` to a string. An empty string is returned for `null`
3043
+ * and `undefined` values. The sign of `-0` is preserved.
3044
+ *
3045
+ * @static
3046
+ * @memberOf _
3047
+ * @since 4.0.0
3048
+ * @category Lang
3049
+ * @param {*} value The value to convert.
3050
+ * @returns {string} Returns the converted string.
3051
+ * @example
3052
+ *
3053
+ * _.toString(null);
3054
+ * // => ''
3055
+ *
3056
+ * _.toString(-0);
3057
+ * // => '-0'
3058
+ *
3059
+ * _.toString([1, 2, 3]);
3060
+ * // => '1,2,3'
3061
+ */
3062
+ function toString(value) {
3063
+ if (typeof value == 'string') {
3064
+ return value;
3065
+ }
3066
+ return value == null ? '' : (value + '');
3067
+ }
3068
+
3069
+ /*------------------------------------------------------------------------*/
3070
+
3071
+ /**
3072
+ * Assigns own enumerable string keyed properties of source objects to the
3073
+ * destination object. Source objects are applied from left to right.
3074
+ * Subsequent sources overwrite property assignments of previous sources.
3075
+ *
3076
+ * **Note:** This method mutates `object` and is loosely based on
3077
+ * [`Object.assign`](https://mdn.io/Object/assign).
3078
+ *
3079
+ * @static
3080
+ * @memberOf _
3081
+ * @since 0.10.0
3082
+ * @category Object
3083
+ * @param {Object} object The destination object.
3084
+ * @param {...Object} [sources] The source objects.
3085
+ * @returns {Object} Returns `object`.
3086
+ * @see _.assignIn
3087
+ * @example
3088
+ *
3089
+ * function Foo() {
3090
+ * this.a = 1;
3091
+ * }
3092
+ *
3093
+ * function Bar() {
3094
+ * this.c = 3;
3095
+ * }
3096
+ *
3097
+ * Foo.prototype.b = 2;
3098
+ * Bar.prototype.d = 4;
3099
+ *
3100
+ * _.assign({ 'a': 0 }, new Foo, new Bar);
3101
+ * // => { 'a': 1, 'c': 3 }
3102
+ */
3103
+ var assign = createAssigner(function(object, source) {
3104
+ copyObject(source, nativeKeys(source), object);
3105
+ });
3106
+
3107
+ /**
3108
+ * This method is like `_.assign` except that it iterates over own and
3109
+ * inherited source properties.
3110
+ *
3111
+ * **Note:** This method mutates `object`.
3112
+ *
3113
+ * @static
3114
+ * @memberOf _
3115
+ * @since 4.0.0
3116
+ * @alias extend
3117
+ * @category Object
3118
+ * @param {Object} object The destination object.
3119
+ * @param {...Object} [sources] The source objects.
3120
+ * @returns {Object} Returns `object`.
3121
+ * @see _.assign
3122
+ * @example
3123
+ *
3124
+ * function Foo() {
3125
+ * this.a = 1;
3126
+ * }
3127
+ *
3128
+ * function Bar() {
3129
+ * this.c = 3;
3130
+ * }
3131
+ *
3132
+ * Foo.prototype.b = 2;
3133
+ * Bar.prototype.d = 4;
3134
+ *
3135
+ * _.assignIn({ 'a': 0 }, new Foo, new Bar);
3136
+ * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
3137
+ */
3138
+ var assignIn = createAssigner(function(object, source) {
3139
+ copyObject(source, nativeKeysIn(source), object);
3140
+ });
3141
+
3142
+ /**
3143
+ * Creates an object that inherits from the `prototype` object. If a
3144
+ * `properties` object is given, its own enumerable string keyed properties
3145
+ * are assigned to the created object.
3146
+ *
3147
+ * @static
3148
+ * @memberOf _
3149
+ * @since 2.3.0
3150
+ * @category Object
3151
+ * @param {Object} prototype The object to inherit from.
3152
+ * @param {Object} [properties] The properties to assign to the object.
3153
+ * @returns {Object} Returns the new object.
3154
+ * @example
3155
+ *
3156
+ * function Shape() {
3157
+ * this.x = 0;
3158
+ * this.y = 0;
3159
+ * }
3160
+ *
3161
+ * function Circle() {
3162
+ * Shape.call(this);
3163
+ * }
3164
+ *
3165
+ * Circle.prototype = _.create(Shape.prototype, {
3166
+ * 'constructor': Circle
3167
+ * });
3168
+ *
3169
+ * var circle = new Circle;
3170
+ * circle instanceof Circle;
3171
+ * // => true
3172
+ *
3173
+ * circle instanceof Shape;
3174
+ * // => true
3175
+ */
3176
+ function create(prototype, properties) {
3177
+ var result = baseCreate(prototype);
3178
+ return properties == null ? result : assign(result, properties);
3179
+ }
3180
+
3181
+ /**
3182
+ * Assigns own and inherited enumerable string keyed properties of source
3183
+ * objects to the destination object for all destination properties that
3184
+ * resolve to `undefined`. Source objects are applied from left to right.
3185
+ * Once a property is set, additional values of the same property are ignored.
3186
+ *
3187
+ * **Note:** This method mutates `object`.
3188
+ *
3189
+ * @static
3190
+ * @since 0.1.0
3191
+ * @memberOf _
3192
+ * @category Object
3193
+ * @param {Object} object The destination object.
3194
+ * @param {...Object} [sources] The source objects.
3195
+ * @returns {Object} Returns `object`.
3196
+ * @see _.defaultsDeep
3197
+ * @example
3198
+ *
3199
+ * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
3200
+ * // => { 'a': 1, 'b': 2 }
3201
+ */
3202
+ var defaults = baseRest(function(object, sources) {
3203
+ object = Object(object);
3204
+
3205
+ var index = -1;
3206
+ var length = sources.length;
3207
+ var guard = length > 2 ? sources[2] : undefined;
3208
+
3209
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
3210
+ length = 1;
3211
+ }
3212
+
3213
+ while (++index < length) {
3214
+ var source = sources[index];
3215
+ var props = keysIn(source);
3216
+ var propsIndex = -1;
3217
+ var propsLength = props.length;
3218
+
3219
+ while (++propsIndex < propsLength) {
3220
+ var key = props[propsIndex];
3221
+ var value = object[key];
3222
+
3223
+ if (value === undefined ||
3224
+ (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
3225
+ object[key] = source[key];
3226
+ }
3227
+ }
3228
+ }
3229
+
3230
+ return object;
3231
+ });
3232
+
3233
+ /**
3234
+ * Checks if `path` is a direct property of `object`.
3235
+ *
3236
+ * @static
3237
+ * @since 0.1.0
3238
+ * @memberOf _
3239
+ * @category Object
3240
+ * @param {Object} object The object to query.
3241
+ * @param {Array|string} path The path to check.
3242
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
3243
+ * @example
3244
+ *
3245
+ * var object = { 'a': { 'b': 2 } };
3246
+ * var other = _.create({ 'a': _.create({ 'b': 2 }) });
3247
+ *
3248
+ * _.has(object, 'a');
3249
+ * // => true
3250
+ *
3251
+ * _.has(object, 'a.b');
3252
+ * // => true
3253
+ *
3254
+ * _.has(object, ['a', 'b']);
3255
+ * // => true
3256
+ *
3257
+ * _.has(other, 'a');
3258
+ * // => false
3259
+ */
3260
+ function has(object, path) {
3261
+ return object != null && hasOwnProperty.call(object, path);
3262
+ }
3263
+
3264
+ /**
3265
+ * Creates an array of the own enumerable property names of `object`.
3266
+ *
3267
+ * **Note:** Non-object values are coerced to objects. See the
3268
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
3269
+ * for more details.
3270
+ *
3271
+ * @static
3272
+ * @since 0.1.0
3273
+ * @memberOf _
3274
+ * @category Object
3275
+ * @param {Object} object The object to query.
3276
+ * @returns {Array} Returns the array of property names.
3277
+ * @example
3278
+ *
3279
+ * function Foo() {
3280
+ * this.a = 1;
3281
+ * this.b = 2;
3282
+ * }
3283
+ *
3284
+ * Foo.prototype.c = 3;
3285
+ *
3286
+ * _.keys(new Foo);
3287
+ * // => ['a', 'b'] (iteration order is not guaranteed)
3288
+ *
3289
+ * _.keys('hi');
3290
+ * // => ['0', '1']
3291
+ */
3292
+ var keys = nativeKeys;
3293
+
3294
+ /**
3295
+ * Creates an array of the own and inherited enumerable property names of `object`.
3296
+ *
3297
+ * **Note:** Non-object values are coerced to objects.
3298
+ *
3299
+ * @static
3300
+ * @memberOf _
3301
+ * @since 3.0.0
3302
+ * @category Object
3303
+ * @param {Object} object The object to query.
3304
+ * @returns {Array} Returns the array of property names.
3305
+ * @example
3306
+ *
3307
+ * function Foo() {
3308
+ * this.a = 1;
3309
+ * this.b = 2;
3310
+ * }
3311
+ *
3312
+ * Foo.prototype.c = 3;
3313
+ *
3314
+ * _.keysIn(new Foo);
3315
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
3316
+ */
3317
+ var keysIn = nativeKeysIn;
3318
+
3319
+ /**
3320
+ * Creates an object composed of the picked `object` properties.
3321
+ *
3322
+ * @static
3323
+ * @since 0.1.0
3324
+ * @memberOf _
3325
+ * @category Object
3326
+ * @param {Object} object The source object.
3327
+ * @param {...(string|string[])} [paths] The property paths to pick.
3328
+ * @returns {Object} Returns the new object.
3329
+ * @example
3330
+ *
3331
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
3332
+ *
3333
+ * _.pick(object, ['a', 'c']);
3334
+ * // => { 'a': 1, 'c': 3 }
3335
+ */
3336
+ var pick = flatRest(function(object, paths) {
3337
+ return object == null ? {} : basePick(object, paths);
3338
+ });
3339
+
3340
+ /**
3341
+ * This method is like `_.get` except that if the resolved value is a
3342
+ * function it's invoked with the `this` binding of its parent object and
3343
+ * its result is returned.
3344
+ *
3345
+ * @static
3346
+ * @since 0.1.0
3347
+ * @memberOf _
3348
+ * @category Object
3349
+ * @param {Object} object The object to query.
3350
+ * @param {Array|string} path The path of the property to resolve.
3351
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
3352
+ * @returns {*} Returns the resolved value.
3353
+ * @example
3354
+ *
3355
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
3356
+ *
3357
+ * _.result(object, 'a[0].b.c1');
3358
+ * // => 3
3359
+ *
3360
+ * _.result(object, 'a[0].b.c2');
3361
+ * // => 4
3362
+ *
3363
+ * _.result(object, 'a[0].b.c3', 'default');
3364
+ * // => 'default'
3365
+ *
3366
+ * _.result(object, 'a[0].b.c3', _.constant('default'));
3367
+ * // => 'default'
3368
+ */
3369
+ function result(object, path, defaultValue) {
3370
+ var value = object == null ? undefined : object[path];
3371
+ if (value === undefined) {
3372
+ value = defaultValue;
3373
+ }
3374
+ return isFunction(value) ? value.call(object) : value;
3375
+ }
3376
+
3377
+ /**
3378
+ * Creates an array of the own enumerable string keyed property values of `object`.
3379
+ *
3380
+ * **Note:** Non-object values are coerced to objects.
3381
+ *
3382
+ * @static
3383
+ * @since 0.1.0
3384
+ * @memberOf _
3385
+ * @category Object
3386
+ * @param {Object} object The object to query.
3387
+ * @returns {Array} Returns the array of property values.
3388
+ * @example
3389
+ *
3390
+ * function Foo() {
3391
+ * this.a = 1;
3392
+ * this.b = 2;
3393
+ * }
3394
+ *
3395
+ * Foo.prototype.c = 3;
3396
+ *
3397
+ * _.values(new Foo);
3398
+ * // => [1, 2] (iteration order is not guaranteed)
3399
+ *
3400
+ * _.values('hi');
3401
+ * // => ['h', 'i']
3402
+ */
3403
+ function values(object) {
3404
+ return object == null ? [] : baseValues(object, keys(object));
3405
+ }
3406
+
3407
+ /*------------------------------------------------------------------------*/
3408
+
3409
+ /**
3410
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
3411
+ * corresponding HTML entities.
3412
+ *
3413
+ * **Note:** No other characters are escaped. To escape additional
3414
+ * characters use a third-party library like [_he_](https://mths.be/he).
3415
+ *
3416
+ * Though the ">" character is escaped for symmetry, characters like
3417
+ * ">" and "/" don't need escaping in HTML and have no special meaning
3418
+ * unless they're part of a tag or unquoted attribute value. See
3419
+ * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
3420
+ * (under "semi-related fun fact") for more details.
3421
+ *
3422
+ * When working with HTML you should always
3423
+ * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
3424
+ * XSS vectors.
3425
+ *
3426
+ * @static
3427
+ * @since 0.1.0
3428
+ * @memberOf _
3429
+ * @category String
3430
+ * @param {string} [string=''] The string to escape.
3431
+ * @returns {string} Returns the escaped string.
3432
+ * @example
3433
+ *
3434
+ * _.escape('fred, barney, & pebbles');
3435
+ * // => 'fred, barney, &amp; pebbles'
3436
+ */
3437
+ function escape(string) {
3438
+ string = toString(string);
3439
+ return (string && reHasUnescapedHtml.test(string))
3440
+ ? string.replace(reUnescapedHtml, escapeHtmlChar)
3441
+ : string;
3442
+ }
3443
+
3444
+ /*------------------------------------------------------------------------*/
3445
+
3446
+ /**
3447
+ * This method returns the first argument it receives.
3448
+ *
3449
+ * @static
3450
+ * @since 0.1.0
3451
+ * @memberOf _
3452
+ * @category Util
3453
+ * @param {*} value Any value.
3454
+ * @returns {*} Returns `value`.
3455
+ * @example
3456
+ *
3457
+ * var object = { 'a': 1 };
3458
+ *
3459
+ * console.log(_.identity(object) === object);
3460
+ * // => true
3461
+ */
3462
+ function identity(value) {
3463
+ return value;
3464
+ }
3465
+
3466
+ /**
3467
+ * Creates a function that invokes `func` with the arguments of the created
3468
+ * function. If `func` is a property name, the created function returns the
3469
+ * property value for a given element. If `func` is an array or object, the
3470
+ * created function returns `true` for elements that contain the equivalent
3471
+ * source properties, otherwise it returns `false`.
3472
+ *
3473
+ * @static
3474
+ * @since 4.0.0
3475
+ * @memberOf _
3476
+ * @category Util
3477
+ * @param {*} [func=_.identity] The value to convert to a callback.
3478
+ * @returns {Function} Returns the callback.
3479
+ * @example
3480
+ *
3481
+ * var users = [
3482
+ * { 'user': 'barney', 'age': 36, 'active': true },
3483
+ * { 'user': 'fred', 'age': 40, 'active': false }
3484
+ * ];
3485
+ *
3486
+ * // The `_.matches` iteratee shorthand.
3487
+ * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
3488
+ * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
3489
+ *
3490
+ * // The `_.matchesProperty` iteratee shorthand.
3491
+ * _.filter(users, _.iteratee(['user', 'fred']));
3492
+ * // => [{ 'user': 'fred', 'age': 40 }]
3493
+ *
3494
+ * // The `_.property` iteratee shorthand.
3495
+ * _.map(users, _.iteratee('user'));
3496
+ * // => ['barney', 'fred']
3497
+ *
3498
+ * // Create custom iteratee shorthands.
3499
+ * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
3500
+ * return !_.isRegExp(func) ? iteratee(func) : function(string) {
3501
+ * return func.test(string);
3502
+ * };
3503
+ * });
3504
+ *
3505
+ * _.filter(['abc', 'def'], /ef/);
3506
+ * // => ['def']
3507
+ */
3508
+ var iteratee = baseIteratee;
3509
+
3510
+ /**
3511
+ * Creates a function that performs a partial deep comparison between a given
3512
+ * object and `source`, returning `true` if the given object has equivalent
3513
+ * property values, else `false`.
3514
+ *
3515
+ * **Note:** The created function is equivalent to `_.isMatch` with `source`
3516
+ * partially applied.
3517
+ *
3518
+ * Partial comparisons will match empty array and empty object `source`
3519
+ * values against any array or object value, respectively. See `_.isEqual`
3520
+ * for a list of supported value comparisons.
3521
+ *
3522
+ * **Note:** Multiple values can be checked by combining several matchers
3523
+ * using `_.overSome`
3524
+ *
3525
+ * @static
3526
+ * @memberOf _
3527
+ * @since 3.0.0
3528
+ * @category Util
3529
+ * @param {Object} source The object of property values to match.
3530
+ * @returns {Function} Returns the new spec function.
3531
+ * @example
3532
+ *
3533
+ * var objects = [
3534
+ * { 'a': 1, 'b': 2, 'c': 3 },
3535
+ * { 'a': 4, 'b': 5, 'c': 6 }
3536
+ * ];
3537
+ *
3538
+ * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
3539
+ * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
3540
+ *
3541
+ * // Checking for several possible values
3542
+ * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
3543
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
3544
+ */
3545
+ function matches(source) {
3546
+ return baseMatches(assign({}, source));
3547
+ }
3548
+
3549
+ /**
3550
+ * Adds all own enumerable string keyed function properties of a source
3551
+ * object to the destination object. If `object` is a function, then methods
3552
+ * are added to its prototype as well.
3553
+ *
3554
+ * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
3555
+ * avoid conflicts caused by modifying the original.
3556
+ *
3557
+ * @static
3558
+ * @since 0.1.0
3559
+ * @memberOf _
3560
+ * @category Util
3561
+ * @param {Function|Object} [object=lodash] The destination object.
3562
+ * @param {Object} source The object of functions to add.
3563
+ * @param {Object} [options={}] The options object.
3564
+ * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
3565
+ * @returns {Function|Object} Returns `object`.
3566
+ * @example
3567
+ *
3568
+ * function vowels(string) {
3569
+ * return _.filter(string, function(v) {
3570
+ * return /[aeiou]/i.test(v);
3571
+ * });
3572
+ * }
3573
+ *
3574
+ * _.mixin({ 'vowels': vowels });
3575
+ * _.vowels('fred');
3576
+ * // => ['e']
3577
+ *
3578
+ * _('fred').vowels().value();
3579
+ * // => ['e']
3580
+ *
3581
+ * _.mixin({ 'vowels': vowels }, { 'chain': false });
3582
+ * _('fred').vowels();
3583
+ * // => ['e']
3584
+ */
3585
+ function mixin(object, source, options) {
3586
+ var props = keys(source),
3587
+ methodNames = baseFunctions(source, props);
3588
+
3589
+ if (options == null &&
3590
+ !(isObject(source) && (methodNames.length || !props.length))) {
3591
+ options = source;
3592
+ source = object;
3593
+ object = this;
3594
+ methodNames = baseFunctions(source, keys(source));
3595
+ }
3596
+ var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
3597
+ isFunc = isFunction(object);
3598
+
3599
+ baseEach(methodNames, function(methodName) {
3600
+ var func = source[methodName];
3601
+ object[methodName] = func;
3602
+ if (isFunc) {
3603
+ object.prototype[methodName] = function() {
3604
+ var chainAll = this.__chain__;
3605
+ if (chain || chainAll) {
3606
+ var result = object(this.__wrapped__),
3607
+ actions = result.__actions__ = copyArray(this.__actions__);
3608
+
3609
+ actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
3610
+ result.__chain__ = chainAll;
3611
+ return result;
3612
+ }
3613
+ return func.apply(object, arrayPush([this.value()], arguments));
3614
+ };
3615
+ }
3616
+ });
3617
+
3618
+ return object;
3619
+ }
3620
+
3621
+ /**
3622
+ * Reverts the `_` variable to its previous value and returns a reference to
3623
+ * the `lodash` function.
3624
+ *
3625
+ * @static
3626
+ * @since 0.1.0
3627
+ * @memberOf _
3628
+ * @category Util
3629
+ * @returns {Function} Returns the `lodash` function.
3630
+ * @example
3631
+ *
3632
+ * var lodash = _.noConflict();
3633
+ */
3634
+ function noConflict() {
3635
+ if (root._ === this) {
3636
+ root._ = oldDash;
3637
+ }
3638
+ return this;
3639
+ }
3640
+
3641
+ /**
3642
+ * This method returns `undefined`.
3643
+ *
3644
+ * @static
3645
+ * @memberOf _
3646
+ * @since 2.3.0
3647
+ * @category Util
3648
+ * @example
3649
+ *
3650
+ * _.times(2, _.noop);
3651
+ * // => [undefined, undefined]
3652
+ */
3653
+ function noop() {
3654
+ // No operation performed.
3655
+ }
3656
+
3657
+ /**
3658
+ * Generates a unique ID. If `prefix` is given, the ID is appended to it.
3659
+ *
3660
+ * @static
3661
+ * @since 0.1.0
3662
+ * @memberOf _
3663
+ * @category Util
3664
+ * @param {string} [prefix=''] The value to prefix the ID with.
3665
+ * @returns {string} Returns the unique ID.
3666
+ * @example
3667
+ *
3668
+ * _.uniqueId('contact_');
3669
+ * // => 'contact_104'
3670
+ *
3671
+ * _.uniqueId();
3672
+ * // => '105'
3673
+ */
3674
+ function uniqueId(prefix) {
3675
+ var id = ++idCounter;
3676
+ return toString(prefix) + id;
3677
+ }
3678
+
3679
+ /*------------------------------------------------------------------------*/
3680
+
3681
+ /**
3682
+ * Computes the maximum value of `array`. If `array` is empty or falsey,
3683
+ * `undefined` is returned.
3684
+ *
3685
+ * @static
3686
+ * @since 0.1.0
3687
+ * @memberOf _
3688
+ * @category Math
3689
+ * @param {Array} array The array to iterate over.
3690
+ * @returns {*} Returns the maximum value.
3691
+ * @example
3692
+ *
3693
+ * _.max([4, 2, 8, 6]);
3694
+ * // => 8
3695
+ *
3696
+ * _.max([]);
3697
+ * // => undefined
3698
+ */
3699
+ function max(array) {
3700
+ return (array && array.length)
3701
+ ? baseExtremum(array, identity, baseGt)
3702
+ : undefined;
3703
+ }
3704
+
3705
+ /**
3706
+ * Computes the minimum value of `array`. If `array` is empty or falsey,
3707
+ * `undefined` is returned.
3708
+ *
3709
+ * @static
3710
+ * @since 0.1.0
3711
+ * @memberOf _
3712
+ * @category Math
3713
+ * @param {Array} array The array to iterate over.
3714
+ * @returns {*} Returns the minimum value.
3715
+ * @example
3716
+ *
3717
+ * _.min([4, 2, 8, 6]);
3718
+ * // => 2
3719
+ *
3720
+ * _.min([]);
3721
+ * // => undefined
3722
+ */
3723
+ function min(array) {
3724
+ return (array && array.length)
3725
+ ? baseExtremum(array, identity, baseLt)
3726
+ : undefined;
3727
+ }
3728
+
3729
+ /*------------------------------------------------------------------------*/
3730
+
3731
+ // Add methods that return wrapped values in chain sequences.
3732
+ lodash.assignIn = assignIn;
3733
+ lodash.before = before;
3734
+ lodash.bind = bind;
3735
+ lodash.chain = chain;
3736
+ lodash.compact = compact;
3737
+ lodash.concat = concat;
3738
+ lodash.create = create;
3739
+ lodash.defaults = defaults;
3740
+ lodash.defer = defer;
3741
+ lodash.delay = delay;
3742
+ lodash.filter = filter;
3743
+ lodash.flatten = flatten;
3744
+ lodash.flattenDeep = flattenDeep;
3745
+ lodash.iteratee = iteratee;
3746
+ lodash.keys = keys;
3747
+ lodash.map = map;
3748
+ lodash.matches = matches;
3749
+ lodash.mixin = mixin;
3750
+ lodash.negate = negate;
3751
+ lodash.once = once;
3752
+ lodash.pick = pick;
3753
+ lodash.slice = slice;
3754
+ lodash.sortBy = sortBy;
3755
+ lodash.tap = tap;
3756
+ lodash.thru = thru;
3757
+ lodash.toArray = toArray;
3758
+ lodash.values = values;
3759
+
3760
+ // Add aliases.
3761
+ lodash.extend = assignIn;
3762
+
3763
+ // Add methods to `lodash.prototype`.
3764
+ mixin(lodash, lodash);
3765
+
3766
+ /*------------------------------------------------------------------------*/
3767
+
3768
+ // Add methods that return unwrapped values in chain sequences.
3769
+ lodash.clone = clone;
3770
+ lodash.escape = escape;
3771
+ lodash.every = every;
3772
+ lodash.find = find;
3773
+ lodash.forEach = forEach;
3774
+ lodash.has = has;
3775
+ lodash.head = head;
3776
+ lodash.identity = identity;
3777
+ lodash.indexOf = indexOf;
3778
+ lodash.isArguments = isArguments;
3779
+ lodash.isArray = isArray;
3780
+ lodash.isBoolean = isBoolean;
3781
+ lodash.isDate = isDate;
3782
+ lodash.isEmpty = isEmpty;
3783
+ lodash.isEqual = isEqual;
3784
+ lodash.isFinite = isFinite;
3785
+ lodash.isFunction = isFunction;
3786
+ lodash.isNaN = isNaN;
3787
+ lodash.isNull = isNull;
3788
+ lodash.isNumber = isNumber;
3789
+ lodash.isObject = isObject;
3790
+ lodash.isRegExp = isRegExp;
3791
+ lodash.isString = isString;
3792
+ lodash.isUndefined = isUndefined;
3793
+ lodash.last = last;
3794
+ lodash.max = max;
3795
+ lodash.min = min;
3796
+ lodash.noConflict = noConflict;
3797
+ lodash.noop = noop;
3798
+ lodash.reduce = reduce;
3799
+ lodash.result = result;
3800
+ lodash.size = size;
3801
+ lodash.some = some;
3802
+ lodash.uniqueId = uniqueId;
3803
+
3804
+ // Add aliases.
3805
+ lodash.each = forEach;
3806
+ lodash.first = head;
3807
+
3808
+ mixin(lodash, (function() {
3809
+ var source = {};
3810
+ baseForOwn(lodash, function(func, methodName) {
3811
+ if (!hasOwnProperty.call(lodash.prototype, methodName)) {
3812
+ source[methodName] = func;
3813
+ }
3814
+ });
3815
+ return source;
3816
+ }()), { 'chain': false });
3817
+
3818
+ /*------------------------------------------------------------------------*/
3819
+
3820
+ /**
3821
+ * The semantic version number.
3822
+ *
3823
+ * @static
3824
+ * @memberOf _
3825
+ * @type {string}
3826
+ */
3827
+ lodash.VERSION = VERSION;
3828
+
3829
+ // Add `Array` methods to `lodash.prototype`.
3830
+ baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
3831
+ var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName],
3832
+ chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
3833
+ retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName);
3834
+
3835
+ lodash.prototype[methodName] = function() {
3836
+ var args = arguments;
3837
+ if (retUnwrapped && !this.__chain__) {
3838
+ var value = this.value();
3839
+ return func.apply(isArray(value) ? value : [], args);
3840
+ }
3841
+ return this[chainName](function(value) {
3842
+ return func.apply(isArray(value) ? value : [], args);
3843
+ });
3844
+ };
3845
+ });
3846
+
3847
+ // Add chain sequence methods to the `lodash` wrapper.
3848
+ lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
3849
+
3850
+ /*--------------------------------------------------------------------------*/
3851
+
3852
+ // Some AMD build optimizers, like r.js, check for condition patterns like:
3853
+ if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
3854
+ // Expose Lodash on the global object to prevent errors when Lodash is
3855
+ // loaded by a script tag in the presence of an AMD loader.
3856
+ // See http://requirejs.org/docs/errors.html#mismatch for more details.
3857
+ // Use `_.noConflict` to remove Lodash from the global object.
3858
+ root._ = lodash;
3859
+
3860
+ // Define as an anonymous module so, through path mapping, it can be
3861
+ // referenced as the "underscore" module.
3862
+ define(function() {
3863
+ return lodash;
3864
+ });
3865
+ }
3866
+ // Check for `exports` after `define` in case a build optimizer adds it.
3867
+ else if (freeModule) {
3868
+ // Export for Node.js.
3869
+ (freeModule.exports = lodash)._ = lodash;
3870
+ // Export for CommonJS support.
3871
+ freeExports._ = lodash;
3872
+ }
3873
+ else {
3874
+ // Export to the global object.
3875
+ root._ = lodash;
3876
+ }
3877
+ }.call(this));