vscroll 1.5.3 → 1.5.5

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 (335) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +283 -273
  3. package/dist/bundles/vscroll.esm5.js +5558 -5525
  4. package/dist/bundles/vscroll.esm5.js.map +1 -1
  5. package/dist/bundles/vscroll.esm5.min.js +2 -2
  6. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.js +5045 -5015
  8. package/dist/bundles/vscroll.esm6.js.map +1 -1
  9. package/dist/bundles/vscroll.esm6.min.js +2 -2
  10. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.js +5559 -5526
  12. package/dist/bundles/vscroll.umd.js.map +1 -1
  13. package/dist/bundles/vscroll.umd.min.js +2 -2
  14. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  15. package/dist/esm2015/classes/adapter/context.js +43 -43
  16. package/dist/esm2015/classes/adapter/context.js.map +1 -1
  17. package/dist/esm2015/classes/adapter/props.js +268 -268
  18. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  19. package/dist/esm2015/classes/adapter/wanted.js +28 -28
  20. package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
  21. package/dist/esm2015/classes/adapter.js +455 -442
  22. package/dist/esm2015/classes/adapter.js.map +1 -1
  23. package/dist/esm2015/classes/buffer/cache.js +246 -246
  24. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  25. package/dist/esm2015/classes/buffer/checkCall.js +48 -48
  26. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  27. package/dist/esm2015/classes/buffer/defaultSize.js +127 -127
  28. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  29. package/dist/esm2015/classes/buffer.js +342 -342
  30. package/dist/esm2015/classes/buffer.js.map +1 -1
  31. package/dist/esm2015/classes/datasource.js +28 -28
  32. package/dist/esm2015/classes/domRoutines.js +166 -166
  33. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  34. package/dist/esm2015/classes/item.js +61 -61
  35. package/dist/esm2015/classes/item.js.map +1 -1
  36. package/dist/esm2015/classes/logger.js +186 -186
  37. package/dist/esm2015/classes/logger.js.map +1 -1
  38. package/dist/esm2015/classes/paddings.js +72 -72
  39. package/dist/esm2015/classes/reactive.js +54 -54
  40. package/dist/esm2015/classes/reactive.js.map +1 -1
  41. package/dist/esm2015/classes/settings.js +39 -39
  42. package/dist/esm2015/classes/settings.js.map +1 -1
  43. package/dist/esm2015/classes/state/clip.js +16 -16
  44. package/dist/esm2015/classes/state/clip.js.map +1 -1
  45. package/dist/esm2015/classes/state/cycle.js +60 -60
  46. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  47. package/dist/esm2015/classes/state/fetch.js +122 -122
  48. package/dist/esm2015/classes/state/fetch.js.map +1 -1
  49. package/dist/esm2015/classes/state/render.js +14 -14
  50. package/dist/esm2015/classes/state/render.js.map +1 -1
  51. package/dist/esm2015/classes/state/scroll.js +30 -30
  52. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  53. package/dist/esm2015/classes/state.js +59 -59
  54. package/dist/esm2015/classes/viewport.js +72 -72
  55. package/dist/esm2015/classes/viewport.js.map +1 -1
  56. package/dist/esm2015/index.js +8 -8
  57. package/dist/esm2015/index.js.map +1 -1
  58. package/dist/esm2015/inputs/adapter.js +230 -230
  59. package/dist/esm2015/inputs/adapter.js.map +1 -1
  60. package/dist/esm2015/inputs/common.js +11 -11
  61. package/dist/esm2015/inputs/common.js.map +1 -1
  62. package/dist/esm2015/inputs/datasource.js +20 -20
  63. package/dist/esm2015/inputs/datasource.js.map +1 -1
  64. package/dist/esm2015/inputs/index.js +6 -6
  65. package/dist/esm2015/inputs/index.js.map +1 -1
  66. package/dist/esm2015/inputs/settings.js +146 -146
  67. package/dist/esm2015/inputs/settings.js.map +1 -1
  68. package/dist/esm2015/inputs/validation.js +374 -374
  69. package/dist/esm2015/inputs/validation.js.map +1 -1
  70. package/dist/esm2015/interfaces/adapter.js +1 -1
  71. package/dist/esm2015/interfaces/datasource.js +1 -1
  72. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  73. package/dist/esm2015/interfaces/index.js +1 -1
  74. package/dist/esm2015/interfaces/index.js.map +1 -1
  75. package/dist/esm2015/interfaces/item.js +1 -1
  76. package/dist/esm2015/interfaces/item.js.map +1 -1
  77. package/dist/esm2015/interfaces/process.js +1 -1
  78. package/dist/esm2015/interfaces/routines.js +1 -1
  79. package/dist/esm2015/interfaces/routines.js.map +1 -1
  80. package/dist/esm2015/interfaces/settings.js +1 -1
  81. package/dist/esm2015/interfaces/state.js +1 -1
  82. package/dist/esm2015/interfaces/validation.js +1 -1
  83. package/dist/esm2015/interfaces/validation.js.map +1 -1
  84. package/dist/esm2015/interfaces/workflow.js +1 -1
  85. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  86. package/dist/esm2015/processes/adapter/append.js +35 -35
  87. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  88. package/dist/esm2015/processes/adapter/check.js +32 -32
  89. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  90. package/dist/esm2015/processes/adapter/clip.js +12 -12
  91. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  92. package/dist/esm2015/processes/adapter/fix.js +77 -77
  93. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  94. package/dist/esm2015/processes/adapter/insert.js +73 -73
  95. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  96. package/dist/esm2015/processes/adapter/reload.js +19 -20
  97. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  98. package/dist/esm2015/processes/adapter/remove.js +102 -102
  99. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  100. package/dist/esm2015/processes/adapter/replace.js +39 -39
  101. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  102. package/dist/esm2015/processes/adapter/reset.js +35 -35
  103. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  104. package/dist/esm2015/processes/adapter/update.js +43 -43
  105. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  106. package/dist/esm2015/processes/adjust.js +141 -141
  107. package/dist/esm2015/processes/clip.js +49 -49
  108. package/dist/esm2015/processes/end.js +52 -52
  109. package/dist/esm2015/processes/end.js.map +1 -1
  110. package/dist/esm2015/processes/fetch.js +91 -90
  111. package/dist/esm2015/processes/fetch.js.map +1 -1
  112. package/dist/esm2015/processes/index.js +23 -23
  113. package/dist/esm2015/processes/init.js +14 -14
  114. package/dist/esm2015/processes/init.js.map +1 -1
  115. package/dist/esm2015/processes/misc/base.js +30 -30
  116. package/dist/esm2015/processes/misc/base.js.map +1 -1
  117. package/dist/esm2015/processes/misc/enums.js +35 -35
  118. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  119. package/dist/esm2015/processes/misc/index.js +2 -2
  120. package/dist/esm2015/processes/misc/index.js.map +1 -1
  121. package/dist/esm2015/processes/postFetch.js +64 -64
  122. package/dist/esm2015/processes/postFetch.js.map +1 -1
  123. package/dist/esm2015/processes/preClip.js +85 -85
  124. package/dist/esm2015/processes/preClip.js.map +1 -1
  125. package/dist/esm2015/processes/preFetch.js +240 -240
  126. package/dist/esm2015/processes/preFetch.js.map +1 -1
  127. package/dist/esm2015/processes/render.js +54 -54
  128. package/dist/esm2015/processes/render.js.map +1 -1
  129. package/dist/esm2015/processes/scroll.js +97 -97
  130. package/dist/esm2015/processes/scroll.js.map +1 -1
  131. package/dist/esm2015/processes/start.js +11 -11
  132. package/dist/esm2015/processes/start.js.map +1 -1
  133. package/dist/esm2015/scroller.js +76 -69
  134. package/dist/esm2015/scroller.js.map +1 -1
  135. package/dist/esm2015/version.js +4 -4
  136. package/dist/esm2015/version.js.map +1 -1
  137. package/dist/esm2015/workflow-transducer.js +210 -210
  138. package/dist/esm2015/workflow-transducer.js.map +1 -1
  139. package/dist/esm2015/workflow.js +161 -151
  140. package/dist/esm2015/workflow.js.map +1 -1
  141. package/dist/esm5/classes/adapter/context.js +50 -50
  142. package/dist/esm5/classes/adapter/context.js.map +1 -1
  143. package/dist/esm5/classes/adapter/props.js +268 -268
  144. package/dist/esm5/classes/adapter/props.js.map +1 -1
  145. package/dist/esm5/classes/adapter/wanted.js +29 -29
  146. package/dist/esm5/classes/adapter/wanted.js.map +1 -1
  147. package/dist/esm5/classes/adapter.js +504 -490
  148. package/dist/esm5/classes/adapter.js.map +1 -1
  149. package/dist/esm5/classes/buffer/cache.js +260 -260
  150. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  151. package/dist/esm5/classes/buffer/checkCall.js +56 -56
  152. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  153. package/dist/esm5/classes/buffer/defaultSize.js +145 -145
  154. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  155. package/dist/esm5/classes/buffer.js +409 -409
  156. package/dist/esm5/classes/buffer.js.map +1 -1
  157. package/dist/esm5/classes/datasource.js +37 -37
  158. package/dist/esm5/classes/domRoutines.js +182 -182
  159. package/dist/esm5/classes/domRoutines.js.map +1 -1
  160. package/dist/esm5/classes/item.js +76 -76
  161. package/dist/esm5/classes/item.js.map +1 -1
  162. package/dist/esm5/classes/logger.js +210 -210
  163. package/dist/esm5/classes/logger.js.map +1 -1
  164. package/dist/esm5/classes/paddings.js +80 -80
  165. package/dist/esm5/classes/reactive.js +69 -69
  166. package/dist/esm5/classes/reactive.js.map +1 -1
  167. package/dist/esm5/classes/settings.js +47 -47
  168. package/dist/esm5/classes/settings.js.map +1 -1
  169. package/dist/esm5/classes/state/clip.js +22 -22
  170. package/dist/esm5/classes/state/clip.js.map +1 -1
  171. package/dist/esm5/classes/state/cycle.js +75 -75
  172. package/dist/esm5/classes/state/cycle.js.map +1 -1
  173. package/dist/esm5/classes/state/fetch.js +148 -148
  174. package/dist/esm5/classes/state/fetch.js.map +1 -1
  175. package/dist/esm5/classes/state/render.js +20 -20
  176. package/dist/esm5/classes/state/render.js.map +1 -1
  177. package/dist/esm5/classes/state/scroll.js +32 -32
  178. package/dist/esm5/classes/state/scroll.js.map +1 -1
  179. package/dist/esm5/classes/state.js +66 -66
  180. package/dist/esm5/classes/viewport.js +79 -79
  181. package/dist/esm5/classes/viewport.js.map +1 -1
  182. package/dist/esm5/index.js +8 -8
  183. package/dist/esm5/index.js.map +1 -1
  184. package/dist/esm5/inputs/adapter.js +231 -231
  185. package/dist/esm5/inputs/adapter.js.map +1 -1
  186. package/dist/esm5/inputs/common.js +11 -11
  187. package/dist/esm5/inputs/common.js.map +1 -1
  188. package/dist/esm5/inputs/datasource.js +21 -21
  189. package/dist/esm5/inputs/datasource.js.map +1 -1
  190. package/dist/esm5/inputs/index.js +6 -6
  191. package/dist/esm5/inputs/index.js.map +1 -1
  192. package/dist/esm5/inputs/settings.js +147 -147
  193. package/dist/esm5/inputs/settings.js.map +1 -1
  194. package/dist/esm5/inputs/validation.js +396 -396
  195. package/dist/esm5/inputs/validation.js.map +1 -1
  196. package/dist/esm5/interfaces/adapter.js +1 -1
  197. package/dist/esm5/interfaces/datasource.js +1 -1
  198. package/dist/esm5/interfaces/datasource.js.map +1 -1
  199. package/dist/esm5/interfaces/index.js +1 -1
  200. package/dist/esm5/interfaces/index.js.map +1 -1
  201. package/dist/esm5/interfaces/item.js +1 -1
  202. package/dist/esm5/interfaces/item.js.map +1 -1
  203. package/dist/esm5/interfaces/process.js +1 -1
  204. package/dist/esm5/interfaces/routines.js +1 -1
  205. package/dist/esm5/interfaces/routines.js.map +1 -1
  206. package/dist/esm5/interfaces/settings.js +1 -1
  207. package/dist/esm5/interfaces/state.js +1 -1
  208. package/dist/esm5/interfaces/validation.js +1 -1
  209. package/dist/esm5/interfaces/validation.js.map +1 -1
  210. package/dist/esm5/interfaces/workflow.js +1 -1
  211. package/dist/esm5/interfaces/workflow.js.map +1 -1
  212. package/dist/esm5/processes/adapter/append.js +43 -43
  213. package/dist/esm5/processes/adapter/append.js.map +1 -1
  214. package/dist/esm5/processes/adapter/check.js +39 -39
  215. package/dist/esm5/processes/adapter/check.js.map +1 -1
  216. package/dist/esm5/processes/adapter/clip.js +19 -19
  217. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  218. package/dist/esm5/processes/adapter/fix.js +89 -89
  219. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  220. package/dist/esm5/processes/adapter/insert.js +81 -81
  221. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  222. package/dist/esm5/processes/adapter/reload.js +26 -27
  223. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  224. package/dist/esm5/processes/adapter/remove.js +115 -115
  225. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  226. package/dist/esm5/processes/adapter/replace.js +47 -47
  227. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  228. package/dist/esm5/processes/adapter/reset.js +42 -42
  229. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  230. package/dist/esm5/processes/adapter/update.js +59 -59
  231. package/dist/esm5/processes/adapter/update.js.map +1 -1
  232. package/dist/esm5/processes/adjust.js +152 -152
  233. package/dist/esm5/processes/clip.js +60 -60
  234. package/dist/esm5/processes/end.js +63 -63
  235. package/dist/esm5/processes/end.js.map +1 -1
  236. package/dist/esm5/processes/fetch.js +102 -101
  237. package/dist/esm5/processes/fetch.js.map +1 -1
  238. package/dist/esm5/processes/index.js +23 -23
  239. package/dist/esm5/processes/init.js +21 -21
  240. package/dist/esm5/processes/init.js.map +1 -1
  241. package/dist/esm5/processes/misc/base.js +44 -44
  242. package/dist/esm5/processes/misc/base.js.map +1 -1
  243. package/dist/esm5/processes/misc/enums.js +35 -35
  244. package/dist/esm5/processes/misc/enums.js.map +1 -1
  245. package/dist/esm5/processes/misc/index.js +2 -2
  246. package/dist/esm5/processes/misc/index.js.map +1 -1
  247. package/dist/esm5/processes/postFetch.js +73 -73
  248. package/dist/esm5/processes/postFetch.js.map +1 -1
  249. package/dist/esm5/processes/preClip.js +94 -94
  250. package/dist/esm5/processes/preClip.js.map +1 -1
  251. package/dist/esm5/processes/preFetch.js +247 -247
  252. package/dist/esm5/processes/preFetch.js.map +1 -1
  253. package/dist/esm5/processes/render.js +63 -63
  254. package/dist/esm5/processes/render.js.map +1 -1
  255. package/dist/esm5/processes/scroll.js +107 -107
  256. package/dist/esm5/processes/scroll.js.map +1 -1
  257. package/dist/esm5/processes/start.js +18 -18
  258. package/dist/esm5/processes/start.js.map +1 -1
  259. package/dist/esm5/scroller.js +82 -73
  260. package/dist/esm5/scroller.js.map +1 -1
  261. package/dist/esm5/version.js +4 -4
  262. package/dist/esm5/version.js.map +1 -1
  263. package/dist/esm5/workflow-transducer.js +212 -212
  264. package/dist/esm5/workflow-transducer.js.map +1 -1
  265. package/dist/esm5/workflow.js +186 -176
  266. package/dist/esm5/workflow.js.map +1 -1
  267. package/dist/typings/classes/adapter/context.d.ts +4 -4
  268. package/dist/typings/classes/adapter/props.d.ts +47 -47
  269. package/dist/typings/classes/adapter/wanted.d.ts +14 -14
  270. package/dist/typings/classes/adapter.d.ts +74 -64
  271. package/dist/typings/classes/buffer/cache.d.ts +95 -95
  272. package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
  273. package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
  274. package/dist/typings/classes/buffer.d.ts +64 -64
  275. package/dist/typings/classes/datasource.d.ts +27 -27
  276. package/dist/typings/classes/domRoutines.d.ts +33 -33
  277. package/dist/typings/classes/item.d.ts +28 -28
  278. package/dist/typings/classes/logger.d.ts +28 -28
  279. package/dist/typings/classes/paddings.d.ts +22 -22
  280. package/dist/typings/classes/reactive.d.ts +21 -21
  281. package/dist/typings/classes/settings.d.ts +119 -119
  282. package/dist/typings/classes/state/clip.d.ts +9 -9
  283. package/dist/typings/classes/state/cycle.d.ts +29 -29
  284. package/dist/typings/classes/state/fetch.d.ts +62 -62
  285. package/dist/typings/classes/state/render.d.ts +9 -9
  286. package/dist/typings/classes/state/scroll.d.ts +16 -16
  287. package/dist/typings/classes/state.d.ts +27 -27
  288. package/dist/typings/classes/viewport.d.ts +32 -32
  289. package/dist/typings/index.d.ts +9 -9
  290. package/dist/typings/inputs/adapter.d.ts +5 -5
  291. package/dist/typings/inputs/common.d.ts +9 -9
  292. package/dist/typings/inputs/datasource.d.ts +7 -7
  293. package/dist/typings/inputs/index.d.ts +6 -6
  294. package/dist/typings/inputs/settings.d.ts +41 -41
  295. package/dist/typings/inputs/validation.d.ts +83 -83
  296. package/dist/typings/interfaces/adapter.d.ts +156 -156
  297. package/dist/typings/interfaces/datasource.d.ts +26 -26
  298. package/dist/typings/interfaces/index.d.ts +10 -10
  299. package/dist/typings/interfaces/item.d.ts +8 -8
  300. package/dist/typings/interfaces/process.d.ts +35 -35
  301. package/dist/typings/interfaces/routines.d.ts +157 -157
  302. package/dist/typings/interfaces/settings.d.ts +31 -31
  303. package/dist/typings/interfaces/state.d.ts +22 -22
  304. package/dist/typings/interfaces/validation.d.ts +33 -33
  305. package/dist/typings/interfaces/workflow.d.ts +53 -53
  306. package/dist/typings/processes/adapter/append.d.ts +14 -14
  307. package/dist/typings/processes/adapter/check.d.ts +6 -6
  308. package/dist/typings/processes/adapter/clip.d.ts +7 -7
  309. package/dist/typings/processes/adapter/fix.d.ts +13 -13
  310. package/dist/typings/processes/adapter/insert.d.ts +11 -11
  311. package/dist/typings/processes/adapter/reload.d.ts +6 -6
  312. package/dist/typings/processes/adapter/remove.d.ts +11 -11
  313. package/dist/typings/processes/adapter/replace.d.ts +8 -8
  314. package/dist/typings/processes/adapter/reset.d.ts +7 -7
  315. package/dist/typings/processes/adapter/update.d.ts +8 -8
  316. package/dist/typings/processes/adjust.d.ts +10 -10
  317. package/dist/typings/processes/clip.d.ts +7 -7
  318. package/dist/typings/processes/end.d.ts +10 -10
  319. package/dist/typings/processes/fetch.d.ts +18 -18
  320. package/dist/typings/processes/index.d.ts +23 -23
  321. package/dist/typings/processes/init.d.ts +7 -7
  322. package/dist/typings/processes/misc/base.d.ts +4 -4
  323. package/dist/typings/processes/misc/enums.d.ts +32 -32
  324. package/dist/typings/processes/misc/index.d.ts +2 -2
  325. package/dist/typings/processes/postFetch.d.ts +8 -8
  326. package/dist/typings/processes/preClip.d.ts +12 -12
  327. package/dist/typings/processes/preFetch.d.ts +17 -17
  328. package/dist/typings/processes/render.d.ts +9 -9
  329. package/dist/typings/processes/scroll.d.ts +13 -13
  330. package/dist/typings/processes/start.d.ts +6 -6
  331. package/dist/typings/scroller.d.ts +26 -26
  332. package/dist/typings/version.d.ts +5 -5
  333. package/dist/typings/workflow-transducer.d.ts +2 -2
  334. package/dist/typings/workflow.d.ts +29 -28
  335. package/package.json +68 -68
