vscroll 1.6.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/bundles/vscroll.esm5.js +5854 -5705
  2. package/dist/bundles/vscroll.esm5.js.map +1 -1
  3. package/dist/bundles/vscroll.esm5.min.js +2 -2
  4. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  5. package/dist/bundles/vscroll.esm6.js +5341 -5194
  6. package/dist/bundles/vscroll.esm6.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.min.js +2 -2
  8. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  9. package/dist/bundles/vscroll.umd.js +5858 -5710
  10. package/dist/bundles/vscroll.umd.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.min.js +2 -2
  12. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  13. package/dist/esm2015/classes/adapter/context.js +44 -43
  14. package/dist/esm2015/classes/adapter/context.js.map +1 -1
  15. package/dist/esm2015/classes/adapter/props.js +300 -300
  16. package/dist/esm2015/classes/adapter/props.js.map +1 -1
  17. package/dist/esm2015/classes/adapter/wanted.js +28 -28
  18. package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
  19. package/dist/esm2015/classes/adapter.js +486 -487
  20. package/dist/esm2015/classes/adapter.js.map +1 -1
  21. package/dist/esm2015/classes/buffer/cache.js +249 -246
  22. package/dist/esm2015/classes/buffer/cache.js.map +1 -1
  23. package/dist/esm2015/classes/buffer/checkCall.js +47 -48
  24. package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
  25. package/dist/esm2015/classes/buffer/defaultSize.js +128 -127
  26. package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
  27. package/dist/esm2015/classes/buffer.js +343 -342
  28. package/dist/esm2015/classes/buffer.js.map +1 -1
  29. package/dist/esm2015/classes/datasource.js +36 -24
  30. package/dist/esm2015/classes/datasource.js.map +1 -1
  31. package/dist/esm2015/classes/domRoutines.js +160 -160
  32. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  33. package/dist/esm2015/classes/item.js +61 -61
  34. package/dist/esm2015/classes/item.js.map +1 -1
  35. package/dist/esm2015/classes/logger.js +229 -186
  36. package/dist/esm2015/classes/logger.js.map +1 -1
  37. package/dist/esm2015/classes/paddings.js +76 -72
  38. package/dist/esm2015/classes/paddings.js.map +1 -1
  39. package/dist/esm2015/classes/reactive.js +54 -54
  40. package/dist/esm2015/classes/reactive.js.map +1 -1
  41. package/dist/esm2015/classes/settings.js +39 -39
  42. package/dist/esm2015/classes/settings.js.map +1 -1
  43. package/dist/esm2015/classes/state/clip.js +16 -16
  44. package/dist/esm2015/classes/state/clip.js.map +1 -1
  45. package/dist/esm2015/classes/state/cycle.js +60 -60
  46. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  47. package/dist/esm2015/classes/state/fetch.js +124 -122
  48. package/dist/esm2015/classes/state/fetch.js.map +1 -1
  49. package/dist/esm2015/classes/state/render.js +14 -14
  50. package/dist/esm2015/classes/state/render.js.map +1 -1
  51. package/dist/esm2015/classes/state/scroll.js +30 -30
  52. package/dist/esm2015/classes/state/scroll.js.map +1 -1
  53. package/dist/esm2015/classes/state.js +64 -62
  54. package/dist/esm2015/classes/state.js.map +1 -1
  55. package/dist/esm2015/classes/viewport.js +74 -72
  56. package/dist/esm2015/classes/viewport.js.map +1 -1
  57. package/dist/esm2015/index.js +9 -9
  58. package/dist/esm2015/index.js.map +1 -1
  59. package/dist/esm2015/inputs/adapter.js +262 -242
  60. package/dist/esm2015/inputs/adapter.js.map +1 -1
  61. package/dist/esm2015/inputs/common.js +11 -11
  62. package/dist/esm2015/inputs/common.js.map +1 -1
  63. package/dist/esm2015/inputs/datasource.js +20 -20
  64. package/dist/esm2015/inputs/datasource.js.map +1 -1
  65. package/dist/esm2015/inputs/index.js +7 -7
  66. package/dist/esm2015/inputs/index.js.map +1 -1
  67. package/dist/esm2015/inputs/settings.js +151 -146
  68. package/dist/esm2015/inputs/settings.js.map +1 -1
  69. package/dist/esm2015/inputs/validation.js +365 -374
  70. package/dist/esm2015/inputs/validation.js.map +1 -1
  71. package/dist/esm2015/inputs/workflow.js +30 -30
  72. package/dist/esm2015/inputs/workflow.js.map +1 -1
  73. package/dist/esm2015/interfaces/adapter.js +1 -1
  74. package/dist/esm2015/interfaces/adapter.js.map +1 -1
  75. package/dist/esm2015/interfaces/datasource.js +1 -1
  76. package/dist/esm2015/interfaces/datasource.js.map +1 -1
  77. package/dist/esm2015/interfaces/index.js +1 -1
  78. package/dist/esm2015/interfaces/index.js.map +1 -1
  79. package/dist/esm2015/interfaces/item.js +1 -1
  80. package/dist/esm2015/interfaces/item.js.map +1 -1
  81. package/dist/esm2015/interfaces/process.js +1 -1
  82. package/dist/esm2015/interfaces/process.js.map +1 -1
  83. package/dist/esm2015/interfaces/routines.js +1 -1
  84. package/dist/esm2015/interfaces/routines.js.map +1 -1
  85. package/dist/esm2015/interfaces/settings.js +1 -1
  86. package/dist/esm2015/interfaces/settings.js.map +1 -1
  87. package/dist/esm2015/interfaces/state.js +1 -1
  88. package/dist/esm2015/interfaces/state.js.map +1 -1
  89. package/dist/esm2015/interfaces/validation.js +1 -1
  90. package/dist/esm2015/interfaces/validation.js.map +1 -1
  91. package/dist/esm2015/interfaces/workflow.js +1 -1
  92. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  93. package/dist/esm2015/processes/adapter/append.js +37 -36
  94. package/dist/esm2015/processes/adapter/append.js.map +1 -1
  95. package/dist/esm2015/processes/adapter/check.js +33 -32
  96. package/dist/esm2015/processes/adapter/check.js.map +1 -1
  97. package/dist/esm2015/processes/adapter/clip.js +12 -12
  98. package/dist/esm2015/processes/adapter/clip.js.map +1 -1
  99. package/dist/esm2015/processes/adapter/fix.js +79 -77
  100. package/dist/esm2015/processes/adapter/fix.js.map +1 -1
  101. package/dist/esm2015/processes/adapter/insert.js +74 -73
  102. package/dist/esm2015/processes/adapter/insert.js.map +1 -1
  103. package/dist/esm2015/processes/adapter/pause.js +22 -22
  104. package/dist/esm2015/processes/adapter/pause.js.map +1 -1
  105. package/dist/esm2015/processes/adapter/reload.js +19 -19
  106. package/dist/esm2015/processes/adapter/reload.js.map +1 -1
  107. package/dist/esm2015/processes/adapter/remove.js +105 -102
  108. package/dist/esm2015/processes/adapter/remove.js.map +1 -1
  109. package/dist/esm2015/processes/adapter/replace.js +39 -39
  110. package/dist/esm2015/processes/adapter/replace.js.map +1 -1
  111. package/dist/esm2015/processes/adapter/reset.js +35 -35
  112. package/dist/esm2015/processes/adapter/reset.js.map +1 -1
  113. package/dist/esm2015/processes/adapter/update.js +44 -43
  114. package/dist/esm2015/processes/adapter/update.js.map +1 -1
  115. package/dist/esm2015/processes/adjust.js +146 -141
  116. package/dist/esm2015/processes/adjust.js.map +1 -1
  117. package/dist/esm2015/processes/clip.js +49 -49
  118. package/dist/esm2015/processes/clip.js.map +1 -1
  119. package/dist/esm2015/processes/end.js +53 -52
  120. package/dist/esm2015/processes/end.js.map +1 -1
  121. package/dist/esm2015/processes/fetch.js +93 -91
  122. package/dist/esm2015/processes/fetch.js.map +1 -1
  123. package/dist/esm2015/processes/index.js +24 -24
  124. package/dist/esm2015/processes/index.js.map +1 -1
  125. package/dist/esm2015/processes/init.js +14 -14
  126. package/dist/esm2015/processes/init.js.map +1 -1
  127. package/dist/esm2015/processes/misc/base.js +29 -30
  128. package/dist/esm2015/processes/misc/base.js.map +1 -1
  129. package/dist/esm2015/processes/misc/enums.js +36 -36
  130. package/dist/esm2015/processes/misc/enums.js.map +1 -1
  131. package/dist/esm2015/processes/misc/index.js +2 -2
  132. package/dist/esm2015/processes/misc/index.js.map +1 -1
  133. package/dist/esm2015/processes/postFetch.js +66 -65
  134. package/dist/esm2015/processes/postFetch.js.map +1 -1
  135. package/dist/esm2015/processes/preClip.js +86 -85
  136. package/dist/esm2015/processes/preClip.js.map +1 -1
  137. package/dist/esm2015/processes/preFetch.js +253 -240
  138. package/dist/esm2015/processes/preFetch.js.map +1 -1
  139. package/dist/esm2015/processes/render.js +56 -54
  140. package/dist/esm2015/processes/render.js.map +1 -1
  141. package/dist/esm2015/processes/scroll.js +106 -97
  142. package/dist/esm2015/processes/scroll.js.map +1 -1
  143. package/dist/esm2015/processes/start.js +11 -11
  144. package/dist/esm2015/processes/start.js.map +1 -1
  145. package/dist/esm2015/scroller.js +91 -86
  146. package/dist/esm2015/scroller.js.map +1 -1
  147. package/dist/esm2015/version.js +4 -4
  148. package/dist/esm2015/version.js.map +1 -1
  149. package/dist/esm2015/workflow-transducer.js +219 -218
  150. package/dist/esm2015/workflow-transducer.js.map +1 -1
  151. package/dist/esm2015/workflow.js +185 -174
  152. package/dist/esm2015/workflow.js.map +1 -1
  153. package/dist/esm5/classes/adapter/context.js +51 -50
  154. package/dist/esm5/classes/adapter/context.js.map +1 -1
  155. package/dist/esm5/classes/adapter/props.js +300 -300
  156. package/dist/esm5/classes/adapter/props.js.map +1 -1
  157. package/dist/esm5/classes/adapter/wanted.js +29 -29
  158. package/dist/esm5/classes/adapter/wanted.js.map +1 -1
  159. package/dist/esm5/classes/adapter.js +538 -535
  160. package/dist/esm5/classes/adapter.js.map +1 -1
  161. package/dist/esm5/classes/buffer/cache.js +262 -260
  162. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  163. package/dist/esm5/classes/buffer/checkCall.js +53 -56
  164. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  165. package/dist/esm5/classes/buffer/defaultSize.js +146 -145
  166. package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
  167. package/dist/esm5/classes/buffer.js +410 -409
  168. package/dist/esm5/classes/buffer.js.map +1 -1
  169. package/dist/esm5/classes/datasource.js +47 -31
  170. package/dist/esm5/classes/datasource.js.map +1 -1
  171. package/dist/esm5/classes/domRoutines.js +165 -165
  172. package/dist/esm5/classes/domRoutines.js.map +1 -1
  173. package/dist/esm5/classes/item.js +76 -76
  174. package/dist/esm5/classes/item.js.map +1 -1
  175. package/dist/esm5/classes/logger.js +251 -210
  176. package/dist/esm5/classes/logger.js.map +1 -1
  177. package/dist/esm5/classes/paddings.js +84 -80
  178. package/dist/esm5/classes/paddings.js.map +1 -1
  179. package/dist/esm5/classes/reactive.js +69 -69
  180. package/dist/esm5/classes/reactive.js.map +1 -1
  181. package/dist/esm5/classes/settings.js +47 -47
  182. package/dist/esm5/classes/settings.js.map +1 -1
  183. package/dist/esm5/classes/state/clip.js +22 -22
  184. package/dist/esm5/classes/state/clip.js.map +1 -1
  185. package/dist/esm5/classes/state/cycle.js +75 -75
  186. package/dist/esm5/classes/state/cycle.js.map +1 -1
  187. package/dist/esm5/classes/state/fetch.js +150 -148
  188. package/dist/esm5/classes/state/fetch.js.map +1 -1
  189. package/dist/esm5/classes/state/render.js +20 -20
  190. package/dist/esm5/classes/state/render.js.map +1 -1
  191. package/dist/esm5/classes/state/scroll.js +32 -32
  192. package/dist/esm5/classes/state/scroll.js.map +1 -1
  193. package/dist/esm5/classes/state.js +71 -69
  194. package/dist/esm5/classes/state.js.map +1 -1
  195. package/dist/esm5/classes/viewport.js +80 -79
  196. package/dist/esm5/classes/viewport.js.map +1 -1
  197. package/dist/esm5/index.js +9 -9
  198. package/dist/esm5/index.js.map +1 -1
  199. package/dist/esm5/inputs/adapter.js +263 -243
  200. package/dist/esm5/inputs/adapter.js.map +1 -1
  201. package/dist/esm5/inputs/common.js +11 -11
  202. package/dist/esm5/inputs/common.js.map +1 -1
  203. package/dist/esm5/inputs/datasource.js +21 -21
  204. package/dist/esm5/inputs/datasource.js.map +1 -1
  205. package/dist/esm5/inputs/index.js +7 -7
  206. package/dist/esm5/inputs/index.js.map +1 -1
  207. package/dist/esm5/inputs/settings.js +152 -147
  208. package/dist/esm5/inputs/settings.js.map +1 -1
  209. package/dist/esm5/inputs/validation.js +399 -396
  210. package/dist/esm5/inputs/validation.js.map +1 -1
  211. package/dist/esm5/inputs/workflow.js +31 -31
  212. package/dist/esm5/inputs/workflow.js.map +1 -1
  213. package/dist/esm5/interfaces/adapter.js +1 -1
  214. package/dist/esm5/interfaces/adapter.js.map +1 -1
  215. package/dist/esm5/interfaces/datasource.js +1 -1
  216. package/dist/esm5/interfaces/datasource.js.map +1 -1
  217. package/dist/esm5/interfaces/index.js +1 -1
  218. package/dist/esm5/interfaces/index.js.map +1 -1
  219. package/dist/esm5/interfaces/item.js +1 -1
  220. package/dist/esm5/interfaces/item.js.map +1 -1
  221. package/dist/esm5/interfaces/process.js +1 -1
  222. package/dist/esm5/interfaces/process.js.map +1 -1
  223. package/dist/esm5/interfaces/routines.js +1 -1
  224. package/dist/esm5/interfaces/routines.js.map +1 -1
  225. package/dist/esm5/interfaces/settings.js +1 -1
  226. package/dist/esm5/interfaces/settings.js.map +1 -1
  227. package/dist/esm5/interfaces/state.js +1 -1
  228. package/dist/esm5/interfaces/state.js.map +1 -1
  229. package/dist/esm5/interfaces/validation.js +1 -1
  230. package/dist/esm5/interfaces/validation.js.map +1 -1
  231. package/dist/esm5/interfaces/workflow.js +1 -1
  232. package/dist/esm5/interfaces/workflow.js.map +1 -1
  233. package/dist/esm5/processes/adapter/append.js +45 -44
  234. package/dist/esm5/processes/adapter/append.js.map +1 -1
  235. package/dist/esm5/processes/adapter/check.js +40 -39
  236. package/dist/esm5/processes/adapter/check.js.map +1 -1
  237. package/dist/esm5/processes/adapter/clip.js +19 -19
  238. package/dist/esm5/processes/adapter/clip.js.map +1 -1
  239. package/dist/esm5/processes/adapter/fix.js +91 -89
  240. package/dist/esm5/processes/adapter/fix.js.map +1 -1
  241. package/dist/esm5/processes/adapter/insert.js +82 -81
  242. package/dist/esm5/processes/adapter/insert.js.map +1 -1
  243. package/dist/esm5/processes/adapter/pause.js +29 -29
  244. package/dist/esm5/processes/adapter/pause.js.map +1 -1
  245. package/dist/esm5/processes/adapter/reload.js +26 -26
  246. package/dist/esm5/processes/adapter/reload.js.map +1 -1
  247. package/dist/esm5/processes/adapter/remove.js +116 -115
  248. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  249. package/dist/esm5/processes/adapter/replace.js +47 -47
  250. package/dist/esm5/processes/adapter/replace.js.map +1 -1
  251. package/dist/esm5/processes/adapter/reset.js +42 -42
  252. package/dist/esm5/processes/adapter/reset.js.map +1 -1
  253. package/dist/esm5/processes/adapter/update.js +64 -59
  254. package/dist/esm5/processes/adapter/update.js.map +1 -1
  255. package/dist/esm5/processes/adjust.js +157 -152
  256. package/dist/esm5/processes/adjust.js.map +1 -1
  257. package/dist/esm5/processes/clip.js +60 -60
  258. package/dist/esm5/processes/clip.js.map +1 -1
  259. package/dist/esm5/processes/end.js +64 -63
  260. package/dist/esm5/processes/end.js.map +1 -1
  261. package/dist/esm5/processes/fetch.js +104 -102
  262. package/dist/esm5/processes/fetch.js.map +1 -1
  263. package/dist/esm5/processes/index.js +24 -24
  264. package/dist/esm5/processes/index.js.map +1 -1
  265. package/dist/esm5/processes/init.js +21 -21
  266. package/dist/esm5/processes/init.js.map +1 -1
  267. package/dist/esm5/processes/misc/base.js +43 -44
  268. package/dist/esm5/processes/misc/base.js.map +1 -1
  269. package/dist/esm5/processes/misc/enums.js +36 -36
  270. package/dist/esm5/processes/misc/enums.js.map +1 -1
  271. package/dist/esm5/processes/misc/index.js +2 -2
  272. package/dist/esm5/processes/misc/index.js.map +1 -1
  273. package/dist/esm5/processes/postFetch.js +73 -74
  274. package/dist/esm5/processes/postFetch.js.map +1 -1
  275. package/dist/esm5/processes/preClip.js +95 -94
  276. package/dist/esm5/processes/preClip.js.map +1 -1
  277. package/dist/esm5/processes/preFetch.js +259 -247
  278. package/dist/esm5/processes/preFetch.js.map +1 -1
  279. package/dist/esm5/processes/render.js +63 -63
  280. package/dist/esm5/processes/render.js.map +1 -1
  281. package/dist/esm5/processes/scroll.js +113 -107
  282. package/dist/esm5/processes/scroll.js.map +1 -1
  283. package/dist/esm5/processes/start.js +18 -18
  284. package/dist/esm5/processes/start.js.map +1 -1
  285. package/dist/esm5/scroller.js +104 -100
  286. package/dist/esm5/scroller.js.map +1 -1
  287. package/dist/esm5/version.js +4 -4
  288. package/dist/esm5/version.js.map +1 -1
  289. package/dist/esm5/workflow-transducer.js +221 -220
  290. package/dist/esm5/workflow-transducer.js.map +1 -1
  291. package/dist/esm5/workflow.js +204 -198
  292. package/dist/esm5/workflow.js.map +1 -1
  293. package/dist/typings/classes/adapter/context.d.ts +4 -4
  294. package/dist/typings/classes/adapter/props.d.ts +52 -52
  295. package/dist/typings/classes/adapter/wanted.d.ts +14 -14
  296. package/dist/typings/classes/adapter.d.ts +79 -79
  297. package/dist/typings/classes/buffer/cache.d.ts +94 -95
  298. package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
  299. package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
  300. package/dist/typings/classes/buffer.d.ts +64 -64
  301. package/dist/typings/classes/datasource.d.ts +11 -11
  302. package/dist/typings/classes/domRoutines.d.ts +36 -36
  303. package/dist/typings/classes/item.d.ts +28 -28
  304. package/dist/typings/classes/logger.d.ts +32 -28
  305. package/dist/typings/classes/paddings.d.ts +22 -22
  306. package/dist/typings/classes/reactive.d.ts +21 -21
  307. package/dist/typings/classes/settings.d.ts +126 -119
  308. package/dist/typings/classes/state/clip.d.ts +9 -9
  309. package/dist/typings/classes/state/cycle.d.ts +29 -29
  310. package/dist/typings/classes/state/fetch.d.ts +62 -62
  311. package/dist/typings/classes/state/render.d.ts +9 -9
  312. package/dist/typings/classes/state/scroll.d.ts +16 -16
  313. package/dist/typings/classes/state.d.ts +29 -29
  314. package/dist/typings/classes/viewport.d.ts +32 -32
  315. package/dist/typings/index.d.ts +10 -10
  316. package/dist/typings/inputs/adapter.d.ts +5 -5
  317. package/dist/typings/inputs/common.d.ts +9 -9
  318. package/dist/typings/inputs/datasource.d.ts +7 -7
  319. package/dist/typings/inputs/index.d.ts +7 -7
  320. package/dist/typings/inputs/settings.d.ts +42 -41
  321. package/dist/typings/inputs/validation.d.ts +82 -83
  322. package/dist/typings/inputs/workflow.d.ts +9 -9
  323. package/dist/typings/interfaces/adapter.d.ts +164 -164
  324. package/dist/typings/interfaces/datasource.d.ts +28 -28
  325. package/dist/typings/interfaces/index.d.ts +10 -10
  326. package/dist/typings/interfaces/item.d.ts +8 -8
  327. package/dist/typings/interfaces/process.d.ts +35 -35
  328. package/dist/typings/interfaces/routines.d.ts +166 -166
  329. package/dist/typings/interfaces/settings.d.ts +32 -31
  330. package/dist/typings/interfaces/state.d.ts +24 -24
  331. package/dist/typings/interfaces/validation.d.ts +33 -33
  332. package/dist/typings/interfaces/workflow.d.ts +53 -53
  333. package/dist/typings/processes/adapter/append.d.ts +14 -14
  334. package/dist/typings/processes/adapter/check.d.ts +6 -6
  335. package/dist/typings/processes/adapter/clip.d.ts +7 -7
  336. package/dist/typings/processes/adapter/fix.d.ts +13 -13
  337. package/dist/typings/processes/adapter/insert.d.ts +11 -11
  338. package/dist/typings/processes/adapter/pause.d.ts +8 -8
  339. package/dist/typings/processes/adapter/reload.d.ts +6 -6
  340. package/dist/typings/processes/adapter/remove.d.ts +11 -11
  341. package/dist/typings/processes/adapter/replace.d.ts +8 -8
  342. package/dist/typings/processes/adapter/reset.d.ts +7 -7
  343. package/dist/typings/processes/adapter/update.d.ts +8 -8
  344. package/dist/typings/processes/adjust.d.ts +10 -10
  345. package/dist/typings/processes/clip.d.ts +7 -7
  346. package/dist/typings/processes/end.d.ts +10 -10
  347. package/dist/typings/processes/fetch.d.ts +18 -18
  348. package/dist/typings/processes/index.d.ts +24 -24
  349. package/dist/typings/processes/init.d.ts +7 -7
  350. package/dist/typings/processes/misc/base.d.ts +4 -4
  351. package/dist/typings/processes/misc/enums.d.ts +33 -33
  352. package/dist/typings/processes/misc/index.d.ts +2 -2
  353. package/dist/typings/processes/postFetch.d.ts +8 -8
  354. package/dist/typings/processes/preClip.d.ts +12 -12
  355. package/dist/typings/processes/preFetch.d.ts +17 -17
  356. package/dist/typings/processes/render.d.ts +9 -9
  357. package/dist/typings/processes/scroll.d.ts +13 -13
  358. package/dist/typings/processes/start.d.ts +6 -6
  359. package/dist/typings/scroller.d.ts +26 -26
  360. package/dist/typings/version.d.ts +5 -5
  361. package/dist/typings/workflow-transducer.d.ts +2 -2
  362. package/dist/typings/workflow.d.ts +30 -29
  363. package/package.json +72 -69
