vscroll 1.6.2 → 1.7.0

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