@@ -1,410 +1,410 @@
1
- import { __read, __spreadArray } from "tslib";
2
- import { Cache } from './buffer/cache';
3
- import { CheckBufferCall } from './buffer/checkCall';
4
- import { Reactive } from './reactive';
5
- import { Direction } from '../inputs/index';
6
- var Buffer = /** @class */ (function () {
7
- function Buffer(settings, onDataChanged, logger) {
8
- this._items = [];
9
- this.logger = logger;
10
- this.changeItems = onDataChanged;
11
- this.bof = new Reactive(false);
12
- this.eof = new Reactive(false);
13
- this.cache = new Cache(settings, logger);
14
- this.checkCall = new CheckBufferCall(this, logger);
15
- this.startIndexUser = settings.startIndex;
16
- this.minIndexUser = settings.minIndex;
17
- this.maxIndexUser = settings.maxIndex;
18
- this.reset(true);
19
- }
20
- Buffer.prototype.dispose = function () {
21
- this.bof.dispose();
22
- this.eof.dispose();
23
- this._items.forEach(function (item) { return item.dispose(); });
24
- this._items = [];
25
- };
26
- Buffer.prototype.reset = function (force, startIndex) {
27
- this.items.forEach(function (item) { return item.hide(); });
28
- this.pristine = true;
29
- this.items = [];
30
- this.cache.reset(force);
31
- this.absMinIndex = this.minIndexUser;
32
- this.absMaxIndex = this.maxIndexUser;
33
- this.setCurrentStartIndex(startIndex);
34
- this.bof.set(false);
35
- this.eof.set(false);
36
- this.pristine = false;
37
- };
38
- Buffer.prototype.setCurrentStartIndex = function (newStartIndex) {
39
- var min = this.minIndexUser;
40
- var max = this.maxIndexUser;
41
- var start = this.startIndexUser;
42
- var index = Number(newStartIndex);
43
- if (Number.isNaN(index)) {
44
- this.logger.log(function () { return "fallback startIndex to settings.startIndex (".concat(start, ")"); });
45
- index = start;
46
- }
47
- if (index < min) {
48
- this.logger.log(function () { return "setting startIndex to settings.minIndex (".concat(min, ") because ").concat(index, " < ").concat(min); });
49
- index = min;
50
- }
51
- if (index > max) {
52
- this.logger.log(function () { return "setting startIndex to settings.maxIndex (".concat(max, ") because ").concat(index, " > ").concat(max); });
53
- index = max;
54
- }
55
- this.startIndex = index;
56
- };
57
- Object.defineProperty(Buffer.prototype, "items", {
58
- get: function () {
59
- return this._items;
60
- },
61
- set: function (items) {
62
- this._items = items;
63
- this.changeItems(items);
64
- if (!this.pristine) {
65
- this.checkBOF();
66
- this.checkEOF();
67
- }
68
- },
69
- enumerable: false,
70
- configurable: true
71
- });
72
- Object.defineProperty(Buffer.prototype, "absMinIndex", {
73
- get: function () {
74
- return this._absMinIndex;
75
- },
76
- set: function (value) {
77
- if (this._absMinIndex !== value) {
78
- this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;
79
- }
80
- if (!this.pristine) {
81
- this.checkBOF();
82
- }
83
- },
84
- enumerable: false,
85
- configurable: true
86
- });
87
- Object.defineProperty(Buffer.prototype, "absMaxIndex", {
88
- get: function () {
89
- return this._absMaxIndex;
90
- },
91
- set: function (value) {
92
- if (this._absMaxIndex !== value) {
93
- this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;
94
- }
95
- if (!this.pristine) {
96
- this.checkEOF();
97
- }
98
- },
99
- enumerable: false,
100
- configurable: true
101
- });
102
- Buffer.prototype.checkBOF = function () {
103
- // since bof has no setter, need to call checkBOF() on items and absMinIndex change
104
- var bof = this.items.length
105
- ? (this.items[0].$index === this.absMinIndex)
106
- : isFinite(this.absMinIndex);
107
- this.bof.set(bof);
108
- };
109
- Buffer.prototype.checkEOF = function () {
110
- // since eof has no setter, need to call checkEOF() on items and absMaxIndex change
111
- var eof = this.items.length
112
- ? (this.items[this.items.length - 1].$index === this.absMaxIndex)
113
- : isFinite(this.absMaxIndex);
114
- this.eof.set(eof);
115
- };
116
- Object.defineProperty(Buffer.prototype, "size", {
117
- get: function () {
118
- return this._items.length;
119
- },
120
- enumerable: false,
121
- configurable: true
122
- });
123
- Object.defineProperty(Buffer.prototype, "cacheSize", {
124
- get: function () {
125
- return this.cache.size;
126
- },
127
- enumerable: false,
128
- configurable: true
129
- });
130
- Object.defineProperty(Buffer.prototype, "defaultSize", {
131
- get: function () {
132
- return this.cache.getDefaultSize();
133
- },
134
- enumerable: false,
135
- configurable: true
136
- });
137
- Object.defineProperty(Buffer.prototype, "minIndex", {
138
- get: function () {
139
- return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;
140
- },
141
- enumerable: false,
142
- configurable: true
143
- });
144
- Object.defineProperty(Buffer.prototype, "maxIndex", {
145
- get: function () {
146
- return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;
147
- },
148
- enumerable: false,
149
- configurable: true
150
- });
151
- Object.defineProperty(Buffer.prototype, "firstIndex", {
152
- get: function () {
153
- return this.items.length ? this.items[0].$index : NaN;
154
- },
155
- enumerable: false,
156
- configurable: true
157
- });
158
- Object.defineProperty(Buffer.prototype, "lastIndex", {
159
- get: function () {
160
- return this.items.length ? this.items[this.items.length - 1].$index : NaN;
161
- },
162
- enumerable: false,
163
- configurable: true
164
- });
165
- Object.defineProperty(Buffer.prototype, "finiteAbsMinIndex", {
166
- get: function () {
167
- return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;
168
- },
169
- enumerable: false,
170
- configurable: true
171
- });
172
- Object.defineProperty(Buffer.prototype, "finiteAbsMaxIndex", {
173
- get: function () {
174
- return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;
175
- },
176
- enumerable: false,
177
- configurable: true
178
- });
179
- Buffer.prototype.get = function ($index) {
180
- return this.items.find(function (item) { return item.$index === $index; });
181
- };
182
- Buffer.prototype.setItems = function (items) {
183
- if (!this.items.length) {
184
- this.items = __spreadArray([], __read(items), false);
185
- }
186
- else if (this.items[0].$index > items[items.length - 1].$index) {
187
- this.items = __spreadArray(__spreadArray([], __read(items), false), __read(this.items), false);
188
- }
189
- else if (items[0].$index > this.items[this.items.length - 1].$index) {
190
- this.items = __spreadArray(__spreadArray([], __read(this.items), false), __read(items), false);
191
- }
192
- else {
193
- return false;
194
- }
195
- return true;
196
- };
197
- Buffer.prototype.clip = function () {
198
- this.items = this.items.filter(function (_a) {
199
- var toRemove = _a.toRemove;
200
- return !toRemove;
201
- });
202
- };
203
- Buffer.prototype.getIndexToInsert = function (predicate, before, after) {
204
- return this.checkCall.insertInBuffer(predicate, before, after);
205
- };
206
- Buffer.prototype.shiftExtremum = function (amount, fixRight) {
207
- if (!fixRight) {
208
- this.absMaxIndex += amount;
209
- }
210
- else {
211
- this.absMinIndex -= amount;
212
- this.startIndex -= amount;
213
- }
214
- if (this.startIndex > this.absMaxIndex) {
215
- this.startIndex = this.absMaxIndex;
216
- }
217
- else if (this.startIndex < this.absMinIndex) {
218
- this.startIndex = this.absMinIndex;
219
- }
220
- };
221
- Buffer.prototype.insertVirtually = function (items, index, direction, fixRight) {
222
- if (!this.checkCall.insertVirtual(items, index, direction)) {
223
- return false;
224
- }
225
- var shift = 0;
226
- if (index <= this.firstIndex && !fixRight) {
227
- shift = items.length;
228
- }
229
- else if (index >= this.lastIndex && fixRight) {
230
- shift = -items.length;
231
- }
232
- if (shift) {
233
- this.items.forEach(function (item) { return item.updateIndex(item.$index + shift); });
234
- this.cache.insertItems(items, index, direction, fixRight);
235
- this.items = __spreadArray([], __read(this.items), false);
236
- }
237
- this.shiftExtremum(items.length, fixRight);
238
- return true;
239
- };
240
- Buffer.prototype.removeVirtually = function (indexes, fixRight) {
241
- var length = this.items.length;
242
- var shifted = false;
243
- var _loop_1 = function (i) {
244
- var item = this_1.items[i];
245
- var diff = indexes.reduce(function (acc, index) { return acc + (fixRight
246
- ? (item.$index < index ? 1 : 0)
247
- : (item.$index > index ? -1 : 0)); }, 0);
248
- shifted = shifted || !!diff;
249
- item.updateIndex(item.$index + diff);
250
- };
251
- var this_1 = this;
252
- for (var i = fixRight ? length - 1 : 0; fixRight ? i >= 0 : i < length; fixRight ? i-- : i++) {
253
- _loop_1(i);
254
- }
255
- this.shiftExtremum(-indexes.length, fixRight);
256
- if (shifted) {
257
- this.items = __spreadArray([], __read(this.items), false);
258
- }
259
- this.cache.removeItems(indexes, fixRight);
260
- };
261
- Buffer.prototype.fillEmpty = function (items, beforeIndex, afterIndex, fixRight, generator) {
262
- if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {
263
- return false;
264
- }
265
- var before = Number.isInteger(beforeIndex);
266
- var index = (before ? beforeIndex : afterIndex);
267
- var shift = (fixRight ? items.length : (before ? 1 : 0));
268
- this.items = items.map(function (data, i) {
269
- return generator(index + i + (!before ? 1 : 0) - shift, data);
270
- });
271
- this._absMinIndex = this.items[0].$index;
272
- this._absMaxIndex = this.items[this.size - 1].$index;
273
- if (this.startIndex <= this.absMinIndex) {
274
- this.startIndex = this.absMinIndex;
275
- }
276
- else if (this.startIndex > this.absMaxIndex) {
277
- this.startIndex = this.absMaxIndex;
278
- }
279
- return true;
280
- };
281
- Buffer.prototype.updateItems = function (predicate, generator, indexToTrack, fixRight) {
282
- if (!this.size || Number.isNaN(this.firstIndex)) {
283
- return { trackedIndex: NaN, toRemove: [] };
284
- }
285
- var trackedIndex = indexToTrack;
286
- var index = fixRight ? this.lastIndex : this.firstIndex;
287
- var items = [];
288
- var diff = fixRight ? -1 : 1;
289
- var limit = this.size - 1;
290
- var beforeMap = new Map(); // need to persist original $indexes
291
- var updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];
292
- var _loop_2 = function (i) {
293
- var item = this_2.items[i];
294
- beforeMap.set(item.$index, item);
295
- var result = predicate(item);
296
- // if predicate result is falsy or empty array -> delete
297
- if (!result || (Array.isArray(result) && !result.length)) {
298
- item.toRemove = true;
299
- trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);
300
- this_2.shiftExtremum(-1, fixRight);
301
- return "continue";
302
- }
303
- // if predicate result is truthy but not array -> leave
304
- if (!Array.isArray(result)) {
305
- item.updateIndex(index);
306
- updateArray.call(items, item);
307
- index += diff;
308
- return "continue";
309
- }
310
- // if predicate result is non-empty array -> insert/replace
311
- if (item.$index < indexToTrack) {
312
- trackedIndex += fixRight ? 0 : result.length - 1;
313
- }
314
- else if (item.$index > indexToTrack) {
315
- trackedIndex += fixRight ? 1 - result.length : 0;
316
- }
317
- var toRemove_1 = true;
318
- var newItems = [];
319
- (fixRight ? __spreadArray([], __read(result), false).reverse() : result).forEach(function (data, i) {
320
- var newItem;
321
- if (item.data === data) {
322
- if (indexToTrack === item.$index) {
323
- trackedIndex = index + i * diff;
324
- }
325
- item.updateIndex(index + i * diff);
326
- newItem = item;
327
- toRemove_1 = false; // insert case
328
- }
329
- else {
330
- newItem = generator(index + i * diff, data);
331
- newItem.toInsert = true;
332
- }
333
- updateArray.call(newItems, newItem);
334
- });
335
- item.toRemove = toRemove_1;
336
- updateArray.call.apply(updateArray, __spreadArray([items], __read(newItems), false));
337
- index += diff * result.length;
338
- if (result.length > 1) {
339
- this_2.shiftExtremum(result.length - 1, fixRight);
340
- }
341
- };
342
- var this_2 = this;
343
- for (var i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {
344
- _loop_2(i);
345
- }
346
- var toRemove = this.items.filter(function (item) { return item.toRemove; });
347
- var itemsBefore = Array.from(beforeMap)
348
- .map(function (_a) {
349
- var _b = __read(_a, 2), $index = _b[0], _c = _b[1], size = _c.size, toRemove = _c.toRemove;
350
- return ({ $index: $index, size: size, toRemove: toRemove });
351
- })
352
- .sort(function (a, b) { return a.$index - b.$index; });
353
- this.items = items;
354
- this.cache.updateSubset(itemsBefore, items, fixRight);
355
- if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {
356
- trackedIndex = NaN;
357
- }
358
- else if (trackedIndex > this.finiteAbsMaxIndex) {
359
- trackedIndex = this.finiteAbsMaxIndex;
360
- }
361
- else if (trackedIndex < this.finiteAbsMinIndex) {
362
- trackedIndex = this.finiteAbsMinIndex;
363
- }
364
- return { trackedIndex: trackedIndex, toRemove: toRemove };
365
- };
366
- Buffer.prototype.cacheItem = function (item) {
367
- this.cache.add(item);
368
- };
369
- Buffer.prototype.getFirstVisibleItemIndex = function () {
370
- var length = this.items.length;
371
- for (var i = 0; i < length; i++) {
372
- if (!this.items[i].invisible) {
373
- return i;
374
- }
375
- }
376
- return -1;
377
- };
378
- Buffer.prototype.getLastVisibleItemIndex = function () {
379
- for (var i = this.items.length - 1; i >= 0; i--) {
380
- if (!this.items[i].invisible) {
381
- return i;
382
- }
383
- }
384
- return -1;
385
- };
386
- Buffer.prototype.getFirstVisibleItem = function () {
387
- var index = this.getFirstVisibleItemIndex();
388
- return index >= 0 ? this.items[index] : void 0;
389
- };
390
- Buffer.prototype.getLastVisibleItem = function () {
391
- var index = this.getLastVisibleItemIndex();
392
- return index >= 0 ? this.items[index] : void 0;
393
- };
394
- Buffer.prototype.getEdgeVisibleItem = function (direction, opposite) {
395
- return direction === (!opposite ? Direction.forward : Direction.backward) ?
396
- this.getLastVisibleItem() : this.getFirstVisibleItem();
397
- };
398
- Buffer.prototype.getVisibleItemsCount = function () {
399
- return this.items.reduce(function (acc, item) { return acc + (item.invisible ? 0 : 1); }, 0);
400
- };
401
- Buffer.prototype.getSizeByIndex = function (index) {
402
- return this.cache.getSizeByIndex(index);
403
- };
404
- Buffer.prototype.checkDefaultSize = function () {
405
- return this.cache.recalculateDefaultSize();
406
- };
407
- return Buffer;
408
- }());
409
- export { Buffer };
1
+ import { __read, __spreadArray } from "tslib";
2
+ import { Cache } from './buffer/cache';
3
+ import { CheckBufferCall } from './buffer/checkCall';
4
+ import { Reactive } from './reactive';
5
+ import { Direction } from '../inputs/index';
6
+ var Buffer = /** @class */ (function () {
7
+ function Buffer(settings, onDataChanged, logger) {
8
+ this._items = [];
9
+ this.logger = logger;
10
+ this.changeItems = onDataChanged;
11
+ this.bof = new Reactive(false);
12
+ this.eof = new Reactive(false);
13
+ this.cache = new Cache(settings, logger);
14
+ this.checkCall = new CheckBufferCall(this, logger);
15
+ this.startIndexUser = settings.startIndex;
16
+ this.minIndexUser = settings.minIndex;
17
+ this.maxIndexUser = settings.maxIndex;
18
+ this.reset(true);
19
+ }
20
+ Buffer.prototype.dispose = function () {
21
+ this.bof.dispose();
22
+ this.eof.dispose();
23
+ this._items.forEach(function (item) { return item.dispose(); });
24
+ this._items = [];
25
+ };
26
+ Buffer.prototype.reset = function (force, startIndex) {
27
+ this.items.forEach(function (item) { return item.hide(); });
28
+ this.pristine = true;
29
+ this.items = [];
30
+ this.cache.reset(force);
31
+ this.absMinIndex = this.minIndexUser;
32
+ this.absMaxIndex = this.maxIndexUser;
33
+ this.setCurrentStartIndex(startIndex);
34
+ this.bof.set(false);
35
+ this.eof.set(false);
36
+ this.pristine = false;
37
+ };
38
+ Buffer.prototype.setCurrentStartIndex = function (newStartIndex) {
39
+ var min = this.minIndexUser;
40
+ var max = this.maxIndexUser;
41
+ var start = this.startIndexUser;
42
+ var index = Number(newStartIndex);
43
+ if (Number.isNaN(index)) {
44
+ this.logger.log(function () { return "fallback startIndex to settings.startIndex (".concat(start, ")"); });
45
+ index = start;
46
+ }
47
+ if (index < min) {
48
+ this.logger.log(function () { return "setting startIndex to settings.minIndex (".concat(min, ") because ").concat(index, " < ").concat(min); });
49
+ index = min;
50
+ }
51
+ if (index > max) {
52
+ this.logger.log(function () { return "setting startIndex to settings.maxIndex (".concat(max, ") because ").concat(index, " > ").concat(max); });
53
+ index = max;
54
+ }
55
+ this.startIndex = index;
56
+ };
57
+ Object.defineProperty(Buffer.prototype, "items", {
58
+ get: function () {
59
+ return this._items;
60
+ },
61
+ set: function (items) {
62
+ this._items = items;
63
+ this.changeItems(items);
64
+ if (!this.pristine) {
65
+ this.checkBOF();
66
+ this.checkEOF();
67
+ }
68
+ },
69
+ enumerable: false,
70
+ configurable: true
71
+ });
72
+ Object.defineProperty(Buffer.prototype, "absMinIndex", {
73
+ get: function () {
74
+ return this._absMinIndex;
75
+ },
76
+ set: function (value) {
77
+ if (this._absMinIndex !== value) {
78
+ this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;
79
+ }
80
+ if (!this.pristine) {
81
+ this.checkBOF();
82
+ }
83
+ },
84
+ enumerable: false,
85
+ configurable: true
86
+ });
87
+ Object.defineProperty(Buffer.prototype, "absMaxIndex", {
88
+ get: function () {
89
+ return this._absMaxIndex;
90
+ },
91
+ set: function (value) {
92
+ if (this._absMaxIndex !== value) {
93
+ this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;
94
+ }
95
+ if (!this.pristine) {
96
+ this.checkEOF();
97
+ }
98
+ },
99
+ enumerable: false,
100
+ configurable: true
101
+ });
102
+ Buffer.prototype.checkBOF = function () {
103
+ // since bof has no setter, need to call checkBOF() on items and absMinIndex change
104
+ var bof = this.items.length
105
+ ? (this.items[0].$index === this.absMinIndex)
106
+ : isFinite(this.absMinIndex);
107
+ this.bof.set(bof);
108
+ };
109
+ Buffer.prototype.checkEOF = function () {
110
+ // since eof has no setter, need to call checkEOF() on items and absMaxIndex change
111
+ var eof = this.items.length
112
+ ? (this.items[this.items.length - 1].$index === this.absMaxIndex)
113
+ : isFinite(this.absMaxIndex);
114
+ this.eof.set(eof);
115
+ };
116
+ Object.defineProperty(Buffer.prototype, "size", {
117
+ get: function () {
118
+ return this._items.length;
119
+ },
120
+ enumerable: false,
121
+ configurable: true
122
+ });
123
+ Object.defineProperty(Buffer.prototype, "cacheSize", {
124
+ get: function () {
125
+ return this.cache.size;
126
+ },
127
+ enumerable: false,
128
+ configurable: true
129
+ });
130
+ Object.defineProperty(Buffer.prototype, "defaultSize", {
131
+ get: function () {
132
+ return this.cache.getDefaultSize();
133
+ },
134
+ enumerable: false,
135
+ configurable: true
136
+ });
137
+ Object.defineProperty(Buffer.prototype, "minIndex", {
138
+ get: function () {
139
+ return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;
140
+ },
141
+ enumerable: false,
142
+ configurable: true
143
+ });
144
+ Object.defineProperty(Buffer.prototype, "maxIndex", {
145
+ get: function () {
146
+ return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;
147
+ },
148
+ enumerable: false,
149
+ configurable: true
150
+ });
151
+ Object.defineProperty(Buffer.prototype, "firstIndex", {
152
+ get: function () {
153
+ return this.items.length ? this.items[0].$index : NaN;
154
+ },
155
+ enumerable: false,
156
+ configurable: true
157
+ });
158
+ Object.defineProperty(Buffer.prototype, "lastIndex", {
159
+ get: function () {
160
+ return this.items.length ? this.items[this.items.length - 1].$index : NaN;
161
+ },
162
+ enumerable: false,
163
+ configurable: true
164
+ });
165
+ Object.defineProperty(Buffer.prototype, "finiteAbsMinIndex", {
166
+ get: function () {
167
+ return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;
168
+ },
169
+ enumerable: false,
170
+ configurable: true
171
+ });
172
+ Object.defineProperty(Buffer.prototype, "finiteAbsMaxIndex", {
173
+ get: function () {
174
+ return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;
175
+ },
176
+ enumerable: false,
177
+ configurable: true
178
+ });
179
+ Buffer.prototype.get = function ($index) {
180
+ return this.items.find(function (item) { return item.$index === $index; });
181
+ };
182
+ Buffer.prototype.setItems = function (items) {
183
+ if (!this.items.length) {
184
+ this.items = __spreadArray([], __read(items), false);
185
+ }
186
+ else if (this.items[0].$index > items[items.length - 1].$index) {
187
+ this.items = __spreadArray(__spreadArray([], __read(items), false), __read(this.items), false);
188
+ }
189
+ else if (items[0].$index > this.items[this.items.length - 1].$index) {
190
+ this.items = __spreadArray(__spreadArray([], __read(this.items), false), __read(items), false);
191
+ }
192
+ else {
193
+ return false;
194
+ }
195
+ return true;
196
+ };
197
+ Buffer.prototype.clip = function () {
198
+ this.items = this.items.filter(function (_a) {
199
+ var toRemove = _a.toRemove;
200
+ return !toRemove;
201
+ });
202
+ };
203
+ Buffer.prototype.getIndexToInsert = function (predicate, before, after) {
204
+ return this.checkCall.insertInBuffer(predicate, before, after);
205
+ };
206
+ Buffer.prototype.shiftExtremum = function (amount, fixRight) {
207
+ if (!fixRight) {
208
+ this.absMaxIndex += amount;
209
+ }
210
+ else {
211
+ this.absMinIndex -= amount;
212
+ this.startIndex -= amount;
213
+ }
214
+ if (this.startIndex > this.absMaxIndex) {
215
+ this.startIndex = this.absMaxIndex;
216
+ }
217
+ else if (this.startIndex < this.absMinIndex) {
218
+ this.startIndex = this.absMinIndex;
219
+ }
220
+ };
221
+ Buffer.prototype.insertVirtually = function (items, index, direction, fixRight) {
222
+ if (!this.checkCall.insertVirtual(items, index, direction)) {
223
+ return false;
224
+ }
225
+ var shift = 0;
226
+ if (index <= this.firstIndex && !fixRight) {
227
+ shift = items.length;
228
+ }
229
+ else if (index >= this.lastIndex && fixRight) {
230
+ shift = -items.length;
231
+ }
232
+ if (shift) {
233
+ this.items.forEach(function (item) { return item.updateIndex(item.$index + shift); });
234
+ this.cache.insertItems(items, index, direction, fixRight);
235
+ this.items = __spreadArray([], __read(this.items), false);
236
+ }
237
+ this.shiftExtremum(items.length, fixRight);
238
+ return true;
239
+ };
240
+ Buffer.prototype.removeVirtually = function (indexes, fixRight) {
241
+ var length = this.items.length;
242
+ var shifted = false;
243
+ var _loop_1 = function (i) {
244
+ var item = this_1.items[i];
245
+ var diff = indexes.reduce(function (acc, index) { return acc + (fixRight
246
+ ? (item.$index < index ? 1 : 0)
247
+ : (item.$index > index ? -1 : 0)); }, 0);
248
+ shifted = shifted || !!diff;
249
+ item.updateIndex(item.$index + diff);
250
+ };
251
+ var this_1 = this;
252
+ for (var i = fixRight ? length - 1 : 0; fixRight ? i >= 0 : i < length; fixRight ? i-- : i++) {
253
+ _loop_1(i);
254
+ }
255
+ this.shiftExtremum(-indexes.length, fixRight);
256
+ if (shifted) {
257
+ this.items = __spreadArray([], __read(this.items), false);
258
+ }
259
+ this.cache.removeItems(indexes, fixRight);
260
+ };
261
+ Buffer.prototype.fillEmpty = function (items, beforeIndex, afterIndex, fixRight, generator) {
262
+ if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {
263
+ return false;
264
+ }
265
+ var before = Number.isInteger(beforeIndex);
266
+ var index = (before ? beforeIndex : afterIndex);
267
+ var shift = (fixRight ? items.length : (before ? 1 : 0));
268
+ this.items = items.map(function (data, i) {
269
+ return generator(index + i + (!before ? 1 : 0) - shift, data);
270
+ });
271
+ this._absMinIndex = this.items[0].$index;
272
+ this._absMaxIndex = this.items[this.size - 1].$index;
273
+ if (this.startIndex <= this.absMinIndex) {
274
+ this.startIndex = this.absMinIndex;
275
+ }
276
+ else if (this.startIndex > this.absMaxIndex) {
277
+ this.startIndex = this.absMaxIndex;
278
+ }
279
+ return true;
280
+ };
281
+ Buffer.prototype.updateItems = function (predicate, generator, indexToTrack, fixRight) {
282
+ if (!this.size || Number.isNaN(this.firstIndex)) {
283
+ return { trackedIndex: NaN, toRemove: [] };
284
+ }
285
+ var trackedIndex = indexToTrack;
286
+ var index = fixRight ? this.lastIndex : this.firstIndex;
287
+ var items = [];
288
+ var diff = fixRight ? -1 : 1;
289
+ var limit = this.size - 1;
290
+ var beforeMap = new Map(); // need to persist original $indexes
291
+ var updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];
292
+ var _loop_2 = function (i) {
293
+ var item = this_2.items[i];
294
+ beforeMap.set(item.$index, item);
295
+ var result = predicate(item);
296
+ // if predicate result is falsy or empty array -> delete
297
+ if (!result || (Array.isArray(result) && !result.length)) {
298
+ item.toRemove = true;
299
+ trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);
300
+ this_2.shiftExtremum(-1, fixRight);
301
+ return "continue";
302
+ }
303
+ // if predicate result is truthy but not array -> leave
304
+ if (!Array.isArray(result)) {
305
+ item.updateIndex(index);
306
+ updateArray.call(items, item);
307
+ index += diff;
308
+ return "continue";
309
+ }
310
+ // if predicate result is non-empty array -> insert/replace
311
+ if (item.$index < indexToTrack) {
312
+ trackedIndex += fixRight ? 0 : result.length - 1;
313
+ }
314
+ else if (item.$index > indexToTrack) {
315
+ trackedIndex += fixRight ? 1 - result.length : 0;
316
+ }
317
+ var toRemove_1 = true;
318
+ var newItems = [];
319
+ (fixRight ? __spreadArray([], __read(result), false).reverse() : result).forEach(function (data, i) {
320
+ var newItem;
321
+ if (item.data === data) {
322
+ if (indexToTrack === item.$index) {
323
+ trackedIndex = index + i * diff;
324
+ }
325
+ item.updateIndex(index + i * diff);
326
+ newItem = item;
327
+ toRemove_1 = false; // insert case
328
+ }
329
+ else {
330
+ newItem = generator(index + i * diff, data);
331
+ newItem.toInsert = true;
332
+ }
333
+ updateArray.call(newItems, newItem);
334
+ });
335
+ item.toRemove = toRemove_1;
336
+ updateArray.call.apply(updateArray, __spreadArray([items], __read(newItems), false));
337
+ index += diff * result.length;
338
+ if (result.length > 1) {
339
+ this_2.shiftExtremum(result.length - 1, fixRight);
340
+ }
341
+ };
342
+ var this_2 = this;
343
+ for (var i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {
344
+ _loop_2(i);
345
+ }
346
+ var toRemove = this.items.filter(function (item) { return item.toRemove; });
347
+ var itemsBefore = Array.from(beforeMap)
348
+ .map(function (_a) {
349
+ var _b = __read(_a, 2), $index = _b[0], _c = _b[1], size = _c.size, toRemove = _c.toRemove;
350
+ return ({ $index: $index, size: size, toRemove: toRemove });
351
+ })
352
+ .sort(function (a, b) { return a.$index - b.$index; });
353
+ this.items = items;
354
+ this.cache.updateSubset(itemsBefore, items, fixRight);
355
+ if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {
356
+ trackedIndex = NaN;
357
+ }
358
+ else if (trackedIndex > this.finiteAbsMaxIndex) {
359
+ trackedIndex = this.finiteAbsMaxIndex;
360
+ }
361
+ else if (trackedIndex < this.finiteAbsMinIndex) {
362
+ trackedIndex = this.finiteAbsMinIndex;
363
+ }
364
+ return { trackedIndex: trackedIndex, toRemove: toRemove };
365
+ };
366
+ Buffer.prototype.cacheItem = function (item) {
367
+ this.cache.add(item);
368
+ };
369
+ Buffer.prototype.getFirstVisibleItemIndex = function () {
370
+ var length = this.items.length;
371
+ for (var i = 0; i < length; i++) {
372
+ if (!this.items[i].invisible) {
373
+ return i;
374
+ }
375
+ }
376
+ return -1;
377
+ };
378
+ Buffer.prototype.getLastVisibleItemIndex = function () {
379
+ for (var i = this.items.length - 1; i >= 0; i--) {
380
+ if (!this.items[i].invisible) {
381
+ return i;
382
+ }
383
+ }
384
+ return -1;
385
+ };
386
+ Buffer.prototype.getFirstVisibleItem = function () {
387
+ var index = this.getFirstVisibleItemIndex();
388
+ return index >= 0 ? this.items[index] : void 0;
389
+ };
390
+ Buffer.prototype.getLastVisibleItem = function () {
391
+ var index = this.getLastVisibleItemIndex();
392
+ return index >= 0 ? this.items[index] : void 0;
393
+ };
394
+ Buffer.prototype.getEdgeVisibleItem = function (direction, opposite) {
395
+ return direction === (!opposite ? Direction.forward : Direction.backward) ?
396
+ this.getLastVisibleItem() : this.getFirstVisibleItem();
397
+ };
398
+ Buffer.prototype.getVisibleItemsCount = function () {
399
+ return this.items.reduce(function (acc, item) { return acc + (item.invisible ? 0 : 1); }, 0);
400
+ };
401
+ Buffer.prototype.getSizeByIndex = function (index) {
402
+ return this.cache.getSizeByIndex(index);
403
+ };
404
+ Buffer.prototype.checkDefaultSize = function () {
405
+ return this.cache.recalculateDefaultSize();
406
+ };
407
+ return Buffer;
408
+ }());
409
+ export { Buffer };
410
410
  //# sourceMappingURL=buffer.js.map