vscroll 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/bundles/vscroll.esm5.js +5704 -5694
- package/dist/bundles/vscroll.esm5.js.map +1 -1
- package/dist/bundles/vscroll.esm5.min.js +2 -2
- package/dist/bundles/vscroll.esm5.min.js.map +1 -1
- package/dist/bundles/vscroll.esm6.js +5193 -5183
- package/dist/bundles/vscroll.esm6.js.map +1 -1
- package/dist/bundles/vscroll.esm6.min.js +2 -2
- package/dist/bundles/vscroll.esm6.min.js.map +1 -1
- package/dist/bundles/vscroll.umd.js +5712 -5703
- package/dist/bundles/vscroll.umd.js.map +1 -1
- package/dist/bundles/vscroll.umd.min.js +2 -2
- package/dist/bundles/vscroll.umd.min.js.map +1 -1
- package/dist/esm2015/classes/adapter/context.js +43 -43
- package/dist/esm2015/classes/adapter/context.js.map +1 -1
- package/dist/esm2015/classes/adapter/props.js +300 -300
- package/dist/esm2015/classes/adapter/wanted.js +28 -28
- package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
- package/dist/esm2015/classes/adapter.js +487 -487
- package/dist/esm2015/classes/adapter.js.map +1 -1
- package/dist/esm2015/classes/buffer/cache.js +246 -246
- package/dist/esm2015/classes/buffer/cache.js.map +1 -1
- package/dist/esm2015/classes/buffer/checkCall.js +48 -48
- package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm2015/classes/buffer/defaultSize.js +127 -127
- package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm2015/classes/buffer.js +342 -342
- package/dist/esm2015/classes/buffer.js.map +1 -1
- package/dist/esm2015/classes/datasource.js +23 -24
- package/dist/esm2015/classes/datasource.js.map +1 -1
- package/dist/esm2015/classes/domRoutines.js +160 -160
- package/dist/esm2015/classes/domRoutines.js.map +1 -1
- package/dist/esm2015/classes/item.js +61 -61
- package/dist/esm2015/classes/item.js.map +1 -1
- package/dist/esm2015/classes/logger.js +186 -186
- package/dist/esm2015/classes/logger.js.map +1 -1
- package/dist/esm2015/classes/paddings.js +72 -72
- package/dist/esm2015/classes/paddings.js.map +1 -1
- package/dist/esm2015/classes/reactive.js +54 -54
- package/dist/esm2015/classes/reactive.js.map +1 -1
- package/dist/esm2015/classes/settings.js +39 -39
- package/dist/esm2015/classes/settings.js.map +1 -1
- package/dist/esm2015/classes/state/clip.js +16 -16
- package/dist/esm2015/classes/state/clip.js.map +1 -1
- package/dist/esm2015/classes/state/cycle.js +60 -60
- package/dist/esm2015/classes/state/cycle.js.map +1 -1
- package/dist/esm2015/classes/state/fetch.js +122 -122
- package/dist/esm2015/classes/state/fetch.js.map +1 -1
- package/dist/esm2015/classes/state/render.js +14 -14
- package/dist/esm2015/classes/state/scroll.js +30 -30
- package/dist/esm2015/classes/state/scroll.js.map +1 -1
- package/dist/esm2015/classes/state.js +62 -62
- package/dist/esm2015/classes/state.js.map +1 -1
- package/dist/esm2015/classes/viewport.js +72 -72
- package/dist/esm2015/classes/viewport.js.map +1 -1
- package/dist/esm2015/index.js +9 -9
- package/dist/esm2015/inputs/adapter.js +242 -232
- package/dist/esm2015/inputs/adapter.js.map +1 -1
- package/dist/esm2015/inputs/common.js +11 -11
- package/dist/esm2015/inputs/datasource.js +20 -20
- package/dist/esm2015/inputs/index.js +7 -7
- package/dist/esm2015/inputs/settings.js +146 -146
- package/dist/esm2015/inputs/validation.js +371 -374
- package/dist/esm2015/inputs/validation.js.map +1 -1
- package/dist/esm2015/inputs/workflow.js +30 -30
- package/dist/esm2015/interfaces/adapter.js +1 -1
- package/dist/esm2015/interfaces/adapter.js.map +1 -1
- package/dist/esm2015/interfaces/datasource.js +1 -1
- package/dist/esm2015/interfaces/index.js +1 -1
- package/dist/esm2015/interfaces/item.js +1 -1
- package/dist/esm2015/interfaces/process.js +1 -1
- package/dist/esm2015/interfaces/process.js.map +1 -1
- package/dist/esm2015/interfaces/routines.js +1 -1
- package/dist/esm2015/interfaces/settings.js +1 -1
- package/dist/esm2015/interfaces/state.js +1 -1
- package/dist/esm2015/interfaces/validation.js +1 -1
- package/dist/esm2015/interfaces/workflow.js +1 -1
- package/dist/esm2015/processes/adapter/append.js +36 -35
- package/dist/esm2015/processes/adapter/append.js.map +1 -1
- package/dist/esm2015/processes/adapter/check.js +32 -32
- package/dist/esm2015/processes/adapter/check.js.map +1 -1
- package/dist/esm2015/processes/adapter/clip.js +12 -12
- package/dist/esm2015/processes/adapter/fix.js +77 -77
- package/dist/esm2015/processes/adapter/fix.js.map +1 -1
- package/dist/esm2015/processes/adapter/insert.js +73 -73
- package/dist/esm2015/processes/adapter/insert.js.map +1 -1
- package/dist/esm2015/processes/adapter/pause.js +22 -22
- package/dist/esm2015/processes/adapter/pause.js.map +1 -1
- package/dist/esm2015/processes/adapter/reload.js +19 -19
- package/dist/esm2015/processes/adapter/reload.js.map +1 -1
- package/dist/esm2015/processes/adapter/remove.js +102 -102
- package/dist/esm2015/processes/adapter/remove.js.map +1 -1
- package/dist/esm2015/processes/adapter/replace.js +39 -39
- package/dist/esm2015/processes/adapter/replace.js.map +1 -1
- package/dist/esm2015/processes/adapter/reset.js +35 -35
- package/dist/esm2015/processes/adapter/reset.js.map +1 -1
- package/dist/esm2015/processes/adapter/update.js +43 -43
- package/dist/esm2015/processes/adapter/update.js.map +1 -1
- package/dist/esm2015/processes/adjust.js +141 -141
- package/dist/esm2015/processes/adjust.js.map +1 -1
- package/dist/esm2015/processes/clip.js +49 -49
- package/dist/esm2015/processes/clip.js.map +1 -1
- package/dist/esm2015/processes/end.js +52 -52
- package/dist/esm2015/processes/end.js.map +1 -1
- package/dist/esm2015/processes/fetch.js +91 -91
- package/dist/esm2015/processes/fetch.js.map +1 -1
- package/dist/esm2015/processes/index.js +24 -24
- package/dist/esm2015/processes/init.js +14 -14
- package/dist/esm2015/processes/misc/base.js +30 -30
- package/dist/esm2015/processes/misc/base.js.map +1 -1
- package/dist/esm2015/processes/misc/enums.js +36 -36
- package/dist/esm2015/processes/misc/index.js +2 -2
- package/dist/esm2015/processes/postFetch.js +65 -65
- package/dist/esm2015/processes/postFetch.js.map +1 -1
- package/dist/esm2015/processes/preClip.js +85 -85
- package/dist/esm2015/processes/preClip.js.map +1 -1
- package/dist/esm2015/processes/preFetch.js +240 -240
- package/dist/esm2015/processes/preFetch.js.map +1 -1
- package/dist/esm2015/processes/render.js +54 -54
- package/dist/esm2015/processes/render.js.map +1 -1
- package/dist/esm2015/processes/scroll.js +97 -97
- package/dist/esm2015/processes/scroll.js.map +1 -1
- package/dist/esm2015/processes/start.js +11 -11
- package/dist/esm2015/scroller.js +86 -86
- package/dist/esm2015/scroller.js.map +1 -1
- package/dist/esm2015/version.js +4 -4
- package/dist/esm2015/version.js.map +1 -1
- package/dist/esm2015/workflow-transducer.js +218 -218
- package/dist/esm2015/workflow-transducer.js.map +1 -1
- package/dist/esm2015/workflow.js +174 -174
- package/dist/esm2015/workflow.js.map +1 -1
- package/dist/esm5/classes/adapter/context.js +50 -50
- package/dist/esm5/classes/adapter/context.js.map +1 -1
- package/dist/esm5/classes/adapter/props.js +300 -300
- package/dist/esm5/classes/adapter/wanted.js +29 -29
- package/dist/esm5/classes/adapter/wanted.js.map +1 -1
- package/dist/esm5/classes/adapter.js +535 -535
- package/dist/esm5/classes/adapter.js.map +1 -1
- package/dist/esm5/classes/buffer/cache.js +260 -260
- package/dist/esm5/classes/buffer/cache.js.map +1 -1
- package/dist/esm5/classes/buffer/checkCall.js +56 -56
- package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm5/classes/buffer/defaultSize.js +145 -145
- package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm5/classes/buffer.js +409 -409
- package/dist/esm5/classes/buffer.js.map +1 -1
- package/dist/esm5/classes/datasource.js +30 -31
- package/dist/esm5/classes/datasource.js.map +1 -1
- package/dist/esm5/classes/domRoutines.js +165 -165
- package/dist/esm5/classes/domRoutines.js.map +1 -1
- package/dist/esm5/classes/item.js +76 -76
- package/dist/esm5/classes/item.js.map +1 -1
- package/dist/esm5/classes/logger.js +210 -210
- package/dist/esm5/classes/logger.js.map +1 -1
- package/dist/esm5/classes/paddings.js +80 -80
- package/dist/esm5/classes/paddings.js.map +1 -1
- package/dist/esm5/classes/reactive.js +69 -69
- package/dist/esm5/classes/reactive.js.map +1 -1
- package/dist/esm5/classes/settings.js +47 -47
- package/dist/esm5/classes/settings.js.map +1 -1
- package/dist/esm5/classes/state/clip.js +22 -22
- package/dist/esm5/classes/state/clip.js.map +1 -1
- package/dist/esm5/classes/state/cycle.js +75 -75
- package/dist/esm5/classes/state/cycle.js.map +1 -1
- package/dist/esm5/classes/state/fetch.js +148 -148
- package/dist/esm5/classes/state/fetch.js.map +1 -1
- package/dist/esm5/classes/state/render.js +20 -20
- package/dist/esm5/classes/state/scroll.js +32 -32
- package/dist/esm5/classes/state/scroll.js.map +1 -1
- package/dist/esm5/classes/state.js +69 -69
- package/dist/esm5/classes/state.js.map +1 -1
- package/dist/esm5/classes/viewport.js +79 -79
- package/dist/esm5/classes/viewport.js.map +1 -1
- package/dist/esm5/index.js +9 -9
- package/dist/esm5/inputs/adapter.js +243 -233
- package/dist/esm5/inputs/adapter.js.map +1 -1
- package/dist/esm5/inputs/common.js +11 -11
- package/dist/esm5/inputs/datasource.js +21 -21
- package/dist/esm5/inputs/index.js +7 -7
- package/dist/esm5/inputs/settings.js +147 -147
- package/dist/esm5/inputs/validation.js +393 -396
- package/dist/esm5/inputs/validation.js.map +1 -1
- package/dist/esm5/inputs/workflow.js +31 -31
- package/dist/esm5/interfaces/adapter.js +1 -1
- package/dist/esm5/interfaces/adapter.js.map +1 -1
- package/dist/esm5/interfaces/datasource.js +1 -1
- package/dist/esm5/interfaces/index.js +1 -1
- package/dist/esm5/interfaces/item.js +1 -1
- package/dist/esm5/interfaces/process.js +1 -1
- package/dist/esm5/interfaces/process.js.map +1 -1
- package/dist/esm5/interfaces/routines.js +1 -1
- package/dist/esm5/interfaces/settings.js +1 -1
- package/dist/esm5/interfaces/state.js +1 -1
- package/dist/esm5/interfaces/validation.js +1 -1
- package/dist/esm5/interfaces/workflow.js +1 -1
- package/dist/esm5/processes/adapter/append.js +44 -43
- package/dist/esm5/processes/adapter/append.js.map +1 -1
- package/dist/esm5/processes/adapter/check.js +39 -39
- package/dist/esm5/processes/adapter/check.js.map +1 -1
- package/dist/esm5/processes/adapter/clip.js +19 -19
- package/dist/esm5/processes/adapter/fix.js +89 -89
- package/dist/esm5/processes/adapter/fix.js.map +1 -1
- package/dist/esm5/processes/adapter/insert.js +81 -81
- package/dist/esm5/processes/adapter/insert.js.map +1 -1
- package/dist/esm5/processes/adapter/pause.js +29 -29
- package/dist/esm5/processes/adapter/pause.js.map +1 -1
- package/dist/esm5/processes/adapter/reload.js +26 -26
- package/dist/esm5/processes/adapter/reload.js.map +1 -1
- package/dist/esm5/processes/adapter/remove.js +115 -115
- package/dist/esm5/processes/adapter/remove.js.map +1 -1
- package/dist/esm5/processes/adapter/replace.js +47 -47
- package/dist/esm5/processes/adapter/replace.js.map +1 -1
- package/dist/esm5/processes/adapter/reset.js +42 -42
- package/dist/esm5/processes/adapter/reset.js.map +1 -1
- package/dist/esm5/processes/adapter/update.js +59 -59
- package/dist/esm5/processes/adapter/update.js.map +1 -1
- package/dist/esm5/processes/adjust.js +152 -152
- package/dist/esm5/processes/adjust.js.map +1 -1
- package/dist/esm5/processes/clip.js +60 -60
- package/dist/esm5/processes/clip.js.map +1 -1
- package/dist/esm5/processes/end.js +63 -63
- package/dist/esm5/processes/end.js.map +1 -1
- package/dist/esm5/processes/fetch.js +102 -102
- package/dist/esm5/processes/fetch.js.map +1 -1
- package/dist/esm5/processes/index.js +24 -24
- package/dist/esm5/processes/init.js +21 -21
- package/dist/esm5/processes/misc/base.js +44 -44
- package/dist/esm5/processes/misc/base.js.map +1 -1
- package/dist/esm5/processes/misc/enums.js +36 -36
- package/dist/esm5/processes/misc/index.js +2 -2
- package/dist/esm5/processes/postFetch.js +74 -74
- package/dist/esm5/processes/postFetch.js.map +1 -1
- package/dist/esm5/processes/preClip.js +94 -94
- package/dist/esm5/processes/preClip.js.map +1 -1
- package/dist/esm5/processes/preFetch.js +247 -247
- package/dist/esm5/processes/preFetch.js.map +1 -1
- package/dist/esm5/processes/render.js +63 -63
- package/dist/esm5/processes/render.js.map +1 -1
- package/dist/esm5/processes/scroll.js +107 -107
- package/dist/esm5/processes/scroll.js.map +1 -1
- package/dist/esm5/processes/start.js +18 -18
- package/dist/esm5/scroller.js +100 -100
- package/dist/esm5/scroller.js.map +1 -1
- package/dist/esm5/version.js +4 -4
- package/dist/esm5/version.js.map +1 -1
- package/dist/esm5/workflow-transducer.js +220 -220
- package/dist/esm5/workflow-transducer.js.map +1 -1
- package/dist/esm5/workflow.js +198 -198
- package/dist/esm5/workflow.js.map +1 -1
- package/dist/typings/classes/adapter/context.d.ts +4 -4
- package/dist/typings/classes/adapter/props.d.ts +52 -52
- package/dist/typings/classes/adapter/wanted.d.ts +14 -14
- package/dist/typings/classes/adapter.d.ts +79 -79
- package/dist/typings/classes/buffer/cache.d.ts +95 -95
- package/dist/typings/classes/buffer/checkCall.d.ts +12 -12
- package/dist/typings/classes/buffer/defaultSize.d.ts +32 -32
- package/dist/typings/classes/buffer.d.ts +64 -64
- package/dist/typings/classes/datasource.d.ts +11 -11
- package/dist/typings/classes/domRoutines.d.ts +36 -36
- package/dist/typings/classes/item.d.ts +28 -28
- package/dist/typings/classes/logger.d.ts +28 -28
- package/dist/typings/classes/paddings.d.ts +22 -22
- package/dist/typings/classes/reactive.d.ts +21 -21
- package/dist/typings/classes/settings.d.ts +119 -119
- package/dist/typings/classes/state/clip.d.ts +9 -9
- package/dist/typings/classes/state/cycle.d.ts +29 -29
- package/dist/typings/classes/state/fetch.d.ts +62 -62
- package/dist/typings/classes/state/render.d.ts +9 -9
- package/dist/typings/classes/state/scroll.d.ts +16 -16
- package/dist/typings/classes/state.d.ts +29 -29
- package/dist/typings/classes/viewport.d.ts +32 -32
- package/dist/typings/index.d.ts +10 -10
- package/dist/typings/inputs/adapter.d.ts +5 -5
- package/dist/typings/inputs/common.d.ts +9 -9
- package/dist/typings/inputs/datasource.d.ts +7 -7
- package/dist/typings/inputs/index.d.ts +7 -7
- package/dist/typings/inputs/settings.d.ts +41 -41
- package/dist/typings/inputs/validation.d.ts +82 -83
- package/dist/typings/inputs/workflow.d.ts +9 -9
- package/dist/typings/interfaces/adapter.d.ts +164 -161
- package/dist/typings/interfaces/datasource.d.ts +28 -28
- package/dist/typings/interfaces/index.d.ts +10 -10
- package/dist/typings/interfaces/item.d.ts +8 -8
- package/dist/typings/interfaces/process.d.ts +35 -35
- package/dist/typings/interfaces/routines.d.ts +166 -166
- package/dist/typings/interfaces/settings.d.ts +31 -31
- package/dist/typings/interfaces/state.d.ts +24 -24
- package/dist/typings/interfaces/validation.d.ts +33 -33
- package/dist/typings/interfaces/workflow.d.ts +53 -53
- package/dist/typings/processes/adapter/append.d.ts +14 -14
- package/dist/typings/processes/adapter/check.d.ts +6 -6
- package/dist/typings/processes/adapter/clip.d.ts +7 -7
- package/dist/typings/processes/adapter/fix.d.ts +13 -13
- package/dist/typings/processes/adapter/insert.d.ts +11 -11
- package/dist/typings/processes/adapter/pause.d.ts +8 -8
- package/dist/typings/processes/adapter/reload.d.ts +6 -6
- package/dist/typings/processes/adapter/remove.d.ts +11 -11
- package/dist/typings/processes/adapter/replace.d.ts +8 -8
- package/dist/typings/processes/adapter/reset.d.ts +7 -7
- package/dist/typings/processes/adapter/update.d.ts +8 -8
- package/dist/typings/processes/adjust.d.ts +10 -10
- package/dist/typings/processes/clip.d.ts +7 -7
- package/dist/typings/processes/end.d.ts +10 -10
- package/dist/typings/processes/fetch.d.ts +18 -18
- package/dist/typings/processes/index.d.ts +24 -24
- package/dist/typings/processes/init.d.ts +7 -7
- package/dist/typings/processes/misc/base.d.ts +4 -4
- package/dist/typings/processes/misc/enums.d.ts +33 -33
- package/dist/typings/processes/misc/index.d.ts +2 -2
- package/dist/typings/processes/postFetch.d.ts +8 -8
- package/dist/typings/processes/preClip.d.ts +12 -12
- package/dist/typings/processes/preFetch.d.ts +17 -17
- package/dist/typings/processes/render.d.ts +9 -9
- package/dist/typings/processes/scroll.d.ts +13 -13
- package/dist/typings/processes/start.d.ts +6 -6
- package/dist/typings/scroller.d.ts +26 -26
- package/dist/typings/version.d.ts +5 -5
- package/dist/typings/workflow-transducer.d.ts +2 -2
- package/dist/typings/workflow.d.ts +29 -29
- package/package.json +19 -18
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { Direction } from '../../inputs/index';
|
|
2
|
-
var CheckBufferCall = /** @class */ (function () {
|
|
3
|
-
function CheckBufferCall(context, logger) {
|
|
4
|
-
this.context = context;
|
|
5
|
-
this.logger = logger;
|
|
6
|
-
}
|
|
7
|
-
CheckBufferCall.prototype.fillEmpty = function (items, before, after) {
|
|
8
|
-
if (!items.length) {
|
|
9
|
-
this.logger.log('no items to fill the buffer; empty list');
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
if (!Number.isInteger(before) && !Number.isInteger(after)) {
|
|
13
|
-
this.logger.log('no items to fill the buffer; wrong indexes');
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
this.logger.log(function () { return "going to fill the buffer with ".concat(items.length, " item(s)"); });
|
|
17
|
-
return true;
|
|
18
|
-
};
|
|
19
|
-
CheckBufferCall.prototype.insertInBuffer = function (predicate, before, after) {
|
|
20
|
-
var index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);
|
|
21
|
-
var found = this.context.items.find(function (item) {
|
|
22
|
-
return (predicate && predicate(item.get())) ||
|
|
23
|
-
(Number.isInteger(index) && index === item.$index);
|
|
24
|
-
});
|
|
25
|
-
if (!found) {
|
|
26
|
-
this.logger.log('no items to insert in buffer; empty predicate\'s result');
|
|
27
|
-
return NaN;
|
|
28
|
-
}
|
|
29
|
-
return found.$index;
|
|
30
|
-
};
|
|
31
|
-
CheckBufferCall.prototype.insertVirtual = function (items, index, direction) {
|
|
32
|
-
if (!items.length) {
|
|
33
|
-
this.logger.log('no items to insert virtually; empty list');
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
var _a = this.context, firstIndex = _a.firstIndex, lastIndex = _a.lastIndex, finiteAbsMinIndex = _a.finiteAbsMinIndex, finiteAbsMaxIndex = _a.finiteAbsMaxIndex;
|
|
37
|
-
if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {
|
|
38
|
-
this.logger.log(function () {
|
|
39
|
-
return 'no items to insert virtually; ' +
|
|
40
|
-
"selected index (".concat(index, ") does not match virtual area [").concat(finiteAbsMinIndex, "..").concat(finiteAbsMaxIndex, "]");
|
|
41
|
-
});
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
var before = direction === Direction.backward;
|
|
45
|
-
if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {
|
|
46
|
-
this.logger.log(function () {
|
|
47
|
-
return "no items to insert virtually; selected index (".concat(index, ") belongs Buffer [").concat(firstIndex, "..").concat(lastIndex, "]");
|
|
48
|
-
});
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
this.logger.log(function () { return "going to insert ".concat(items.length, " item(s) virtually"); });
|
|
52
|
-
return true;
|
|
53
|
-
};
|
|
54
|
-
return CheckBufferCall;
|
|
55
|
-
}());
|
|
56
|
-
export { CheckBufferCall };
|
|
1
|
+
import { Direction } from '../../inputs/index';
|
|
2
|
+
var CheckBufferCall = /** @class */ (function () {
|
|
3
|
+
function CheckBufferCall(context, logger) {
|
|
4
|
+
this.context = context;
|
|
5
|
+
this.logger = logger;
|
|
6
|
+
}
|
|
7
|
+
CheckBufferCall.prototype.fillEmpty = function (items, before, after) {
|
|
8
|
+
if (!items.length) {
|
|
9
|
+
this.logger.log('no items to fill the buffer; empty list');
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (!Number.isInteger(before) && !Number.isInteger(after)) {
|
|
13
|
+
this.logger.log('no items to fill the buffer; wrong indexes');
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
this.logger.log(function () { return "going to fill the buffer with ".concat(items.length, " item(s)"); });
|
|
17
|
+
return true;
|
|
18
|
+
};
|
|
19
|
+
CheckBufferCall.prototype.insertInBuffer = function (predicate, before, after) {
|
|
20
|
+
var index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);
|
|
21
|
+
var found = this.context.items.find(function (item) {
|
|
22
|
+
return (predicate && predicate(item.get())) ||
|
|
23
|
+
(Number.isInteger(index) && index === item.$index);
|
|
24
|
+
});
|
|
25
|
+
if (!found) {
|
|
26
|
+
this.logger.log('no items to insert in buffer; empty predicate\'s result');
|
|
27
|
+
return NaN;
|
|
28
|
+
}
|
|
29
|
+
return found.$index;
|
|
30
|
+
};
|
|
31
|
+
CheckBufferCall.prototype.insertVirtual = function (items, index, direction) {
|
|
32
|
+
if (!items.length) {
|
|
33
|
+
this.logger.log('no items to insert virtually; empty list');
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
var _a = this.context, firstIndex = _a.firstIndex, lastIndex = _a.lastIndex, finiteAbsMinIndex = _a.finiteAbsMinIndex, finiteAbsMaxIndex = _a.finiteAbsMaxIndex;
|
|
37
|
+
if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {
|
|
38
|
+
this.logger.log(function () {
|
|
39
|
+
return 'no items to insert virtually; ' +
|
|
40
|
+
"selected index (".concat(index, ") does not match virtual area [").concat(finiteAbsMinIndex, "..").concat(finiteAbsMaxIndex, "]");
|
|
41
|
+
});
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
var before = direction === Direction.backward;
|
|
45
|
+
if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {
|
|
46
|
+
this.logger.log(function () {
|
|
47
|
+
return "no items to insert virtually; selected index (".concat(index, ") belongs Buffer [").concat(firstIndex, "..").concat(lastIndex, "]");
|
|
48
|
+
});
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
this.logger.log(function () { return "going to insert ".concat(items.length, " item(s) virtually"); });
|
|
52
|
+
return true;
|
|
53
|
+
};
|
|
54
|
+
return CheckBufferCall;
|
|
55
|
+
}());
|
|
56
|
+
export { CheckBufferCall };
|
|
57
57
|
//# sourceMappingURL=checkCall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C;IAIE,yBAAY,OAAqB,EAAE,MAAc;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mCAAS,GAAT,UAAU,KAAa,EAAE,MAAe,EAAE,KAAc;QACtD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from '../buffer';\r\nimport { Logger } from '../logger';\r\nimport { Direction } from '../../inputs/index';\r\nimport { ItemsPredicate } from '../../interfaces/index';\r\n\r\nexport class CheckBufferCall<Data> {\r\n private context: Buffer<Data>;\r\n private logger: Logger;\r\n\r\n constructor(context: Buffer<Data>, logger: Logger) {\r\n this.context = context;\r\n this.logger = logger;\r\n }\r\n\r\n fillEmpty(items: Data[], before?: number, after?: number): boolean {\r\n if (!items.length) {\r\n this.logger.log('no items to fill the buffer; empty list');\r\n return false;\r\n }\r\n if (!Number.isInteger(before) && !Number.isInteger(after)) {\r\n this.logger.log('no items to fill the buffer; wrong indexes');\r\n return false;\r\n }\r\n this.logger.log(() => `going to fill the buffer with ${items.length} item(s)`);\r\n return true;\r\n }\r\n\r\n insertInBuffer(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n const index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);\r\n const found = this.context.items.find(item =>\r\n (predicate && predicate(item.get())) ||\r\n (Number.isInteger(index) && index === item.$index)\r\n );\r\n if (!found) {\r\n this.logger.log('no items to insert in buffer; empty predicate\\'s result');\r\n return NaN;\r\n }\r\n return found.$index;\r\n }\r\n\r\n insertVirtual(items: Data[], index: number, direction: Direction): boolean {\r\n if (!items.length) {\r\n this.logger.log('no items to insert virtually; empty list');\r\n return false;\r\n }\r\n const { firstIndex, lastIndex, finiteAbsMinIndex, finiteAbsMaxIndex } = this.context;\r\n if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {\r\n this.logger.log(() =>\r\n 'no items to insert virtually; ' +\r\n `selected index (${index}) does not match virtual area [${finiteAbsMinIndex}..${finiteAbsMaxIndex}]`\r\n );\r\n return false;\r\n }\r\n const before = direction === Direction.backward;\r\n if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {\r\n this.logger.log(() =>\r\n `no items to insert virtually; selected index (${index}) belongs Buffer [${firstIndex}..${lastIndex}]`\r\n );\r\n return false;\r\n }\r\n this.logger.log(() => `going to insert ${items.length} item(s) virtually`);\r\n return true;\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
import { __read, __spreadArray } from "tslib";
|
|
2
|
-
import { SizeStrategy } from '../../inputs/index';
|
|
3
|
-
var SizesRecalculation = /** @class */ (function () {
|
|
4
|
-
function SizesRecalculation() {
|
|
5
|
-
this.reset();
|
|
6
|
-
}
|
|
7
|
-
SizesRecalculation.prototype.reset = function () {
|
|
8
|
-
this.newItems = [];
|
|
9
|
-
this.oldItems = [];
|
|
10
|
-
this.removed = [];
|
|
11
|
-
};
|
|
12
|
-
return SizesRecalculation;
|
|
13
|
-
}());
|
|
14
|
-
export { SizesRecalculation };
|
|
15
|
-
var DefaultSize = /** @class */ (function () {
|
|
16
|
-
function DefaultSize(itemSize, sizeStrategy) {
|
|
17
|
-
this.itemSize = itemSize;
|
|
18
|
-
this.sizeStrategy = sizeStrategy;
|
|
19
|
-
this.sizeMap = new Map();
|
|
20
|
-
this.recalculation = new SizesRecalculation();
|
|
21
|
-
}
|
|
22
|
-
DefaultSize.prototype.reset = function (force) {
|
|
23
|
-
if (force) {
|
|
24
|
-
this.constantSize = this.itemSize;
|
|
25
|
-
this.frequentSize = this.itemSize;
|
|
26
|
-
this.averageSize = this.itemSize;
|
|
27
|
-
this.averageSizeFloat = this.itemSize;
|
|
28
|
-
this.sizeMap.clear();
|
|
29
|
-
}
|
|
30
|
-
this.recalculation.reset();
|
|
31
|
-
};
|
|
32
|
-
DefaultSize.prototype.get = function () {
|
|
33
|
-
switch (this.sizeStrategy) {
|
|
34
|
-
case SizeStrategy.Average:
|
|
35
|
-
return this.averageSize;
|
|
36
|
-
case SizeStrategy.Frequent:
|
|
37
|
-
return this.frequentSize;
|
|
38
|
-
default:
|
|
39
|
-
return this.constantSize;
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
DefaultSize.prototype.recalculateAverageSize = function (cacheSize) {
|
|
43
|
-
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
44
|
-
if (oldItems.length) {
|
|
45
|
-
var oldSize = oldItems.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
46
|
-
var newSize = oldItems.reduce(function (acc, item) { return acc + item.newSize; }, 0);
|
|
47
|
-
var averageSize = this.averageSizeFloat || 0;
|
|
48
|
-
this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);
|
|
49
|
-
}
|
|
50
|
-
if (newItems.length) {
|
|
51
|
-
var newSize = newItems.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
52
|
-
var averageSize = this.averageSizeFloat || 0;
|
|
53
|
-
this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;
|
|
54
|
-
}
|
|
55
|
-
if (removed.length) {
|
|
56
|
-
var removedSize = removed.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
57
|
-
var averageSize = this.averageSizeFloat || 0;
|
|
58
|
-
this.averageSizeFloat = ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;
|
|
59
|
-
}
|
|
60
|
-
this.averageSize = Math.round(this.averageSizeFloat);
|
|
61
|
-
};
|
|
62
|
-
DefaultSize.prototype.recalculateFrequentSize = function () {
|
|
63
|
-
var _this = this;
|
|
64
|
-
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
65
|
-
var oldFrequentSizeCount = this.sizeMap.get(this.frequentSize);
|
|
66
|
-
if (newItems.length) {
|
|
67
|
-
newItems.forEach(function (_a) {
|
|
68
|
-
var size = _a.size;
|
|
69
|
-
return _this.sizeMap.set(size, (_this.sizeMap.get(size) || 0) + 1);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
if (oldItems.length) {
|
|
73
|
-
oldItems.forEach(function (_a) {
|
|
74
|
-
var size = _a.size;
|
|
75
|
-
return _this.sizeMap.set(size, Math.max((_this.sizeMap.get(size) || 0) - 1, 0));
|
|
76
|
-
});
|
|
77
|
-
oldItems.forEach(function (_a) {
|
|
78
|
-
var s = _a.newSize;
|
|
79
|
-
return _this.sizeMap.set(s, (_this.sizeMap.get(s) || 0) + 1);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (removed.length) {
|
|
83
|
-
removed.forEach(function (_a) {
|
|
84
|
-
var size = _a.size;
|
|
85
|
-
return _this.sizeMap.set(size, Math.max((_this.sizeMap.get(size) || 0) - 1, 0));
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
var sorted = __spreadArray([], __read(this.sizeMap.entries()), false).sort(function (a, b) { return b[1] - a[1]; });
|
|
89
|
-
var mostFrequentCount = sorted[0][1];
|
|
90
|
-
var listEqual = sorted.filter(function (i) { return i[1] === mostFrequentCount; });
|
|
91
|
-
if (listEqual.length > 1 && listEqual.find(function (i) { return i[0] === oldFrequentSizeCount; })) {
|
|
92
|
-
// if there are more than 1 most frequent sizes, but the old one is present
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
this.frequentSize = sorted[0][0];
|
|
96
|
-
};
|
|
97
|
-
DefaultSize.prototype.recalculate = function (cacheSize) {
|
|
98
|
-
if (this.sizeStrategy === SizeStrategy.Constant) {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
102
|
-
if (!oldItems.length && !newItems.length && !removed.length) {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
var oldValue = this.get();
|
|
106
|
-
if (!cacheSize) {
|
|
107
|
-
this.reset(true);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
if (this.sizeStrategy === SizeStrategy.Average) {
|
|
111
|
-
this.recalculateAverageSize(cacheSize);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.recalculateFrequentSize();
|
|
115
|
-
}
|
|
116
|
-
this.recalculation.reset();
|
|
117
|
-
}
|
|
118
|
-
return this.get() !== oldValue;
|
|
119
|
-
};
|
|
120
|
-
DefaultSize.prototype.setExisted = function (oldSize, newSize) {
|
|
121
|
-
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
122
|
-
this.recalculation.oldItems.push({
|
|
123
|
-
size: oldSize,
|
|
124
|
-
newSize: newSize
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
DefaultSize.prototype.setNew = function (size) {
|
|
129
|
-
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
130
|
-
this.recalculation.newItems.push({ size: size });
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
if (!this.constantSize) {
|
|
134
|
-
this.constantSize = size;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
DefaultSize.prototype.setRemoved = function (size) {
|
|
139
|
-
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
140
|
-
this.recalculation.removed.push({ size: size });
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
return DefaultSize;
|
|
144
|
-
}());
|
|
145
|
-
export { DefaultSize };
|
|
1
|
+
import { __read, __spreadArray } from "tslib";
|
|
2
|
+
import { SizeStrategy } from '../../inputs/index';
|
|
3
|
+
var SizesRecalculation = /** @class */ (function () {
|
|
4
|
+
function SizesRecalculation() {
|
|
5
|
+
this.reset();
|
|
6
|
+
}
|
|
7
|
+
SizesRecalculation.prototype.reset = function () {
|
|
8
|
+
this.newItems = [];
|
|
9
|
+
this.oldItems = [];
|
|
10
|
+
this.removed = [];
|
|
11
|
+
};
|
|
12
|
+
return SizesRecalculation;
|
|
13
|
+
}());
|
|
14
|
+
export { SizesRecalculation };
|
|
15
|
+
var DefaultSize = /** @class */ (function () {
|
|
16
|
+
function DefaultSize(itemSize, sizeStrategy) {
|
|
17
|
+
this.itemSize = itemSize;
|
|
18
|
+
this.sizeStrategy = sizeStrategy;
|
|
19
|
+
this.sizeMap = new Map();
|
|
20
|
+
this.recalculation = new SizesRecalculation();
|
|
21
|
+
}
|
|
22
|
+
DefaultSize.prototype.reset = function (force) {
|
|
23
|
+
if (force) {
|
|
24
|
+
this.constantSize = this.itemSize;
|
|
25
|
+
this.frequentSize = this.itemSize;
|
|
26
|
+
this.averageSize = this.itemSize;
|
|
27
|
+
this.averageSizeFloat = this.itemSize;
|
|
28
|
+
this.sizeMap.clear();
|
|
29
|
+
}
|
|
30
|
+
this.recalculation.reset();
|
|
31
|
+
};
|
|
32
|
+
DefaultSize.prototype.get = function () {
|
|
33
|
+
switch (this.sizeStrategy) {
|
|
34
|
+
case SizeStrategy.Average:
|
|
35
|
+
return this.averageSize;
|
|
36
|
+
case SizeStrategy.Frequent:
|
|
37
|
+
return this.frequentSize;
|
|
38
|
+
default:
|
|
39
|
+
return this.constantSize;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
DefaultSize.prototype.recalculateAverageSize = function (cacheSize) {
|
|
43
|
+
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
44
|
+
if (oldItems.length) {
|
|
45
|
+
var oldSize = oldItems.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
46
|
+
var newSize = oldItems.reduce(function (acc, item) { return acc + item.newSize; }, 0);
|
|
47
|
+
var averageSize = this.averageSizeFloat || 0;
|
|
48
|
+
this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);
|
|
49
|
+
}
|
|
50
|
+
if (newItems.length) {
|
|
51
|
+
var newSize = newItems.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
52
|
+
var averageSize = this.averageSizeFloat || 0;
|
|
53
|
+
this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;
|
|
54
|
+
}
|
|
55
|
+
if (removed.length) {
|
|
56
|
+
var removedSize = removed.reduce(function (acc, item) { return acc + item.size; }, 0);
|
|
57
|
+
var averageSize = this.averageSizeFloat || 0;
|
|
58
|
+
this.averageSizeFloat = ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;
|
|
59
|
+
}
|
|
60
|
+
this.averageSize = Math.round(this.averageSizeFloat);
|
|
61
|
+
};
|
|
62
|
+
DefaultSize.prototype.recalculateFrequentSize = function () {
|
|
63
|
+
var _this = this;
|
|
64
|
+
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
65
|
+
var oldFrequentSizeCount = this.sizeMap.get(this.frequentSize);
|
|
66
|
+
if (newItems.length) {
|
|
67
|
+
newItems.forEach(function (_a) {
|
|
68
|
+
var size = _a.size;
|
|
69
|
+
return _this.sizeMap.set(size, (_this.sizeMap.get(size) || 0) + 1);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (oldItems.length) {
|
|
73
|
+
oldItems.forEach(function (_a) {
|
|
74
|
+
var size = _a.size;
|
|
75
|
+
return _this.sizeMap.set(size, Math.max((_this.sizeMap.get(size) || 0) - 1, 0));
|
|
76
|
+
});
|
|
77
|
+
oldItems.forEach(function (_a) {
|
|
78
|
+
var s = _a.newSize;
|
|
79
|
+
return _this.sizeMap.set(s, (_this.sizeMap.get(s) || 0) + 1);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (removed.length) {
|
|
83
|
+
removed.forEach(function (_a) {
|
|
84
|
+
var size = _a.size;
|
|
85
|
+
return _this.sizeMap.set(size, Math.max((_this.sizeMap.get(size) || 0) - 1, 0));
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
var sorted = __spreadArray([], __read(this.sizeMap.entries()), false).sort(function (a, b) { return b[1] - a[1]; });
|
|
89
|
+
var mostFrequentCount = sorted[0][1];
|
|
90
|
+
var listEqual = sorted.filter(function (i) { return i[1] === mostFrequentCount; });
|
|
91
|
+
if (listEqual.length > 1 && listEqual.find(function (i) { return i[0] === oldFrequentSizeCount; })) {
|
|
92
|
+
// if there are more than 1 most frequent sizes, but the old one is present
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this.frequentSize = sorted[0][0];
|
|
96
|
+
};
|
|
97
|
+
DefaultSize.prototype.recalculate = function (cacheSize) {
|
|
98
|
+
if (this.sizeStrategy === SizeStrategy.Constant) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
var _a = this.recalculation, oldItems = _a.oldItems, newItems = _a.newItems, removed = _a.removed;
|
|
102
|
+
if (!oldItems.length && !newItems.length && !removed.length) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
var oldValue = this.get();
|
|
106
|
+
if (!cacheSize) {
|
|
107
|
+
this.reset(true);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
if (this.sizeStrategy === SizeStrategy.Average) {
|
|
111
|
+
this.recalculateAverageSize(cacheSize);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.recalculateFrequentSize();
|
|
115
|
+
}
|
|
116
|
+
this.recalculation.reset();
|
|
117
|
+
}
|
|
118
|
+
return this.get() !== oldValue;
|
|
119
|
+
};
|
|
120
|
+
DefaultSize.prototype.setExisted = function (oldSize, newSize) {
|
|
121
|
+
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
122
|
+
this.recalculation.oldItems.push({
|
|
123
|
+
size: oldSize,
|
|
124
|
+
newSize: newSize
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
DefaultSize.prototype.setNew = function (size) {
|
|
129
|
+
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
130
|
+
this.recalculation.newItems.push({ size: size });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (!this.constantSize) {
|
|
134
|
+
this.constantSize = size;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
DefaultSize.prototype.setRemoved = function (size) {
|
|
139
|
+
if (this.sizeStrategy !== SizeStrategy.Constant) {
|
|
140
|
+
this.recalculation.removed.push({ size: size });
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
return DefaultSize;
|
|
144
|
+
}());
|
|
145
|
+
export { DefaultSize };
|
|
146
146
|
//# sourceMappingURL=defaultSize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultSize.js","sourceRoot":"","sources":["../../../../src/classes/buffer/defaultSize.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD;IAKE;QACE,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,kCAAK,GAAL;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IACH,yBAAC;AAAD,CAAC,AAdD,IAcC;;AAED;IAWE,qBAAY,QAAgB,EAAE,YAA0B;QACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAChD,CAAC;IAED,2BAAK,GAAL,UAAM,KAAc;QAClB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACtB;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,yBAAG,GAAH;QACE,QAAQ,IAAI,CAAC,YAAY,EAAE;YACzB,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,KAAK,YAAY,CAAC,QAAQ;gBACxB,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B;gBACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;IACH,CAAC;IAEO,4CAAsB,GAA9B,UAA+B,SAAiB;QACxC,IAAA,KAAkC,IAAI,CAAC,aAAa,EAAlD,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAuB,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,IAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,IAAI,EAAf,CAAe,EAAE,CAAC,CAAC,CAAC;YACnE,IAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAI,IAAI,CAAC,OAAkB,EAA9B,CAA8B,EAAE,CAAC,CAAC,CAAC;YAClF,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,WAAW,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC3F;QACD,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,IAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,IAAI,EAAf,CAAe,EAAE,CAAC,CAAC,CAAC;YACnE,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;SAC7F;QACD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,IAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,IAAI,EAAf,CAAe,EAAE,CAAC,CAAC,CAAC;YACtE,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC;SAChG;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAEO,6CAAuB,GAA/B;QAAA,iBAqBC;QApBO,IAAA,KAAkC,IAAI,CAAC,aAAa,EAAlD,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAuB,CAAC;QAC3D,IAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAQ;oBAAN,IAAI,UAAA;gBAAO,OAAA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAzD,CAAyD,CAAC,CAAC;SAC3F;QACD,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAQ;oBAAN,IAAI,UAAA;gBAAO,OAAA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAAtE,CAAsE,CAAC,CAAC;YACvG,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAc;oBAAH,CAAC,aAAA;gBAAO,OAAA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAW,EAAE,CAAC,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAvE,CAAuE,CAAC,CAAC;SAC/G;QACD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,CAAC,OAAO,CAAC,UAAC,EAAQ;oBAAN,IAAI,UAAA;gBAAO,OAAA,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAAtE,CAAsE,CAAC,CAAC;SACvG;QACD,IAAM,MAAM,GAAG,yBAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAE,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC;QACvE,IAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAA1B,CAA0B,CAAC,CAAC;QACjE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,oBAAoB,EAA7B,CAA6B,CAAC,EAAE;YAC9E,2EAA2E;YAC3E,OAAO;SACR;QACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,iCAAW,GAAX,UAAY,SAAiB;QAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;QACK,IAAA,KAAkC,IAAI,CAAC,aAAa,EAAlD,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAuB,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3D,OAAO,KAAK,CAAC;SACd;QACD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAClB;aAAM;YACL,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE;gBAC9C,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;aACxC;iBAAM;gBACL,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAChC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,QAAQ,CAAC;IACjC,CAAC;IAED,gCAAU,GAAV,UAAW,OAAe,EAAE,OAAe;QACzC,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B,IAAI,EAAE,OAAO;gBACb,OAAO,SAAA;aACR,CAAC,CAAC;SACJ;IACH,CAAC;IAED,4BAAM,GAAN,UAAO,IAAY;QACjB,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;SAC5C;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC1B;SACF;IACH,CAAC;IAED,gCAAU,GAAV,UAAW,IAAY;QACrB,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;SAC3C;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AAlID,IAkIC","sourcesContent":["import { SizeStrategy } from '../../inputs/index';\r\n\r\ninterface ItemSize {\r\n size: number;\r\n newSize?: number;\r\n}\r\n\r\nexport class SizesRecalculation {\r\n newItems: ItemSize[];\r\n oldItems: ItemSize[];\r\n removed: ItemSize[];\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.newItems = [];\r\n this.oldItems = [];\r\n this.removed = [];\r\n }\r\n}\r\n\r\nexport class DefaultSize {\r\n private readonly itemSize: number;\r\n private readonly sizeStrategy: SizeStrategy;\r\n private sizeMap: Map<number, number>;\r\n private recalculation: SizesRecalculation;\r\n\r\n private constantSize: number;\r\n private frequentSize: number;\r\n private averageSize: number;\r\n private averageSizeFloat: number;\r\n\r\n constructor(itemSize: number, sizeStrategy: SizeStrategy) {\r\n this.itemSize = itemSize;\r\n this.sizeStrategy = sizeStrategy;\r\n this.sizeMap = new Map<number, number>();\r\n this.recalculation = new SizesRecalculation();\r\n }\r\n\r\n reset(force: boolean): void {\r\n if (force) {\r\n this.constantSize = this.itemSize;\r\n this.frequentSize = this.itemSize;\r\n this.averageSize = this.itemSize;\r\n this.averageSizeFloat = this.itemSize;\r\n this.sizeMap.clear();\r\n }\r\n this.recalculation.reset();\r\n }\r\n\r\n get(): number {\r\n switch (this.sizeStrategy) {\r\n case SizeStrategy.Average:\r\n return this.averageSize;\r\n case SizeStrategy.Frequent:\r\n return this.frequentSize;\r\n default:\r\n return this.constantSize;\r\n }\r\n }\r\n\r\n private recalculateAverageSize(cacheSize: number): void {\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (oldItems.length) {\r\n const oldSize = oldItems.reduce((acc, item) => acc + item.size, 0);\r\n const newSize = oldItems.reduce((acc, item) => acc + (item.newSize as number), 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);\r\n }\r\n if (newItems.length) {\r\n const newSize = newItems.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;\r\n }\r\n if (removed.length) {\r\n const removedSize = removed.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;\r\n }\r\n this.averageSize = Math.round(this.averageSizeFloat);\r\n }\r\n\r\n private recalculateFrequentSize(): void {\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n const oldFrequentSizeCount = this.sizeMap.get(this.frequentSize);\r\n if (newItems.length) {\r\n newItems.forEach(({ size }) => this.sizeMap.set(size, (this.sizeMap.get(size) || 0) + 1));\r\n }\r\n if (oldItems.length) {\r\n oldItems.forEach(({ size }) => this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0)));\r\n oldItems.forEach(({ newSize: s }) => this.sizeMap.set(s as number, (this.sizeMap.get(s as number) || 0) + 1));\r\n }\r\n if (removed.length) {\r\n removed.forEach(({ size }) => this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0)));\r\n }\r\n const sorted = [...this.sizeMap.entries()].sort((a, b) => b[1] - a[1]);\r\n const mostFrequentCount = sorted[0][1];\r\n const listEqual = sorted.filter(i => i[1] === mostFrequentCount);\r\n if (listEqual.length > 1 && listEqual.find(i => i[0] === oldFrequentSizeCount)) {\r\n // if there are more than 1 most frequent sizes, but the old one is present\r\n return;\r\n }\r\n this.frequentSize = sorted[0][0];\r\n }\r\n\r\n recalculate(cacheSize: number): boolean {\r\n if (this.sizeStrategy === SizeStrategy.Constant) {\r\n return false;\r\n }\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (!oldItems.length && !newItems.length && !removed.length) {\r\n return false;\r\n }\r\n const oldValue = this.get();\r\n if (!cacheSize) {\r\n this.reset(true);\r\n } else {\r\n if (this.sizeStrategy === SizeStrategy.Average) {\r\n this.recalculateAverageSize(cacheSize);\r\n } else {\r\n this.recalculateFrequentSize();\r\n }\r\n this.recalculation.reset();\r\n }\r\n return this.get() !== oldValue;\r\n }\r\n\r\n setExisted(oldSize: number, newSize: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.oldItems.push({\r\n size: oldSize,\r\n newSize\r\n });\r\n }\r\n }\r\n\r\n setNew(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.newItems.push({ size });\r\n } else {\r\n if (!this.constantSize) {\r\n this.constantSize = size;\r\n }\r\n }\r\n }\r\n\r\n setRemoved(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.removed.push({ size });\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"defaultSize.js","sourceRoot":"","sources":["../../../../src/classes/buffer/defaultSize.ts"],"names":[],"mappings":"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","sourcesContent":["import { SizeStrategy } from '../../inputs/index';\r\n\r\ninterface ItemSize {\r\n size: number;\r\n newSize?: number;\r\n}\r\n\r\nexport class SizesRecalculation {\r\n newItems: ItemSize[];\r\n oldItems: ItemSize[];\r\n removed: ItemSize[];\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.newItems = [];\r\n this.oldItems = [];\r\n this.removed = [];\r\n }\r\n}\r\n\r\nexport class DefaultSize {\r\n private readonly itemSize: number;\r\n private readonly sizeStrategy: SizeStrategy;\r\n private sizeMap: Map<number, number>;\r\n private recalculation: SizesRecalculation;\r\n\r\n private constantSize: number;\r\n private frequentSize: number;\r\n private averageSize: number;\r\n private averageSizeFloat: number;\r\n\r\n constructor(itemSize: number, sizeStrategy: SizeStrategy) {\r\n this.itemSize = itemSize;\r\n this.sizeStrategy = sizeStrategy;\r\n this.sizeMap = new Map<number, number>();\r\n this.recalculation = new SizesRecalculation();\r\n }\r\n\r\n reset(force: boolean): void {\r\n if (force) {\r\n this.constantSize = this.itemSize;\r\n this.frequentSize = this.itemSize;\r\n this.averageSize = this.itemSize;\r\n this.averageSizeFloat = this.itemSize;\r\n this.sizeMap.clear();\r\n }\r\n this.recalculation.reset();\r\n }\r\n\r\n get(): number {\r\n switch (this.sizeStrategy) {\r\n case SizeStrategy.Average:\r\n return this.averageSize;\r\n case SizeStrategy.Frequent:\r\n return this.frequentSize;\r\n default:\r\n return this.constantSize;\r\n }\r\n }\r\n\r\n private recalculateAverageSize(cacheSize: number): void {\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (oldItems.length) {\r\n const oldSize = oldItems.reduce((acc, item) => acc + item.size, 0);\r\n const newSize = oldItems.reduce((acc, item) => acc + (item.newSize as number), 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);\r\n }\r\n if (newItems.length) {\r\n const newSize = newItems.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;\r\n }\r\n if (removed.length) {\r\n const removedSize = removed.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;\r\n }\r\n this.averageSize = Math.round(this.averageSizeFloat);\r\n }\r\n\r\n private recalculateFrequentSize(): void {\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n const oldFrequentSizeCount = this.sizeMap.get(this.frequentSize);\r\n if (newItems.length) {\r\n newItems.forEach(({ size }) => this.sizeMap.set(size, (this.sizeMap.get(size) || 0) + 1));\r\n }\r\n if (oldItems.length) {\r\n oldItems.forEach(({ size }) => this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0)));\r\n oldItems.forEach(({ newSize: s }) => this.sizeMap.set(s as number, (this.sizeMap.get(s as number) || 0) + 1));\r\n }\r\n if (removed.length) {\r\n removed.forEach(({ size }) => this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0)));\r\n }\r\n const sorted = [...this.sizeMap.entries()].sort((a, b) => b[1] - a[1]);\r\n const mostFrequentCount = sorted[0][1];\r\n const listEqual = sorted.filter(i => i[1] === mostFrequentCount);\r\n if (listEqual.length > 1 && listEqual.find(i => i[0] === oldFrequentSizeCount)) {\r\n // if there are more than 1 most frequent sizes, but the old one is present\r\n return;\r\n }\r\n this.frequentSize = sorted[0][0];\r\n }\r\n\r\n recalculate(cacheSize: number): boolean {\r\n if (this.sizeStrategy === SizeStrategy.Constant) {\r\n return false;\r\n }\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (!oldItems.length && !newItems.length && !removed.length) {\r\n return false;\r\n }\r\n const oldValue = this.get();\r\n if (!cacheSize) {\r\n this.reset(true);\r\n } else {\r\n if (this.sizeStrategy === SizeStrategy.Average) {\r\n this.recalculateAverageSize(cacheSize);\r\n } else {\r\n this.recalculateFrequentSize();\r\n }\r\n this.recalculation.reset();\r\n }\r\n return this.get() !== oldValue;\r\n }\r\n\r\n setExisted(oldSize: number, newSize: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.oldItems.push({\r\n size: oldSize,\r\n newSize\r\n });\r\n }\r\n }\r\n\r\n setNew(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.newItems.push({ size });\r\n } else {\r\n if (!this.constantSize) {\r\n this.constantSize = size;\r\n }\r\n }\r\n }\r\n\r\n setRemoved(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.removed.push({ size });\r\n }\r\n }\r\n}\r\n"]}
|