vscroll 1.5.3 → 1.5.5

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