@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
@@ -0,0 +1,26 @@
1
+ /** 回归共用的稳定坐标与小型最小二乘求解器;不构造 XᵀX。 */
2
+ export interface RegressionPoint {
3
+ x: number;
4
+ y: number;
5
+ }
6
+ export interface RegressionBasis {
7
+ xCenter: number;
8
+ xScale: number;
9
+ yCenter: number;
10
+ yScale: number;
11
+ }
12
+ export declare function regressionPoints(data: readonly any[], x: (d: any) => number, y: (d: any) => number): RegressionPoint[];
13
+ export declare function normalizeRegression(value: number, center: number, scale: number): number;
14
+ export declare function regressionBasis(points: readonly RegressionPoint[]): RegressionBasis;
15
+ export declare function fitRegression(points: readonly RegressionPoint[], degree: number, basis?: RegressionBasis): {
16
+ coef: number[];
17
+ rank: number;
18
+ basis: RegressionBasis;
19
+ };
20
+ export declare function regressionPrediction(model: ReturnType<typeof fitRegression>, x: number): number;
21
+ /** 保留公开的升幂 coef;预测始终使用稳定基底。 */
22
+ export declare function regressionCoefficients(model: ReturnType<typeof fitRegression>): number[];
23
+ export declare function regressionGrid(min: number, max: number, count: number, predict: (x: number) => number): {
24
+ x: number;
25
+ y: number;
26
+ }[];
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+
3
+ function regressionPoints(data, x, y) {
4
+ const points = [];
5
+ return data.forEach((d => {
6
+ const a = x(d), b = y(d);
7
+ // 保留既有 accessor 对缺失观测的排除行为;无穷大不是可拟合观测。
8
+ null != a && null != b && Number.isFinite(+a) && Number.isFinite(+b) && points.push({
9
+ x: +a,
10
+ y: +b
11
+ });
12
+ })), points;
13
+ }
14
+
15
+ function normalizeRegression(value, center, scale) {
16
+ const delta = value - center;
17
+ return Number.isFinite(delta) ? delta / scale : value / scale - center / scale;
18
+ }
19
+
20
+ function regressionBasis(points) {
21
+ let xMin = 1 / 0, xMax = -1 / 0, yMin = 1 / 0, yMax = -1 / 0;
22
+ for (const p of points) xMin = Math.min(xMin, p.x), xMax = Math.max(xMax, p.x),
23
+ yMin = Math.min(yMin, p.y), yMax = Math.max(yMax, p.y);
24
+ if (!points.length) return {
25
+ xCenter: 0,
26
+ xScale: 1,
27
+ yCenter: 0,
28
+ yScale: 1
29
+ };
30
+ const xCenter = xMin / 2 + xMax / 2, yCenter = yMin / 2 + yMax / 2;
31
+ return {
32
+ xCenter: xCenter,
33
+ yCenter: yCenter,
34
+ xScale: Math.max(Math.abs(xMin - xCenter), Math.abs(xMax - xCenter)) || 1,
35
+ yScale: Math.max(Math.abs(yMin - yCenter), Math.abs(yMax - yCenter)) || 1
36
+ };
37
+ }
38
+
39
+ /** 秩不足时对 QR 的小型 R 做单边 Jacobi SVD,获得明确的最小范数解。 */
40
+ function minimumNorm(r, rhs) {
41
+ const p = rhs.length, a = r.map((row => row.slice())), v = Array.from({
42
+ length: p
43
+ }, ((_, i) => Array.from({
44
+ length: p
45
+ }, ((_, j) => +(i === j)))));
46
+ for (let sweep = 0; sweep < 50; sweep++) {
47
+ let changed = !1;
48
+ for (let j = 0; j < p - 1; j++) for (let k = j + 1; k < p; k++) {
49
+ let aa = 0, bb = 0, ab = 0;
50
+ for (let i = 0; i < p; i++) aa += a[i][j] ** 2, bb += a[i][k] ** 2, ab += a[i][j] * a[i][k];
51
+ if (Math.abs(ab) <= 8 * Number.EPSILON * Math.sqrt(aa * bb)) continue;
52
+ changed = !0;
53
+ const tau = (bb - aa) / (2 * ab), t = (tau >= 0 ? 1 : -1) / (Math.abs(tau) + Math.hypot(1, tau)), c = 1 / Math.hypot(1, t), s = c * t;
54
+ for (let i = 0; i < p; i++) {
55
+ const aj = a[i][j], ak = a[i][k], vj = v[i][j], vk = v[i][k];
56
+ a[i][j] = c * aj - s * ak, a[i][k] = s * aj + c * ak, v[i][j] = c * vj - s * vk,
57
+ v[i][k] = s * vj + c * vk;
58
+ }
59
+ }
60
+ if (!changed) break;
61
+ }
62
+ const norms = Array.from({
63
+ length: p
64
+ }, ((_, j) => Math.hypot(...a.map((row => row[j]))))), tolerance = Math.max(...norms) * Number.EPSILON * p * 64, coef = new Array(p).fill(0);
65
+ let rank = 0;
66
+ for (let j = 0; j < p; j++) {
67
+ if (norms[j] <= tolerance) continue;
68
+ rank++;
69
+ let projection = 0;
70
+ for (let i = 0; i < p; i++) projection += a[i][j] * rhs[i];
71
+ projection /= norms[j] ** 2;
72
+ for (let i = 0; i < p; i++) coef[i] += v[i][j] * projection;
73
+ }
74
+ return {
75
+ coef: coef,
76
+ rank: rank
77
+ };
78
+ }
79
+
80
+ function fitRegression(points, degree, basis = regressionBasis(points)) {
81
+ const p = degree + 1;
82
+ if (1 === degree) {
83
+ let mx = 0, my = 0, n = 0;
84
+ for (const row of points) n++, mx += (normalizeRegression(row.x, basis.xCenter, basis.xScale) - mx) / n,
85
+ my += (normalizeRegression(row.y, basis.yCenter, basis.yScale) - my) / n;
86
+ let sxx = 0, sxy = 0;
87
+ for (const row of points) {
88
+ const dx = normalizeRegression(row.x, basis.xCenter, basis.xScale) - mx;
89
+ sxx += dx * dx, sxy += dx * (normalizeRegression(row.y, basis.yCenter, basis.yScale) - my);
90
+ }
91
+ const b = 0 === sxx ? 0 : sxy / sxx;
92
+ return {
93
+ coef: 0 === sxx ? [ my / (1 + mx * mx), mx * my / (1 + mx * mx) ] : [ my - b * mx, b ],
94
+ rank: 0 === n ? 0 : 0 === sxx ? 1 : 2,
95
+ basis: basis
96
+ };
97
+ }
98
+ const r = Array.from({
99
+ length: p
100
+ }, (() => new Array(p).fill(0))), rhs = new Array(p).fill(0), row = new Array(p);
101
+ for (const point of points) {
102
+ const z = normalizeRegression(point.x, basis.xCenter, basis.xScale);
103
+ row[0] = 1;
104
+ for (let j = 1; j < p; j++) row[j] = row[j - 1] * z;
105
+ let value = normalizeRegression(point.y, basis.yCenter, basis.yScale);
106
+ // 增量 Givens QR 仅保留 p×p 的 R,bootstrap 不分配 N×p 矩阵。
107
+ for (let j = 0; j < p; j++) {
108
+ const norm = Math.hypot(r[j][j], row[j]);
109
+ if (0 === norm) continue;
110
+ const c = r[j][j] / norm, s = row[j] / norm;
111
+ r[j][j] = norm;
112
+ for (let k = j + 1; k < p; k++) {
113
+ const previous = r[j][k];
114
+ r[j][k] = c * previous + s * row[k], row[k] = -s * previous + c * row[k];
115
+ }
116
+ const previous = rhs[j];
117
+ rhs[j] = c * previous + s * value, value = -s * previous + c * value;
118
+ }
119
+ }
120
+ const tolerance = Math.max(...r.map(((row, i) => Math.abs(row[i])))) * Number.EPSILON * p * 64;
121
+ if (r.some(((row, i) => Math.abs(row[i]) <= tolerance))) return Object.assign(Object.assign({}, minimumNorm(r, rhs)), {
122
+ basis: basis
123
+ });
124
+ const coef = new Array(p);
125
+ for (let i = p - 1; i >= 0; i--) {
126
+ let value = rhs[i];
127
+ for (let j = i + 1; j < p; j++) value -= r[i][j] * coef[j];
128
+ coef[i] = value / r[i][i];
129
+ }
130
+ return {
131
+ coef: coef,
132
+ rank: p,
133
+ basis: basis
134
+ };
135
+ }
136
+
137
+ function regressionPrediction(model, x) {
138
+ const z = normalizeRegression(x, model.basis.xCenter, model.basis.xScale);
139
+ let value = 0;
140
+ for (let j = model.coef.length - 1; j >= 0; j--) value = value * z + model.coef[j];
141
+ return model.basis.yCenter + model.basis.yScale * value;
142
+ }
143
+
144
+ /** 保留公开的升幂 coef;预测始终使用稳定基底。 */
145
+ function regressionCoefficients(model) {
146
+ let coef = [ model.coef[model.coef.length - 1] ];
147
+ const a = -model.basis.xCenter / model.basis.xScale, b = 1 / model.basis.xScale;
148
+ for (let j = model.coef.length - 2; j >= 0; j--) {
149
+ const next = new Array(coef.length + 1).fill(0);
150
+ coef.forEach(((c, i) => {
151
+ next[i] += a * c, next[i + 1] += b * c;
152
+ })), next[0] += model.coef[j], coef = next;
153
+ }
154
+ if (coef = coef.map((c => c * model.basis.yScale)), coef[0] += model.basis.yCenter,
155
+ coef.some((c => !Number.isFinite(c)))) throw new RangeError("Regression coefficients are not finite");
156
+ return coef;
157
+ }
158
+
159
+ function regressionGrid(min, max, count, predict) {
160
+ if (!Number.isInteger(count) || count <= 0 || !Number.isFinite(min) || !Number.isFinite(max)) return [];
161
+ const width = max - min, step = 1 === count ? 0 : width / (count - 1);
162
+ return Array.from({
163
+ length: count
164
+ }, ((_, i) => {
165
+ const t = 1 === count ? 0 : i / (count - 1), x = 0 === i ? min : i === count - 1 ? max : Number.isFinite(width) ? min + i * step : (1 - t) * min + t * max;
166
+ return {
167
+ x: x,
168
+ y: predict(x)
169
+ };
170
+ }));
171
+ }
172
+
173
+ Object.defineProperty(exports, "__esModule", {
174
+ value: !0
175
+ }), exports.regressionGrid = exports.regressionCoefficients = exports.regressionPrediction = exports.fitRegression = exports.regressionBasis = exports.normalizeRegression = exports.regressionPoints = void 0,
176
+ exports.regressionPoints = regressionPoints, exports.normalizeRegression = normalizeRegression,
177
+ exports.regressionBasis = regressionBasis, exports.fitRegression = fitRegression,
178
+ exports.regressionPrediction = regressionPrediction, exports.regressionCoefficients = regressionCoefficients,
179
+ exports.regressionGrid = regressionGrid;
180
+ //# sourceMappingURL=regression-solver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/regression-solver.ts"],"names":[],"mappings":"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","file":"regression-solver.js","sourcesContent":["/** 回归共用的稳定坐标与小型最小二乘求解器;不构造 XᵀX。 */\nexport interface RegressionPoint {\n x: number;\n y: number;\n}\nexport interface RegressionBasis {\n xCenter: number;\n xScale: number;\n yCenter: number;\n yScale: number;\n}\n\nexport function regressionPoints(data: readonly any[], x: (d: any) => number, y: (d: any) => number) {\n const points: RegressionPoint[] = [];\n data.forEach(d => {\n const a = x(d);\n const b = y(d);\n // 保留既有 accessor 对缺失观测的排除行为;无穷大不是可拟合观测。\n if (a != null && b != null && Number.isFinite(+a) && Number.isFinite(+b)) {\n points.push({ x: +a, y: +b });\n }\n });\n return points;\n}\n\nexport function normalizeRegression(value: number, center: number, scale: number) {\n const delta = value - center;\n return Number.isFinite(delta) ? delta / scale : value / scale - center / scale;\n}\n\nexport function regressionBasis(points: readonly RegressionPoint[]): RegressionBasis {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n for (const p of points) {\n xMin = Math.min(xMin, p.x);\n xMax = Math.max(xMax, p.x);\n yMin = Math.min(yMin, p.y);\n yMax = Math.max(yMax, p.y);\n }\n if (!points.length) {\n return { xCenter: 0, xScale: 1, yCenter: 0, yScale: 1 };\n }\n const xCenter = xMin / 2 + xMax / 2;\n const yCenter = yMin / 2 + yMax / 2;\n return {\n xCenter,\n yCenter,\n xScale: Math.max(Math.abs(xMin - xCenter), Math.abs(xMax - xCenter)) || 1,\n yScale: Math.max(Math.abs(yMin - yCenter), Math.abs(yMax - yCenter)) || 1\n };\n}\n\n/** 秩不足时对 QR 的小型 R 做单边 Jacobi SVD,获得明确的最小范数解。 */\nfunction minimumNorm(r: number[][], rhs: number[]) {\n const p = rhs.length;\n const a = r.map(row => row.slice());\n const v = Array.from({ length: p }, (_, i) => Array.from({ length: p }, (_, j) => +(i === j)));\n for (let sweep = 0; sweep < 50; sweep++) {\n let changed = false;\n for (let j = 0; j < p - 1; j++) {\n for (let k = j + 1; k < p; k++) {\n let aa = 0;\n let bb = 0;\n let ab = 0;\n for (let i = 0; i < p; i++) {\n aa += a[i][j] ** 2;\n bb += a[i][k] ** 2;\n ab += a[i][j] * a[i][k];\n }\n if (Math.abs(ab) <= Number.EPSILON * 8 * Math.sqrt(aa * bb)) {\n continue;\n }\n changed = true;\n const tau = (bb - aa) / (2 * ab);\n const t = (tau >= 0 ? 1 : -1) / (Math.abs(tau) + Math.hypot(1, tau));\n const c = 1 / Math.hypot(1, t);\n const s = c * t;\n for (let i = 0; i < p; i++) {\n const aj = a[i][j];\n const ak = a[i][k];\n const vj = v[i][j];\n const vk = v[i][k];\n a[i][j] = c * aj - s * ak;\n a[i][k] = s * aj + c * ak;\n v[i][j] = c * vj - s * vk;\n v[i][k] = s * vj + c * vk;\n }\n }\n }\n if (!changed) {\n break;\n }\n }\n const norms = Array.from({ length: p }, (_, j) => Math.hypot(...a.map(row => row[j])));\n const tolerance = Math.max(...norms) * Number.EPSILON * p * 64;\n const coef = new Array<number>(p).fill(0);\n let rank = 0;\n for (let j = 0; j < p; j++) {\n if (norms[j] <= tolerance) {\n continue;\n }\n rank++;\n let projection = 0;\n for (let i = 0; i < p; i++) {\n projection += a[i][j] * rhs[i];\n }\n projection /= norms[j] ** 2;\n for (let i = 0; i < p; i++) {\n coef[i] += v[i][j] * projection;\n }\n }\n return { coef, rank };\n}\n\nexport function fitRegression(points: readonly RegressionPoint[], degree: number, basis = regressionBasis(points)) {\n const p = degree + 1;\n if (degree === 1) {\n let mx = 0;\n let my = 0;\n let n = 0;\n for (const row of points) {\n n++;\n mx += (normalizeRegression(row.x, basis.xCenter, basis.xScale) - mx) / n;\n my += (normalizeRegression(row.y, basis.yCenter, basis.yScale) - my) / n;\n }\n let sxx = 0;\n let sxy = 0;\n for (const row of points) {\n const dx = normalizeRegression(row.x, basis.xCenter, basis.xScale) - mx;\n sxx += dx * dx;\n sxy += dx * (normalizeRegression(row.y, basis.yCenter, basis.yScale) - my);\n }\n const b = sxx === 0 ? 0 : sxy / sxx;\n const coef = sxx === 0 ? [my / (1 + mx * mx), (mx * my) / (1 + mx * mx)] : [my - b * mx, b];\n return { coef, rank: n === 0 ? 0 : sxx === 0 ? 1 : 2, basis };\n }\n const r = Array.from({ length: p }, () => new Array<number>(p).fill(0));\n const rhs = new Array<number>(p).fill(0);\n const row = new Array<number>(p);\n for (const point of points) {\n const z = normalizeRegression(point.x, basis.xCenter, basis.xScale);\n row[0] = 1;\n for (let j = 1; j < p; j++) {\n row[j] = row[j - 1] * z;\n }\n let value = normalizeRegression(point.y, basis.yCenter, basis.yScale);\n // 增量 Givens QR 仅保留 p×p 的 R,bootstrap 不分配 N×p 矩阵。\n for (let j = 0; j < p; j++) {\n const norm = Math.hypot(r[j][j], row[j]);\n if (norm === 0) {\n continue;\n }\n const c = r[j][j] / norm;\n const s = row[j] / norm;\n r[j][j] = norm;\n for (let k = j + 1; k < p; k++) {\n const previous = r[j][k];\n r[j][k] = c * previous + s * row[k];\n row[k] = -s * previous + c * row[k];\n }\n const previous = rhs[j];\n rhs[j] = c * previous + s * value;\n value = -s * previous + c * value;\n }\n }\n const tolerance = Math.max(...r.map((row, i) => Math.abs(row[i]))) * Number.EPSILON * p * 64;\n if (r.some((row, i) => Math.abs(row[i]) <= tolerance)) {\n return { ...minimumNorm(r, rhs), basis };\n }\n const coef = new Array<number>(p);\n for (let i = p - 1; i >= 0; i--) {\n let value = rhs[i];\n for (let j = i + 1; j < p; j++) {\n value -= r[i][j] * coef[j];\n }\n coef[i] = value / r[i][i];\n }\n return { coef, rank: p, basis };\n}\n\nexport function regressionPrediction(model: ReturnType<typeof fitRegression>, x: number) {\n const z = normalizeRegression(x, model.basis.xCenter, model.basis.xScale);\n let value = 0;\n for (let j = model.coef.length - 1; j >= 0; j--) {\n value = value * z + model.coef[j];\n }\n return model.basis.yCenter + model.basis.yScale * value;\n}\n\n/** 保留公开的升幂 coef;预测始终使用稳定基底。 */\nexport function regressionCoefficients(model: ReturnType<typeof fitRegression>) {\n let coef = [model.coef[model.coef.length - 1]];\n const a = -model.basis.xCenter / model.basis.xScale;\n const b = 1 / model.basis.xScale;\n for (let j = model.coef.length - 2; j >= 0; j--) {\n const next = new Array<number>(coef.length + 1).fill(0);\n coef.forEach((c, i) => {\n next[i] += a * c;\n next[i + 1] += b * c;\n });\n next[0] += model.coef[j];\n coef = next;\n }\n coef = coef.map(c => c * model.basis.yScale);\n coef[0] += model.basis.yCenter;\n if (coef.some(c => !Number.isFinite(c))) {\n throw new RangeError('Regression coefficients are not finite');\n }\n return coef;\n}\n\nexport function regressionGrid(min: number, max: number, count: number, predict: (x: number) => number) {\n if (!Number.isInteger(count) || count <= 0 || !Number.isFinite(min) || !Number.isFinite(max)) {\n return [];\n }\n const width = max - min;\n const step = count === 1 ? 0 : width / (count - 1);\n return Array.from({ length: count }, (_, i) => {\n const t = count === 1 ? 0 : i / (count - 1);\n const x = i === 0 ? min : i === count - 1 ? max : Number.isFinite(width) ? min + i * step : (1 - t) * min + t * max;\n return { x, y: predict(x) };\n });\n}\n"]}
@@ -1,4 +1,9 @@
1
- export declare function invNorm(p: number): number;
1
+ import { normalQuantile as invNorm } from './normalQuantile';
2
+ export { invNorm };
3
+ /** Compute a two-sided normal critical value without subtracting a small tail probability from one. */
4
+ export declare function confidenceCriticalValue(alpha: number): number;
5
+ /** A zero standard error gives a degenerate interval even when the critical value is infinite. */
6
+ export declare function confidenceHalfWidth(z: number, standardError: number): number;
2
7
  export interface LinearCIComponents {
3
8
  min: number;
4
9
  max: number;
@@ -7,7 +12,14 @@ export interface LinearCIComponents {
7
12
  SSE: number;
8
13
  Sxx: number;
9
14
  }
15
+ /**
16
+ * Compute basic components used for linear regression confidence / prediction intervals.
17
+ * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).
18
+ */
10
19
  export declare function computeLinearCIComponents(data: any[], x: (d: any) => number, y: (d: any) => number, predict: (x: number) => number): LinearCIComponents;
20
+ /**
21
+ * Compute standard errors for mean and prediction at px using components.
22
+ */
11
23
  export declare function stdErrorsAt(px: number, comps: LinearCIComponents): {
12
24
  seMean: number;
13
25
  sePred: number;
@@ -8,20 +8,26 @@ var __importDefault = this && this.__importDefault || function(mod) {
8
8
 
9
9
  Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
- }), exports.stdErrorsAt = exports.computeLinearCIComponents = exports.invNorm = void 0;
11
+ }), exports.stdErrorsAt = exports.computeLinearCIComponents = exports.confidenceHalfWidth = exports.confidenceCriticalValue = exports.invNorm = void 0;
12
12
 
