vscroll 1.4.3 → 1.5.1

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 (93) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +105 -58
  3. package/dist/bundles/vscroll.esm5.js +204 -176
  4. package/dist/bundles/vscroll.esm5.js.map +1 -1
  5. package/dist/bundles/vscroll.esm5.min.js +2 -2
  6. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.js +122 -112
  8. package/dist/bundles/vscroll.esm6.js.map +1 -1
  9. package/dist/bundles/vscroll.esm6.min.js +2 -2
  10. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.js +205 -177
  12. package/dist/bundles/vscroll.umd.js.map +1 -1
  13. package/dist/bundles/vscroll.umd.min.js +2 -2
  14. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  15. package/dist/esm2015/classes/buffer.js +2 -6
  16. package/dist/esm2015/classes/buffer.js.map +1 -1
  17. package/dist/esm2015/classes/domRoutines.js +93 -69
  18. package/dist/esm2015/classes/domRoutines.js.map +1 -1
  19. package/dist/esm2015/classes/logger.js +2 -2
  20. package/dist/esm2015/classes/logger.js.map +1 -1
  21. package/dist/esm2015/classes/paddings.js +5 -5
  22. package/dist/esm2015/classes/paddings.js.map +1 -1
  23. package/dist/esm2015/classes/viewport.js +9 -21
  24. package/dist/esm2015/classes/viewport.js.map +1 -1
  25. package/dist/esm2015/index.js.map +1 -1
  26. package/dist/esm2015/interfaces/index.js.map +1 -1
  27. package/dist/esm2015/interfaces/routines.js +2 -0
  28. package/dist/esm2015/interfaces/routines.js.map +1 -0
  29. package/dist/esm2015/interfaces/workflow.js.map +1 -1
  30. package/dist/esm2015/scroller.js +4 -4
  31. package/dist/esm2015/scroller.js.map +1 -1
  32. package/dist/esm2015/version.js +1 -1
  33. package/dist/esm2015/version.js.map +1 -1
  34. package/dist/esm2015/workflow.js +6 -4
  35. package/dist/esm2015/workflow.js.map +1 -1
  36. package/dist/esm5/classes/adapter.js +4 -4
  37. package/dist/esm5/classes/adapter.js.map +1 -1
  38. package/dist/esm5/classes/buffer/cache.js +1 -1
  39. package/dist/esm5/classes/buffer/cache.js.map +1 -1
  40. package/dist/esm5/classes/buffer/checkCall.js +4 -4
  41. package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
  42. package/dist/esm5/classes/buffer.js +5 -9
  43. package/dist/esm5/classes/buffer.js.map +1 -1
  44. package/dist/esm5/classes/domRoutines.js +107 -69
  45. package/dist/esm5/classes/domRoutines.js.map +1 -1
  46. package/dist/esm5/classes/logger.js +21 -21
  47. package/dist/esm5/classes/logger.js.map +1 -1
  48. package/dist/esm5/classes/paddings.js +5 -5
  49. package/dist/esm5/classes/paddings.js.map +1 -1
  50. package/dist/esm5/classes/state/cycle.js +2 -2
  51. package/dist/esm5/classes/state/cycle.js.map +1 -1
  52. package/dist/esm5/classes/viewport.js +10 -22
  53. package/dist/esm5/classes/viewport.js.map +1 -1
  54. package/dist/esm5/index.js.map +1 -1
  55. package/dist/esm5/inputs/validation.js +4 -4
  56. package/dist/esm5/inputs/validation.js.map +1 -1
  57. package/dist/esm5/interfaces/index.js.map +1 -1
  58. package/dist/esm5/interfaces/routines.js +2 -0
  59. package/dist/esm5/interfaces/routines.js.map +1 -0
  60. package/dist/esm5/interfaces/workflow.js.map +1 -1
  61. package/dist/esm5/processes/adapter/remove.js +1 -1
  62. package/dist/esm5/processes/adapter/remove.js.map +1 -1
  63. package/dist/esm5/processes/adjust.js +5 -5
  64. package/dist/esm5/processes/adjust.js.map +1 -1
  65. package/dist/esm5/processes/clip.js +5 -5
  66. package/dist/esm5/processes/clip.js.map +1 -1
  67. package/dist/esm5/processes/fetch.js +2 -2
  68. package/dist/esm5/processes/fetch.js.map +1 -1
  69. package/dist/esm5/processes/misc/base.js +1 -1
  70. package/dist/esm5/processes/misc/base.js.map +1 -1
  71. package/dist/esm5/processes/preClip.js +2 -2
  72. package/dist/esm5/processes/preClip.js.map +1 -1
  73. package/dist/esm5/processes/preFetch.js +5 -5
  74. package/dist/esm5/processes/preFetch.js.map +1 -1
  75. package/dist/esm5/processes/scroll.js +2 -2
  76. package/dist/esm5/processes/scroll.js.map +1 -1
  77. package/dist/esm5/scroller.js +5 -5
  78. package/dist/esm5/scroller.js.map +1 -1
  79. package/dist/esm5/version.js +1 -1
  80. package/dist/esm5/version.js.map +1 -1
  81. package/dist/esm5/workflow.js +12 -6
  82. package/dist/esm5/workflow.js.map +1 -1
  83. package/dist/typings/classes/domRoutines.d.ts +21 -19
  84. package/dist/typings/classes/logger.d.ts +1 -1
  85. package/dist/typings/classes/paddings.d.ts +2 -2
  86. package/dist/typings/classes/viewport.d.ts +1 -4
  87. package/dist/typings/index.d.ts +2 -2
  88. package/dist/typings/interfaces/index.d.ts +2 -1
  89. package/dist/typings/interfaces/routines.d.ts +157 -0
  90. package/dist/typings/interfaces/workflow.d.ts +3 -0
  91. package/dist/typings/scroller.d.ts +1 -1
  92. package/dist/typings/workflow.d.ts +1 -1
  93. package/package.json +18 -17
@@ -1,21 +1,12 @@
1
1
  import { Paddings } from './paddings';
2
2
  import { Direction } from '../inputs/index';
