vscroll 1.6.3 → 1.8.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 (363) hide show
  1. package/dist/bundles/vscroll.esm5.js +5854 -5705
  2. package/dist/bundles/vscroll.esm5.js.map +1 -1
  3. package/dist/bundles/vscroll.esm5.min.js +2 -2
  4. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  5. package/dist/bundles/vscroll.esm6.js +5341 -5194
  6. package/dist/bundles/vscroll.esm6.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.min.js +2 -2
  8. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  9. package/dist/bundles/vscroll.umd.js +5858 -5710
  10. package/dist/bundles/vscroll.umd.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.min.js +2 -2
  12. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  13. package/dist/esm2015/classes/adapter/context.js +44 -43
  14. package/dist/esm2015/classes/adapter/context.js.map +1 -1
  15. package/dist/esm2015/classes/adapter/props.js +300 -300
  16. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  17. package/dist/esm2015/classes/adapter/wanted.js +28 -28
  18. package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
  19. package/dist/esm2015/classes/adapter.js +486 -487
  20. package/dist/esm2015/classes/adapter.js.map +1 -1
  21. package/dist/esm2015/classes/buffer/cache.js +249 -246
  22. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  23. package/dist/esm2015/classes/buffer/checkCall.js +47 -48
  24. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  25. package/dist/esm2015/classes/buffer/defaultSize.js +128 -127
  26. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  27. package/dist/esm2015/classes/buffer.js +343 -342
  28. package/dist/esm2015/classes/buffer.js.map +1 -1
  29. package/dist/esm2015/classes/datasource.js +36 -24
  30. package/dist/esm2015/classes/datasource.js.map +1 -1
  31. package/dist/esm2015/classes/domRoutines.js +160 -160
  32. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  33. package/dist/esm2015/classes/item.js +61 -61
  34. package/dist/esm2015/classes/item.js.map +1 -1
  35. package/dist/esm2015/classes/logger.js +229 -186
  36. package/dist/esm2015/classes/logger.js.map +1 -1
  37. package/dist/esm2015/classes/paddings.js +76 -72
  38. package/dist/esm2015/classes/paddings.js.map +1 -1
  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 +124 -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 +64 -62
  54. package/dist/esm2015/classes/state.js.map +1 -1
  55. package/dist/esm2015/classes/viewport.js +74 -72
  56. package/dist/esm2015/classes/viewport.js.map +1 -1
  57. package/dist/esm2015/index.js +9 -9
  58. package/dist/esm2015/index.js.map +1 -1
  59. package/dist/esm2015/inputs/adapter.js +262 -242
  60. package/dist/esm2015/inputs/adapter.js.map +1 -1
  61. package/dist/esm2015/inputs/common.js +11 -11
  62. package/dist/esm2015/inputs/common.js.map +1 -1
  63. package/dist/esm2015/inputs/datasource.js +20 -20
  64. package/dist/esm2015/inputs/datasource.js.map +1 -1
  65. package/dist/esm2015/inputs/index.js +7 -7
  66. package/dist/esm2015/inputs/index.js.map +1 -1
  67. package/dist/esm2015/inputs/settings.js +151 -146
  68. package/dist/esm2015/inputs/settings.js.map +1 -1
  69. package/dist/esm2015/inputs/validation.js +365 -374
  70. package/dist/esm2015/inputs/validation.js.map +1 -1
  71. package/dist/esm2015/inputs/workflow.js +30 -30
  72. package/dist/esm2015/inputs/workflow.js.map +1 -1
  73. package/dist/esm2015/interfaces/adapter.js +1 -1
  74. package/dist/esm2015/interfaces/adapter.js.map +1 -1
  75. package/dist/esm2015/interfaces/datasource.js +1 -1
  76. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  77. package/dist/esm2015/interfaces/index.js +1 -1
  78. package/dist/esm2015/interfaces/index.js.map +1 -1
  79. package/dist/esm2015/interfaces/item.js +1 -1
  80. package/dist/esm2015/interfaces/item.js.map +1 -1
  81. package/dist/esm2015/interfaces/process.js +1 -1
  82. package/dist/esm2015/interfaces/process.js.map +1 -1
  83. package/dist/esm2015/interfaces/routines.js +1 -1
  84. package/dist/esm2015/interfaces/routines.js.map +1 -1
  85. package/dist/esm2015/interfaces/settings.js +1 -1
  86. package/dist/esm2015/interfaces/settings.js.map +1 -1
  87. package/dist/esm2015/interfaces/state.js +1 -1
  88. package/dist/esm2015/interfaces/state.js.map +1 -1
  89. package/dist/esm2015/interfaces/validation.js +1 -1
  90. package/dist/esm2015/interfaces/validation.js.map +1 -1
  91. package/dist/esm2015/interfaces/workflow.js +1 -1
  92. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  93. package/dist/esm2015/processes/adapter/append.js +37 -36
  94. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  95. package/dist/esm2015/processes/adapter/check.js +33 -32
  96. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  97. package/dist/esm2015/processes/adapter/clip.js +12 -12
  98. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  99. package/dist/esm2015/processes/adapter/fix.js +79 -77
  100. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  101. package/dist/esm2015/processes/adapter/insert.js +74 -73
  102. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  103. package/dist/esm2015/processes/adapter/pause.js +22 -22
  104. package/dist/esm2015/processes/adapter/pause.js.map +1 -1
  105. package/dist/esm2015/processes/adapter/reload.js +19 -19
  106. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  107. package/dist/esm2015/processes/adapter/remove.js +105 -102
  108. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  109. package/dist/esm2015/processes/adapter/replace.js +39 -39
  110. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  111. package/dist/esm2015/processes/adapter/reset.js +35 -35
  112. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  113. package/dist/esm2015/processes/adapter/update.js +44 -43
  114. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  115. package/dist/esm2015/processes/adjust.js +146 -141
  116. package/dist/esm2015/processes/adjust.js.map +1 -1
  117. package/dist/esm2015/processes/clip.js +49 -49
  118. package/dist/esm2015/processes/clip.js.map +1 -1
  119. package/dist/esm2015/processes/end.js +53 -52
  120. package/dist/esm2015/processes/end.js.map +1 -1
  121. package/dist/esm2015/processes/fetch.js +93 -91
  122. package/dist/esm2015/processes/fetch.js.map +1 -1
  123. package/dist/esm2015/processes/index.js +24 -24
  124. package/dist/esm2015/processes/index.js.map +1 -1
  125. package/dist/esm2015/processes/init.js +14 -14
  126. package/dist/esm2015/processes/init.js.map +1 -1
  127. package/dist/esm2015/processes/misc/base.js +29 -30
  128. package/dist/esm2015/processes/misc/base.js.map +1 -1
  129. package/dist/esm2015/processes/misc/enums.js +36 -36
  130. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  131. package/dist/esm2015/processes/misc/index.js +2 -2
  132. package/dist/esm2015/processes/misc/index.js.map +1 -1
  133. package/dist/esm2015/processes/postFetch.js +66 -65
  134. package/dist/esm2015/processes/postFetch.js.map +1 -1
  135. package/dist/esm2015/processes/preClip.js +86 -85
  136. package/dist/esm2015/processes/preClip.js.map +1 -1
  137. package/dist/esm2015/processes/preFetch.js +253 -240
  138. package/dist/esm2015/processes/preFetch.js.map +1 -1
  139. package/dist/esm2015/processes/render.js +56 -54
  140. package/dist/esm2015/processes/render.js.map +1 -1
  141. package/dist/esm2015/processes/scroll.js +106 -97
  142. package/dist/esm2015/processes/scroll.js.map +1 -1
  143. package/dist/esm2015/processes/start.js +11 -11
  144. package/dist/esm2015/processes/start.js.map +1 -1
  145. package/dist/esm2015/scroller.js +91 -86
  146. package/dist/esm2015/scroller.js.map +1 -1
  147. package/dist/esm2015/version.js +4 -4
  148. package/dist/esm2015/version.js.map +1 -1
  149. package/dist/esm2015/workflow-transducer.js +219 -218
  150. package/dist/esm2015/workflow-transducer.js.map +1 -1
  151. package/dist/esm2015/workflow.js +185 -174
  152. package/dist/esm2015/workflow.js.map +1 -1
  153. package/dist/esm5/classes/adapter/context.js +51 -50
  154. package/dist/esm5/classes/adapter/context.js.map +1 -1
  155. package/dist/esm5/classes/adapter/props.js +300 -300
  156. package/dist/esm5/classes/adapter/props.js.map +1 -1
  157. package/dist/esm5/classes/adapter/wanted.js +29 -29
  158. package/dist/esm5/classes/adapter/wanted.js.map +1 -1
  159. package/dist/esm5/classes/adapter.js +538 -535
  160. package/dist/esm5/classes/adapter.js.map +1 -1
  161. package/dist/esm5/classes/buffer/cache.js +262 -260
  162. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  163. package/dist/esm5/classes/buffer/checkCall.js +53 -56
  164. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  165. package/dist/esm5/classes/buffer/defaultSize.js +146 -145
  166. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  167. package/dist/esm5/classes/buffer.js +410 -409
  168. package/dist/esm5/classes/buffer.js.map +1 -1
  169. package/dist/esm5/classes/datasource.js +47 -31
  170. package/dist/esm5/classes/datasource.js.map +1 -1
  171. package/dist/esm5/classes/domRoutines.js +165 -165
  172. package/dist/esm5/classes/domRoutines.js.map +1 -1
  173. package/dist/esm5/classes/item.js +76 -76
  174. package/dist/esm5/classes/item.js.map +1 -1
  175. package/dist/esm5/classes/logger.js +251 -210
  176. package/dist/esm5/classes/logger.js.map +1 -1
  177. package/dist/esm5/classes/paddings.js +84 -80
  178. package/dist/esm5/classes/paddings.js.map +1 -1
  179. package/dist/esm5/classes/reactive.js +69 -69
  180. package/dist/esm5/classes/reactive.js.map +1 -1
  181. package/dist/esm5/classes/settings.js +47 -47
  182. package/dist/esm5/classes/settings.js.map +1 -1
  183. package/dist/esm5/classes/state/clip.js +22 -22
  184. package/dist/esm5/classes/state/clip.js.map +1 -1
  185. package/dist/esm5/classes/state/cycle.js +75 -75
  186. package/dist/esm5/classes/state/cycle.js.map +1 -1
  187. package/dist/esm5/classes/state/fetch.js +150 -148
  188. package/dist/esm5/classes/state/fetch.js.map +1 -1
  189. package/dist/esm5/classes/state/render.js +20 -20
  190. package/dist/esm5/classes/state/render.js.map +1 -1
  191. package/dist/esm5/classes/state/scroll.js +32 -32
  192. package/dist/esm5/classes/state/scroll.js.map +1 -1
  193. package/dist/esm5/classes/state.js +71 -69
  194. package/dist/esm5/classes/state.js.map +1 -1
  195. package/dist/esm5/classes/viewport.js +80 -79
  196. package/dist/esm5/classes/viewport.js.map +1 -1
  197. package/dist/esm5/index.js +9 -9
  198. package/dist/esm5/index.js.map +1 -1
  199. package/dist/esm5/inputs/adapter.js +263 -243
  200. package/dist/esm5/inputs/adapter.js.map +1 -1
  201. package/dist/esm5/inputs/common.js +11 -11
  202. package/dist/esm5/inputs/common.js.map +1 -1
  203. package/dist/esm5/inputs/datasource.js +21 -21
  204. package/dist/esm5/inputs/datasource.js.map +1 -1
  205. package/dist/esm5/inputs/index.js +7 -7
  206. package/dist/esm5/inputs/index.js.map +1 -1
  207. package/dist/esm5/inputs/settings.js +152 -147
  208. package/dist/esm5/inputs/settings.js.map +1 -1
  209. package/dist/esm5/inputs/validation.js +399 -396
  210. package/dist/esm5/inputs/validation.js.map +1 -1
  211. package/dist/esm5/inputs/workflow.js +31 -31
  212. package/dist/esm5/inputs/workflow.js.map +1 -1
  213. package/dist/esm5/interfaces/adapter.js +1 -1
  214. package/dist/esm5/interfaces/adapter.js.map +1 -1
  215. package/dist/esm5/interfaces/datasource.js +1 -1
  216. package/dist/esm5/interfaces/datasource.js.map +1 -1
  217. package/dist/esm5/interfaces/index.js +1 -1
  218. package/dist/esm5/interfaces/index.js.map +1 -1
  219. package/dist/esm5/interfaces/item.js +1 -1
  220. package/dist/esm5/interfaces/item.js.map +1 -1
  221. package/dist/esm5/interfaces/process.js +1 -1
  222. package/dist/esm5/interfaces/process.js.map +1 -1
  223. package/dist/esm5/interfaces/routines.js +1 -1
  224. package/dist/esm5/interfaces/routines.js.map +1 -1
  225. package/dist/esm5/interfaces/settings.js +1 -1
  226. package/dist/esm5/interfaces/settings.js.map +1 -1
  227. package/dist/esm5/interfaces/state.js +1 -1
  228. package/dist/esm5/interfaces/state.js.map +1 -1
  229. package/dist/esm5/interfaces/validation.js +1 -1
  230. package/dist/esm5/interfaces/validation.js.map +1 -1
  231. package/dist/esm5/interfaces/workflow.js +1 -1
  232. package/dist/esm5/interfaces/workflow.js.map +1 -1
  233. package/dist/esm5/processes/adapter/append.js +45 -44
  234. package/dist/esm5/processes/adapter/append.js.map +1 -1
  235. package/dist/esm5/processes/adapter/check.js +40 -39
  236. package/dist/esm5/processes/adapter/check.js.map +1 -1
  237. package/dist/esm5/processes/adapter/clip.js +19 -19
  238. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  239. package/dist/esm5/processes/adapter/fix.js +91 -89
  240. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  241. package/dist/esm5/processes/adapter/insert.js +82 -81
  242. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  243. package/dist/esm5/processes/adapter/pause.js +29 -29
  244. package/dist/esm5/processes/adapter/pause.js.map +1 -1
  245. package/dist/esm5/processes/adapter/reload.js +26 -26
  246. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  247. package/dist/esm5/processes/adapter/remove.js +116 -115
  248. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  249. package/dist/esm5/processes/adapter/replace.js +47 -47
  250. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  251. package/dist/esm5/processes/adapter/reset.js +42 -42
  252. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  253. package/dist/esm5/processes/adapter/update.js +64 -59
  254. package/dist/esm5/processes/adapter/update.js.map +1 -1
  255. package/dist/esm5/processes/adjust.js +157 -152
  256. package/dist/esm5/processes/adjust.js.map +1 -1
  257. package/dist/esm5/processes/clip.js +60 -60
  258. package/dist/esm5/processes/clip.js.map +1 -1
  259. package/dist/esm5/processes/end.js +64 -63
  260. package/dist/esm5/processes/end.js.map +1 -1
  261. package/dist/esm5/processes/fetch.js +104 -102
  262. package/dist/esm5/processes/fetch.js.map +1 -1
  263. package/dist/esm5/processes/index.js +24 -24
  264. package/dist/esm5/processes/index.js.map +1 -1
  265. package/dist/esm5/processes/init.js +21 -21
  266. package/dist/esm5/processes/init.js.map +1 -1
  267. package/dist/esm5/processes/misc/base.js +43 -44
  268. package/dist/esm5/processes/misc/base.js.map +1 -1
  269. package/dist/esm5/processes/misc/enums.js +36 -36
  270. package/dist/esm5/processes/misc/enums.js.map +1 -1
  271. package/dist/esm5/processes/misc/index.js +2 -2
  272. package/dist/esm5/processes/misc/index.js.map +1 -1
  273. package/dist/esm5/processes/postFetch.js +73 -74
  274. package/dist/esm5/processes/postFetch.js.map +1 -1
  275. package/dist/esm5/processes/preClip.js +95 -94
  276. package/dist/esm5/processes/preClip.js.map +1 -1
  277. package/dist/esm5/processes/preFetch.js +259 -247
  278. package/dist/esm5/processes/preFetch.js.map +1 -1
  279. package/dist/esm5/processes/render.js +63 -63
  280. package/dist/esm5/processes/render.js.map +1 -1
  281. package/dist/esm5/processes/scroll.js +113 -107
  282. package/dist/esm5/processes/scroll.js.map +1 -1
  283. package/dist/esm5/processes/start.js +18 -18
  284. package/dist/esm5/processes/start.js.map +1 -1
  285. package/dist/esm5/scroller.js +104 -100
  286. package/dist/esm5/scroller.js.map +1 -1
  287. package/dist/esm5/version.js +4 -4
  288. package/dist/esm5/version.js.map +1 -1
  289. package/dist/esm5/workflow-transducer.js +221 -220
  290. package/dist/esm5/workflow-transducer.js.map +1 -1
  291. package/dist/esm5/workflow.js +204 -198
  292. package/dist/esm5/workflow.js.map +1 -1
  293. package/dist/typings/classes/adapter/context.d.ts +4 -4
  294. package/dist/typings/classes/adapter/props.d.ts +52 -52
  295. package/dist/typings/classes/adapter/wanted.d.ts +14 -14
  296. package/dist/typings/classes/adapter.d.ts +79 -79
  297. package/dist/typings/classes/buffer/cache.d.ts +94 -95
  298. package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
  299. package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
  300. package/dist/typings/classes/buffer.d.ts +64 -64
  301. package/dist/typings/classes/datasource.d.ts +11 -11
  302. package/dist/typings/classes/domRoutines.d.ts +36 -36
  303. package/dist/typings/classes/item.d.ts +28 -28
  304. package/dist/typings/classes/logger.d.ts +32 -28
  305. package/dist/typings/classes/paddings.d.ts +22 -22
  306. package/dist/typings/classes/reactive.d.ts +21 -21
  307. package/dist/typings/classes/settings.d.ts +126 -119
  308. package/dist/typings/classes/state/clip.d.ts +9 -9
  309. package/dist/typings/classes/state/cycle.d.ts +29 -29
  310. package/dist/typings/classes/state/fetch.d.ts +62 -62
  311. package/dist/typings/classes/state/render.d.ts +9 -9
  312. package/dist/typings/classes/state/scroll.d.ts +16 -16
  313. package/dist/typings/classes/state.d.ts +29 -29
  314. package/dist/typings/classes/viewport.d.ts +32 -32
  315. package/dist/typings/index.d.ts +10 -10
  316. package/dist/typings/inputs/adapter.d.ts +5 -5
  317. package/dist/typings/inputs/common.d.ts +9 -9
  318. package/dist/typings/inputs/datasource.d.ts +7 -7
  319. package/dist/typings/inputs/index.d.ts +7 -7
  320. package/dist/typings/inputs/settings.d.ts +42 -41
  321. package/dist/typings/inputs/validation.d.ts +82 -83
  322. package/dist/typings/inputs/workflow.d.ts +9 -9
  323. package/dist/typings/interfaces/adapter.d.ts +164 -164
  324. package/dist/typings/interfaces/datasource.d.ts +28 -28
  325. package/dist/typings/interfaces/index.d.ts +10 -10
  326. package/dist/typings/interfaces/item.d.ts +8 -8
  327. package/dist/typings/interfaces/process.d.ts +35 -35
  328. package/dist/typings/interfaces/routines.d.ts +166 -166
  329. package/dist/typings/interfaces/settings.d.ts +32 -31
  330. package/dist/typings/interfaces/state.d.ts +24 -24
  331. package/dist/typings/interfaces/validation.d.ts +33 -33
  332. package/dist/typings/interfaces/workflow.d.ts +53 -53
  333. package/dist/typings/processes/adapter/append.d.ts +14 -14
  334. package/dist/typings/processes/adapter/check.d.ts +6 -6
  335. package/dist/typings/processes/adapter/clip.d.ts +7 -7
  336. package/dist/typings/processes/adapter/fix.d.ts +13 -13
  337. package/dist/typings/processes/adapter/insert.d.ts +11 -11
  338. package/dist/typings/processes/adapter/pause.d.ts +8 -8
  339. package/dist/typings/processes/adapter/reload.d.ts +6 -6
  340. package/dist/typings/processes/adapter/remove.d.ts +11 -11
  341. package/dist/typings/processes/adapter/replace.d.ts +8 -8
  342. package/dist/typings/processes/adapter/reset.d.ts +7 -7
  343. package/dist/typings/processes/adapter/update.d.ts +8 -8
  344. package/dist/typings/processes/adjust.d.ts +10 -10
  345. package/dist/typings/processes/clip.d.ts +7 -7
  346. package/dist/typings/processes/end.d.ts +10 -10
  347. package/dist/typings/processes/fetch.d.ts +18 -18
  348. package/dist/typings/processes/index.d.ts +24 -24
  349. package/dist/typings/processes/init.d.ts +7 -7
  350. package/dist/typings/processes/misc/base.d.ts +4 -4
  351. package/dist/typings/processes/misc/enums.d.ts +33 -33
  352. package/dist/typings/processes/misc/index.d.ts +2 -2
  353. package/dist/typings/processes/postFetch.d.ts +8 -8
  354. package/dist/typings/processes/preClip.d.ts +12 -12
  355. package/dist/typings/processes/preFetch.d.ts +17 -17
  356. package/dist/typings/processes/render.d.ts +9 -9
  357. package/dist/typings/processes/scroll.d.ts +13 -13
  358. package/dist/typings/processes/start.d.ts +6 -6
  359. package/dist/typings/scroller.d.ts +26 -26
  360. package/dist/typings/version.d.ts +5 -5
  361. package/dist/typings/workflow-transducer.d.ts +2 -2
  362. package/dist/typings/workflow.d.ts +30 -29
  363. package/package.json +72 -69