13
- const isNil_1 = __importDefault(require("./isNil"));
13
+ const isNil_1 = __importDefault(require("./isNil")), normalQuantile_1 = require("./normalQuantile");
14
14
 
15
- function invNorm(p) {
16
- if (p <= 0 || p >= 1) return 0;
17
- const c1 = -.00778489400243029, c2 = -.322396458041136, c3 = -2.40075827716184, c4 = -2.54973253934373, c5 = 4.37466414146497, c6 = 2.93816398269878, d1 = .00778469570904146, d2 = .32246712907004, d3 = 2.445134137143, d4 = 3.75440866190742;
18
- let q, r;
19
- return p < .02425 ? (q = Math.sqrt(-2 * Math.log(p)), (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1)) : p <= .97575 ? (q = p - .5,
20
- r = q * q, (((((-39.6968302866538 * r + 220.946098424521) * r - 275.928510446969) * r + 138.357751867269) * r - 30.6647980661472) * r + 2.50662827745924) * q / (((((-54.4760987982241 * r + 161.585836858041) * r - 155.698979859887) * r + 66.8013118877197) * r - 13.2806815528857) * r + 1)) : (q = Math.sqrt(-2 * Math.log(1 - p)),
21
- -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1));
15
+ /** Compute a two-sided normal critical value without subtracting a small tail probability from one. */
16
+ function confidenceCriticalValue(alpha) {
17
+ return !Number.isFinite(alpha) || alpha < 0 || alpha > 1 ? NaN : -(0, normalQuantile_1.normalQuantile)(alpha / 2);
22
18
  }
