vscroll 1.6.3 → 1.7.0

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