@@ -1,175 +1,186 @@
1
- import { Scroller } from './scroller';
2
- import { runStateMachine } from './workflow-transducer';
3
- import { Reactive } from './classes/reactive';
4
- import { AdapterProcess, CommonProcess, ProcessStatus as Status, } from './processes/index';
5
- import { WORKFLOW, validate } from './inputs/index';
6
- export class Workflow {
7
- constructor(params) {
8
- const { element, datasource, consumer, run, Routines } = params;
9
- const validationResult = validate(params, WORKFLOW);
10
- if (!validationResult.isValid) {
11
- throw new Error(`Invalid Workflow params: ${validationResult.errors.join(', ')}.`);
12
- }
13
- this.isInitialized = false;
14
- this.disposed = false;
15
- this.initTimer = null;
16
- this.adapterRun$ = new Reactive();
17
- this.cyclesDone = 0;
18
- this.interruptionCount = 0;
19
- this.errors = [];
20
- this.offScroll = () => null;
21
- this.propagateChanges = run;
22
- this.stateMachineMethods = {
23
- run: this.runProcess(),
24
- interrupt: this.interrupt.bind(this),
25
- done: this.done.bind(this),
26
- onError: this.onError.bind(this)
27
- };
28
- this.scroller = new Scroller({
29
- element, datasource, consumer, workflow: this.getUpdater(), Routines
30
- });
31
- if (this.scroller.settings.initializeDelay) {
32
- this.initTimer = setTimeout(() => {
33
- this.initTimer = null;
34
- this.init();
35
- }, this.scroller.settings.initializeDelay);
36
- }
37
- else {
38
- this.init();
39
- }
40
- }
41
- init() {
42
- this.scroller.init(this.adapterRun$);
43
- // set up scroll event listener
44
- const { routines } = this.scroller;
45
- const onScrollHandler = event => this.callWorkflow({
46
- process: CommonProcess.scroll,
47
- status: Status.start,
48
- payload: { event }
49
- });
50
- this.offScroll = routines.onScroll(onScrollHandler);
51
- // run the Workflow
52
- this.isInitialized = true;
53
- this.callWorkflow({
54
- process: CommonProcess.init,
55
- status: Status.start
56
- });
57
- }
58
- changeItems(items) {
59
- this.propagateChanges(items);
60
- }
61
- callWorkflow(processSubject) {
62
- if (!this.isInitialized) {
63
- return;
64
- }
65
- const { process, status } = processSubject;
66
- // if the scroller is paused, any process other than "pause" and "reset" should be blocked
67
- if (this.scroller.state.paused.get()) {
68
- if (![AdapterProcess.pause, AdapterProcess.reset].includes(process)) {
69
- this.scroller.logger.log('scroller is paused: ' + process + ' process is ignored');
70
- return;
71
- }
72
- }
73
- if (process && process.startsWith('adapter') && status !== Status.next) {
74
- this.adapterRun$.set(processSubject);
75
- }
76
- this.process(processSubject);
77
- }
78
- getUpdater() {
79
- return {
80
- call: this.callWorkflow.bind(this),
81
- onDataChanged: this.changeItems.bind(this),
82
- };
83
- }
84
- process(data) {
85
- const { status, process, payload } = data;
86
- if (this.scroller.settings.logProcessRun) {
87
- this.scroller.logger.log(() => [
88
- '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],
89
- process, `"${status}"`, ...(payload !== void 0 ? [payload] : [])
90
- ]);
91
- }
92
- this.scroller.logger.logProcess(data);
93
- if (process === CommonProcess.end) {
94
- this.scroller.finalize();
95
- }
96
- runStateMachine({
97
- input: data,
98
- methods: this.stateMachineMethods
99
- });
100
- }
101
- runProcess() {
102
- return ({ run, process, name }) => (...args) => {
103
- if (this.scroller.settings.logProcessRun) {
104
- this.scroller.logger.log(() => [
105
- '%crun%c', ...['color: #333399;', 'color: #000000;'],
106
- process || name, ...args
107
- ]);
108
- }
109
- run(this.scroller, ...args);
110
- };
111
- }
112
- onError(process, payload) {
113
- const message = payload && String(payload.error) || '';
114
- const { time, cycle } = this.scroller.state;
115
- this.errors.push({
116
- process,
117
- message,
118
- time,
119
- loop: cycle.loopIdNext
120
- });
121
- this.scroller.logger.logError(message);
122
- }
123
- interrupt({ process, finalize, datasource }) {
124
- if (finalize) {
125
- const { workflow, logger } = this.scroller;
126
- // we are going to create a new reference for the scroller.workflow object
127
- // calling the old version of the scroller.workflow by any outstanding async processes will be skipped
128
- workflow.call = (_) => // eslint-disable-line @typescript-eslint/no-unused-vars
129
- logger.log('[skip wf call]');
130
- workflow.call.interrupted = true;
131
- this.scroller.workflow = this.getUpdater();
132
- this.interruptionCount++;
133
- logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);
134
- }
135
- if (datasource) { // Scroller re-initialization case
136
- const reInit = () => {
137
- this.scroller.logger.log('new Scroller instantiation');
138
- const scroller = new Scroller({ datasource, scroller: this.scroller });
139
- this.scroller.dispose();
140
- this.scroller = scroller;
141
- this.scroller.init();
142
- };
143
- if (this.scroller.state.cycle.busy.get()) {
144
- // todo: think about immediate re-initialization even is there are pending processes
145
- this.scroller.adapter.relax(reInit.bind(this));
146
- }
147
- else {
148
- reInit();
149
- }
150
- }
151
- }
152
- done() {
153
- const { state, logger } = this.scroller;
154
- this.cyclesDone++;
155
- logger.logCycle(false);
156
- state.endWorkflowCycle(this.cyclesDone + 1);
157
- this.finalize();
158
- }
159
- dispose() {
160
- this.scroller.logger.log(() => 'disposing workflow');
161
- if (this.initTimer) {
162
- clearTimeout(this.initTimer);
163
- }
164
- this.offScroll();
165
- this.adapterRun$.dispose();
166
- this.scroller.dispose(true);
167
- Object.getOwnPropertyNames(this).forEach(prop => {
168
- delete this[prop];
169
- });
170
- this.disposed = true;
171
- }
172
- finalize() {
173
- }
174
- }
1
+ import { Scroller } from './scroller';
2
+ import { runStateMachine } from './workflow-transducer';
3
+ import { Reactive } from './classes/reactive';
4
+ import { AdapterProcess, CommonProcess, ProcessStatus as Status } from './processes/index';
5
+ import { WORKFLOW, validate } from './inputs/index';
6
+ export class Workflow {
7
+ constructor(params) {
8
+ const { element, datasource, consumer, run, Routines } = params;
9
+ const validationResult = validate(params, WORKFLOW);
10
+ if (!validationResult.isValid) {
11
+ throw new Error(`Invalid Workflow params: ${validationResult.errors.join(', ')}.`);
12
+ }
13
+ this.isInitialized = false;
14
+ this.disposed = false;
15
+ this.initTimer = null;
16
+ this.adapterRun$ = new Reactive();
17
+ this.cyclesDone = 0;
18
+ this.cyclesDone$ = new Reactive(0);
19
+ this.interruptionCount = 0;
20
+ this.errors = [];
21
+ this.offScroll = () => null;
22
+ this.propagateChanges = run;
23
+ this.stateMachineMethods = {
24
+ run: this.runProcess(),
25
+ interrupt: this.interrupt.bind(this),
26
+ done: this.done.bind(this),
27
+ onError: this.onError.bind(this)
28
+ };
29
+ this.scroller = new Scroller({
30
+ element,
31
+ datasource,
32
+ consumer,
33
+ workflow: this.getUpdater(),
34
+ Routines
35
+ });
36
+ if (this.scroller.settings.initializeDelay) {
37
+ this.initTimer = setTimeout(() => {
38
+ this.initTimer = null;
39
+ this.init();
40
+ }, this.scroller.settings.initializeDelay);
41
+ }
42
+ else {
43
+ this.init();
44
+ }
45
+ }
46
+ init() {
47
+ this.scroller.init(this.adapterRun$);
48
+ // set up scroll event listener
49
+ const { routines } = this.scroller;
50
+ const onScrollHandler = event => this.callWorkflow({
51
+ process: CommonProcess.scroll,
52
+ status: Status.start,
53
+ payload: { event }
54
+ });
55
+ this.offScroll = routines.onScroll(onScrollHandler);
56
+ // run the Workflow
57
+ this.isInitialized = true;
58
+ this.callWorkflow({
59
+ process: CommonProcess.init,
60
+ status: Status.start
61
+ });
62
+ }
63
+ changeItems(items) {
64
+ this.propagateChanges(items);
65
+ }
66
+ callWorkflow(processSubject) {
67
+ if (!this.isInitialized) {
68
+ return;
69
+ }
70
+ const { process, status } = processSubject;
71
+ // if the scroller is paused, any process other than "pause" and "reset" should be blocked
72
+ if (this.scroller.state.paused.get()) {
73
+ if (![AdapterProcess.pause, AdapterProcess.reset].includes(process)) {
74
+ this.scroller.logger.log('scroller is paused: ' + process + ' process is ignored');
75
+ return;
76
+ }
77
+ }
78
+ if (process && process.startsWith('adapter') && status !== Status.next) {
79
+ this.adapterRun$.set(processSubject);
80
+ }
81
+ this.process(processSubject);
82
+ }
83
+ getUpdater() {
84
+ return {
85
+ call: this.callWorkflow.bind(this),
86
+ onDataChanged: this.changeItems.bind(this)
87
+ };
88
+ }
89
+ process(data) {
90
+ const { status, process, payload } = data;
91
+ if (this.scroller.settings.logProcessRun) {
92
+ this.scroller.logger.log(() => {
93
+ const _fire = this.scroller.settings.logColor
94
+ ? ['%cfire%c', 'color: #cc7777;', 'color: #000000;']
95
+ : ['fire'];
96
+ return [..._fire, process, `"${status}"`, ...(payload !== void 0 ? [payload] : [])];
97
+ });
98
+ }
99
+ this.scroller.logger.logProcess(data);
100
+ if (process === CommonProcess.end) {
101
+ this.scroller.finalize();
102
+ }
103
+ runStateMachine({
104
+ input: data,
105
+ methods: this.stateMachineMethods
106
+ });
107
+ }
108
+ runProcess() {
109
+ return ({ run, process, name }) => (...args) => {
110
+ if (this.scroller.settings.logProcessRun) {
111
+ this.scroller.logger.log(() => {
112
+ const _run = this.scroller.settings.logColor
113
+ ? ['%crun%c', 'color: #333399;', 'color: #000000;']
114
+ : ['run'];
115
+ return [..._run, process || name, ...args];
116
+ });
117
+ }
118
+ run(this.scroller, ...args);
119
+ };
120
+ }
121
+ onError(process, payload) {
122
+ const message = (payload && String(payload.error)) || '';
123
+ const { time, cycle } = this.scroller.state;
124
+ this.errors.push({
125
+ process,
126
+ message,
127
+ time,
128
+ loop: cycle.loopIdNext
129
+ });
130
+ this.scroller.logger.logError(message);
131
+ }
132
+ interrupt({ process, finalize, datasource }) {
133
+ if (finalize) {
134
+ const { workflow, logger } = this.scroller;
135
+ // we are going to create a new reference for the scroller.workflow object
136
+ // calling the old version of the scroller.workflow by any outstanding async processes will be skipped
137
+ workflow.call = (_) => logger.log('[skip wf call]');
138
+ workflow.call.interrupted = true;
139
+ this.scroller.workflow = this.getUpdater();
140
+ this.interruptionCount++;
141
+ logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);
142
+ }
143
+ if (datasource) {
144
+ // Scroller re-initialization case
145
+ const reInit = () => {
146
+ this.scroller.logger.log('new Scroller instantiation');
147
+ const scroller = new Scroller({ datasource, scroller: this.scroller });
148
+ this.scroller.dispose();
149
+ this.scroller = scroller;
150
+ this.scroller.init();
151
+ };
152
+ if (this.scroller.state.cycle.busy.get()) {
153
+ // todo: think about immediate re-initialization even is there are pending processes
154
+ this.scroller.adapter.relax(reInit.bind(this));
155
+ }
156
+ else {
157
+ reInit();
158
+ }
159
+ }
160
+ }
161
+ done() {
162
+ const { state, logger } = this.scroller;
163
+ this.cyclesDone++;
164
+ this.cyclesDone$.set(this.cyclesDone);
165
+ logger.logCycle(false);
166
+ state.endWorkflowCycle(this.cyclesDone + 1);
167
+ this.finalize();
168
+ }
169
+ dispose() {
170
+ this.scroller.logger.log(() => 'disposing workflow');
171
+ if (this.initTimer) {
172
+ clearTimeout(this.initTimer);
173
+ }
174
+ this.offScroll();
175
+ this.adapterRun$.dispose();
176
+ this.cyclesDone$.dispose();
177
+ this.scroller.dispose(true);
178
+ Object.getOwnPropertyNames(this).forEach(prop => {
179
+ delete this[prop];
180
+ });
181
+ this.isInitialized = false;
182
+ this.disposed = true;
183
+ }
184
+ finalize() { }
185
+ }
175
186
  //# sourceMappingURL=workflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from './scroller';\r\nimport { runStateMachine } from './workflow-transducer';\r\nimport { Reactive } from './classes/reactive';\r\nimport { Item } from './classes/item';\r\nimport { AdapterProcess, CommonProcess, ProcessStatus as Status, } from './processes/index';\r\nimport { WORKFLOW, validate } from './inputs/index';\r\nimport {\r\n WorkflowParams,\r\n ProcessName,\r\n ProcessPayload,\r\n ProcessClass,\r\n ProcessSubject,\r\n WorkflowError,\r\n InterruptParams,\r\n StateMachineMethods,\r\n ScrollerWorkflow,\r\n} from './interfaces/index';\r\n\r\nexport class Workflow<ItemData = unknown> {\r\n\r\n isInitialized: boolean;\r\n disposed: boolean;\r\n initTimer: ReturnType<typeof setTimeout> | null;\r\n adapterRun$: Reactive<ProcessSubject>;\r\n cyclesDone: number;\r\n interruptionCount: number;\r\n errors: WorkflowError[];\r\n\r\n private offScroll: () => void;\r\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\r\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\r\n\r\n scroller: Scroller<ItemData>;\r\n\r\n constructor(params: WorkflowParams<ItemData>) {\r\n const { element, datasource, consumer, run, Routines } = params;\r\n\r\n const validationResult = validate(params, WORKFLOW);\r\n if (!validationResult.isValid) {\r\n throw new Error(`Invalid Workflow params: ${validationResult.errors.join(', ')}.`);\r\n }\r\n\r\n this.isInitialized = false;\r\n this.disposed = false;\r\n this.initTimer = null;\r\n this.adapterRun$ = new Reactive();\r\n this.cyclesDone = 0;\r\n this.interruptionCount = 0;\r\n this.errors = [];\r\n this.offScroll = () => null;\r\n this.propagateChanges = run;\r\n this.stateMachineMethods = {\r\n run: this.runProcess(),\r\n interrupt: this.interrupt.bind(this),\r\n done: this.done.bind(this),\r\n onError: this.onError.bind(this)\r\n };\r\n\r\n this.scroller = new Scroller<ItemData>({\r\n element, datasource, consumer, workflow: this.getUpdater(), Routines\r\n });\r\n\r\n if (this.scroller.settings.initializeDelay) {\r\n this.initTimer = setTimeout(() => {\r\n this.initTimer = null;\r\n this.init();\r\n }, this.scroller.settings.initializeDelay);\r\n } else {\r\n this.init();\r\n }\r\n }\r\n\r\n init(): void {\r\n this.scroller.init(this.adapterRun$);\r\n\r\n // set up scroll event listener\r\n const { routines } = this.scroller;\r\n const onScrollHandler: EventListener =\r\n event => this.callWorkflow({\r\n process: CommonProcess.scroll,\r\n status: Status.start,\r\n payload: { event }\r\n });\r\n this.offScroll = routines.onScroll(onScrollHandler);\r\n\r\n // run the Workflow\r\n this.isInitialized = true;\r\n this.callWorkflow({\r\n process: CommonProcess.init,\r\n status: Status.start\r\n });\r\n }\r\n\r\n changeItems(items: Item<ItemData>[]): void {\r\n this.propagateChanges(items);\r\n }\r\n\r\n callWorkflow(processSubject: ProcessSubject): void {\r\n if (!this.isInitialized) {\r\n return;\r\n }\r\n const { process, status } = processSubject;\r\n // if the scroller is paused, any process other than \"pause\" and \"reset\" should be blocked\r\n if (this.scroller.state.paused.get()) {\r\n if (![AdapterProcess.pause, AdapterProcess.reset].includes(process as AdapterProcess)) {\r\n this.scroller.logger.log('scroller is paused: ' + process + ' process is ignored');\r\n return;\r\n }\r\n }\r\n if (process && process.startsWith('adapter') && status !== Status.next) {\r\n this.adapterRun$.set(processSubject);\r\n }\r\n this.process(processSubject);\r\n }\r\n\r\n getUpdater(): ScrollerWorkflow<ItemData> {\r\n return {\r\n call: this.callWorkflow.bind(this),\r\n onDataChanged: this.changeItems.bind(this),\r\n };\r\n }\r\n\r\n process(data: ProcessSubject): void {\r\n const { status, process, payload } = data;\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\r\n process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])\r\n ]);\r\n }\r\n this.scroller.logger.logProcess(data);\r\n\r\n if (process === CommonProcess.end) {\r\n this.scroller.finalize();\r\n }\r\n runStateMachine({\r\n input: data,\r\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\r\n });\r\n }\r\n\r\n runProcess() {\r\n return ({ run, process, name }: ProcessClass) =>\r\n (...args: unknown[]): void => {\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\r\n process || name, ...args\r\n ]);\r\n }\r\n run(this.scroller as Scroller, ...args);\r\n };\r\n }\r\n\r\n onError(process: ProcessName, payload?: ProcessPayload): void {\r\n const message: string = payload && String(payload.error) || '';\r\n const { time, cycle } = this.scroller.state;\r\n this.errors.push({\r\n process,\r\n message,\r\n time,\r\n loop: cycle.loopIdNext\r\n });\r\n this.scroller.logger.logError(message);\r\n }\r\n\r\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\r\n if (finalize) {\r\n const { workflow, logger } = this.scroller;\r\n // we are going to create a new reference for the scroller.workflow object\r\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\r\n workflow.call = (_: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\r\n logger.log('[skip wf call]');\r\n workflow.call.interrupted = true;\r\n this.scroller.workflow = this.getUpdater();\r\n this.interruptionCount++;\r\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\r\n }\r\n if (datasource) { // Scroller re-initialization case\r\n const reInit = () => {\r\n this.scroller.logger.log('new Scroller instantiation');\r\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\r\n this.scroller.dispose();\r\n this.scroller = scroller;\r\n this.scroller.init();\r\n };\r\n if (this.scroller.state.cycle.busy.get()) {\r\n // todo: think about immediate re-initialization even is there are pending processes\r\n this.scroller.adapter.relax(reInit.bind(this));\r\n } else {\r\n reInit();\r\n }\r\n }\r\n }\r\n\r\n done(): void {\r\n const { state, logger } = this.scroller;\r\n this.cyclesDone++;\r\n logger.logCycle(false);\r\n state.endWorkflowCycle(this.cyclesDone + 1);\r\n this.finalize();\r\n }\r\n\r\n dispose(): void {\r\n this.scroller.logger.log(() => 'disposing workflow');\r\n if (this.initTimer) {\r\n clearTimeout(this.initTimer);\r\n }\r\n this.offScroll();\r\n this.adapterRun$.dispose();\r\n this.scroller.dispose(true);\r\n Object.getOwnPropertyNames(this).forEach(prop => {\r\n delete (this as Record<string, unknown>)[prop];\r\n });\r\n this.disposed = true;\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scroller } from './scroller';\nimport { runStateMachine } from './workflow-transducer';\nimport { Reactive } from './classes/reactive';\nimport { Item } from './classes/item';\nimport { AdapterProcess, CommonProcess, ProcessStatus as Status } from './processes/index';\nimport { WORKFLOW, validate } from './inputs/index';\nimport {\n WorkflowParams,\n ProcessName,\n ProcessPayload,\n ProcessClass,\n ProcessSubject,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n ScrollerWorkflow\n} from './interfaces/index';\n\nexport class Workflow<ItemData = unknown> {\n isInitialized: boolean;\n disposed: boolean;\n initTimer: ReturnType<typeof setTimeout> | null;\n adapterRun$: Reactive<ProcessSubject>;\n cyclesDone: number;\n cyclesDone$: Reactive<number>;\n interruptionCount: number;\n errors: WorkflowError[];\n\n private offScroll: () => void;\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\n\n scroller: Scroller<ItemData>;\n\n constructor(params: WorkflowParams<ItemData>) {\n const { element, datasource, consumer, run, Routines } = params;\n\n const validationResult = validate(params, WORKFLOW);\n if (!validationResult.isValid) {\n throw new Error(`Invalid Workflow params: ${validationResult.errors.join(', ')}.`);\n }\n\n this.isInitialized = false;\n this.disposed = false;\n this.initTimer = null;\n this.adapterRun$ = new Reactive();\n this.cyclesDone = 0;\n this.cyclesDone$ = new Reactive<number>(0);\n this.interruptionCount = 0;\n this.errors = [];\n this.offScroll = () => null;\n this.propagateChanges = run;\n this.stateMachineMethods = {\n run: this.runProcess(),\n interrupt: this.interrupt.bind(this),\n done: this.done.bind(this),\n onError: this.onError.bind(this)\n };\n\n this.scroller = new Scroller<ItemData>({\n element,\n datasource,\n consumer,\n workflow: this.getUpdater(),\n Routines\n });\n\n if (this.scroller.settings.initializeDelay) {\n this.initTimer = setTimeout(() => {\n this.initTimer = null;\n this.init();\n }, this.scroller.settings.initializeDelay);\n } else {\n this.init();\n }\n }\n\n init(): void {\n this.scroller.init(this.adapterRun$);\n\n // set up scroll event listener\n const { routines } = this.scroller;\n const onScrollHandler: EventListener = event =>\n this.callWorkflow({\n process: CommonProcess.scroll,\n status: Status.start,\n payload: { event }\n });\n this.offScroll = routines.onScroll(onScrollHandler);\n\n // run the Workflow\n this.isInitialized = true;\n this.callWorkflow({\n process: CommonProcess.init,\n status: Status.start\n });\n }\n\n changeItems(items: Item<ItemData>[]): void {\n this.propagateChanges(items);\n }\n\n callWorkflow(processSubject: ProcessSubject): void {\n if (!this.isInitialized) {\n return;\n }\n const { process, status } = processSubject;\n // if the scroller is paused, any process other than \"pause\" and \"reset\" should be blocked\n if (this.scroller.state.paused.get()) {\n if (![AdapterProcess.pause, AdapterProcess.reset].includes(process as AdapterProcess)) {\n this.scroller.logger.log('scroller is paused: ' + process + ' process is ignored');\n return;\n }\n }\n if (process && process.startsWith('adapter') && status !== Status.next) {\n this.adapterRun$.set(processSubject);\n }\n this.process(processSubject);\n }\n\n getUpdater(): ScrollerWorkflow<ItemData> {\n return {\n call: this.callWorkflow.bind(this),\n onDataChanged: this.changeItems.bind(this)\n };\n }\n\n process(data: ProcessSubject): void {\n const { status, process, payload } = data;\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => {\n const _fire = this.scroller.settings.logColor\n ? ['%cfire%c', 'color: #cc7777;', 'color: #000000;']\n : ['fire'];\n return [..._fire, process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])];\n });\n }\n this.scroller.logger.logProcess(data);\n\n if (process === CommonProcess.end) {\n this.scroller.finalize();\n }\n runStateMachine({\n input: data,\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\n });\n }\n\n runProcess() {\n return ({ run, process, name }: ProcessClass) =>\n (...args: unknown[]): void => {\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => {\n const _run = this.scroller.settings.logColor\n ? ['%crun%c', 'color: #333399;', 'color: #000000;']\n : ['run'];\n return [..._run, process || name, ...args];\n });\n }\n run(this.scroller as Scroller, ...args);\n };\n }\n\n onError(process: ProcessName, payload?: ProcessPayload): void {\n const message: string = (payload && String(payload.error)) || '';\n const { time, cycle } = this.scroller.state;\n this.errors.push({\n process,\n message,\n time,\n loop: cycle.loopIdNext\n });\n this.scroller.logger.logError(message);\n }\n\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\n if (finalize) {\n const { workflow, logger } = this.scroller;\n // we are going to create a new reference for the scroller.workflow object\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\n workflow.call = (_: ProcessSubject) => logger.log('[skip wf call]');\n workflow.call.interrupted = true;\n this.scroller.workflow = this.getUpdater();\n this.interruptionCount++;\n logger.log(\n () => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`\n );\n }\n if (datasource) {\n // Scroller re-initialization case\n const reInit = () => {\n this.scroller.logger.log('new Scroller instantiation');\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\n this.scroller.dispose();\n this.scroller = scroller;\n this.scroller.init();\n };\n if (this.scroller.state.cycle.busy.get()) {\n // todo: think about immediate re-initialization even is there are pending processes\n this.scroller.adapter.relax(reInit.bind(this));\n } else {\n reInit();\n }\n }\n }\n\n done(): void {\n const { state, logger } = this.scroller;\n this.cyclesDone++;\n this.cyclesDone$.set(this.cyclesDone);\n logger.logCycle(false);\n state.endWorkflowCycle(this.cyclesDone + 1);\n this.finalize();\n }\n\n dispose(): void {\n this.scroller.logger.log(() => 'disposing workflow');\n if (this.initTimer) {\n clearTimeout(this.initTimer);\n }\n this.offScroll();\n this.adapterRun$.dispose();\n this.cyclesDone$.dispose();\n this.scroller.dispose(true);\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n this.isInitialized = false;\n this.disposed = true;\n }\n\n finalize(): void {}\n}\n"]}