3
3
  export class Viewport {
4
- constructor(element, settings, routines, state, logger) {
5
- this.element = element;
4
+ constructor(settings, routines, state, logger) {
6
5
  this.settings = settings;
7
6
  this.routines = routines;
8
7
  this.state = state;
9
8
  this.logger = logger;
10
- this.hostElement = this.routines.getHostElement(this.element);
11
- this.scrollEventReceiver = this.routines.getScrollEventReceiver(this.element);
12
- if (settings.windowViewport) {
13
- this.routines.setupScrollRestoration();
14
- }
15
- if (settings.dismissOverflowAnchor) {
16
- this.routines.dismissOverflowAnchor(this.hostElement);
17
- }
18
- this.paddings = new Paddings(this.element, this.routines, settings);
9
+ this.paddings = new Paddings(this.routines, settings);
19
10
  }
20
11
  reset(startIndex) {
21
12
  this.setOffset();
@@ -29,7 +20,7 @@ export class Viewport {
29
20
  this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);
30
21
  return value;
31
22
  }
32
- this.routines.setScrollPosition(this.hostElement, value);
23
+ this.routines.setScrollPosition(value);
33
24
  const position = this.scrollPosition;
34
25
  this.logger.log(() => [
35
26
  'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])
@@ -37,16 +28,16 @@ export class Viewport {
37
28
  return position;
38
29
  }
39
30
  get scrollPosition() {
40
- return this.routines.getScrollPosition(this.hostElement);
31
+ return this.routines.getScrollPosition();
41
32
  }
42
33
  set scrollPosition(value) {
43
34
  this.setPosition(value);
44
35
  }
45
36
  getSize() {
46
- return this.routines.getSize(this.hostElement, true);
37
+ return this.routines.getViewportSize();
47
38
  }
48
39
  getScrollableSize() {
49
- return this.routines.getSize(this.element);
40
+ return this.routines.getScrollerSize();
50
41
  }
51
42
  getMaxScrollPosition() {
52
43
  return this.getScrollableSize() - this.getSize();
@@ -55,16 +46,13 @@ export class Viewport {
55
46
  return this.getSize() * this.settings.padding;
56
47
  }
57
48
  getEdge(direction) {
58
- return this.routines.getEdge(this.hostElement, direction, true);
49
+ return this.routines.getViewportEdge(direction);
59
50
  }
60
51
  setOffset() {
61
- this.offset = this.routines.getOffset(this.element);
62
- if (!this.settings.windowViewport) {
63
- this.offset -= this.routines.getOffset(this.hostElement);
64
- }
52
+ this.offset = this.routines.getOffset();
65
53
  }
66
54
  findItemElementById(id) {
67
- return this.routines.findItemElement(this.element, id);
55
+ return this.routines.findItemElement(id);
68
56
  }
69
57
  getEdgeVisibleItem(items, direction) {
70
58
  const bwd = direction === Direction.backward;
@@ -1 +1 @@
1
- {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"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","sourcesContent":["import { Paddings } from './paddings';\nimport { Settings } from './settings';\nimport { Routines } from './domRoutines';\nimport { Item } from './item';\nimport { State } from './state';\nimport { Logger } from './logger';\nimport { Direction } from '../inputs/index';\n\nexport class Viewport {\n\n offset: number;\n paddings: Paddings;\n\n readonly element: HTMLElement;\n readonly settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n readonly hostElement: HTMLElement;\n readonly scrollEventReceiver: HTMLElement | Window;\n\n constructor(element: HTMLElement, settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.element = element;\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n\n this.hostElement = this.routines.getHostElement(this.element);\n this.scrollEventReceiver = this.routines.getScrollEventReceiver(this.element);\n\n if (settings.windowViewport) {\n this.routines.setupScrollRestoration();\n }\n if (settings.dismissOverflowAnchor) {\n this.routines.dismissOverflowAnchor(this.hostElement);\n }\n\n this.paddings = new Paddings(this.element, this.routines, settings);\n }\n\n reset(startIndex: number): void {\n this.setOffset();\n this.paddings.reset(this.getSize(), startIndex, this.offset);\n this.scrollPosition = this.paddings.backward.size || 0;\n this.state.scroll.reset();\n }\n\n setPosition(value: number): number {\n const oldPosition = this.scrollPosition;\n if (oldPosition === value) {\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\n return value;\n }\n this.routines.setScrollPosition(this.hostElement, value);\n const position = this.scrollPosition;\n this.logger.log(() => [\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\n ]);\n return position;\n }\n\n get scrollPosition(): number {\n return this.routines.getScrollPosition(this.hostElement);\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getSize(this.hostElement, true);\n }\n\n getScrollableSize(): number {\n return this.routines.getSize(this.element);\n }\n\n getMaxScrollPosition(): number {\n return this.getScrollableSize() - this.getSize();\n }\n\n getBufferPadding(): number {\n return this.getSize() * this.settings.padding;\n }\n\n getEdge(direction: Direction): number {\n return this.routines.getEdge(this.hostElement, direction, true);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset(this.element);\n if (!this.settings.windowViewport) {\n this.offset -= this.routines.getOffset(this.hostElement);\n }\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(this.element, id);\n }\n\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\n const bwd = direction === Direction.backward;\n const opposite = bwd ? Direction.forward : Direction.backward;\n const viewportEdge = this.getEdge(direction);\n let item, diff = 0;\n for (\n let i = bwd ? 0 : items.length - 1;\n bwd ? i <= items.length - 1 : i >= 0;\n i += bwd ? 1 : -1\n ) {\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\n diff = itemEdge - viewportEdge;\n if (bwd && diff > 0 || !bwd && diff < 0) {\n item = items[i];\n break;\n }\n }\n return { item, index: item ? item.$index : NaN, diff };\n }\n\n}\n"]}
1
+ {"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../../src/classes/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,OAAO,QAAQ;IAUnB,YAAY,QAAkB,EAAE,QAAkB,EAAE,KAAY,EAAE,MAAc;QAC9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,4BAA4B,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACpB,4BAA4B,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;IACzC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;IACzC,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,SAAoB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,mBAAmB,CAAC,EAAU;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,kBAAkB,CAAC,KAAa,EAAE,SAAoB;QACpD,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;QACnB,KACE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAClC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACpC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnE,IAAI,GAAG,QAAQ,GAAG,YAAY,CAAC;YAC/B,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,EAAE;gBACvC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM;aACP;SACF;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;CAEF","sourcesContent":["import { Paddings } from './paddings';\nimport { Settings } from './settings';\nimport { Routines } from './domRoutines';\nimport { Item } from './item';\nimport { State } from './state';\nimport { Logger } from './logger';\nimport { Direction } from '../inputs/index';\n\nexport class Viewport {\n\n offset: number;\n paddings: Paddings;\n\n readonly settings: Settings;\n readonly routines: Routines;\n readonly state: State;\n readonly logger: Logger;\n\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\n this.settings = settings;\n this.routines = routines;\n this.state = state;\n this.logger = logger;\n this.paddings = new Paddings(this.routines, settings);\n }\n\n reset(startIndex: number): void {\n this.setOffset();\n this.paddings.reset(this.getSize(), startIndex, this.offset);\n this.scrollPosition = this.paddings.backward.size || 0;\n this.state.scroll.reset();\n }\n\n setPosition(value: number): number {\n const oldPosition = this.scrollPosition;\n if (oldPosition === value) {\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\n return value;\n }\n this.routines.setScrollPosition(value);\n const position = this.scrollPosition;\n this.logger.log(() => [\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\n ]);\n return position;\n }\n\n get scrollPosition(): number {\n return this.routines.getScrollPosition();\n }\n\n set scrollPosition(value: number) {\n this.setPosition(value);\n }\n\n getSize(): number {\n return this.routines.getViewportSize();\n }\n\n getScrollableSize(): number {\n return this.routines.getScrollerSize();\n }\n\n getMaxScrollPosition(): number {\n return this.getScrollableSize() - this.getSize();\n }\n\n getBufferPadding(): number {\n return this.getSize() * this.settings.padding;\n }\n\n getEdge(direction: Direction): number {\n return this.routines.getViewportEdge(direction);\n }\n\n setOffset(): void {\n this.offset = this.routines.getOffset();\n }\n\n findItemElementById(id: string): HTMLElement | null {\n return this.routines.findItemElement(id);\n }\n\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\n const bwd = direction === Direction.backward;\n const opposite = bwd ? Direction.forward : Direction.backward;\n const viewportEdge = this.getEdge(direction);\n let item, diff = 0;\n for (\n let i = bwd ? 0 : items.length - 1;\n bwd ? i <= items.length - 1 : i >= 0;\n i += bwd ? 1 : -1\n ) {\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\n diff = itemEdge - viewportEdge;\n if (bwd && diff > 0 || !bwd && diff < 0) {\n item = items[i];\n break;\n }\n }\n return { item, index: item ? item.$index : NaN, diff };\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,WAAW,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYzD,kBAAkB;AAClB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,SAAS,EACT,YAAY,GACb,CAAC","sourcesContent":["import { Workflow } from './workflow';\nimport { makeDatasource } from './classes/datasource';\nimport packageInfo from './version';\nimport { INVALID_DATASOURCE_PREFIX } from './scroller';\nimport { AdapterPropName, EMPTY_ITEM, getDefaultAdapterProps } from './classes/adapter/props';\nimport { Direction, SizeStrategy } from './inputs/index';\n\nimport {\n IDatasource,\n IDatasourceConstructed,\n IReactivePropConfig,\n IAdapterConfig,\n ItemAdapter,\n IAdapter,\n Item,\n} from './interfaces/index';\n\n// export entities\nexport {\n Workflow,\n makeDatasource,\n packageInfo,\n INVALID_DATASOURCE_PREFIX,\n AdapterPropName,\n EMPTY_ITEM,\n getDefaultAdapterProps,\n Direction,\n SizeStrategy,\n};\n\n// export interfaces\nexport {\n IDatasource,\n IDatasourceConstructed,\n IReactivePropConfig,\n IAdapterConfig,\n ItemAdapter as IAdapterItem,\n IAdapter,\n Item,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,WAAW,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAazD,kBAAkB;AAClB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,SAAS,EACT,YAAY,GACb,CAAC","sourcesContent":["import { Workflow } from './workflow';\nimport { makeDatasource } from './classes/datasource';\nimport packageInfo from './version';\nimport { INVALID_DATASOURCE_PREFIX } from './scroller';\nimport { AdapterPropName, EMPTY_ITEM, getDefaultAdapterProps } from './classes/adapter/props';\nimport { Direction, SizeStrategy } from './inputs/index';\n\nimport {\n IDatasource,\n IDatasourceConstructed,\n IRoutines,\n IReactivePropConfig,\n IAdapterConfig,\n ItemAdapter,\n IAdapter,\n Item,\n} from './interfaces/index';\n\n// export entities\nexport {\n Workflow,\n makeDatasource,\n packageInfo,\n INVALID_DATASOURCE_PREFIX,\n AdapterPropName,\n EMPTY_ITEM,\n getDefaultAdapterProps,\n Direction,\n SizeStrategy,\n};\n\n// export interfaces\nexport {\n IDatasource,\n IDatasourceConstructed,\n IRoutines,\n IReactivePropConfig,\n IAdapterConfig,\n ItemAdapter as IAdapterItem,\n IAdapter,\n Item,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n} from './datasource';\nimport {\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n} from './workflow';\nimport { Item } from './item';\nimport {\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n AdapterMethodResult,\n IAdapter,\n} from './adapter';\nimport { Settings, DevSettings } from './settings';\nimport { ScrollEventData, State } from './state';\nimport {\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n} from './process';\nimport {\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n} from './validation';\n\nexport {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n Item,\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n AdapterMethodResult,\n IAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n Settings,\n DevSettings,\n ScrollEventData,\n State,\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n} from './datasource';\nimport {\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n} from './workflow';\nimport { Item } from './item';\nimport {\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n AdapterMethodResult,\n IAdapter,\n} from './adapter';\nimport { Settings, DevSettings } from './settings';\nimport { IRoutines, CustomRoutinesClass } from './routines';\nimport { ScrollEventData, State } from './state';\nimport {\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n} from './process';\nimport {\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n} from './validation';\n\nexport {\n ObservableLike,\n DatasourceGet,\n IDatasourceOptional,\n IDatasource,\n IDatasourceConstructed,\n OnDataChanged,\n WorkflowParams,\n ScrollerWorkflow,\n ScrollerParams,\n WorkflowGetter,\n WorkflowError,\n InterruptParams,\n StateMachineMethods,\n StateMachineParams,\n Item,\n IReactivePropConfig,\n IReactivePropsConfig,\n IReactivePropsStore,\n IAdapterConfig,\n IAdapterProp,\n ItemAdapter,\n AdapterMethodResult,\n IAdapter,\n ItemsPredicate,\n ItemsUpdater,\n ItemsProcessor,\n BufferUpdater,\n IPackage,\n IPackages,\n IBufferInfo,\n IAdapterInput,\n AdapterAppendOptions,\n AdapterPrependOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n Settings,\n DevSettings,\n IRoutines,\n CustomRoutinesClass,\n ScrollEventData,\n State,\n ProcessName,\n ProcessClass,\n ProcessPayload,\n ProcessSubject,\n AdapterProcessMap,\n IBaseProcess,\n IBaseAdapterProcess,\n ValidatedValue,\n IValidator,\n ICommonProp,\n ICommonProps,\n IValidatedCommonProps,\n IValidatedData,\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=routines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../../../src/interfaces/routines.ts"],"names":[],"mappings":"","sourcesContent":["import { Settings } from '../classes/settings';\nimport { Direction } from '../inputs/index';\n\ninterface IRoutinesSettings {\n /** The scroller's viewport element defined by the app settings.\n * The value is equal to settings.viewport and thus can be null.\n */\n viewport: HTMLElement | null;\n\n /** Determines wether the scroller is horizontal-oriented or not.\n * The value is equal to settings.horizontal.\n */\n horizontal: boolean;\n\n /** Determines wether the entire window is the scroller's viewport or not. \n * The value is equal to settings.window.\n */\n window: boolean;\n}\n\nexport interface IRoutines {\n\n /** Internal prop that is available after instantiation. \n * Reduced version of the App settings object.\n */\n readonly settings: IRoutinesSettings;\n\n /** Internal prop that is available after instantiation.\n * The scroller's element that comes from the end App.\n */\n readonly element: HTMLElement;\n\n /** Internal prop that is available after instantiation.\n * The scroller's viewport element.\n * The \"getViewportElement\" method is responsible for the value.\n */\n readonly viewport: HTMLElement;\n\n /** Checks HTML element. Should throw error if it's not valid.\n * @param {HTMLElement} element HTML element to check.\n */\n checkElement: (element: HTMLElement) => void;\n\n /** Gets the viewport element based on the internal props:\n * \"settings.viewport\", \"settings.window\" and \"element\".\n * This method is being called during Routines instantiation\n * to determine the \"viewport\" prop:\n * \n * this.viewport = this.getViewportElement();\n * @returns {HTMLElement} HTML element.\n */\n getViewportElement: () => HTMLElement;\n\n /** This method is being called in the end of Routines instantiation.\n * @param {Settings} settings Unreduced Scroller's settings object.\n */\n onInit: (settings: Settings) => void;\n\n /** Finds element by CSS selector.\n * @param {HTMLElement} element Top of the elements hierarchy to search.\n * @param {string} selector CSS selector.\n * @returns {HTMLElement | null} The first HTML element that matches the specified selector, or null.\n */\n findElementBySelector: (element: HTMLElement, selector: string) => HTMLElement | null;\n\n /** Finds padding element.\n * @param {'backward' | 'forward'} direction Search direction: backward or forward.\n * @returns {HTMLElement | null} HTML padding element, or null.\n */\n findPaddingElement: (direction: Direction) => HTMLElement | null;\n\n /** Finds single item element by its id.\n * @param {string} id Id of the element to search.\n * @returns {HTMLElement | null} HTML item element, or null.\n */\n findItemElement: (id: string) => HTMLElement | null;\n\n /** Gets scroll position of the viewport. Internal settings should be taken into account.\n * @returns {number} Scroll position value.\n */\n getScrollPosition: () => number;\n\n /** Sets scroll position of the viewport. Internal settings should be taken into account.\n * @param {number} value Scroll position value.\n */\n setScrollPosition: (value: number) => void;\n\n /** Gets the size of the element and its position relative to the viewport.\n * @param {HTMLElement} element\n * @returns {DOMRect} DOMRect object.\n */\n getElementParams: (element: HTMLElement) => DOMRect;\n\n /** Gets params of the host element in case the \"window\" setting is set to true.\n * @returns {DOMRect} DOMRect object.\n */\n getWindowParams: () => DOMRect;\n\n /** Gets size of the element. Internal props should be taken into account.\n * For example, if horizontal = false, then the element's height is needed.\n * If horizontal = true, then the element's width is needed.\n * @param {HTMLElement} element\n * @returns {DOMRect} DOMRect object.\n */\n getSize: (element: HTMLElement) => number;\n\n /** Gets size of the scroller element.\n * @returns {DOMRect} DOMRect object.\n */\n getScrollerSize: () => number;\n\n /** Gets size of the viewport.\n * @returns {DOMRect} DOMRect object.\n */\n getViewportSize: () => number;\n\n /** Gets size of the element. Internal settings (\"horizontal\") should be taken into account.\n * This method should work in the same way as \"setSizeStyle\" does.\n * @param {HTMLElement} element\n * @returns {number} Numeric value.\n */\n getSizeStyle: (element: HTMLElement) => number;\n\n /** Sets size of the element. Internal settings (\"horizontal\") should be taken into account.\n * This method should work in the same way as \"getSizeStyle\" does.\n * @param {HTMLElement} element\n * @param {number} value Numeric value to be new element's size.\n */\n setSizeStyle: (element: HTMLElement, value: number) => void;\n\n /** Gets the edge coordinate of the element. Internal settings (\"horizontal\") should be taken into account.\n * For example, if horizontal = false and direction = \"backward\" then the element's top coordinate is needed.\n * If horizontal = true and direction = \"forward\" then the element's right coordinate is needed.\n * @param {HTMLElement} element\n * @param {'backward' | 'forward'} direction\n * @returns {number} Numeric value.\n */\n getEdge: (element: HTMLElement, direction: Direction) => number;\n\n /** Gets the edge coordinate of the viewport. Internal settings should be taken into account.\n * @param {'backward' | 'forward'} direction\n * @returns {number} Numeric value.\n */\n getViewportEdge: (direction: Direction) => number;\n\n /** Makes the element visible in the same way as the external Workflow.run method makes it invisible.\n * @param {HTMLElement} element\n */\n makeElementVisible: (element: HTMLElement) => void;\n\n /** Hides the element. This method is being called before remove and has no connection with makeElementVisible.\n * @param {HTMLElement} element\n */\n hideElement: (element: HTMLElement) => void;\n\n /** Gets scroller's offset.\n * @returns {number} Numeric value.\n */\n getOffset: () => number;\n\n /** Scrolls into the element's view.\n * @param {HTMLElement} element\n * @param {boolean | ScrollIntoViewOptions} argument\n */\n scrollTo: (element: HTMLElement, argument?: boolean | ScrollIntoViewOptions) => void;\n\n /** Wraps rendering. Runs render process and calls the argument function when it is done.\n * @param {function} cb\n * @returns {function} Callback to dismiss render and prevent the argument function to be invoked.\n */\n render: (cb: () => void) => () => void;\n\n /** Wraps animation. Runs animations process and calls the argument function when it is done.\n * @param {function} cb\n * @returns {function} Callback to dismiss animation and prevent the argument function to be invoked.\n */\n animate: (cb: () => void) => () => void;\n\n /** Provides scroll event listening. Invokes the function argument each time the scroll event fires.\n * @param {EventListener} handler\n * @returns {function} Callback to dismiss scroll event listener.\n */\n onScroll: (handler: EventListener) => () => void;\n\n}\n\nexport type CustomRoutinesClass = { new(element: HTMLElement, settings: IRoutinesSettings): Partial<IRoutines>; };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/interfaces/workflow.ts"],"names":[],"mappings":"","sourcesContent":["import { ProcessClass, ProcessName, ProcessPayload, ProcessSubject } from './process';\nimport { IDatasource } from './datasource';\nimport { IPackage } from './adapter';\nimport { Item } from '../classes/item';\nimport { Scroller } from '../scroller';\n\nexport type OnDataChanged<Data> = (items: Item<Data>[]) => void;\n\nexport interface WorkflowParams<ItemData> {\n datasource: IDatasource<ItemData>;\n consumer: IPackage;\n element: HTMLElement;\n run: OnDataChanged<ItemData>;\n}\n\ninterface CallWorkflow {\n (process: ProcessSubject): void;\n interrupted?: boolean;\n}\n\nexport interface ScrollerWorkflow<ItemData = unknown> {\n call: CallWorkflow;\n onDataChanged: OnDataChanged<ItemData>;\n}\n\nexport interface ScrollerParams<ItemData> {\n datasource: IDatasource<ItemData>;\n consumer?: IPackage;\n element?: HTMLElement;\n workflow?: ScrollerWorkflow<ItemData>;\n scroller?: Scroller<ItemData>; // for re-instantiation\n}\n\nexport type WorkflowGetter<ItemData> = () => ScrollerWorkflow<ItemData>;\n\nexport interface WorkflowError {\n loop: string;\n time: number;\n message: string;\n process: ProcessName;\n}\n\nexport interface InterruptParams<ItemData> {\n process: ProcessName;\n finalize?: boolean;\n datasource?: IDatasource<ItemData>;\n}\n\nexport interface StateMachineMethods<ItemData> {\n run: (process: ProcessClass) => (...args: any[]) => void;\n interrupt: (params: InterruptParams<ItemData>) => void;\n done: () => void;\n onError: (process: ProcessName, payload: ProcessPayload) => void;\n}\n\nexport interface StateMachineParams<ItemData = unknown> {\n input: ProcessSubject;\n methods: StateMachineMethods<ItemData>;\n}\n"]}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/interfaces/workflow.ts"],"names":[],"mappings":"","sourcesContent":["import { ProcessClass, ProcessName, ProcessPayload, ProcessSubject } from './process';\nimport { IDatasource } from './datasource';\nimport { IPackage } from './adapter';\nimport { Item } from '../classes/item';\nimport { CustomRoutinesClass } from './routines';\nimport { Scroller } from '../scroller';\n\nexport type OnDataChanged<Data> = (items: Item<Data>[]) => void;\n\nexport interface WorkflowParams<ItemData> {\n datasource: IDatasource<ItemData>;\n consumer: IPackage;\n element: HTMLElement;\n run: OnDataChanged<ItemData>;\n Routines?: CustomRoutinesClass;\n}\n\ninterface CallWorkflow {\n (process: ProcessSubject): void;\n interrupted?: boolean;\n}\n\nexport interface ScrollerWorkflow<ItemData = unknown> {\n call: CallWorkflow;\n onDataChanged: OnDataChanged<ItemData>;\n}\n\nexport interface ScrollerParams<ItemData> {\n datasource: IDatasource<ItemData>;\n consumer?: IPackage;\n element?: HTMLElement;\n workflow?: ScrollerWorkflow<ItemData>;\n Routines?: CustomRoutinesClass;\n scroller?: Scroller<ItemData>; // for re-instantiation\n}\n\nexport type WorkflowGetter<ItemData> = () => ScrollerWorkflow<ItemData>;\n\nexport interface WorkflowError {\n loop: string;\n time: number;\n message: string;\n process: ProcessName;\n}\n\nexport interface InterruptParams<ItemData> {\n process: ProcessName;\n finalize?: boolean;\n datasource?: IDatasource<ItemData>;\n}\n\nexport interface StateMachineMethods<ItemData> {\n run: (process: ProcessClass) => (...args: any[]) => void;\n interrupt: (params: InterruptParams<ItemData>) => void;\n done: () => void;\n onError: (process: ProcessName, payload: ProcessPayload) => void;\n}\n\nexport interface StateMachineParams<ItemData = unknown> {\n input: ProcessSubject;\n methods: StateMachineMethods<ItemData>;\n}\n"]}
@@ -11,21 +11,21 @@ import core from './version';
11
11
  export const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';
12
12
  let instanceCount = 0;
13
13
  export class Scroller {
14
- constructor({ datasource, consumer, element, workflow, scroller }) {
14
+ constructor({ datasource, consumer, element, workflow, Routines: CustomRoutines, scroller }) {
15
15
  const { params: { get } } = validate(datasource, DATASOURCE);
16
16
  if (!get.isValid) {
17
17
  throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);
18
18
  }
19
19
  const packageInfo = scroller ? scroller.state.packageInfo : { consumer, core };
20
- element = scroller ? scroller.viewport.element : element;
20
+ element = scroller ? scroller.routines.element : element;
21
21
  workflow = scroller ? scroller.workflow : workflow;
22
22
  this.workflow = workflow;
23
23
  this.settings = new Settings(datasource.settings, datasource.devSettings, ++instanceCount);
24
24
  this.logger = new Logger(this, packageInfo, datasource.adapter);
25
- this.routines = new Routines(this.settings);
25
+ this.routines = new Routines(element, this.settings, CustomRoutines);
26
26
  this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);
27
27
  this.buffer = new Buffer(this.settings, workflow.onDataChanged, this.logger);
28
- this.viewport = new Viewport(element, this.settings, this.routines, this.state, this.logger);
28
+ this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);
29
29
  this.logger.object('vscroll settings object', this.settings, true);
30
30
  this.initDatasource(datasource, scroller);
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"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","sourcesContent":["import { DatasourceGeneric, makeDatasource } from './classes/datasource';\nimport { Settings } from './classes/settings';\nimport { Logger } from './classes/logger';\nimport { Routines } from './classes/domRoutines';\nimport { Viewport } from './classes/viewport';\nimport { Buffer } from './classes/buffer';\nimport { State } from './classes/state';\nimport { Adapter } from './classes/adapter';\nimport { Reactive } from './classes/reactive';\nimport { validate, DATASOURCE } from './inputs/index';\nimport core from './version';\nimport {\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\n} from './interfaces/index';\n\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\n\nlet instanceCount = 0;\n\nexport class Scroller<Data = unknown> {\n public datasource: IDatasourceConstructed<Data>;\n public workflow: ScrollerWorkflow<Data>;\n\n public settings: Settings<Data>;\n public logger: Logger;\n public routines: Routines;\n public viewport: Viewport;\n public buffer: Buffer<Data>;\n public state: State;\n public adapter: Adapter<Data>;\n\n constructor({ datasource, consumer, element, workflow, scroller }: ScrollerParams<Data>) {\n const { params: { get } } = validate(datasource, DATASOURCE);\n if (!get.isValid) {\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\n }\n\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\n element = scroller ? scroller.viewport.element : (element as HTMLElement);\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\n\n this.workflow = workflow;\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\n this.routines = new Routines(this.settings);\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\n this.viewport = new Viewport(element, this.settings, this.routines, this.state, this.logger);\n this.logger.object('vscroll settings object', this.settings, true);\n\n this.initDatasource(datasource, scroller);\n }\n\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\n if (scroller) { // scroller re-instantiating case\n this.datasource = datasource as IDatasourceConstructed<Data>;\n this.adapter = scroller.adapter;\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\n return;\n }\n // scroller is being instantiated for the first time\n const constructed = datasource instanceof DatasourceGeneric;\n const mockAdapter = !constructed && !this.settings.adapter;\n if (constructed) { // datasource is already instantiated\n this.datasource = datasource as IDatasourceConstructed<Data>;\n } else { // datasource as POJO\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\n this.datasource = new DS<Data>(datasource);\n if (this.settings.adapter) {\n datasource.adapter = this.datasource.adapter;\n }\n }\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\n }\n\n init(adapterRun$?: Reactive<ProcessSubject>): void {\n this.viewport.reset(this.buffer.startIndex);\n this.logger.stat('initialization');\n this.adapter.initialize(this.buffer, this.state, this.logger, adapterRun$);\n }\n\n dispose(forever?: boolean): void {\n if (forever) { // Adapter is not re-instantiated on reset\n this.adapter.dispose();\n }\n this.buffer.dispose();\n this.state.dispose();\n }\n\n finalize(): void {\n }\n\n}\n"]}
1
+ {"version":3,"file":"scroller.js","sourceRoot":"","sources":["../../src/scroller.ts"],"names":[],"mappings":"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","sourcesContent":["import { DatasourceGeneric, makeDatasource } from './classes/datasource';\nimport { Settings } from './classes/settings';\nimport { Logger } from './classes/logger';\nimport { Routines } from './classes/domRoutines';\nimport { Viewport } from './classes/viewport';\nimport { Buffer } from './classes/buffer';\nimport { State } from './classes/state';\nimport { Adapter } from './classes/adapter';\nimport { Reactive } from './classes/reactive';\nimport { validate, DATASOURCE } from './inputs/index';\nimport core from './version';\nimport {\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\n} from './interfaces/index';\n\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\n\nlet instanceCount = 0;\n\nexport class Scroller<Data = unknown> {\n public datasource: IDatasourceConstructed<Data>;\n public workflow: ScrollerWorkflow<Data>;\n\n public settings: Settings<Data>;\n public logger: Logger;\n public routines: Routines;\n public viewport: Viewport;\n public buffer: Buffer<Data>;\n public state: State;\n public adapter: Adapter<Data>;\n\n constructor({\n datasource, consumer, element, workflow, Routines: CustomRoutines, scroller\n }: ScrollerParams<Data>) {\n const { params: { get } } = validate(datasource, DATASOURCE);\n if (!get.isValid) {\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\n }\n\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\n element = scroller ? scroller.routines.element : (element as HTMLElement);\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\n\n this.workflow = workflow;\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\n this.routines = new Routines(element, this.settings, CustomRoutines);\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\n this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);\n this.logger.object('vscroll settings object', this.settings, true);\n\n this.initDatasource(datasource, scroller);\n }\n\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\n if (scroller) { // scroller re-instantiating case\n this.datasource = datasource as IDatasourceConstructed<Data>;\n this.adapter = scroller.adapter;\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\n return;\n }\n // scroller is being instantiated for the first time\n const constructed = datasource instanceof DatasourceGeneric;\n const mockAdapter = !constructed && !this.settings.adapter;\n if (constructed) { // datasource is already instantiated\n this.datasource = datasource as IDatasourceConstructed<Data>;\n } else { // datasource as POJO\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\n this.datasource = new DS<Data>(datasource);\n if (this.settings.adapter) {\n datasource.adapter = this.datasource.adapter;\n }\n }\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\n }\n\n init(adapterRun$?: Reactive<ProcessSubject>): void {\n this.viewport.reset(this.buffer.startIndex);\n this.logger.stat('initialization');\n this.adapter.initialize(this.buffer, this.state, this.logger, adapterRun$);\n }\n\n dispose(forever?: boolean): void {\n if (forever) { // Adapter is not re-instantiated on reset\n this.adapter.dispose();\n }\n this.buffer.dispose();\n this.state.dispose();\n }\n\n finalize(): void {\n }\n\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  name: 'vscroll',
3
- version: '1.4.3'
3
+ version: '1.5.1'
4
4
  };
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.4.3'\n};\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC","sourcesContent":["export default {\n name: 'vscroll',\n version: '1.5.1'\n};\n"]}
@@ -3,7 +3,7 @@ import { runStateMachine } from './workflow-transducer';
3
3
  import { Reactive } from './classes/reactive';
4
4
  import { CommonProcess, ProcessStatus as Status, } from './processes/index';
5
5
  export class Workflow {
6
- constructor({ element, datasource, consumer, run }) {
6
+ constructor({ element, datasource, consumer, run, Routines }) {
7
7
  this.isInitialized = false;
8
8
  this.initTimer = null;
9
9
  this.adapterRun$ = new Reactive();
@@ -18,7 +18,9 @@ export class Workflow {
18
18
  done: this.done.bind(this),
19
19
  onError: this.onError.bind(this)
20
20
  };
21
- this.scroller = new Scroller({ element, datasource, consumer, workflow: this.getUpdater() });
21
+ this.scroller = new Scroller({
22
+ element, datasource, consumer, workflow: this.getUpdater(), Routines
23
+ });
22
24
  if (this.scroller.settings.initializeDelay) {
23
25
  this.initTimer = setTimeout(() => {
24
26
  this.initTimer = null;
@@ -38,13 +40,13 @@ export class Workflow {
38
40
  status: Status.start
39
41
  });
40
42
  // set up scroll event listener
41
- const { viewport: { scrollEventReceiver }, routines } = this.scroller;
43
+ const { routines } = this.scroller;
42
44
  const onScrollHandler = event => this.callWorkflow({
43
45
  process: CommonProcess.scroll,
44
46
  status: Status.start,
45
47
  payload: { event }
46
48
  });
47
- this.offScroll = routines.onScroll(scrollEventReceiver, onScrollHandler);
49
+ this.offScroll = routines.onScroll(onScrollHandler);
48
50
  }
49
51
  changeItems(items) {
50
52
  this.propagateChanges(items);
@@ -1 +1 @@
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 { CommonProcess, ProcessStatus as Status, } from './processes/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\n isInitialized: boolean;\n initTimer: ReturnType<typeof setTimeout> | null;\n adapterRun$: Reactive<ProcessSubject>;\n cyclesDone: 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({ element, datasource, consumer, run }: WorkflowParams<ItemData>) {\n this.isInitialized = false;\n this.initTimer = null;\n this.adapterRun$ = new Reactive();\n this.cyclesDone = 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>({ element, datasource, consumer, workflow: this.getUpdater() });\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 this.isInitialized = true;\n\n // run the Workflow\n this.callWorkflow({\n process: CommonProcess.init,\n status: Status.start\n });\n\n // set up scroll event listener\n const { viewport: { scrollEventReceiver }, routines } = this.scroller;\n const onScrollHandler: EventListener =\n event => this.callWorkflow({\n process: CommonProcess.scroll,\n status: Status.start,\n payload: { event }\n });\n this.offScroll = routines.onScroll(scrollEventReceiver, onScrollHandler);\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 (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 '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\n 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: any[]): void => {\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\n 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 = (p: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\n logger.log('[skip wf call]');\n workflow.call.interrupted = true;\n this.scroller.workflow = this.getUpdater();\n this.interruptionCount++;\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\n }\n if (datasource) { // Scroller re-initialization case\n this.scroller.adapter.relax(() => {\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 }\n }\n\n done(): void {\n const { state, logger } = this.scroller;\n this.cyclesDone++;\n logger.logCycle(false);\n state.endWorkflowCycle(this.cyclesDone + 1);\n this.finalize();\n }\n\n dispose(): void {\n if (this.initTimer) {\n clearTimeout(this.initTimer);\n }\n this.offScroll();\n this.adapterRun$.dispose();\n this.scroller.dispose(true);\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n }\n\n finalize(): void {\n }\n\n}\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 { CommonProcess, ProcessStatus as Status, } from './processes/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\n isInitialized: boolean;\n initTimer: ReturnType<typeof setTimeout> | null;\n adapterRun$: Reactive<ProcessSubject>;\n cyclesDone: 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({ element, datasource, consumer, run, Routines }: WorkflowParams<ItemData>) {\n this.isInitialized = false;\n this.initTimer = null;\n this.adapterRun$ = new Reactive();\n this.cyclesDone = 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, datasource, consumer, workflow: this.getUpdater(), 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 this.isInitialized = true;\n\n // run the Workflow\n this.callWorkflow({\n process: CommonProcess.init,\n status: Status.start\n });\n\n // set up scroll event listener\n const { routines } = this.scroller;\n const onScrollHandler: EventListener =\n event => this.callWorkflow({\n process: CommonProcess.scroll,\n status: Status.start,\n payload: { event }\n });\n this.offScroll = routines.onScroll(onScrollHandler);\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 (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 '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\n 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: any[]): void => {\n if (this.scroller.settings.logProcessRun) {\n this.scroller.logger.log(() => [\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\n 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 = (p: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\n logger.log('[skip wf call]');\n workflow.call.interrupted = true;\n this.scroller.workflow = this.getUpdater();\n this.interruptionCount++;\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\n }\n if (datasource) { // Scroller re-initialization case\n this.scroller.adapter.relax(() => {\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 }\n }\n\n done(): void {\n const { state, logger } = this.scroller;\n this.cyclesDone++;\n logger.logCycle(false);\n state.endWorkflowCycle(this.cyclesDone + 1);\n this.finalize();\n }\n\n dispose(): void {\n if (this.initTimer) {\n clearTimeout(this.initTimer);\n }\n this.offScroll();\n this.adapterRun$.dispose();\n this.scroller.dispose(true);\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n }\n\n finalize(): void {\n }\n\n}\n"]}
@@ -307,7 +307,7 @@ var Adapter = /** @class */ (function () {
307
307
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
308
308
  Adapter.prototype.reset = function (options) {
309
309
  this.reloadCounter++;
310
- this.logger.logAdapterMethod('reset', options, " of " + this.reloadId);
310
+ this.logger.logAdapterMethod('reset', options, " of ".concat(this.reloadId));
311
311
  this.workflow.call({
312
312
  process: AdapterProcess.reset,
313
313
  status: ProcessStatus.start,
@@ -317,7 +317,7 @@ var Adapter = /** @class */ (function () {
317
317
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
318
318
  Adapter.prototype.reload = function (options) {
319
319
  this.reloadCounter++;
320
- this.logger.logAdapterMethod('reload', options, " of " + this.reloadId);
320
+ this.logger.logAdapterMethod('reload', options, " of ".concat(this.reloadId));
321
321
  this.workflow.call({
322
322
  process: AdapterProcess.reload,
323
323
  status: ProcessStatus.start,
@@ -424,7 +424,7 @@ var Adapter = /** @class */ (function () {
424
424
  });
425
425
  }).then(function (immediate) {
426
426
  var success = reloadId === _this.reloadId;
427
- _this.logger.log(function () { return !success ? "relax promise cancelled due to " + reloadId + " != " + _this.reloadId : void 0; });
427
+ _this.logger.log(function () { return !success ? "relax promise cancelled due to ".concat(reloadId, " != ").concat(_this.reloadId) : void 0; });
428
428
  return {
429
429
  immediate: immediate,
430
430
  success: success,
@@ -435,7 +435,7 @@ var Adapter = /** @class */ (function () {
435
435
  Adapter.prototype.relax = function (callback) {
436
436
  var _this = this;
437
437
  var reloadId = this.reloadId;
438
- this.logger.logAdapterMethod('relax', callback, " of " + reloadId);
438
+ this.logger.logAdapterMethod('relax', callback, " of ".concat(reloadId));
439
439
  if (!this.init) {
440
440
  return Promise.resolve(methodPreResult);
441
441
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/classes/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from './logger';\r\nimport { Buffer } from './buffer';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n AdapterPropName, AdapterPropType, getDefaultAdapterProps, methodPreResult, reactiveConfigStorage\r\n} from './adapter/props';\r\nimport { AdapterProcess, ProcessStatus } from '../processes/index';\r\nimport {\r\n WorkflowGetter,\r\n IAdapterProp,\r\n AdapterMethodResult,\r\n IAdapter,\r\n ItemAdapter,\r\n ItemsPredicate,\r\n AdapterPrependOptions,\r\n AdapterAppendOptions,\r\n AdapterRemoveOptions,\r\n AdapterClipOptions,\r\n AdapterInsertOptions,\r\n AdapterReplaceOptions,\r\n AdapterUpdateOptions,\r\n AdapterFixOptions,\r\n ScrollerWorkflow,\r\n IDatasourceOptional,\r\n IPackages,\r\n IBufferInfo,\r\n State,\r\n ProcessSubject,\r\n} from '../interfaces/index';\r\n\r\ntype MethodResolver = (...args: any[]) => Promise<AdapterMethodResult>;\r\n\r\nconst ADAPTER_PROPS_STUB = getDefaultAdapterProps();\r\n\r\nconst _has = (obj: unknown, prop: string): boolean =>\r\n typeof obj === 'object' && obj !== null && Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\nconst convertAppendArgs = <Item>(prepend: boolean, options: unknown, eof?: boolean) => {\r\n let result = options as AdapterAppendOptions<Item> & AdapterPrependOptions<Item>;\r\n if (!_has(options, 'items')) {\r\n const items = !Array.isArray(options) ? [options] : options;\r\n result = prepend ? { items, bof: eof } : { items, eof: eof };\r\n }\r\n return result;\r\n};\r\n\r\nconst convertRemoveArgs = <Item>(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>) => {\r\n if (!(_has(options, 'predicate') || _has(options, 'indexes'))) {\r\n const predicate = options as ItemsPredicate<Item>;\r\n options = { predicate };\r\n }\r\n return options;\r\n};\r\n\r\nexport class Adapter<Item = unknown> implements IAdapter<Item> {\r\n private externalContext: IAdapter<Item>;\r\n private logger: Logger;\r\n private getWorkflow: WorkflowGetter<Item>;\r\n private reloadCounter: number;\r\n private source: { [key: string]: Reactive<unknown> } = {}; // for Reactive props\r\n private box: { [key: string]: unknown } = {}; // for Scalars over Reactive props\r\n private demand: { [key: string]: unknown } = {}; // for Scalars on demand\r\n public wanted: { [key: string]: boolean } = {};\r\n\r\n get workflow(): ScrollerWorkflow<Item> {\r\n return this.getWorkflow();\r\n }\r\n get reloadCount(): number {\r\n return this.reloadCounter;\r\n }\r\n get reloadId(): string {\r\n return this.id + '.' + this.reloadCounter;\r\n }\r\n\r\n id: number;\r\n mock: boolean;\r\n augmented: boolean;\r\n version: string;\r\n init: boolean;\r\n init$: Reactive<boolean>;\r\n packageInfo: IPackages;\r\n itemsCount: number;\r\n bufferInfo: IBufferInfo;\r\n isLoading: boolean;\r\n isLoading$: Reactive<boolean>;\r\n loopPending: boolean;\r\n loopPending$: Reactive<boolean>;\r\n firstVisible: ItemAdapter<Item>;\r\n firstVisible$: Reactive<ItemAdapter<Item>>;\r\n lastVisible: ItemAdapter<Item>;\r\n lastVisible$: Reactive<ItemAdapter<Item>>;\r\n bof: boolean;\r\n bof$: Reactive<boolean>;\r\n eof: boolean;\r\n eof$: Reactive<boolean>;\r\n\r\n private relax$: Reactive<AdapterMethodResult> | null;\r\n private relaxRun: Promise<AdapterMethodResult> | null;\r\n\r\n private getPromisifiedMethod(method: MethodResolver, defaultMethod: MethodResolver) {\r\n return (...args: any[]): Promise<AdapterMethodResult> =>\r\n this.relax$\r\n ? new Promise(resolve => {\r\n if (this.relax$) {\r\n this.relax$.once(value => resolve(value));\r\n }\r\n method.apply(this, args);\r\n })\r\n : defaultMethod.apply(this, args);\r\n }\r\n\r\n constructor(context: IAdapter<Item> | null, getWorkflow: WorkflowGetter<Item>, logger: Logger) {\r\n this.getWorkflow = getWorkflow;\r\n this.logger = logger;\r\n this.relax$ = null;\r\n this.relaxRun = null;\r\n this.reloadCounter = 0;\r\n\r\n // public context (if exists) should provide access Reactive props configuration by id\r\n const reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};\r\n\r\n // make array of the original values from public context if present\r\n const adapterProps = context\r\n ? ADAPTER_PROPS_STUB.map(prop => {\r\n let value = context[prop.name];\r\n // if context is augmented, we need to replace external reactive props with inner ones\r\n if (context.augmented) {\r\n const reactiveProp = reactivePropsStore[prop.name];\r\n if (reactiveProp) {\r\n value = reactiveProp.default as Reactive<boolean>; // boolean doesn't matter here\r\n }\r\n }\r\n return ({ ...prop, value });\r\n })\r\n : getDefaultAdapterProps();\r\n\r\n // restore default reactive props if they were configured\r\n Object.entries(reactivePropsStore).forEach(([key, value]) => {\r\n const prop = adapterProps.find(({ name }) => name === key);\r\n if (prop && value) {\r\n prop.value = value.default;\r\n }\r\n });\r\n\r\n // Scalar permanent props\r\n adapterProps\r\n .filter(({ type, permanent }) => type === AdapterPropType.Scalar && permanent)\r\n .forEach(({ name, value }: IAdapterProp) =>\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => value\r\n })\r\n );\r\n\r\n // Reactive props\r\n // 1) store original values in \"source\" container, to avoid extra .get() calls on scalar twins set\r\n // 2) \"wanted\" container is bound with scalars; get() updates it\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Reactive)\r\n .forEach(({ name, value }: IAdapterProp) => {\r\n this.source[name] = value as Reactive<unknown>;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => {\r\n const scalarWanted = ADAPTER_PROPS_STUB.find(\r\n ({ wanted, reactive }) => wanted && reactive === name\r\n );\r\n if (scalarWanted) {\r\n this.wanted[scalarWanted.name] = true;\r\n }\r\n return this.source[name];\r\n }\r\n });\r\n });\r\n\r\n // Scalar props that have Reactive twins\r\n // 1) scalars should use \"box\" container\r\n // 2) \"wanted\" should be updated on get\r\n // 3) reactive props (from \"source\") are triggered on set\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)\r\n .forEach(({ name, value, reactive, wanted }: IAdapterProp) => {\r\n if (wanted) {\r\n this.wanted[name] = false;\r\n }\r\n this.box[name] = value;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n set: (newValue: unknown) => {\r\n if (newValue !== this.box[name]) {\r\n this.box[name] = newValue;\r\n this.source[reactive as AdapterPropName].set(newValue);\r\n // need to emit new value through the configured reactive prop if present\r\n const reactiveProp = reactivePropsStore[reactive as AdapterPropName];\r\n if (reactiveProp) {\r\n reactiveProp.emit(reactiveProp.source, newValue);\r\n }\r\n }\r\n },\r\n get: () => {\r\n if (wanted) {\r\n this.wanted[name] = true;\r\n }\r\n return this.box[name];\r\n }\r\n });\r\n });\r\n\r\n // Scalar props on-demand\r\n // these scalars should use \"demand\" container\r\n // setting defaults should be overridden on init()\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && prop.onDemand)\r\n .forEach(({ name, value }: IAdapterProp) => {\r\n this.demand[name] = value;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => this.demand[name]\r\n });\r\n });\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n // Adapter public context augmentation\r\n adapterProps\r\n .forEach(({ name, type, value: defaultValue, permanent }: IAdapterProp) => {\r\n let value = (this as IAdapter)[name];\r\n if (type === AdapterPropType.Function) {\r\n value = (value as () => void).bind(this);\r\n } else if (type === AdapterPropType.WorkflowRunner) {\r\n value = this.getPromisifiedMethod(value as MethodResolver, defaultValue as MethodResolver);\r\n } else if (type === AdapterPropType.Reactive && reactivePropsStore[name]) {\r\n value = (context as IAdapter)[name];\r\n } else if (name === AdapterPropName.augmented) {\r\n value = true;\r\n }\r\n Object.defineProperty(context, name, {\r\n configurable: true,\r\n get: () => !permanent && type === AdapterPropType.Scalar\r\n ? (this as IAdapter)[name] // non-permanent Scalars should be taken in runtime\r\n : value // Reactive props and methods (Functions/WorkflowRunners) can be defined once\r\n });\r\n });\r\n\r\n this.externalContext = context;\r\n }\r\n\r\n initialize(buffer: Buffer<Item>, state: State, logger: Logger, adapterRun$?: Reactive<ProcessSubject>): void {\r\n // buffer\r\n Object.defineProperty(this.demand, AdapterPropName.itemsCount, {\r\n get: () => buffer.getVisibleItemsCount()\r\n });\r\n Object.defineProperty(this.demand, AdapterPropName.bufferInfo, {\r\n get: (): IBufferInfo => ({\r\n firstIndex: buffer.firstIndex,\r\n lastIndex: buffer.lastIndex,\r\n minIndex: buffer.minIndex,\r\n maxIndex: buffer.maxIndex,\r\n absMinIndex: buffer.absMinIndex,\r\n absMaxIndex: buffer.absMaxIndex,\r\n defaultSize: buffer.defaultSize,\r\n })\r\n });\r\n this.bof = buffer.bof.get();\r\n buffer.bof.on(bof => this.bof = bof);\r\n this.eof = buffer.eof.get();\r\n buffer.eof.on(eof => this.eof = eof);\r\n\r\n // state\r\n Object.defineProperty(this.demand, AdapterPropName.packageInfo, {\r\n get: () => state.packageInfo\r\n });\r\n this.loopPending = state.cycle.innerLoop.busy.get();\r\n state.cycle.innerLoop.busy.on(busy => this.loopPending = busy);\r\n this.isLoading = state.cycle.busy.get();\r\n state.cycle.busy.on(busy => this.isLoading = busy);\r\n\r\n // logger\r\n this.logger = logger;\r\n\r\n // self-pending subscription; set up only on the very first init\r\n if (adapterRun$) {\r\n if (!this.relax$) {\r\n this.relax$ = new Reactive();\r\n }\r\n const relax$ = this.relax$;\r\n adapterRun$.on(({ status, payload }) => {\r\n let unSubRelax = () => { };\r\n if (status === ProcessStatus.start) {\r\n unSubRelax = this.isLoading$.on(value => {\r\n if (!value) {\r\n unSubRelax();\r\n relax$.set({ success: true, immediate: false, details: null });\r\n }\r\n });\r\n } else if (status === ProcessStatus.done || status === ProcessStatus.error) {\r\n unSubRelax();\r\n relax$.set({\r\n success: status !== ProcessStatus.error,\r\n immediate: true,\r\n details: status === ProcessStatus.error && payload ? String(payload.error) : null\r\n });\r\n }\r\n });\r\n }\r\n\r\n // init\r\n this.init = true;\r\n }\r\n\r\n dispose(): void {\r\n if (this.relax$) {\r\n this.relax$.dispose();\r\n }\r\n if (this.externalContext) {\r\n this.resetContext();\r\n }\r\n Object.getOwnPropertyNames(this).forEach(prop => {\r\n delete (this as Record<string, unknown>)[prop];\r\n });\r\n }\r\n\r\n resetContext(): void {\r\n const reactiveStore = reactiveConfigStorage.get(this.externalContext.id);\r\n ADAPTER_PROPS_STUB\r\n .forEach(({ type, permanent, name, value }) => {\r\n // assign initial values to non-reactive non-permanent props\r\n if (type !== AdapterPropType.Reactive && !permanent) {\r\n Object.defineProperty(this.externalContext, name, {\r\n configurable: true,\r\n get: () => value\r\n });\r\n }\r\n // reset reactive props\r\n if (type === AdapterPropType.Reactive && reactiveStore) {\r\n const property = reactiveStore[name];\r\n if (property) {\r\n property.default.reset();\r\n property.emit(property.source, property.default.get());\r\n }\r\n }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n reset(options?: IDatasourceOptional): any {\r\n this.reloadCounter++;\r\n this.logger.logAdapterMethod('reset', options, ` of ${this.reloadId}`);\r\n this.workflow.call({\r\n process: AdapterProcess.reset,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n reload(options?: number | string): any {\r\n this.reloadCounter++;\r\n this.logger.logAdapterMethod('reload', options, ` of ${this.reloadId}`);\r\n this.workflow.call({\r\n process: AdapterProcess.reload,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n append(_options: AdapterAppendOptions<Item> | unknown, eof?: boolean): any {\r\n const options = convertAppendArgs(false, _options, eof); // support old signature\r\n this.logger.logAdapterMethod('append', [options.items, options.eof]);\r\n this.workflow.call({\r\n process: AdapterProcess.append,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n prepend(_options: AdapterPrependOptions<Item> | unknown, bof?: boolean): any {\r\n const options = convertAppendArgs(true, _options, bof); // support old signature\r\n this.logger.logAdapterMethod('prepend', [options.items, options.bof]);\r\n this.workflow.call({\r\n process: AdapterProcess.prepend,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n check(): any {\r\n this.logger.logAdapterMethod('check');\r\n this.workflow.call({\r\n process: AdapterProcess.check,\r\n status: ProcessStatus.start\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n remove(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>): any {\r\n options = convertRemoveArgs(options); // support old signature\r\n this.logger.logAdapterMethod('remove', options);\r\n this.workflow.call({\r\n process: AdapterProcess.remove,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n clip(options?: AdapterClipOptions): any {\r\n this.logger.logAdapterMethod('clip', options);\r\n this.workflow.call({\r\n process: AdapterProcess.clip,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n insert(options: AdapterInsertOptions<Item>): any {\r\n this.logger.logAdapterMethod('insert', options);\r\n this.workflow.call({\r\n process: AdapterProcess.insert,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n replace(options: AdapterReplaceOptions<Item>): any {\r\n this.logger.logAdapterMethod('replace', options);\r\n this.workflow.call({\r\n process: AdapterProcess.replace,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n update(options: AdapterUpdateOptions<Item>): any {\r\n this.logger.logAdapterMethod('update', options);\r\n this.workflow.call({\r\n process: AdapterProcess.update,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n fix(options: AdapterFixOptions<Item>): any {\r\n this.logger.logAdapterMethod('fix', options);\r\n this.workflow.call({\r\n process: AdapterProcess.fix,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n relaxUnchained(callback: (() => void) | undefined, reloadId: string): Promise<AdapterMethodResult> {\r\n const runCallback = () => typeof callback === 'function' && reloadId === this.reloadId && callback();\r\n if (!this.isLoading) {\r\n runCallback();\r\n }\r\n return new Promise<boolean>(resolve => {\r\n if (!this.isLoading) {\r\n resolve(true);\r\n return;\r\n }\r\n this.isLoading$.once(() => {\r\n runCallback();\r\n resolve(false);\r\n });\r\n }).then(immediate => {\r\n const success = reloadId === this.reloadId;\r\n this.logger.log(() => !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0);\r\n return {\r\n immediate,\r\n success,\r\n details: !success ? 'Interrupted by reload or reset' : null\r\n };\r\n });\r\n }\r\n\r\n relax(callback?: () => void): Promise<AdapterMethodResult> {\r\n const reloadId = this.reloadId;\r\n this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);\r\n if (!this.init) {\r\n return Promise.resolve(methodPreResult);\r\n }\r\n return this.relaxRun = this.relaxRun\r\n ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))\r\n : this.relaxUnchained(callback, reloadId).then((result) => {\r\n this.relaxRun = null;\r\n return result;\r\n });\r\n }\r\n\r\n showLog(): void {\r\n this.logger.logAdapterMethod('showLog');\r\n this.logger.logForce();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/classes/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from './logger';\r\nimport { Buffer } from './buffer';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n AdapterPropName, AdapterPropType, getDefaultAdapterProps, methodPreResult, reactiveConfigStorage\r\n} from './adapter/props';\r\nimport { AdapterProcess, ProcessStatus } from '../processes/index';\r\nimport {\r\n WorkflowGetter,\r\n IAdapterProp,\r\n AdapterMethodResult,\r\n IAdapter,\r\n ItemAdapter,\r\n ItemsPredicate,\r\n AdapterPrependOptions,\r\n AdapterAppendOptions,\r\n AdapterRemoveOptions,\r\n AdapterClipOptions,\r\n AdapterInsertOptions,\r\n AdapterReplaceOptions,\r\n AdapterUpdateOptions,\r\n AdapterFixOptions,\r\n ScrollerWorkflow,\r\n IDatasourceOptional,\r\n IPackages,\r\n IBufferInfo,\r\n State,\r\n ProcessSubject,\r\n} from '../interfaces/index';\r\n\r\ntype MethodResolver = (...args: any[]) => Promise<AdapterMethodResult>;\r\n\r\nconst ADAPTER_PROPS_STUB = getDefaultAdapterProps();\r\n\r\nconst _has = (obj: unknown, prop: string): boolean =>\r\n typeof obj === 'object' && obj !== null && Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\nconst convertAppendArgs = <Item>(prepend: boolean, options: unknown, eof?: boolean) => {\r\n let result = options as AdapterAppendOptions<Item> & AdapterPrependOptions<Item>;\r\n if (!_has(options, 'items')) {\r\n const items = !Array.isArray(options) ? [options] : options;\r\n result = prepend ? { items, bof: eof } : { items, eof: eof };\r\n }\r\n return result;\r\n};\r\n\r\nconst convertRemoveArgs = <Item>(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>) => {\r\n if (!(_has(options, 'predicate') || _has(options, 'indexes'))) {\r\n const predicate = options as ItemsPredicate<Item>;\r\n options = { predicate };\r\n }\r\n return options;\r\n};\r\n\r\nexport class Adapter<Item = unknown> implements IAdapter<Item> {\r\n private externalContext: IAdapter<Item>;\r\n private logger: Logger;\r\n private getWorkflow: WorkflowGetter<Item>;\r\n private reloadCounter: number;\r\n private source: { [key: string]: Reactive<unknown> } = {}; // for Reactive props\r\n private box: { [key: string]: unknown } = {}; // for Scalars over Reactive props\r\n private demand: { [key: string]: unknown } = {}; // for Scalars on demand\r\n public wanted: { [key: string]: boolean } = {};\r\n\r\n get workflow(): ScrollerWorkflow<Item> {\r\n return this.getWorkflow();\r\n }\r\n get reloadCount(): number {\r\n return this.reloadCounter;\r\n }\r\n get reloadId(): string {\r\n return this.id + '.' + this.reloadCounter;\r\n }\r\n\r\n id: number;\r\n mock: boolean;\r\n augmented: boolean;\r\n version: string;\r\n init: boolean;\r\n init$: Reactive<boolean>;\r\n packageInfo: IPackages;\r\n itemsCount: number;\r\n bufferInfo: IBufferInfo;\r\n isLoading: boolean;\r\n isLoading$: Reactive<boolean>;\r\n loopPending: boolean;\r\n loopPending$: Reactive<boolean>;\r\n firstVisible: ItemAdapter<Item>;\r\n firstVisible$: Reactive<ItemAdapter<Item>>;\r\n lastVisible: ItemAdapter<Item>;\r\n lastVisible$: Reactive<ItemAdapter<Item>>;\r\n bof: boolean;\r\n bof$: Reactive<boolean>;\r\n eof: boolean;\r\n eof$: Reactive<boolean>;\r\n\r\n private relax$: Reactive<AdapterMethodResult> | null;\r\n private relaxRun: Promise<AdapterMethodResult> | null;\r\n\r\n private getPromisifiedMethod(method: MethodResolver, defaultMethod: MethodResolver) {\r\n return (...args: any[]): Promise<AdapterMethodResult> =>\r\n this.relax$\r\n ? new Promise(resolve => {\r\n if (this.relax$) {\r\n this.relax$.once(value => resolve(value));\r\n }\r\n method.apply(this, args);\r\n })\r\n : defaultMethod.apply(this, args);\r\n }\r\n\r\n constructor(context: IAdapter<Item> | null, getWorkflow: WorkflowGetter<Item>, logger: Logger) {\r\n this.getWorkflow = getWorkflow;\r\n this.logger = logger;\r\n this.relax$ = null;\r\n this.relaxRun = null;\r\n this.reloadCounter = 0;\r\n\r\n // public context (if exists) should provide access Reactive props configuration by id\r\n const reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};\r\n\r\n // make array of the original values from public context if present\r\n const adapterProps = context\r\n ? ADAPTER_PROPS_STUB.map(prop => {\r\n let value = context[prop.name];\r\n // if context is augmented, we need to replace external reactive props with inner ones\r\n if (context.augmented) {\r\n const reactiveProp = reactivePropsStore[prop.name];\r\n if (reactiveProp) {\r\n value = reactiveProp.default as Reactive<boolean>; // boolean doesn't matter here\r\n }\r\n }\r\n return ({ ...prop, value });\r\n })\r\n : getDefaultAdapterProps();\r\n\r\n // restore default reactive props if they were configured\r\n Object.entries(reactivePropsStore).forEach(([key, value]) => {\r\n const prop = adapterProps.find(({ name }) => name === key);\r\n if (prop && value) {\r\n prop.value = value.default;\r\n }\r\n });\r\n\r\n // Scalar permanent props\r\n adapterProps\r\n .filter(({ type, permanent }) => type === AdapterPropType.Scalar && permanent)\r\n .forEach(({ name, value }: IAdapterProp) =>\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => value\r\n })\r\n );\r\n\r\n // Reactive props\r\n // 1) store original values in \"source\" container, to avoid extra .get() calls on scalar twins set\r\n // 2) \"wanted\" container is bound with scalars; get() updates it\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Reactive)\r\n .forEach(({ name, value }: IAdapterProp) => {\r\n this.source[name] = value as Reactive<unknown>;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => {\r\n const scalarWanted = ADAPTER_PROPS_STUB.find(\r\n ({ wanted, reactive }) => wanted && reactive === name\r\n );\r\n if (scalarWanted) {\r\n this.wanted[scalarWanted.name] = true;\r\n }\r\n return this.source[name];\r\n }\r\n });\r\n });\r\n\r\n // Scalar props that have Reactive twins\r\n // 1) scalars should use \"box\" container\r\n // 2) \"wanted\" should be updated on get\r\n // 3) reactive props (from \"source\") are triggered on set\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)\r\n .forEach(({ name, value, reactive, wanted }: IAdapterProp) => {\r\n if (wanted) {\r\n this.wanted[name] = false;\r\n }\r\n this.box[name] = value;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n set: (newValue: unknown) => {\r\n if (newValue !== this.box[name]) {\r\n this.box[name] = newValue;\r\n this.source[reactive as AdapterPropName].set(newValue);\r\n // need to emit new value through the configured reactive prop if present\r\n const reactiveProp = reactivePropsStore[reactive as AdapterPropName];\r\n if (reactiveProp) {\r\n reactiveProp.emit(reactiveProp.source, newValue);\r\n }\r\n }\r\n },\r\n get: () => {\r\n if (wanted) {\r\n this.wanted[name] = true;\r\n }\r\n return this.box[name];\r\n }\r\n });\r\n });\r\n\r\n // Scalar props on-demand\r\n // these scalars should use \"demand\" container\r\n // setting defaults should be overridden on init()\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && prop.onDemand)\r\n .forEach(({ name, value }: IAdapterProp) => {\r\n this.demand[name] = value;\r\n Object.defineProperty(this, name, {\r\n configurable: true,\r\n get: () => this.demand[name]\r\n });\r\n });\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n // Adapter public context augmentation\r\n adapterProps\r\n .forEach(({ name, type, value: defaultValue, permanent }: IAdapterProp) => {\r\n let value = (this as IAdapter)[name];\r\n if (type === AdapterPropType.Function) {\r\n value = (value as () => void).bind(this);\r\n } else if (type === AdapterPropType.WorkflowRunner) {\r\n value = this.getPromisifiedMethod(value as MethodResolver, defaultValue as MethodResolver);\r\n } else if (type === AdapterPropType.Reactive && reactivePropsStore[name]) {\r\n value = (context as IAdapter)[name];\r\n } else if (name === AdapterPropName.augmented) {\r\n value = true;\r\n }\r\n Object.defineProperty(context, name, {\r\n configurable: true,\r\n get: () => !permanent && type === AdapterPropType.Scalar\r\n ? (this as IAdapter)[name] // non-permanent Scalars should be taken in runtime\r\n : value // Reactive props and methods (Functions/WorkflowRunners) can be defined once\r\n });\r\n });\r\n\r\n this.externalContext = context;\r\n }\r\n\r\n initialize(buffer: Buffer<Item>, state: State, logger: Logger, adapterRun$?: Reactive<ProcessSubject>): void {\r\n // buffer\r\n Object.defineProperty(this.demand, AdapterPropName.itemsCount, {\r\n get: () => buffer.getVisibleItemsCount()\r\n });\r\n Object.defineProperty(this.demand, AdapterPropName.bufferInfo, {\r\n get: (): IBufferInfo => ({\r\n firstIndex: buffer.firstIndex,\r\n lastIndex: buffer.lastIndex,\r\n minIndex: buffer.minIndex,\r\n maxIndex: buffer.maxIndex,\r\n absMinIndex: buffer.absMinIndex,\r\n absMaxIndex: buffer.absMaxIndex,\r\n defaultSize: buffer.defaultSize,\r\n })\r\n });\r\n this.bof = buffer.bof.get();\r\n buffer.bof.on(bof => this.bof = bof);\r\n this.eof = buffer.eof.get();\r\n buffer.eof.on(eof => this.eof = eof);\r\n\r\n // state\r\n Object.defineProperty(this.demand, AdapterPropName.packageInfo, {\r\n get: () => state.packageInfo\r\n });\r\n this.loopPending = state.cycle.innerLoop.busy.get();\r\n state.cycle.innerLoop.busy.on(busy => this.loopPending = busy);\r\n this.isLoading = state.cycle.busy.get();\r\n state.cycle.busy.on(busy => this.isLoading = busy);\r\n\r\n // logger\r\n this.logger = logger;\r\n\r\n // self-pending subscription; set up only on the very first init\r\n if (adapterRun$) {\r\n if (!this.relax$) {\r\n this.relax$ = new Reactive();\r\n }\r\n const relax$ = this.relax$;\r\n adapterRun$.on(({ status, payload }) => {\r\n let unSubRelax = () => { };\r\n if (status === ProcessStatus.start) {\r\n unSubRelax = this.isLoading$.on(value => {\r\n if (!value) {\r\n unSubRelax();\r\n relax$.set({ success: true, immediate: false, details: null });\r\n }\r\n });\r\n } else if (status === ProcessStatus.done || status === ProcessStatus.error) {\r\n unSubRelax();\r\n relax$.set({\r\n success: status !== ProcessStatus.error,\r\n immediate: true,\r\n details: status === ProcessStatus.error && payload ? String(payload.error) : null\r\n });\r\n }\r\n });\r\n }\r\n\r\n // init\r\n this.init = true;\r\n }\r\n\r\n dispose(): void {\r\n if (this.relax$) {\r\n this.relax$.dispose();\r\n }\r\n if (this.externalContext) {\r\n this.resetContext();\r\n }\r\n Object.getOwnPropertyNames(this).forEach(prop => {\r\n delete (this as Record<string, unknown>)[prop];\r\n });\r\n }\r\n\r\n resetContext(): void {\r\n const reactiveStore = reactiveConfigStorage.get(this.externalContext.id);\r\n ADAPTER_PROPS_STUB\r\n .forEach(({ type, permanent, name, value }) => {\r\n // assign initial values to non-reactive non-permanent props\r\n if (type !== AdapterPropType.Reactive && !permanent) {\r\n Object.defineProperty(this.externalContext, name, {\r\n configurable: true,\r\n get: () => value\r\n });\r\n }\r\n // reset reactive props\r\n if (type === AdapterPropType.Reactive && reactiveStore) {\r\n const property = reactiveStore[name];\r\n if (property) {\r\n property.default.reset();\r\n property.emit(property.source, property.default.get());\r\n }\r\n }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n reset(options?: IDatasourceOptional): any {\r\n this.reloadCounter++;\r\n this.logger.logAdapterMethod('reset', options, ` of ${this.reloadId}`);\r\n this.workflow.call({\r\n process: AdapterProcess.reset,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n reload(options?: number | string): any {\r\n this.reloadCounter++;\r\n this.logger.logAdapterMethod('reload', options, ` of ${this.reloadId}`);\r\n this.workflow.call({\r\n process: AdapterProcess.reload,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n append(_options: AdapterAppendOptions<Item> | unknown, eof?: boolean): any {\r\n const options = convertAppendArgs(false, _options, eof); // support old signature\r\n this.logger.logAdapterMethod('append', [options.items, options.eof]);\r\n this.workflow.call({\r\n process: AdapterProcess.append,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n prepend(_options: AdapterPrependOptions<Item> | unknown, bof?: boolean): any {\r\n const options = convertAppendArgs(true, _options, bof); // support old signature\r\n this.logger.logAdapterMethod('prepend', [options.items, options.bof]);\r\n this.workflow.call({\r\n process: AdapterProcess.prepend,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n check(): any {\r\n this.logger.logAdapterMethod('check');\r\n this.workflow.call({\r\n process: AdapterProcess.check,\r\n status: ProcessStatus.start\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n remove(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>): any {\r\n options = convertRemoveArgs(options); // support old signature\r\n this.logger.logAdapterMethod('remove', options);\r\n this.workflow.call({\r\n process: AdapterProcess.remove,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n clip(options?: AdapterClipOptions): any {\r\n this.logger.logAdapterMethod('clip', options);\r\n this.workflow.call({\r\n process: AdapterProcess.clip,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n insert(options: AdapterInsertOptions<Item>): any {\r\n this.logger.logAdapterMethod('insert', options);\r\n this.workflow.call({\r\n process: AdapterProcess.insert,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n replace(options: AdapterReplaceOptions<Item>): any {\r\n this.logger.logAdapterMethod('replace', options);\r\n this.workflow.call({\r\n process: AdapterProcess.replace,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n update(options: AdapterUpdateOptions<Item>): any {\r\n this.logger.logAdapterMethod('update', options);\r\n this.workflow.call({\r\n process: AdapterProcess.update,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n fix(options: AdapterFixOptions<Item>): any {\r\n this.logger.logAdapterMethod('fix', options);\r\n this.workflow.call({\r\n process: AdapterProcess.fix,\r\n status: ProcessStatus.start,\r\n payload: { options }\r\n });\r\n }\r\n\r\n relaxUnchained(callback: (() => void) | undefined, reloadId: string): Promise<AdapterMethodResult> {\r\n const runCallback = () => typeof callback === 'function' && reloadId === this.reloadId && callback();\r\n if (!this.isLoading) {\r\n runCallback();\r\n }\r\n return new Promise<boolean>(resolve => {\r\n if (!this.isLoading) {\r\n resolve(true);\r\n return;\r\n }\r\n this.isLoading$.once(() => {\r\n runCallback();\r\n resolve(false);\r\n });\r\n }).then(immediate => {\r\n const success = reloadId === this.reloadId;\r\n this.logger.log(() => !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0);\r\n return {\r\n immediate,\r\n success,\r\n details: !success ? 'Interrupted by reload or reset' : null\r\n };\r\n });\r\n }\r\n\r\n relax(callback?: () => void): Promise<AdapterMethodResult> {\r\n const reloadId = this.reloadId;\r\n this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);\r\n if (!this.init) {\r\n return Promise.resolve(methodPreResult);\r\n }\r\n return this.relaxRun = this.relaxRun\r\n ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))\r\n : this.relaxUnchained(callback, reloadId).then((result) => {\r\n this.relaxRun = null;\r\n return result;\r\n });\r\n }\r\n\r\n showLog(): void {\r\n this.logger.logAdapterMethod('showLog');\r\n this.logger.logForce();\r\n }\r\n}\r\n"]}
@@ -53,7 +53,7 @@ var Cache = /** @class */ (function () {
53
53
  Cache.prototype.recalculateDefaultSize = function () {
54
54
  var _this = this;
55
55
  if (this.defaultSize.recalculate(this.size)) {
56
- this.logger.log(function () { return "default size has been updated: " + _this.defaultSize.get(); });
56
+ this.logger.log(function () { return "default size has been updated: ".concat(_this.defaultSize.get()); });
57
57
  return true;
58
58
  }
59
59
  return false;