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,488 +1,487 @@
1
- import { Reactive } from './reactive';
2
- import { AdapterPropName, AdapterPropType, EMPTY_ITEM, getDefaultAdapterProps, methodPausedResult, methodPreResult, reactiveConfigStorage } from './adapter/props';
3
- import { wantedUtils } from './adapter/wanted';
4
- import { Direction } from '../inputs/index';
5
- import { AdapterProcess, ProcessStatus } from '../processes/index';
6
- const ADAPTER_PROPS_STUB = getDefaultAdapterProps();
7
- const ALLOWED_METHODS_WHEN_PAUSED = ADAPTER_PROPS_STUB.filter(v => !!v.allowedWhenPaused).map(v => v.name);
8
- const _has = (obj, prop) => !!obj && typeof obj === 'object' && Object.prototype.hasOwnProperty.call(obj, prop);
9
- const convertAppendArgs = (prepend, options, eof) => {
10
- let result = options;
11
- if (!_has(options, 'items')) {
12
- const items = !Array.isArray(options) ? [options] : options;
13
- result = prepend ? { items, bof: eof } : { items, eof: eof };
14
- }
15
- return result;
16
- };
17
- const convertRemoveArgs = (options) => {
18
- if (!(_has(options, 'predicate') || _has(options, 'indexes'))) {
19
- const predicate = options;
20
- options = { predicate };
21
- }
22
- return options;
23
- };
24
- export class Adapter {
25
- get workflow() {
26
- return this.getWorkflow();
27
- }
28
- get reloadCount() {
29
- return this.reloadCounter;
30
- }
31
- get reloadId() {
32
- return this.id + '.' + this.reloadCounter;
33
- }
34
- getPromisifiedMethod(method, args) {
35
- return new Promise(resolve => {
36
- if (this.relax$) {
37
- this.relax$.once(value => resolve(value));
38
- }
39
- method.apply(this, args);
40
- });
41
- }
42
- getWorkflowRunnerMethod(method, name) {
43
- return (...args) => {
44
- var _a, _b, _c, _d;
45
- if (!this.relax$) {
46
- (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, () => 'scroller is not initialized: ' + name + ' method is ignored');
47
- return Promise.resolve(methodPreResult);
48
- }
49
- if (this.paused && !ALLOWED_METHODS_WHEN_PAUSED.includes(name)) {
50
- (_d = (_c = this.logger) === null || _c === void 0 ? void 0 : _c.log) === null || _d === void 0 ? void 0 : _d.call(_c, () => 'scroller is paused: ' + name + ' method is ignored');
51
- return Promise.resolve(methodPausedResult);
52
- }
53
- return this.getPromisifiedMethod(method, args);
54
- };
55
- }
56
- constructor(context, getWorkflow, logger) {
57
- this.source = {}; // for Reactive props
58
- this.box = {}; // for Scalars over Reactive props
59
- this.demand = {}; // for Scalars on demand
60
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
61
- this.setFirstOrLastVisible = (_) => { };
62
- this.getWorkflow = getWorkflow;
63
- this.logger = logger;
64
- this.relax$ = null;
65
- this.relaxRun = null;
66
- this.reloadCounter = 0;
67
- const contextId = (context === null || context === void 0 ? void 0 : context.id) || -1;
68
- // public context (if exists) should provide access to Reactive props config by id
69
- const reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};
70
- // the Adapter initialization should not trigger "wanted" props setting;
71
- // after the initialization is completed, "wanted" functionality must be unblocked
72
- wantedUtils.setBlock(true, contextId);
73
- // make array of the original values from public context if present
74
- const adapterProps = context
75
- ? ADAPTER_PROPS_STUB.map(prop => {
76
- let value = context[prop.name];
77
- // if context is augmented, we need to replace external reactive props with inner ones
78
- if (context.augmented) {
79
- const reactiveProp = reactivePropsStore[prop.name];
80
- if (reactiveProp) {
81
- value = reactiveProp.default; // boolean doesn't matter here
82
- }
83
- }
84
- return (Object.assign(Object.assign({}, prop), { value }));
85
- })
86
- : getDefaultAdapterProps();
87
- // restore default reactive props if they were configured
88
- Object.entries(reactivePropsStore).forEach(([key, value]) => {
89
- const prop = adapterProps.find(({ name }) => name === key);
90
- if (prop && value) {
91
- prop.value = value.default;
92
- }
93
- });
94
- // Scalar permanent props
95
- adapterProps
96
- .filter(({ type, permanent }) => type === AdapterPropType.Scalar && permanent)
97
- .forEach(({ name, value }) => Object.defineProperty(this, name, {
98
- configurable: true,
99
- get: () => value
100
- }));
101
- // Reactive props: store original values in "source" container, to avoid extra .get() calls on scalar twins set
102
- adapterProps
103
- .filter(prop => prop.type === AdapterPropType.Reactive)
104
- .forEach(({ name, value }) => {
105
- this.source[name] = value;
106
- Object.defineProperty(this, name, {
107
- configurable: true,
108
- get: () => this.source[name]
109
- });
110
- });
111
- // for "wanted" props that can be explicitly requested for the first time after the Adapter initialization,
112
- // an implicit calculation of the initial value is required;
113
- // so this method should be called when accessing the "wanted" props through one of the following getters
114
- const processWanted = (prop) => {
115
- if (wantedUtils.setBox(prop, contextId)) {
116
- if ([AdapterPropName.firstVisible, AdapterPropName.firstVisible$].some(n => n === prop.name)) {
117
- this.setFirstOrLastVisible({ first: true });
118
- }
119
- else if ([AdapterPropName.lastVisible, AdapterPropName.lastVisible$].some(n => n === prop.name)) {
120
- this.setFirstOrLastVisible({ last: true });
121
- }
122
- }
123
- };
124
- // Scalar props that have Reactive twins
125
- // 1) reactive props (from "source") should be triggered on set
126
- // 2) scalars should use "box" container on get
127
- // 3) "wanted" scalars should also run wanted-related logic on get
128
- adapterProps
129
- .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)
130
- .forEach((prop) => {
131
- const { name, value, reactive } = prop;
132
- this.box[name] = value;
133
- Object.defineProperty(this, name, {
134
- configurable: true,
135
- set: (newValue) => {
136
- if (newValue !== this.box[name]) {
137
- this.box[name] = newValue;
138
- this.source[reactive].set(newValue);
139
- // need to emit new value through the configured reactive prop if present
140
- const reactiveProp = reactivePropsStore[reactive];
141
- if (reactiveProp) {
142
- reactiveProp.emit(reactiveProp.source, newValue);
143
- }
144
- }
145
- },
146
- get: () => {
147
- processWanted(prop);
148
- return this.box[name];
149
- }
150
- });
151
- });
152
- // Scalar props on-demand
153
- // these scalars should use "demand" container
154
- // setting defaults should be overridden on init()
155
- adapterProps
156
- .filter(prop => prop.type === AdapterPropType.Scalar && prop.onDemand)
157
- .forEach(({ name, value }) => {
158
- this.demand[name] = value;
159
- Object.defineProperty(this, name, {
160
- configurable: true,
161
- get: () => this.demand[name]
162
- });
163
- });
164
- if (!context) {
165
- return;
166
- }
167
- // Adapter public context augmentation
168
- adapterProps
169
- .forEach((prop) => {
170
- const { name, type, permanent } = prop;
171
- let value = this[name];
172
- if (type === AdapterPropType.Function) {
173
- value = value.bind(this);
174
- }
175
- else if (type === AdapterPropType.WorkflowRunner) {
176
- value = this.getWorkflowRunnerMethod(value, name);
177
- }
178
- else if (type === AdapterPropType.Reactive && reactivePropsStore[name]) {
179
- value = context[name];
180
- }
181
- else if (name === AdapterPropName.augmented) {
182
- value = true;
183
- }
184
- const nonPermanentScalar = !permanent && type === AdapterPropType.Scalar;
185
- Object.defineProperty(context, name, {
186
- configurable: true,
187
- get: () => {
188
- processWanted(prop); // consider accessing "wanted" Reactive props
189
- if (nonPermanentScalar) {
190
- return this[name]; // non-permanent Scalars should be taken in runtime
191
- }
192
- return value; // other props (Reactive/Functions/WorkflowRunners) can be defined once
193
- }
194
- });
195
- });
196
- this.externalContext = context;
197
- wantedUtils.setBlock(false, contextId);
198
- }
199
- initialize({ buffer, state, viewport, logger, adapterRun$, getWorkflow }) {
200
- // buffer
201
- Object.defineProperty(this.demand, AdapterPropName.itemsCount, {
202
- get: () => buffer.getVisibleItemsCount()
203
- });
204
- Object.defineProperty(this.demand, AdapterPropName.bufferInfo, {
205
- get: () => ({
206
- firstIndex: buffer.firstIndex,
207
- lastIndex: buffer.lastIndex,
208
- minIndex: buffer.minIndex,
209
- maxIndex: buffer.maxIndex,
210
- absMinIndex: buffer.absMinIndex,
211
- absMaxIndex: buffer.absMaxIndex,
212
- defaultSize: buffer.defaultSize,
213
- })
214
- });
215
- this.bof = buffer.bof.get();
216
- buffer.bof.on(bof => this.bof = bof);
217
- this.eof = buffer.eof.get();
218
- buffer.eof.on(eof => this.eof = eof);
219
- // state
220
- Object.defineProperty(this.demand, AdapterPropName.packageInfo, {
221
- get: () => state.packageInfo
222
- });
223
- this.loopPending = state.cycle.innerLoop.busy.get();
224
- state.cycle.innerLoop.busy.on(busy => this.loopPending = busy);
225
- this.isLoading = state.cycle.busy.get();
226
- state.cycle.busy.on(busy => this.isLoading = busy);
227
- this.paused = state.paused.get();
228
- state.paused.on(paused => this.paused = paused);
229
- //viewport
230
- this.setFirstOrLastVisible = ({ first, last, workflow }) => {
231
- var _a, _b, _c;
232
- if ((!first && !last) || ((_a = workflow === null || workflow === void 0 ? void 0 : workflow.call) === null || _a === void 0 ? void 0 : _a.interrupted)) {
233
- return;
234
- }
235
- const token = first ? AdapterPropName.firstVisible : AdapterPropName.lastVisible;
236
- if (!((_c = wantedUtils.getBox((_b = this.externalContext) === null || _b === void 0 ? void 0 : _b.id)) === null || _c === void 0 ? void 0 : _c[token])) {
237
- return;
238
- }
239
- if (buffer.items.some(({ element }) => !element)) {
240
- logger.log('skipping first/lastVisible set because not all buffered items are rendered at this moment');
241
- return;
242
- }
243
- const direction = first ? Direction.backward : Direction.forward;
244
- const { item } = viewport.getEdgeVisibleItem(buffer.items, direction);
245
- if (!item || item.element !== this[token].element) {
246
- this[token] = (item ? item.get() : EMPTY_ITEM);
247
- }
248
- };
249
- // logger
250
- this.logger = logger;
251
- // self-pending subscription; set up only on the very first init
252
- if (adapterRun$) {
253
- if (!this.relax$) {
254
- this.relax$ = new Reactive();
255
- }
256
- const relax$ = this.relax$;
257
- adapterRun$.on(({ status, payload }) => {
258
- let unSubRelax = () => { };
259
- if (status === ProcessStatus.start) {
260
- unSubRelax = this.isLoading$.on(value => {
261
- if (!value) {
262
- unSubRelax();
263
- relax$.set({ success: true, immediate: false, details: null });
264
- }
265
- });
266
- }
267
- else if (status === ProcessStatus.done || status === ProcessStatus.error) {
268
- unSubRelax();
269
- relax$.set({
270
- success: status !== ProcessStatus.error,
271
- immediate: true,
272
- details: status === ProcessStatus.error && payload ? String(payload.error) : null
273
- });
274
- }
275
- });
276
- }
277
- // workflow getter
278
- if (getWorkflow) {
279
- this.getWorkflow = getWorkflow;
280
- }
281
- // init
282
- this.init = true;
283
- }
284
- dispose() {
285
- if (this.relax$) {
286
- this.relax$.dispose();
287
- }
288
- if (this.externalContext) {
289
- this.resetContext();
290
- }
291
- Object.getOwnPropertyNames(this).forEach(prop => {
292
- delete this[prop];
293
- });
294
- this.disposed = true;
295
- }
296
- resetContext() {
297
- var _a;
298
- const reactiveStore = reactiveConfigStorage.get((_a = this.externalContext) === null || _a === void 0 ? void 0 : _a.id);
299
- ADAPTER_PROPS_STUB
300
- .forEach(({ type, permanent, name, value }) => {
301
- // assign initial values to non-reactive non-permanent props
302
- if (type !== AdapterPropType.Reactive && !permanent) {
303
- Object.defineProperty(this.externalContext, name, {
304
- configurable: true,
305
- get: () => value
306
- });
307
- }
308
- // reset reactive props
309
- if (type === AdapterPropType.Reactive && reactiveStore) {
310
- const property = reactiveStore[name];
311
- if (property) {
312
- property.default.reset();
313
- property.emit(property.source, property.default.get());
314
- }
315
- }
316
- });
317
- }
318
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
319
- reset(options) {
320
- this.reloadCounter++;
321
- this.logger.logAdapterMethod('reset', options, ` of ${this.reloadId}`);
322
- this.workflow.call({
323
- process: AdapterProcess.reset,
324
- status: ProcessStatus.start,
325
- payload: { options }
326
- });
327
- }
328
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
329
- reload(options) {
330
- this.reloadCounter++;
331
- this.logger.logAdapterMethod('reload', options, ` of ${this.reloadId}`);
332
- this.workflow.call({
333
- process: AdapterProcess.reload,
334
- status: ProcessStatus.start,
335
- payload: { options }
336
- });
337
- }
338
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
339
- append(_options, eof) {
340
- const options = convertAppendArgs(false, _options, eof); // support old signature
341
- this.logger.logAdapterMethod('append', [options.items, options.eof]);
342
- this.workflow.call({
343
- process: AdapterProcess.append,
344
- status: ProcessStatus.start,
345
- payload: { options }
346
- });
347
- }
348
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
349
- prepend(_options, bof) {
350
- const options = convertAppendArgs(true, _options, bof); // support old signature
351
- this.logger.logAdapterMethod('prepend', [options.items, options.bof]);
352
- this.workflow.call({
353
- process: AdapterProcess.prepend,
354
- status: ProcessStatus.start,
355
- payload: { options }
356
- });
357
- }
358
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
359
- check() {
360
- this.logger.logAdapterMethod('check');
361
- this.workflow.call({
362
- process: AdapterProcess.check,
363
- status: ProcessStatus.start
364
- });
365
- }
366
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
367
- remove(options) {
368
- options = convertRemoveArgs(options); // support old signature
369
- this.logger.logAdapterMethod('remove', options);
370
- this.workflow.call({
371
- process: AdapterProcess.remove,
372
- status: ProcessStatus.start,
373
- payload: { options }
374
- });
375
- }
376
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
377
- clip(options) {
378
- this.logger.logAdapterMethod('clip', options);
379
- this.workflow.call({
380
- process: AdapterProcess.clip,
381
- status: ProcessStatus.start,
382
- payload: { options }
383
- });
384
- }
385
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
386
- insert(options) {
387
- this.logger.logAdapterMethod('insert', options);
388
- this.workflow.call({
389
- process: AdapterProcess.insert,
390
- status: ProcessStatus.start,
391
- payload: { options }
392
- });
393
- }
394
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
395
- replace(options) {
396
- this.logger.logAdapterMethod('replace', options);
397
- this.workflow.call({
398
- process: AdapterProcess.replace,
399
- status: ProcessStatus.start,
400
- payload: { options }
401
- });
402
- }
403
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
404
- update(options) {
405
- this.logger.logAdapterMethod('update', options);
406
- this.workflow.call({
407
- process: AdapterProcess.update,
408
- status: ProcessStatus.start,
409
- payload: { options }
410
- });
411
- }
412
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
413
- pause() {
414
- this.logger.logAdapterMethod('pause');
415
- this.workflow.call({
416
- process: AdapterProcess.pause,
417
- status: ProcessStatus.start
418
- });
419
- }
420
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
421
- resume() {
422
- this.logger.logAdapterMethod('resume');
423
- this.workflow.call({
424
- process: AdapterProcess.pause,
425
- status: ProcessStatus.start,
426
- payload: { options: { resume: true } }
427
- });
428
- }
429
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
430
- fix(options) {
431
- this.logger.logAdapterMethod('fix', options);
432
- this.workflow.call({
433
- process: AdapterProcess.fix,
434
- status: ProcessStatus.start,
435
- payload: { options }
436
- });
437
- }
438
- relaxUnchained(callback, reloadId) {
439
- const runCallback = () => typeof callback === 'function' && reloadId === this.reloadId && callback();
440
- if (!this.isLoading) {
441
- runCallback();
442
- }
443
- return new Promise(resolve => {
444
- if (!this.isLoading) {
445
- resolve(true);
446
- return;
447
- }
448
- this.isLoading$.once(() => {
449
- runCallback();
450
- resolve(false);
451
- });
452
- }).then(immediate => {
453
- var _a, _b;
454
- if (this.disposed) {
455
- return {
456
- immediate,
457
- success: false,
458
- details: 'Adapter was disposed'
459
- };
460
- }
461
- const success = reloadId === this.reloadId;
462
- (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, () => !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0);
463
- return {
464
- immediate,
465
- success,
466
- details: !success ? 'Interrupted by reload or reset' : null
467
- };
468
- });
469
- }
470
- relax(callback) {
471
- const reloadId = this.reloadId;
472
- this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);
473
- if (!this.init) {
474
- return Promise.resolve(methodPreResult);
475
- }
476
- return this.relaxRun = this.relaxRun
477
- ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))
478
- : this.relaxUnchained(callback, reloadId).then((result) => {
479
- this.relaxRun = null;
480
- return result;
481
- });
482
- }
483
- showLog() {
484
- this.logger.logAdapterMethod('showLog');
485
- this.logger.logForce();
486
- }
487
- }
1
+ import { Reactive } from './reactive';
2
+ import { AdapterPropName, AdapterPropType, EMPTY_ITEM, getDefaultAdapterProps, methodPausedResult, methodPreResult, reactiveConfigStorage } from './adapter/props';
3
+ import { wantedUtils } from './adapter/wanted';
4
+ import { Direction } from '../inputs/index';
5
+ import { AdapterProcess, ProcessStatus } from '../processes/index';
6
+ const ADAPTER_PROPS_STUB = getDefaultAdapterProps();
7
+ const ALLOWED_METHODS_WHEN_PAUSED = ADAPTER_PROPS_STUB.filter(v => !!v.allowedWhenPaused).map(v => v.name);
8
+ const _has = (obj, prop) => !!obj && typeof obj === 'object' && Object.prototype.hasOwnProperty.call(obj, prop);
9
+ const convertAppendArgs = (prepend, options, eof) => {
10
+ let result = options;
11
+ if (!_has(options, 'items')) {
12
+ const items = !Array.isArray(options) ? [options] : options;
13
+ result = prepend ? { items, bof: eof } : { items, eof: eof };
14
+ }
15
+ return result;
16
+ };
17
+ const convertRemoveArgs = (options) => {
18
+ if (!(_has(options, 'predicate') || _has(options, 'indexes'))) {
19
+ const predicate = options;
20
+ options = { predicate };
21
+ }
22
+ return options;
23
+ };
24
+ export class Adapter {
25
+ get workflow() {
26
+ return this.getWorkflow();
27
+ }
28
+ get reloadCount() {
29
+ return this.reloadCounter;
30
+ }
31
+ get reloadId() {
32
+ return this.id + '.' + this.reloadCounter;
33
+ }
34
+ getPromisifiedMethod(method, args) {
35
+ return new Promise(resolve => {
36
+ if (this.relax$) {
37
+ this.relax$.once(value => resolve(value));
38
+ }
39
+ method.apply(this, args);
40
+ });
41
+ }
42
+ getWorkflowRunnerMethod(method, name) {
43
+ return (...args) => {
44
+ var _a, _b, _c, _d;
45
+ if (!this.relax$) {
46
+ (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, () => 'scroller is not initialized: ' + name + ' method is ignored');
47
+ return Promise.resolve(methodPreResult);
48
+ }
49
+ if (this.paused && !ALLOWED_METHODS_WHEN_PAUSED.includes(name)) {
50
+ (_d = (_c = this.logger) === null || _c === void 0 ? void 0 : _c.log) === null || _d === void 0 ? void 0 : _d.call(_c, () => 'scroller is paused: ' + name + ' method is ignored');
51
+ return Promise.resolve(methodPausedResult);
52
+ }
53
+ return this.getPromisifiedMethod(method, args);
54
+ };
55
+ }
56
+ constructor(context, getWorkflow, logger) {
57
+ this.source = {}; // for Reactive props
58
+ this.box = {}; // for Scalars over Reactive props
59
+ this.demand = {}; // for Scalars on demand
60
+ this.setFirstOrLastVisible = (_) => { };
61
+ this.getWorkflow = getWorkflow;
62
+ this.logger = logger;
63
+ this.relax$ = null;
64
+ this.relaxRun = null;
65
+ this.reloadCounter = 0;
66
+ const contextId = (context === null || context === void 0 ? void 0 : context.id) || -1;
67
+ // public context (if exists) should provide access to Reactive props config by id
68
+ const reactivePropsStore = (context && reactiveConfigStorage.get(context.id)) || {};
69
+ // the Adapter initialization should not trigger "wanted" props setting;
70
+ // after the initialization is completed, "wanted" functionality must be unblocked
71
+ wantedUtils.setBlock(true, contextId);
72
+ // make array of the original values from public context if present
73
+ const adapterProps = context
74
+ ? ADAPTER_PROPS_STUB.map(prop => {
75
+ let value = context[prop.name];
76
+ // if context is augmented, we need to replace external reactive props with inner ones
77
+ if (context.augmented) {
78
+ const reactiveProp = reactivePropsStore[prop.name];
79
+ if (reactiveProp) {
80
+ value = reactiveProp.default; // boolean doesn't matter here
81
+ }
82
+ }
83
+ return Object.assign(Object.assign({}, prop), { value });
84
+ })
85
+ : getDefaultAdapterProps();
86
+ // restore default reactive props if they were configured
87
+ Object.entries(reactivePropsStore).forEach(([key, value]) => {
88
+ const prop = adapterProps.find(({ name }) => name === key);
89
+ if (prop && value) {
90
+ prop.value = value.default;
91
+ }
92
+ });
93
+ // Scalar permanent props
94
+ adapterProps
95
+ .filter(({ type, permanent }) => type === AdapterPropType.Scalar && permanent)
96
+ .forEach(({ name, value }) => Object.defineProperty(this, name, {
97
+ configurable: true,
98
+ get: () => value
99
+ }));
100
+ // Reactive props: store original values in "source" container, to avoid extra .get() calls on scalar twins set
101
+ adapterProps
102
+ .filter(prop => prop.type === AdapterPropType.Reactive)
103
+ .forEach(({ name, value }) => {
104
+ this.source[name] = value;
105
+ Object.defineProperty(this, name, {
106
+ configurable: true,
107
+ get: () => this.source[name]
108
+ });
109
+ });
110
+ // for "wanted" props that can be explicitly requested for the first time after the Adapter initialization,
111
+ // an implicit calculation of the initial value is required;
112
+ // so this method should be called when accessing the "wanted" props through one of the following getters
113
+ const processWanted = (prop) => {
114
+ if (wantedUtils.setBox(prop, contextId)) {
115
+ const firstPropList = [AdapterPropName.firstVisible, AdapterPropName.firstVisible$];
116
+ const lastPropList = [AdapterPropName.lastVisible, AdapterPropName.lastVisible$];
117
+ if (firstPropList.some(n => n === prop.name)) {
118
+ this.setFirstOrLastVisible({ first: true });
119
+ }
120
+ else if (lastPropList.some(n => n === prop.name)) {
121
+ this.setFirstOrLastVisible({ last: true });
122
+ }
123
+ }
124
+ };
125
+ // Scalar props that have Reactive twins
126
+ // 1) reactive props (from "source") should be triggered on set
127
+ // 2) scalars should use "box" container on get
128
+ // 3) "wanted" scalars should also run wanted-related logic on get
129
+ adapterProps
130
+ .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)
131
+ .forEach((prop) => {
132
+ const { name, value, reactive } = prop;
133
+ this.box[name] = value;
134
+ Object.defineProperty(this, name, {
135
+ configurable: true,
136
+ set: (newValue) => {
137
+ if (newValue !== this.box[name]) {
138
+ this.box[name] = newValue;
139
+ this.source[reactive].set(newValue);
140
+ // need to emit new value through the configured reactive prop if present
141
+ const reactiveProp = reactivePropsStore[reactive];
142
+ if (reactiveProp) {
143
+ reactiveProp.emit(reactiveProp.source, newValue);
144
+ }
145
+ }
146
+ },
147
+ get: () => {
148
+ processWanted(prop);
149
+ return this.box[name];
150
+ }
151
+ });
152
+ });
153
+ // Scalar props on-demand
154
+ // these scalars should use "demand" container
155
+ // setting defaults should be overridden on init()
156
+ adapterProps
157
+ .filter(prop => prop.type === AdapterPropType.Scalar && prop.onDemand)
158
+ .forEach(({ name, value }) => {
159
+ this.demand[name] = value;
160
+ Object.defineProperty(this, name, {
161
+ configurable: true,
162
+ get: () => this.demand[name]
163
+ });
164
+ });
165
+ if (!context) {
166
+ return;
167
+ }
168
+ // Adapter public context augmentation
169
+ adapterProps.forEach((prop) => {
170
+ const { name, type, permanent } = prop;
171
+ let value = this[name];
172
+ if (type === AdapterPropType.Function) {
173
+ value = value.bind(this);
174
+ }
175
+ else if (type === AdapterPropType.WorkflowRunner) {
176
+ value = this.getWorkflowRunnerMethod(value, name);
177
+ }
178
+ else if (type === AdapterPropType.Reactive && reactivePropsStore[name]) {
179
+ value = context[name];
180
+ }
181
+ else if (name === AdapterPropName.augmented) {
182
+ value = true;
183
+ }
184
+ const nonPermanentScalar = !permanent && type === AdapterPropType.Scalar;
185
+ Object.defineProperty(context, name, {
186
+ configurable: true,
187
+ get: () => {
188
+ processWanted(prop); // consider accessing "wanted" Reactive props
189
+ if (nonPermanentScalar) {
190
+ return this[name]; // non-permanent Scalars should be taken in runtime
191
+ }
192
+ return value; // other props (Reactive/Functions/WorkflowRunners) can be defined once
193
+ }
194
+ });
195
+ });
196
+ this.externalContext = context;
197
+ wantedUtils.setBlock(false, contextId);
198
+ }
199
+ initialize({ buffer, state, viewport, logger, adapterRun$, getWorkflow }) {
200
+ // buffer
201
+ Object.defineProperty(this.demand, AdapterPropName.itemsCount, {
202
+ get: () => buffer.getVisibleItemsCount()
203
+ });
204
+ Object.defineProperty(this.demand, AdapterPropName.bufferInfo, {
205
+ get: () => ({
206
+ firstIndex: buffer.firstIndex,
207
+ lastIndex: buffer.lastIndex,
208
+ minIndex: buffer.minIndex,
209
+ maxIndex: buffer.maxIndex,
210
+ absMinIndex: buffer.absMinIndex,
211
+ absMaxIndex: buffer.absMaxIndex,
212
+ defaultSize: buffer.defaultSize
213
+ })
214
+ });
215
+ this.bof = buffer.bof.get();
216
+ buffer.bof.on(bof => (this.bof = bof));
217
+ this.eof = buffer.eof.get();
218
+ buffer.eof.on(eof => (this.eof = eof));
219
+ // state
220
+ Object.defineProperty(this.demand, AdapterPropName.packageInfo, {
221
+ get: () => state.packageInfo
222
+ });
223
+ this.loopPending = state.cycle.innerLoop.busy.get();
224
+ state.cycle.innerLoop.busy.on(busy => (this.loopPending = busy));
225
+ this.isLoading = state.cycle.busy.get();
226
+ state.cycle.busy.on(busy => (this.isLoading = busy));
227
+ this.paused = state.paused.get();
228
+ state.paused.on(paused => (this.paused = paused));
229
+ //viewport
230
+ this.setFirstOrLastVisible = ({ first, last, workflow }) => {
231
+ var _a, _b, _c;
232
+ if ((!first && !last) || ((_a = workflow === null || workflow === void 0 ? void 0 : workflow.call) === null || _a === void 0 ? void 0 : _a.interrupted)) {
233
+ return;
234
+ }
235
+ const token = first ? AdapterPropName.firstVisible : AdapterPropName.lastVisible;
236
+ if (!((_c = wantedUtils.getBox((_b = this.externalContext) === null || _b === void 0 ? void 0 : _b.id)) === null || _c === void 0 ? void 0 : _c[token])) {
237
+ return;
238
+ }
239
+ if (buffer.items.some(({ element }) => !element)) {
240
+ logger.log('skipping first/lastVisible set because not all buffered items are rendered at this moment');
241
+ return;
242
+ }
243
+ const direction = first ? Direction.backward : Direction.forward;
244
+ const { item } = viewport.getEdgeVisibleItem(buffer.items, direction);
245
+ if (!item || item.element !== this[token].element) {
246
+ this[token] = (item ? item.get() : EMPTY_ITEM);
247
+ }
248
+ };
249
+ // logger
250
+ this.logger = logger;
251
+ // self-pending subscription; set up only on the very first init
252
+ if (adapterRun$) {
253
+ if (!this.relax$) {
254
+ this.relax$ = new Reactive();
255
+ }
256
+ const relax$ = this.relax$;
257
+ adapterRun$.on(({ status, payload }) => {
258
+ let unSubRelax = () => { };
259
+ if (status === ProcessStatus.start) {
260
+ unSubRelax = this.isLoading$.on(value => {
261
+ if (!value) {
262
+ unSubRelax();
263
+ relax$.set({ success: true, immediate: false, details: null });
264
+ }
265
+ });
266
+ }
267
+ else if (status === ProcessStatus.done || status === ProcessStatus.error) {
268
+ unSubRelax();
269
+ relax$.set({
270
+ success: status !== ProcessStatus.error,
271
+ immediate: true,
272
+ details: status === ProcessStatus.error && payload ? String(payload.error) : null
273
+ });
274
+ }
275
+ });
276
+ }
277
+ // workflow getter
278
+ if (getWorkflow) {
279
+ this.getWorkflow = getWorkflow;
280
+ }
281
+ // init
282
+ this.init = true;
283
+ }
284
+ dispose() {
285
+ if (this.relax$) {
286
+ this.relax$.dispose();
287
+ }
288
+ if (this.externalContext) {
289
+ this.resetContext();
290
+ }
291
+ Object.getOwnPropertyNames(this).forEach(prop => {
292
+ delete this[prop];
293
+ });
294
+ this.disposed = true;
295
+ }
296
+ resetContext() {
297
+ var _a;
298
+ const reactiveStore = reactiveConfigStorage.get((_a = this.externalContext) === null || _a === void 0 ? void 0 : _a.id);
299
+ ADAPTER_PROPS_STUB.forEach(({ type, permanent, name, value }) => {
300
+ // assign initial values to non-reactive non-permanent props
301
+ if (type !== AdapterPropType.Reactive && !permanent) {
302
+ Object.defineProperty(this.externalContext, name, {
303
+ configurable: true,
304
+ get: () => value
305
+ });
306
+ }
307
+ // reset reactive props
308
+ if (type === AdapterPropType.Reactive && reactiveStore) {
309
+ const property = reactiveStore[name];
310
+ if (property) {
311
+ property.default.reset();
312
+ property.emit(property.source, property.default.get());
313
+ }
314
+ }
315
+ });
316
+ }
317
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
318
+ reset(options) {
319
+ this.reloadCounter++;
320
+ this.logger.logAdapterMethod('reset', options, ` of ${this.reloadId}`);
321
+ this.workflow.call({
322
+ process: AdapterProcess.reset,
323
+ status: ProcessStatus.start,
324
+ payload: { options }
325
+ });
326
+ }
327
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
328
+ reload(options) {
329
+ this.reloadCounter++;
330
+ this.logger.logAdapterMethod('reload', options, ` of ${this.reloadId}`);
331
+ this.workflow.call({
332
+ process: AdapterProcess.reload,
333
+ status: ProcessStatus.start,
334
+ payload: { options }
335
+ });
336
+ }
337
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
338
+ append(_options, eof) {
339
+ const options = convertAppendArgs(false, _options, eof); // support old signature
340
+ this.logger.logAdapterMethod('append', [options.items, options.eof]);
341
+ this.workflow.call({
342
+ process: AdapterProcess.append,
343
+ status: ProcessStatus.start,
344
+ payload: { options }
345
+ });
346
+ }
347
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
348
+ prepend(_options, bof) {
349
+ const options = convertAppendArgs(true, _options, bof); // support old signature
350
+ this.logger.logAdapterMethod('prepend', [options.items, options.bof]);
351
+ this.workflow.call({
352
+ process: AdapterProcess.prepend,
353
+ status: ProcessStatus.start,
354
+ payload: { options }
355
+ });
356
+ }
357
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
358
+ check() {
359
+ this.logger.logAdapterMethod('check');
360
+ this.workflow.call({
361
+ process: AdapterProcess.check,
362
+ status: ProcessStatus.start
363
+ });
364
+ }
365
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
366
+ remove(options) {
367
+ options = convertRemoveArgs(options); // support old signature
368
+ this.logger.logAdapterMethod('remove', options);
369
+ this.workflow.call({
370
+ process: AdapterProcess.remove,
371
+ status: ProcessStatus.start,
372
+ payload: { options }
373
+ });
374
+ }
375
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
376
+ clip(options) {
377
+ this.logger.logAdapterMethod('clip', options);
378
+ this.workflow.call({
379
+ process: AdapterProcess.clip,
380
+ status: ProcessStatus.start,
381
+ payload: { options }
382
+ });
383
+ }
384
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
385
+ insert(options) {
386
+ this.logger.logAdapterMethod('insert', options);
387
+ this.workflow.call({
388
+ process: AdapterProcess.insert,
389
+ status: ProcessStatus.start,
390
+ payload: { options }
391
+ });
392
+ }
393
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
394
+ replace(options) {
395
+ this.logger.logAdapterMethod('replace', options);
396
+ this.workflow.call({
397
+ process: AdapterProcess.replace,
398
+ status: ProcessStatus.start,
399
+ payload: { options }
400
+ });
401
+ }
402
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
403
+ update(options) {
404
+ this.logger.logAdapterMethod('update', options);
405
+ this.workflow.call({
406
+ process: AdapterProcess.update,
407
+ status: ProcessStatus.start,
408
+ payload: { options }
409
+ });
410
+ }
411
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
412
+ pause() {
413
+ this.logger.logAdapterMethod('pause');
414
+ this.workflow.call({
415
+ process: AdapterProcess.pause,
416
+ status: ProcessStatus.start
417
+ });
418
+ }
419
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
420
+ resume() {
421
+ this.logger.logAdapterMethod('resume');
422
+ this.workflow.call({
423
+ process: AdapterProcess.pause,
424
+ status: ProcessStatus.start,
425
+ payload: { options: { resume: true } }
426
+ });
427
+ }
428
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
429
+ fix(options) {
430
+ this.logger.logAdapterMethod('fix', options);
431
+ this.workflow.call({
432
+ process: AdapterProcess.fix,
433
+ status: ProcessStatus.start,
434
+ payload: { options }
435
+ });
436
+ }
437
+ relaxUnchained(callback, reloadId) {
438
+ const runCallback = () => typeof callback === 'function' && reloadId === this.reloadId && callback();
439
+ if (!this.isLoading) {
440
+ runCallback();
441
+ }
442
+ return new Promise(resolve => {
443
+ if (!this.isLoading) {
444
+ resolve(true);
445
+ return;
446
+ }
447
+ this.isLoading$.once(() => {
448
+ runCallback();
449
+ resolve(false);
450
+ });
451
+ }).then(immediate => {
452
+ var _a, _b;
453
+ if (this.disposed) {
454
+ return {
455
+ immediate,
456
+ success: false,
457
+ details: 'Adapter was disposed'
458
+ };
459
+ }
460
+ const success = reloadId === this.reloadId;
461
+ (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.call(_a, () => !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0);
462
+ return {
463
+ immediate,
464
+ success,
465
+ details: !success ? 'Interrupted by reload or reset' : null
466
+ };
467
+ });
468
+ }
469
+ relax(callback) {
470
+ const reloadId = this.reloadId;
471
+ this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);
472
+ if (!this.init) {
473
+ return Promise.resolve(methodPreResult);
474
+ }
475
+ return (this.relaxRun = this.relaxRun
476
+ ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))
477
+ : this.relaxUnchained(callback, reloadId).then(result => {
478
+ this.relaxRun = null;
479
+ return result;
480
+ }));
481
+ }
482
+ showLog() {
483
+ this.logger.logAdapterMethod('showLog');
484
+ this.logger.logForce();
485
+ }
486
+ }
488
487
  //# sourceMappingURL=adapter.js.map