23
19
 
20
+ /** A zero standard error gives a degenerate interval even when the critical value is infinite. */
21
+ function confidenceHalfWidth(z, standardError) {
22
+ return Number.isNaN(z) ? NaN : 0 === standardError ? 0 : z * standardError;
23
+ }
24
+
25
+ /**
26
+ * Compute basic components used for linear regression confidence / prediction intervals.
27
+ * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).
28
+ */
24
29
  function computeLinearCIComponents(data, x, y, predict) {
30
+ // simple local scanner to avoid circular imports
25
31
  let min = 1 / 0, max = -1 / 0, n = 0, sumX = 0;
26
32
  for (let i = 0; i < data.length; i++) {
27
33
  const d = data[i];
@@ -59,6 +65,9 @@ function computeLinearCIComponents(data, x, y, predict) {
59
65
  };
60
66
  }
61
67
 
68
+ /**
69
+ * Compute standard errors for mean and prediction at px using components.
70
+ */
62
71
  function stdErrorsAt(px, comps) {
63
72
  const {n: n, X: X, Sxx: Sxx, SSE: SSE} = comps, s2 = n > 2 ? SSE / (n - 2) : 0;
64
73
  return {
@@ -67,9 +76,15 @@ function stdErrorsAt(px, comps) {
67
76
  };
68
77
  }
69
78
 
70
- exports.invNorm = invNorm, exports.computeLinearCIComponents = computeLinearCIComponents,
71
- exports.stdErrorsAt = stdErrorsAt, exports.default = {
72
- invNorm: invNorm,
79
+ Object.defineProperty(exports, "invNorm", {
80
+ enumerable: !0,
81
+ get: function() {
82
+ return normalQuantile_1.normalQuantile;
83
+ }
84
+ }), exports.confidenceCriticalValue = confidenceCriticalValue, exports.confidenceHalfWidth = confidenceHalfWidth,
85
+ exports.computeLinearCIComponents = computeLinearCIComponents, exports.stdErrorsAt = stdErrorsAt,
86
+ exports.default = {
87
+ invNorm: normalQuantile_1.normalQuantile,
73
88
  computeLinearCIComponents: computeLinearCIComponents,
74
89
  stdErrorsAt: stdErrorsAt
75
90
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/regression-utils.ts"],"names":[],"mappings":"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","file":"regression-utils.js","sourcesContent":["import isNil from './isNil';\n\n/**\n * Approximate inverse normal CDF (probit) using Acklam's algorithm.\n * Returns z such that P(Z <= z) = p for standard normal Z.\n */\nexport function invNorm(p: number) {\n if (p <= 0 || p >= 1) {\n return 0;\n }\n\n const a1 = -39.6968302866538;\n const a2 = 220.946098424521;\n const a3 = -275.928510446969;\n const a4 = 138.357751867269;\n const a5 = -30.6647980661472;\n const a6 = 2.50662827745924;\n\n const b1 = -54.4760987982241;\n const b2 = 161.585836858041;\n const b3 = -155.698979859887;\n const b4 = 66.8013118877197;\n const b5 = -13.2806815528857;\n\n const c1 = -0.00778489400243029;\n const c2 = -0.322396458041136;\n const c3 = -2.40075827716184;\n const c4 = -2.54973253934373;\n const c5 = 4.37466414146497;\n const c6 = 2.93816398269878;\n\n const d1 = 0.00778469570904146;\n const d2 = 0.32246712907004;\n const d3 = 2.445134137143;\n const d4 = 3.75440866190742;\n\n const pLow = 0.02425;\n const pHigh = 1 - pLow;\n\n let q: number;\n let r: number;\n\n if (p < pLow) {\n q = Math.sqrt(-2 * Math.log(p));\n return (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);\n }\n\n if (p <= pHigh) {\n q = p - 0.5;\n r = q * q;\n return (\n ((((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q) /\n (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1)\n );\n }\n\n q = Math.sqrt(-2 * Math.log(1 - p));\n return -((((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1));\n}\n\nexport interface LinearCIComponents {\n min: number;\n max: number;\n n: number;\n X: number; // mean of x\n SSE: number;\n Sxx: number;\n}\n\n/**\n * Compute basic components used for linear regression confidence / prediction intervals.\n * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).\n */\nexport function computeLinearCIComponents(\n data: any[],\n x: (d: any) => number,\n y: (d: any) => number,\n predict: (x: number) => number\n): LinearCIComponents {\n // simple local scanner to avoid circular imports\n let min = Infinity;\n let max = -Infinity;\n let n = 0;\n let sumX = 0;\n\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n n++;\n sumX += dx;\n }\n }\n\n if (n === 0) {\n return { min, max, n, X: 0, SSE: 0, Sxx: 0 };\n }\n\n const X = sumX / n;\n let SSE = 0;\n let Sxx = 0;\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n const r = dy - predict(dx);\n SSE += r * r;\n const dxc = dx - X;\n Sxx += dxc * dxc;\n }\n }\n\n return { min, max, n, X, SSE, Sxx };\n}\n\n/**\n * Compute standard errors for mean and prediction at px using components.\n */\nexport function stdErrorsAt(px: number, comps: LinearCIComponents) {\n const { n, X, Sxx, SSE } = comps;\n const s2 = n > 2 ? SSE / (n - 2) : 0;\n const seMean = Sxx > 0 ? Math.sqrt(s2 * (1 / n + ((px - X) * (px - X)) / Sxx)) : Math.sqrt(s2 / n);\n const sePred = Math.sqrt(s2 * (1 + 1 / n + (Sxx > 0 ? ((px - X) * (px - X)) / Sxx : 0)));\n return { seMean, sePred };\n}\n\nexport default {\n invNorm,\n computeLinearCIComponents,\n stdErrorsAt\n};\n"]}
1
+ {"version":3,"sources":["../src/common/regression-utils.ts"],"names":[],"mappings":"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","file":"regression-utils.js","sourcesContent":["import isNil from './isNil';\nimport { normalQuantile as invNorm } from './normalQuantile';\nexport { invNorm };\n\n/** Compute a two-sided normal critical value without subtracting a small tail probability from one. */\nexport function confidenceCriticalValue(alpha: number): number {\n if (!Number.isFinite(alpha) || alpha < 0 || alpha > 1) {\n return NaN;\n }\n return -invNorm(alpha / 2);\n}\n\n/** A zero standard error gives a degenerate interval even when the critical value is infinite. */\nexport function confidenceHalfWidth(z: number, standardError: number): number {\n if (Number.isNaN(z)) {\n return NaN;\n }\n return standardError === 0 ? 0 : z * standardError;\n}\n\nexport interface LinearCIComponents {\n min: number;\n max: number;\n n: number;\n X: number; // mean of x\n SSE: number;\n Sxx: number;\n}\n\n/**\n * Compute basic components used for linear regression confidence / prediction intervals.\n * - scans data to compute min/max of x, n, mean X, SSE and Sxx (sum (xi - X)^2).\n */\nexport function computeLinearCIComponents(\n data: any[],\n x: (d: any) => number,\n y: (d: any) => number,\n predict: (x: number) => number\n): LinearCIComponents {\n // simple local scanner to avoid circular imports\n let min = Infinity;\n let max = -Infinity;\n let n = 0;\n let sumX = 0;\n\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n if (dx < min) {\n min = dx;\n }\n if (dx > max) {\n max = dx;\n }\n n++;\n sumX += dx;\n }\n }\n\n if (n === 0) {\n return { min, max, n, X: 0, SSE: 0, Sxx: 0 };\n }\n\n const X = sumX / n;\n let SSE = 0;\n let Sxx = 0;\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n let dx = x(d);\n let dy = y(d);\n if (!isNil(dx) && (dx = +dx) >= dx && !isNil(dy) && (dy = +dy) >= dy) {\n const r = dy - predict(dx);\n SSE += r * r;\n const dxc = dx - X;\n Sxx += dxc * dxc;\n }\n }\n\n return { min, max, n, X, SSE, Sxx };\n}\n\n/**\n * Compute standard errors for mean and prediction at px using components.\n */\nexport function stdErrorsAt(px: number, comps: LinearCIComponents) {\n const { n, X, Sxx, SSE } = comps;\n const s2 = n > 2 ? SSE / (n - 2) : 0;\n const seMean = Sxx > 0 ? Math.sqrt(s2 * (1 / n + ((px - X) * (px - X)) / Sxx)) : Math.sqrt(s2 / n);\n const sePred = Math.sqrt(s2 * (1 + 1 / n + (Sxx > 0 ? ((px - X) * (px - X)) / Sxx : 0)));\n return { seMean, sePred };\n}\n\nexport default {\n invNorm,\n computeLinearCIComponents,\n stdErrorsAt\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/throttle.js
15
+ */
13
16
  const debounce_1 = __importDefault(require("./debounce")), isObject_1 = __importDefault(require("./isObject"));
14
17
 
15
18
  function throttle(func, wait, options) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/throttle.ts"],"names":[],"mappings":";;;;;AAGA,0DAAkC;AAClC,0DAAkC;AAElC,SAAS,QAAQ,CACf,IAAyB,EACzB,IAAY,EACZ,OAAmD;IAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IACD,IAAI,IAAA,kBAAQ,EAAC,OAAO,CAAC,EAAE;QACrB,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;KAClE;IACD,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,EAAE;QAC1B,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,QAAQ,CAAC","file":"throttle.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n leading,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n"]}
1
+ {"version":3,"sources":["../src/common/throttle.ts"],"names":[],"mappings":";;;;;AAAA;;GAEG;AACH,0DAAkC;AAClC,0DAAkC;AAElC,SAAS,QAAQ,CACf,IAAyB,EACzB,IAAY,EACZ,OAAmD;IAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC9B,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC5C;IACD,IAAI,IAAA,kBAAQ,EAAC,OAAO,CAAC,EAAE;QACrB,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;KAClE;IACD,OAAO,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,EAAE;QAC1B,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;AACL,CAAC;AAED,kBAAe,QAAQ,CAAC","file":"throttle.js","sourcesContent":["/**\n * @see https://github.com/lodash/lodash/blob/master/throttle.js\n */\nimport debounce from './debounce';\nimport isObject from './isObject';\n\nfunction throttle<T, S>(\n func: (...args: T[]) => S,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n): (...args: T[]) => S {\n let leading = true;\n let trailing = true;\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n leading,\n trailing,\n maxWait: wait\n });\n}\n\nexport default throttle;\n"]}
@@ -12,13 +12,32 @@ Object.defineProperty(exports, "__esModule", {
12
12
 
13
13
  const isNil_1 = __importDefault(require("./isNil")), isString_1 = __importDefault(require("./isString")), TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d{1,2})(?::(\d{1,2})(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;
14
14
 
15
+ // eslint-disable-line
15
16
  function toDate(val) {
16
17
  if (val instanceof Date) return val;
17
18
  if ((0, isString_1.default)(val)) {
19
+ // Different browsers parse date in different way, so we parse it manually.
20
+ // Some other issues:
21
+ // new Date('1970-01-01') is UTC,
22
+ // new Date('1970/01/01') and new Date('1970-1-01') is local.
23
+ // See issue #3623
18
24
  const match = TIME_REG.exec(val);
19
- if (!match) return new Date(NaN);
20
- if (!match[8]) return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);
21
- let hour = +match[4] || 0;
25
+ if (!match)
26
+ // return Invalid Date.
27
+ return new Date(NaN);
28
+ // Use local time when no timezone offset specifed.
29
+ if (!match[8])
30
+ // match[n] can only be string or undefined.
31
+ // But take care of '12' + 1 => '121'.
32
+ return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);
33
+ // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,
34
+ // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).
35
+ // For example, system timezone is set as "Time Zone: America/Toronto",
36
+ // then these code will get different result:
37
+ // `new Date(1478411999999).getTimezoneOffset(); // get 240`
38
+ // `new Date(1478412000000).getTimezoneOffset(); // get 300`
39
+ // So we should not use `new Date`, but use `Date.UTC`.
40
+ let hour = +match[4] || 0;
22
41
  return "Z" !== match[8].toUpperCase() && (hour -= +match[8].slice(0, 3)), new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));
23
42
  }
24
43
  return (0, isNil_1.default)(val) ? new Date(NaN) : new Date(Math.round(val));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/toDate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAAkC;AAKlC,MAAM,QAAQ,GACZ,yIAAyI,CAAC;AAE5I,SAAgB,MAAM,CAAC,GAAiB;IACtC,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;SAAM,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE;QAMxB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YAEV,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB;QAGD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAGb,OAAO,IAAI,IAAI,CACb,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CAAC;SACH;QASD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,GAAG,CACN,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,IAAI,EACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CACF,CAAC;KACH;SAAM,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC,CAAC;AAC7C,CAAC;AA1DD,wBA0DC","file":"toDate.js","sourcesContent":["import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\n // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n"]}
1
+ {"version":3,"sources":["../src/common/toDate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAAkC;AAIlC,6CAA6C;AAC7C,MAAM,QAAQ,GACZ,yIAAyI,CAAC,CAAC,sBAAsB;AAEnK,SAAgB,MAAM,CAAC,GAAiB;IACtC,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;SAAM,IAAI,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE;QACxB,2EAA2E;QAC3E,qBAAqB;QACrB,iCAAiC;QACjC,6DAA6D;QAC7D,kBAAkB;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,EAAE;YACV,uBAAuB;YACvB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB;QAED,mDAAmD;QACnD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACb,4CAA4C;YAC5C,sCAAsC;YACtC,OAAO,IAAI,IAAI,CACb,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CAAC;SACH;QACD,8EAA8E;QAC9E,wEAAwE;QACxE,uEAAuE;QACvE,6CAA6C;QAC7C,6DAA6D;QAC7D,6DAA6D;QAC7D,uDAAuD;QAEvD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,GAAG,CACN,CAAC,KAAK,CAAC,CAAC,CAAC,EACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EACpB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,IAAI,EACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAChB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,CACF,CAAC;KACH;SAAM,IAAI,IAAA,eAAK,EAAC,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;KACtB;IAED,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC,CAAC;AAC7C,CAAC;AA1DD,wBA0DC","file":"toDate.js","sourcesContent":["import isNil from './isNil';\nimport isString from './isString';\n\nexport type DateLikeType = number | string | Date;\n\n// eslint-disable-next-line no-useless-escape\nconst TIME_REG =\n /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // eslint-disable-line\n\nexport function toDate(val: DateLikeType): Date {\n if (val instanceof Date) {\n return val;\n } else if (isString(val)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n const match = TIME_REG.exec(val);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n\n // Use local time when no timezone offset specifed.\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n +match[4] || 0,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n );\n }\n // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n\n let hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(\n Date.UTC(\n +match[1],\n +(match[2] || 1) - 1,\n +match[3] || 1,\n hour,\n +(match[5] || 0),\n +match[6] || 0,\n match[7] ? +match[7].substring(0, 3) : 0\n )\n );\n } else if (isNil(val)) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(val as number));\n}\n"]}
@@ -1,2 +1,9 @@
1
+ /**
2
+ * 生成uuid字符串.
3
+ * 参考https://github.com/yangjunning/issues/issues/56
4
+ * @param len
5
+ * @param radix
6
+ * @returns
7
+ */
1
8
  declare const uuid: (len: number, radix: number) => string;
2
9
  export default uuid;
@@ -4,11 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
6
 
7
+ // TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了
8
+ /**
9
+ * 生成uuid字符串.
10
+ * 参考https://github.com/yangjunning/issues/issues/56
11
+ * @param len
12
+ * @param radix
13
+ * @returns
14
+ */
7
15
  const uuid = (len, radix) => {
8
16
  const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), uuid = [];
9
17
  let i;
10
- if (radix = radix || chars.length, len) for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; else {
18
+ if (radix = radix || chars.length, len)
19
+ // Compact form
20
+ for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; else {
21
+ // rfc4122, version 4 form
11
22
  let r;
23
+ // rfc4122 requires these characters
24
+ // Fill in random data. At i==19 set the high bits of clock sequence as
25
+ // per rfc4122, sec. 4.1.5
12
26
  for (uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-", uuid[14] = "4", i = 0; i < 36; i++) uuid[i] || (r = 0 | 16 * Math.random(),
13
27
  uuid[i] = chars[19 === i ? 3 & r | 8 : r]);
14
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/uuid.ts"],"names":[],"mappings":";;AAQA,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,gEAAgE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC;IACN,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAE9B,IAAI,GAAG,EAAE;QAEP,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9C;KACF;SAAM;QAEL,IAAI,CAAC,CAAC;QAGN,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAIf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACZ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;SACF;KACF;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC","file":"uuid.js","sourcesContent":["// TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了\n/**\n * 生成uuid字符串.\n * 参考https://github.com/yangjunning/issues/issues/56\n * @param len\n * @param radix\n * @returns\n */\nconst uuid = (len: number, radix: number): string => {\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n const uuid = [];\n let i;\n radix = radix || chars.length;\n\n if (len) {\n // Compact form\n for (i = 0; i < len; i++) {\n uuid[i] = chars[0 | (Math.random() * radix)];\n }\n } else {\n // rfc4122, version 4 form\n let r;\n\n // rfc4122 requires these characters\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n uuid[14] = '4';\n\n // Fill in random data. At i==19 set the high bits of clock sequence as\n // per rfc4122, sec. 4.1.5\n for (i = 0; i < 36; i++) {\n if (!uuid[i]) {\n r = 0 | (Math.random() * 16);\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\n }\n }\n }\n\n return uuid.join('');\n};\n\nexport default uuid;\n"]}
1
+ {"version":3,"sources":["../src/common/uuid.ts"],"names":[],"mappings":";;AAAA,+CAA+C;AAC/C;;;;;;GAMG;AACH,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,gEAAgE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,CAAC;IACN,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAE9B,IAAI,GAAG,EAAE;QACP,eAAe;QACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9C;KACF;SAAM;QACL,0BAA0B;QAC1B,IAAI,CAAC,CAAC;QAEN,oCAAoC;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAEf,wEAAwE;QACxE,0BAA0B;QAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACZ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;SACF;KACF;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC","file":"uuid.js","sourcesContent":["// TODO: 性能不是很好,需要优化,后续升级到最新版本的 canvas 之后就可以删除了\n/**\n * 生成uuid字符串.\n * 参考https://github.com/yangjunning/issues/issues/56\n * @param len\n * @param radix\n * @returns\n */\nconst uuid = (len: number, radix: number): string => {\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\n const uuid = [];\n let i;\n radix = radix || chars.length;\n\n if (len) {\n // Compact form\n for (i = 0; i < len; i++) {\n uuid[i] = chars[0 | (Math.random() * radix)];\n }\n } else {\n // rfc4122, version 4 form\n let r;\n\n // rfc4122 requires these characters\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\n uuid[14] = '4';\n\n // Fill in random data. At i==19 set the high bits of clock sequence as\n // per rfc4122, sec. 4.1.5\n for (i = 0; i < 36; i++) {\n if (!uuid[i]) {\n r = 0 | (Math.random() * 16);\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\n }\n }\n }\n\n return uuid.join('');\n};\n\nexport default uuid;\n"]}