@@ -1,51 +1,52 @@
1
- import { __assign } from "tslib";
2
- import { AdapterPropName, AdapterPropType, getDefaultAdapterProps, reactiveConfigStorage } from './props';
3
- import core from '../../version';
4
- import { wantedStorage, wantedUtils } from './wanted';
5
- var instanceCount = 0;
6
- var AdapterContext = /** @class */ (function () {
7
- function AdapterContext(config) {
8
- var _this = this;
9
- var mock = config.mock, reactive = config.reactive;
10
- var id = ++instanceCount;
11
- var conf = { configurable: true };
12
- var reactivePropsStore = {};
13
- wantedStorage.set(id, { box: {}, block: false });
14
- // set up permanent props
15
- Object.defineProperty(this, AdapterPropName.id, __assign({ get: function () { return id; } }, conf));
16
- Object.defineProperty(this, AdapterPropName.mock, __assign({ get: function () { return mock; } }, conf));
17
- Object.defineProperty(this, AdapterPropName.augmented, __assign({ get: function () { return false; } }, conf));
18
- Object.defineProperty(this, AdapterPropName.version, __assign({ get: function () { return core.version; } }, conf));
19
- // set up default props, they will be reassigned during the Adapter instantiation
20
- getDefaultAdapterProps()
21
- .filter(function (_a) {
22
- var permanent = _a.permanent;
23
- return !permanent;
24
- })
25
- .forEach(function (prop) {
26
- var value = prop.value;
27
- // reactive props might be reconfigured by the vscroll consumer
28
- if (reactive && prop.type === AdapterPropType.Reactive) {
29
- var react = reactive[prop.name];
30
- if (react) {
31
- // here we have a configured reactive property that came from the outer config
32
- // this prop must be exposed via Adapter, but at the same time we need to
33
- // persist the original default value as it will be used by the Adapter internally
34
- reactivePropsStore[prop.name] = __assign(__assign({}, react), { default: value // persisting the default native Reactive prop
35
- });
36
- value = react.source; // exposing the configured prop instead of the default one
37
- }
38
- }
39
- Object.defineProperty(_this, prop.name, __assign({ get: function () {
40
- wantedUtils.setBox(prop, id);
41
- return value;
42
- } }, conf));
43
- });
44
- if (reactive) { // save both configured and default reactive props in the store
45
- reactiveConfigStorage.set(id, reactivePropsStore);
46
- }
47
- }
48
- return AdapterContext;
49
- }());
50
- export { AdapterContext };
1
+ import { __assign } from "tslib";
2
+ import { AdapterPropName, AdapterPropType, getDefaultAdapterProps, reactiveConfigStorage } from './props';
3
+ import core from '../../version';
4
+ import { wantedStorage, wantedUtils } from './wanted';
5
+ var instanceCount = 0;
6
+ var AdapterContext = /** @class */ (function () {
7
+ function AdapterContext(config) {
8
+ var _this = this;
9
+ var mock = config.mock, reactive = config.reactive;
10
+ var id = ++instanceCount;
11
+ var conf = { configurable: true };
12
+ var reactivePropsStore = {};
13
+ wantedStorage.set(id, { box: {}, block: false });
14
+ // set up permanent props
15
+ Object.defineProperty(this, AdapterPropName.id, __assign({ get: function () { return id; } }, conf));
16
+ Object.defineProperty(this, AdapterPropName.mock, __assign({ get: function () { return mock; } }, conf));
17
+ Object.defineProperty(this, AdapterPropName.augmented, __assign({ get: function () { return false; } }, conf));
18
+ Object.defineProperty(this, AdapterPropName.version, __assign({ get: function () { return core.version; } }, conf));
19
+ // set up default props, they will be reassigned during the Adapter instantiation
20
+ getDefaultAdapterProps()
21
+ .filter(function (_a) {
22
+ var permanent = _a.permanent;
23
+ return !permanent;
24
+ })
25
+ .forEach(function (prop) {
26
+ var value = prop.value;
27
+ // reactive props might be reconfigured by the vscroll consumer
28
+ if (reactive && prop.type === AdapterPropType.Reactive) {
29
+ var react = reactive[prop.name];
30
+ if (react) {
31
+ // here we have a configured reactive property that came from the outer config
32
+ // this prop must be exposed via Adapter, but at the same time we need to
33
+ // persist the original default value as it will be used by the Adapter internally
34
+ reactivePropsStore[prop.name] = __assign(__assign({}, react), { default: value // persisting the default native Reactive prop
35
+ });
36
+ value = react.source; // exposing the configured prop instead of the default one
37
+ }
38
+ }
39
+ Object.defineProperty(_this, prop.name, __assign({ get: function () {
40
+ wantedUtils.setBox(prop, id);
41
+ return value;
42
+ } }, conf));
43
+ });
44
+ if (reactive) {
45
+ // save both configured and default reactive props in the store
46
+ reactiveConfigStorage.set(id, reactivePropsStore);
47
+ }
48
+ }
49
+ return AdapterContext;
50
+ }());
51
+ export { AdapterContext };
51
52
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/classes/adapter/context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC1G,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtD,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB;IAEE,wBAAY,MAAsB;QAAlC,iBA8CC;QA7CS,IAAA,IAAI,GAAe,MAAM,KAArB,EAAE,QAAQ,GAAK,MAAM,SAAX,CAAY;QAClC,IAAM,EAAE,GAAG,EAAE,aAAa,CAAC;QAC3B,IAAM,IAAI,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACpC,IAAM,kBAAkB,GAAwB,EAAE,CAAC;QACnD,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjD,yBAAyB;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,aAAI,GAAG,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE,IAAK,IAAI,EAAG,CAAC;QAC5E,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,aAAI,GAAG,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,IAAK,IAAI,EAAG,CAAC;QAChF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,aAAI,GAAG,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,IAAK,IAAI,EAAG,CAAC;QACtF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,aAAI,GAAG,EAAE,cAAM,OAAA,IAAI,CAAC,OAAO,EAAZ,CAAY,IAAK,IAAI,EAAG,CAAC;QAE3F,iFAAiF;QACjF,sBAAsB,EAAE;aACrB,MAAM,CAAC,UAAC,EAAa;gBAAX,SAAS,eAAA;YAAO,OAAA,CAAC,SAAS;QAAV,CAAU,CAAC;aACrC,OAAO,CAAC,UAAA,IAAI;YACL,IAAA,KAAK,GAAK,IAAI,MAAT,CAAU;YAErB,+DAA+D;YAC/D,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,EAAE;gBACtD,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,KAAK,EAAE;oBACT,8EAA8E;oBAC9E,yEAAyE;oBACzE,kFAAkF;oBAClF,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,yBACxB,KAAK,KACR,OAAO,EAAE,KAA0B,CAAC,8CAA8C;uBACnF,CAAC;oBACF,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,0DAA0D;iBACjF;aACF;YAED,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,IAAI,CAAC,IAAI,aACnC,GAAG,EAAE;oBACH,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC,IACE,IAAI,EACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,IAAI,QAAQ,EAAE,EAAE,+DAA+D;YAC7E,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;SACnD;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AAjDD,IAiDC","sourcesContent":["import { AdapterPropName, AdapterPropType, getDefaultAdapterProps, reactiveConfigStorage } from './props';\r\nimport core from '../../version';\r\nimport { Reactive } from '../reactive';\r\nimport { wantedStorage, wantedUtils } from './wanted';\r\nimport { IReactivePropsStore, IAdapterConfig } from '../../interfaces/index';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class AdapterContext {\r\n\r\n constructor(config: IAdapterConfig) {\r\n const { mock, reactive } = config;\r\n const id = ++instanceCount;\r\n const conf = { configurable: true };\r\n const reactivePropsStore: IReactivePropsStore = {};\r\n wantedStorage.set(id, { box: {}, block: false });\r\n\r\n // set up permanent props\r\n Object.defineProperty(this, AdapterPropName.id, { get: () => id, ...conf });\r\n Object.defineProperty(this, AdapterPropName.mock, { get: () => mock, ...conf });\r\n Object.defineProperty(this, AdapterPropName.augmented, { get: () => false, ...conf });\r\n Object.defineProperty(this, AdapterPropName.version, { get: () => core.version, ...conf });\r\n\r\n // set up default props, they will be reassigned during the Adapter instantiation\r\n getDefaultAdapterProps()\r\n .filter(({ permanent }) => !permanent)\r\n .forEach(prop => {\r\n let { value } = prop;\r\n\r\n // reactive props might be reconfigured by the vscroll consumer\r\n if (reactive && prop.type === AdapterPropType.Reactive) {\r\n const react = reactive[prop.name];\r\n if (react) {\r\n // here we have a configured reactive property that came from the outer config\r\n // this prop must be exposed via Adapter, but at the same time we need to\r\n // persist the original default value as it will be used by the Adapter internally\r\n reactivePropsStore[prop.name] = {\r\n ...react,\r\n default: value as Reactive<unknown> // persisting the default native Reactive prop\r\n };\r\n value = react.source; // exposing the configured prop instead of the default one\r\n }\r\n }\r\n\r\n Object.defineProperty(this, prop.name, {\r\n get: () => {\r\n wantedUtils.setBox(prop, id);\r\n return value;\r\n },\r\n ...conf\r\n });\r\n });\r\n\r\n if (reactive) { // save both configured and default reactive props in the store\r\n reactiveConfigStorage.set(id, reactivePropsStore);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/classes/adapter/context.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtD,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB;IACE,wBAAY,MAAsB;QAAlC,iBA+CC;QA9CS,IAAA,IAAI,GAAe,MAAM,KAArB,EAAE,QAAQ,GAAK,MAAM,SAAX,CAAY;QAClC,IAAM,EAAE,GAAG,EAAE,aAAa,CAAC;QAC3B,IAAM,IAAI,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACpC,IAAM,kBAAkB,GAAwB,EAAE,CAAC;QACnD,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjD,yBAAyB;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,aAAI,GAAG,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE,IAAK,IAAI,EAAG,CAAC;QAC5E,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,aAAI,GAAG,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI,IAAK,IAAI,EAAG,CAAC;QAChF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,aAAI,GAAG,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,IAAK,IAAI,EAAG,CAAC;QACtF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,aAAI,GAAG,EAAE,cAAM,OAAA,IAAI,CAAC,OAAO,EAAZ,CAAY,IAAK,IAAI,EAAG,CAAC;QAE3F,iFAAiF;QACjF,sBAAsB,EAAE;aACrB,MAAM,CAAC,UAAC,EAAa;gBAAX,SAAS,eAAA;YAAO,OAAA,CAAC,SAAS;QAAV,CAAU,CAAC;aACrC,OAAO,CAAC,UAAA,IAAI;YACL,IAAA,KAAK,GAAK,IAAI,MAAT,CAAU;YAErB,+DAA+D;YAC/D,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,QAAQ,EAAE,CAAC;gBACvD,IAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,KAAK,EAAE,CAAC;oBACV,8EAA8E;oBAC9E,yEAAyE;oBACzE,kFAAkF;oBAClF,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,yBACxB,KAAK,KACR,OAAO,EAAE,KAA0B,CAAC,8CAA8C;uBACnF,CAAC;oBACF,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,0DAA0D;gBAClF,CAAC;YACH,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,IAAI,CAAC,IAAI,aACnC,GAAG,EAAE;oBACH,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC,IACE,IAAI,EACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,IAAI,QAAQ,EAAE,CAAC;YACb,+DAA+D;YAC/D,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AAjDD,IAiDC","sourcesContent":["import {\n AdapterPropName,\n AdapterPropType,\n getDefaultAdapterProps,\n reactiveConfigStorage\n} from './props';\nimport core from '../../version';\nimport { Reactive } from '../reactive';\nimport { wantedStorage, wantedUtils } from './wanted';\nimport { IReactivePropsStore, IAdapterConfig } from '../../interfaces/index';\n\nlet instanceCount = 0;\n\nexport class AdapterContext {\n constructor(config: IAdapterConfig) {\n const { mock, reactive } = config;\n const id = ++instanceCount;\n const conf = { configurable: true };\n const reactivePropsStore: IReactivePropsStore = {};\n wantedStorage.set(id, { box: {}, block: false });\n\n // set up permanent props\n Object.defineProperty(this, AdapterPropName.id, { get: () => id, ...conf });\n Object.defineProperty(this, AdapterPropName.mock, { get: () => mock, ...conf });\n Object.defineProperty(this, AdapterPropName.augmented, { get: () => false, ...conf });\n Object.defineProperty(this, AdapterPropName.version, { get: () => core.version, ...conf });\n\n // set up default props, they will be reassigned during the Adapter instantiation\n getDefaultAdapterProps()\n .filter(({ permanent }) => !permanent)\n .forEach(prop => {\n let { value } = prop;\n\n // reactive props might be reconfigured by the vscroll consumer\n if (reactive && prop.type === AdapterPropType.Reactive) {\n const react = reactive[prop.name];\n if (react) {\n // here we have a configured reactive property that came from the outer config\n // this prop must be exposed via Adapter, but at the same time we need to\n // persist the original default value as it will be used by the Adapter internally\n reactivePropsStore[prop.name] = {\n ...react,\n default: value as Reactive<unknown> // persisting the default native Reactive prop\n };\n value = react.source; // exposing the configured prop instead of the default one\n }\n }\n\n Object.defineProperty(this, prop.name, {\n get: () => {\n wantedUtils.setBox(prop, id);\n return value;\n },\n ...conf\n });\n });\n\n if (reactive) {\n // save both configured and default reactive props in the store\n reactiveConfigStorage.set(id, reactivePropsStore);\n }\n }\n}\n"]}