@@ -1,261 +1,263 @@
1
- import { DefaultSize } from './defaultSize';
2
- import { Direction } from '../../inputs/index';
3
- var ItemCache = /** @class */ (function () {
4
- function ItemCache(item, saveData) {
5
- this.$index = item.$index;
6
- this.data = saveData ? item.data : null;
7
- this.size = item.size;
8
- }
9
- ItemCache.prototype.changeIndex = function (value) {
10
- this.$index = value;
11
- };
12
- return ItemCache;
13
- }());
14
- export { ItemCache };
15
- var Cache = /** @class */ (function () {
16
- function Cache(_a, logger) {
17
- var itemSize = _a.itemSize, cacheData = _a.cacheData, cacheOnReload = _a.cacheOnReload, sizeStrategy = _a.sizeStrategy;
18
- this.itemSize = itemSize;
19
- this.saveData = cacheData;
20
- this.cacheOnReload = cacheOnReload;
21
- this.sizeStrategy = sizeStrategy;
22
- this.logger = logger;
23
- this.items = new Map();
24
- this.defaultSize = new DefaultSize(itemSize, sizeStrategy);
25
- this.reset(true);
26
- }
27
- Cache.prototype.reset = function (force) {
28
- force = force || !this.cacheOnReload;
29
- if (force) {
30
- this.minIndex = +Infinity;
31
- this.maxIndex = -Infinity;
32
- this.items.clear();
33
- }
34
- this.defaultSize.reset(force);
35
- };
36
- Object.defineProperty(Cache.prototype, "size", {
37
- get: function () {
38
- return this.items.size;
39
- },
40
- enumerable: false,
41
- configurable: true
42
- });
43
- Cache.prototype.get = function (index) {
44
- return this.items.get(index);
45
- };
46
- Cache.prototype.getSizeByIndex = function (index) {
47
- var item = this.get(index);
48
- return item && item.size || this.defaultSize.get();
49
- };
50
- Cache.prototype.getDefaultSize = function () {
51
- return this.defaultSize.get();
52
- };
53
- Cache.prototype.recalculateDefaultSize = function () {
54
- var _this = this;
55
- if (this.defaultSize.recalculate(this.size)) {
56
- this.logger.log(function () { return "default size has been updated: ".concat(_this.defaultSize.get()); });
57
- return true;
58
- }
59
- return false;
60
- };
61
- /**
62
- * Adds item to Set by $index, replaces existed item if $index matches.
63
- * Maintains min/max indexes and default item size.
64
- *
65
- * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.
66
- *
67
- * @returns {ItemCache<Data>} Cached item.
68
- */
69
- Cache.prototype.add = function (item) {
70
- var itemCache = this.get(item.$index);
71
- if (itemCache) { // adding item is already cached
72
- if (this.saveData) {
73
- itemCache.data = item.data;
74
- }
75
- if (itemCache.size !== item.size) {
76
- if (itemCache.size) {
77
- this.defaultSize.setExisted(itemCache.size, item.size);
78
- }
79
- else {
80
- this.defaultSize.setNew(item.size);
81
- }
82
- itemCache.size = item.size;
83
- }
84
- }
85
- else {
86
- itemCache = new ItemCache(item, this.saveData);
87
- this.items.set(item.$index, itemCache);
88
- this.defaultSize.setNew(item.size);
89
- }
90
- if (item.$index < this.minIndex) {
91
- this.minIndex = item.$index;
92
- }
93
- if (item.$index > this.maxIndex) {
94
- this.maxIndex = item.$index;
95
- }
96
- return itemCache;
97
- };
98
- /**
99
- * Inserts items to Set, shifts $indexes of items that remain.
100
- * Replaces current Set with a new one with new regular $indexes.
101
- * Maintains min/max indexes.
102
- *
103
- * @param {Data[]} toInsert List of non-indexed items to be inserted.
104
- * @param {number} index The index before/after which the insertion is performed.
105
- * @param {Direction} direction Determines the direction of insertion.
106
- * @param {boolean} fixRight Defines indexes shifting strategy.
107
- * If false, indexes that are greater than the inserted ones are increased.
108
- * If true, indexes that are less than than the inserted ones are decreased.
109
- */
110
- Cache.prototype.insertItems = function (toInsert, index, direction, fixRight) {
111
- var _this = this;
112
- var items = new Map();
113
- var length = toInsert.length;
114
- var min = Infinity, max = -Infinity;
115
- var set = function (item) {
116
- items.set(item.$index, item);
117
- min = item.$index < min ? item.$index : min;
118
- max = item.$index > max ? item.$index : max;
119
- };
120
- this.items.forEach(function (item) {
121
- var shift = 0;
122
- if (direction === Direction.backward) {
123
- if (item.$index < index && fixRight) {
124
- shift = -length;
125
- }
126
- else if (item.$index >= index && !fixRight) {
127
- shift = length;
128
- }
129
- }
130
- else if (direction === Direction.forward) {
131
- if (item.$index <= index && fixRight) {
132
- shift = -length;
133
- }
134
- else if (item.$index > index && !fixRight) {
135
- shift = length;
136
- }
137
- }
138
- if (shift) {
139
- item.changeIndex(item.$index + shift);
140
- }
141
- set(item);
142
- });
143
- if (this.saveData) { // persist data with no sizes
144
- toInsert.forEach(function (data, i) {
145
- var $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);
146
- var item = new ItemCache({ $index: $index, data: data }, _this.saveData);
147
- set(item);
148
- });
149
- }
150
- this.items = items;
151
- this.minIndex = min;
152
- this.maxIndex = max;
153
- };
154
- /**
155
- * Removes items from Set, shifts $indexes of items that remain.
156
- * Replaces current Set with a new one with new regular $indexes.
157
- * Maintains min/max indexes and default item size.
158
- *
159
- * @param {number[]} toRemove List of indexes to be removed.
160
- * @param {boolean} fixRight Defines indexes shifting strategy.
161
- * If false, indexes that are greater than the removed ones will be decreased.
162
- * If true, indexes that are less than than the removed ones will be increased.
163
- */
164
- Cache.prototype.removeItems = function (toRemove, fixRight) {
165
- var _this = this;
166
- var items = new Map();
167
- var min = Infinity, max = -Infinity;
168
- this.items.forEach(function (item) {
169
- if (toRemove.some(function (index) { return index === item.$index; })) {
170
- if (item.size) {
171
- _this.defaultSize.setRemoved(item.size);
172
- }
173
- return;
174
- }
175
- var diff = fixRight
176
- ? toRemove.reduce(function (acc, index) { return acc + (item.$index < index ? 1 : 0); }, 0)
177
- : toRemove.reduce(function (acc, index) { return acc - (item.$index > index ? 1 : 0); }, 0);
178
- item.changeIndex(item.$index + diff);
179
- items.set(item.$index, item);
180
- min = item.$index < min ? item.$index : min;
181
- max = item.$index > max ? item.$index : max;
182
- });
183
- this.items = items;
184
- this.minIndex = min;
185
- this.maxIndex = max;
186
- };
187
- /**
188
- * Destructively updates Set based on subset (before-after) changes.
189
- * Replaces current Set with a new one with new regular $indexes.
190
- * Maintains min/max indexes. Maintains default item size on remove only.
191
- *
192
- * @param {ItemUpdate[]} before Initial subset of items to be replaced by "after".
193
- * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.
194
- * Items to be removed must have toRemove flag: before[].toRemove = true.
195
- * @param {Item<Data>[]} after Transformed subset that replaces "before". Must be $index-incremental.
196
- * Must contain at least 1 $index from "before" or be empty.
197
- * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if "after" is empty.
198
- */
199
- Cache.prototype.updateSubset = function (before, after, fixRight) {
200
- var _this = this;
201
- if (!this.size || !before.length) {
202
- return;
203
- }
204
- var minB = before[0].$index, maxB = before[before.length - 1].$index;
205
- var leftDiff, rightDiff;
206
- if (after.length) {
207
- var minA = after[0].$index, maxA = after[after.length - 1].$index;
208
- leftDiff = minA - minB;
209
- rightDiff = maxA - maxB;
210
- }
211
- else {
212
- leftDiff = fixRight ? maxB - minB + 1 : 0;
213
- rightDiff = fixRight ? 0 : minB - maxB - 1;
214
- }
215
- var items = new Map();
216
- this.items.forEach(function (item) {
217
- if (item.$index < minB) { // items to the left of the subset
218
- item.changeIndex(item.$index + leftDiff);
219
- items.set(item.$index, item);
220
- return;
221
- }
222
- else if (item.$index > maxB) { // items to the right of the subset
223
- item.changeIndex(item.$index + rightDiff);
224
- items.set(item.$index, item);
225
- return;
226
- }
227
- });
228
- after.forEach(function (item) {
229
- return items.set(item.$index, new ItemCache(item, _this.saveData));
230
- });
231
- before // to maintain default size on remove
232
- .filter(function (item) { return item.toRemove; })
233
- .forEach(function (item) { return _this.defaultSize.setRemoved(item.size); });
234
- this.minIndex += leftDiff;
235
- this.maxIndex += rightDiff;
236
- this.items = items;
237
- };
238
- /**
239
- * Shifts all indexes by some value.
240
- * Replaces current Set with a new one with new regular $indexes.
241
- * Maintains min/max indexes.
242
- *
243
- * @param {number} delta A shift value.
244
- */
245
- Cache.prototype.shiftIndexes = function (delta) {
246
- var items = new Map();
247
- var min = Infinity, max = -Infinity;
248
- this.items.forEach(function (item) {
249
- item.changeIndex(item.$index + delta);
250
- items.set(item.$index, item);
251
- min = item.$index < min ? item.$index : min;
252
- max = item.$index > max ? item.$index : max;
253
- });
254
- this.items = items;
255
- this.minIndex = min;
256
- this.maxIndex = max;
257
- };
258
- return Cache;
259
- }());
260
- export { Cache };
1
+ import { DefaultSize } from './defaultSize';
2
+ import { Direction } from '../../inputs/index';
3
+ var ItemCache = /** @class */ (function () {
4
+ function ItemCache(item, saveData) {
5
+ this.$index = item.$index;
6
+ this.data = saveData ? item.data : null;
7
+ this.size = item.size;
8
+ }
9
+ ItemCache.prototype.changeIndex = function (value) {
10
+ this.$index = value;
11
+ };
12
+ return ItemCache;
13
+ }());
14
+ export { ItemCache };
15
+ var Cache = /** @class */ (function () {
16
+ function Cache(_a, logger) {
17
+ var itemSize = _a.itemSize, cacheData = _a.cacheData, cacheOnReload = _a.cacheOnReload, sizeStrategy = _a.sizeStrategy;
18
+ this.itemSize = itemSize;
19
+ this.saveData = cacheData;
20
+ this.cacheOnReload = cacheOnReload;
21
+ this.sizeStrategy = sizeStrategy;
22
+ this.logger = logger;
23
+ this.items = new Map();
24
+ this.defaultSize = new DefaultSize(itemSize, sizeStrategy);
25
+ this.reset(true);
26
+ }
27
+ Cache.prototype.reset = function (force) {
28
+ force = force || !this.cacheOnReload;
29
+ if (force) {
30
+ this.minIndex = +Infinity;
31
+ this.maxIndex = -Infinity;
32
+ this.items.clear();
33
+ }
34
+ this.defaultSize.reset(force);
35
+ };
36
+ Object.defineProperty(Cache.prototype, "size", {
37
+ get: function () {
38
+ return this.items.size;
39
+ },
40
+ enumerable: false,
41
+ configurable: true
42
+ });
43
+ Cache.prototype.get = function (index) {
44
+ return this.items.get(index);
45
+ };
46
+ Cache.prototype.getSizeByIndex = function (index) {
47
+ var item = this.get(index);
48
+ return (item && item.size) || this.defaultSize.get();
49
+ };
50
+ Cache.prototype.getDefaultSize = function () {
51
+ return this.defaultSize.get();
52
+ };
53
+ Cache.prototype.recalculateDefaultSize = function () {
54
+ var _this = this;
55
+ if (this.defaultSize.recalculate(this.size)) {
56
+ this.logger.log(function () { return "default size has been updated: ".concat(_this.defaultSize.get()); });
57
+ return true;
58
+ }
59
+ return false;
60
+ };
61
+ /**
62
+ * Adds item to Set by $index, replaces existed item if $index matches.
63
+ * Maintains min/max indexes and default item size.
64
+ *
65
+ * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.
66
+ * @returns {ItemCache<Data>} Cached item.
67
+ */
68
+ Cache.prototype.add = function (item) {
69
+ var itemCache = this.get(item.$index);
70
+ if (itemCache) {
71
+ // adding item is already cached
72
+ if (this.saveData) {
73
+ itemCache.data = item.data;
74
+ }
75
+ if (itemCache.size !== item.size) {
76
+ if (itemCache.size) {
77
+ this.defaultSize.setExisted(itemCache.size, item.size);
78
+ }
79
+ else {
80
+ this.defaultSize.setNew(item.size);
81
+ }
82
+ itemCache.size = item.size;
83
+ }
84
+ }
85
+ else {
86
+ itemCache = new ItemCache(item, this.saveData);
87
+ this.items.set(item.$index, itemCache);
88
+ this.defaultSize.setNew(item.size);
89
+ }
90
+ if (item.$index < this.minIndex) {
91
+ this.minIndex = item.$index;
92
+ }
93
+ if (item.$index > this.maxIndex) {
94
+ this.maxIndex = item.$index;
95
+ }
96
+ return itemCache;
97
+ };
98
+ /**
99
+ * Inserts items to Set, shifts $indexes of items that remain.
100
+ * Replaces current Set with a new one with new regular $indexes.
101
+ * Maintains min/max indexes.
102
+ *
103
+ * @param {Data[]} toInsert List of non-indexed items to be inserted.
104
+ * @param {number} index The index before/after which the insertion is performed.
105
+ * @param {Direction} direction Determines the direction of insertion.
106
+ * @param {boolean} fixRight Defines indexes shifting strategy.
107
+ * If false, indexes that are greater than the inserted ones are increased.
108
+ * If true, indexes that are less than than the inserted ones are decreased.
109
+ */
110
+ Cache.prototype.insertItems = function (toInsert, index, direction, fixRight) {
111
+ var _this = this;
112
+ var items = new Map();
113
+ var length = toInsert.length;
114
+ var min = Infinity, max = -Infinity;
115
+ var set = function (item) {
116
+ items.set(item.$index, item);
117
+ min = item.$index < min ? item.$index : min;
118
+ max = item.$index > max ? item.$index : max;
119
+ };
120
+ this.items.forEach(function (item) {
121
+ var shift = 0;
122
+ if (direction === Direction.backward) {
123
+ if (item.$index < index && fixRight) {
124
+ shift = -length;
125
+ }
126
+ else if (item.$index >= index && !fixRight) {
127
+ shift = length;
128
+ }
129
+ }
130
+ else if (direction === Direction.forward) {
131
+ if (item.$index <= index && fixRight) {
132
+ shift = -length;
133
+ }
134
+ else if (item.$index > index && !fixRight) {
135
+ shift = length;
136
+ }
137
+ }
138
+ if (shift) {
139
+ item.changeIndex(item.$index + shift);
140
+ }
141
+ set(item);
142
+ });
143
+ if (this.saveData) {
144
+ // persist data with no sizes
145
+ toInsert.forEach(function (data, i) {
146
+ var $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);
147
+ var item = new ItemCache({ $index: $index, data: data }, _this.saveData);
148
+ set(item);
149
+ });
150
+ }
151
+ this.items = items;
152
+ this.minIndex = min;
153
+ this.maxIndex = max;
154
+ };
155
+ /**
156
+ * Removes items from Set, shifts $indexes of items that remain.
157
+ * Replaces current Set with a new one with new regular $indexes.
158
+ * Maintains min/max indexes and default item size.
159
+ *
160
+ * @param {number[]} toRemove List of indexes to be removed.
161
+ * @param {boolean} fixRight Defines indexes shifting strategy.
162
+ * If false, indexes that are greater than the removed ones will be decreased.
163
+ * If true, indexes that are less than than the removed ones will be increased.
164
+ */
165
+ Cache.prototype.removeItems = function (toRemove, fixRight) {
166
+ var _this = this;
167
+ var items = new Map();
168
+ var min = Infinity, max = -Infinity;
169
+ this.items.forEach(function (item) {
170
+ if (toRemove.some(function (index) { return index === item.$index; })) {
171
+ if (item.size) {
172
+ _this.defaultSize.setRemoved(item.size);
173
+ }
174
+ return;
175
+ }
176
+ var diff = fixRight
177
+ ? toRemove.reduce(function (acc, index) { return acc + (item.$index < index ? 1 : 0); }, 0)
178
+ : toRemove.reduce(function (acc, index) { return acc - (item.$index > index ? 1 : 0); }, 0);
179
+ item.changeIndex(item.$index + diff);
180
+ items.set(item.$index, item);
181
+ min = item.$index < min ? item.$index : min;
182
+ max = item.$index > max ? item.$index : max;
183
+ });
184
+ this.items = items;
185
+ this.minIndex = min;
186
+ this.maxIndex = max;
187
+ };
188
+ /**
189
+ * Destructively updates Set based on subset (before-after) changes.
190
+ * Replaces current Set with a new one with new regular $indexes.
191
+ * Maintains min/max indexes. Maintains default item size on remove only.
192
+ *
193
+ * @param {ItemUpdate[]} before Initial subset of items to be replaced by "after".
194
+ * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.
195
+ * Items to be removed must have toRemove flag: before[].toRemove = true.
196
+ * @param {Item<Data>[]} after Transformed subset that replaces "before". Must be $index-incremental.
197
+ * Must contain at least 1 $index from "before" or be empty.
198
+ * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if "after" is empty.
199
+ */
200
+ Cache.prototype.updateSubset = function (before, after, fixRight) {
201
+ var _this = this;
202
+ if (!this.size || !before.length) {
203
+ return;
204
+ }
205
+ var minB = before[0].$index, maxB = before[before.length - 1].$index;
206
+ var leftDiff, rightDiff;
207
+ if (after.length) {
208
+ var minA = after[0].$index, maxA = after[after.length - 1].$index;
209
+ leftDiff = minA - minB;
210
+ rightDiff = maxA - maxB;
211
+ }
212
+ else {
213
+ leftDiff = fixRight ? maxB - minB + 1 : 0;
214
+ rightDiff = fixRight ? 0 : minB - maxB - 1;
215
+ }
216
+ var items = new Map();
217
+ this.items.forEach(function (item) {
218
+ if (item.$index < minB) {
219
+ // items to the left of the subset
220
+ item.changeIndex(item.$index + leftDiff);
221
+ items.set(item.$index, item);
222
+ return;
223
+ }
224
+ else if (item.$index > maxB) {
225
+ // items to the right of the subset
226
+ item.changeIndex(item.$index + rightDiff);
227
+ items.set(item.$index, item);
228
+ return;
229
+ }
230
+ });
231
+ after.forEach(function (item // subset items
232
+ ) { return items.set(item.$index, new ItemCache(item, _this.saveData)); });
233
+ before // to maintain default size on remove
234
+ .filter(function (item) { return item.toRemove; })
235
+ .forEach(function (item) { return _this.defaultSize.setRemoved(item.size); });
236
+ this.minIndex += leftDiff;
237
+ this.maxIndex += rightDiff;
238
+ this.items = items;
239
+ };
240
+ /**
241
+ * Shifts all indexes by some value.
242
+ * Replaces current Set with a new one with new regular $indexes.
243
+ * Maintains min/max indexes.
244
+ *
245
+ * @param {number} delta A shift value.
246
+ */
247
+ Cache.prototype.shiftIndexes = function (delta) {
248
+ var items = new Map();
249
+ var min = Infinity, max = -Infinity;
250
+ this.items.forEach(function (item) {
251
+ item.changeIndex(item.$index + delta);
252
+ items.set(item.$index, item);
253
+ min = item.$index < min ? item.$index : min;
254
+ max = item.$index > max ? item.$index : max;
255
+ });
256
+ this.items = items;
257
+ this.minIndex = min;
258
+ this.maxIndex = max;
259
+ };
260
+ return Cache;
261
+ }());
262
+ export { Cache };
261
263
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultSize } from './defaultSize';\r\nimport { Item } from '../item';\r\nimport { Settings } from '../settings';\r\nimport { Logger } from '../logger';\r\nimport { SizeStrategy, Direction } from '../../inputs/index';\r\n\r\ninterface ItemToCache<Data> {\r\n $index: number;\r\n data: Data;\r\n size?: number;\r\n}\r\n\r\ninterface ItemUpdate {\r\n $index: number;\r\n size: number;\r\n toRemove?: boolean;\r\n}\r\n\r\nexport class ItemCache<Data = unknown> {\r\n $index: number;\r\n data: Data | null;\r\n size?: number;\r\n position: number;\r\n\r\n constructor(item: ItemToCache<Data>, saveData: boolean) {\r\n this.$index = item.$index;\r\n this.data = saveData ? item.data : null;\r\n this.size = item.size;\r\n }\r\n\r\n changeIndex(value: number): void {\r\n this.$index = value;\r\n }\r\n}\r\n\r\nexport class Cache<Data = unknown> {\r\n minIndex: number;\r\n maxIndex: number;\r\n\r\n readonly itemSize: number;\r\n readonly saveData: boolean;\r\n readonly cacheOnReload: boolean;\r\n readonly sizeStrategy: SizeStrategy;\r\n readonly logger: Logger;\r\n private items: Map<number, ItemCache<Data>>;\r\n private defaultSize: DefaultSize;\r\n\r\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\r\n this.itemSize = itemSize;\r\n this.saveData = cacheData;\r\n this.cacheOnReload = cacheOnReload;\r\n this.sizeStrategy = sizeStrategy;\r\n this.logger = logger;\r\n this.items = new Map<number, ItemCache<Data>>();\r\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\r\n this.reset(true);\r\n }\r\n\r\n reset(force: boolean): void {\r\n force = force || !this.cacheOnReload;\r\n if (force) {\r\n this.minIndex = +Infinity;\r\n this.maxIndex = -Infinity;\r\n this.items.clear();\r\n }\r\n this.defaultSize.reset(force);\r\n }\r\n\r\n get size(): number {\r\n return this.items.size;\r\n }\r\n\r\n get(index: number): ItemCache<Data> | undefined {\r\n return this.items.get(index);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n const item = this.get(index);\r\n return item && item.size || this.defaultSize.get();\r\n }\r\n\r\n getDefaultSize(): number {\r\n return this.defaultSize.get();\r\n }\r\n\r\n recalculateDefaultSize(): boolean {\r\n if (this.defaultSize.recalculate(this.size)) {\r\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds item to Set by $index, replaces existed item if $index matches.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\r\n * \r\n * @returns {ItemCache<Data>} Cached item.\r\n */\r\n add(item: Item<Data>): ItemCache<Data> {\r\n let itemCache = this.get(item.$index);\r\n if (itemCache) { // adding item is already cached\r\n if (this.saveData) {\r\n itemCache.data = item.data;\r\n }\r\n if (itemCache.size !== item.size) {\r\n if (itemCache.size) {\r\n this.defaultSize.setExisted(itemCache.size, item.size);\r\n } else {\r\n this.defaultSize.setNew(item.size);\r\n }\r\n itemCache.size = item.size;\r\n }\r\n } else {\r\n itemCache = new ItemCache<Data>(item, this.saveData);\r\n this.items.set(item.$index, itemCache);\r\n this.defaultSize.setNew(item.size);\r\n }\r\n if (item.$index < this.minIndex) {\r\n this.minIndex = item.$index;\r\n }\r\n if (item.$index > this.maxIndex) {\r\n this.maxIndex = item.$index;\r\n }\r\n return itemCache;\r\n }\r\n\r\n /**\r\n * Inserts items to Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\r\n * @param {number} index The index before/after which the insertion is performed.\r\n * @param {Direction} direction Determines the direction of insertion.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the inserted ones are increased.\r\n * If true, indexes that are less than than the inserted ones are decreased.\r\n */\r\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n const length = toInsert.length;\r\n let min = Infinity, max = -Infinity;\r\n const set = (item: ItemCache<Data>) => {\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n };\r\n this.items.forEach(item => {\r\n let shift = 0;\r\n if (direction === Direction.backward) {\r\n if (item.$index < index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index >= index && !fixRight) {\r\n shift = length;\r\n }\r\n } else if (direction === Direction.forward) {\r\n if (item.$index <= index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index > index && !fixRight) {\r\n shift = length;\r\n }\r\n }\r\n if (shift) {\r\n item.changeIndex(item.$index + shift);\r\n }\r\n set(item);\r\n });\r\n if (this.saveData) { // persist data with no sizes\r\n toInsert.forEach((data, i) => {\r\n const $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\r\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\r\n set(item);\r\n });\r\n }\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Removes items from Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {number[]} toRemove List of indexes to be removed.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the removed ones will be decreased.\r\n * If true, indexes that are less than than the removed ones will be increased.\r\n */\r\n removeItems(toRemove: number[], fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n if (toRemove.some(index => index === item.$index)) {\r\n if (item.size) {\r\n this.defaultSize.setRemoved(item.size);\r\n }\r\n return;\r\n }\r\n const diff = fixRight\r\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\r\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\r\n item.changeIndex(item.$index + diff);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Destructively updates Set based on subset (before-after) changes.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes. Maintains default item size on remove only.\r\n *\r\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\r\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\r\n * Items to be removed must have toRemove flag: before[].toRemove = true.\r\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\r\n * Must contain at least 1 $index from \"before\" or be empty.\r\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\r\n */\r\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\r\n if (!this.size || !before.length) {\r\n return;\r\n }\r\n const minB = before[0].$index, maxB = before[before.length - 1].$index;\r\n let leftDiff: number, rightDiff: number;\r\n if (after.length) {\r\n const minA = after[0].$index, maxA = after[after.length - 1].$index;\r\n leftDiff = minA - minB;\r\n rightDiff = maxA - maxB;\r\n } else {\r\n leftDiff = fixRight ? maxB - minB + 1 : 0;\r\n rightDiff = fixRight ? 0 : minB - maxB - 1;\r\n }\r\n const items = new Map<number, ItemCache<Data>>();\r\n this.items.forEach(item => {\r\n if (item.$index < minB) { // items to the left of the subset\r\n item.changeIndex(item.$index + leftDiff);\r\n items.set(item.$index, item);\r\n return;\r\n } else if (item.$index > maxB) { // items to the right of the subset\r\n item.changeIndex(item.$index + rightDiff);\r\n items.set(item.$index, item);\r\n return;\r\n }\r\n });\r\n after.forEach(item => // subset items\r\n items.set(item.$index, new ItemCache<Data>(item, this.saveData))\r\n );\r\n before // to maintain default size on remove\r\n .filter(item => item.toRemove)\r\n .forEach(item => this.defaultSize.setRemoved(item.size));\r\n this.minIndex += leftDiff;\r\n this.maxIndex += rightDiff;\r\n this.items = items;\r\n }\r\n\r\n /**\r\n * Shifts all indexes by some value.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {number} delta A shift value.\r\n */\r\n shiftIndexes(delta: number): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n item.changeIndex(item.$index + delta);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultSize } from './defaultSize';\nimport { Item } from '../item';\nimport { Settings } from '../settings';\nimport { Logger } from '../logger';\nimport { SizeStrategy, Direction } from '../../inputs/index';\n\ninterface ItemToCache<Data> {\n $index: number;\n data: Data;\n size?: number;\n}\n\ninterface ItemUpdate {\n $index: number;\n size: number;\n toRemove?: boolean;\n}\n\nexport class ItemCache<Data = unknown> {\n $index: number;\n data: Data | null;\n size?: number;\n position: number;\n\n constructor(item: ItemToCache<Data>, saveData: boolean) {\n this.$index = item.$index;\n this.data = saveData ? item.data : null;\n this.size = item.size;\n }\n\n changeIndex(value: number): void {\n this.$index = value;\n }\n}\n\nexport class Cache<Data = unknown> {\n minIndex: number;\n maxIndex: number;\n\n readonly itemSize: number;\n readonly saveData: boolean;\n readonly cacheOnReload: boolean;\n readonly sizeStrategy: SizeStrategy;\n readonly logger: Logger;\n private items: Map<number, ItemCache<Data>>;\n private defaultSize: DefaultSize;\n\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\n this.itemSize = itemSize;\n this.saveData = cacheData;\n this.cacheOnReload = cacheOnReload;\n this.sizeStrategy = sizeStrategy;\n this.logger = logger;\n this.items = new Map<number, ItemCache<Data>>();\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\n this.reset(true);\n }\n\n reset(force: boolean): void {\n force = force || !this.cacheOnReload;\n if (force) {\n this.minIndex = +Infinity;\n this.maxIndex = -Infinity;\n this.items.clear();\n }\n this.defaultSize.reset(force);\n }\n\n get size(): number {\n return this.items.size;\n }\n\n get(index: number): ItemCache<Data> | undefined {\n return this.items.get(index);\n }\n\n getSizeByIndex(index: number): number {\n const item = this.get(index);\n return (item && item.size) || this.defaultSize.get();\n }\n\n getDefaultSize(): number {\n return this.defaultSize.get();\n }\n\n recalculateDefaultSize(): boolean {\n if (this.defaultSize.recalculate(this.size)) {\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\n return true;\n }\n return false;\n }\n\n /**\n * Adds item to Set by $index, replaces existed item if $index matches.\n * Maintains min/max indexes and default item size.\n *\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\n * @returns {ItemCache<Data>} Cached item.\n */\n add(item: Item<Data>): ItemCache<Data> {\n let itemCache = this.get(item.$index);\n if (itemCache) {\n // adding item is already cached\n if (this.saveData) {\n itemCache.data = item.data;\n }\n if (itemCache.size !== item.size) {\n if (itemCache.size) {\n this.defaultSize.setExisted(itemCache.size, item.size);\n } else {\n this.defaultSize.setNew(item.size);\n }\n itemCache.size = item.size;\n }\n } else {\n itemCache = new ItemCache<Data>(item, this.saveData);\n this.items.set(item.$index, itemCache);\n this.defaultSize.setNew(item.size);\n }\n if (item.$index < this.minIndex) {\n this.minIndex = item.$index;\n }\n if (item.$index > this.maxIndex) {\n this.maxIndex = item.$index;\n }\n return itemCache;\n }\n\n /**\n * Inserts items to Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\n * @param {number} index The index before/after which the insertion is performed.\n * @param {Direction} direction Determines the direction of insertion.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the inserted ones are increased.\n * If true, indexes that are less than than the inserted ones are decreased.\n */\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n const length = toInsert.length;\n let min = Infinity,\n max = -Infinity;\n const set = (item: ItemCache<Data>) => {\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n };\n this.items.forEach(item => {\n let shift = 0;\n if (direction === Direction.backward) {\n if (item.$index < index && fixRight) {\n shift = -length;\n } else if (item.$index >= index && !fixRight) {\n shift = length;\n }\n } else if (direction === Direction.forward) {\n if (item.$index <= index && fixRight) {\n shift = -length;\n } else if (item.$index > index && !fixRight) {\n shift = length;\n }\n }\n if (shift) {\n item.changeIndex(item.$index + shift);\n }\n set(item);\n });\n if (this.saveData) {\n // persist data with no sizes\n toInsert.forEach((data, i) => {\n const $index =\n index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\n set(item);\n });\n }\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Removes items from Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes and default item size.\n *\n * @param {number[]} toRemove List of indexes to be removed.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the removed ones will be decreased.\n * If true, indexes that are less than than the removed ones will be increased.\n */\n removeItems(toRemove: number[], fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity,\n max = -Infinity;\n this.items.forEach(item => {\n if (toRemove.some(index => index === item.$index)) {\n if (item.size) {\n this.defaultSize.setRemoved(item.size);\n }\n return;\n }\n const diff = fixRight\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\n item.changeIndex(item.$index + diff);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Destructively updates Set based on subset (before-after) changes.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes. Maintains default item size on remove only.\n *\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\n * Items to be removed must have toRemove flag: before[].toRemove = true.\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\n * Must contain at least 1 $index from \"before\" or be empty.\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\n */\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\n if (!this.size || !before.length) {\n return;\n }\n const minB = before[0].$index,\n maxB = before[before.length - 1].$index;\n let leftDiff: number, rightDiff: number;\n if (after.length) {\n const minA = after[0].$index,\n maxA = after[after.length - 1].$index;\n leftDiff = minA - minB;\n rightDiff = maxA - maxB;\n } else {\n leftDiff = fixRight ? maxB - minB + 1 : 0;\n rightDiff = fixRight ? 0 : minB - maxB - 1;\n }\n const items = new Map<number, ItemCache<Data>>();\n this.items.forEach(item => {\n if (item.$index < minB) {\n // items to the left of the subset\n item.changeIndex(item.$index + leftDiff);\n items.set(item.$index, item);\n return;\n } else if (item.$index > maxB) {\n // items to the right of the subset\n item.changeIndex(item.$index + rightDiff);\n items.set(item.$index, item);\n return;\n }\n });\n after.forEach(\n (\n item // subset items\n ) => items.set(item.$index, new ItemCache<Data>(item, this.saveData))\n );\n before // to maintain default size on remove\n .filter(item => item.toRemove)\n .forEach(item => this.defaultSize.setRemoved(item.size));\n this.minIndex += leftDiff;\n this.maxIndex += rightDiff;\n this.items = items;\n }\n\n /**\n * Shifts all indexes by some value.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {number} delta A shift value.\n */\n shiftIndexes(delta: number): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity,\n max = -Infinity;\n this.items.forEach(item => {\n item.changeIndex(item.$index + delta);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n}\n"]}