@visactor/vutils 1.0.24 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/README.zh-CN.md +12 -0
  2. package/REGRESSION.md +36 -0
  3. package/cjs/angle.d.ts +61 -0
  4. package/cjs/angle.js +73 -7
  5. package/cjs/angle.js.map +1 -1
  6. package/cjs/color/Color.d.ts +3 -0
  7. package/cjs/color/Color.js +64 -10
  8. package/cjs/color/Color.js.map +1 -1
  9. package/cjs/color/hexToRgb.d.ts +5 -0
  10. package/cjs/color/hexToRgb.js +5 -0
  11. package/cjs/color/hexToRgb.js.map +1 -1
  12. package/cjs/color/rgbToHsl.js +5 -1
  13. package/cjs/color/rgbToHsl.js.map +1 -1
  14. package/cjs/common/array.d.ts +43 -0
  15. package/cjs/common/array.js +44 -0
  16. package/cjs/common/array.js.map +1 -1
  17. package/cjs/common/bisect.d.ts +21 -0
  18. package/cjs/common/bisect.js +29 -0
  19. package/cjs/common/bisect.js.map +1 -1
  20. package/cjs/common/bootstrap.d.ts +5 -0
  21. package/cjs/common/bootstrap.js +22 -0
  22. package/cjs/common/bootstrap.js.map +1 -0
  23. package/cjs/common/clone.js +6 -0
  24. package/cjs/common/clone.js.map +1 -1
  25. package/cjs/common/cloneDeep.js +4 -1
  26. package/cjs/common/cloneDeep.js.map +1 -1
  27. package/cjs/common/correlation.d.ts +3 -0
  28. package/cjs/common/correlation.js +83 -0
  29. package/cjs/common/correlation.js.map +1 -0
  30. package/cjs/common/debounce.js +22 -4
  31. package/cjs/common/debounce.js.map +1 -1
  32. package/cjs/common/deviation.js +1 -2
  33. package/cjs/common/ecdf.d.ts +8 -0
  34. package/cjs/common/ecdf.js +11 -2
  35. package/cjs/common/ecdf.js.map +1 -1
  36. package/cjs/common/extent.d.ts +4 -0
  37. package/cjs/common/extent.js +4 -2
  38. package/cjs/common/extent.js.map +1 -1
  39. package/cjs/common/field.d.ts +6 -0
  40. package/cjs/common/field.js +3 -0
  41. package/cjs/common/field.js.map +1 -1
  42. package/cjs/common/has.d.ts +17 -0
  43. package/cjs/common/has.js +18 -1
  44. package/cjs/common/has.js.map +1 -1
  45. package/cjs/common/index.d.ts +5 -0
  46. package/cjs/common/index.js +34 -6
  47. package/cjs/common/index.js.map +1 -1
  48. package/cjs/common/interpolate.js +16 -3
  49. package/cjs/common/interpolate.js.map +1 -1
  50. package/cjs/common/isBase64.d.ts +6 -0
  51. package/cjs/common/isBase64.js +6 -0
  52. package/cjs/common/isBase64.js.map +1 -1
  53. package/cjs/common/isBoolean.d.ts +13 -0
  54. package/cjs/common/isBoolean.js +13 -1
  55. package/cjs/common/isBoolean.js.map +1 -1
  56. package/cjs/common/isEmpty.js +11 -1
  57. package/cjs/common/isEmpty.js.map +1 -1
  58. package/cjs/common/isEqual.js +19 -7
  59. package/cjs/common/isEqual.js.map +1 -1
  60. package/cjs/common/isFunction.d.ts +25 -0
  61. package/cjs/common/isFunction.js +27 -2
  62. package/cjs/common/isFunction.js.map +1 -1
  63. package/cjs/common/isNull.js +2 -1
  64. package/cjs/common/isNumber.d.ts +23 -0
  65. package/cjs/common/isNumber.js +23 -1
  66. package/cjs/common/isNumber.js.map +1 -1
  67. package/cjs/common/isNumeric.d.ts +25 -0
  68. package/cjs/common/isNumeric.js +25 -0
  69. package/cjs/common/isNumeric.js.map +1 -1
  70. package/cjs/common/isObject.d.ts +21 -0
  71. package/cjs/common/isObject.js +22 -0
  72. package/cjs/common/isObject.js.map +1 -1
  73. package/cjs/common/isObjectLike.d.ts +20 -0
  74. package/cjs/common/isObjectLike.js +21 -0
  75. package/cjs/common/isObjectLike.js.map +1 -1
  76. package/cjs/common/isPlainObject.d.ts +25 -0
  77. package/cjs/common/isPlainObject.js.map +1 -1
  78. package/cjs/common/isPrototype.js +1 -1
  79. package/cjs/common/isRegExp.js +1 -1
  80. package/cjs/common/isShallowEqual.js +1 -0
  81. package/cjs/common/isShallowEqual.js.map +1 -1
  82. package/cjs/common/isString.d.ts +13 -0
  83. package/cjs/common/isString.js +13 -1
  84. package/cjs/common/isString.js.map +1 -1
  85. package/cjs/common/isType.d.ts +6 -0
  86. package/cjs/common/isType.js +6 -0
  87. package/cjs/common/isType.js.map +1 -1
  88. package/cjs/common/isValidNumber.js.map +1 -1
  89. package/cjs/common/isValidUrl.js.map +1 -1
  90. package/cjs/common/kde.d.ts +28 -0
  91. package/cjs/common/kde.js +29 -5
  92. package/cjs/common/kde.js.map +1 -1
  93. package/cjs/common/mean.d.ts +2 -0
  94. package/cjs/common/mean.js +25 -0
  95. package/cjs/common/mean.js.map +1 -0
  96. package/cjs/common/merge.js +20 -4
  97. package/cjs/common/merge.js.map +1 -1
  98. package/cjs/common/mixin.js +14 -3
  99. package/cjs/common/mixin.js.map +1 -1
  100. package/cjs/common/normalQuantile.d.ts +5 -0
  101. package/cjs/common/normalQuantile.js +21 -0
  102. package/cjs/common/normalQuantile.js.map +1 -0
  103. package/cjs/common/number.d.ts +24 -0
  104. package/cjs/common/number.js +24 -1
  105. package/cjs/common/number.js.map +1 -1
  106. package/cjs/common/pad.d.ts +21 -0
  107. package/cjs/common/pad.js +21 -1
  108. package/cjs/common/pad.js.map +1 -1
  109. package/cjs/common/random.d.ts +3 -0
  110. package/cjs/common/random.js +13 -0
  111. package/cjs/common/random.js.map +1 -1
  112. package/cjs/common/regression-bootstrap.d.ts +14 -0
  113. package/cjs/common/regression-bootstrap.js +37 -0
  114. package/cjs/common/regression-bootstrap.js.map +1 -0
  115. package/cjs/common/regression-linear.d.ts +5 -0
  116. package/cjs/common/regression-linear.js +28 -39
  117. package/cjs/common/regression-linear.js.map +1 -1
  118. package/cjs/common/regression-logistic.d.ts +6 -0
  119. package/cjs/common/regression-logistic.js +25 -14
  120. package/cjs/common/regression-logistic.js.map +1 -1
  121. package/cjs/common/regression-lowess.d.ts +11 -1
  122. package/cjs/common/regression-lowess.js +125 -118
  123. package/cjs/common/regression-lowess.js.map +1 -1
  124. package/cjs/common/regression-polynomial.d.ts +1 -0
  125. package/cjs/common/regression-polynomial.js +24 -94
  126. package/cjs/common/regression-polynomial.js.map +1 -1
  127. package/cjs/common/regression-solver.d.ts +26 -0
  128. package/cjs/common/regression-solver.js +180 -0
  129. package/cjs/common/regression-solver.js.map +1 -0
  130. package/cjs/common/regression-utils.d.ts +13 -1
  131. package/cjs/common/regression-utils.js +27 -12
  132. package/cjs/common/regression-utils.js.map +1 -1
  133. package/cjs/common/throttle.js +3 -0
  134. package/cjs/common/throttle.js.map +1 -1
  135. package/cjs/common/toDate.js +22 -3
  136. package/cjs/common/toDate.js.map +1 -1
  137. package/cjs/common/uuid.d.ts +7 -0
  138. package/cjs/common/uuid.js +15 -1
  139. package/cjs/common/uuid.js.map +1 -1
  140. package/cjs/data-structure/bounds.d.ts +101 -0
  141. package/cjs/data-structure/bounds.js +74 -7
  142. package/cjs/data-structure/bounds.js.map +1 -1
  143. package/cjs/data-structure/hashTable.d.ts +4 -0
  144. package/cjs/data-structure/hashTable.js +11 -2
  145. package/cjs/data-structure/hashTable.js.map +1 -1
  146. package/cjs/data-structure/index.js +6 -2
  147. package/cjs/data-structure/index.js.map +1 -1
  148. package/cjs/data-structure/matrix.d.ts +91 -0
  149. package/cjs/data-structure/matrix.js +52 -4
  150. package/cjs/data-structure/matrix.js.map +1 -1
  151. package/cjs/data-structure/point.d.ts +3 -0
  152. package/cjs/data-structure/point.js +5 -1
  153. package/cjs/data-structure/point.js.map +1 -1
  154. package/cjs/dom.d.ts +36 -0
  155. package/cjs/dom.js +43 -1
  156. package/cjs/dom.js.map +1 -1
  157. package/cjs/fmin/blas1.js +10 -1
  158. package/cjs/fmin/blas1.js.map +1 -1
  159. package/cjs/fmin/conjugate-gradient.js +18 -3
  160. package/cjs/fmin/conjugate-gradient.js.map +1 -1
  161. package/cjs/fmin/linesearch.js +15 -1
  162. package/cjs/fmin/linesearch.js.map +1 -1
  163. package/cjs/fmin/nelder-mead.d.ts +1 -0
  164. package/cjs/fmin/nelder-mead.js +30 -10
  165. package/cjs/fmin/nelder-mead.js.map +1 -1
  166. package/cjs/format/number/formatDecimal.js +9 -1
  167. package/cjs/format/number/formatDecimal.js.map +1 -1
  168. package/cjs/format/number/formatGroup.js +7 -0
  169. package/cjs/format/number/formatGroup.js.map +1 -1
  170. package/cjs/format/number/formatPrefixAuto.js +8 -0
  171. package/cjs/format/number/formatPrefixAuto.js.map +1 -1
  172. package/cjs/format/number/formatRounded.js +7 -0
  173. package/cjs/format/number/formatRounded.js.map +1 -1
  174. package/cjs/format/number/formatTrim.js +7 -0
  175. package/cjs/format/number/formatTrim.js.map +1 -1
  176. package/cjs/format/number/number.js +39 -9
  177. package/cjs/format/number/number.js.map +1 -1
  178. package/cjs/format/time.js +23 -6
  179. package/cjs/format/time.js.map +1 -1
  180. package/cjs/geo/circle-intersection.d.ts +12 -0
  181. package/cjs/geo/circle-intersection.js +54 -9
  182. package/cjs/geo/circle-intersection.js.map +1 -1
  183. package/cjs/geo/constant.js +8 -1
  184. package/cjs/geo/constant.js.map +1 -1
  185. package/cjs/geo/invariant.d.ts +22 -0
  186. package/cjs/geo/invariant.js +24 -1
  187. package/cjs/geo/invariant.js.map +1 -1
  188. package/cjs/graphics/algorithm/aabb.js +7 -3
  189. package/cjs/graphics/algorithm/aabb.js.map +1 -1
  190. package/cjs/graphics/algorithm/intersect.d.ts +48 -0
  191. package/cjs/graphics/algorithm/intersect.js +75 -7
  192. package/cjs/graphics/algorithm/intersect.js.map +1 -1
  193. package/cjs/graphics/bounds-util.js +4 -2
  194. package/cjs/graphics/bounds-util.js.map +1 -1
  195. package/cjs/graphics/graph-util.js +4 -0
  196. package/cjs/graphics/graph-util.js.map +1 -1
  197. package/cjs/graphics/index.js +7 -4
  198. package/cjs/graphics/index.js.map +1 -1
  199. package/cjs/graphics/polygon.d.ts +12 -0
  200. package/cjs/graphics/polygon.js +28 -5
  201. package/cjs/graphics/polygon.js.map +1 -1
  202. package/cjs/graphics/text/measure/interface.d.ts +12 -0
  203. package/cjs/graphics/text/measure/textMeasure.d.ts +23 -0
  204. package/cjs/graphics/text/measure/textMeasure.js +50 -22
  205. package/cjs/graphics/text/measure/textMeasure.js.map +1 -1
  206. package/cjs/graphics/text/measure/util.js +1 -0
  207. package/cjs/graphics/text/measure/util.js.map +1 -1
  208. package/cjs/graphics/text/stringWidth.js +7 -3
  209. package/cjs/graphics/text/stringWidth.js.map +1 -1
  210. package/cjs/index.d.ts +6 -0
  211. package/cjs/index.js +19 -4
  212. package/cjs/index.js.map +1 -1
  213. package/cjs/logger.js +12 -2
  214. package/cjs/logger.js.map +1 -1
  215. package/cjs/lru.js +14 -6
  216. package/cjs/lru.js.map +1 -1
  217. package/cjs/math.d.ts +9 -0
  218. package/cjs/math.js +10 -0
  219. package/cjs/math.js.map +1 -1
  220. package/cjs/padding.d.ts +5 -0
  221. package/cjs/padding.js +5 -0
  222. package/cjs/padding.js.map +1 -1
  223. package/cjs/time/formatUtils.d.ts +6 -0
  224. package/cjs/time/formatUtils.js +7 -0
  225. package/cjs/time/formatUtils.js.map +1 -1
  226. package/dist/index.js +2035 -411
  227. package/dist/index.min.js +128 -1
  228. package/es/angle.d.ts +61 -0
  229. package/es/angle.js +66 -10
  230. package/es/angle.js.map +1 -1
  231. package/es/color/Color.d.ts +3 -0
  232. package/es/color/Color.js +64 -9
  233. package/es/color/Color.js.map +1 -1
  234. package/es/color/hexToRgb.d.ts +5 -0
  235. package/es/color/hexToRgb.js +5 -0
  236. package/es/color/hexToRgb.js.map +1 -1
  237. package/es/color/rgbToHsl.js +5 -1
  238. package/es/color/rgbToHsl.js.map +1 -1
  239. package/es/common/array.d.ts +43 -0
  240. package/es/common/array.js +44 -8
  241. package/es/common/array.js.map +1 -1
  242. package/es/common/bisect.d.ts +21 -0
  243. package/es/common/bisect.js +29 -4
  244. package/es/common/bisect.js.map +1 -1
  245. package/es/common/bootstrap.d.ts +5 -0
  246. package/es/common/bootstrap.js +14 -0
  247. package/es/common/bootstrap.js.map +1 -0
  248. package/es/common/clone.js +6 -0
  249. package/es/common/clone.js.map +1 -1
  250. package/es/common/cloneDeep.js +4 -1
  251. package/es/common/cloneDeep.js.map +1 -1
  252. package/es/common/correlation.d.ts +3 -0
  253. package/es/common/correlation.js +77 -0
  254. package/es/common/correlation.js.map +1 -0
  255. package/es/common/debounce.js +22 -4
  256. package/es/common/debounce.js.map +1 -1
  257. package/es/common/deviation.js +1 -2
  258. package/es/common/ecdf.d.ts +8 -0
  259. package/es/common/ecdf.js +11 -1
  260. package/es/common/ecdf.js.map +1 -1
  261. package/es/common/extent.d.ts +4 -0
  262. package/es/common/extent.js +8 -3
  263. package/es/common/extent.js.map +1 -1
  264. package/es/common/field.d.ts +6 -0
  265. package/es/common/field.js +3 -1
  266. package/es/common/field.js.map +1 -1
  267. package/es/common/has.d.ts +17 -0
  268. package/es/common/has.js +18 -1
  269. package/es/common/has.js.map +1 -1
  270. package/es/common/index.d.ts +5 -0
  271. package/es/common/index.js +24 -0
  272. package/es/common/index.js.map +1 -1
  273. package/es/common/interpolate.js +16 -3
  274. package/es/common/interpolate.js.map +1 -1
  275. package/es/common/isBase64.d.ts +6 -0
  276. package/es/common/isBase64.js +6 -0
  277. package/es/common/isBase64.js.map +1 -1
  278. package/es/common/isBoolean.d.ts +13 -0
  279. package/es/common/isBoolean.js +13 -1
  280. package/es/common/isBoolean.js.map +1 -1
  281. package/es/common/isEmpty.js +11 -1
  282. package/es/common/isEmpty.js.map +1 -1
  283. package/es/common/isEqual.js +19 -7
  284. package/es/common/isEqual.js.map +1 -1
  285. package/es/common/isFunction.d.ts +25 -0
  286. package/es/common/isFunction.js +27 -2
  287. package/es/common/isFunction.js.map +1 -1
  288. package/es/common/isNull.js +2 -1
  289. package/es/common/isNumber.d.ts +23 -0
  290. package/es/common/isNumber.js +23 -1
  291. package/es/common/isNumber.js.map +1 -1
  292. package/es/common/isNumeric.d.ts +25 -0
  293. package/es/common/isNumeric.js +25 -0
  294. package/es/common/isNumeric.js.map +1 -1
  295. package/es/common/isObject.d.ts +21 -0
  296. package/es/common/isObject.js +22 -0
  297. package/es/common/isObject.js.map +1 -1
  298. package/es/common/isObjectLike.d.ts +20 -0
  299. package/es/common/isObjectLike.js +21 -0
  300. package/es/common/isObjectLike.js.map +1 -1
  301. package/es/common/isPlainObject.d.ts +25 -0
  302. package/es/common/isPlainObject.js +26 -0
  303. package/es/common/isPlainObject.js.map +1 -1
  304. package/es/common/isPrototype.js +1 -1
  305. package/es/common/isRegExp.js +1 -1
  306. package/es/common/isShallowEqual.js +1 -0
  307. package/es/common/isShallowEqual.js.map +1 -1
  308. package/es/common/isString.d.ts +13 -0
  309. package/es/common/isString.js +13 -1
  310. package/es/common/isString.js.map +1 -1
  311. package/es/common/isType.d.ts +6 -0
  312. package/es/common/isType.js +6 -0
  313. package/es/common/isType.js.map +1 -1
  314. package/es/common/isValidNumber.js.map +1 -1
  315. package/es/common/isValidUrl.js.map +1 -1
  316. package/es/common/kde.d.ts +28 -0
  317. package/es/common/kde.js +29 -7
  318. package/es/common/kde.js.map +1 -1
  319. package/es/common/mean.d.ts +2 -0
  320. package/es/common/mean.js +19 -0
  321. package/es/common/mean.js.map +1 -0
  322. package/es/common/merge.js +22 -5
  323. package/es/common/merge.js.map +1 -1
  324. package/es/common/mixin.js +14 -3
  325. package/es/common/mixin.js.map +1 -1
  326. package/es/common/normalQuantile.d.ts +5 -0
  327. package/es/common/normalQuantile.js +15 -0
  328. package/es/common/normalQuantile.js.map +1 -0
  329. package/es/common/number.d.ts +24 -0
  330. package/es/common/number.js +24 -2
  331. package/es/common/number.js.map +1 -1
  332. package/es/common/pad.d.ts +21 -0
  333. package/es/common/pad.js +21 -1
  334. package/es/common/pad.js.map +1 -1
  335. package/es/common/random.d.ts +3 -0
  336. package/es/common/random.js +13 -1
  337. package/es/common/random.js.map +1 -1
  338. package/es/common/regression-bootstrap.d.ts +14 -0
  339. package/es/common/regression-bootstrap.js +31 -0
  340. package/es/common/regression-bootstrap.js.map +1 -0
  341. package/es/common/regression-linear.d.ts +5 -0
  342. package/es/common/regression-linear.js +25 -39
  343. package/es/common/regression-linear.js.map +1 -1
  344. package/es/common/regression-logistic.d.ts +6 -0
  345. package/es/common/regression-logistic.js +24 -16
  346. package/es/common/regression-logistic.js.map +1 -1
  347. package/es/common/regression-lowess.d.ts +11 -1
  348. package/es/common/regression-lowess.js +120 -118
  349. package/es/common/regression-lowess.js.map +1 -1
  350. package/es/common/regression-polynomial.d.ts +1 -0
  351. package/es/common/regression-polynomial.js +21 -89
  352. package/es/common/regression-polynomial.js.map +1 -1
  353. package/es/common/regression-solver.d.ts +26 -0
  354. package/es/common/regression-solver.js +168 -0
  355. package/es/common/regression-solver.js.map +1 -0
  356. package/es/common/regression-utils.d.ts +13 -1
  357. package/es/common/regression-utils.js +18 -9
  358. package/es/common/regression-utils.js.map +1 -1
  359. package/es/common/throttle.js +3 -0
  360. package/es/common/throttle.js.map +1 -1
  361. package/es/common/toDate.js +23 -3
  362. package/es/common/toDate.js.map +1 -1
  363. package/es/common/uuid.d.ts +7 -0
  364. package/es/common/uuid.js +15 -1
  365. package/es/common/uuid.js.map +1 -1
  366. package/es/data-structure/bounds.d.ts +101 -0
  367. package/es/data-structure/bounds.js +74 -8
  368. package/es/data-structure/bounds.js.map +1 -1
  369. package/es/data-structure/hashTable.d.ts +4 -0
  370. package/es/data-structure/hashTable.js +11 -2
  371. package/es/data-structure/hashTable.js.map +1 -1
  372. package/es/data-structure/index.js +2 -0
  373. package/es/data-structure/index.js.map +1 -1
  374. package/es/data-structure/matrix.d.ts +91 -0
  375. package/es/data-structure/matrix.js +52 -5
  376. package/es/data-structure/matrix.js.map +1 -1
  377. package/es/data-structure/point.d.ts +3 -0
  378. package/es/data-structure/point.js +5 -1
  379. package/es/data-structure/point.js.map +1 -1
  380. package/es/dom.d.ts +36 -0
  381. package/es/dom.js +43 -8
  382. package/es/dom.js.map +1 -1
  383. package/es/fmin/blas1.js +10 -0
  384. package/es/fmin/blas1.js.map +1 -1
  385. package/es/fmin/conjugate-gradient.js +18 -2
  386. package/es/fmin/conjugate-gradient.js.map +1 -1
  387. package/es/fmin/linesearch.js +15 -0
  388. package/es/fmin/linesearch.js.map +1 -1
  389. package/es/fmin/nelder-mead.d.ts +1 -0
  390. package/es/fmin/nelder-mead.js +29 -9
  391. package/es/fmin/nelder-mead.js.map +1 -1
  392. package/es/format/number/formatDecimal.js +9 -1
  393. package/es/format/number/formatDecimal.js.map +1 -1
  394. package/es/format/number/formatGroup.js +7 -0
  395. package/es/format/number/formatGroup.js.map +1 -1
  396. package/es/format/number/formatPrefixAuto.js +8 -0
  397. package/es/format/number/formatPrefixAuto.js.map +1 -1
  398. package/es/format/number/formatRounded.js +7 -0
  399. package/es/format/number/formatRounded.js.map +1 -1
  400. package/es/format/number/formatTrim.js +7 -0
  401. package/es/format/number/formatTrim.js.map +1 -1
  402. package/es/format/number/number.js +40 -8
  403. package/es/format/number/number.js.map +1 -1
  404. package/es/format/time.js +23 -5
  405. package/es/format/time.js.map +1 -1
  406. package/es/geo/circle-intersection.d.ts +12 -0
  407. package/es/geo/circle-intersection.js +54 -14
  408. package/es/geo/circle-intersection.js.map +1 -1
  409. package/es/geo/constant.js +8 -0
  410. package/es/geo/constant.js.map +1 -1
  411. package/es/geo/invariant.d.ts +22 -0
  412. package/es/geo/invariant.js +24 -0
  413. package/es/geo/invariant.js.map +1 -1
  414. package/es/graphics/algorithm/aabb.js +7 -3
  415. package/es/graphics/algorithm/aabb.js.map +1 -1
  416. package/es/graphics/algorithm/intersect.d.ts +48 -0
  417. package/es/graphics/algorithm/intersect.js +75 -12
  418. package/es/graphics/algorithm/intersect.js.map +1 -1
  419. package/es/graphics/bounds-util.js +4 -2
  420. package/es/graphics/bounds-util.js.map +1 -1
  421. package/es/graphics/graph-util.js +4 -0
  422. package/es/graphics/graph-util.js.map +1 -1
  423. package/es/graphics/index.js +2 -0
  424. package/es/graphics/index.js.map +1 -1
  425. package/es/graphics/polygon.d.ts +12 -0
  426. package/es/graphics/polygon.js +28 -6
  427. package/es/graphics/polygon.js.map +1 -1
  428. package/es/graphics/text/measure/interface.d.ts +12 -0
  429. package/es/graphics/text/measure/textMeasure.d.ts +23 -0
  430. package/es/graphics/text/measure/textMeasure.js +46 -21
  431. package/es/graphics/text/measure/textMeasure.js.map +1 -1
  432. package/es/graphics/text/measure/util.js +1 -0
  433. package/es/graphics/text/measure/util.js.map +1 -1
  434. package/es/graphics/text/stringWidth.js +7 -3
  435. package/es/graphics/text/stringWidth.js.map +1 -1
  436. package/es/index.d.ts +6 -0
  437. package/es/index.js +15 -1
  438. package/es/index.js.map +1 -1
  439. package/es/logger.js +12 -1
  440. package/es/logger.js.map +1 -1
  441. package/es/lru.js +14 -6
  442. package/es/lru.js.map +1 -1
  443. package/es/math.d.ts +9 -0
  444. package/es/math.js +10 -1
  445. package/es/math.js.map +1 -1
  446. package/es/padding.d.ts +5 -0
  447. package/es/padding.js +5 -1
  448. package/es/padding.js.map +1 -1
  449. package/es/time/formatUtils.d.ts +6 -0
  450. package/es/time/formatUtils.js +7 -1
  451. package/es/time/formatUtils.js.map +1 -1
  452. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/cloneDeep.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAChC,4DAAoC;AACpC,sDAA8B;AAC9B,0DAAkC;AAClC,0DAAkC;AAClC,wDAAgC;AAEhC,SAAwB,SAAS,CAAC,KAAU,EAAE,UAAoC,EAAE,WAAsB;IACxG,IAAI,MAAM,CAAC;IACX,IAAI,CAAC,IAAA,iBAAO,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;QACrF,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,EAAE;QACT,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;KAC5B;SAEI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAClC,MAAM,GAAG,EAAE,CAAC;KACb;SAEI,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,KAAK,CAAC,EAAE;QAC/D,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM,IAAI,IAAA,gBAAM,EAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;KAC3B;SAEI;QACH,MAAM,GAAG,SAAS,CAAC;KACpB;IAKD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,MAAM,EAAE;QACV,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACxB;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aAC5D;SACF;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA9CD,4BA8CC","file":"cloneDeep.js","sourcesContent":["import isArray from './isArray';\nimport isBoolean from './isBoolean';\nimport isDate from './isDate';\nimport isNumber from './isNumber';\nimport isString from './isString';\nimport isValid from './isValid';\n\nexport default function cloneDeep(value: any, ignoreWhen?: (value: any) => boolean, excludeKeys?: string[]): any {\n let result;\n if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n\n if (excludeKeys && excludeKeys.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);\n }\n }\n }\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/cloneDeep.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAChC,4DAAoC;AACpC,sDAA8B;AAC9B,0DAAkC;AAClC,0DAAkC;AAClC,wDAAgC;AAEhC,SAAwB,SAAS,CAAC,KAAU,EAAE,UAAoC,EAAE,WAAsB;IACxG,IAAI,MAAM,CAAC;IACX,IAAI,CAAC,IAAA,iBAAO,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;QACrF,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,eAAe;IACf,IAAI,KAAK,EAAE;QACT,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;KAC5B;IACD,iDAAiD;SAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAClC,MAAM,GAAG,EAAE,CAAC;KACb;IACD,0CAA0C;SACrC,IAAI,IAAA,mBAAS,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,KAAK,CAAC,EAAE;QAC/D,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM,IAAI,IAAA,gBAAM,EAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;KAC3B;IACD,2EAA2E;SACtE;QACH,MAAM,GAAG,SAAS,CAAC;KACpB;IAED,mCAAmC;IAEnC,mBAAmB;IACnB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,MAAM,EAAE;QACV,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACxB;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;aAC5D;SACF;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA9CD,4BA8CC","file":"cloneDeep.js","sourcesContent":["import isArray from './isArray';\nimport isBoolean from './isBoolean';\nimport isDate from './isDate';\nimport isNumber from './isNumber';\nimport isString from './isString';\nimport isValid from './isValid';\n\nexport default function cloneDeep(value: any, ignoreWhen?: (value: any) => boolean, excludeKeys?: string[]): any {\n let result;\n if (!isValid(value) || typeof value !== 'object' || (ignoreWhen && ignoreWhen(value))) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n\n if (excludeKeys && excludeKeys.includes(key.toString())) {\n result[key] = subValue;\n } else {\n result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);\n }\n }\n }\n return result;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export type CorrelationMethod = 'pearson' | 'spearman' | 'kendall';
2
+ /** 等长有限样本的相关系数;常量/不足两条返回 undefined,不修改数组。 */
3
+ export declare function correlation(x: readonly number[], y: readonly number[], method?: CorrelationMethod): number | undefined;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ function pearson(x, y) {
4
+ let sx = 0, sy = 0;
5
+ for (let i = 0; i < x.length; i++) sx = Math.max(sx, Math.abs(x[i])), sy = Math.max(sy, Math.abs(y[i]));
6
+ if (!sx || !sy) return;
7
+ let mx = 0, my = 0, cx = 0, cy = 0;
8
+ for (let i = 0; i < x.length; i++) {
9
+ const vx = x[i] / sx - cx, vy = y[i] / sy - cy, tx = mx + vx, ty = my + vy;
10
+ cx = tx - mx - vx, cy = ty - my - vy, mx = tx, my = ty;
11
+ }
12
+ mx /= x.length, my /= x.length;
13
+ let xx = 0, yy = 0, xy = 0;
14
+ for (let i = 0; i < x.length; i++) {
15
+ const dx = x[i] / sx - mx, dy = y[i] / sy - my;
16
+ xx += dx * dx, yy += dy * dy, xy += dx * dy;
17
+ }
18
+ if (0 === xx || 0 === yy) return;
19
+ const result = xy / Math.sqrt(xx * yy);
20
+ // 仅修正浮点舍入越过理论端点的几个 ulp。
21
+ return Math.abs(result) > 1 && Math.abs(result) <= 1 + 8 * Number.EPSILON ? Math.sign(result) : result;
22
+ }
23
+
24
+ function ranks(values) {
25
+ const order = values.map(((value, index) => ({
26
+ value: value,
27
+ index: index
28
+ }))).sort(((a, b) => a.value - b.value)), result = new Array(values.length);
29
+ for (let start = 0; start < order.length; ) {
30
+ let end = start + 1;
31
+ for (;end < order.length && order[end].value === order[start].value; ) end++;
32
+ const rank = (start + end + 1) / 2;
33
+ for (let i = start; i < end; i++) result[order[i].index] = rank;
34
+ start = end;
35
+ }
36
+ return result;
37
+ }
38
+
39
+ function kendall(x, y) {
40
+ const pairs = x.map(((value, index) => ({
41
+ x: value,
42
+ y: y[index]
43
+ }))).sort(((a, b) => a.x - b.x || a.y - b.y)), sortedY = [ ...y ].sort(((a, b) => a - b)), yRanks = new Map;
44
+ let tiesY = 0;
45
+ for (let start = 0; start < sortedY.length; ) {
46
+ let end = start + 1;
47
+ for (;end < sortedY.length && sortedY[end] === sortedY[start]; ) end++;
48
+ tiesY += (end - start) * (end - start - 1) / 2, yRanks.set(sortedY[start], yRanks.size + 1),
49
+ start = end;
50
+ }
51
+ const tree = new Float64Array(yRanks.size + 1);
52
+ let tiesX = 0, tiesBoth = 0, discordant = 0;
53
+ for (let start = 0; start < pairs.length; ) {
54
+ let end = start + 1;
55
+ for (;end < pairs.length && pairs[end].x === pairs[start].x; ) end++;
56
+ tiesX += (end - start) * (end - start - 1) / 2;
57
+ for (let i = start; i < end; ) {
58
+ let j = i + 1;
59
+ for (;j < end && pairs[j].y === pairs[i].y; ) j++;
60
+ tiesBoth += (j - i) * (j - i - 1) / 2, i = j;
61
+ }
62
+ // 同 x 组先查询再更新,避免将 x ties 算成逆序。
63
+ for (let i = start; i < end; i++) {
64
+ let lessOrEqual = 0;
65
+ for (let rank = yRanks.get(pairs[i].y); rank > 0; rank -= rank & -rank) lessOrEqual += tree[rank];
66
+ discordant += start - lessOrEqual;
67
+ }
68
+ for (let i = start; i < end; i++) for (let rank = yRanks.get(pairs[i].y); rank < tree.length; rank += rank & -rank) tree[rank]++;
69
+ start = end;
70
+ }
71
+ const total = x.length * (x.length - 1) / 2;
72
+ if (total !== tiesX && total !== tiesY) return (total - tiesX - tiesY + tiesBoth - 2 * discordant) / Math.sqrt((total - tiesX) * (total - tiesY));
73
+ }
74
+
75
+ /** 等长有限样本的相关系数;常量/不足两条返回 undefined,不修改数组。 */ function correlation(x, y, method = "pearson") {
76
+ if (x.length !== y.length || ![ "pearson", "spearman", "kendall" ].includes(method) || x.some((value => !Number.isFinite(value))) || y.some((value => !Number.isFinite(value)))) throw new RangeError("correlation requires equal finite arrays and a supported method");
77
+ if (!(x.length < 2)) return "kendall" === method ? kendall(x, y) : "spearman" === method ? pearson(ranks(x), ranks(y)) : pearson(x, y);
78
+ }
79
+
80
+ Object.defineProperty(exports, "__esModule", {
81
+ value: !0
82
+ }), exports.correlation = void 0, exports.correlation = correlation;
83
+ //# sourceMappingURL=correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/correlation.ts"],"names":[],"mappings":"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","file":"correlation.js","sourcesContent":["export type CorrelationMethod = 'pearson' | 'spearman' | 'kendall';\n\nfunction pearson(x: readonly number[], y: readonly number[]): number | undefined {\n let sx = 0;\n let sy = 0;\n for (let i = 0; i < x.length; i++) {\n sx = Math.max(sx, Math.abs(x[i]));\n sy = Math.max(sy, Math.abs(y[i]));\n }\n if (!sx || !sy) {\n return undefined;\n }\n let mx = 0;\n let my = 0;\n let cx = 0;\n let cy = 0;\n for (let i = 0; i < x.length; i++) {\n const vx = x[i] / sx - cx;\n const vy = y[i] / sy - cy;\n const tx = mx + vx;\n const ty = my + vy;\n cx = tx - mx - vx;\n cy = ty - my - vy;\n mx = tx;\n my = ty;\n }\n mx /= x.length;\n my /= x.length;\n let xx = 0;\n let yy = 0;\n let xy = 0;\n for (let i = 0; i < x.length; i++) {\n const dx = x[i] / sx - mx;\n const dy = y[i] / sy - my;\n xx += dx * dx;\n yy += dy * dy;\n xy += dx * dy;\n }\n if (xx === 0 || yy === 0) {\n return undefined;\n }\n const result = xy / Math.sqrt(xx * yy);\n // 仅修正浮点舍入越过理论端点的几个 ulp。\n if (Math.abs(result) > 1 && Math.abs(result) <= 1 + 8 * Number.EPSILON) {\n return Math.sign(result);\n }\n return result;\n}\n\nfunction ranks(values: readonly number[]): number[] {\n const order = values.map((value, index) => ({ value, index })).sort((a, b) => a.value - b.value);\n const result = new Array<number>(values.length);\n for (let start = 0; start < order.length; ) {\n let end = start + 1;\n while (end < order.length && order[end].value === order[start].value) {\n end++;\n }\n const rank = (start + end + 1) / 2;\n for (let i = start; i < end; i++) {\n result[order[i].index] = rank;\n }\n start = end;\n }\n return result;\n}\n\nfunction kendall(x: readonly number[], y: readonly number[]): number | undefined {\n const pairs = x.map((value, index) => ({ x: value, y: y[index] })).sort((a, b) => a.x - b.x || a.y - b.y);\n const sortedY = [...y].sort((a, b) => a - b);\n const yRanks = new Map<number, number>();\n let tiesY = 0;\n for (let start = 0; start < sortedY.length; ) {\n let end = start + 1;\n while (end < sortedY.length && sortedY[end] === sortedY[start]) {\n end++;\n }\n tiesY += ((end - start) * (end - start - 1)) / 2;\n yRanks.set(sortedY[start], yRanks.size + 1);\n start = end;\n }\n const tree = new Float64Array(yRanks.size + 1);\n let tiesX = 0;\n let tiesBoth = 0;\n let discordant = 0;\n for (let start = 0; start < pairs.length; ) {\n let end = start + 1;\n while (end < pairs.length && pairs[end].x === pairs[start].x) {\n end++;\n }\n tiesX += ((end - start) * (end - start - 1)) / 2;\n for (let i = start; i < end; ) {\n let j = i + 1;\n while (j < end && pairs[j].y === pairs[i].y) {\n j++;\n }\n tiesBoth += ((j - i) * (j - i - 1)) / 2;\n i = j;\n }\n // 同 x 组先查询再更新,避免将 x ties 算成逆序。\n for (let i = start; i < end; i++) {\n let lessOrEqual = 0;\n for (let rank = yRanks.get(pairs[i].y)!; rank > 0; rank -= rank & -rank) {\n lessOrEqual += tree[rank];\n }\n discordant += start - lessOrEqual;\n }\n for (let i = start; i < end; i++) {\n for (let rank = yRanks.get(pairs[i].y)!; rank < tree.length; rank += rank & -rank) {\n tree[rank]++;\n }\n }\n start = end;\n }\n const total = (x.length * (x.length - 1)) / 2;\n if (total === tiesX || total === tiesY) {\n return undefined;\n }\n return (total - tiesX - tiesY + tiesBoth - 2 * discordant) / Math.sqrt((total - tiesX) * (total - tiesY));\n}\n\n/** 等长有限样本的相关系数;常量/不足两条返回 undefined,不修改数组。 */\nexport function correlation(\n x: readonly number[],\n y: readonly number[],\n method: CorrelationMethod = 'pearson'\n): number | undefined {\n if (\n x.length !== y.length ||\n !['pearson', 'spearman', 'kendall'].includes(method) ||\n x.some(value => !Number.isFinite(value)) ||\n y.some(value => !Number.isFinite(value))\n ) {\n throw new RangeError('correlation requires equal finite arrays and a supported method');\n }\n if (x.length < 2) {\n return undefined;\n }\n return method === 'kendall' ? kendall(x, y) : method === 'spearman' ? pearson(ranks(x), ranks(y)) : pearson(x, y);\n}\n"]}
@@ -10,6 +10,9 @@ Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
11
  });
12
12
 
13
+ /**
14
+ * @see https://github.com/lodash/lodash/blob/master/debounce.js
15
+ */
13
16
  const isObject_1 = __importDefault(require("./isObject")), isValidNumber_1 = __importDefault(require("./isValidNumber"));
14
17
 
15
18
  let hasRaf = !1;
@@ -22,6 +25,7 @@ try {
22
25
 
23
26
  function debounce(func, wait, options) {
24
27
  let lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = !1, maxing = !1, trailing = !0;
28
+ // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.
25
29
  const useRAF = !wait && 0 !== wait && hasRaf;
26
30
  if ("function" != typeof func) throw new TypeError("Expected a function");
27
31
  function invokeFunc(time) {
@@ -34,27 +38,41 @@ function debounce(func, wait, options) {
34
38
  }
35
39
  function shouldInvoke(time) {
36
40
  const timeSinceLastCall = time - lastCallTime;
41
+ // Either this is the first call, activity has stopped and we're at the
42
+ // trailing edge, the system time has gone backwards and we're treating
43
+ // it as the trailing edge, or we've hit the `maxWait` limit.
37
44
  return void 0 === lastCallTime || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && time - lastInvokeTime >= maxWait;
38
45
  }
39
46
  function timerExpired() {
40
47
  const time = Date.now();
41
48
  if (shouldInvoke(time)) return trailingEdge(time);
42
- timerId = startTimer(timerExpired, function(time) {
49
+ // Restart the timer.
50
+ timerId = startTimer(timerExpired, function(time) {
43
51
  const timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - (time - lastCallTime);
44
52
  return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
45
53
  }(time));
46
54
  }
47
55
  function trailingEdge(time) {
56
+ // Only invoke if we have `lastArgs` which means `func` has been
57
+ // debounced at least once.
48
58
  return timerId = void 0, trailing && lastArgs ? invokeFunc(time) : (lastArgs = lastThis = void 0,
49
59
  result);
50
60
  }
51
61
  function debounced(...args) {
52
62
  const time = Date.now(), isInvoking = shouldInvoke(time);
53
- if (lastArgs = args, lastThis = this, lastCallTime = time, isInvoking) {
63
+ if (lastArgs = args,
64
+ // @ts-ignore
65
+ lastThis = this, lastCallTime = time, isInvoking) {
54
66
  if (void 0 === timerId) return function(time) {
55
- return lastInvokeTime = time, timerId = startTimer(timerExpired, wait), leading ? invokeFunc(time) : result;
67
+ // Invoke the leading edge.
68
+ // Reset any `maxWait` timer.
69
+ return lastInvokeTime = time,
70
+ // Start the timer for the trailing edge.
71
+ timerId = startTimer(timerExpired, wait), leading ? invokeFunc(time) : result;
56
72
  }(lastCallTime);
57
- if (maxing) return timerId = startTimer(timerExpired, wait), invokeFunc(lastCallTime);
73
+ if (maxing)
74
+ // Handle invocations in a tight loop.
75
+ return timerId = startTimer(timerExpired, wait), invokeFunc(lastCallTime);
58
76
  }
59
77
  return void 0 === timerId && (timerId = startTimer(timerExpired, wait)), result;
60
78
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/debounce.ts"],"names":[],"mappings":"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","file":"debounce.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/debounce.js\n */\nimport isObject from './isObject';\nimport isValidNumber from './isValidNumber';\n\nexport type FunctionControlOptions = {\n // 是否在等待开始时调用\n leading?: boolean;\n // 是否在等待结束后调用\n trailing?: boolean;\n // 最长等待时间\n maxWait?: number;\n};\n\nlet hasRaf: boolean = false;\ntry {\n hasRaf = typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function';\n} catch (err) {\n hasRaf = false;\n}\nhasRaf = false;\n\nfunction debounce<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: FunctionControlOptions\n): (...args: T[]) => S {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number;\n let result: any;\n // eslint-disable-next-line no-undef\n let timerId: number | NodeJS.Timeout | undefined;\n let lastCallTime: number | undefined;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && hasRaf;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(isValidNumber(options.maxWait) ? options.maxWait : 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n cancelAnimationFrame(timerId as number);\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n function cancelTimer(id: number) {\n if (useRAF) {\n return cancelAnimationFrame(id);\n }\n clearTimeout(id);\n }\n\n function leadingEdge(time: number) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const timeWaiting = wait - timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId as number);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function pending() {\n return timerId !== undefined;\n }\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n // @ts-ignore\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n return debounced;\n}\n\nexport default debounce;\n"]}
1
+ {"version":3,"sources":["../src/common/debounce.ts"],"names":[],"mappings":"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","file":"debounce.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/debounce.js\n */\nimport isObject from './isObject';\nimport isValidNumber from './isValidNumber';\n\nexport type FunctionControlOptions = {\n // 是否在等待开始时调用\n leading?: boolean;\n // 是否在等待结束后调用\n trailing?: boolean;\n // 最长等待时间\n maxWait?: number;\n};\n\nlet hasRaf: boolean = false;\ntry {\n hasRaf = typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function';\n} catch (err) {\n hasRaf = false;\n}\nhasRaf = false;\n\nfunction debounce<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: FunctionControlOptions\n): (...args: T[]) => S {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number;\n let result: any;\n // eslint-disable-next-line no-undef\n let timerId: number | NodeJS.Timeout | undefined;\n let lastCallTime: number | undefined;\n\n let lastInvokeTime = 0;\n let leading = false;\n let maxing = false;\n let trailing = true;\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = !wait && wait !== 0 && hasRaf;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n wait = +wait || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(isValidNumber(options.maxWait) ? options.maxWait : 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n cancelAnimationFrame(timerId as number);\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n function cancelTimer(id: number) {\n if (useRAF) {\n return cancelAnimationFrame(id);\n }\n clearTimeout(id);\n }\n\n function leadingEdge(time: number) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n const timeWaiting = wait - timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time: number) {\n const timeSinceLastCall = time - (lastCallTime as number);\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (\n lastCallTime === undefined ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n function timerExpired() {\n const time = Date.now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId as number);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now());\n }\n\n function pending() {\n return timerId !== undefined;\n }\n\n function debounced(...args: any[]) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n // @ts-ignore\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n debounced.pending = pending;\n return debounced;\n}\n\nexport default debounce;\n"]}
@@ -11,5 +11,4 @@ function deviation(values, valueof) {
11
11
  return v ? Math.sqrt(v) : v;
12
12
  }
13
13
 
14
- exports.deviation = deviation;
15
- //# sourceMappingURL=deviation.js.map
14
+ exports.deviation = deviation;
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Empirical Cumulative Distribution Function (ECDF)
3
+ * Returns a factory that builds an evaluator over provided samples.
4
+ * The evaluator exposes:
5
+ * - evaluate(x:number) => proportion of samples <= x
6
+ * - evaluate(xs:number[]) => number[]
7
+ * - evaluateGrid(N:number) => { points: number[], cdf: number[] } over sample range
8
+ */
1
9
  export interface ECDFEvaluator {
2
10
  evaluate: (x: number | number[]) => number | number[];
3
11
  evaluateGrid: (N: number) => {
@@ -1,10 +1,19 @@
1
1
  "use strict";
2
2
 
3
- function ecdf(data) {
3
+ /**
4
+ * Empirical Cumulative Distribution Function (ECDF)
5
+ * Returns a factory that builds an evaluator over provided samples.
6
+ * The evaluator exposes:
7
+ * - evaluate(x:number) => proportion of samples <= x
8
+ * - evaluate(xs:number[]) => number[]
9
+ * - evaluateGrid(N:number) => { points: number[], cdf: number[] } over sample range
10
+ */ function ecdf(data) {
4
11
  const n = data.length, sorted = data.slice().sort(((a, b) => a - b));
5
12
  function evaluateSingle(x) {
6
13
  if (0 === n) return 0;
7
- let lo = 0, hi = n;
14
+ // count of values <= x (upper bound index)
15
+ let lo = 0, hi = n;
16
+ // exclusive
8
17
  for (;lo < hi; ) {
9
18
  const mid = lo + hi >>> 1;
10
19
  sorted[mid] <= x ? lo = mid + 1 : hi = mid;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/ecdf.ts"],"names":[],"mappings":";;;AAeA,SAAgB,IAAI,CAAC,IAAc;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAElD,SAAS,cAAc,CAAC,CAAS;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC;SACV;QAED,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,EAAE,GAAG,EAAE,EAAE;YACd,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACpB,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;aACd;iBAAM;gBACL,EAAE,GAAG,GAAG,CAAC;aACV;SACF;QACD,OAAO,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,SAAS,QAAQ,CAAC,CAAoB;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpB,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,cAAc,CAAC,CAAW,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,YAAY,CAAC,CAAS;QAC7B,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,OAAO,GAAG,CAAC;SACZ;QACD,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,GAAG,EAAE;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;YAE7C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACvC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAe;QACzB,YAAY;QACZ,CAAC;KACF,CAAC;AACJ,CAAC;AA/DD,oBA+DC;AAED,kBAAe,IAAI,CAAC","file":"ecdf.js","sourcesContent":["/**\n * Empirical Cumulative Distribution Function (ECDF)\n * Returns a factory that builds an evaluator over provided samples.\n * The evaluator exposes:\n * - evaluate(x:number) => proportion of samples <= x\n * - evaluate(xs:number[]) => number[]\n * - evaluateGrid(N:number) => { points: number[], cdf: number[] } over sample range\n */\n\nexport interface ECDFEvaluator {\n evaluate: (x: number | number[]) => number | number[];\n evaluateGrid: (N: number) => { x: number; y: number }[];\n n: number;\n}\n\nexport function ecdf(data: number[]): ECDFEvaluator {\n const n = data.length;\n const sorted = data.slice().sort((a, b) => a - b);\n\n function evaluateSingle(x: number) {\n if (n === 0) {\n return 0;\n }\n // count of values <= x (upper bound index)\n let lo = 0;\n let hi = n; // exclusive\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (sorted[mid] <= x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo / n;\n }\n\n function evaluate(x: number | number[]) {\n if (Array.isArray(x)) {\n const out: number[] = [];\n for (let i = 0; i < x.length; i++) {\n out.push(evaluateSingle(x[i]));\n }\n return out;\n }\n return evaluateSingle(x as number);\n }\n\n function evaluateGrid(N: number) {\n const out: { x: number; y: number }[] = [];\n if (N <= 0) {\n return out;\n }\n if (n === 0) {\n return out;\n }\n const min = sorted[0];\n const max = sorted[n - 1];\n if (min === max) {\n for (let i = 0; i < N; i++) {\n out.push({ x: min, y: 1 });\n }\n return out;\n }\n const step = (max - min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const x = i === N - 1 ? max : min + step * i;\n\n out.push({ x, y: evaluateSingle(x) });\n }\n return out;\n }\n\n return {\n evaluate: evaluate as any,\n evaluateGrid,\n n\n };\n}\n\nexport default ecdf;\n"]}
1
+ {"version":3,"sources":["../src/common/ecdf.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAQH,SAAgB,IAAI,CAAC,IAAc;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAElD,SAAS,cAAc,CAAC,CAAS;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC;SACV;QACD,2CAA2C;QAC3C,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY;QACxB,OAAO,EAAE,GAAG,EAAE,EAAE;YACd,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACpB,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;aACd;iBAAM;gBACL,EAAE,GAAG,GAAG,CAAC;aACV;SACF;QACD,OAAO,EAAE,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,SAAS,QAAQ,CAAC,CAAoB;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpB,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,OAAO,GAAG,CAAC;SACZ;QACD,OAAO,cAAc,CAAC,CAAW,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,YAAY,CAAC,CAAS;QAC7B,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,OAAO,GAAG,CAAC;SACZ;QACD,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,GAAG,EAAE;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC5B;YACD,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;YAE7C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACvC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAe;QACzB,YAAY;QACZ,CAAC;KACF,CAAC;AACJ,CAAC;AA/DD,oBA+DC;AAED,kBAAe,IAAI,CAAC","file":"ecdf.js","sourcesContent":["/**\n * Empirical Cumulative Distribution Function (ECDF)\n * Returns a factory that builds an evaluator over provided samples.\n * The evaluator exposes:\n * - evaluate(x:number) => proportion of samples <= x\n * - evaluate(xs:number[]) => number[]\n * - evaluateGrid(N:number) => { points: number[], cdf: number[] } over sample range\n */\n\nexport interface ECDFEvaluator {\n evaluate: (x: number | number[]) => number | number[];\n evaluateGrid: (N: number) => { x: number; y: number }[];\n n: number;\n}\n\nexport function ecdf(data: number[]): ECDFEvaluator {\n const n = data.length;\n const sorted = data.slice().sort((a, b) => a - b);\n\n function evaluateSingle(x: number) {\n if (n === 0) {\n return 0;\n }\n // count of values <= x (upper bound index)\n let lo = 0;\n let hi = n; // exclusive\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (sorted[mid] <= x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo / n;\n }\n\n function evaluate(x: number | number[]) {\n if (Array.isArray(x)) {\n const out: number[] = [];\n for (let i = 0; i < x.length; i++) {\n out.push(evaluateSingle(x[i]));\n }\n return out;\n }\n return evaluateSingle(x as number);\n }\n\n function evaluateGrid(N: number) {\n const out: { x: number; y: number }[] = [];\n if (N <= 0) {\n return out;\n }\n if (n === 0) {\n return out;\n }\n const min = sorted[0];\n const max = sorted[n - 1];\n if (min === max) {\n for (let i = 0; i < N; i++) {\n out.push({ x: min, y: 1 });\n }\n return out;\n }\n const step = (max - min) / (N - 1);\n for (let i = 0; i < N; i++) {\n const x = i === N - 1 ? max : min + step * i;\n\n out.push({ x, y: evaluateSingle(x) });\n }\n return out;\n }\n\n return {\n evaluate: evaluate as any,\n evaluateGrid,\n n\n };\n}\n\nexport default ecdf;\n"]}
@@ -1 +1,5 @@
1
+ /**
2
+ * Return an array with minimum and maximum values, in the
3
+ * form [min, max]. Ignores null, undefined, and NaN values.
4
+ */
1
5
  export declare const extent: (array: any[], func?: (val: any) => number) => number[];
@@ -15,7 +15,8 @@ const isFunction_1 = __importDefault(require("./isFunction")), isNil_1 = __impor
15
15
  let min, max;
16
16
  if (array && array.length) {
17
17
  const n = array.length;
18
- for (let i = 0; i < n; i += 1) {
18
+ // find first valid value
19
+ for (let i = 0; i < n; i += 1) {
19
20
  let value = valueGetter(array[i]);
20
21
  (0, isNil_1.default)(value) || !(0, isNumber_1.default)(value = +value) || Number.isNaN(value) || ((0,
21
22
  isNil_1.default)(min) ? (min = value, max = value) : (min = Math.min(min, value),
@@ -26,4 +27,5 @@ const isFunction_1 = __importDefault(require("./isFunction")), isNil_1 = __impor
26
27
  return [ min, max ];
27
28
  };
28
29
 
29
- exports.extent = extent;
30
+ exports.extent = extent;
31
+ //# sourceMappingURL=extent.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/extent.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,oDAA4B;AAC5B,0DAAkC;AAK3B,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,IAA2B,EAAE,EAAE;IAClE,MAAM,WAAW,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;IAChE,IAAI,GAAW,CAAC;IAChB,IAAI,GAAW,CAAC;IAEhB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAGvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvE,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;oBACd,GAAG,GAAG,KAAK,CAAC;oBACZ,GAAG,GAAG,KAAK,CAAC;iBACb;qBAAM;oBACL,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;aACF;SACF;QAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACnB;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC;AA1BW,QAAA,MAAM,UA0BjB","file":"extent.js","sourcesContent":["import isFunction from './isFunction';\nimport isNil from './isNil';\nimport isNumber from './isNumber';\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: (val: any) => number) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n"]}
1
+ {"version":3,"sources":["../src/common/extent.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,oDAA4B;AAC5B,0DAAkC;AAClC;;;GAGG;AACI,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,IAA2B,EAAE,EAAE;IAClE,MAAM,WAAW,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;IAChE,IAAI,GAAW,CAAC;IAChB,IAAI,GAAW,CAAC;IAEhB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAEvB,yBAAyB;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,IAAI,IAAA,kBAAQ,EAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvE,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;oBACd,GAAG,GAAG,KAAK,CAAC;oBACZ,GAAG,GAAG,KAAK,CAAC;iBACb;qBAAM;oBACL,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5B;aACF;SACF;QAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACnB;IAED,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC,CAAC;AA1BW,QAAA,MAAM,UA0BjB","file":"extent.js","sourcesContent":["import isFunction from './isFunction';\nimport isNil from './isNil';\nimport isNumber from './isNumber';\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nexport const extent = (array: any[], func?: (val: any) => number) => {\n const valueGetter = isFunction(func) ? func : (val: any) => val;\n let min: number;\n let max: number;\n\n if (array && array.length) {\n const n = array.length;\n\n // find first valid value\n for (let i = 0; i < n; i += 1) {\n let value = valueGetter(array[i]);\n if (!isNil(value) && isNumber((value = +value)) && !Number.isNaN(value)) {\n if (isNil(min)) {\n min = value;\n max = value;\n } else {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n\n return [min, max];\n }\n\n return [min, max];\n};\n"]}
@@ -1,12 +1,18 @@
1
+ /** 获取字段值的函数 */
1
2
  export type FieldGetterFunction = (val: any) => any;
3
+ /** 根据字段路径,返回获取相应路径属性的函数 */
2
4
  export type Getter = (path: string[]) => FieldGetterFunction;
3
5
  export type FieldOption = {
4
6
  field: string;
5
7
  };
6
8
  export type TagItemAttribute<T> = T | ((d?: any) => T);
9
+ /** field函数对应的参数 */
7
10
  export interface FieldGetterGeneratorOptions {
8
11
  get?: Getter;
9
12
  }
10
13
  export declare const getter: (path: string[]) => any;
11
14
  export declare const field: (fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[], opt?: FieldGetterGeneratorOptions) => any;
15
+ /**
16
+ * 取数逻辑
17
+ */
12
18
  export declare const simpleField: <T>(option: FieldOption | TagItemAttribute<T>) => (datum: any) => any;
@@ -29,6 +29,9 @@ const fieldSingle = (fieldStr, opt = {}) => {
29
29
 
30
30
  exports.field = field;
31
31
 
32
+ /**
33
+ * 取数逻辑
34
+ */
32
35
  const simpleField = option => option ? "string" == typeof option || "number" == typeof option ? () => option : (0,
33
36
  isFunction_1.default)(option) ? option : datum => datum[option.field] : null;
34
37
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/field.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,wDAAgC;AAChC,8DAAsC;AAgB/B,MAAM,MAAM,GAAG,CAAC,IAAc,EAAO,EAAE;IAC5C,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,aAAG,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEF,MAAM,WAAW,GAAG,CAAC,QAAsC,EAAE,MAAmC,EAAE,EAAE,EAAE;IACpG,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE;QACxB,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,cAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEK,MAAM,KAAK,GAAG,CACnB,QAAyE,EACzE,MAAmC,EAAE,EACrC,EAAE;IACF,IAAI,IAAA,iBAAO,EAAC,QAAQ,CAAC,EAAE;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC,KAAU,EAAE,EAAE;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;KACH;IAED,OAAO,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB;AAKK,MAAM,WAAW,GAAG,CAAI,MAAyC,EAAE,EAAE;IAC1E,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;KACrB;SAAM,IAAI,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE;QAC7B,OAAO,MAA2B,CAAC;KACpC;IACD,OAAO,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAE,MAAsB,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB","file":"field.js","sourcesContent":["import get from './get';\nimport isArray from './isArray';\nimport isFunction from './isFunction';\n\n/** 获取字段值的函数 */\nexport type FieldGetterFunction = (val: any) => any;\n\n/** 根据字段路径,返回获取相应路径属性的函数 */\nexport type Getter = (path: string[]) => FieldGetterFunction;\n\nexport type FieldOption = { field: string };\nexport type TagItemAttribute<T> = T | ((d?: any) => T);\n\n/** field函数对应的参数 */\nexport interface FieldGetterGeneratorOptions {\n get?: Getter;\n}\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = [fieldStr];\n\n return ((opt && opt.get) || getter)(path);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, opt);\n};\n\n/**\n * 取数逻辑\n */\nexport const simpleField = <T>(option: FieldOption | TagItemAttribute<T>) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n"]}
1
+ {"version":3,"sources":["../src/common/field.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,wDAAgC;AAChC,8DAAsC;AAgB/B,MAAM,MAAM,GAAG,CAAC,IAAc,EAAO,EAAE;IAC5C,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,aAAG,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEF,MAAM,WAAW,GAAG,CAAC,QAAsC,EAAE,MAAmC,EAAE,EAAE,EAAE;IACpG,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE;QACxB,OAAO,QAAQ,CAAC;KACjB;IAED,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,cAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEK,MAAM,KAAK,GAAG,CACnB,QAAyE,EACzE,MAAmC,EAAE,EACrC,EAAE;IACF,IAAI,IAAA,iBAAO,EAAC,QAAQ,CAAC,EAAE;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAE7D,OAAO,CAAC,KAAU,EAAE,EAAE;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;KACH;IAED,OAAO,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAI,MAAyC,EAAE,EAAE;IAC1E,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC5D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;KACrB;SAAM,IAAI,IAAA,oBAAU,EAAC,MAAM,CAAC,EAAE;QAC7B,OAAO,MAA2B,CAAC;KACpC;IACD,OAAO,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAE,MAAsB,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB","file":"field.js","sourcesContent":["import get from './get';\nimport isArray from './isArray';\nimport isFunction from './isFunction';\n\n/** 获取字段值的函数 */\nexport type FieldGetterFunction = (val: any) => any;\n\n/** 根据字段路径,返回获取相应路径属性的函数 */\nexport type Getter = (path: string[]) => FieldGetterFunction;\n\nexport type FieldOption = { field: string };\nexport type TagItemAttribute<T> = T | ((d?: any) => T);\n\n/** field函数对应的参数 */\nexport interface FieldGetterGeneratorOptions {\n get?: Getter;\n}\n\nexport const getter = (path: string[]): any => {\n return (obj: any) => get(obj, path);\n};\n\nconst fieldSingle = (fieldStr: string | FieldGetterFunction, opt: FieldGetterGeneratorOptions = {}) => {\n if (isFunction(fieldStr)) {\n return fieldStr;\n }\n\n const path = [fieldStr];\n\n return ((opt && opt.get) || getter)(path);\n};\n\nexport const field = (\n fieldStr: string | string[] | FieldGetterFunction | FieldGetterFunction[],\n opt: FieldGetterGeneratorOptions = {}\n) => {\n if (isArray(fieldStr)) {\n const funcs = fieldStr.map(entry => fieldSingle(entry, opt));\n\n return (datum: any) => {\n return funcs.map(func => func(datum));\n };\n }\n\n return fieldSingle(fieldStr, opt);\n};\n\n/**\n * 取数逻辑\n */\nexport const simpleField = <T>(option: FieldOption | TagItemAttribute<T>) => {\n if (!option) {\n return null;\n }\n if (typeof option === 'string' || typeof option === 'number') {\n return () => option;\n } else if (isFunction(option)) {\n return option as (datum: any) => T;\n }\n return (datum: any) => datum[(option as FieldOption).field];\n};\n"]}
@@ -1,3 +1,20 @@
1
1
  import type { Dict } from './../type';
2
+ /**
3
+ * Checks if `key` is a direct property of `object`.
4
+ *
5
+ * @param {Object} object The object to query.
6
+ * @param {string} key The key to check.
7
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
8
+ * @example
9
+ *
10
+ * const object = { 'a': { 'b': 2 } }
11
+ * const other = create({ 'a': create({ 'b': 2 }) })
12
+ *
13
+ * has(object, 'a')
14
+ * // => true
15
+ *
16
+ * has(other, 'a')
17
+ * // => false
18
+ */
2
19
  declare const has: (object: Dict<any>, key: any) => boolean;
3
20
  export default has;
package/cjs/common/has.js CHANGED
@@ -4,7 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
6
 
7
+ /** Used to check objects for own properties. */
7
8
  const hasOwnProperty = Object.prototype.hasOwnProperty, has = (object, key) => null != object && hasOwnProperty.call(object, key);
8
9
 
9
- exports.default = has;
10
+ /**
11
+ * Checks if `key` is a direct property of `object`.
12
+ *
13
+ * @param {Object} object The object to query.
14
+ * @param {string} key The key to check.
15
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
16
+ * @example
17
+ *
18
+ * const object = { 'a': { 'b': 2 } }
19
+ * const other = create({ 'a': create({ 'b': 2 }) })
20
+ *
21
+ * has(object, 'a')
22
+ * // => true
23
+ *
24
+ * has(other, 'a')
25
+ * // => false
26
+ */ exports.default = has;
10
27
  //# sourceMappingURL=has.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/has.ts"],"names":[],"mappings":";;AAGA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AAmBvD,MAAM,GAAG,GAAG,CAAC,MAAiB,EAAE,GAAQ,EAAW,EAAE;IACnD,OAAO,MAAM,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,kBAAe,GAAG,CAAC","file":"has.js","sourcesContent":["import type { Dict } from './../type';\n\n/** Used to check objects for own properties. */\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Checks if `key` is a direct property of `object`.\n *\n * @param {Object} object The object to query.\n * @param {string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n * @example\n *\n * const object = { 'a': { 'b': 2 } }\n * const other = create({ 'a': create({ 'b': 2 }) })\n *\n * has(object, 'a')\n * // => true\n *\n * has(other, 'a')\n * // => false\n */\nconst has = (object: Dict<any>, key: any): boolean => {\n return object != null && hasOwnProperty.call(object, key);\n};\n\nexport default has;\n"]}
1
+ {"version":3,"sources":["../src/common/has.ts"],"names":[],"mappings":";;AAEA,gDAAgD;AAChD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,GAAG,GAAG,CAAC,MAAiB,EAAE,GAAQ,EAAW,EAAE;IACnD,OAAO,MAAM,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,kBAAe,GAAG,CAAC","file":"has.js","sourcesContent":["import type { Dict } from './../type';\n\n/** Used to check objects for own properties. */\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Checks if `key` is a direct property of `object`.\n *\n * @param {Object} object The object to query.\n * @param {string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n * @example\n *\n * const object = { 'a': { 'b': 2 } }\n * const other = create({ 'a': create({ 'b': 2 }) })\n *\n * has(object, 'a')\n * // => true\n *\n * has(other, 'a')\n * // => false\n */\nconst has = (object: Dict<any>, key: any): boolean => {\n return object != null && hasOwnProperty.call(object, key);\n};\n\nexport default has;\n"]}
@@ -33,6 +33,7 @@ export * from './array';
33
33
  export { range } from './range';
34
34
  export { ascending } from './ascending';
35
35
  export * from './quantileSorted';
36
+ export { normalQuantile } from './normalQuantile';
36
37
  export { bisect, findZeroOfFunction, binaryFuzzySearch, binaryFuzzySearchInNumberRange } from './bisect';
37
38
  export { deviation } from './deviation';
38
39
  export { median } from './median';
@@ -67,3 +68,7 @@ export * from './regression-lowess';
67
68
  export * from './regression-polynomial';
68
69
  export * from './kde';
69
70
  export * from './ecdf';
71
+ export * from './correlation';
72
+ export * from './mean';
73
+ export * from './bootstrap';
74
+ export * from './regression-bootstrap';
@@ -21,9 +21,10 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
21
21
 
22
22
  Object.defineProperty(exports, "__esModule", {
23
23
  value: !0
24
- }), exports.debounce = exports.clamper = exports.clampRange = exports.clamp = exports.uuid = exports.truncate = exports.pad = exports.memoize = exports.constant = exports.tickStep = exports.variance = exports.median = exports.deviation = exports.binaryFuzzySearchInNumberRange = exports.binaryFuzzySearch = exports.findZeroOfFunction = exports.bisect = exports.ascending = exports.range = exports.isShallowEqual = exports.isEqual = exports.pickWithout = exports.pick = exports.baseMerge = exports.merge = exports.cloneDeep = exports.clone = exports.has = exports.get = exports.isEmpty = exports.isBase64 = exports.isRegExp = exports.isValidUrl = exports.isValidNumber = exports.isNumeric = exports.isNumber = exports.isDate = exports.isArrayLike = exports.isArray = exports.isString = exports.isUndefined = exports.isType = exports.isPlainObject = exports.isObjectLike = exports.isObject = exports.isValid = exports.isNull = exports.isNil = exports.isFunction = exports.isBoolean = void 0,
25
- exports.substitute = exports.upperFirst = exports.lowerFirst = exports.toValidNumber = exports.toNumber = exports.toDate = exports.throttle = void 0;
24
+ }), exports.clamper = exports.clampRange = exports.clamp = exports.uuid = exports.truncate = exports.pad = exports.memoize = exports.constant = exports.tickStep = exports.variance = exports.median = exports.deviation = exports.binaryFuzzySearchInNumberRange = exports.binaryFuzzySearch = exports.findZeroOfFunction = exports.bisect = exports.normalQuantile = exports.ascending = exports.range = exports.isShallowEqual = exports.isEqual = exports.pickWithout = exports.pick = exports.baseMerge = exports.merge = exports.cloneDeep = exports.clone = exports.has = exports.get = exports.isEmpty = exports.isBase64 = exports.isRegExp = exports.isValidUrl = exports.isValidNumber = exports.isNumeric = exports.isNumber = exports.isDate = exports.isArrayLike = exports.isArray = exports.isString = exports.isUndefined = exports.isType = exports.isPlainObject = exports.isObjectLike = exports.isObject = exports.isValid = exports.isNull = exports.isNil = exports.isFunction = exports.isBoolean = void 0,
25
+ exports.substitute = exports.upperFirst = exports.lowerFirst = exports.toValidNumber = exports.toNumber = exports.toDate = exports.throttle = exports.debounce = void 0;
26
26
 
27
+ // type check
27
28
  var isBoolean_1 = require("./isBoolean");
28
29
 
29
30
  Object.defineProperty(exports, "isBoolean", {
@@ -213,6 +214,7 @@ Object.defineProperty(exports, "isEmpty", {
213
214
  }
214
215
  });
215
216
 
217
+ // object
216
218
  var get_1 = require("./get");
217
219
 
218
220
  Object.defineProperty(exports, "get", {
@@ -297,7 +299,9 @@ Object.defineProperty(exports, "isShallowEqual", {
297
299
  get: function() {
298
300
  return isShallowEqual_1.isShallowEqual;
299
301
  }
300
- }), __exportStar(require("./mixin"), exports), __exportStar(require("./array"), exports);
302
+ }), __exportStar(require("./mixin"), exports),
303
+ // array
304
+ __exportStar(require("./array"), exports);
301
305
 
302
306
  var range_1 = require("./range");
303
307
 
@@ -317,6 +321,15 @@ Object.defineProperty(exports, "ascending", {
317
321
  }
318
322
  }), __exportStar(require("./quantileSorted"), exports);
319
323
 
324
+ var normalQuantile_1 = require("./normalQuantile");
325
+
326
+ Object.defineProperty(exports, "normalQuantile", {
327
+ enumerable: !0,
328
+ get: function() {
329
+ return normalQuantile_1.normalQuantile;
330
+ }
331
+ });
332
+
320
333
  var bisect_1 = require("./bisect");
321
334
 
322
335
  Object.defineProperty(exports, "bisect", {
@@ -368,6 +381,7 @@ Object.defineProperty(exports, "variance", {
368
381
  }
369
382
  });
370
383
 
384
+ // tick
371
385
  var tickStep_1 = require("./tickStep");
372
386
 
373
387
  Object.defineProperty(exports, "tickStep", {
@@ -375,8 +389,11 @@ Object.defineProperty(exports, "tickStep", {
375
389
  get: function() {
376
390
  return tickStep_1.tickStep;
377
391
  }
378
- }), __exportStar(require("./number"), exports);
392
+ }),
393
+ // number
394
+ __exportStar(require("./number"), exports);
379
395
 
396
+ // function
380
397
  var constant_1 = require("./constant");
381
398
 
382
399
  Object.defineProperty(exports, "constant", {
@@ -395,6 +412,7 @@ Object.defineProperty(exports, "memoize", {
395
412
  }
396
413
  });
397
414
 
415
+ // pad
398
416
  var pad_1 = require("./pad");
399
417
 
400
418
  Object.defineProperty(exports, "pad", {
@@ -413,6 +431,7 @@ Object.defineProperty(exports, "truncate", {
413
431
  }
414
432
  });
415
433
 
434
+ // uuid
416
435
  var uuid_1 = require("./uuid");
417
436
 
418
437
  Object.defineProperty(exports, "uuid", {
@@ -422,6 +441,7 @@ Object.defineProperty(exports, "uuid", {
422
441
  }
423
442
  });
424
443
 
444
+ // clamp
425
445
  var clamp_1 = require("./clamp");
426
446
 
427
447
  Object.defineProperty(exports, "clamp", {
@@ -449,6 +469,7 @@ Object.defineProperty(exports, "clamper", {
449
469
  }
450
470
  });
451
471
 
472
+ // debounce & throttle
452
473
  var debounce_1 = require("./debounce");
453
474
 
454
475
  Object.defineProperty(exports, "debounce", {
@@ -465,8 +486,11 @@ Object.defineProperty(exports, "throttle", {
465
486
  get: function() {
466
487
  return __importDefault(throttle_1).default;
467
488
  }
468
- }), __exportStar(require("./interpolate"), exports);
489
+ }),
490
+ // interpolate
491
+ __exportStar(require("./interpolate"), exports);
469
492
 
493
+ // type convert
470
494
  var toDate_1 = require("./toDate");
471
495
 
472
496
  Object.defineProperty(exports, "toDate", {
@@ -494,6 +518,7 @@ Object.defineProperty(exports, "toValidNumber", {
494
518
  }
495
519
  });
496
520
 
521
+ // string
497
522
  var lowerFirst_1 = require("./lowerFirst");
498
523
 
499
524
  Object.defineProperty(exports, "lowerFirst", {
@@ -512,6 +537,7 @@ Object.defineProperty(exports, "upperFirst", {
512
537
  }
513
538
  });
514
539
 
540
+ // string format
515
541
  var substitute_1 = require("./substitute");
516
542
 
517
543
  Object.defineProperty(exports, "substitute", {
@@ -524,5 +550,7 @@ __exportStar(require("./toPercent"), exports), __exportStar(require("./zero"), e
524
550
  __exportStar(require("./extent"), exports), __exportStar(require("./regression-linear"), exports),
525
551
  __exportStar(require("./regression-logistic"), exports), __exportStar(require("./regression-lowess"), exports),
526
552
  __exportStar(require("./regression-polynomial"), exports), __exportStar(require("./kde"), exports),
527
- __exportStar(require("./ecdf"), exports);
553
+ __exportStar(require("./ecdf"), exports), __exportStar(require("./correlation"), exports),
554
+ __exportStar(require("./mean"), exports), __exportStar(require("./bootstrap"), exports),
555
+ __exportStar(require("./regression-bootstrap"), exports);
528
556
  //# sourceMappingURL=index.js.map