vscroll 1.5.4 → 1.5.6

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 (62) hide show
  1. package/dist/bundles/vscroll.esm5.js +19 -15
  2. package/dist/bundles/vscroll.esm5.js.map +1 -1
  3. package/dist/bundles/vscroll.esm5.min.js +2 -2
  4. package/dist/bundles/vscroll.esm5.min.js.map +1 -1
  5. package/dist/bundles/vscroll.esm6.js +65 -59
  6. package/dist/bundles/vscroll.esm6.js.map +1 -1
  7. package/dist/bundles/vscroll.esm6.min.js +2 -2
  8. package/dist/bundles/vscroll.esm6.min.js.map +1 -1
  9. package/dist/bundles/vscroll.umd.js +5447 -5438
  10. package/dist/bundles/vscroll.umd.js.map +1 -1
  11. package/dist/bundles/vscroll.umd.min.js +2 -2
  12. package/dist/bundles/vscroll.umd.min.js.map +1 -1
  13. package/dist/esm2015/classes/adapter.js +19 -19
  14. package/dist/esm2015/classes/adapter.js.map +1 -1
  15. package/dist/esm2015/classes/item.js +11 -11
  16. package/dist/esm2015/classes/item.js.map +1 -1
  17. package/dist/esm2015/classes/state/clip.js +3 -3
  18. package/dist/esm2015/classes/state/clip.js.map +1 -1
  19. package/dist/esm2015/classes/state/cycle.js +9 -9
  20. package/dist/esm2015/classes/state/cycle.js.map +1 -1
  21. package/dist/esm2015/classes/state/render.js +3 -3
  22. package/dist/esm2015/classes/state/render.js.map +1 -1
  23. package/dist/esm2015/classes/state.js +3 -3
  24. package/dist/esm2015/classes/state.js.map +1 -1
  25. package/dist/esm2015/processes/fetch.js +2 -1
  26. package/dist/esm2015/processes/fetch.js.map +1 -1
  27. package/dist/esm2015/processes/postFetch.js +3 -2
  28. package/dist/esm2015/processes/postFetch.js.map +1 -1
  29. package/dist/esm2015/scroller.js +1 -0
  30. package/dist/esm2015/scroller.js.map +1 -1
  31. package/dist/esm2015/version.js +1 -1
  32. package/dist/esm2015/version.js.map +1 -1
  33. package/dist/esm2015/workflow.js +9 -6
  34. package/dist/esm2015/workflow.js.map +1 -1
  35. package/dist/esm5/classes/datasource.js +1 -3
  36. package/dist/esm5/classes/datasource.js.map +1 -1
  37. package/dist/esm5/processes/fetch.js +2 -1
  38. package/dist/esm5/processes/fetch.js.map +1 -1
  39. package/dist/esm5/processes/postFetch.js +3 -2
  40. package/dist/esm5/processes/postFetch.js.map +1 -1
  41. package/dist/esm5/scroller.js +1 -0
  42. package/dist/esm5/scroller.js.map +1 -1
  43. package/dist/esm5/version.js +1 -1
  44. package/dist/esm5/version.js.map +1 -1
  45. package/dist/esm5/workflow.js +10 -7
  46. package/dist/esm5/workflow.js.map +1 -1
  47. package/dist/typings/classes/adapter/wanted.d.ts +3 -3
  48. package/dist/typings/classes/adapter.d.ts +1 -1
  49. package/dist/typings/classes/datasource.d.ts +1 -1
  50. package/dist/typings/classes/logger.d.ts +1 -1
  51. package/dist/typings/classes/reactive.d.ts +2 -2
  52. package/dist/typings/inputs/validation.d.ts +2 -2
  53. package/dist/typings/interfaces/adapter.d.ts +7 -7
  54. package/dist/typings/interfaces/datasource.d.ts +6 -6
  55. package/dist/typings/interfaces/process.d.ts +2 -2
  56. package/dist/typings/interfaces/routines.d.ts +1 -1
  57. package/dist/typings/interfaces/validation.d.ts +3 -3
  58. package/dist/typings/interfaces/workflow.d.ts +2 -2
  59. package/dist/typings/processes/adapter/append.d.ts +1 -1
  60. package/dist/typings/processes/fetch.d.ts +1 -1
  61. package/dist/typings/workflow.d.ts +1 -0
  62. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vscroll.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/classes/reactive.ts","../../src/classes/adapter/props.ts","../../src/inputs/common.ts","../../src/inputs/validation.ts","../../src/version.ts","../../src/classes/adapter/wanted.ts","../../src/classes/adapter/context.ts","../../src/classes/datasource.ts","../../src/inputs/datasource.ts","../../src/inputs/settings.ts","../../src/processes/misc/enums.ts","../../src/inputs/adapter.ts","../../src/classes/settings.ts","../../src/processes/misc/base.ts","../../src/processes/init.ts","../../src/processes/scroll.ts","../../src/processes/adapter/reset.ts","../../src/processes/adapter/reload.ts","../../src/classes/item.ts","../../src/processes/adapter/update.ts","../../src/processes/adapter/insert.ts","../../src/processes/adapter/append.ts","../../src/processes/adapter/check.ts","../../src/processes/adapter/remove.ts","../../src/processes/adapter/clip.ts","../../src/processes/adapter/replace.ts","../../src/processes/adapter/fix.ts","../../src/processes/start.ts","../../src/processes/preFetch.ts","../../src/processes/fetch.ts","../../src/processes/postFetch.ts","../../src/processes/render.ts","../../src/processes/end.ts","../../src/processes/adjust.ts","../../src/processes/preClip.ts","../../src/processes/clip.ts","../../src/classes/logger.ts","../../src/classes/domRoutines.ts","../../src/classes/paddings.ts","../../src/classes/viewport.ts","../../src/classes/buffer/defaultSize.ts","../../src/classes/buffer/cache.ts","../../src/classes/buffer/checkCall.ts","../../src/classes/buffer.ts","../../src/classes/state/cycle.ts","../../src/classes/state/fetch.ts","../../src/classes/state/clip.ts","../../src/classes/state/render.ts","../../src/classes/state/scroll.ts","../../src/classes/state.ts","../../src/classes/adapter.ts","../../src/scroller.ts","../../src/workflow.ts","../../src/workflow-transducer.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","type On<T> = (value: T) => void;\r\ntype Off = () => void;\r\n\r\ninterface Subscription<T> {\r\n emit: On<T>;\r\n off: Off;\r\n}\r\n\r\ninterface Options {\r\n emitOnSubscribe?: boolean; // if set, emit right on subscribe (like rxjs BehaviorSubject)\r\n emitEqual?: boolean; // if set, emit when new value is equal to the old one\r\n}\r\n\r\nexport class Reactive<T> {\r\n\r\n private initialValue: T;\r\n private value: T;\r\n private id: number;\r\n private options: Options;\r\n private subscriptions: Map<number, Subscription<T>>;\r\n\r\n constructor(value?: T, options?: Options) {\r\n this.id = 0;\r\n if (value !== void 0) {\r\n this.value = value;\r\n this.initialValue = value;\r\n }\r\n this.options = options || {};\r\n this.subscriptions = new Map();\r\n }\r\n\r\n set(value: T): void {\r\n if (this.value === value && !this.options.emitEqual) {\r\n return;\r\n }\r\n this.value = value;\r\n for (const [, sub] of this.subscriptions) {\r\n sub.emit(value);\r\n if (this.value !== value) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get(): T {\r\n return this.value;\r\n }\r\n\r\n on(func: On<T>): Off {\r\n const id = this.id++;\r\n const subscription: Subscription<T> = {\r\n emit: func,\r\n off: () => {\r\n subscription.emit = () => null;\r\n this.subscriptions.delete(id);\r\n }\r\n };\r\n this.subscriptions.set(id, subscription);\r\n if (this.options.emitOnSubscribe) {\r\n subscription.emit(this.value);\r\n }\r\n return () => subscription.off();\r\n }\r\n\r\n once(func: On<T>): Off {\r\n const off = this.on(v => {\r\n off();\r\n func(v);\r\n });\r\n return off;\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n dispose(): void {\r\n this.subscriptions.forEach(sub => sub.off());\r\n }\r\n}\r\n","import { Reactive } from '../reactive';\r\nimport {\r\n IAdapterProp, IBufferInfo, ItemAdapter, IPackages, AdapterMethodResult, IReactivePropsStore\r\n} from '../../interfaces/index';\r\n\r\nexport enum AdapterPropName {\r\n id = 'id',\r\n mock = 'mock',\r\n augmented = 'augmented',\r\n version = 'version',\r\n init = 'init',\r\n init$ = 'init$',\r\n packageInfo = 'packageInfo',\r\n itemsCount = 'itemsCount',\r\n bufferInfo = 'bufferInfo',\r\n isLoading = 'isLoading',\r\n isLoading$ = 'isLoading$',\r\n loopPending = 'loopPending',\r\n loopPending$ = 'loopPending$',\r\n firstVisible = 'firstVisible',\r\n firstVisible$ = 'firstVisible$',\r\n lastVisible = 'lastVisible',\r\n lastVisible$ = 'lastVisible$',\r\n bof = 'bof',\r\n bof$ = 'bof$',\r\n eof = 'eof',\r\n eof$ = 'eof$',\r\n reset = 'reset',\r\n reload = 'reload',\r\n append = 'append',\r\n prepend = 'prepend',\r\n check = 'check',\r\n remove = 'remove',\r\n clip = 'clip',\r\n insert = 'insert',\r\n replace = 'replace',\r\n update = 'update',\r\n fix = 'fix',\r\n relax = 'relax',\r\n showLog = 'showLog',\r\n}\r\n\r\nexport enum AdapterPropType {\r\n Scalar,\r\n Reactive,\r\n WorkflowRunner,\r\n Function,\r\n}\r\n\r\nconst Name = AdapterPropName;\r\nconst Type = AdapterPropType;\r\n\r\nconst noop = () => null;\r\n\r\nexport const methodPreResult: AdapterMethodResult = {\r\n immediate: true,\r\n success: true,\r\n details: 'Adapter is not initialized'\r\n};\r\n\r\nconst noopWF = () => Promise.resolve(methodPreResult);\r\n\r\nconst emptyPackageInfo: IPackages = {\r\n core: {\r\n name: '',\r\n version: ''\r\n },\r\n consumer: {\r\n name: '',\r\n version: ''\r\n }\r\n};\r\n\r\nconst bufferInfoDefault: IBufferInfo = {\r\n firstIndex: NaN,\r\n lastIndex: NaN,\r\n minIndex: NaN,\r\n maxIndex: NaN,\r\n absMinIndex: -Infinity,\r\n absMaxIndex: +Infinity,\r\n defaultSize: NaN,\r\n};\r\n\r\nexport const EMPTY_ITEM = {\r\n data: {},\r\n element: {}\r\n} as ItemAdapter;\r\n\r\nexport const getDefaultAdapterProps = (): IAdapterProp[] => [\r\n {\r\n type: Type.Scalar,\r\n name: Name.id,\r\n value: 0,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.mock,\r\n value: true,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.augmented,\r\n value: false,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.version,\r\n value: '',\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.init,\r\n value: false,\r\n reactive: Name.init$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.packageInfo,\r\n value: emptyPackageInfo,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.itemsCount,\r\n value: 0,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.bufferInfo,\r\n value: bufferInfoDefault,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.isLoading,\r\n value: false,\r\n reactive: Name.isLoading$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.loopPending,\r\n value: false,\r\n reactive: Name.loopPending$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.firstVisible,\r\n value: EMPTY_ITEM,\r\n reactive: Name.firstVisible$,\r\n wanted: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.lastVisible,\r\n value: EMPTY_ITEM,\r\n reactive: Name.lastVisible$,\r\n wanted: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.bof,\r\n value: false,\r\n reactive: Name.bof$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.eof,\r\n value: false,\r\n reactive: Name.eof$\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.reset,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.reload,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.append,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.prepend,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.check,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.remove,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.clip,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.insert,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.replace,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.update,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.fix,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.Function,\r\n name: Name.relax,\r\n value: noop\r\n },\r\n {\r\n type: Type.Function,\r\n name: Name.showLog,\r\n value: noop\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.init$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.isLoading$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.loopPending$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.firstVisible$,\r\n value: new Reactive<ItemAdapter>(EMPTY_ITEM, { emitOnSubscribe: true }),\r\n wanted: true\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.lastVisible$,\r\n value: new Reactive<ItemAdapter>(EMPTY_ITEM, { emitOnSubscribe: true }),\r\n wanted: true\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.bof$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.eof$,\r\n value: new Reactive<boolean>()\r\n }\r\n];\r\n\r\nexport const reactiveConfigStorage = new Map<number, IReactivePropsStore>();\r\n","export enum Direction {\r\n forward = 'forward',\r\n backward = 'backward'\r\n}\r\n\r\nexport enum SizeStrategy {\r\n Average = 'average',\r\n Constant = 'constant',\r\n Frequent = 'frequent'\r\n}\r\n","import { IValidationContext } from '../interfaces/validation';\r\nimport {\r\n IValidator,\r\n ValidatedValue,\r\n IValidatedData,\r\n IValidatedCommonProps,\r\n ICommonProps,\r\n ICommonProp,\r\n} from '../interfaces/index';\r\n\r\nexport enum ValidatorType {\r\n number = 'must be a number',\r\n integer = 'must be an integer',\r\n integerUnlimited = 'must be an integer or infinity',\r\n moreOrEqual = 'must be a number greater than (or equal to) {arg1}',\r\n itemList = 'must be an array of items {arg1}',\r\n boolean = 'must be a boolean',\r\n object = 'must be an object',\r\n element = 'must be an html element',\r\n function = 'must be a function',\r\n funcOfxArguments = 'must have {arg1} argument(s)',\r\n funcOfxAndMoreArguments = 'must have at least {arg1} argument(s)',\r\n funcOfXToYArguments = 'must have {arg1} to {arg2} arguments',\r\n oneOfCan = 'can be present as only one item of {arg1} list',\r\n oneOfMust = 'must be present as only one item of {arg1} list',\r\n or = 'must satisfy at least 1 validator from {arg1} list',\r\n enum = 'must belong to {arg1} list',\r\n}\r\n\r\nconst getError = (msg: ValidatorType, args?: string[]) =>\r\n (args || ['']).reduce((acc, arg, index) => acc.replace(`{arg${index + 1}}`, arg), msg);\r\n\r\nconst getNumber = (value: unknown): number =>\r\n typeof value === 'number' || (typeof value === 'string' && value !== '')\r\n ? Number(value)\r\n : NaN;\r\n\r\nconst onNumber = (value: unknown): ValidatedValue => {\r\n const parsedValue = getNumber(value);\r\n const errors = [];\r\n if (Number.isNaN(parsedValue)) {\r\n errors.push(ValidatorType.number);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onInteger = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n value = getNumber(value);\r\n const parsedValue = parseInt(String(value), 10);\r\n if (value !== parsedValue) {\r\n errors.push(ValidatorType.integer);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onIntegerUnlimited = (value: unknown): ValidatedValue => {\r\n let parsedValue = value;\r\n const errors = [];\r\n value = getNumber(value);\r\n if (!Number.isFinite(value)) {\r\n parsedValue = value;\r\n } else {\r\n parsedValue = parseInt(String(value), 10);\r\n }\r\n if (value !== parsedValue) {\r\n errors.push(ValidatorType.integerUnlimited);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onMoreOrEqual = (limit: number, fallback?: boolean) => (value: unknown): ValidatedValue => {\r\n const result = onNumber(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n let parsedValue = result.value as number;\r\n const errors = [];\r\n if (parsedValue < limit) {\r\n if (!fallback) {\r\n errors.push(getError(ValidatorType.moreOrEqual, [String(limit)]));\r\n } else {\r\n parsedValue = limit;\r\n }\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onBoolean = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n let parsedValue = value;\r\n if (value === 'true') {\r\n parsedValue = true;\r\n } else if (value === 'false') {\r\n parsedValue = false;\r\n }\r\n if (typeof parsedValue !== 'boolean') {\r\n errors.push(ValidatorType.boolean);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onObject = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (Object.prototype.toString.call(value) !== '[object Object]') {\r\n errors.push(ValidatorType.object);\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onHtmlElement = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (!(value instanceof Element) && !(value instanceof HTMLDocument)) {\r\n errors.push(ValidatorType.element);\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onItemList = (value: unknown): ValidatedValue => {\r\n let parsedValue = value;\r\n const errors = [];\r\n if (!Array.isArray(value)) {\r\n errors.push(ValidatorType.itemList);\r\n parsedValue = [];\r\n } else if (!value.length) {\r\n errors.push(getError(ValidatorType.itemList, ['with at least 1 item']));\r\n } else if (value.length > 1) {\r\n const type = typeof value[0];\r\n for (let i = value.length - 1; i >= 0; i--) {\r\n if (typeof value[i] !== type) {\r\n errors.push(getError(ValidatorType.itemList, ['of items of the same type']));\r\n break;\r\n }\r\n }\r\n }\r\n return { value: parsedValue as unknown[], isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\ntype Func = (...args: unknown[]) => void;\r\n\r\nconst onFunction = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (typeof value !== 'function') {\r\n errors.push(ValidatorType.function);\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXArguments = (argsCount: number) => (value: unknown) => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length !== argsCount) {\r\n errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXAndMoreArguments = (argsCount: number) => (value: unknown): ValidatedValue => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length < argsCount) {\r\n errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXToYArguments = (from: number, to: number) => (value: unknown): ValidatedValue => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length < from || (value as Func).length > to) {\r\n errors.push(getError(ValidatorType.funcOfXToYArguments, [String(from), String(to)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onOneOf = (tokens: string[], must: boolean) => (value: unknown, context?: IValidationContext): ValidatedValue => {\r\n const errors = [];\r\n const isSet = value !== void 0;\r\n let noOneIsPresent = !isSet;\r\n const err = must ? ValidatorType.oneOfMust : ValidatorType.oneOfCan;\r\n if (!Array.isArray(tokens) || !tokens.length) {\r\n errors.push(getError(err, ['undefined']));\r\n } else {\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n if (typeof token !== 'string') {\r\n errors.push(getError(err, [tokens.join('\", \"')]) + ' (non-string token)');\r\n break;\r\n }\r\n const isAnotherPresent = context && Object.prototype.hasOwnProperty.call(context, token);\r\n if (isSet && isAnotherPresent) {\r\n errors.push(getError(err, [tokens.join('\", \"')]) + ` (${token} is present)`);\r\n break;\r\n }\r\n if (noOneIsPresent && isAnotherPresent) {\r\n noOneIsPresent = false;\r\n }\r\n }\r\n if (must && noOneIsPresent) {\r\n errors.push(getError(err, [tokens.join('\", \"')]));\r\n }\r\n }\r\n return { value, isSet, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onOr = (validators: IValidator[]) => (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (validators.every(validator => !validator.method(value).isValid)) {\r\n errors.push(validators.map(v => v.type).join(' OR '));\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nenum AbstractEnum { }\r\ntype TEnum = typeof AbstractEnum;\r\n\r\nconst onEnum = (list: TEnum) => (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n const values = Object.keys(list).filter(k => isNaN(Number(k))).map(k => list[k as unknown as number]);\r\n if (!values.some(item => item === value)) {\r\n errors.push(getError(ValidatorType.enum, ['[' + values.join(',') + ']']));\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nexport const VALIDATORS = {\r\n NUMBER: {\r\n type: ValidatorType.number,\r\n method: onNumber\r\n },\r\n INTEGER: {\r\n type: ValidatorType.integer,\r\n method: onInteger\r\n },\r\n INTEGER_UNLIMITED: {\r\n type: ValidatorType.integerUnlimited,\r\n method: onIntegerUnlimited\r\n },\r\n MORE_OR_EQUAL: (limit: number, fallback?: boolean): IValidator => ({\r\n type: ValidatorType.moreOrEqual,\r\n method: onMoreOrEqual(limit, fallback)\r\n }),\r\n BOOLEAN: {\r\n type: ValidatorType.boolean,\r\n method: onBoolean\r\n },\r\n OBJECT: {\r\n type: ValidatorType.object,\r\n method: onObject\r\n },\r\n ITEM_LIST: {\r\n type: ValidatorType.itemList,\r\n method: onItemList\r\n },\r\n ELEMENT: {\r\n type: ValidatorType.element,\r\n method: onHtmlElement\r\n },\r\n FUNC: {\r\n type: ValidatorType.function,\r\n method: onFunction\r\n },\r\n FUNC_WITH_X_ARGUMENTS: (count: number): IValidator => ({\r\n type: ValidatorType.funcOfxArguments,\r\n method: onFunctionWithXArguments(count)\r\n }),\r\n FUNC_WITH_X_AND_MORE_ARGUMENTS: (count: number): IValidator => ({\r\n type: ValidatorType.funcOfxAndMoreArguments,\r\n method: onFunctionWithXAndMoreArguments(count)\r\n }),\r\n FUNC_WITH_X_TO_Y_ARGUMENTS: (from: number, to: number): IValidator => ({\r\n type: ValidatorType.funcOfXToYArguments,\r\n method: onFunctionWithXToYArguments(from, to)\r\n }),\r\n ONE_OF_CAN: (list: string[]): IValidator => ({\r\n type: ValidatorType.oneOfCan,\r\n method: onOneOf(list, false)\r\n }),\r\n ONE_OF_MUST: (list: string[]): IValidator => ({\r\n type: ValidatorType.oneOfMust,\r\n method: onOneOf(list, true)\r\n }),\r\n OR: (list: IValidator[]): IValidator => ({\r\n type: ValidatorType.or,\r\n method: onOr(list)\r\n }),\r\n ENUM: (list: TEnum): IValidator => ({\r\n type: ValidatorType.enum,\r\n method: onEnum(list)\r\n })\r\n};\r\n\r\nexport class ValidatedData implements IValidatedData {\r\n\r\n context: IValidationContext;\r\n isValidContext: boolean;\r\n isValid: boolean;\r\n errors: string[];\r\n params: IValidatedCommonProps<PropertyKey>;\r\n\r\n private contextErrors: string[];\r\n\r\n constructor(context: unknown) {\r\n this.params = {};\r\n this.contextErrors = [];\r\n this.errors = [];\r\n this.isValid = true;\r\n this.setContext(context);\r\n }\r\n\r\n private setContext(context: unknown): void {\r\n if (!context || Object.prototype.toString.call(context) !== '[object Object]') {\r\n this.setCommonError('context is not an object');\r\n this.isValidContext = false;\r\n } else {\r\n this.isValidContext = true;\r\n }\r\n this.context = context as IValidationContext;\r\n }\r\n\r\n private setValidity() {\r\n this.errors = Object.keys(this.params).reduce((acc: string[], key: string) => [\r\n ...acc, ...this.params[key].errors\r\n ], []);\r\n this.isValid = !this.errors.length;\r\n }\r\n\r\n setCommonError(error: string): void {\r\n this.contextErrors.push(error);\r\n this.errors.push(error);\r\n this.isValid = false;\r\n }\r\n\r\n setParam(token: string, value: ValidatedValue): void {\r\n if (!value.isValid) {\r\n value.errors = !value.isSet\r\n ? [`\"${token}\" must be set`]\r\n : value.errors.map((err: string) =>\r\n `\"${token}\" ${err}`\r\n );\r\n }\r\n this.params[token] = value;\r\n this.setValidity();\r\n }\r\n\r\n showErrors(): string {\r\n return this.errors.length\r\n ? 'validation failed: ' + this.errors.join(', ')\r\n : '';\r\n }\r\n}\r\n\r\nexport const runValidator = (\r\n current: ValidatedValue,\r\n validator: IValidator,\r\n context: IValidationContext\r\n): ValidatedValue => {\r\n const { value, errors } = current;\r\n const result = validator.method(value, context);\r\n const _errors = [...errors, ...result.errors];\r\n return {\r\n value: result.value,\r\n isSet: result.isSet,\r\n isValid: !_errors.length,\r\n errors: _errors\r\n };\r\n};\r\n\r\nconst getDefault = (value: unknown, prop: ICommonProp): ValidatedValue => {\r\n const empty = value === void 0;\r\n const auto = !prop.mandatory && prop.defaultValue !== void 0;\r\n return {\r\n value: !empty ? value : (auto ? prop.defaultValue : void 0),\r\n isSet: !empty || auto,\r\n isValid: !empty || !prop.mandatory,\r\n errors: []\r\n };\r\n};\r\n\r\nexport const validateOne = (\r\n context: IValidationContext, name: string, prop: ICommonProp\r\n): ValidatedValue => {\r\n const result = getDefault(context[name], prop);\r\n if (!result.isSet) {\r\n const oneOfMust = prop.validators.find(v => v.type === ValidatorType.oneOfMust);\r\n if (oneOfMust) {\r\n return runValidator(result, oneOfMust, context);\r\n }\r\n } else {\r\n for (const validator of Object.values(prop.validators)) {\r\n const current = runValidator(result, validator, context);\r\n if (!current.isValid && prop.defaultValue !== void 0) {\r\n return {\r\n value: prop.defaultValue,\r\n isSet: true,\r\n isValid: true,\r\n errors: []\r\n };\r\n }\r\n Object.assign(result, current);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport const validate = (\r\n context: unknown, params: ICommonProps<PropertyKey>\r\n): IValidatedData => {\r\n const data = new ValidatedData(context);\r\n Object.entries(params).forEach(([key, prop]) =>\r\n data.setParam(key, data.isValidContext\r\n ? validateOne(data.context, key, prop)\r\n : getDefault(void 0, prop)\r\n )\r\n );\r\n return data;\r\n};\r\n","export default {\n name: 'vscroll',\n version: '1.5.4'\n};\n","import { IAdapterProp } from '../../interfaces/index';\r\nimport { AdapterPropName } from './props';\r\n\r\ninterface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nconst getBox = (id?: number): IWanted['box'] | undefined => {\r\n return wantedStorage.get(id || -1)?.box;\r\n};\r\n\r\nconst setBox = ({ name, wanted }: IAdapterProp, id?: number): boolean => {\r\n const Wanted = wantedStorage.get(id || -1);\r\n if (wanted && Wanted && !Wanted.box[name] && !Wanted.block) {\r\n const { firstVisible: a, firstVisible$: a$ } = AdapterPropName;\r\n const { lastVisible: b, lastVisible$: b$ } = AdapterPropName;\r\n Wanted.box[a] = Wanted.box[a$] = [a, a$].some(n => n === name) || Wanted.box[a];\r\n Wanted.box[b] = Wanted.box[b$] = [b, b$].some(n => n === name) || Wanted.box[b];\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst setBlock = (value: boolean, id?: number): void => {\r\n const Wanted = wantedStorage.get(id || -1);\r\n if (Wanted) {\r\n Wanted.block = value;\r\n }\r\n};\r\n\r\nexport const wantedUtils = {\r\n getBox,\r\n setBox,\r\n setBlock\r\n};\r\n\r\nexport const wantedStorage = new Map<number, IWanted>();\r\n","import { AdapterPropName, AdapterPropType, getDefaultAdapterProps, reactiveConfigStorage } from './props';\r\nimport core from '../../version';\r\nimport { Reactive } from '../reactive';\r\nimport { wantedStorage, wantedUtils } from './wanted';\r\nimport { IReactivePropsStore, IAdapterConfig } from '../../interfaces/index';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class AdapterContext {\r\n\r\n constructor(config: IAdapterConfig) {\r\n const { mock, reactive } = config;\r\n const id = ++instanceCount;\r\n const conf = { configurable: true };\r\n const reactivePropsStore: IReactivePropsStore = {};\r\n wantedStorage.set(id, { box: {}, block: false });\r\n\r\n // set up permanent props\r\n Object.defineProperty(this, AdapterPropName.id, { get: () => id, ...conf });\r\n Object.defineProperty(this, AdapterPropName.mock, { get: () => mock, ...conf });\r\n Object.defineProperty(this, AdapterPropName.augmented, { get: () => false, ...conf });\r\n Object.defineProperty(this, AdapterPropName.version, { get: () => core.version, ...conf });\r\n\r\n // set up default props, they will be reassigned during the Adapter instantiation\r\n getDefaultAdapterProps()\r\n .filter(({ permanent }) => !permanent)\r\n .forEach(prop => {\r\n let { value } = prop;\r\n\r\n // reactive props might be reconfigured by the vscroll consumer\r\n if (reactive && prop.type === AdapterPropType.Reactive) {\r\n const react = reactive[prop.name];\r\n if (react) {\r\n // here we have a configured reactive property that came from the outer config\r\n // this prop must be exposed via Adapter, but at the same time we need to\r\n // persist the original default value as it will be used by the Adapter internally\r\n reactivePropsStore[prop.name] = {\r\n ...react,\r\n default: value as Reactive<unknown> // persisting the default native Reactive prop\r\n };\r\n value = react.source; // exposing the configured prop instead of the default one\r\n }\r\n }\r\n\r\n Object.defineProperty(this, prop.name, {\r\n get: () => {\r\n wantedUtils.setBox(prop, id);\r\n return value;\r\n },\r\n ...conf\r\n });\r\n });\r\n\r\n if (reactive) { // save both configured and default reactive props in the store\r\n reactiveConfigStorage.set(id, reactivePropsStore);\r\n }\r\n }\r\n}\r\n","import { AdapterContext } from './adapter/context';\r\nimport { reactiveConfigStorage } from './adapter/props';\r\nimport { wantedStorage } from './adapter/wanted';\r\nimport {\r\n IDatasource,\r\n IDatasourceConstructed,\r\n DatasourceGet,\r\n Settings,\r\n DevSettings,\r\n IAdapter,\r\n IAdapterConfig,\r\n} from '../interfaces/index';\r\n\r\nexport class DatasourceGeneric<Data> implements IDatasourceConstructed<Data> {\r\n get: DatasourceGet<Data>;\r\n settings?: Settings<Data>;\r\n devSettings?: DevSettings;\r\n adapter: IAdapter<Data>;\r\n\r\n constructor(datasource: IDatasource<Data>, config?: IAdapterConfig) {\r\n this.get = datasource.get;\r\n if (datasource.settings) {\r\n this.settings = datasource.settings;\r\n }\r\n if (datasource.devSettings) {\r\n this.devSettings = datasource.devSettings;\r\n }\r\n const adapterContext = new AdapterContext(config || { mock: false });\r\n this.adapter = adapterContext as unknown as IAdapter<Data>;\r\n }\r\n\r\n dispose(): void { // todo: should it be published?\r\n reactiveConfigStorage.delete(this.adapter.id);\r\n wantedStorage.delete(this.adapter.id);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const makeDatasource = (getConfig?: () => IAdapterConfig) =>\r\n class <Data = unknown> extends DatasourceGeneric<Data> {\r\n constructor(datasource: IDatasource<Data>) {\r\n const config = typeof getConfig === 'function' ? getConfig() : void 0;\r\n super(datasource, config);\r\n }\r\n };\r\n\r\nexport const Datasource = makeDatasource();\r\n","import { VALIDATORS } from './validation';\r\nimport { ICommonProps } from '../interfaces/index';\r\n\r\nconst { OBJECT, FUNC_WITH_X_AND_MORE_ARGUMENTS } = VALIDATORS;\r\n\r\nexport enum DatasourceProps {\r\n get = 'get',\r\n settings = 'settings',\r\n devSettings = 'devSettings',\r\n}\r\n\r\nexport const DATASOURCE: ICommonProps<DatasourceProps> = {\r\n [DatasourceProps.get]: {\r\n validators: [FUNC_WITH_X_AND_MORE_ARGUMENTS(2)],\r\n mandatory: true\r\n },\r\n [DatasourceProps.settings]: {\r\n validators: [OBJECT]\r\n },\r\n [DatasourceProps.devSettings]: {\r\n validators: [OBJECT]\r\n }\r\n};\r\n","import { VALIDATORS } from './validation';\r\nimport { ICommonProps } from '../interfaces/index';\r\nimport { SizeStrategy, Direction } from './common';\r\n\r\nconst { NUMBER, INTEGER, INTEGER_UNLIMITED, MORE_OR_EQUAL, BOOLEAN, ELEMENT, FUNC, OR, ENUM } = VALIDATORS;\r\n\r\nenum Settings {\r\n adapter = 'adapter',\r\n startIndex = 'startIndex',\r\n minIndex = 'minIndex',\r\n maxIndex = 'maxIndex',\r\n itemSize = 'itemSize',\r\n bufferSize = 'bufferSize',\r\n padding = 'padding',\r\n infinite = 'infinite',\r\n horizontal = 'horizontal',\r\n windowViewport = 'windowViewport',\r\n viewportElement = 'viewportElement',\r\n inverse = 'inverse',\r\n onBeforeClip = 'onBeforeClip',\r\n sizeStrategy = 'sizeStrategy',\r\n}\r\n\r\nenum DevSettings {\r\n debug = 'debug',\r\n immediateLog = 'immediateLog',\r\n logProcessRun = 'logProcessRun',\r\n logTime = 'logTime',\r\n throttle = 'throttle',\r\n initDelay = 'initDelay',\r\n initWindowDelay = 'initWindowDelay',\r\n cacheData = 'cacheData',\r\n cacheOnReload = 'cacheOnReload',\r\n dismissOverflowAnchor = 'dismissOverflowAnchor',\r\n directionPriority = 'directionPriority',\r\n}\r\n\r\nexport const MIN = {\r\n [Settings.itemSize]: 1,\r\n [Settings.bufferSize]: 1,\r\n [Settings.padding]: 0.01,\r\n [DevSettings.throttle]: 0,\r\n [DevSettings.initDelay]: 0,\r\n [DevSettings.initWindowDelay]: 0,\r\n};\r\n\r\nexport const SETTINGS: ICommonProps<Settings> = {\r\n [Settings.adapter]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.startIndex]: {\r\n validators: [INTEGER],\r\n defaultValue: 1\r\n },\r\n [Settings.minIndex]: {\r\n validators: [INTEGER_UNLIMITED],\r\n defaultValue: -Infinity\r\n },\r\n [Settings.maxIndex]: {\r\n validators: [INTEGER_UNLIMITED],\r\n defaultValue: Infinity\r\n },\r\n [Settings.itemSize]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[Settings.itemSize], true)],\r\n defaultValue: NaN\r\n },\r\n [Settings.bufferSize]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[Settings.bufferSize], true)],\r\n defaultValue: 5\r\n },\r\n [Settings.padding]: {\r\n validators: [NUMBER, MORE_OR_EQUAL(MIN[Settings.padding], true)],\r\n defaultValue: 0.5\r\n },\r\n [Settings.infinite]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.horizontal]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.windowViewport]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.viewportElement]: {\r\n validators: [OR([ELEMENT, FUNC])],\r\n defaultValue: null\r\n },\r\n [Settings.inverse]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.onBeforeClip]: {\r\n validators: [FUNC],\r\n defaultValue: null\r\n },\r\n [Settings.sizeStrategy]: {\r\n validators: [ENUM(SizeStrategy)],\r\n defaultValue: SizeStrategy.Average\r\n },\r\n};\r\n\r\nexport const DEV_SETTINGS: ICommonProps<DevSettings> = {\r\n [DevSettings.debug]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.immediateLog]: {\r\n validators: [BOOLEAN],\r\n defaultValue: true\r\n },\r\n [DevSettings.logProcessRun]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.logTime]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.throttle]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.throttle], true)],\r\n defaultValue: 40\r\n },\r\n [DevSettings.initDelay]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.initDelay], true)],\r\n defaultValue: 1\r\n },\r\n [DevSettings.initWindowDelay]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.initWindowDelay], true)],\r\n defaultValue: 40\r\n },\r\n [DevSettings.cacheData]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.cacheOnReload]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.dismissOverflowAnchor]: {\r\n validators: [BOOLEAN],\r\n defaultValue: true\r\n },\r\n [DevSettings.directionPriority]: {\r\n validators: [ENUM(Direction)],\r\n defaultValue: Direction.backward\r\n },\r\n};\r\n","export enum CommonProcess {\r\n init = 'init',\r\n scroll = 'scroll',\r\n start = 'start',\r\n preFetch = 'preFetch',\r\n fetch = 'fetch',\r\n postFetch = 'postFetch',\r\n render = 'render',\r\n preClip = 'preClip',\r\n clip = 'clip',\r\n adjust = 'adjust',\r\n end = 'end',\r\n}\r\n\r\nexport enum AdapterProcess {\r\n reset = 'adapter.reset',\r\n reload = 'adapter.reload',\r\n append = 'adapter.append',\r\n prepend = 'adapter.prepend',\r\n check = 'adapter.check',\r\n remove = 'adapter.remove',\r\n replace = 'adapter.replace',\r\n update = 'adapter.update',\r\n clip = 'adapter.clip',\r\n insert = 'adapter.insert',\r\n fix = 'adapter.fix',\r\n}\r\n\r\nexport enum ProcessStatus {\r\n start = 'start',\r\n next = 'next',\r\n done = 'done',\r\n error = 'error'\r\n}\r\n","import { VALIDATORS } from './validation';\r\nimport { DatasourceProps as AdapterResetParams } from './datasource';\r\nimport { AdapterProcess as Process } from '../processes/misc/enums';\r\nimport { ICommonProps, AdapterProcessMap } from '../interfaces/index';\r\n\r\nconst {\r\n INTEGER,\r\n INTEGER_UNLIMITED,\r\n BOOLEAN,\r\n OBJECT,\r\n ITEM_LIST,\r\n FUNC_WITH_X_ARGUMENTS,\r\n FUNC_WITH_X_AND_MORE_ARGUMENTS,\r\n FUNC_WITH_X_TO_Y_ARGUMENTS,\r\n ONE_OF_MUST,\r\n ONE_OF_CAN,\r\n OR,\r\n} = VALIDATORS;\r\n\r\nenum AdapterNoParams { }\r\nconst NO_METHOD_PARAMS: ICommonProps<AdapterNoParams> = {};\r\n\r\nconst RESET_METHOD_PARAMS: ICommonProps<AdapterResetParams> = {\r\n [AdapterResetParams.get]: {\r\n validators: [FUNC_WITH_X_AND_MORE_ARGUMENTS(2)]\r\n },\r\n [AdapterResetParams.settings]: {\r\n validators: [OBJECT]\r\n },\r\n [AdapterResetParams.devSettings]: {\r\n validators: [OBJECT]\r\n },\r\n};\r\n\r\nenum AdapterReloadParams {\r\n reloadIndex = 'reloadIndex',\r\n}\r\n\r\nconst RELOAD_METHOD_PARAMS: ICommonProps<AdapterReloadParams> = {\r\n [AdapterReloadParams.reloadIndex]: {\r\n validators: [INTEGER]\r\n },\r\n};\r\n\r\nenum AdapterPrependParams {\r\n items = 'items',\r\n bof = 'bof',\r\n increase = 'increase',\r\n}\r\n\r\nconst PREPEND_METHOD_PARAMS: ICommonProps<AdapterPrependParams> = {\r\n [AdapterPrependParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterPrependParams.bof]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [AdapterPrependParams.increase]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterAppendParams {\r\n items = 'items',\r\n eof = 'eof',\r\n decrease = 'decrease',\r\n}\r\n\r\nconst APPEND_METHOD_PARAMS: ICommonProps<AdapterAppendParams> = {\r\n [AdapterAppendParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterAppendParams.eof]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [AdapterAppendParams.decrease]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterRemoveParams {\r\n predicate = 'predicate',\r\n indexes = 'indexes',\r\n increase = 'increase',\r\n}\r\n\r\nconst REMOVE_METHOD_PARAMS: ICommonProps<AdapterRemoveParams> = {\r\n [AdapterRemoveParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([AdapterRemoveParams.indexes])]\r\n },\r\n [AdapterRemoveParams.indexes]: {\r\n validators: [ITEM_LIST, ONE_OF_MUST([AdapterRemoveParams.predicate])]\r\n },\r\n [AdapterRemoveParams.increase]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterClipParams {\r\n backwardOnly = 'backwardOnly',\r\n forwardOnly = 'forwardOnly',\r\n}\r\n\r\nconst CLIP_METHOD_PARAMS: ICommonProps<AdapterClipParams> = {\r\n [AdapterClipParams.backwardOnly]: {\r\n validators: [BOOLEAN, ONE_OF_CAN([AdapterClipParams.forwardOnly])],\r\n defaultValue: false\r\n },\r\n [AdapterClipParams.forwardOnly]: {\r\n validators: [BOOLEAN, ONE_OF_CAN([AdapterClipParams.backwardOnly])],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterInsertParams {\r\n items = 'items',\r\n before = 'before',\r\n after = 'after',\r\n beforeIndex = 'beforeIndex',\r\n afterIndex = 'afterIndex',\r\n decrease = 'decrease',\r\n}\r\n\r\nconst INSERT_METHOD_PARAMS: ICommonProps<AdapterInsertParams> = {\r\n [AdapterInsertParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterInsertParams.before]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([\r\n AdapterInsertParams.after, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.after]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.beforeIndex]: {\r\n validators: [INTEGER, ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.afterIndex]: {\r\n validators: [INTEGER, ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.beforeIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.decrease]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterReplaceParams {\r\n items = 'items',\r\n predicate = 'predicate',\r\n fixRight = 'fixRight',\r\n}\r\n\r\nconst REPLACE_METHOD_PARAMS: ICommonProps<AdapterReplaceParams> = {\r\n [AdapterInsertParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterReplaceParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)],\r\n mandatory: true\r\n },\r\n [AdapterReplaceParams.fixRight]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n }\r\n};\r\n\r\nenum AdapterUpdateParams {\r\n predicate = 'predicate',\r\n fixRight = 'fixRight',\r\n}\r\n\r\nconst UPDATE_METHOD_PARAMS: ICommonProps<AdapterUpdateParams> = {\r\n [AdapterUpdateParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)],\r\n mandatory: true\r\n },\r\n [AdapterUpdateParams.fixRight]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterFixParams {\r\n scrollPosition = 'scrollPosition',\r\n minIndex = 'minIndex',\r\n maxIndex = 'maxIndex',\r\n updater = 'updater',\r\n scrollToItem = 'scrollToItem',\r\n scrollToItemOpt = 'scrollToItemOpt',\r\n}\r\n\r\nconst FIX_METHOD_PARAMS: ICommonProps<AdapterFixParams> = {\r\n [AdapterFixParams.scrollPosition]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.minIndex]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.maxIndex]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.updater]: {\r\n validators: [FUNC_WITH_X_TO_Y_ARGUMENTS(1, 2)]\r\n },\r\n [AdapterFixParams.scrollToItem]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)]\r\n },\r\n [AdapterFixParams.scrollToItemOpt]: {\r\n validators: [OR([BOOLEAN, OBJECT])]\r\n },\r\n};\r\n\r\nexport const AdapterMethods: AdapterProcessMap<{ [key: string]: string }> = {\r\n [Process.reset]: AdapterResetParams,\r\n [Process.reload]: AdapterReloadParams,\r\n [Process.prepend]: AdapterPrependParams,\r\n [Process.append]: AdapterAppendParams,\r\n [Process.check]: AdapterNoParams,\r\n [Process.remove]: AdapterRemoveParams,\r\n [Process.clip]: AdapterClipParams,\r\n [Process.insert]: AdapterInsertParams,\r\n [Process.replace]: AdapterReplaceParams,\r\n [Process.update]: AdapterUpdateParams,\r\n [Process.fix]: AdapterFixParams,\r\n};\r\n\r\nexport const ADAPTER_METHODS: AdapterProcessMap<ICommonProps<PropertyKey>> = {\r\n [Process.reset]: RESET_METHOD_PARAMS,\r\n [Process.reload]: RELOAD_METHOD_PARAMS,\r\n [Process.prepend]: PREPEND_METHOD_PARAMS,\r\n [Process.append]: APPEND_METHOD_PARAMS,\r\n [Process.check]: NO_METHOD_PARAMS,\r\n [Process.remove]: REMOVE_METHOD_PARAMS,\r\n [Process.clip]: CLIP_METHOD_PARAMS,\r\n [Process.insert]: INSERT_METHOD_PARAMS,\r\n [Process.replace]: REPLACE_METHOD_PARAMS,\r\n [Process.update]: UPDATE_METHOD_PARAMS,\r\n [Process.fix]: FIX_METHOD_PARAMS,\r\n};\r\n","import { SETTINGS, DEV_SETTINGS, validate, validateOne, VALIDATORS, SizeStrategy, Direction } from '../inputs/index';\r\nimport { Settings as ISettings, DevSettings as IDevSettings, ICommonProps, ItemsProcessor } from '../interfaces/index';\r\n\r\nexport class Settings<Data = unknown> implements ISettings, IDevSettings {\r\n\r\n // user settings\r\n adapter: boolean;\r\n startIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n itemSize: number;\r\n bufferSize: number;\r\n padding: number;\r\n infinite: boolean;\r\n horizontal: boolean;\r\n windowViewport: boolean;\r\n viewportElement: HTMLElement | (() => void) | null;\r\n inverse: boolean; // if true, bwd padding element will have a priority when filling the viewport (if lack of items)\r\n onBeforeClip: ItemsProcessor | null; // if set, it will be run before clipping items from Buffer after they are hidden\r\n sizeStrategy: SizeStrategy; // \"average\" | \"frequent\", determines behavior of unknown items\r\n\r\n /**\r\n * Development setting.\r\n * If true, logging is enabled.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n debug: boolean; // if true, \r\n\r\n /**\r\n * Development setting.\r\n * If false, in-memory logging is enabled, Adapter.showLog() method should be called to print the log.\r\n * Default value: true.\r\n * @type {boolean}\r\n */\r\n immediateLog: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, time differences will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logTime: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, process fire/run info will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logProcessRun: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If set, scroll event handling is throttled (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n throttle: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set, the Workflow initialization will be postponed (ms).\r\n * Default value: 1. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set and the entire window is scrollable, the Workflow initialization will be postponed (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initWindowDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If true, item's data will be cached along with item's size and index.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheData: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, cache will not be flushed on reload.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheOnReload: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, the viewport will receive \"overflowAnchor: none\" css property.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n dismissOverflowAnchor: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * Determines the strategy of fixing the difference between estimated and real (rendered) sizes\r\n * on scroll position adjustments. If set to 'backward', the difference is always resolved in favour of the\r\n * backward direction: top/left content is fixed and appears in accordance with pre-render expectations.\r\n * If set to 'forward', both directions could be used, and there is a case when bottom/right content is fixed:\r\n * new items are to the left of the previously rendered\r\n * and at least one previously rendered item remains.\r\n * Default value: 'backward'. Allowed values: 'backward', 'forward'.\r\n * @type {string}\r\n */\r\n directionPriority: Direction;\r\n\r\n /**\r\n * Internal setting. Stores the index of the Scroller instance.\r\n * @type {number}\r\n */\r\n instanceIndex: number;\r\n\r\n /**\r\n * Internal setting. Stores the Workflow initialization delay based on initDelay and initWindowDelay settings.\r\n * @type {number}\r\n */\r\n initializeDelay: number;\r\n\r\n /**\r\n * Internal setting. Stores the viewport based on viewportElement setting (which can be element or function).\r\n * @type {HTMLElement|null}\r\n */\r\n viewport: HTMLElement | null;\r\n\r\n constructor(\r\n settings: ISettings<Data> | undefined, devSettings: IDevSettings | undefined, instanceIndex: number\r\n ) {\r\n this.parseInput(settings, SETTINGS);\r\n this.parseInput(devSettings, DEV_SETTINGS);\r\n this.instanceIndex = instanceIndex;\r\n this.initializeDelay = this.getInitializeDelay();\r\n this.viewport = this.getViewport();\r\n // todo: min/max indexes must be ignored if infinite mode is enabled ??\r\n }\r\n\r\n parseInput(input: ISettings<Data> | IDevSettings | undefined, props: ICommonProps<PropertyKey>): void {\r\n const result = validate(input, props);\r\n if (!result.isValid) {\r\n throw new Error('Invalid settings');\r\n }\r\n Object.entries(result.params).forEach(([key, par]) =>\r\n Object.assign(this, { [key]: par.value })\r\n );\r\n }\r\n\r\n getInitializeDelay(): number {\r\n let result = 0;\r\n if (this.windowViewport && this.initWindowDelay && !('scrollRestoration' in history)) {\r\n result = this.initWindowDelay;\r\n }\r\n if (this.initDelay > 0) {\r\n result = Math.max(result, this.initDelay);\r\n }\r\n return result;\r\n }\r\n\r\n getViewport(): HTMLElement | null {\r\n if (typeof this.viewportElement !== 'function') {\r\n return this.viewportElement;\r\n }\r\n const value = this.viewportElement();\r\n const result = validateOne({ value }, 'value', { validators: [VALIDATORS.ELEMENT] });\r\n if (!result.isValid) {\r\n return null; // fallback to default (null) if Function didn't return HTML element synchronously\r\n }\r\n return result.value as HTMLElement;\r\n }\r\n}\r\n","import { AdapterProcess, ProcessStatus } from './enums';\r\nimport { Scroller } from '../../scroller';\r\nimport { ADAPTER_METHODS, validate } from '../../inputs/index';\r\nimport { ProcessName, IBaseProcess, IBaseAdapterProcess, IAdapterInput } from '../../interfaces/index';\r\n\r\nexport const BaseProcessFactory = (process: ProcessName): IBaseProcess =>\r\n\r\n class BaseProcess {\r\n\r\n static process: ProcessName = process;\r\n\r\n };\r\n\r\nexport const BaseAdapterProcessFactory = (process: AdapterProcess): IBaseAdapterProcess =>\r\n\r\n class BaseAdapterProcess extends (BaseProcessFactory(process) as IBaseProcess) {\r\n\r\n static process: AdapterProcess = process;\r\n\r\n static parseInput<T>(\r\n scroller: Scroller, options: T, ignoreErrors = false, _process?: AdapterProcess\r\n ): IAdapterInput<T> {\r\n const result: IAdapterInput<T> = {\r\n data: validate(options, ADAPTER_METHODS[_process || process])\r\n };\r\n\r\n if (result.data.isValid) {\r\n result.params = Object.entries(result.data.params)\r\n .reduce((acc, [key, { value }]) => ({\r\n ...acc,\r\n [key]: value\r\n }), {} as T);\r\n } else {\r\n scroller.logger.log(() => result.data.showErrors());\r\n if (!ignoreErrors) {\r\n scroller.workflow.call({\r\n process,\r\n status: ProcessStatus.error,\r\n payload: { error: `Wrong argument of the \"${process}\" method call` }\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n };\r\n","import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ProcessName } from '../interfaces/index';\r\n\r\nconst initProcesses = [CommonProcess.init, AdapterProcess.reset, AdapterProcess.reload];\r\n\r\nexport default class Init extends BaseProcessFactory(CommonProcess.init) {\r\n\r\n static run(scroller: Scroller, process: ProcessName): void {\r\n const { state, workflow } = scroller;\r\n const isInitial = initProcesses.includes(process);\r\n scroller.logger.logCycle(true);\r\n state.startWorkflowCycle(isInitial, process);\r\n workflow.call({\r\n process: Init.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\nimport { ScrollEventData, ScrollerWorkflow } from '../interfaces/index';\r\n\r\nexport default class Scroll extends BaseProcessFactory(CommonProcess.scroll) {\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n static run(scroller: Scroller, payload?: { event?: Event }): void {\r\n const { workflow, viewport } = scroller;\r\n const position = viewport.scrollPosition;\r\n\r\n if (Scroll.onSynthetic(scroller, position)) {\r\n return;\r\n }\r\n\r\n Scroll.onThrottle(scroller, position, () =>\r\n Scroll.onScroll(scroller, workflow)\r\n );\r\n }\r\n\r\n static onSynthetic(scroller: Scroller, position: number): boolean {\r\n const { scroll } = scroller.state;\r\n const synthPos = scroll.syntheticPosition;\r\n if (synthPos !== null) {\r\n if (scroll.syntheticFulfill) {\r\n scroll.syntheticPosition = null;\r\n }\r\n if (!scroll.syntheticFulfill || synthPos === position) {\r\n scroller.logger.log(() => [\r\n 'skipping scroll', position, `[${scroll.syntheticFulfill ? '' : 'pre-'}synthetic]`\r\n ]);\r\n return true;\r\n }\r\n scroller.logger.log(() => [\r\n 'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos\r\n ]);\r\n }\r\n return false;\r\n }\r\n\r\n static onThrottle(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, settings: { throttle }, logger } = scroller;\r\n scroll.current = Scroll.getScrollEvent(position, scroll.previous);\r\n const { direction, time } = scroll.current;\r\n const timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;\r\n const delta = throttle - timeDiff;\r\n const shouldDelay = isFinite(delta) && delta > 0;\r\n const alreadyDelayed = !!scroll.scrollTimer;\r\n logger.log(() => [\r\n direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n position,\r\n shouldDelay ? (timeDiff + 'ms') : '0ms',\r\n shouldDelay ? (alreadyDelayed ? 'delayed' : `/ ${delta}ms delay`) : ''\r\n ]);\r\n if (!shouldDelay) {\r\n if (scroll.scrollTimer) {\r\n clearTimeout(scroll.scrollTimer);\r\n scroll.scrollTimer = null;\r\n }\r\n done();\r\n return;\r\n }\r\n if (!alreadyDelayed) {\r\n scroll.scrollTimer = setTimeout(() => {\r\n logger.log(() => {\r\n const curr = Scroll.getScrollEvent(scroller.viewport.scrollPosition, scroll.current);\r\n return [\r\n curr.direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n curr.position,\r\n (curr.time - time) + 'ms',\r\n 'triggered by timer set on',\r\n position\r\n ];\r\n });\r\n scroll.scrollTimer = null;\r\n done();\r\n }, delta);\r\n }\r\n }\r\n\r\n static getScrollEvent(position: number, previous: ScrollEventData | null): ScrollEventData {\r\n const time = Number(new Date());\r\n let direction: Direction | null = Direction.forward;\r\n if (previous) {\r\n if (position === previous.position) {\r\n direction = previous.direction;\r\n } else if (position < previous.position) {\r\n direction = Direction.backward;\r\n }\r\n }\r\n return { position, direction, time };\r\n }\r\n\r\n static onScroll(scroller: Scroller, workflow: ScrollerWorkflow): void {\r\n const { state: { scroll, cycle } } = scroller;\r\n scroll.previous = { ...(scroll.current as ScrollEventData) };\r\n scroll.current = null;\r\n\r\n if (cycle.busy.get()) {\r\n scroller.logger.log(() => ['skipping scroll', (scroll.previous as ScrollEventData).position, '[pending]']);\r\n return;\r\n }\r\n\r\n workflow.call({\r\n process: Scroll.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { DatasourceProps } from '../../inputs/index';\r\nimport { Datasource } from '../../classes/datasource';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { IDatasourceOptional, ProcessPayload } from '../../interfaces/index';\r\n\r\nexport default class Reset extends BaseAdapterProcessFactory(AdapterProcess.reset) {\r\n\r\n static run(scroller: Scroller, options?: IDatasourceOptional): void {\r\n const { datasource, buffer, viewport: { paddings }, state: { cycle } } = scroller;\r\n\r\n if (options) {\r\n const { data } = Reset.parseInput(scroller, options);\r\n if (!data.isValid) {\r\n return;\r\n }\r\n const constructed = options instanceof Datasource;\r\n Object.keys(DatasourceProps).forEach(key => {\r\n const param = data.params[key];\r\n const ds = datasource as unknown as { [key: string]: unknown };\r\n if (param.isSet || (constructed && ds[key])) {\r\n ds[key] = param.value;\r\n }\r\n });\r\n }\r\n\r\n buffer.reset(true);\r\n paddings.backward.reset();\r\n paddings.forward.reset();\r\n\r\n const payload: ProcessPayload = { datasource };\r\n if (cycle.busy.get()) {\r\n payload.finalize = true;\r\n cycle.interrupter = Reset.process;\r\n }\r\n\r\n scroller.workflow.call({\r\n process: Reset.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { ProcessPayload } from '../../interfaces/index';\r\n\r\nexport default class Reload extends BaseAdapterProcessFactory(AdapterProcess.reload) {\r\n\r\n static run(scroller: Scroller, reloadIndex: number): void {\r\n const { viewport, state, buffer } = scroller;\r\n\r\n const { params } = Reload.parseInput(scroller, { reloadIndex }, true);\r\n\r\n buffer.reset(false, params ? params.reloadIndex : void 0);\r\n viewport.reset(buffer.startIndex);\r\n\r\n const payload: ProcessPayload = {};\r\n if (state.cycle.busy.get()) {\r\n payload.finalize = true;\r\n state.cycle.interrupter = Reload.process;\r\n }\r\n\r\n scroller.workflow.call({\r\n process: Reload.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Item } from '../../classes/item';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Update extends BaseAdapterProcessFactory(AdapterProcess.update) {\r\n\r\n static run(scroller: Scroller, options: AdapterUpdateOptions): void {\r\n const { params } = Update.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const shouldUpdate = Update.doUpdate(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Update.process,\r\n status: shouldUpdate ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doUpdate(scroller: Scroller, params: AdapterUpdateOptions): boolean {\r\n const { buffer, viewport, state: { fetch }, routines, logger } = scroller;\r\n if (!buffer.items) {\r\n logger.log(() => 'no items in Buffer');\r\n return false;\r\n }\r\n const { item: firstItem, index: firstIndex, diff: firstItemDiff } =\r\n viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n\r\n const { trackedIndex, toRemove } = buffer.updateItems(\r\n params.predicate,\r\n (index, data) => new Item(index, data, routines),\r\n firstIndex,\r\n !!params.fixRight\r\n );\r\n\r\n let delta = 0;\r\n const trackedItem = buffer.get(trackedIndex);\r\n if (firstItem && firstItem === trackedItem) {\r\n delta = - buffer.getSizeByIndex(trackedIndex) + firstItemDiff;\r\n }\r\n\r\n toRemove.forEach(item => item.hide());\r\n logger.log(() => toRemove.length\r\n ? 'items to remove: [' + toRemove.map(({ $index }) => $index).join(',') + ']'\r\n : 'no items to remove'\r\n );\r\n if (toRemove.length) { // insertions will be processed on render\r\n buffer.checkDefaultSize();\r\n }\r\n\r\n const toRender = buffer.items.filter(({ toInsert }) => toInsert);\r\n logger.log(() => toRender.length\r\n ? 'items to render: [' + toRender.map(({ $index }) => $index).join(',') + ']'\r\n : 'no items to render'\r\n );\r\n\r\n fetch.update(trackedIndex, delta, toRender, toRemove);\r\n return !!toRemove.length || !!toRender.length;\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Item } from '../../classes/item';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterInsertOptions, AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Insert extends BaseAdapterProcessFactory(AdapterProcess.insert) {\r\n\r\n static run(scroller: Scroller, options: AdapterInsertOptions): void {\r\n const { params } = Insert.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldInsert = Insert.doInsert(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Insert.process,\r\n status: shouldInsert ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doInsert(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n if (!Insert.insertEmpty(scroller, params)) {\r\n if (!Insert.insertInBuffer(scroller, params)) {\r\n if (!Insert.insertVirtually(scroller, params)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static insertEmpty(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { buffer, routines, state: { fetch } } = scroller;\r\n if (buffer.size) {\r\n return false;\r\n }\r\n const { beforeIndex, afterIndex, items, decrease } = params;\r\n if (!buffer.fillEmpty(\r\n items, beforeIndex, afterIndex, !!decrease,\r\n (index, data) => new Item(index, data, routines)\r\n )) {\r\n return false;\r\n }\r\n fetch.fill(buffer.items, buffer.startIndex);\r\n\r\n return true;\r\n }\r\n\r\n static insertInBuffer(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { before, after, beforeIndex, afterIndex, items, decrease } = params;\r\n const indexToInsert = scroller.buffer.getIndexToInsert(before || after, beforeIndex, afterIndex);\r\n\r\n if (isNaN(indexToInsert)) {\r\n return false;\r\n }\r\n const isBackward = Number.isInteger(beforeIndex) || before;\r\n\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: ({ $index, data }) => {\r\n if (indexToInsert === $index) {\r\n return isBackward ? [...items, data] : [data, ...items];\r\n }\r\n return true;\r\n },\r\n fixRight: decrease\r\n };\r\n\r\n return Update.doUpdate(scroller, updateOptions);\r\n }\r\n\r\n static insertVirtually(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { beforeIndex, afterIndex, items, decrease } = params;\r\n const { buffer, state: { fetch }, viewport } = scroller;\r\n const direction = Number.isInteger(beforeIndex) ? Direction.backward : Direction.forward;\r\n const indexToInsert = (direction === Direction.backward ? beforeIndex : afterIndex) as number;\r\n\r\n if (!buffer.insertVirtually(items, indexToInsert, direction, !!decrease)) {\r\n return false;\r\n }\r\n\r\n const { index, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = index;\r\n if (!isNaN(index)) {\r\n fetch.simulate = true;\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(index) + diff;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Insert from './insert';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterAppendOptions, AdapterPrependOptions } from '../../interfaces/index';\r\n\r\ntype AdapterAppendPrependOptions = AdapterAppendOptions & AdapterPrependOptions;\r\n\r\ninterface AppendRunOptions {\r\n process: AdapterProcess;\r\n options: AdapterAppendPrependOptions;\r\n}\r\n\r\nexport default class Append extends BaseAdapterProcessFactory(AdapterProcess.append) {\r\n\r\n static run(scroller: Scroller, { process, options }: AppendRunOptions): void {\r\n const { params } = Append.parseInput(scroller, options, false, process);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const shouldAppend = Append.doAppend(scroller, process, params);\r\n\r\n scroller.workflow.call({\r\n process: Append.process,\r\n status: shouldAppend ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doAppend(scroller: Scroller, process: AdapterProcess, params: AdapterAppendPrependOptions): boolean {\r\n const { bof, eof, increase, decrease } = params;\r\n const { buffer } = scroller;\r\n const prepend = process === AdapterProcess.prepend;\r\n const opposite = prepend ? !increase : decrease;\r\n let beforeIndex, afterIndex, items = params.items;\r\n if (prepend) {\r\n beforeIndex = (bof ? buffer.absMinIndex : buffer.minIndex) + (!buffer.size ? 1 : 0);\r\n items = [...items].reverse();\r\n } else {\r\n afterIndex = (eof ? buffer.absMaxIndex : buffer.maxIndex) - (!buffer.size && !opposite ? 1 : 0);\r\n }\r\n return Insert.doInsert(scroller, {\r\n items,\r\n beforeIndex,\r\n afterIndex,\r\n decrease: opposite\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Direction } from '../../inputs/index';\r\n\r\nexport default class Check extends BaseAdapterProcessFactory(AdapterProcess.check) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, buffer, state: { fetch }, viewport } = scroller;\r\n let min = Infinity, max = -Infinity;\r\n\r\n buffer.items.forEach(item => {\r\n const size = item.size;\r\n item.setSize();\r\n if (item.size !== size) {\r\n buffer.cacheItem(item);\r\n min = Math.min(min, item.$index);\r\n max = Math.max(max, item.$index);\r\n }\r\n });\r\n\r\n if (Number.isFinite(min)) {\r\n fetch.first.indexBuffer = buffer.firstIndex;\r\n fetch.last.indexBuffer = buffer.lastIndex;\r\n const { index: firstIndex, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = firstIndex;\r\n if (!isNaN(firstIndex)) {\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(firstIndex) + diff;\r\n }\r\n fetch.check(\r\n buffer.items.filter(item => item.$index >= min && item.$index <= max)\r\n );\r\n }\r\n\r\n scroller.logger.stat('check');\r\n\r\n workflow.call({\r\n process: Check.process,\r\n status: Number.isFinite(min) ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterRemoveOptions, AdapterUpdateOptions, ItemsPredicate } from '../../interfaces/index';\r\n\r\nexport default class Remove extends BaseAdapterProcessFactory(AdapterProcess.remove) {\r\n\r\n static run(scroller: Scroller, options: AdapterRemoveOptions): void {\r\n const { params } = Remove.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldRemove = Remove.doRemove(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Remove.process,\r\n status: shouldRemove ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doRemove(scroller: Scroller, params: AdapterRemoveOptions): boolean {\r\n const { fetch } = scroller.state;\r\n fetch.firstVisible.index = NaN;\r\n const removed = Remove.removeBufferedItems(scroller, params);\r\n const shouldBuffered = removed.length > 0;\r\n if (shouldBuffered) {\r\n // exclude just removed in-buffer indexes\r\n if (params.indexes && params.indexes.length) {\r\n params.indexes = params.indexes.filter(i => !removed.includes(i));\r\n }\r\n // shift virtual indexes that remain\r\n if (params.indexes && params.indexes.length) {\r\n const diffLeft = (params.increase ? 1 : 0) * removed.length;\r\n const diffRight = (params.increase ? 0 : -1) * removed.length;\r\n params.indexes = params.indexes.map(index =>\r\n index + (index < removed[0] ? diffLeft : diffRight)\r\n );\r\n }\r\n }\r\n const shouldVirtual = Remove.removeVirtualItems(scroller, params);\r\n if (!shouldBuffered && !shouldVirtual) {\r\n return false;\r\n }\r\n scroller.logger.stat('after remove');\r\n return true;\r\n }\r\n\r\n static removeBufferedItems(scroller: Scroller, options: AdapterRemoveOptions): number[] {\r\n const { predicate, indexes, increase } = options;\r\n if (!predicate && !indexes) {\r\n return [];\r\n }\r\n const newPredicate: ItemsPredicate = item =>\r\n (predicate && predicate(item)) ||\r\n (!!indexes && indexes.includes(item.$index));\r\n\r\n const indexesToRemove: number[] = scroller.buffer.items.reduce((acc, item) =>\r\n newPredicate(item) ? [...acc, item.$index] : acc, [] as number[]\r\n );\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: item => !newPredicate(item),\r\n fixRight: increase\r\n };\r\n Update.doUpdate(scroller, updateOptions);\r\n return indexesToRemove;\r\n }\r\n\r\n static removeVirtualItems(scroller: Scroller, params: AdapterRemoveOptions): boolean {\r\n const { indexes, increase } = params;\r\n if (!indexes || !indexes.length) {\r\n return false;\r\n }\r\n const { buffer, viewport, state: { fetch } } = scroller;\r\n\r\n // get items to remove\r\n const { finiteAbsMinIndex, firstIndex, finiteAbsMaxIndex, lastIndex } = buffer;\r\n const toRemove = [];\r\n for (let i = 0, len = indexes.length; i < len; i++) {\r\n const index = indexes[i];\r\n if (index >= finiteAbsMinIndex && !isNaN(firstIndex) && index < firstIndex) {\r\n toRemove.push(index); // backward;\r\n } else if (index <= finiteAbsMaxIndex && !isNaN(lastIndex) && index > lastIndex) {\r\n toRemove.push(index); // forward;\r\n } else {\r\n continue;\r\n }\r\n }\r\n\r\n if (!toRemove.length) {\r\n return false;\r\n }\r\n\r\n // what should be shown after remove; Buffer removal has priority\r\n if (isNaN(fetch.firstVisible.index)) {\r\n const { index, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = index;\r\n if (!isNaN(index)) {\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(index) + diff;\r\n }\r\n }\r\n\r\n // virtual removal\r\n scroller.logger.log(() => `going to remove ${toRemove.length} item(s) virtually`);\r\n buffer.removeVirtually(toRemove, !!increase);\r\n buffer.checkDefaultSize();\r\n Remove.shiftFirstVisibleIndex(scroller, toRemove, !!increase);\r\n\r\n return true;\r\n }\r\n\r\n static shiftFirstVisibleIndex(scroller: Scroller, listToRemove: number[], increase: boolean): void {\r\n const { firstVisible } = scroller.state.fetch;\r\n if (isNaN(firstVisible.index)) {\r\n return;\r\n }\r\n const shift = listToRemove.reduce((acc, index) => acc + (\r\n ((increase && index > firstVisible.index) || (!increase && index < firstVisible.index)) ? 1 : 0\r\n ), 0);\r\n firstVisible.index = firstVisible.index + (increase ? shift : -shift);\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterClipOptions } from '../../interfaces/index';\r\n\r\nexport default class UserClip extends BaseAdapterProcessFactory(AdapterProcess.clip) {\r\n\r\n static run(scroller: Scroller, options?: AdapterClipOptions): void {\r\n const { params } = UserClip.parseInput(scroller, options);\r\n\r\n scroller.state.clip.forceForward = !(params && params.backwardOnly);\r\n scroller.state.clip.forceBackward = !(params && params.forwardOnly);\r\n\r\n scroller.workflow.call({\r\n process: UserClip.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterReplaceOptions, AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Replace extends BaseAdapterProcessFactory(AdapterProcess.replace) {\r\n\r\n static run(scroller: Scroller, options: AdapterReplaceOptions): void {\r\n const { params } = Replace.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldReplace = Replace.doReplace(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Replace.process,\r\n status: shouldReplace ? ProcessStatus.next : ProcessStatus.done,\r\n });\r\n }\r\n\r\n static doReplace(scroller: Scroller, params: AdapterReplaceOptions): boolean {\r\n const toRemove = scroller.buffer.items\r\n .filter(item => params.predicate(item))\r\n .map(item => item.$index);\r\n\r\n if (!toRemove.length) {\r\n scroller.logger.log('no items to be replaced');\r\n return false;\r\n }\r\n\r\n let injected = false;\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: ({ $index }) => {\r\n if (!toRemove.includes($index)) {\r\n return true;\r\n }\r\n if (!injected) {\r\n injected = true;\r\n return params.items;\r\n }\r\n return false;\r\n },\r\n fixRight: params.fixRight\r\n };\r\n\r\n return Update.doUpdate(scroller, updateOptions);\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { AdapterMethods } from '../../inputs/index';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport {\r\n ItemsPredicate,\r\n ItemsUpdater,\r\n AdapterFixOptions,\r\n IValidatedData,\r\n} from '../../interfaces/index';\r\n\r\nconst { [AdapterProcess.fix]: FixParams } = AdapterMethods;\r\n\r\nexport default class Fix extends BaseAdapterProcessFactory(AdapterProcess.fix) {\r\n\r\n static run(scroller: Scroller, options: AdapterFixOptions): void {\r\n const { workflow } = scroller;\r\n\r\n const { data, params } = Fix.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n Object.entries(data.params).forEach(([key, value]) => {\r\n if (value.isSet && value.isValid) {\r\n Fix.runByType(scroller, key, value.value, data);\r\n }\r\n });\r\n\r\n workflow.call({\r\n process: Fix.process,\r\n status: ProcessStatus.done\r\n });\r\n }\r\n\r\n static runByType(scroller: Scroller, token: string, value: unknown, methodData: IValidatedData): void {\r\n switch (token) {\r\n case FixParams.scrollPosition:\r\n return Fix.setScrollPosition(scroller, value as number);\r\n case FixParams.minIndex:\r\n return Fix.setMinIndex(scroller, value as number);\r\n case FixParams.maxIndex:\r\n return Fix.setMaxIndex(scroller, value as number);\r\n case FixParams.updater:\r\n return Fix.updateItems(scroller, value as ItemsUpdater);\r\n case FixParams.scrollToItem:\r\n if (methodData.params) {\r\n const scrollToItemOpt = methodData.params[FixParams.scrollToItemOpt];\r\n const options = scrollToItemOpt ? scrollToItemOpt.value as AdapterFixOptions['scrollToItemOpt'] : void 0;\r\n return Fix.scrollToItem(scroller, value as ItemsPredicate, options);\r\n }\r\n return;\r\n case FixParams.scrollToItemOpt:\r\n return;\r\n }\r\n }\r\n\r\n static setScrollPosition({ viewport }: Scroller, value: number): void {\r\n let result = value;\r\n if (value === -Infinity) {\r\n result = 0;\r\n } else if (value === Infinity) {\r\n result = viewport.getScrollableSize();\r\n }\r\n viewport.setPosition(result);\r\n }\r\n\r\n static setMinIndex({ buffer, settings }: Scroller, value: number): void {\r\n settings.minIndex = value;\r\n buffer.absMinIndex = value;\r\n }\r\n\r\n static setMaxIndex({ buffer, settings }: Scroller, value: number): void {\r\n settings.maxIndex = value;\r\n buffer.absMaxIndex = value;\r\n }\r\n\r\n static updateItems({ buffer, logger }: Scroller, value: ItemsUpdater): void {\r\n let updateReference = false;\r\n const updater = () => updateReference = true;\r\n buffer.items.forEach(item => value(item.get(), updater));\r\n if (updateReference) {\r\n logger.log(() => 'update Buffer.items reference');\r\n buffer.items = [...buffer.items];\r\n }\r\n }\r\n\r\n static scrollToItem(scroller: Scroller, value: ItemsPredicate, options?: boolean | ScrollIntoViewOptions): void {\r\n const found = scroller.buffer.items.find(item => value(item.get()));\r\n if (!found) {\r\n scroller.logger.log(() => 'scrollToItem cancelled, item not found');\r\n return;\r\n }\r\n found.scrollTo(options);\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\n\r\nexport default class Start extends BaseProcessFactory(CommonProcess.start) {\r\n\r\n static run(scroller: Scroller): void {\r\n const payload = scroller.state.startInnerLoop();\r\n\r\n scroller.workflow.call({\r\n process: Start.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class PreFetch extends BaseProcessFactory(CommonProcess.preFetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, buffer, state: { fetch, cycle } } = scroller;\r\n fetch.minIndex = buffer.minIndex;\r\n\r\n // set first and last indexes of items to fetch\r\n PreFetch.setPositionsAndIndexes(scroller);\r\n\r\n // skip indexes that are in buffer\r\n PreFetch.skipBufferedItems(scroller);\r\n\r\n if (scroller.settings.infinite) {\r\n // fill indexes to include buffer if no clip\r\n PreFetch.checkBufferGaps(scroller);\r\n }\r\n\r\n // add indexes if there are too few items to fetch (clip padding)\r\n PreFetch.checkFetchPackSize(scroller);\r\n\r\n // set fetch direction\r\n PreFetch.setFetchDirection(scroller);\r\n\r\n workflow.call({\r\n process: PreFetch.process,\r\n status: PreFetch.getStatus(scroller),\r\n payload: { process: cycle.initiator }\r\n });\r\n }\r\n\r\n static setPositionsAndIndexes(scroller: Scroller): void {\r\n PreFetch.setPositions(scroller);\r\n PreFetch.setFirstIndex(scroller);\r\n PreFetch.setLastIndex(scroller);\r\n scroller.logger.fetch();\r\n }\r\n\r\n static setPositions(scroller: Scroller): void {\r\n const { state: { fetch: { positions } }, viewport } = scroller;\r\n const paddingDelta = viewport.getBufferPadding();\r\n positions.before = viewport.scrollPosition;\r\n positions.startDelta = PreFetch.getStartDelta(scroller);\r\n positions.relative = positions.before - positions.startDelta;\r\n positions.start = positions.relative - paddingDelta;\r\n positions.end = positions.relative + viewport.getSize() + paddingDelta;\r\n }\r\n\r\n static getStartDelta(scroller: Scroller): number { // calculate size before start index\r\n const { buffer, viewport: { offset } } = scroller;\r\n let startDelta = 0;\r\n if (offset) {\r\n startDelta += offset;\r\n }\r\n if (!buffer.defaultSize) {\r\n return startDelta;\r\n }\r\n for (let index = buffer.finiteAbsMinIndex; index < buffer.startIndex; index++) {\r\n startDelta += buffer.getSizeByIndex(index);\r\n }\r\n scroller.logger.log(() => [\r\n `start delta is ${startDelta}`, ...(offset ? [` (+${offset} offset)`] : [])\r\n ]);\r\n return startDelta;\r\n }\r\n\r\n static setFirstIndex(scroller: Scroller): void {\r\n const { state, buffer } = scroller;\r\n const { positions: { start }, first } = state.fetch;\r\n let firstIndex = buffer.startIndex;\r\n let firstIndexPosition = 0;\r\n if (state.cycle.innerLoop.isInitial) {\r\n scroller.logger.log('skipping fetch backward direction [initial loop]');\r\n } else if (!buffer.defaultSize) {\r\n scroller.logger.log('skipping fetch backward direction [no item size]');\r\n } else {\r\n let position = firstIndexPosition;\r\n let index = firstIndex;\r\n while (1) { // eslint-disable-line no-constant-condition\r\n if (start >= 0) {\r\n const size = buffer.getSizeByIndex(index);\r\n const diff = (position + size) - start;\r\n if (diff > 0) {\r\n firstIndex = index;\r\n firstIndexPosition = position;\r\n break;\r\n }\r\n position += size;\r\n index++;\r\n if (index < buffer.absMinIndex) {\r\n break;\r\n }\r\n }\r\n if (start < 0) {\r\n index--;\r\n if (index < buffer.absMinIndex) {\r\n break;\r\n }\r\n position -= buffer.getSizeByIndex(index);\r\n const diff = position - start;\r\n firstIndex = index;\r\n firstIndexPosition = position;\r\n if (diff <= 0) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n first.index = first.indexBuffer = Math.max(firstIndex, buffer.absMinIndex);\r\n first.position = firstIndexPosition;\r\n }\r\n\r\n static setLastIndex(scroller: Scroller): void {\r\n const { state: { fetch, cycle }, buffer, settings } = scroller;\r\n const { firstVisible, positions: { relative, end }, first, last } = fetch;\r\n let lastIndex;\r\n if (!buffer.defaultSize) {\r\n // just to fetch forward bufferSize items if neither averageItemSize nor itemSize are present\r\n lastIndex = buffer.startIndex + settings.bufferSize - 1;\r\n scroller.logger.log('forcing fetch forward direction [no item size]');\r\n } else {\r\n let index = first.indexBuffer;\r\n let position = first.position;\r\n lastIndex = index;\r\n while (1) { // eslint-disable-line no-constant-condition\r\n lastIndex = index;\r\n const size = buffer.getSizeByIndex(index);\r\n position += size;\r\n if (isNaN(firstVisible.index) && position > relative) {\r\n firstVisible.index = index;\r\n if (!cycle.innerLoop.isInitial) {\r\n firstVisible.delta = position - size - relative;\r\n }\r\n }\r\n if (position >= end) {\r\n break;\r\n }\r\n if (index++ > buffer.absMaxIndex) {\r\n break;\r\n }\r\n }\r\n }\r\n last.index = last.indexBuffer = Math.min(lastIndex, buffer.absMaxIndex);\r\n }\r\n\r\n static skipBufferedItems(scroller: Scroller): void {\r\n const { buffer } = scroller;\r\n if (!buffer.size) {\r\n return;\r\n }\r\n const { fetch } = scroller.state;\r\n const firstIndex = fetch.first.index;\r\n const lastIndex = fetch.last.index;\r\n const packs: number[][] = [[]];\r\n let p = 0;\r\n for (let i = firstIndex; i <= lastIndex; i++) {\r\n if (!buffer.get(i)) {\r\n packs[p].push(i);\r\n } else if (packs[p].length) {\r\n packs[++p] = [];\r\n }\r\n }\r\n let pack = packs[0];\r\n if (packs[0].length && packs[1] && packs[1].length) {\r\n fetch.hasAnotherPack = true;\r\n // todo: need to look for biggest pack in visible area\r\n // todo: or think about merging two requests in a single Fetch process\r\n if (packs[1].length >= packs[0].length) {\r\n pack = packs[1];\r\n }\r\n }\r\n fetch.first.index = Math.max(pack[0], buffer.absMinIndex);\r\n fetch.last.index = Math.min(pack[pack.length - 1], buffer.absMaxIndex);\r\n if (fetch.first.index !== firstIndex || fetch.last.index !== lastIndex) {\r\n scroller.logger.fetch('after Buffer flushing');\r\n }\r\n }\r\n\r\n static checkBufferGaps(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (!buffer.size) {\r\n return;\r\n }\r\n const fetchFirst = fetch.first.index;\r\n const bufferLast = buffer.lastIndex;\r\n if (fetchFirst > bufferLast) {\r\n fetch.first.index = fetch.first.indexBuffer = bufferLast + 1;\r\n }\r\n const bufferFirst = buffer.firstIndex;\r\n const fetchLast = fetch.last.index;\r\n if (fetchLast < bufferFirst) {\r\n fetch.last.index = fetch.last.indexBuffer = bufferFirst - 1;\r\n }\r\n if (fetch.first.index !== fetchFirst || fetch.last.index !== fetchLast) {\r\n scroller.logger.fetch('after Buffer filling (no clip case)');\r\n }\r\n }\r\n\r\n static checkFetchPackSize(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (!fetch.shouldFetch) {\r\n return;\r\n }\r\n const firstIndex = fetch.first.index;\r\n const lastIndex = fetch.last.index;\r\n const diff = scroller.settings.bufferSize - (lastIndex - firstIndex + 1);\r\n if (diff <= 0) {\r\n return;\r\n }\r\n if (!buffer.size || lastIndex > buffer.items[0].$index) { // forward\r\n const newLastIndex = Math.min(lastIndex + diff, buffer.absMaxIndex);\r\n if (newLastIndex > lastIndex) {\r\n fetch.last.index = fetch.last.indexBuffer = newLastIndex;\r\n }\r\n } else {\r\n const newFirstIndex = Math.max(firstIndex - diff, buffer.absMinIndex);\r\n if (newFirstIndex < firstIndex) {\r\n fetch.first.index = fetch.first.indexBuffer = newFirstIndex;\r\n }\r\n }\r\n if (fetch.first.index !== firstIndex || fetch.last.index !== lastIndex) {\r\n scroller.logger.fetch('after bufferSize adjustment');\r\n PreFetch.skipBufferedItems(scroller);\r\n }\r\n }\r\n\r\n static setFetchDirection(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (fetch.last.index) {\r\n let direction = Direction.forward;\r\n if (buffer.size) {\r\n direction = fetch.last.index < buffer.items[0].$index ? Direction.backward : Direction.forward;\r\n }\r\n fetch.direction = direction;\r\n scroller.logger.log(() => `fetch direction is \"${direction}\"`);\r\n }\r\n }\r\n\r\n static getStatus(scroller: Scroller): ProcessStatus {\r\n const { cycle, fetch } = scroller.state;\r\n if (cycle.initiator === AdapterProcess.clip) {\r\n scroller.logger.log(() => `going to skip fetch due to \"${AdapterProcess.clip}\" process`);\r\n return ProcessStatus.next;\r\n }\r\n if (fetch.shouldFetch) {\r\n scroller.logger.log(() => `going to fetch ${fetch.count} items started from index ${fetch.index}`);\r\n return ProcessStatus.next;\r\n }\r\n return ProcessStatus.done;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ObservableLike } from '../interfaces/index';\r\n\r\ninterface Immediate {\r\n data: unknown[] | null;\r\n error: unknown | null;\r\n isError: boolean;\r\n}\r\n\r\ntype FetchGetResult = Immediate | Promise<unknown>;\r\n\r\ninterface FetchBox {\r\n success: (value: unknown[]) => void;\r\n fail: (value: unknown) => void;\r\n}\r\n\r\nexport default class Fetch extends BaseProcessFactory(CommonProcess.fetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n\r\n const box = {\r\n success: (data: unknown[]) => {\r\n scroller.logger.log(() =>\r\n `resolved ${data.length} items ` +\r\n `(index = ${scroller.state.fetch.index}, count = ${scroller.state.fetch.count})`\r\n );\r\n scroller.state.fetch.newItemsData = data;\r\n workflow.call({\r\n process: Fetch.process,\r\n status: ProcessStatus.next\r\n });\r\n },\r\n fail: (error: unknown) =>\r\n workflow.call({\r\n process: Fetch.process,\r\n status: ProcessStatus.error,\r\n payload: { error }\r\n })\r\n };\r\n\r\n const result = Fetch.get(scroller);\r\n Fetch.complete(scroller, box, result);\r\n }\r\n\r\n static complete(scroller: Scroller, box: FetchBox, result: FetchGetResult): void {\r\n if (Object.prototype.hasOwnProperty.call(result, 'data')) {\r\n const { data, error, isError } = result as Immediate;\r\n if (!isError) {\r\n box.success(data || []);\r\n } else {\r\n box.fail(error);\r\n }\r\n } else {\r\n const { state: { scroll, fetch }, viewport } = scroller;\r\n if (scroll.positionBeforeAsync === null) {\r\n scroll.positionBeforeAsync = viewport.scrollPosition;\r\n }\r\n fetch.cancel = () => {\r\n box.success = () => null;\r\n box.fail = () => null;\r\n };\r\n (result as Promise<unknown[]>).then(\r\n (data) => box.success(data),\r\n (error) => box.fail(error)\r\n );\r\n }\r\n }\r\n\r\n static get(scroller: Scroller): FetchGetResult {\r\n const _get = scroller.datasource.get;\r\n const { index, count } = scroller.state.fetch;\r\n\r\n let immediateData, immediateError;\r\n let resolve: (value: unknown) => void, reject: (value: unknown) => void;\r\n\r\n const done = (data: unknown[]) => {\r\n if (!resolve) {\r\n immediateData = data || null;\r\n return;\r\n }\r\n resolve(data);\r\n };\r\n const fail = (error: unknown) => {\r\n if (!reject) {\r\n immediateError = error || null;\r\n return;\r\n }\r\n reject(error);\r\n };\r\n\r\n const getResult = _get(index, count, done, fail);\r\n\r\n if (getResult && typeof getResult === 'object' && getResult !== null) {\r\n if (typeof (getResult as PromiseLike<unknown>).then === 'function') {\r\n return getResult as Promise<unknown>;\r\n } else if (typeof (getResult as ObservableLike).subscribe === 'function') {\r\n const sub = (getResult as ObservableLike).subscribe(done, fail, () => {\r\n if (sub && typeof sub === 'object' && typeof sub.unsubscribe === 'function') {\r\n sub.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (immediateData || immediateError) { // callback case or immediate observable\r\n return {\r\n data: immediateError ? null : (immediateData || []),\r\n error: immediateError,\r\n isError: !!immediateError\r\n };\r\n }\r\n\r\n return new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Item } from '../classes/item';\r\n\r\nexport default class PostFetch extends BaseProcessFactory(CommonProcess.postFetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n if (PostFetch.setItems(scroller)) {\r\n PostFetch.setBufferLimits(scroller);\r\n workflow.call({\r\n process: PostFetch.process,\r\n status: scroller.state.fetch.hasNewItems\r\n ? ProcessStatus.next\r\n : ProcessStatus.done\r\n });\r\n } else {\r\n workflow.call({\r\n process: PostFetch.process,\r\n status: ProcessStatus.error,\r\n payload: { error: 'Can\\'t set buffer items' }\r\n });\r\n }\r\n }\r\n\r\n static setBufferLimits(scroller: Scroller): void {\r\n const { buffer, state: { fetch, cycle: { innerLoop } } } = scroller;\r\n const { items, first: { index: first }, last: { index: last } } = fetch;\r\n if (!items.length) {\r\n if (last < buffer.minIndex || innerLoop.isInitial) {\r\n buffer.absMinIndex = buffer.minIndex;\r\n }\r\n if (first > buffer.maxIndex || innerLoop.isInitial) {\r\n buffer.absMaxIndex = buffer.maxIndex;\r\n }\r\n } else {\r\n const lastIndex = items.length - 1;\r\n if (first < items[0].$index) {\r\n buffer.absMinIndex = items[0].$index;\r\n }\r\n if (last > items[lastIndex].$index) {\r\n buffer.absMaxIndex = items[lastIndex].$index;\r\n }\r\n }\r\n }\r\n\r\n static setItems(scroller: Scroller): boolean {\r\n const { buffer, state: { fetch, cycle } } = scroller;\r\n const items = fetch.newItemsData;\r\n if (!items || !items.length) { // empty result\r\n return true;\r\n }\r\n // eof/bof case, need to shift fetch index if bof\r\n let fetchIndex = fetch.index;\r\n if (items.length < fetch.count) {\r\n if (cycle.innerLoop.isInitial) {\r\n // let's treat initial poor fetch as startIndex-bof\r\n fetchIndex = buffer.startIndex;\r\n } else if (fetch.first.index < buffer.minIndex) { // normal bof\r\n fetchIndex = buffer.minIndex - items.length;\r\n }\r\n }\r\n fetch.items = items.map((item, index: number) =>\r\n new Item(fetchIndex + index, item, scroller.routines)\r\n );\r\n return buffer.setItems(fetch.items);\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Item } from '../classes/item';\r\n\r\nexport default class Render extends BaseProcessFactory(CommonProcess.render) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, state: { cycle, render, scroll }, viewport, routines } = scroller;\r\n scroller.logger.stat('before new items render');\r\n if (scroll.positionBeforeAsync === null) {\r\n scroll.positionBeforeAsync = viewport.scrollPosition;\r\n }\r\n render.cancel = routines.render(() => {\r\n render.cancel = null;\r\n if (Render.doRender(scroller)) {\r\n workflow.call({\r\n process: Render.process,\r\n status: render.noSize ? ProcessStatus.done : ProcessStatus.next,\r\n payload: { process: cycle.initiator }\r\n });\r\n } else {\r\n workflow.call({\r\n process: Render.process,\r\n status: ProcessStatus.error,\r\n payload: { error: 'Can\\'t associate item with element' }\r\n });\r\n }\r\n });\r\n }\r\n\r\n static doRender(scroller: Scroller): boolean {\r\n const { state: { fetch, render }, viewport, buffer, logger } = scroller;\r\n render.positionBefore = viewport.scrollPosition;\r\n if (!fetch.isCheck) {\r\n render.sizeBefore = viewport.getScrollableSize();\r\n if (!fetch.items.every(item =>\r\n Render.processElement(scroller, item)\r\n )) {\r\n return false;\r\n }\r\n }\r\n buffer.checkDefaultSize();\r\n render.sizeAfter = viewport.getScrollableSize();\r\n logger.stat('after new items render');\r\n logger.log(() => render.noSize ? 'viewport size has not been changed' : void 0);\r\n return true;\r\n }\r\n\r\n static processElement(scroller: Scroller, item: Item): boolean {\r\n const { viewport, buffer } = scroller;\r\n const element = viewport.findItemElementById(item.nodeId);\r\n if (!element) {\r\n return false;\r\n }\r\n item.element = element as HTMLElement;\r\n item.makeVisible();\r\n item.setSize(buffer.getSizeByIndex(item.$index));\r\n buffer.cacheItem(item);\r\n return true;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ScrollerWorkflow } from '../interfaces/index';\r\n\r\nconst isInterrupted = ({ call }: ScrollerWorkflow): boolean => !!call.interrupted;\r\n\r\nexport default class End extends BaseProcessFactory(CommonProcess.end) {\r\n\r\n static run(scroller: Scroller, { error }: { error?: unknown } = {}): void {\r\n const { workflow, state: { cycle: { interrupter } } } = scroller;\r\n\r\n if (!error && !interrupter) {\r\n // set out params accessible via Adapter\r\n End.calculateParams(scroller);\r\n }\r\n\r\n // explicit interruption for we don't want to go through the inner loop finalizing\r\n if (isInterrupted(workflow)) {\r\n workflow.call({ process: End.process, status: ProcessStatus.done });\r\n return;\r\n }\r\n\r\n const next = End.shouldContinueRun(scroller, error);\r\n scroller.state.endInnerLoop();\r\n\r\n workflow.call({\r\n process: End.process,\r\n status: next ? ProcessStatus.next : ProcessStatus.done,\r\n payload: { ...(interrupter ? { process: interrupter } : {}) }\r\n });\r\n }\r\n\r\n static calculateParams(scroller: Scroller): void {\r\n const { adapter, workflow } = scroller;\r\n\r\n adapter.setFirstOrLastVisible({ first: true, workflow });\r\n adapter.setFirstOrLastVisible({ last: true, workflow });\r\n }\r\n\r\n static shouldContinueRun(scroller: Scroller, error: unknown): boolean {\r\n const { cycle, fetch, render } = scroller.state;\r\n // Adapter.reload or Adapter.reset\r\n if (cycle.interrupter) {\r\n return true;\r\n }\r\n // critical error\r\n if (error) {\r\n return false;\r\n }\r\n // Adapter.check\r\n if (fetch.simulate && fetch.isCheck && !render.noSize) {\r\n return true;\r\n }\r\n // Adapter.remove or Adapter.update with clip\r\n if (fetch.simulate && fetch.doRemove) {\r\n return true;\r\n }\r\n // common inner loop (App start, scroll, Adapter.clip) with full fetch\r\n if (!fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport End from './end';\r\n\r\nexport default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, viewport, state: { scroll } } = scroller;\r\n\r\n scroll.positionBeforeAdjust = viewport.scrollPosition;\r\n Adjust.setPaddings(scroller);\r\n scroll.positionAfterAdjust = viewport.scrollPosition;\r\n\r\n // scroll position adjustments\r\n const position = Adjust.calculatePosition(scroller);\r\n\r\n // additional adjustment if the position can't be reached during the initial cycle\r\n Adjust.setAdditionalForwardPadding(scroller, position);\r\n\r\n // set new position using animation frame\r\n Adjust.setPosition(scroller, position, () =>\r\n workflow.call({\r\n process: Adjust.process,\r\n status: ProcessStatus.done\r\n })\r\n );\r\n }\r\n\r\n static setPaddings(scroller: Scroller): void {\r\n const { viewport, buffer, settings: { inverse }, state: { fetch } } = scroller;\r\n const firstItem = buffer.getFirstVisibleItem();\r\n const lastItem = buffer.getLastVisibleItem();\r\n let first, last;\r\n if (firstItem && lastItem) {\r\n first = firstItem.$index;\r\n last = lastItem.$index;\r\n } else {\r\n first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;\r\n last = first - 1;\r\n }\r\n const { forward, backward } = viewport.paddings;\r\n let index, bwdSize = 0, fwdSize = 0;\r\n\r\n // new backward and forward paddings size\r\n for (index = buffer.finiteAbsMinIndex; index < first; index++) {\r\n bwdSize += buffer.getSizeByIndex(index);\r\n }\r\n for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {\r\n fwdSize += buffer.getSizeByIndex(index);\r\n }\r\n\r\n // lack of items case\r\n const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;\r\n const scrollSize = bwdSize + bufferSize + fwdSize;\r\n const viewportSizeDiff = viewport.getSize() - scrollSize;\r\n if (viewportSizeDiff > 0) {\r\n if (inverse) {\r\n bwdSize += viewportSizeDiff;\r\n } else {\r\n fwdSize += viewportSizeDiff;\r\n }\r\n scroller.logger.log(() =>\r\n inverse ? 'backward' : 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`\r\n );\r\n }\r\n\r\n backward.size = bwdSize;\r\n forward.size = fwdSize;\r\n\r\n scroller.logger.stat('after paddings adjustments');\r\n }\r\n\r\n static calculatePosition(scroller: Scroller): number {\r\n const { viewport, buffer, state: { fetch, render, scroll } } = scroller;\r\n let position = viewport.paddings.backward.size;\r\n\r\n // increase the position to meet the expectation of the first visible item\r\n if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {\r\n scroller.logger.log(`first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`);\r\n const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);\r\n buffer.items.forEach(item => {\r\n // 1) shift of the buffered items before the first visible item\r\n if (item.$index < fetch.firstVisible.index) {\r\n position += item.size;\r\n return;\r\n }\r\n // 2) delta of the first visible item\r\n if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {\r\n position -= fetch.firstVisible.delta;\r\n }\r\n // 3) difference between expected and real sizes of fetched items after the first visible\r\n if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {\r\n position += item.size - item.preSize;\r\n }\r\n });\r\n }\r\n\r\n // slow fetch/render case\r\n if (scroll.positionBeforeAsync !== null) {\r\n const diff = render.positionBefore - scroll.positionBeforeAsync;\r\n if (diff !== 0) {\r\n scroller.logger.log(`shift position due to fetch-render difference (${diff})`);\r\n position += diff;\r\n }\r\n }\r\n\r\n // increase the position due to viewport's offset\r\n if (viewport.offset > 0 && (position || fetch.positions.before)) {\r\n position += viewport.offset;\r\n }\r\n\r\n return Math.round(position);\r\n }\r\n\r\n static setAdditionalForwardPadding(scroller: Scroller, position: number): void {\r\n const { viewport, buffer, state: { cycle } } = scroller;\r\n if (!cycle.isInitial || !End.shouldContinueRun(scroller, null)) {\r\n return;\r\n }\r\n const diff = position - viewport.getMaxScrollPosition();\r\n if (diff <= 0) {\r\n return;\r\n }\r\n const last = buffer.getLastVisibleItem();\r\n if (!last) {\r\n return;\r\n }\r\n let size = 0;\r\n let index = last.$index + 1;\r\n while (size <= diff && index <= buffer.absMaxIndex) {\r\n size += buffer.getSizeByIndex(index++);\r\n }\r\n const shift = Math.min(size, diff);\r\n if (shift) {\r\n viewport.paddings.forward.size += shift;\r\n scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);\r\n }\r\n }\r\n\r\n static setPosition(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, viewport, routines } = scroller;\r\n if (!scroll.hasPositionChanged(position)) {\r\n return done();\r\n }\r\n scroll.syntheticPosition = position;\r\n scroll.syntheticFulfill = false;\r\n\r\n scroll.cancelAnimation = routines.animate(() => {\r\n scroll.cancelAnimation = null;\r\n const inertiaDiff = (scroll.positionAfterAdjust as number) - viewport.scrollPosition;\r\n let diffLog = '';\r\n if (inertiaDiff > 0) {\r\n position -= inertiaDiff;\r\n scroll.syntheticPosition = position;\r\n diffLog = ` (-${inertiaDiff})`;\r\n }\r\n scroll.syntheticFulfill = true;\r\n viewport.scrollPosition = position;\r\n scroller.logger.stat('after scroll adjustment' + diffLog);\r\n done();\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class PreClip extends BaseProcessFactory(CommonProcess.preClip) {\r\n\r\n static run(scroller: Scroller): void {\r\n PreClip.prepareClip(scroller);\r\n\r\n scroller.workflow.call({\r\n process: PreClip.process,\r\n status: ProcessStatus.next,\r\n payload: {\r\n doClip: scroller.state.clip.doClip\r\n }\r\n });\r\n }\r\n\r\n static prepareClip(scroller: Scroller): void {\r\n const { state: { fetch, clip } } = scroller;\r\n if (PreClip.shouldNotClip(scroller)) {\r\n return;\r\n }\r\n const firstIndex = fetch.first.indexBuffer;\r\n const lastIndex = fetch.last.indexBuffer;\r\n scroller.logger.log(() =>\r\n `looking for ${fetch.direction ? 'anti-' + fetch.direction + ' ' : ''}items ` +\r\n `that are out of [${firstIndex}..${lastIndex}] range`);\r\n if (PreClip.isBackward(scroller, firstIndex)) {\r\n PreClip.prepareClipByDirection(scroller, Direction.backward, firstIndex);\r\n }\r\n if (PreClip.isForward(scroller, lastIndex)) {\r\n PreClip.prepareClipByDirection(scroller, Direction.forward, lastIndex);\r\n }\r\n if (!clip.doClip) {\r\n scroller.logger.log('skipping clip [no items to clip]');\r\n }\r\n return;\r\n }\r\n\r\n static shouldNotClip(scroller: Scroller): boolean {\r\n const { settings, buffer, state } = scroller;\r\n if (settings.infinite && !state.clip.force) {\r\n scroller.logger.log('skipping clip [infinite mode]');\r\n return true;\r\n }\r\n if (!buffer.size) {\r\n scroller.logger.log('skipping clip [empty buffer]');\r\n return true;\r\n }\r\n if (state.cycle.isInitial) {\r\n scroller.logger.log('skipping clip [initial cycle]');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static isBackward(scroller: Scroller, firstIndex: number): boolean {\r\n const { buffer, state: { clip, fetch } } = scroller;\r\n if (clip.force) {\r\n return clip.forceBackward;\r\n }\r\n if (fetch.direction !== Direction.backward) {\r\n if (firstIndex - 1 >= buffer.absMinIndex) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static isForward(scroller: Scroller, lastIndex: number): boolean {\r\n const { buffer, state: { clip, fetch } } = scroller;\r\n if (clip.force) {\r\n return clip.forceForward;\r\n }\r\n if (fetch.direction !== Direction.forward) {\r\n if (lastIndex + 1 <= buffer.absMaxIndex) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static prepareClipByDirection(scroller: Scroller, direction: Direction, edgeIndex: number): void {\r\n const forward = direction === Direction.forward;\r\n scroller.buffer.items.forEach(item => {\r\n if (\r\n (!forward && item.$index < edgeIndex) ||\r\n (forward && item.$index > edgeIndex)\r\n ) {\r\n item.toRemove = true;\r\n item.removeDirection = direction;\r\n scroller.state.clip.doClip = true;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class Clip extends BaseProcessFactory(CommonProcess.clip) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n\r\n Clip.doClip(scroller);\r\n\r\n workflow.call({\r\n process: Clip.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n static doClip(scroller: Scroller): void {\r\n const { buffer, viewport: { paddings }, state: { clip }, logger } = scroller;\r\n const size = { [Direction.backward]: 0, [Direction.forward]: 0 };\r\n\r\n logger.stat(`before clip (${++clip.callCount})`);\r\n\r\n const itemsToRemove = buffer.items.filter(item => {\r\n if (!item.toRemove) {\r\n return false;\r\n }\r\n item.hide();\r\n size[item.removeDirection] += item.size;\r\n return true;\r\n });\r\n\r\n if (itemsToRemove.length) {\r\n if (size[Direction.backward]) {\r\n paddings.byDirection(Direction.backward).size += size[Direction.backward];\r\n }\r\n if (size[Direction.forward]) {\r\n paddings.byDirection(Direction.forward).size += size[Direction.forward];\r\n }\r\n if (scroller.settings.onBeforeClip) {\r\n scroller.settings.onBeforeClip(itemsToRemove.map(item => item.get()));\r\n }\r\n }\r\n\r\n buffer.clip();\r\n\r\n logger.log(() => {\r\n const list = itemsToRemove.map(({ $index }) => $index);\r\n return list.length\r\n ? [\r\n `clipped ${list.length} item(s) from Buffer` +\r\n (size.backward ? `, +${size.backward} fwd px` : '') +\r\n (size.forward ? `, +${size.forward} bwd px` : '') +\r\n `, range: [${list[0]}..${list[list.length - 1]}]`\r\n ]\r\n : 'clipped 0 items from Buffer';\r\n });\r\n\r\n logger.stat('after clip');\r\n }\r\n\r\n}\r\n","import { Scroller } from '../scroller';\r\nimport { CommonProcess, AdapterProcess, ProcessStatus as Status } from '../processes/index';\r\nimport { IPackages, ProcessSubject } from '../interfaces/index';\r\n\r\ntype LogType = [unknown?, ...unknown[]];\r\n\r\nexport class Logger {\r\n\r\n readonly debug: boolean;\r\n readonly immediateLog: boolean;\r\n readonly logTime: boolean;\r\n readonly getTime: () => string;\r\n readonly getStat: () => string;\r\n readonly getFetchRange: () => string;\r\n readonly getWorkflowCycleData: () => string;\r\n readonly getLoopId: () => string;\r\n readonly getLoopIdNext: () => string;\r\n readonly getScrollPosition: () => number;\r\n private logs: unknown[][] = [];\r\n\r\n constructor(scroller: Scroller, packageInfo: IPackages, adapter?: { id: number }) {\r\n const { settings } = scroller;\r\n this.debug = settings.debug;\r\n this.immediateLog = settings.immediateLog;\r\n this.logTime = settings.logTime;\r\n this.getTime = (): string =>\r\n scroller.state && ` // time: ${scroller.state.time}`;\r\n this.getStat = (): string => {\r\n const { buffer, viewport } = scroller;\r\n const first = buffer.getFirstVisibleItem();\r\n const last = buffer.getLastVisibleItem();\r\n return 'pos: ' + viewport.scrollPosition + ', ' +\r\n 'size: ' + viewport.getScrollableSize() + ', ' +\r\n 'bwd_p: ' + viewport.paddings.backward.size + ', ' +\r\n 'fwd_p: ' + viewport.paddings.forward.size + ', ' +\r\n 'default: ' + (buffer.defaultSize || 'no') + ', ' +\r\n 'items: ' + buffer.getVisibleItemsCount() + ', ' +\r\n 'range: ' + (first && last ? `[${first.$index}..${last.$index}]` : 'no');\r\n };\r\n this.getFetchRange = (): string => {\r\n const { first: { index: first }, last: { index: last } } = scroller.state.fetch;\r\n return !Number.isNaN(first) && !Number.isNaN(last)\r\n ? `[${first}..${last}]`\r\n : 'no';\r\n };\r\n this.getLoopId = (): string => scroller.state.cycle.loopId;\r\n this.getLoopIdNext = (): string => scroller.state.cycle.loopIdNext;\r\n this.getWorkflowCycleData = (): string =>\r\n `${settings.instanceIndex}-${scroller.state.cycle.count}`;\r\n this.getScrollPosition = () => scroller.routines.getScrollPosition();\r\n this.log(() =>\r\n 'vscroll Workflow has been started, ' +\r\n `core: ${packageInfo.core.name} v${packageInfo.core.version}, ` +\r\n `consumer: ${packageInfo.consumer.name} v${packageInfo.consumer.version}, ` +\r\n `scroller instance: ${settings.instanceIndex}, adapter ` +\r\n (!adapter ? 'is not instantiated' : `instance: ${adapter.id}`)\r\n );\r\n }\r\n\r\n object(str: string, obj: unknown, stringify?: boolean): void {\r\n this.log(() => [\r\n str,\r\n stringify\r\n ? JSON.stringify(obj, (k, v) => {\r\n if (Number.isNaN(v)) {\r\n return 'NaN';\r\n }\r\n if (v === Infinity) {\r\n return 'Infinity';\r\n }\r\n if (v === -Infinity) {\r\n return '-Infinity';\r\n }\r\n if (v instanceof Element) {\r\n return 'HTMLElement';\r\n }\r\n if (v instanceof HTMLDocument) {\r\n return 'HTMLDocument';\r\n }\r\n if (typeof v === 'function') {\r\n return 'Function';\r\n }\r\n return v;\r\n })\r\n .replace(/\"/g, '')\r\n .replace(/(\\{|:|,)/g, '$1 ')\r\n .replace(/(\\})/g, ' $1')\r\n : obj\r\n ]);\r\n }\r\n\r\n stat(str?: string): void {\r\n if (this.debug) {\r\n const logStyles = [\r\n 'color: #888; border: dashed #888 0; border-bottom-width: 0px',\r\n 'color: #000; border-width: 0'\r\n ];\r\n this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);\r\n }\r\n }\r\n\r\n fetch(str?: string): void {\r\n if (this.debug) {\r\n const _text = 'fetch interval' + (str ? ` ${str}` : '');\r\n const logStyles = ['color: #888', 'color: #000'];\r\n this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);\r\n }\r\n }\r\n\r\n prepareForLog(data: unknown): unknown {\r\n return data instanceof Event && data.target\r\n ? this.getScrollPosition()\r\n : data;\r\n }\r\n\r\n logProcess(data: ProcessSubject): void {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const { process, status, payload } = data;\r\n\r\n // inner loop start-end log\r\n const loopLog: string[] = [];\r\n if (\r\n process === CommonProcess.init && status === Status.next\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopIdNext()} start`);\r\n } else if (\r\n process === CommonProcess.end\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopId()} done`);\r\n const parent = payload && payload.process;\r\n if (status === Status.next && (parent !== AdapterProcess.reset && parent !== AdapterProcess.reload)) {\r\n loopLog[0] += `, loop ${this.getLoopIdNext()} start`;\r\n }\r\n }\r\n if (loopLog.length) {\r\n this.log(() => [...loopLog, 'color: #006600;']);\r\n }\r\n }\r\n\r\n logCycle(start = true): void {\r\n const logData = this.getWorkflowCycleData();\r\n const border = start ? '1px 0 0 1px' : '0 0 1px 1px';\r\n const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;\r\n this.log(() => [`%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `, logStyles]);\r\n }\r\n\r\n logError(str: string): void {\r\n if (this.debug) {\r\n const logStyles = ['color: #a00;', 'color: #000'];\r\n this.log(() => ['error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`, ...logStyles]);\r\n }\r\n }\r\n\r\n logAdapterMethod = (methodName: string, args?: unknown, add?: string): void => {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const params = (\r\n args === void 0 ? [] : (Array.isArray(args) ? args : [args])\r\n )\r\n .map((arg: unknown) => {\r\n if (typeof arg === 'function') {\r\n return 'func';\r\n } else if (typeof arg !== 'object' || !arg) {\r\n return arg;\r\n } else if (Array.isArray(arg)) {\r\n return `[of ${arg.length}]`;\r\n }\r\n return '{ ' + Object.keys(arg).join(', ') + ' }';\r\n })\r\n .join(', ');\r\n this.log(`adapter: ${methodName}(${params || ''})${add || ''}`);\r\n };\r\n\r\n log(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (typeof args[0] === 'function') {\r\n args = args[0]();\r\n if (!Array.isArray(args)) {\r\n args = [args];\r\n }\r\n }\r\n if (args.every(item => item === void 0)) {\r\n return;\r\n }\r\n if (this.logTime) {\r\n args = [...args, this.getTime()];\r\n }\r\n args = args.map((arg: unknown) => this.prepareForLog(arg));\r\n if (this.immediateLog) {\r\n console.log.apply(this, args as LogType);\r\n } else {\r\n this.logs.push(args);\r\n }\r\n }\r\n }\r\n\r\n // logNow(...args: unknown[]) {\r\n // const immediateLog = this.immediateLog;\r\n // const debug = this.debug;\r\n // (this as any).debug = true;\r\n // (this as any).immediateLog = true;\r\n // this.log.apply(this, args);\r\n // (this as any).debug = debug;\r\n // (this as any).immediateLog = immediateLog;\r\n // }\r\n\r\n logForce(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (!this.immediateLog && this.logs.length) {\r\n this.logs.forEach(logArgs => console.log.apply(this, logArgs));\r\n this.logs = [];\r\n }\r\n if (args.length) {\r\n console.log.apply(this, args as LogType);\r\n }\r\n }\r\n }\r\n}\r\n","import { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\nimport { IRoutines, CustomRoutinesClass } from '../interfaces/index';\r\n\r\ntype MethodContainer = { [key: string]: (...args: unknown[]) => void };\r\n\r\nexport class Routines implements IRoutines {\r\n\r\n readonly settings: IRoutines['settings'];\r\n readonly element: HTMLElement;\r\n readonly viewport: HTMLElement;\r\n\r\n constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass) {\r\n this.element = element;\r\n this.settings = {\r\n viewport: settings.viewport,\r\n horizontal: settings.horizontal,\r\n window: settings.windowViewport\r\n };\r\n // provide custom overrides for IRoutines methods\r\n if (CustomRoutines) {\r\n const self = (this as unknown as MethodContainer);\r\n const routines = new CustomRoutines(element, this.settings) as MethodContainer;\r\n Object.getOwnPropertyNames(Object.getPrototypeOf(routines))\r\n .filter(method =>\r\n method !== 'constructor' &&\r\n typeof routines[method] === 'function' &&\r\n typeof self[method] === 'function'\r\n )\r\n .forEach(method =>\r\n self[method] = (...args: unknown[]) =>\r\n routines[method].apply(this, args)\r\n );\r\n }\r\n // initialization\r\n this.viewport = this.getViewportElement();\r\n this.onInit(settings);\r\n }\r\n\r\n checkElement(element: HTMLElement): void {\r\n if (!element) {\r\n throw new Error('HTML element is not defined');\r\n }\r\n }\r\n\r\n getViewportElement(): HTMLElement {\r\n if (this.settings.window) {\r\n return document.documentElement;\r\n }\r\n if (this.settings.viewport) {\r\n return this.settings.viewport;\r\n }\r\n this.checkElement(this.element);\r\n const parent = this.element.parentElement as HTMLElement;\r\n this.checkElement(parent);\r\n return parent;\r\n }\r\n\r\n onInit(settings: Settings): void {\r\n if (settings.windowViewport) {\r\n if ('scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n }\r\n if (settings.dismissOverflowAnchor) {\r\n this.viewport.style.overflowAnchor = 'none';\r\n }\r\n }\r\n\r\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\r\n this.checkElement(element);\r\n return element.querySelector(selector);\r\n }\r\n\r\n findPaddingElement(direction: Direction): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\r\n }\r\n\r\n findItemElement(id: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\r\n }\r\n\r\n getScrollPosition(): number {\r\n if (this.settings.window) {\r\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\r\n }\r\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\r\n }\r\n\r\n setScrollPosition(value: number): void {\r\n value = Math.max(0, value);\r\n if (this.settings.window) {\r\n if (this.settings.horizontal) {\r\n window.scrollTo(value, window.scrollY);\r\n } else {\r\n window.scrollTo(window.scrollX, value);\r\n }\r\n return;\r\n }\r\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\r\n }\r\n\r\n getElementParams(element: HTMLElement): DOMRect {\r\n this.checkElement(element);\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n getWindowParams(): DOMRect {\r\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\r\n return {\r\n 'height': clientHeight,\r\n 'width': clientWidth,\r\n 'top': clientTop,\r\n 'bottom': clientTop + clientHeight,\r\n 'left': clientLeft,\r\n 'right': clientLeft + clientWidth,\r\n 'x': clientLeft,\r\n 'y': clientTop,\r\n 'toJSON': () => null,\r\n };\r\n }\r\n\r\n getSize(element: HTMLElement): number {\r\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getScrollerSize(): number {\r\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getViewportSize(): number {\r\n if (this.settings.window) {\r\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n return this.getSize(this.viewport);\r\n }\r\n\r\n getSizeStyle(element: HTMLElement): number {\r\n this.checkElement(element);\r\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\r\n return parseFloat(size as string) || 0;\r\n }\r\n\r\n setSizeStyle(element: HTMLElement, value: number): void {\r\n this.checkElement(element);\r\n value = Math.max(0, Math.round(value));\r\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\r\n }\r\n\r\n getEdge(element: HTMLElement, direction: Direction): number {\r\n const { horizontal } = this.settings;\r\n const params = this.getElementParams(element);\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n\r\n getViewportEdge(direction: Direction): number {\r\n const { window, horizontal } = this.settings;\r\n if (window) {\r\n const params = this.getWindowParams();\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n return this.getEdge(this.viewport, direction);\r\n }\r\n\r\n makeElementVisible(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.left = '';\r\n element.style.top = '';\r\n element.style.position = '';\r\n }\r\n\r\n hideElement(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.display = 'none';\r\n }\r\n\r\n getOffset(): number {\r\n const get = (element: HTMLElement) =>\r\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\r\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\r\n }\r\n\r\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\r\n this.checkElement(element);\r\n element.scrollIntoView(argument);\r\n }\r\n\r\n render(cb: () => void): () => void {\r\n const timeoutId = setTimeout(() => cb());\r\n return () => clearTimeout(timeoutId);\r\n }\r\n\r\n animate(cb: () => void): () => void {\r\n const animationFrameId = requestAnimationFrame(() => cb());\r\n return () => cancelAnimationFrame(animationFrameId);\r\n }\r\n\r\n onScroll(handler: EventListener): () => void {\r\n const eventReceiver = this.settings.window ? window : this.viewport;\r\n eventReceiver.addEventListener('scroll', handler);\r\n return () => eventReceiver.removeEventListener('scroll', handler);\r\n }\r\n\r\n}\r\n","import { Routines } from './domRoutines';\r\nimport { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Padding {\r\n\r\n element: HTMLElement;\r\n direction: Direction;\r\n routines: Routines;\r\n\r\n constructor(direction: Direction, routines: Routines) {\r\n const found = routines.findPaddingElement(direction);\r\n routines.checkElement(found as HTMLElement);\r\n this.element = found as HTMLElement;\r\n this.direction = direction;\r\n this.routines = routines;\r\n }\r\n\r\n reset(size?: number): void {\r\n this.size = size || 0;\r\n }\r\n\r\n get size(): number {\r\n return this.routines.getSizeStyle(this.element);\r\n }\r\n\r\n set size(value: number) {\r\n this.routines.setSizeStyle(this.element, value);\r\n }\r\n\r\n}\r\n\r\nexport class Paddings {\r\n settings: Settings;\r\n forward: Padding;\r\n backward: Padding;\r\n\r\n constructor(routines: Routines, settings: Settings) {\r\n this.settings = settings;\r\n this.forward = new Padding(Direction.forward, routines);\r\n this.backward = new Padding(Direction.backward, routines);\r\n }\r\n\r\n byDirection(direction: Direction, opposite?: boolean): Padding {\r\n return direction === Direction.backward\r\n ? (opposite ? this.forward : this.backward)\r\n : (opposite ? this.backward : this.forward);\r\n }\r\n\r\n reset(viewportSize: number, startIndex: number, offset: number): void {\r\n const positive = this.getPositiveSize(startIndex, viewportSize, offset);\r\n const negative = this.getNegativeSize(startIndex);\r\n if (this.settings.inverse) {\r\n this.forward.reset(negative);\r\n this.backward.reset(positive);\r\n const diff = viewportSize - this.backward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size += diff;\r\n this.forward.size -= diff;\r\n }\r\n } else {\r\n this.forward.reset(positive);\r\n this.backward.reset(negative);\r\n const diff = viewportSize - this.forward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size -= diff;\r\n this.forward.size += diff;\r\n }\r\n }\r\n\r\n }\r\n\r\n getPositiveSize(startIndex: number, viewportSize: number, offset: number): number {\r\n const { settings } = this;\r\n let positiveSize = viewportSize;\r\n if (isFinite(settings.maxIndex)) {\r\n positiveSize = (settings.maxIndex - startIndex + 1) * settings.itemSize;\r\n }\r\n if (offset) {\r\n positiveSize = Math.max(positiveSize - offset, 0);\r\n }\r\n return positiveSize;\r\n }\r\n\r\n getNegativeSize(startIndex: number): number {\r\n const { settings } = this;\r\n let negativeSize = 0;\r\n if (isFinite(settings.minIndex)) {\r\n negativeSize = (startIndex - settings.minIndex) * settings.itemSize;\r\n }\r\n return negativeSize;\r\n }\r\n}\r\n","import { Paddings } from './paddings';\r\nimport { Settings } from './settings';\r\nimport { Routines } from './domRoutines';\r\nimport { Item } from './item';\r\nimport { State } from './state';\r\nimport { Logger } from './logger';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Viewport {\r\n\r\n offset: number;\r\n paddings: Paddings;\r\n\r\n readonly settings: Settings;\r\n readonly routines: Routines;\r\n readonly state: State;\r\n readonly logger: Logger;\r\n\r\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\r\n this.settings = settings;\r\n this.routines = routines;\r\n this.state = state;\r\n this.logger = logger;\r\n this.paddings = new Paddings(this.routines, settings);\r\n }\r\n\r\n reset(startIndex: number): void {\r\n this.setOffset();\r\n this.paddings.reset(this.getSize(), startIndex, this.offset);\r\n this.scrollPosition = this.paddings.backward.size || 0;\r\n this.state.scroll.reset();\r\n }\r\n\r\n setPosition(value: number): number {\r\n const oldPosition = this.scrollPosition;\r\n if (oldPosition === value) {\r\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\r\n return value;\r\n }\r\n this.routines.setScrollPosition(value);\r\n const position = this.scrollPosition;\r\n this.logger.log(() => [\r\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\r\n ]);\r\n return position;\r\n }\r\n\r\n get scrollPosition(): number {\r\n return this.routines.getScrollPosition();\r\n }\r\n\r\n set scrollPosition(value: number) {\r\n this.setPosition(value);\r\n }\r\n\r\n getSize(): number {\r\n return this.routines.getViewportSize();\r\n }\r\n\r\n getScrollableSize(): number {\r\n return this.routines.getScrollerSize();\r\n }\r\n\r\n getMaxScrollPosition(): number {\r\n return this.getScrollableSize() - this.getSize();\r\n }\r\n\r\n getBufferPadding(): number {\r\n return this.getSize() * this.settings.padding;\r\n }\r\n\r\n getEdge(direction: Direction): number {\r\n return this.routines.getViewportEdge(direction);\r\n }\r\n\r\n setOffset(): void {\r\n this.offset = this.routines.getOffset();\r\n }\r\n\r\n findItemElementById(id: string): HTMLElement | null {\r\n return this.routines.findItemElement(id);\r\n }\r\n\r\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\r\n const bwd = direction === Direction.backward;\r\n const opposite = bwd ? Direction.forward : Direction.backward;\r\n const viewportEdge = this.getEdge(direction);\r\n let item, diff = 0;\r\n for (\r\n let i = bwd ? 0 : items.length - 1;\r\n bwd ? i <= items.length - 1 : i >= 0;\r\n i += bwd ? 1 : -1\r\n ) {\r\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\r\n diff = itemEdge - viewportEdge;\r\n if (bwd && diff > 0 || !bwd && diff < 0) {\r\n item = items[i];\r\n break;\r\n }\r\n }\r\n return { item, index: item ? item.$index : NaN, diff };\r\n }\r\n\r\n}\r\n","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","import { DefaultSize } from './defaultSize';\r\nimport { Item } from '../item';\r\nimport { Settings } from '../settings';\r\nimport { Logger } from '../logger';\r\nimport { SizeStrategy, Direction } from '../../inputs/index';\r\n\r\ninterface ItemToCache<Data> {\r\n $index: number;\r\n data: Data;\r\n size?: number;\r\n}\r\n\r\ninterface ItemUpdate {\r\n $index: number;\r\n size: number;\r\n toRemove?: boolean;\r\n}\r\n\r\nexport class ItemCache<Data = unknown> {\r\n $index: number;\r\n data: Data | null;\r\n size?: number;\r\n position: number;\r\n\r\n constructor(item: ItemToCache<Data>, saveData: boolean) {\r\n this.$index = item.$index;\r\n this.data = saveData ? item.data : null;\r\n this.size = item.size;\r\n }\r\n\r\n changeIndex(value: number): void {\r\n this.$index = value;\r\n }\r\n}\r\n\r\nexport class Cache<Data = unknown> {\r\n minIndex: number;\r\n maxIndex: number;\r\n\r\n readonly itemSize: number;\r\n readonly saveData: boolean;\r\n readonly cacheOnReload: boolean;\r\n readonly sizeStrategy: SizeStrategy;\r\n readonly logger: Logger;\r\n private items: Map<number, ItemCache<Data>>;\r\n private defaultSize: DefaultSize;\r\n\r\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\r\n this.itemSize = itemSize;\r\n this.saveData = cacheData;\r\n this.cacheOnReload = cacheOnReload;\r\n this.sizeStrategy = sizeStrategy;\r\n this.logger = logger;\r\n this.items = new Map<number, ItemCache<Data>>();\r\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\r\n this.reset(true);\r\n }\r\n\r\n reset(force: boolean): void {\r\n force = force || !this.cacheOnReload;\r\n if (force) {\r\n this.minIndex = +Infinity;\r\n this.maxIndex = -Infinity;\r\n this.items.clear();\r\n }\r\n this.defaultSize.reset(force);\r\n }\r\n\r\n get size(): number {\r\n return this.items.size;\r\n }\r\n\r\n get(index: number): ItemCache<Data> | undefined {\r\n return this.items.get(index);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n const item = this.get(index);\r\n return item && item.size || this.defaultSize.get();\r\n }\r\n\r\n getDefaultSize(): number {\r\n return this.defaultSize.get();\r\n }\r\n\r\n recalculateDefaultSize(): boolean {\r\n if (this.defaultSize.recalculate(this.size)) {\r\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds item to Set by $index, replaces existed item if $index matches.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\r\n * \r\n * @returns {ItemCache<Data>} Cached item.\r\n */\r\n add(item: Item<Data>): ItemCache<Data> {\r\n let itemCache = this.get(item.$index);\r\n if (itemCache) { // adding item is already cached\r\n if (this.saveData) {\r\n itemCache.data = item.data;\r\n }\r\n if (itemCache.size !== item.size) {\r\n if (itemCache.size) {\r\n this.defaultSize.setExisted(itemCache.size, item.size);\r\n } else {\r\n this.defaultSize.setNew(item.size);\r\n }\r\n itemCache.size = item.size;\r\n }\r\n } else {\r\n itemCache = new ItemCache<Data>(item, this.saveData);\r\n this.items.set(item.$index, itemCache);\r\n this.defaultSize.setNew(item.size);\r\n }\r\n if (item.$index < this.minIndex) {\r\n this.minIndex = item.$index;\r\n }\r\n if (item.$index > this.maxIndex) {\r\n this.maxIndex = item.$index;\r\n }\r\n return itemCache;\r\n }\r\n\r\n /**\r\n * Inserts items to Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\r\n * @param {number} index The index before/after which the insertion is performed.\r\n * @param {Direction} direction Determines the direction of insertion.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the inserted ones are increased.\r\n * If true, indexes that are less than than the inserted ones are decreased.\r\n */\r\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n const length = toInsert.length;\r\n let min = Infinity, max = -Infinity;\r\n const set = (item: ItemCache<Data>) => {\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n };\r\n this.items.forEach(item => {\r\n let shift = 0;\r\n if (direction === Direction.backward) {\r\n if (item.$index < index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index >= index && !fixRight) {\r\n shift = length;\r\n }\r\n } else if (direction === Direction.forward) {\r\n if (item.$index <= index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index > index && !fixRight) {\r\n shift = length;\r\n }\r\n }\r\n if (shift) {\r\n item.changeIndex(item.$index + shift);\r\n }\r\n set(item);\r\n });\r\n if (this.saveData) { // persist data with no sizes\r\n toInsert.forEach((data, i) => {\r\n const $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\r\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\r\n set(item);\r\n });\r\n }\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Removes items from Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {number[]} toRemove List of indexes to be removed.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the removed ones will be decreased.\r\n * If true, indexes that are less than than the removed ones will be increased.\r\n */\r\n removeItems(toRemove: number[], fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n if (toRemove.some(index => index === item.$index)) {\r\n if (item.size) {\r\n this.defaultSize.setRemoved(item.size);\r\n }\r\n return;\r\n }\r\n const diff = fixRight\r\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\r\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\r\n item.changeIndex(item.$index + diff);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Destructively updates Set based on subset (before-after) changes.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes. Maintains default item size on remove only.\r\n *\r\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\r\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\r\n * Items to be removed must have toRemove flag: before[].toRemove = true.\r\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\r\n * Must contain at least 1 $index from \"before\" or be empty.\r\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\r\n */\r\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\r\n if (!this.size || !before.length) {\r\n return;\r\n }\r\n const minB = before[0].$index, maxB = before[before.length - 1].$index;\r\n let leftDiff: number, rightDiff: number;\r\n if (after.length) {\r\n const minA = after[0].$index, maxA = after[after.length - 1].$index;\r\n leftDiff = minA - minB;\r\n rightDiff = maxA - maxB;\r\n } else {\r\n leftDiff = fixRight ? maxB - minB + 1 : 0;\r\n rightDiff = fixRight ? 0 : minB - maxB - 1;\r\n }\r\n const items = new Map<number, ItemCache<Data>>();\r\n this.items.forEach(item => {\r\n if (item.$index < minB) { // items to the left of the subset\r\n item.changeIndex(item.$index + leftDiff);\r\n items.set(item.$index, item);\r\n return;\r\n } else if (item.$index > maxB) { // items to the right of the subset\r\n item.changeIndex(item.$index + rightDiff);\r\n items.set(item.$index, item);\r\n return;\r\n }\r\n });\r\n after.forEach(item => // subset items\r\n items.set(item.$index, new ItemCache<Data>(item, this.saveData))\r\n );\r\n before // to maintain default size on remove\r\n .filter(item => item.toRemove)\r\n .forEach(item => this.defaultSize.setRemoved(item.size));\r\n this.minIndex += leftDiff;\r\n this.maxIndex += rightDiff;\r\n this.items = items;\r\n }\r\n\r\n /**\r\n * Shifts all indexes by some value.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {number} delta A shift value.\r\n */\r\n shiftIndexes(delta: number): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n item.changeIndex(item.$index + delta);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n}\r\n","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","import { Cache } from './buffer/cache';\r\nimport { CheckBufferCall } from './buffer/checkCall';\r\nimport { Item } from './item';\r\nimport { Settings } from './settings';\r\nimport { Logger } from './logger';\r\nimport { Reactive } from './reactive';\r\nimport { Direction } from '../inputs/index';\r\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\r\n\r\nexport class Buffer<Data> {\r\n\r\n private _items: Item<Data>[] = [];\r\n private _absMinIndex: number;\r\n private _absMaxIndex: number;\r\n bof: Reactive<boolean>;\r\n eof: Reactive<boolean>;\r\n\r\n changeItems: OnDataChanged<Data>;\r\n minIndexUser: number;\r\n maxIndexUser: number;\r\n startIndexUser: number;\r\n startIndex: number;\r\n\r\n private pristine: boolean;\r\n private cache: Cache<Data>;\r\n private checkCall: CheckBufferCall<Data>;\r\n private readonly logger: Logger;\r\n\r\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\r\n this.logger = logger;\r\n this.changeItems = onDataChanged;\r\n this.bof = new Reactive<boolean>(false);\r\n this.eof = new Reactive<boolean>(false);\r\n this.cache = new Cache<Data>(settings, logger);\r\n this.checkCall = new CheckBufferCall(this, logger);\r\n this.startIndexUser = settings.startIndex;\r\n this.minIndexUser = settings.minIndex;\r\n this.maxIndexUser = settings.maxIndex;\r\n this.reset(true);\r\n }\r\n\r\n dispose(): void {\r\n this.bof.dispose();\r\n this.eof.dispose();\r\n this._items.forEach(item => item.dispose());\r\n this._items = [];\r\n }\r\n\r\n reset(force: boolean, startIndex?: number): void {\r\n this.items.forEach(item => item.hide());\r\n this.pristine = true;\r\n this.items = [];\r\n this.cache.reset(force);\r\n this.absMinIndex = this.minIndexUser;\r\n this.absMaxIndex = this.maxIndexUser;\r\n this.setCurrentStartIndex(startIndex);\r\n this.bof.set(false);\r\n this.eof.set(false);\r\n this.pristine = false;\r\n }\r\n\r\n setCurrentStartIndex(newStartIndex?: unknown): void {\r\n const min = this.minIndexUser;\r\n const max = this.maxIndexUser;\r\n const start = this.startIndexUser;\r\n let index = Number(newStartIndex);\r\n if (Number.isNaN(index)) {\r\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\r\n index = start;\r\n }\r\n if (index < min) {\r\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\r\n index = max;\r\n }\r\n this.startIndex = index;\r\n }\r\n\r\n set items(items: Item<Data>[]) {\r\n this._items = items;\r\n this.changeItems(items);\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get items(): Item<Data>[] {\r\n return this._items;\r\n }\r\n\r\n set absMinIndex(value: number) {\r\n if (this._absMinIndex !== value) {\r\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n }\r\n }\r\n\r\n get absMinIndex(): number {\r\n return this._absMinIndex;\r\n }\r\n\r\n set absMaxIndex(value: number) {\r\n if (this._absMaxIndex !== value) {\r\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get absMaxIndex(): number {\r\n return this._absMaxIndex;\r\n }\r\n\r\n private checkBOF() {\r\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\r\n const bof = this.items.length\r\n ? (this.items[0].$index === this.absMinIndex)\r\n : isFinite(this.absMinIndex);\r\n this.bof.set(bof);\r\n }\r\n\r\n private checkEOF() {\r\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\r\n const eof = this.items.length\r\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\r\n : isFinite(this.absMaxIndex);\r\n this.eof.set(eof);\r\n }\r\n\r\n get size(): number {\r\n return this._items.length;\r\n }\r\n\r\n get cacheSize(): number {\r\n return this.cache.size;\r\n }\r\n\r\n get defaultSize(): number {\r\n return this.cache.getDefaultSize();\r\n }\r\n\r\n get minIndex(): number {\r\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\r\n }\r\n\r\n get maxIndex(): number {\r\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\r\n }\r\n\r\n get firstIndex(): number {\r\n return this.items.length ? this.items[0].$index : NaN;\r\n }\r\n\r\n get lastIndex(): number {\r\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\r\n }\r\n\r\n get finiteAbsMinIndex(): number {\r\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\r\n }\r\n\r\n get finiteAbsMaxIndex(): number {\r\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\r\n }\r\n\r\n get($index: number): Item<Data> | undefined {\r\n return this.items.find(item => item.$index === $index);\r\n }\r\n\r\n setItems(items: Item<Data>[]): boolean {\r\n if (!this.items.length) {\r\n this.items = [...items];\r\n } else if (this.items[0].$index > items[items.length - 1].$index) {\r\n this.items = [...items, ...this.items];\r\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\r\n this.items = [...this.items, ...items];\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n clip(): void {\r\n this.items = this.items.filter(({ toRemove }) => !toRemove);\r\n }\r\n\r\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n return this.checkCall.insertInBuffer(predicate, before, after);\r\n }\r\n\r\n private shiftExtremum(amount: number, fixRight: boolean) {\r\n if (!fixRight) {\r\n this.absMaxIndex += amount;\r\n } else {\r\n this.absMinIndex -= amount;\r\n this.startIndex -= amount;\r\n }\r\n if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n } else if (this.startIndex < this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n }\r\n }\r\n\r\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\r\n if (!this.checkCall.insertVirtual(items, index, direction)) {\r\n return false;\r\n }\r\n let shift = 0;\r\n if (index <= this.firstIndex && !fixRight) {\r\n shift = items.length;\r\n } else if (index >= this.lastIndex && fixRight) {\r\n shift = -items.length;\r\n }\r\n if (shift) {\r\n this.items.forEach(item => item.updateIndex(item.$index + shift));\r\n this.cache.insertItems(items, index, direction, fixRight);\r\n this.items = [...this.items];\r\n }\r\n this.shiftExtremum(items.length, fixRight);\r\n return true;\r\n }\r\n\r\n removeVirtually(indexes: number[], fixRight: boolean): void {\r\n const length = this.items.length;\r\n let shifted = false;\r\n for (\r\n let i = fixRight ? length - 1 : 0;\r\n fixRight ? i >= 0 : i < length;\r\n fixRight ? i-- : i++\r\n ) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce((acc, index) => acc + (fixRight\r\n ? (item.$index < index ? 1 : 0)\r\n : (item.$index > index ? -1 : 0)\r\n ), 0);\r\n shifted = shifted || !!diff;\r\n item.updateIndex(item.$index + diff);\r\n }\r\n this.shiftExtremum(-indexes.length, fixRight);\r\n if (shifted) {\r\n this.items = [...this.items];\r\n }\r\n this.cache.removeItems(indexes, fixRight);\r\n }\r\n\r\n fillEmpty(\r\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n ): boolean {\r\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\r\n return false;\r\n }\r\n const before = Number.isInteger(beforeIndex);\r\n const index = (before ? beforeIndex : afterIndex) as number;\r\n const shift = (fixRight ? items.length : (before ? 1 : 0));\r\n this.items = items.map((data, i) =>\r\n generator(index + i + (!before ? 1 : 0) - shift, data)\r\n );\r\n this._absMinIndex = this.items[0].$index;\r\n this._absMaxIndex = this.items[this.size - 1].$index;\r\n if (this.startIndex <= this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n } else if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n }\r\n return true;\r\n }\r\n\r\n updateItems(\r\n predicate: BufferUpdater<Data>,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n indexToTrack: number,\r\n fixRight: boolean\r\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\r\n if (!this.size || Number.isNaN(this.firstIndex)) {\r\n return { trackedIndex: NaN, toRemove: [] };\r\n }\r\n let trackedIndex = indexToTrack;\r\n let index = fixRight ? this.lastIndex : this.firstIndex;\r\n const items: Item<Data>[] = [];\r\n const diff = fixRight ? -1 : 1;\r\n const limit = this.size - 1;\r\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\r\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\r\n\r\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\r\n const item = this.items[i];\r\n beforeMap.set(item.$index, item);\r\n const result = predicate(item);\r\n\r\n // if predicate result is falsy or empty array -> delete\r\n if (!result || (Array.isArray(result) && !result.length)) {\r\n item.toRemove = true;\r\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\r\n this.shiftExtremum(-1, fixRight);\r\n continue;\r\n }\r\n\r\n // if predicate result is truthy but not array -> leave\r\n if (!Array.isArray(result)) {\r\n item.updateIndex(index);\r\n updateArray.call(items, item);\r\n index += diff;\r\n continue;\r\n }\r\n\r\n // if predicate result is non-empty array -> insert/replace\r\n if (item.$index < indexToTrack) {\r\n trackedIndex += fixRight ? 0 : result.length - 1;\r\n } else if (item.$index > indexToTrack) {\r\n trackedIndex += fixRight ? 1 - result.length : 0;\r\n }\r\n let toRemove = true;\r\n const newItems: Item<Data>[] = [];\r\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\r\n let newItem: Item<Data>;\r\n if (item.data === data) {\r\n if (indexToTrack === item.$index) {\r\n trackedIndex = index + i * diff;\r\n }\r\n item.updateIndex(index + i * diff);\r\n newItem = item;\r\n toRemove = false; // insert case\r\n } else {\r\n newItem = generator(index + i * diff, data);\r\n newItem.toInsert = true;\r\n }\r\n updateArray.call(newItems, newItem);\r\n });\r\n item.toRemove = toRemove;\r\n updateArray.call(items, ...newItems);\r\n index += diff * result.length;\r\n if (result.length > 1) {\r\n this.shiftExtremum(result.length - 1, fixRight);\r\n }\r\n }\r\n\r\n const toRemove = this.items.filter(item => item.toRemove);\r\n const itemsBefore = Array.from(beforeMap)\r\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\r\n .sort((a, b) => a.$index - b.$index);\r\n this.items = items;\r\n this.cache.updateSubset(itemsBefore, items, fixRight);\r\n\r\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\r\n trackedIndex = NaN;\r\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\r\n trackedIndex = this.finiteAbsMaxIndex;\r\n } else if (trackedIndex < this.finiteAbsMinIndex) {\r\n trackedIndex = this.finiteAbsMinIndex;\r\n }\r\n return { trackedIndex, toRemove };\r\n }\r\n\r\n cacheItem(item: Item<Data>): void {\r\n this.cache.add(item);\r\n }\r\n\r\n getFirstVisibleItemIndex(): number {\r\n const length = this.items.length;\r\n for (let i = 0; i < length; i++) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getLastVisibleItemIndex(): number {\r\n for (let i = this.items.length - 1; i >= 0; i--) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getFirstVisibleItem(): Item<Data> | undefined {\r\n const index = this.getFirstVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getLastVisibleItem(): Item<Data> | undefined {\r\n const index = this.getLastVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\r\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\r\n this.getLastVisibleItem() : this.getFirstVisibleItem();\r\n }\r\n\r\n getVisibleItemsCount(): number {\r\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n return this.cache.getSizeByIndex(index);\r\n }\r\n\r\n checkDefaultSize(): boolean {\r\n return this.cache.recalculateDefaultSize();\r\n }\r\n\r\n}\r\n","import { ProcessName } from '../../interfaces/index';\r\nimport { Reactive } from '../reactive';\r\n\r\nclass InnerLoopModel {\r\n total: number;\r\n count: number;\r\n isInitial: boolean;\r\n busy: Reactive<boolean>;\r\n\r\n get first(): boolean {\r\n return this.count === 0;\r\n }\r\n\r\n constructor(total: number) {\r\n this.total = total;\r\n this.isInitial = false;\r\n this.busy = new Reactive<boolean>(false);\r\n }\r\n\r\n done() {\r\n this.isInitial = false;\r\n this.count++;\r\n this.total++;\r\n this.busy.set(false);\r\n }\r\n\r\n start() {\r\n this.busy.set(true);\r\n }\r\n\r\n dispose() {\r\n this.busy.dispose();\r\n }\r\n}\r\n\r\nexport class WorkflowCycleModel {\r\n instanceIndex: number;\r\n count: number;\r\n isInitial: boolean;\r\n initiator: ProcessName;\r\n innerLoop: InnerLoopModel;\r\n interrupter: ProcessName | null;\r\n busy: Reactive<boolean>;\r\n\r\n get loopId(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\r\n }\r\n\r\n get loopIdNext(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\r\n }\r\n\r\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\r\n const cycleCount = cycle ? cycle.count : 1;\r\n const loopCount = cycle ? cycle.innerLoop.count : 0;\r\n\r\n this.instanceIndex = instanceIndex;\r\n this.innerLoop = new InnerLoopModel(loopCount);\r\n this.interrupter = null;\r\n this.busy = new Reactive<boolean>(false);\r\n this.end(cycleCount);\r\n }\r\n\r\n start(isInitial: boolean, initiator: ProcessName): void {\r\n this.isInitial = isInitial;\r\n this.initiator = initiator;\r\n this.innerLoop.isInitial = isInitial;\r\n this.innerLoop.count = 0;\r\n this.interrupter = null;\r\n this.busy.set(true);\r\n }\r\n\r\n end(count: number): void {\r\n this.count = count;\r\n this.isInitial = false;\r\n this.busy.set(false);\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n if (forever) {\r\n // otherwise the value will be persisted during re-instantiation\r\n this.busy.dispose();\r\n }\r\n this.innerLoop.dispose();\r\n }\r\n}\r\n","import { Item } from '../item';\r\nimport { Direction } from '../../inputs/index';\r\n\r\nclass Positions {\r\n startDelta: number;\r\n before: number;\r\n relative: number;\r\n start: number;\r\n end: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.startDelta = 0;\r\n this.before = 0;\r\n }\r\n}\r\n\r\nclass First {\r\n index: number;\r\n indexBuffer: number;\r\n position: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n this.position = NaN;\r\n }\r\n}\r\n\r\nclass Last {\r\n index: number;\r\n indexBuffer: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n }\r\n}\r\n\r\nclass FirstVisible {\r\n index: number;\r\n delta: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.delta = 0;\r\n }\r\n}\r\n\r\nexport class FetchModel {\r\n private readonly directionPriority: Direction;\r\n private _newItemsData: unknown[] | null; // there are public setter and getter\r\n\r\n items: Item[];\r\n positions: Positions;\r\n first: First;\r\n last: Last;\r\n hasAnotherPack: boolean;\r\n callCount: number;\r\n minIndex: number;\r\n firstVisible: FirstVisible;\r\n direction: Direction | null;\r\n cancel: (() => void) | null;\r\n\r\n simulate: boolean;\r\n isCheck: boolean;\r\n doRemove: boolean;\r\n\r\n constructor(directionPriority: Direction) {\r\n this.directionPriority = directionPriority;\r\n this.callCount = 0;\r\n this.positions = new Positions();\r\n this.first = new First();\r\n this.last = new Last();\r\n this.firstVisible = new FirstVisible();\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this._newItemsData = null;\r\n this.items = [];\r\n this.positions.reset();\r\n this.first.reset();\r\n this.last.reset();\r\n this.firstVisible.reset();\r\n this.hasAnotherPack = false;\r\n this.direction = null;\r\n this.cancel = null;\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n get newItemsData(): unknown[] | null {\r\n return this._newItemsData;\r\n }\r\n\r\n set newItemsData(items: unknown[] | null) {\r\n this._newItemsData = items;\r\n if (items && items.length) {\r\n this.callCount++;\r\n }\r\n }\r\n\r\n get shouldFetch(): boolean {\r\n return !!this.count;\r\n }\r\n\r\n get hasNewItems(): boolean {\r\n return !!((this._newItemsData && this._newItemsData.length));\r\n }\r\n\r\n get index(): number {\r\n return this.first.index;\r\n }\r\n\r\n get count(): number {\r\n return !isNaN(this.first.index) && !isNaN(this.last.index) ? this.last.index - this.first.index + 1 : 0;\r\n }\r\n\r\n shouldCheckPreSizeExpectation(lastBufferedIndex: number): boolean {\r\n if (this.directionPriority === Direction.backward) {\r\n return false;\r\n }\r\n const lastFetched = this.items[this.items.length - 1];\r\n return lastFetched && lastFetched.$index < lastBufferedIndex;\r\n }\r\n\r\n startSimulate(items: Item[]): void {\r\n this.simulate = true;\r\n this._newItemsData = items.map(item => item.data);\r\n this.items = items;\r\n this.hasAnotherPack = false;\r\n }\r\n\r\n stopSimulate(): void {\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n fill(items: Item[], start: number): void {\r\n this.startSimulate(items);\r\n this.first.index = items[0].$index;\r\n this.last.index = items[items.length - 1].$index;\r\n this.direction = Direction.forward;\r\n this.firstVisible.index = start;\r\n this.firstVisible.delta = 0;\r\n }\r\n\r\n check(items: Item[]): void {\r\n this.startSimulate(items);\r\n this.last.index = items[0].$index;\r\n this.first.index = items[items.length - 1].$index;\r\n this.isCheck = true;\r\n }\r\n\r\n update(index: number, delta: number, items: Item[], itemsToRemove: Item[]): void {\r\n this.startSimulate(items);\r\n this.firstVisible.index = index;\r\n this.firstVisible.delta = delta;\r\n this.doRemove = itemsToRemove.length > 0;\r\n }\r\n}\r\n","export class ClipModel {\r\n doClip: boolean;\r\n callCount: number;\r\n forceForward: boolean;\r\n forceBackward: boolean;\r\n\r\n get force(): boolean {\r\n return this.forceForward || this.forceBackward;\r\n }\r\n\r\n constructor() {\r\n this.callCount = 0;\r\n this.reset();\r\n }\r\n\r\n reset(force?: boolean): void {\r\n this.doClip = false;\r\n if (!force) {\r\n this.forceForward = false;\r\n this.forceBackward = false;\r\n }\r\n }\r\n\r\n}\r\n","export class RenderModel {\r\n sizeBefore: number;\r\n sizeAfter: number;\r\n positionBefore: number;\r\n cancel: (() => void) | null;\r\n\r\n get noSize(): boolean {\r\n return this.sizeBefore === this.sizeAfter;\r\n }\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.sizeBefore = 0;\r\n this.sizeAfter = 0;\r\n this.positionBefore = 0;\r\n this.cancel = null;\r\n }\r\n}\r\n","import { ScrollEventData as IScrollEventData } from '../../interfaces/index';\r\n\r\nexport class ScrollModel {\r\n previous: IScrollEventData | null;\r\n current: IScrollEventData | null;\r\n\r\n scrollTimer: ReturnType<typeof setTimeout> | null;\r\n\r\n syntheticPosition: number | null;\r\n syntheticFulfill: boolean;\r\n cancelAnimation: (() => void) | null;\r\n positionBeforeAsync: number | null;\r\n positionBeforeAdjust: number | null;\r\n positionAfterAdjust: number | null;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.previous = null;\r\n this.current = null;\r\n this.syntheticPosition = null;\r\n this.syntheticFulfill = false;\r\n this.positionBeforeAsync = null;\r\n this.positionBeforeAdjust = null;\r\n this.positionAfterAdjust = null;\r\n this.stop();\r\n }\r\n\r\n stop(): void {\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = null;\r\n }\r\n if (this.cancelAnimation) {\r\n this.cancelAnimation();\r\n this.cancelAnimation = null;\r\n }\r\n }\r\n\r\n hasPositionChanged(position: number): boolean {\r\n const before = this.positionBeforeAdjust;\r\n const after = this.positionAfterAdjust;\r\n return before === null || before !== position || after === null || after !== position;\r\n }\r\n}\r\n","import { Settings } from './settings';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName, doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n } : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset(true);\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.endInnerLoop();\r\n }\r\n\r\n}\r\n","import { Logger } from './logger';\r\nimport { Buffer } from './buffer';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n AdapterPropName, AdapterPropType, EMPTY_ITEM, getDefaultAdapterProps, methodPreResult, reactiveConfigStorage\r\n} from './adapter/props';\r\nimport { wantedUtils } from './adapter/wanted';\r\nimport { Viewport } from './viewport';\r\nimport { Direction } from '../inputs/index';\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: unknown[]) => Promise<AdapterMethodResult>;\r\ntype InitializationParams<Item> = {\r\n buffer: Buffer<Item>,\r\n state: State,\r\n viewport: Viewport,\r\n logger: Logger,\r\n adapterRun$?: Reactive<ProcessSubject>,\r\n getWorkflow?: WorkflowGetter<Item>\r\n}\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 private disposed: boolean;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setFirstOrLastVisible = (_: { first?: boolean, last?: boolean, workflow?: ScrollerWorkflow }) => { };\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: unknown[]): 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 const contextId = context?.id || -1;\r\n\r\n // public context (if exists) should provide access to Reactive props config by id\r\n const reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};\r\n\r\n // the Adapter initialization should not trigger \"wanted\" props setting;\r\n // after the initialization is completed, \"wanted\" functionality must be unblocked\r\n wantedUtils.setBlock(true, contextId);\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: store original values in \"source\" container, to avoid extra .get() calls on scalar twins set\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: () => this.source[name]\r\n });\r\n });\r\n\r\n // for \"wanted\" props that can be explicitly requested for the first time after the Adapter initialization,\r\n // an implicit calculation of the initial value is required;\r\n // so this method should be called when accessing the \"wanted\" props through one of the following getters\r\n const processWanted = (prop: IAdapterProp) => {\r\n if (wantedUtils.setBox(prop, contextId)) {\r\n if ([AdapterPropName.firstVisible, AdapterPropName.firstVisible$].some(n => n === prop.name)) {\r\n this.setFirstOrLastVisible({ first: true });\r\n } else if ([AdapterPropName.lastVisible, AdapterPropName.lastVisible$].some(n => n === prop.name)) {\r\n this.setFirstOrLastVisible({ last: true });\r\n }\r\n }\r\n };\r\n\r\n // Scalar props that have Reactive twins\r\n // 1) reactive props (from \"source\") should be triggered on set\r\n // 2) scalars should use \"box\" container on get\r\n // 3) \"wanted\" scalars should also run wanted-related logic on get\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)\r\n .forEach((prop: IAdapterProp) => {\r\n const { name, value, reactive } = prop;\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 processWanted(prop);\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((prop: IAdapterProp) => {\r\n const { name, type, value: defaultValue, permanent } = prop;\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 const nonPermanentScalar = !permanent && type === AdapterPropType.Scalar;\r\n Object.defineProperty(context, name, {\r\n configurable: true,\r\n get: () => {\r\n processWanted(prop); // consider accessing \"wanted\" Reactive props\r\n if (nonPermanentScalar) {\r\n return (this as IAdapter)[name]; // non-permanent Scalars should be taken in runtime\r\n }\r\n return value; // other props (Reactive/Functions/WorkflowRunners) can be defined once\r\n }\r\n });\r\n });\r\n\r\n this.externalContext = context;\r\n wantedUtils.setBlock(false, contextId);\r\n }\r\n\r\n initialize(\r\n { buffer, state, viewport, logger, adapterRun$, getWorkflow }: InitializationParams<Item>\r\n ): 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 //viewport\r\n this.setFirstOrLastVisible = ({ first, last, workflow }) => {\r\n if ((!first && !last) || workflow?.call?.interrupted) {\r\n return;\r\n }\r\n const token = first ? AdapterPropName.firstVisible : AdapterPropName.lastVisible;\r\n if (!wantedUtils.getBox(this.externalContext?.id)?.[token]) {\r\n return;\r\n }\r\n if (buffer.items.some(({ element }) => !element)) {\r\n logger.log('skipping first/lastVisible set because not all buffered items are rendered at this moment');\r\n return;\r\n }\r\n const direction = first ? Direction.backward : Direction.forward;\r\n const { item } = viewport.getEdgeVisibleItem(buffer.items, direction);\r\n if (!item || item.element !== this[token].element) {\r\n this[token] = (item ? item.get() : EMPTY_ITEM) as ItemAdapter<Item>;\r\n }\r\n };\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 // workflow getter\r\n if (getWorkflow) {\r\n this.getWorkflow = getWorkflow;\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 this.disposed = true;\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 if (this.disposed) {\r\n return {\r\n immediate,\r\n success: false,\r\n details: 'Adapter was disposed'\r\n };\r\n }\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","import { DatasourceGeneric, makeDatasource } from './classes/datasource';\r\nimport { Settings } from './classes/settings';\r\nimport { Logger } from './classes/logger';\r\nimport { Routines } from './classes/domRoutines';\r\nimport { Viewport } from './classes/viewport';\r\nimport { Buffer } from './classes/buffer';\r\nimport { State } from './classes/state';\r\nimport { Adapter } from './classes/adapter';\r\nimport { Reactive } from './classes/reactive';\r\nimport { validate, DATASOURCE } from './inputs/index';\r\nimport core from './version';\r\nimport {\r\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\r\n} from './interfaces/index';\r\n\r\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class Scroller<Data = unknown> {\r\n public datasource: IDatasourceConstructed<Data>;\r\n public workflow: ScrollerWorkflow<Data>;\r\n\r\n public settings: Settings<Data>;\r\n public logger: Logger;\r\n public routines: Routines;\r\n public viewport: Viewport;\r\n public buffer: Buffer<Data>;\r\n public state: State;\r\n public adapter: Adapter<Data>;\r\n\r\n constructor({\r\n datasource, consumer, element, workflow, Routines: CustomRoutines, scroller\r\n }: ScrollerParams<Data>) {\r\n const { params: { get } } = validate(datasource, DATASOURCE);\r\n if (!get.isValid) {\r\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\r\n }\r\n\r\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\r\n element = scroller ? scroller.routines.element : (element as HTMLElement);\r\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\r\n\r\n this.workflow = workflow;\r\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\r\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\r\n this.routines = new Routines(element, this.settings, CustomRoutines);\r\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\r\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\r\n this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);\r\n this.logger.object('vscroll settings object', this.settings, true);\r\n\r\n this.initDatasource(datasource, scroller);\r\n }\r\n\r\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\r\n if (scroller) { // scroller re-instantiating case\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n this.adapter = scroller.adapter;\r\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\r\n return;\r\n }\r\n // scroller is being instantiated for the first time\r\n const constructed = datasource instanceof DatasourceGeneric;\r\n const mockAdapter = !constructed && !this.settings.adapter;\r\n if (constructed) { // datasource is already instantiated\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n } else { // datasource as POJO\r\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\r\n this.datasource = new DS<Data>(datasource);\r\n if (this.settings.adapter) {\r\n datasource.adapter = this.datasource.adapter;\r\n }\r\n }\r\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\r\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\r\n }\r\n\r\n init(adapterRun$?: Reactive<ProcessSubject>): void {\r\n this.viewport.reset(this.buffer.startIndex);\r\n this.logger.stat('initialization');\r\n this.adapter.initialize({\r\n buffer: this.buffer,\r\n state: this.state,\r\n viewport: this.viewport,\r\n logger: this.logger, adapterRun$,\r\n getWorkflow: () => this.workflow\r\n });\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n if (forever) { // Adapter is not re-instantiated on reset\r\n this.adapter.dispose();\r\n }\r\n this.buffer.dispose();\r\n this.state.dispose();\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n","import { Scroller } from './scroller';\r\nimport { runStateMachine } from './workflow-transducer';\r\nimport { Reactive } from './classes/reactive';\r\nimport { Item } from './classes/item';\r\nimport { CommonProcess, ProcessStatus as Status, } from './processes/index';\r\nimport {\r\n WorkflowParams,\r\n ProcessName,\r\n ProcessPayload,\r\n ProcessClass,\r\n ProcessSubject,\r\n WorkflowError,\r\n InterruptParams,\r\n StateMachineMethods,\r\n ScrollerWorkflow,\r\n} from './interfaces/index';\r\n\r\nexport class Workflow<ItemData = unknown> {\r\n\r\n isInitialized: boolean;\r\n initTimer: ReturnType<typeof setTimeout> | null;\r\n adapterRun$: Reactive<ProcessSubject>;\r\n cyclesDone: number;\r\n interruptionCount: number;\r\n errors: WorkflowError[];\r\n\r\n private offScroll: () => void;\r\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\r\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\r\n\r\n scroller: Scroller<ItemData>;\r\n\r\n constructor({ element, datasource, consumer, run, Routines }: WorkflowParams<ItemData>) {\r\n this.isInitialized = false;\r\n this.initTimer = null;\r\n this.adapterRun$ = new Reactive();\r\n this.cyclesDone = 0;\r\n this.interruptionCount = 0;\r\n this.errors = [];\r\n this.offScroll = () => null;\r\n this.propagateChanges = run;\r\n this.stateMachineMethods = {\r\n run: this.runProcess(),\r\n interrupt: this.interrupt.bind(this),\r\n done: this.done.bind(this),\r\n onError: this.onError.bind(this)\r\n };\r\n\r\n this.scroller = new Scroller<ItemData>({\r\n element, datasource, consumer, workflow: this.getUpdater(), Routines\r\n });\r\n\r\n if (this.scroller.settings.initializeDelay) {\r\n this.initTimer = setTimeout(() => {\r\n this.initTimer = null;\r\n this.init();\r\n }, this.scroller.settings.initializeDelay);\r\n } else {\r\n this.init();\r\n }\r\n }\r\n\r\n init(): void {\r\n this.scroller.init(this.adapterRun$);\r\n this.isInitialized = true;\r\n\r\n // run the Workflow\r\n this.callWorkflow({\r\n process: CommonProcess.init,\r\n status: Status.start\r\n });\r\n\r\n // set up scroll event listener\r\n const { routines } = this.scroller;\r\n const onScrollHandler: EventListener =\r\n event => this.callWorkflow({\r\n process: CommonProcess.scroll,\r\n status: Status.start,\r\n payload: { event }\r\n });\r\n this.offScroll = routines.onScroll(onScrollHandler);\r\n }\r\n\r\n changeItems(items: Item<ItemData>[]): void {\r\n this.propagateChanges(items);\r\n }\r\n\r\n callWorkflow(processSubject: ProcessSubject): void {\r\n if (!this.isInitialized) {\r\n return;\r\n }\r\n const { process, status } = processSubject;\r\n if (process && process.startsWith('adapter') && status !== Status.next) {\r\n this.adapterRun$.set(processSubject);\r\n }\r\n this.process(processSubject);\r\n }\r\n\r\n getUpdater(): ScrollerWorkflow<ItemData> {\r\n return {\r\n call: this.callWorkflow.bind(this),\r\n onDataChanged: this.changeItems.bind(this),\r\n };\r\n }\r\n\r\n process(data: ProcessSubject): void {\r\n const { status, process, payload } = data;\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\r\n process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])\r\n ]);\r\n }\r\n this.scroller.logger.logProcess(data);\r\n\r\n if (process === CommonProcess.end) {\r\n this.scroller.finalize();\r\n }\r\n runStateMachine({\r\n input: data,\r\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\r\n });\r\n }\r\n\r\n runProcess() {\r\n return ({ run, process, name }: ProcessClass) =>\r\n (...args: unknown[]): void => {\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\r\n process || name, ...args\r\n ]);\r\n }\r\n run(this.scroller as Scroller, ...args);\r\n };\r\n }\r\n\r\n onError(process: ProcessName, payload?: ProcessPayload): void {\r\n const message: string = payload && String(payload.error) || '';\r\n const { time, cycle } = this.scroller.state;\r\n this.errors.push({\r\n process,\r\n message,\r\n time,\r\n loop: cycle.loopIdNext\r\n });\r\n this.scroller.logger.logError(message);\r\n }\r\n\r\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\r\n if (finalize) {\r\n const { workflow, logger } = this.scroller;\r\n // we are going to create a new reference for the scroller.workflow object\r\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\r\n workflow.call = (_: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\r\n logger.log('[skip wf call]');\r\n workflow.call.interrupted = true;\r\n this.scroller.workflow = this.getUpdater();\r\n this.interruptionCount++;\r\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\r\n }\r\n if (datasource) { // Scroller re-initialization case\r\n const reInit = () => {\r\n this.scroller.logger.log('new Scroller instantiation');\r\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\r\n this.scroller.dispose();\r\n this.scroller = scroller;\r\n this.scroller.init();\r\n };\r\n if (this.scroller.state.cycle.busy.get()) {\r\n // todo: think about immediate re-initialization even is there are pending processes\r\n this.scroller.adapter.relax(reInit.bind(this));\r\n } else {\r\n reInit();\r\n }\r\n }\r\n }\r\n\r\n done(): void {\r\n const { state, logger } = this.scroller;\r\n this.cyclesDone++;\r\n logger.logCycle(false);\r\n state.endWorkflowCycle(this.cyclesDone + 1);\r\n this.finalize();\r\n }\r\n\r\n dispose(): void {\r\n if (this.initTimer) {\r\n clearTimeout(this.initTimer);\r\n }\r\n this.offScroll();\r\n this.adapterRun$.dispose();\r\n this.scroller.dispose(true);\r\n Object.getOwnPropertyNames(this).forEach(prop => {\r\n delete (this as Record<string, unknown>)[prop];\r\n });\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n","import {\r\n CommonProcess,\r\n AdapterProcess,\r\n ProcessStatus as Status,\r\n Init,\r\n Scroll,\r\n Reset,\r\n Reload,\r\n Append,\r\n Check,\r\n Remove,\r\n UserClip,\r\n Insert,\r\n Replace,\r\n Update,\r\n Fix,\r\n Start,\r\n PreFetch,\r\n Fetch,\r\n PostFetch,\r\n Render,\r\n PreClip,\r\n Clip,\r\n Adjust,\r\n End,\r\n} from './processes/index';\r\n\r\nimport { StateMachineParams } from './interfaces/index';\r\n\r\nexport const runStateMachine = ({\r\n input: { process, status, payload = {} },\r\n methods: { run, interrupt, done, onError }\r\n}: StateMachineParams): void => {\r\n if (status === Status.error) {\r\n onError(process, payload);\r\n if (!process.startsWith('adapter')) {\r\n run(End)(payload);\r\n }\r\n return;\r\n }\r\n const { options } = payload;\r\n switch (process) {\r\n case CommonProcess.init:\r\n if (status === Status.start) { // App start\r\n run(Init)(process);\r\n }\r\n if (status === Status.next) {\r\n run(Start)();\r\n }\r\n break;\r\n case CommonProcess.scroll:\r\n if (status === Status.start) {\r\n run(Scroll)(payload);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.reset:\r\n case AdapterProcess.reload:\r\n if (status === Status.start) {\r\n if (process === AdapterProcess.reset) {\r\n run(Reset)(options);\r\n } else {\r\n run(Reload)(options);\r\n }\r\n }\r\n if (status === Status.next) {\r\n interrupt({ process, ...payload });\r\n if (payload.finalize) {\r\n run(End)();\r\n } else {\r\n run(Init)(process);\r\n }\r\n }\r\n break;\r\n case AdapterProcess.append:\r\n case AdapterProcess.prepend:\r\n if (status === Status.start) {\r\n run(Append)({ process, options });\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.check:\r\n if (status === Status.start) {\r\n run(Check)();\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.remove:\r\n if (status === Status.start) {\r\n run(Remove)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.clip:\r\n if (status === Status.start) {\r\n run(UserClip)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.insert:\r\n if (status === Status.start) {\r\n run(Insert)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.replace:\r\n if (status === Status.start) {\r\n run(Replace)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.update:\r\n if (status === Status.start) {\r\n run(Update)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.fix:\r\n if (status === Status.start) {\r\n run(Fix)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case CommonProcess.start:\r\n switch (payload.process) {\r\n case AdapterProcess.append:\r\n case AdapterProcess.insert:\r\n case AdapterProcess.replace:\r\n case AdapterProcess.update:\r\n if (payload.doRender) {\r\n run(Render)();\r\n } else {\r\n run(Adjust)();\r\n }\r\n break;\r\n case AdapterProcess.check:\r\n run(Render)();\r\n break;\r\n case AdapterProcess.remove:\r\n run(Adjust)();\r\n break;\r\n default:\r\n run(PreFetch)();\r\n }\r\n break;\r\n case CommonProcess.preFetch:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.clip:\r\n run(PreClip)();\r\n break;\r\n default:\r\n run(Fetch)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.fetch:\r\n run(PostFetch)();\r\n break;\r\n case CommonProcess.postFetch:\r\n if (status === Status.next) {\r\n run(Render)();\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.render:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.append:\r\n case AdapterProcess.check:\r\n case AdapterProcess.insert:\r\n case AdapterProcess.replace:\r\n case AdapterProcess.update:\r\n run(Adjust)();\r\n break;\r\n default:\r\n run(PreClip)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.preClip:\r\n if (payload.doClip) {\r\n run(Clip)();\r\n } else {\r\n run(Adjust)();\r\n }\r\n break;\r\n case CommonProcess.clip:\r\n run(Adjust)();\r\n break;\r\n case CommonProcess.adjust:\r\n run(End)();\r\n break;\r\n case CommonProcess.end:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.reset:\r\n case AdapterProcess.reload:\r\n done();\r\n run(Init)(payload.process);\r\n break;\r\n default:\r\n run(Start)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n done();\r\n }\r\n break;\r\n }\r\n};\r\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__values","o","Symbol","iterator","m","next","value","done","__read","r","e","ar","push","error","__spreadArray","to","from","pack","l","slice","concat","AdapterPropName","AdapterPropType","options","Map","_this","id","subscription","func","off","Direction","SizeStrategy","ValidatorType","Name","Type","noop","methodPreResult","noopWF","Promise","resolve","emptyPackageInfo","bufferInfoDefault","NaN","EMPTY_ITEM","getDefaultAdapterProps","Reactive","emitOnSubscribe","reactiveConfigStorage","wantedUtils","_a","wanted","a","Wanted","a$","some","b$","wantedStorage","instanceCount","mock","conf","reactivePropsStore","box","block","permanent","reactive","default","config","datasource","adapterContext","AdapterContext","makeDatasource","getConfig","DatasourceGeneric","Datasource","DatasourceProps","getError","msg","args","reduce","arg","index","getNumber","onNumber","parsedValue","isSet","isValid","errors","onMoreOrEqual","limit","fallback","onFunction","onFunctionWithXToYArguments","onOneOf","tokens","must","context","join","noOneIsPresent","onEnum","list","filter","map","VALIDATORS","type","argsCount","validators","runValidator","current","validator","getDefault","prop","auto","validateOne","name","defaultValue","result","oneOfMust","validate","params","forEach","OBJECT","FUNC_WITH_X_AND_MORE_ARGUMENTS","Settings","DevSettings","DATASOURCE","NUMBER","INTEGER","INTEGER_UNLIMITED","MORE_OR_EQUAL","BOOLEAN","ELEMENT","FUNC","OR","ENUM","CommonProcess","AdapterProcess","ProcessStatus","MIN","SETTINGS","DEV_SETTINGS","AdapterNoParams","ITEM_LIST","FUNC_WITH_X_ARGUMENTS","FUNC_WITH_X_TO_Y_ARGUMENTS","ONE_OF_MUST","ONE_OF_CAN","AdapterReloadParams","RESET_METHOD_PARAMS","AdapterPrependParams","RELOAD_METHOD_PARAMS","AdapterAppendParams","PREPEND_METHOD_PARAMS","AdapterRemoveParams","APPEND_METHOD_PARAMS","AdapterClipParams","REMOVE_METHOD_PARAMS","AdapterInsertParams","CLIP_METHOD_PARAMS","AdapterReplaceParams","INSERT_METHOD_PARAMS","AdapterUpdateParams","REPLACE_METHOD_PARAMS","AdapterFixParams","UPDATE_METHOD_PARAMS","FIX_METHOD_PARAMS","AdapterMethods","ADAPTER_METHODS","devSettings","instanceIndex","props","_c","history","BaseProcessFactory","process","BaseAdapterProcessFactory","data","acc","log","initProcesses","init","reset","reload","state","isInitial","payload","workflow","position","Scroll","scroll","synthPos","timeDiff","delta","shouldDelay","alreadyDelayed","scrollTimer","getScrollEvent","viewport","scrollPosition","time","previous","Date","direction","cycle","parseInput","data_1","key","param","interrupter","reloadIndex","routines","preSize","element","shouldUpdate","buffer","_b","Item","trackedItem","trackedIndex","firstItem","toRemove","toRender","toInsert","update","shouldInsert","insertVirtually","beforeIndex","decrease","before","indexToInsert","after","isNaN","isBackward","updateOptions","items","simulate","firstVisible","insert","shouldAppend","bof","prepend","opposite","increase","append","min","Infinity","max","Number","first","indexBuffer","last","diff","firstIndex","getSizeByIndex","check","shouldRemove","removed","shouldBuffered","includes","shouldVirtual","predicate","newPredicate","indexesToRemove","indexes","finiteAbsMinIndex","len","lastIndex","listToRemove","shift","remove","clip","shouldReplace","injected","replace","FixParams","fix","token","methodData","scrollToItemOpt","updateReference","updater","found","start","scroller","initiator","positions","paddingDelta","startDelta","offset","firstIndexPosition","absMinIndex","fetch","packs","hasAnotherPack","fetchFirst","bufferLast","bufferFirst","fetchLast","$index","count","preFetch","isError","immediateData","_get","fail","getResult","immediateError","PostFetch","fetchIndex","innerLoop","postFetch","every","item","render","isInterrupted","shouldContinueRun","adapter","end","lastItem","scrollSize","viewportSizeDiff","shouldCheckPreSizeExpectation","size","adjust","PreClip","settings","edgeIndex","forward","preClip","itemsToRemove","removeDirection","packageInfo","debug","isArray","defaultSize","obj","stringify","getStat","getFetchRange","getScrollPosition","loopLog","status","logData","logStyles","getLoopIdNext","_i","prepareForLog","immediateLog","logArgs","CustomRoutines","parent","scrollRestoration","overflowAnchor","selector","window","scrollX","Math","horizontal","get","argument","timeoutId","animationFrameId","eventReceiver","Padding","backward","startIndex","positive","negative","viewportSize","positiveSize","isFinite","negativeSize","logger","Paddings","bwd","viewportEdge","sizeStrategy","SizesRecalculation","force","oldItems","newItems","oldFrequentSizeCount","set","sizeMap","sorted","mostFrequentCount","listEqual","oldValue","newSize","constantSize","saveData","DefaultSize","clear","itemCache","fixRight","leftDiff","minB","ItemCache","rightDiff","isInteger","onDataChanged","Cache","CheckBufferCall","dispose","pristine","_absMaxIndex","_absMinIndex","eof","absMaxIndex","getDefaultSize","cache","minIndex","maxIndex","insertItems","shifted","afterIndex","generator","indexToTrack","beforeMap","updateArray","itemsBefore","getFirstVisibleItem","cycleCount","loopCount","InnerLoopModel","forever","Positions","First","Last","FirstVisible","_newItemsData","lastFetched","WorkflowCycleModel","FetchModel","ClipModel","RenderModel","ScrollModel","cancel","ADAPTER_PROPS_STUB","_has","convertAppendArgs","getWorkflow","contextId","adapterProps","augmented","source","processWanted","newValue","demand","defaultMethod","relax$","on","externalContext","adapterRun$","reactiveStore","reloadId","runCallback","callback","isLoading","isLoading$","disposed","relaxRun","relaxUnchained","INVALID_DATASOURCE_PREFIX","consumer","Logger","Routines","State","Buffer","Viewport","constructed","mockAdapter","publicContext","Adapter","bind","Scroller","_d","run","interrupt","onError","finalize","message","loopIdNext","interrupted","interruptionCount","busy","relax","initTimer"],"mappings":"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"}
1
+ {"version":3,"file":"vscroll.umd.min.js","sources":["../../node_modules/tslib/tslib.es6.mjs","../../src/classes/reactive.ts","../../src/classes/adapter/props.ts","../../src/inputs/common.ts","../../src/inputs/validation.ts","../../src/version.ts","../../src/classes/adapter/wanted.ts","../../src/classes/adapter/context.ts","../../src/classes/datasource.ts","../../src/inputs/datasource.ts","../../src/inputs/settings.ts","../../src/processes/misc/enums.ts","../../src/inputs/adapter.ts","../../src/classes/settings.ts","../../src/processes/misc/base.ts","../../src/processes/init.ts","../../src/processes/scroll.ts","../../src/processes/adapter/reset.ts","../../src/processes/adapter/reload.ts","../../src/classes/item.ts","../../src/processes/adapter/update.ts","../../src/processes/adapter/insert.ts","../../src/processes/adapter/append.ts","../../src/processes/adapter/check.ts","../../src/processes/adapter/remove.ts","../../src/processes/adapter/clip.ts","../../src/processes/adapter/replace.ts","../../src/processes/adapter/fix.ts","../../src/processes/start.ts","../../src/processes/preFetch.ts","../../src/processes/fetch.ts","../../src/processes/postFetch.ts","../../src/processes/render.ts","../../src/processes/end.ts","../../src/processes/adjust.ts","../../src/processes/preClip.ts","../../src/processes/clip.ts","../../src/classes/logger.ts","../../src/classes/domRoutines.ts","../../src/classes/paddings.ts","../../src/classes/viewport.ts","../../src/classes/buffer/defaultSize.ts","../../src/classes/buffer/cache.ts","../../src/classes/buffer/checkCall.ts","../../src/classes/buffer.ts","../../src/classes/state/cycle.ts","../../src/classes/state/fetch.ts","../../src/classes/state/clip.ts","../../src/classes/state/render.ts","../../src/classes/state/scroll.ts","../../src/classes/state.ts","../../src/classes/adapter.ts","../../src/scroller.ts","../../src/workflow.ts","../../src/workflow-transducer.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","type On<T> = (value: T) => void;\r\ntype Off = () => void;\r\n\r\ninterface Subscription<T> {\r\n emit: On<T>;\r\n off: Off;\r\n}\r\n\r\ninterface Options {\r\n emitOnSubscribe?: boolean; // if set, emit right on subscribe (like rxjs BehaviorSubject)\r\n emitEqual?: boolean; // if set, emit when new value is equal to the old one\r\n}\r\n\r\nexport class Reactive<T> {\r\n\r\n private initialValue: T;\r\n private value: T;\r\n private id: number;\r\n private options: Options;\r\n private subscriptions: Map<number, Subscription<T>>;\r\n\r\n constructor(value?: T, options?: Options) {\r\n this.id = 0;\r\n if (value !== void 0) {\r\n this.value = value;\r\n this.initialValue = value;\r\n }\r\n this.options = options || {};\r\n this.subscriptions = new Map();\r\n }\r\n\r\n set(value: T): void {\r\n if (this.value === value && !this.options.emitEqual) {\r\n return;\r\n }\r\n this.value = value;\r\n for (const [, sub] of this.subscriptions) {\r\n sub.emit(value);\r\n if (this.value !== value) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get(): T {\r\n return this.value;\r\n }\r\n\r\n on(func: On<T>): Off {\r\n const id = this.id++;\r\n const subscription: Subscription<T> = {\r\n emit: func,\r\n off: () => {\r\n subscription.emit = () => null;\r\n this.subscriptions.delete(id);\r\n }\r\n };\r\n this.subscriptions.set(id, subscription);\r\n if (this.options.emitOnSubscribe) {\r\n subscription.emit(this.value);\r\n }\r\n return () => subscription.off();\r\n }\r\n\r\n once(func: On<T>): Off {\r\n const off = this.on(v => {\r\n off();\r\n func(v);\r\n });\r\n return off;\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n dispose(): void {\r\n this.subscriptions.forEach(sub => sub.off());\r\n }\r\n}\r\n","import { Reactive } from '../reactive';\r\nimport {\r\n IAdapterProp, IBufferInfo, ItemAdapter, IPackages, AdapterMethodResult, IReactivePropsStore\r\n} from '../../interfaces/index';\r\n\r\nexport enum AdapterPropName {\r\n id = 'id',\r\n mock = 'mock',\r\n augmented = 'augmented',\r\n version = 'version',\r\n init = 'init',\r\n init$ = 'init$',\r\n packageInfo = 'packageInfo',\r\n itemsCount = 'itemsCount',\r\n bufferInfo = 'bufferInfo',\r\n isLoading = 'isLoading',\r\n isLoading$ = 'isLoading$',\r\n loopPending = 'loopPending',\r\n loopPending$ = 'loopPending$',\r\n firstVisible = 'firstVisible',\r\n firstVisible$ = 'firstVisible$',\r\n lastVisible = 'lastVisible',\r\n lastVisible$ = 'lastVisible$',\r\n bof = 'bof',\r\n bof$ = 'bof$',\r\n eof = 'eof',\r\n eof$ = 'eof$',\r\n reset = 'reset',\r\n reload = 'reload',\r\n append = 'append',\r\n prepend = 'prepend',\r\n check = 'check',\r\n remove = 'remove',\r\n clip = 'clip',\r\n insert = 'insert',\r\n replace = 'replace',\r\n update = 'update',\r\n fix = 'fix',\r\n relax = 'relax',\r\n showLog = 'showLog',\r\n}\r\n\r\nexport enum AdapterPropType {\r\n Scalar,\r\n Reactive,\r\n WorkflowRunner,\r\n Function,\r\n}\r\n\r\nconst Name = AdapterPropName;\r\nconst Type = AdapterPropType;\r\n\r\nconst noop = () => null;\r\n\r\nexport const methodPreResult: AdapterMethodResult = {\r\n immediate: true,\r\n success: true,\r\n details: 'Adapter is not initialized'\r\n};\r\n\r\nconst noopWF = () => Promise.resolve(methodPreResult);\r\n\r\nconst emptyPackageInfo: IPackages = {\r\n core: {\r\n name: '',\r\n version: ''\r\n },\r\n consumer: {\r\n name: '',\r\n version: ''\r\n }\r\n};\r\n\r\nconst bufferInfoDefault: IBufferInfo = {\r\n firstIndex: NaN,\r\n lastIndex: NaN,\r\n minIndex: NaN,\r\n maxIndex: NaN,\r\n absMinIndex: -Infinity,\r\n absMaxIndex: +Infinity,\r\n defaultSize: NaN,\r\n};\r\n\r\nexport const EMPTY_ITEM = {\r\n data: {},\r\n element: {}\r\n} as ItemAdapter;\r\n\r\nexport const getDefaultAdapterProps = (): IAdapterProp[] => [\r\n {\r\n type: Type.Scalar,\r\n name: Name.id,\r\n value: 0,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.mock,\r\n value: true,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.augmented,\r\n value: false,\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.version,\r\n value: '',\r\n permanent: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.init,\r\n value: false,\r\n reactive: Name.init$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.packageInfo,\r\n value: emptyPackageInfo,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.itemsCount,\r\n value: 0,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.bufferInfo,\r\n value: bufferInfoDefault,\r\n onDemand: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.isLoading,\r\n value: false,\r\n reactive: Name.isLoading$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.loopPending,\r\n value: false,\r\n reactive: Name.loopPending$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.firstVisible,\r\n value: EMPTY_ITEM,\r\n reactive: Name.firstVisible$,\r\n wanted: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.lastVisible,\r\n value: EMPTY_ITEM,\r\n reactive: Name.lastVisible$,\r\n wanted: true\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.bof,\r\n value: false,\r\n reactive: Name.bof$\r\n },\r\n {\r\n type: Type.Scalar,\r\n name: Name.eof,\r\n value: false,\r\n reactive: Name.eof$\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.reset,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.reload,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.append,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.prepend,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.check,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.remove,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.clip,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.insert,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.replace,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.update,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.WorkflowRunner,\r\n name: Name.fix,\r\n value: noopWF\r\n },\r\n {\r\n type: Type.Function,\r\n name: Name.relax,\r\n value: noop\r\n },\r\n {\r\n type: Type.Function,\r\n name: Name.showLog,\r\n value: noop\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.init$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.isLoading$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.loopPending$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.firstVisible$,\r\n value: new Reactive<ItemAdapter>(EMPTY_ITEM, { emitOnSubscribe: true }),\r\n wanted: true\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.lastVisible$,\r\n value: new Reactive<ItemAdapter>(EMPTY_ITEM, { emitOnSubscribe: true }),\r\n wanted: true\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.bof$,\r\n value: new Reactive<boolean>()\r\n },\r\n {\r\n type: Type.Reactive,\r\n name: Name.eof$,\r\n value: new Reactive<boolean>()\r\n }\r\n];\r\n\r\nexport const reactiveConfigStorage = new Map<number, IReactivePropsStore>();\r\n","export enum Direction {\r\n forward = 'forward',\r\n backward = 'backward'\r\n}\r\n\r\nexport enum SizeStrategy {\r\n Average = 'average',\r\n Constant = 'constant',\r\n Frequent = 'frequent'\r\n}\r\n","import { IValidationContext } from '../interfaces/validation';\r\nimport {\r\n IValidator,\r\n ValidatedValue,\r\n IValidatedData,\r\n IValidatedCommonProps,\r\n ICommonProps,\r\n ICommonProp,\r\n} from '../interfaces/index';\r\n\r\nexport enum ValidatorType {\r\n number = 'must be a number',\r\n integer = 'must be an integer',\r\n integerUnlimited = 'must be an integer or infinity',\r\n moreOrEqual = 'must be a number greater than (or equal to) {arg1}',\r\n itemList = 'must be an array of items {arg1}',\r\n boolean = 'must be a boolean',\r\n object = 'must be an object',\r\n element = 'must be an html element',\r\n function = 'must be a function',\r\n funcOfxArguments = 'must have {arg1} argument(s)',\r\n funcOfxAndMoreArguments = 'must have at least {arg1} argument(s)',\r\n funcOfXToYArguments = 'must have {arg1} to {arg2} arguments',\r\n oneOfCan = 'can be present as only one item of {arg1} list',\r\n oneOfMust = 'must be present as only one item of {arg1} list',\r\n or = 'must satisfy at least 1 validator from {arg1} list',\r\n enum = 'must belong to {arg1} list',\r\n}\r\n\r\nconst getError = (msg: ValidatorType, args?: string[]) =>\r\n (args || ['']).reduce((acc, arg, index) => acc.replace(`{arg${index + 1}}`, arg), msg);\r\n\r\nconst getNumber = (value: unknown): number =>\r\n typeof value === 'number' || (typeof value === 'string' && value !== '')\r\n ? Number(value)\r\n : NaN;\r\n\r\nconst onNumber = (value: unknown): ValidatedValue => {\r\n const parsedValue = getNumber(value);\r\n const errors = [];\r\n if (Number.isNaN(parsedValue)) {\r\n errors.push(ValidatorType.number);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onInteger = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n value = getNumber(value);\r\n const parsedValue = parseInt(String(value), 10);\r\n if (value !== parsedValue) {\r\n errors.push(ValidatorType.integer);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onIntegerUnlimited = (value: unknown): ValidatedValue => {\r\n let parsedValue = value;\r\n const errors = [];\r\n value = getNumber(value);\r\n if (!Number.isFinite(value)) {\r\n parsedValue = value;\r\n } else {\r\n parsedValue = parseInt(String(value), 10);\r\n }\r\n if (value !== parsedValue) {\r\n errors.push(ValidatorType.integerUnlimited);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onMoreOrEqual = (limit: number, fallback?: boolean) => (value: unknown): ValidatedValue => {\r\n const result = onNumber(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n let parsedValue = result.value as number;\r\n const errors = [];\r\n if (parsedValue < limit) {\r\n if (!fallback) {\r\n errors.push(getError(ValidatorType.moreOrEqual, [String(limit)]));\r\n } else {\r\n parsedValue = limit;\r\n }\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onBoolean = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n let parsedValue = value;\r\n if (value === 'true') {\r\n parsedValue = true;\r\n } else if (value === 'false') {\r\n parsedValue = false;\r\n }\r\n if (typeof parsedValue !== 'boolean') {\r\n errors.push(ValidatorType.boolean);\r\n }\r\n return { value: parsedValue, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onObject = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (Object.prototype.toString.call(value) !== '[object Object]') {\r\n errors.push(ValidatorType.object);\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onHtmlElement = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (!(value instanceof Element) && !(value instanceof HTMLDocument)) {\r\n errors.push(ValidatorType.element);\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onItemList = (value: unknown): ValidatedValue => {\r\n let parsedValue = value;\r\n const errors = [];\r\n if (!Array.isArray(value)) {\r\n errors.push(ValidatorType.itemList);\r\n parsedValue = [];\r\n } else if (!value.length) {\r\n errors.push(getError(ValidatorType.itemList, ['with at least 1 item']));\r\n } else if (value.length > 1) {\r\n const type = typeof value[0];\r\n for (let i = value.length - 1; i >= 0; i--) {\r\n if (typeof value[i] !== type) {\r\n errors.push(getError(ValidatorType.itemList, ['of items of the same type']));\r\n break;\r\n }\r\n }\r\n }\r\n return { value: parsedValue as unknown[], isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\ntype Func = (...args: unknown[]) => void;\r\n\r\nconst onFunction = (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (typeof value !== 'function') {\r\n errors.push(ValidatorType.function);\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXArguments = (argsCount: number) => (value: unknown) => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length !== argsCount) {\r\n errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXAndMoreArguments = (argsCount: number) => (value: unknown): ValidatedValue => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length < argsCount) {\r\n errors.push(getError(ValidatorType.funcOfxArguments, [String(argsCount)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onFunctionWithXToYArguments = (from: number, to: number) => (value: unknown): ValidatedValue => {\r\n const result = onFunction(value);\r\n if (!result.isValid) {\r\n return result;\r\n }\r\n value = result.value;\r\n const errors = [];\r\n if ((value as Func).length < from || (value as Func).length > to) {\r\n errors.push(getError(ValidatorType.funcOfXToYArguments, [String(from), String(to)]));\r\n }\r\n return { value: value as Func, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onOneOf = (tokens: string[], must: boolean) => (value: unknown, context?: IValidationContext): ValidatedValue => {\r\n const errors = [];\r\n const isSet = value !== void 0;\r\n let noOneIsPresent = !isSet;\r\n const err = must ? ValidatorType.oneOfMust : ValidatorType.oneOfCan;\r\n if (!Array.isArray(tokens) || !tokens.length) {\r\n errors.push(getError(err, ['undefined']));\r\n } else {\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n if (typeof token !== 'string') {\r\n errors.push(getError(err, [tokens.join('\", \"')]) + ' (non-string token)');\r\n break;\r\n }\r\n const isAnotherPresent = context && Object.prototype.hasOwnProperty.call(context, token);\r\n if (isSet && isAnotherPresent) {\r\n errors.push(getError(err, [tokens.join('\", \"')]) + ` (${token} is present)`);\r\n break;\r\n }\r\n if (noOneIsPresent && isAnotherPresent) {\r\n noOneIsPresent = false;\r\n }\r\n }\r\n if (must && noOneIsPresent) {\r\n errors.push(getError(err, [tokens.join('\", \"')]));\r\n }\r\n }\r\n return { value, isSet, isValid: !errors.length, errors };\r\n};\r\n\r\nconst onOr = (validators: IValidator[]) => (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n if (validators.every(validator => !validator.method(value).isValid)) {\r\n errors.push(validators.map(v => v.type).join(' OR '));\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nenum AbstractEnum { }\r\ntype TEnum = typeof AbstractEnum;\r\n\r\nconst onEnum = (list: TEnum) => (value: unknown): ValidatedValue => {\r\n const errors = [];\r\n const values = Object.keys(list).filter(k => isNaN(Number(k))).map(k => list[k as unknown as number]);\r\n if (!values.some(item => item === value)) {\r\n errors.push(getError(ValidatorType.enum, ['[' + values.join(',') + ']']));\r\n }\r\n return { value, isSet: true, isValid: !errors.length, errors };\r\n};\r\n\r\nexport const VALIDATORS = {\r\n NUMBER: {\r\n type: ValidatorType.number,\r\n method: onNumber\r\n },\r\n INTEGER: {\r\n type: ValidatorType.integer,\r\n method: onInteger\r\n },\r\n INTEGER_UNLIMITED: {\r\n type: ValidatorType.integerUnlimited,\r\n method: onIntegerUnlimited\r\n },\r\n MORE_OR_EQUAL: (limit: number, fallback?: boolean): IValidator => ({\r\n type: ValidatorType.moreOrEqual,\r\n method: onMoreOrEqual(limit, fallback)\r\n }),\r\n BOOLEAN: {\r\n type: ValidatorType.boolean,\r\n method: onBoolean\r\n },\r\n OBJECT: {\r\n type: ValidatorType.object,\r\n method: onObject\r\n },\r\n ITEM_LIST: {\r\n type: ValidatorType.itemList,\r\n method: onItemList\r\n },\r\n ELEMENT: {\r\n type: ValidatorType.element,\r\n method: onHtmlElement\r\n },\r\n FUNC: {\r\n type: ValidatorType.function,\r\n method: onFunction\r\n },\r\n FUNC_WITH_X_ARGUMENTS: (count: number): IValidator => ({\r\n type: ValidatorType.funcOfxArguments,\r\n method: onFunctionWithXArguments(count)\r\n }),\r\n FUNC_WITH_X_AND_MORE_ARGUMENTS: (count: number): IValidator => ({\r\n type: ValidatorType.funcOfxAndMoreArguments,\r\n method: onFunctionWithXAndMoreArguments(count)\r\n }),\r\n FUNC_WITH_X_TO_Y_ARGUMENTS: (from: number, to: number): IValidator => ({\r\n type: ValidatorType.funcOfXToYArguments,\r\n method: onFunctionWithXToYArguments(from, to)\r\n }),\r\n ONE_OF_CAN: (list: string[]): IValidator => ({\r\n type: ValidatorType.oneOfCan,\r\n method: onOneOf(list, false)\r\n }),\r\n ONE_OF_MUST: (list: string[]): IValidator => ({\r\n type: ValidatorType.oneOfMust,\r\n method: onOneOf(list, true)\r\n }),\r\n OR: (list: IValidator[]): IValidator => ({\r\n type: ValidatorType.or,\r\n method: onOr(list)\r\n }),\r\n ENUM: (list: TEnum): IValidator => ({\r\n type: ValidatorType.enum,\r\n method: onEnum(list)\r\n })\r\n};\r\n\r\nexport class ValidatedData implements IValidatedData {\r\n\r\n context: IValidationContext;\r\n isValidContext: boolean;\r\n isValid: boolean;\r\n errors: string[];\r\n params: IValidatedCommonProps<PropertyKey>;\r\n\r\n private contextErrors: string[];\r\n\r\n constructor(context: unknown) {\r\n this.params = {};\r\n this.contextErrors = [];\r\n this.errors = [];\r\n this.isValid = true;\r\n this.setContext(context);\r\n }\r\n\r\n private setContext(context: unknown): void {\r\n if (!context || Object.prototype.toString.call(context) !== '[object Object]') {\r\n this.setCommonError('context is not an object');\r\n this.isValidContext = false;\r\n } else {\r\n this.isValidContext = true;\r\n }\r\n this.context = context as IValidationContext;\r\n }\r\n\r\n private setValidity() {\r\n this.errors = Object.keys(this.params).reduce((acc: string[], key: string) => [\r\n ...acc, ...this.params[key].errors\r\n ], []);\r\n this.isValid = !this.errors.length;\r\n }\r\n\r\n setCommonError(error: string): void {\r\n this.contextErrors.push(error);\r\n this.errors.push(error);\r\n this.isValid = false;\r\n }\r\n\r\n setParam(token: string, value: ValidatedValue): void {\r\n if (!value.isValid) {\r\n value.errors = !value.isSet\r\n ? [`\"${token}\" must be set`]\r\n : value.errors.map((err: string) =>\r\n `\"${token}\" ${err}`\r\n );\r\n }\r\n this.params[token] = value;\r\n this.setValidity();\r\n }\r\n\r\n showErrors(): string {\r\n return this.errors.length\r\n ? 'validation failed: ' + this.errors.join(', ')\r\n : '';\r\n }\r\n}\r\n\r\nexport const runValidator = (\r\n current: ValidatedValue,\r\n validator: IValidator,\r\n context: IValidationContext\r\n): ValidatedValue => {\r\n const { value, errors } = current;\r\n const result = validator.method(value, context);\r\n const _errors = [...errors, ...result.errors];\r\n return {\r\n value: result.value,\r\n isSet: result.isSet,\r\n isValid: !_errors.length,\r\n errors: _errors\r\n };\r\n};\r\n\r\nconst getDefault = (value: unknown, prop: ICommonProp): ValidatedValue => {\r\n const empty = value === void 0;\r\n const auto = !prop.mandatory && prop.defaultValue !== void 0;\r\n return {\r\n value: !empty ? value : (auto ? prop.defaultValue : void 0),\r\n isSet: !empty || auto,\r\n isValid: !empty || !prop.mandatory,\r\n errors: []\r\n };\r\n};\r\n\r\nexport const validateOne = (\r\n context: IValidationContext, name: string, prop: ICommonProp\r\n): ValidatedValue => {\r\n const result = getDefault(context[name], prop);\r\n if (!result.isSet) {\r\n const oneOfMust = prop.validators.find(v => v.type === ValidatorType.oneOfMust);\r\n if (oneOfMust) {\r\n return runValidator(result, oneOfMust, context);\r\n }\r\n } else {\r\n for (const validator of Object.values(prop.validators)) {\r\n const current = runValidator(result, validator, context);\r\n if (!current.isValid && prop.defaultValue !== void 0) {\r\n return {\r\n value: prop.defaultValue,\r\n isSet: true,\r\n isValid: true,\r\n errors: []\r\n };\r\n }\r\n Object.assign(result, current);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport const validate = (\r\n context: unknown, params: ICommonProps<PropertyKey>\r\n): IValidatedData => {\r\n const data = new ValidatedData(context);\r\n Object.entries(params).forEach(([key, prop]) =>\r\n data.setParam(key, data.isValidContext\r\n ? validateOne(data.context, key, prop)\r\n : getDefault(void 0, prop)\r\n )\r\n );\r\n return data;\r\n};\r\n","export default {\n name: 'vscroll',\n version: '1.5.6'\n};\n","import { IAdapterProp } from '../../interfaces/index';\r\nimport { AdapterPropName } from './props';\r\n\r\ninterface IWanted {\r\n box: { [key: string]: boolean };\r\n block: boolean;\r\n}\r\n\r\nconst getBox = (id?: number): IWanted['box'] | undefined => {\r\n return wantedStorage.get(id || -1)?.box;\r\n};\r\n\r\nconst setBox = ({ name, wanted }: IAdapterProp, id?: number): boolean => {\r\n const Wanted = wantedStorage.get(id || -1);\r\n if (wanted && Wanted && !Wanted.box[name] && !Wanted.block) {\r\n const { firstVisible: a, firstVisible$: a$ } = AdapterPropName;\r\n const { lastVisible: b, lastVisible$: b$ } = AdapterPropName;\r\n Wanted.box[a] = Wanted.box[a$] = [a, a$].some(n => n === name) || Wanted.box[a];\r\n Wanted.box[b] = Wanted.box[b$] = [b, b$].some(n => n === name) || Wanted.box[b];\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst setBlock = (value: boolean, id?: number): void => {\r\n const Wanted = wantedStorage.get(id || -1);\r\n if (Wanted) {\r\n Wanted.block = value;\r\n }\r\n};\r\n\r\nexport const wantedUtils = {\r\n getBox,\r\n setBox,\r\n setBlock\r\n};\r\n\r\nexport const wantedStorage = new Map<number, IWanted>();\r\n","import { AdapterPropName, AdapterPropType, getDefaultAdapterProps, reactiveConfigStorage } from './props';\r\nimport core from '../../version';\r\nimport { Reactive } from '../reactive';\r\nimport { wantedStorage, wantedUtils } from './wanted';\r\nimport { IReactivePropsStore, IAdapterConfig } from '../../interfaces/index';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class AdapterContext {\r\n\r\n constructor(config: IAdapterConfig) {\r\n const { mock, reactive } = config;\r\n const id = ++instanceCount;\r\n const conf = { configurable: true };\r\n const reactivePropsStore: IReactivePropsStore = {};\r\n wantedStorage.set(id, { box: {}, block: false });\r\n\r\n // set up permanent props\r\n Object.defineProperty(this, AdapterPropName.id, { get: () => id, ...conf });\r\n Object.defineProperty(this, AdapterPropName.mock, { get: () => mock, ...conf });\r\n Object.defineProperty(this, AdapterPropName.augmented, { get: () => false, ...conf });\r\n Object.defineProperty(this, AdapterPropName.version, { get: () => core.version, ...conf });\r\n\r\n // set up default props, they will be reassigned during the Adapter instantiation\r\n getDefaultAdapterProps()\r\n .filter(({ permanent }) => !permanent)\r\n .forEach(prop => {\r\n let { value } = prop;\r\n\r\n // reactive props might be reconfigured by the vscroll consumer\r\n if (reactive && prop.type === AdapterPropType.Reactive) {\r\n const react = reactive[prop.name];\r\n if (react) {\r\n // here we have a configured reactive property that came from the outer config\r\n // this prop must be exposed via Adapter, but at the same time we need to\r\n // persist the original default value as it will be used by the Adapter internally\r\n reactivePropsStore[prop.name] = {\r\n ...react,\r\n default: value as Reactive<unknown> // persisting the default native Reactive prop\r\n };\r\n value = react.source; // exposing the configured prop instead of the default one\r\n }\r\n }\r\n\r\n Object.defineProperty(this, prop.name, {\r\n get: () => {\r\n wantedUtils.setBox(prop, id);\r\n return value;\r\n },\r\n ...conf\r\n });\r\n });\r\n\r\n if (reactive) { // save both configured and default reactive props in the store\r\n reactiveConfigStorage.set(id, reactivePropsStore);\r\n }\r\n }\r\n}\r\n","import { AdapterContext } from './adapter/context';\r\nimport { reactiveConfigStorage } from './adapter/props';\r\nimport { wantedStorage } from './adapter/wanted';\r\nimport {\r\n IDatasource,\r\n IDatasourceConstructed,\r\n DatasourceGet,\r\n Settings,\r\n DevSettings,\r\n IAdapter,\r\n IAdapterConfig,\r\n} from '../interfaces/index';\r\n\r\nexport class DatasourceGeneric<Data> implements IDatasourceConstructed<Data> {\r\n get: DatasourceGet<Data>;\r\n settings?: Settings<Data>;\r\n devSettings?: DevSettings;\r\n adapter: IAdapter<Data>;\r\n\r\n constructor(datasource: IDatasource<Data>, config?: IAdapterConfig) {\r\n this.get = datasource.get;\r\n if (datasource.settings) {\r\n this.settings = datasource.settings;\r\n }\r\n if (datasource.devSettings) {\r\n this.devSettings = datasource.devSettings;\r\n }\r\n const adapterContext = new AdapterContext(config || { mock: false });\r\n this.adapter = adapterContext as unknown as IAdapter<Data>;\r\n }\r\n\r\n dispose(): void { // todo: should it be published?\r\n reactiveConfigStorage.delete(this.adapter.id);\r\n wantedStorage.delete(this.adapter.id);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const makeDatasource = (getConfig?: () => IAdapterConfig) =>\r\n class <Data = unknown> extends DatasourceGeneric<Data> {\r\n constructor(datasource: IDatasource<Data>) {\r\n const config = typeof getConfig === 'function' ? getConfig() : void 0;\r\n super(datasource, config);\r\n }\r\n };\r\n\r\nexport const Datasource = makeDatasource();\r\n","import { VALIDATORS } from './validation';\r\nimport { ICommonProps } from '../interfaces/index';\r\n\r\nconst { OBJECT, FUNC_WITH_X_AND_MORE_ARGUMENTS } = VALIDATORS;\r\n\r\nexport enum DatasourceProps {\r\n get = 'get',\r\n settings = 'settings',\r\n devSettings = 'devSettings',\r\n}\r\n\r\nexport const DATASOURCE: ICommonProps<DatasourceProps> = {\r\n [DatasourceProps.get]: {\r\n validators: [FUNC_WITH_X_AND_MORE_ARGUMENTS(2)],\r\n mandatory: true\r\n },\r\n [DatasourceProps.settings]: {\r\n validators: [OBJECT]\r\n },\r\n [DatasourceProps.devSettings]: {\r\n validators: [OBJECT]\r\n }\r\n};\r\n","import { VALIDATORS } from './validation';\r\nimport { ICommonProps } from '../interfaces/index';\r\nimport { SizeStrategy, Direction } from './common';\r\n\r\nconst { NUMBER, INTEGER, INTEGER_UNLIMITED, MORE_OR_EQUAL, BOOLEAN, ELEMENT, FUNC, OR, ENUM } = VALIDATORS;\r\n\r\nenum Settings {\r\n adapter = 'adapter',\r\n startIndex = 'startIndex',\r\n minIndex = 'minIndex',\r\n maxIndex = 'maxIndex',\r\n itemSize = 'itemSize',\r\n bufferSize = 'bufferSize',\r\n padding = 'padding',\r\n infinite = 'infinite',\r\n horizontal = 'horizontal',\r\n windowViewport = 'windowViewport',\r\n viewportElement = 'viewportElement',\r\n inverse = 'inverse',\r\n onBeforeClip = 'onBeforeClip',\r\n sizeStrategy = 'sizeStrategy',\r\n}\r\n\r\nenum DevSettings {\r\n debug = 'debug',\r\n immediateLog = 'immediateLog',\r\n logProcessRun = 'logProcessRun',\r\n logTime = 'logTime',\r\n throttle = 'throttle',\r\n initDelay = 'initDelay',\r\n initWindowDelay = 'initWindowDelay',\r\n cacheData = 'cacheData',\r\n cacheOnReload = 'cacheOnReload',\r\n dismissOverflowAnchor = 'dismissOverflowAnchor',\r\n directionPriority = 'directionPriority',\r\n}\r\n\r\nexport const MIN = {\r\n [Settings.itemSize]: 1,\r\n [Settings.bufferSize]: 1,\r\n [Settings.padding]: 0.01,\r\n [DevSettings.throttle]: 0,\r\n [DevSettings.initDelay]: 0,\r\n [DevSettings.initWindowDelay]: 0,\r\n};\r\n\r\nexport const SETTINGS: ICommonProps<Settings> = {\r\n [Settings.adapter]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.startIndex]: {\r\n validators: [INTEGER],\r\n defaultValue: 1\r\n },\r\n [Settings.minIndex]: {\r\n validators: [INTEGER_UNLIMITED],\r\n defaultValue: -Infinity\r\n },\r\n [Settings.maxIndex]: {\r\n validators: [INTEGER_UNLIMITED],\r\n defaultValue: Infinity\r\n },\r\n [Settings.itemSize]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[Settings.itemSize], true)],\r\n defaultValue: NaN\r\n },\r\n [Settings.bufferSize]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[Settings.bufferSize], true)],\r\n defaultValue: 5\r\n },\r\n [Settings.padding]: {\r\n validators: [NUMBER, MORE_OR_EQUAL(MIN[Settings.padding], true)],\r\n defaultValue: 0.5\r\n },\r\n [Settings.infinite]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.horizontal]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.windowViewport]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.viewportElement]: {\r\n validators: [OR([ELEMENT, FUNC])],\r\n defaultValue: null\r\n },\r\n [Settings.inverse]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [Settings.onBeforeClip]: {\r\n validators: [FUNC],\r\n defaultValue: null\r\n },\r\n [Settings.sizeStrategy]: {\r\n validators: [ENUM(SizeStrategy)],\r\n defaultValue: SizeStrategy.Average\r\n },\r\n};\r\n\r\nexport const DEV_SETTINGS: ICommonProps<DevSettings> = {\r\n [DevSettings.debug]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.immediateLog]: {\r\n validators: [BOOLEAN],\r\n defaultValue: true\r\n },\r\n [DevSettings.logProcessRun]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.logTime]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.throttle]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.throttle], true)],\r\n defaultValue: 40\r\n },\r\n [DevSettings.initDelay]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.initDelay], true)],\r\n defaultValue: 1\r\n },\r\n [DevSettings.initWindowDelay]: {\r\n validators: [INTEGER, MORE_OR_EQUAL(MIN[DevSettings.initWindowDelay], true)],\r\n defaultValue: 40\r\n },\r\n [DevSettings.cacheData]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.cacheOnReload]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [DevSettings.dismissOverflowAnchor]: {\r\n validators: [BOOLEAN],\r\n defaultValue: true\r\n },\r\n [DevSettings.directionPriority]: {\r\n validators: [ENUM(Direction)],\r\n defaultValue: Direction.backward\r\n },\r\n};\r\n","export enum CommonProcess {\r\n init = 'init',\r\n scroll = 'scroll',\r\n start = 'start',\r\n preFetch = 'preFetch',\r\n fetch = 'fetch',\r\n postFetch = 'postFetch',\r\n render = 'render',\r\n preClip = 'preClip',\r\n clip = 'clip',\r\n adjust = 'adjust',\r\n end = 'end',\r\n}\r\n\r\nexport enum AdapterProcess {\r\n reset = 'adapter.reset',\r\n reload = 'adapter.reload',\r\n append = 'adapter.append',\r\n prepend = 'adapter.prepend',\r\n check = 'adapter.check',\r\n remove = 'adapter.remove',\r\n replace = 'adapter.replace',\r\n update = 'adapter.update',\r\n clip = 'adapter.clip',\r\n insert = 'adapter.insert',\r\n fix = 'adapter.fix',\r\n}\r\n\r\nexport enum ProcessStatus {\r\n start = 'start',\r\n next = 'next',\r\n done = 'done',\r\n error = 'error'\r\n}\r\n","import { VALIDATORS } from './validation';\r\nimport { DatasourceProps as AdapterResetParams } from './datasource';\r\nimport { AdapterProcess as Process } from '../processes/misc/enums';\r\nimport { ICommonProps, AdapterProcessMap } from '../interfaces/index';\r\n\r\nconst {\r\n INTEGER,\r\n INTEGER_UNLIMITED,\r\n BOOLEAN,\r\n OBJECT,\r\n ITEM_LIST,\r\n FUNC_WITH_X_ARGUMENTS,\r\n FUNC_WITH_X_AND_MORE_ARGUMENTS,\r\n FUNC_WITH_X_TO_Y_ARGUMENTS,\r\n ONE_OF_MUST,\r\n ONE_OF_CAN,\r\n OR,\r\n} = VALIDATORS;\r\n\r\nenum AdapterNoParams { }\r\nconst NO_METHOD_PARAMS: ICommonProps<AdapterNoParams> = {};\r\n\r\nconst RESET_METHOD_PARAMS: ICommonProps<AdapterResetParams> = {\r\n [AdapterResetParams.get]: {\r\n validators: [FUNC_WITH_X_AND_MORE_ARGUMENTS(2)]\r\n },\r\n [AdapterResetParams.settings]: {\r\n validators: [OBJECT]\r\n },\r\n [AdapterResetParams.devSettings]: {\r\n validators: [OBJECT]\r\n },\r\n};\r\n\r\nenum AdapterReloadParams {\r\n reloadIndex = 'reloadIndex',\r\n}\r\n\r\nconst RELOAD_METHOD_PARAMS: ICommonProps<AdapterReloadParams> = {\r\n [AdapterReloadParams.reloadIndex]: {\r\n validators: [INTEGER]\r\n },\r\n};\r\n\r\nenum AdapterPrependParams {\r\n items = 'items',\r\n bof = 'bof',\r\n increase = 'increase',\r\n}\r\n\r\nconst PREPEND_METHOD_PARAMS: ICommonProps<AdapterPrependParams> = {\r\n [AdapterPrependParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterPrependParams.bof]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [AdapterPrependParams.increase]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterAppendParams {\r\n items = 'items',\r\n eof = 'eof',\r\n decrease = 'decrease',\r\n}\r\n\r\nconst APPEND_METHOD_PARAMS: ICommonProps<AdapterAppendParams> = {\r\n [AdapterAppendParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterAppendParams.eof]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n [AdapterAppendParams.decrease]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterRemoveParams {\r\n predicate = 'predicate',\r\n indexes = 'indexes',\r\n increase = 'increase',\r\n}\r\n\r\nconst REMOVE_METHOD_PARAMS: ICommonProps<AdapterRemoveParams> = {\r\n [AdapterRemoveParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([AdapterRemoveParams.indexes])]\r\n },\r\n [AdapterRemoveParams.indexes]: {\r\n validators: [ITEM_LIST, ONE_OF_MUST([AdapterRemoveParams.predicate])]\r\n },\r\n [AdapterRemoveParams.increase]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterClipParams {\r\n backwardOnly = 'backwardOnly',\r\n forwardOnly = 'forwardOnly',\r\n}\r\n\r\nconst CLIP_METHOD_PARAMS: ICommonProps<AdapterClipParams> = {\r\n [AdapterClipParams.backwardOnly]: {\r\n validators: [BOOLEAN, ONE_OF_CAN([AdapterClipParams.forwardOnly])],\r\n defaultValue: false\r\n },\r\n [AdapterClipParams.forwardOnly]: {\r\n validators: [BOOLEAN, ONE_OF_CAN([AdapterClipParams.backwardOnly])],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterInsertParams {\r\n items = 'items',\r\n before = 'before',\r\n after = 'after',\r\n beforeIndex = 'beforeIndex',\r\n afterIndex = 'afterIndex',\r\n decrease = 'decrease',\r\n}\r\n\r\nconst INSERT_METHOD_PARAMS: ICommonProps<AdapterInsertParams> = {\r\n [AdapterInsertParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterInsertParams.before]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([\r\n AdapterInsertParams.after, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.after]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1), ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.beforeIndex, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.beforeIndex]: {\r\n validators: [INTEGER, ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.afterIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.afterIndex]: {\r\n validators: [INTEGER, ONE_OF_MUST([\r\n AdapterInsertParams.before, AdapterInsertParams.after, AdapterInsertParams.beforeIndex\r\n ])]\r\n },\r\n [AdapterInsertParams.decrease]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterReplaceParams {\r\n items = 'items',\r\n predicate = 'predicate',\r\n fixRight = 'fixRight',\r\n}\r\n\r\nconst REPLACE_METHOD_PARAMS: ICommonProps<AdapterReplaceParams> = {\r\n [AdapterInsertParams.items]: {\r\n validators: [ITEM_LIST],\r\n mandatory: true\r\n },\r\n [AdapterReplaceParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)],\r\n mandatory: true\r\n },\r\n [AdapterReplaceParams.fixRight]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n }\r\n};\r\n\r\nenum AdapterUpdateParams {\r\n predicate = 'predicate',\r\n fixRight = 'fixRight',\r\n}\r\n\r\nconst UPDATE_METHOD_PARAMS: ICommonProps<AdapterUpdateParams> = {\r\n [AdapterUpdateParams.predicate]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)],\r\n mandatory: true\r\n },\r\n [AdapterUpdateParams.fixRight]: {\r\n validators: [BOOLEAN],\r\n defaultValue: false\r\n },\r\n};\r\n\r\nenum AdapterFixParams {\r\n scrollPosition = 'scrollPosition',\r\n minIndex = 'minIndex',\r\n maxIndex = 'maxIndex',\r\n updater = 'updater',\r\n scrollToItem = 'scrollToItem',\r\n scrollToItemOpt = 'scrollToItemOpt',\r\n}\r\n\r\nconst FIX_METHOD_PARAMS: ICommonProps<AdapterFixParams> = {\r\n [AdapterFixParams.scrollPosition]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.minIndex]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.maxIndex]: {\r\n validators: [INTEGER_UNLIMITED]\r\n },\r\n [AdapterFixParams.updater]: {\r\n validators: [FUNC_WITH_X_TO_Y_ARGUMENTS(1, 2)]\r\n },\r\n [AdapterFixParams.scrollToItem]: {\r\n validators: [FUNC_WITH_X_ARGUMENTS(1)]\r\n },\r\n [AdapterFixParams.scrollToItemOpt]: {\r\n validators: [OR([BOOLEAN, OBJECT])]\r\n },\r\n};\r\n\r\nexport const AdapterMethods: AdapterProcessMap<{ [key: string]: string }> = {\r\n [Process.reset]: AdapterResetParams,\r\n [Process.reload]: AdapterReloadParams,\r\n [Process.prepend]: AdapterPrependParams,\r\n [Process.append]: AdapterAppendParams,\r\n [Process.check]: AdapterNoParams,\r\n [Process.remove]: AdapterRemoveParams,\r\n [Process.clip]: AdapterClipParams,\r\n [Process.insert]: AdapterInsertParams,\r\n [Process.replace]: AdapterReplaceParams,\r\n [Process.update]: AdapterUpdateParams,\r\n [Process.fix]: AdapterFixParams,\r\n};\r\n\r\nexport const ADAPTER_METHODS: AdapterProcessMap<ICommonProps<PropertyKey>> = {\r\n [Process.reset]: RESET_METHOD_PARAMS,\r\n [Process.reload]: RELOAD_METHOD_PARAMS,\r\n [Process.prepend]: PREPEND_METHOD_PARAMS,\r\n [Process.append]: APPEND_METHOD_PARAMS,\r\n [Process.check]: NO_METHOD_PARAMS,\r\n [Process.remove]: REMOVE_METHOD_PARAMS,\r\n [Process.clip]: CLIP_METHOD_PARAMS,\r\n [Process.insert]: INSERT_METHOD_PARAMS,\r\n [Process.replace]: REPLACE_METHOD_PARAMS,\r\n [Process.update]: UPDATE_METHOD_PARAMS,\r\n [Process.fix]: FIX_METHOD_PARAMS,\r\n};\r\n","import { SETTINGS, DEV_SETTINGS, validate, validateOne, VALIDATORS, SizeStrategy, Direction } from '../inputs/index';\r\nimport { Settings as ISettings, DevSettings as IDevSettings, ICommonProps, ItemsProcessor } from '../interfaces/index';\r\n\r\nexport class Settings<Data = unknown> implements ISettings, IDevSettings {\r\n\r\n // user settings\r\n adapter: boolean;\r\n startIndex: number;\r\n minIndex: number;\r\n maxIndex: number;\r\n itemSize: number;\r\n bufferSize: number;\r\n padding: number;\r\n infinite: boolean;\r\n horizontal: boolean;\r\n windowViewport: boolean;\r\n viewportElement: HTMLElement | (() => void) | null;\r\n inverse: boolean; // if true, bwd padding element will have a priority when filling the viewport (if lack of items)\r\n onBeforeClip: ItemsProcessor | null; // if set, it will be run before clipping items from Buffer after they are hidden\r\n sizeStrategy: SizeStrategy; // \"average\" | \"frequent\", determines behavior of unknown items\r\n\r\n /**\r\n * Development setting.\r\n * If true, logging is enabled.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n debug: boolean; // if true, \r\n\r\n /**\r\n * Development setting.\r\n * If false, in-memory logging is enabled, Adapter.showLog() method should be called to print the log.\r\n * Default value: true.\r\n * @type {boolean}\r\n */\r\n immediateLog: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, time differences will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logTime: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, process fire/run info will be logged.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n logProcessRun: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If set, scroll event handling is throttled (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n throttle: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set, the Workflow initialization will be postponed (ms).\r\n * Default value: 1. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If set and the entire window is scrollable, the Workflow initialization will be postponed (ms).\r\n * Default value: 40. Minimal value: 0.\r\n * @type {number} ms\r\n */\r\n initWindowDelay: number;\r\n\r\n /**\r\n * Development setting.\r\n * If true, item's data will be cached along with item's size and index.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheData: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, cache will not be flushed on reload.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n cacheOnReload: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * If true, the viewport will receive \"overflowAnchor: none\" css property.\r\n * Default value: false.\r\n * @type {boolean}\r\n */\r\n dismissOverflowAnchor: boolean;\r\n\r\n /**\r\n * Development setting.\r\n * Determines the strategy of fixing the difference between estimated and real (rendered) sizes\r\n * on scroll position adjustments. If set to 'backward', the difference is always resolved in favour of the\r\n * backward direction: top/left content is fixed and appears in accordance with pre-render expectations.\r\n * If set to 'forward', both directions could be used, and there is a case when bottom/right content is fixed:\r\n * new items are to the left of the previously rendered\r\n * and at least one previously rendered item remains.\r\n * Default value: 'backward'. Allowed values: 'backward', 'forward'.\r\n * @type {string}\r\n */\r\n directionPriority: Direction;\r\n\r\n /**\r\n * Internal setting. Stores the index of the Scroller instance.\r\n * @type {number}\r\n */\r\n instanceIndex: number;\r\n\r\n /**\r\n * Internal setting. Stores the Workflow initialization delay based on initDelay and initWindowDelay settings.\r\n * @type {number}\r\n */\r\n initializeDelay: number;\r\n\r\n /**\r\n * Internal setting. Stores the viewport based on viewportElement setting (which can be element or function).\r\n * @type {HTMLElement|null}\r\n */\r\n viewport: HTMLElement | null;\r\n\r\n constructor(\r\n settings: ISettings<Data> | undefined, devSettings: IDevSettings | undefined, instanceIndex: number\r\n ) {\r\n this.parseInput(settings, SETTINGS);\r\n this.parseInput(devSettings, DEV_SETTINGS);\r\n this.instanceIndex = instanceIndex;\r\n this.initializeDelay = this.getInitializeDelay();\r\n this.viewport = this.getViewport();\r\n // todo: min/max indexes must be ignored if infinite mode is enabled ??\r\n }\r\n\r\n parseInput(input: ISettings<Data> | IDevSettings | undefined, props: ICommonProps<PropertyKey>): void {\r\n const result = validate(input, props);\r\n if (!result.isValid) {\r\n throw new Error('Invalid settings');\r\n }\r\n Object.entries(result.params).forEach(([key, par]) =>\r\n Object.assign(this, { [key]: par.value })\r\n );\r\n }\r\n\r\n getInitializeDelay(): number {\r\n let result = 0;\r\n if (this.windowViewport && this.initWindowDelay && !('scrollRestoration' in history)) {\r\n result = this.initWindowDelay;\r\n }\r\n if (this.initDelay > 0) {\r\n result = Math.max(result, this.initDelay);\r\n }\r\n return result;\r\n }\r\n\r\n getViewport(): HTMLElement | null {\r\n if (typeof this.viewportElement !== 'function') {\r\n return this.viewportElement;\r\n }\r\n const value = this.viewportElement();\r\n const result = validateOne({ value }, 'value', { validators: [VALIDATORS.ELEMENT] });\r\n if (!result.isValid) {\r\n return null; // fallback to default (null) if Function didn't return HTML element synchronously\r\n }\r\n return result.value as HTMLElement;\r\n }\r\n}\r\n","import { AdapterProcess, ProcessStatus } from './enums';\r\nimport { Scroller } from '../../scroller';\r\nimport { ADAPTER_METHODS, validate } from '../../inputs/index';\r\nimport { ProcessName, IBaseProcess, IBaseAdapterProcess, IAdapterInput } from '../../interfaces/index';\r\n\r\nexport const BaseProcessFactory = (process: ProcessName): IBaseProcess =>\r\n\r\n class BaseProcess {\r\n\r\n static process: ProcessName = process;\r\n\r\n };\r\n\r\nexport const BaseAdapterProcessFactory = (process: AdapterProcess): IBaseAdapterProcess =>\r\n\r\n class BaseAdapterProcess extends (BaseProcessFactory(process) as IBaseProcess) {\r\n\r\n static process: AdapterProcess = process;\r\n\r\n static parseInput<T>(\r\n scroller: Scroller, options: T, ignoreErrors = false, _process?: AdapterProcess\r\n ): IAdapterInput<T> {\r\n const result: IAdapterInput<T> = {\r\n data: validate(options, ADAPTER_METHODS[_process || process])\r\n };\r\n\r\n if (result.data.isValid) {\r\n result.params = Object.entries(result.data.params)\r\n .reduce((acc, [key, { value }]) => ({\r\n ...acc,\r\n [key]: value\r\n }), {} as T);\r\n } else {\r\n scroller.logger.log(() => result.data.showErrors());\r\n if (!ignoreErrors) {\r\n scroller.workflow.call({\r\n process,\r\n status: ProcessStatus.error,\r\n payload: { error: `Wrong argument of the \"${process}\" method call` }\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n };\r\n","import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ProcessName } from '../interfaces/index';\r\n\r\nconst initProcesses = [CommonProcess.init, AdapterProcess.reset, AdapterProcess.reload];\r\n\r\nexport default class Init extends BaseProcessFactory(CommonProcess.init) {\r\n\r\n static run(scroller: Scroller, process: ProcessName): void {\r\n const { state, workflow } = scroller;\r\n const isInitial = initProcesses.includes(process);\r\n scroller.logger.logCycle(true);\r\n state.startWorkflowCycle(isInitial, process);\r\n workflow.call({\r\n process: Init.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\nimport { ScrollEventData, ScrollerWorkflow } from '../interfaces/index';\r\n\r\nexport default class Scroll extends BaseProcessFactory(CommonProcess.scroll) {\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n static run(scroller: Scroller, payload?: { event?: Event }): void {\r\n const { workflow, viewport } = scroller;\r\n const position = viewport.scrollPosition;\r\n\r\n if (Scroll.onSynthetic(scroller, position)) {\r\n return;\r\n }\r\n\r\n Scroll.onThrottle(scroller, position, () =>\r\n Scroll.onScroll(scroller, workflow)\r\n );\r\n }\r\n\r\n static onSynthetic(scroller: Scroller, position: number): boolean {\r\n const { scroll } = scroller.state;\r\n const synthPos = scroll.syntheticPosition;\r\n if (synthPos !== null) {\r\n if (scroll.syntheticFulfill) {\r\n scroll.syntheticPosition = null;\r\n }\r\n if (!scroll.syntheticFulfill || synthPos === position) {\r\n scroller.logger.log(() => [\r\n 'skipping scroll', position, `[${scroll.syntheticFulfill ? '' : 'pre-'}synthetic]`\r\n ]);\r\n return true;\r\n }\r\n scroller.logger.log(() => [\r\n 'synthetic scroll has been fulfilled:', position, position < synthPos ? '<' : '>', synthPos\r\n ]);\r\n }\r\n return false;\r\n }\r\n\r\n static onThrottle(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, settings: { throttle }, logger } = scroller;\r\n scroll.current = Scroll.getScrollEvent(position, scroll.previous);\r\n const { direction, time } = scroll.current;\r\n const timeDiff = scroll.previous ? time - scroll.previous.time : Infinity;\r\n const delta = throttle - timeDiff;\r\n const shouldDelay = isFinite(delta) && delta > 0;\r\n const alreadyDelayed = !!scroll.scrollTimer;\r\n logger.log(() => [\r\n direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n position,\r\n shouldDelay ? (timeDiff + 'ms') : '0ms',\r\n shouldDelay ? (alreadyDelayed ? 'delayed' : `/ ${delta}ms delay`) : ''\r\n ]);\r\n if (!shouldDelay) {\r\n if (scroll.scrollTimer) {\r\n clearTimeout(scroll.scrollTimer);\r\n scroll.scrollTimer = null;\r\n }\r\n done();\r\n return;\r\n }\r\n if (!alreadyDelayed) {\r\n scroll.scrollTimer = setTimeout(() => {\r\n logger.log(() => {\r\n const curr = Scroll.getScrollEvent(scroller.viewport.scrollPosition, scroll.current);\r\n return [\r\n curr.direction === Direction.backward ? '\\u2934' : '\\u2935',\r\n curr.position,\r\n (curr.time - time) + 'ms',\r\n 'triggered by timer set on',\r\n position\r\n ];\r\n });\r\n scroll.scrollTimer = null;\r\n done();\r\n }, delta);\r\n }\r\n }\r\n\r\n static getScrollEvent(position: number, previous: ScrollEventData | null): ScrollEventData {\r\n const time = Number(new Date());\r\n let direction: Direction | null = Direction.forward;\r\n if (previous) {\r\n if (position === previous.position) {\r\n direction = previous.direction;\r\n } else if (position < previous.position) {\r\n direction = Direction.backward;\r\n }\r\n }\r\n return { position, direction, time };\r\n }\r\n\r\n static onScroll(scroller: Scroller, workflow: ScrollerWorkflow): void {\r\n const { state: { scroll, cycle } } = scroller;\r\n scroll.previous = { ...(scroll.current as ScrollEventData) };\r\n scroll.current = null;\r\n\r\n if (cycle.busy.get()) {\r\n scroller.logger.log(() => ['skipping scroll', (scroll.previous as ScrollEventData).position, '[pending]']);\r\n return;\r\n }\r\n\r\n workflow.call({\r\n process: Scroll.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { DatasourceProps } from '../../inputs/index';\r\nimport { Datasource } from '../../classes/datasource';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { IDatasourceOptional, ProcessPayload } from '../../interfaces/index';\r\n\r\nexport default class Reset extends BaseAdapterProcessFactory(AdapterProcess.reset) {\r\n\r\n static run(scroller: Scroller, options?: IDatasourceOptional): void {\r\n const { datasource, buffer, viewport: { paddings }, state: { cycle } } = scroller;\r\n\r\n if (options) {\r\n const { data } = Reset.parseInput(scroller, options);\r\n if (!data.isValid) {\r\n return;\r\n }\r\n const constructed = options instanceof Datasource;\r\n Object.keys(DatasourceProps).forEach(key => {\r\n const param = data.params[key];\r\n const ds = datasource as unknown as { [key: string]: unknown };\r\n if (param.isSet || (constructed && ds[key])) {\r\n ds[key] = param.value;\r\n }\r\n });\r\n }\r\n\r\n buffer.reset(true);\r\n paddings.backward.reset();\r\n paddings.forward.reset();\r\n\r\n const payload: ProcessPayload = { datasource };\r\n if (cycle.busy.get()) {\r\n payload.finalize = true;\r\n cycle.interrupter = Reset.process;\r\n }\r\n\r\n scroller.workflow.call({\r\n process: Reset.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { ProcessPayload } from '../../interfaces/index';\r\n\r\nexport default class Reload extends BaseAdapterProcessFactory(AdapterProcess.reload) {\r\n\r\n static run(scroller: Scroller, reloadIndex: number): void {\r\n const { viewport, state, buffer } = scroller;\r\n\r\n const { params } = Reload.parseInput(scroller, { reloadIndex }, true);\r\n\r\n buffer.reset(false, params ? params.reloadIndex : void 0);\r\n viewport.reset(buffer.startIndex);\r\n\r\n const payload: ProcessPayload = {};\r\n if (state.cycle.busy.get()) {\r\n payload.finalize = true;\r\n state.cycle.interrupter = Reload.process;\r\n }\r\n\r\n scroller.workflow.call({\r\n process: Reload.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { Routines } from './domRoutines';\r\nimport { Direction } from '../inputs/index';\r\nimport { Item as _Item, ItemAdapter } from '../interfaces/index';\r\n\r\nexport class Item<Data = unknown> implements _Item<Data> {\r\n nodeId: string;\r\n routines: Routines;\r\n preSize: number; // estimated size\r\n size: number; // real size\r\n invisible: boolean;\r\n toRemove: boolean;\r\n toInsert: boolean;\r\n removeDirection: Direction;\r\n\r\n private container: ItemAdapter<Data>;\r\n\r\n get $index(): number {\r\n return this.container.$index;\r\n }\r\n set $index(value: number) {\r\n this.container.$index = value;\r\n }\r\n\r\n get data(): Data {\r\n return this.container.data;\r\n }\r\n set data(value: Data) {\r\n this.container.data = value;\r\n }\r\n\r\n get element(): HTMLElement {\r\n return this.container.element as HTMLElement;\r\n }\r\n set element(value: HTMLElement) {\r\n this.container.element = value;\r\n }\r\n\r\n constructor($index: number, data: Data, routines: Routines) {\r\n this.container = {\r\n $index,\r\n data\r\n };\r\n this.nodeId = String($index);\r\n this.routines = routines;\r\n this.invisible = true;\r\n this.toRemove = false;\r\n this.toInsert = false;\r\n }\r\n\r\n dispose(): void {\r\n delete this.container.element;\r\n }\r\n\r\n setSize(preSize = 0): void {\r\n this.preSize = preSize;\r\n if (this.element) {\r\n this.size = this.routines.getSize(this.element);\r\n }\r\n }\r\n\r\n makeVisible(): void {\r\n this.routines.makeElementVisible(this.element);\r\n this.invisible = false;\r\n }\r\n\r\n hide(): void {\r\n if (this.element) {\r\n this.routines.hideElement(this.element);\r\n }\r\n }\r\n\r\n scrollTo(argument?: boolean | ScrollIntoViewOptions): void {\r\n if (this.element) {\r\n this.routines.scrollTo(this.element, argument);\r\n }\r\n }\r\n\r\n updateIndex(index: number): void {\r\n this.$index = index;\r\n this.nodeId = String(index);\r\n }\r\n\r\n get(): ItemAdapter<Data> {\r\n return this.container;\r\n }\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Item } from '../../classes/item';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Update extends BaseAdapterProcessFactory(AdapterProcess.update) {\r\n\r\n static run(scroller: Scroller, options: AdapterUpdateOptions): void {\r\n const { params } = Update.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const shouldUpdate = Update.doUpdate(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Update.process,\r\n status: shouldUpdate ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doUpdate(scroller: Scroller, params: AdapterUpdateOptions): boolean {\r\n const { buffer, viewport, state: { fetch }, routines, logger } = scroller;\r\n if (!buffer.items) {\r\n logger.log(() => 'no items in Buffer');\r\n return false;\r\n }\r\n const { item: firstItem, index: firstIndex, diff: firstItemDiff } =\r\n viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n\r\n const { trackedIndex, toRemove } = buffer.updateItems(\r\n params.predicate,\r\n (index, data) => new Item(index, data, routines),\r\n firstIndex,\r\n !!params.fixRight\r\n );\r\n\r\n let delta = 0;\r\n const trackedItem = buffer.get(trackedIndex);\r\n if (firstItem && firstItem === trackedItem) {\r\n delta = - buffer.getSizeByIndex(trackedIndex) + firstItemDiff;\r\n }\r\n\r\n toRemove.forEach(item => item.hide());\r\n logger.log(() => toRemove.length\r\n ? 'items to remove: [' + toRemove.map(({ $index }) => $index).join(',') + ']'\r\n : 'no items to remove'\r\n );\r\n if (toRemove.length) { // insertions will be processed on render\r\n buffer.checkDefaultSize();\r\n }\r\n\r\n const toRender = buffer.items.filter(({ toInsert }) => toInsert);\r\n logger.log(() => toRender.length\r\n ? 'items to render: [' + toRender.map(({ $index }) => $index).join(',') + ']'\r\n : 'no items to render'\r\n );\r\n\r\n fetch.update(trackedIndex, delta, toRender, toRemove);\r\n return !!toRemove.length || !!toRender.length;\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Item } from '../../classes/item';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterInsertOptions, AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Insert extends BaseAdapterProcessFactory(AdapterProcess.insert) {\r\n\r\n static run(scroller: Scroller, options: AdapterInsertOptions): void {\r\n const { params } = Insert.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldInsert = Insert.doInsert(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Insert.process,\r\n status: shouldInsert ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doInsert(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n if (!Insert.insertEmpty(scroller, params)) {\r\n if (!Insert.insertInBuffer(scroller, params)) {\r\n if (!Insert.insertVirtually(scroller, params)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static insertEmpty(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { buffer, routines, state: { fetch } } = scroller;\r\n if (buffer.size) {\r\n return false;\r\n }\r\n const { beforeIndex, afterIndex, items, decrease } = params;\r\n if (!buffer.fillEmpty(\r\n items, beforeIndex, afterIndex, !!decrease,\r\n (index, data) => new Item(index, data, routines)\r\n )) {\r\n return false;\r\n }\r\n fetch.fill(buffer.items, buffer.startIndex);\r\n\r\n return true;\r\n }\r\n\r\n static insertInBuffer(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { before, after, beforeIndex, afterIndex, items, decrease } = params;\r\n const indexToInsert = scroller.buffer.getIndexToInsert(before || after, beforeIndex, afterIndex);\r\n\r\n if (isNaN(indexToInsert)) {\r\n return false;\r\n }\r\n const isBackward = Number.isInteger(beforeIndex) || before;\r\n\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: ({ $index, data }) => {\r\n if (indexToInsert === $index) {\r\n return isBackward ? [...items, data] : [data, ...items];\r\n }\r\n return true;\r\n },\r\n fixRight: decrease\r\n };\r\n\r\n return Update.doUpdate(scroller, updateOptions);\r\n }\r\n\r\n static insertVirtually(scroller: Scroller, params: AdapterInsertOptions): boolean {\r\n const { beforeIndex, afterIndex, items, decrease } = params;\r\n const { buffer, state: { fetch }, viewport } = scroller;\r\n const direction = Number.isInteger(beforeIndex) ? Direction.backward : Direction.forward;\r\n const indexToInsert = (direction === Direction.backward ? beforeIndex : afterIndex) as number;\r\n\r\n if (!buffer.insertVirtually(items, indexToInsert, direction, !!decrease)) {\r\n return false;\r\n }\r\n\r\n const { index, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = index;\r\n if (!isNaN(index)) {\r\n fetch.simulate = true;\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(index) + diff;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Insert from './insert';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterAppendOptions, AdapterPrependOptions } from '../../interfaces/index';\r\n\r\ntype AdapterAppendPrependOptions = AdapterAppendOptions & AdapterPrependOptions;\r\n\r\ninterface AppendRunOptions {\r\n process: AdapterProcess;\r\n options: AdapterAppendPrependOptions;\r\n}\r\n\r\nexport default class Append extends BaseAdapterProcessFactory(AdapterProcess.append) {\r\n\r\n static run(scroller: Scroller, { process, options }: AppendRunOptions): void {\r\n const { params } = Append.parseInput(scroller, options, false, process);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n const shouldAppend = Append.doAppend(scroller, process, params);\r\n\r\n scroller.workflow.call({\r\n process: Append.process,\r\n status: shouldAppend ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doAppend(scroller: Scroller, process: AdapterProcess, params: AdapterAppendPrependOptions): boolean {\r\n const { bof, eof, increase, decrease } = params;\r\n const { buffer } = scroller;\r\n const prepend = process === AdapterProcess.prepend;\r\n const opposite = prepend ? !increase : decrease;\r\n let beforeIndex, afterIndex, items = params.items;\r\n if (prepend) {\r\n beforeIndex = (bof ? buffer.absMinIndex : buffer.minIndex) + (!buffer.size ? 1 : 0);\r\n items = [...items].reverse();\r\n } else {\r\n afterIndex = (eof ? buffer.absMaxIndex : buffer.maxIndex) - (!buffer.size && !opposite ? 1 : 0);\r\n }\r\n return Insert.doInsert(scroller, {\r\n items,\r\n beforeIndex,\r\n afterIndex,\r\n decrease: opposite\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Direction } from '../../inputs/index';\r\n\r\nexport default class Check extends BaseAdapterProcessFactory(AdapterProcess.check) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, buffer, state: { fetch }, viewport } = scroller;\r\n let min = Infinity, max = -Infinity;\r\n\r\n buffer.items.forEach(item => {\r\n const size = item.size;\r\n item.setSize();\r\n if (item.size !== size) {\r\n buffer.cacheItem(item);\r\n min = Math.min(min, item.$index);\r\n max = Math.max(max, item.$index);\r\n }\r\n });\r\n\r\n if (Number.isFinite(min)) {\r\n fetch.first.indexBuffer = buffer.firstIndex;\r\n fetch.last.indexBuffer = buffer.lastIndex;\r\n const { index: firstIndex, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = firstIndex;\r\n if (!isNaN(firstIndex)) {\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(firstIndex) + diff;\r\n }\r\n fetch.check(\r\n buffer.items.filter(item => item.$index >= min && item.$index <= max)\r\n );\r\n }\r\n\r\n scroller.logger.stat('check');\r\n\r\n workflow.call({\r\n process: Check.process,\r\n status: Number.isFinite(min) ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { Direction } from '../../inputs/index';\r\nimport { AdapterRemoveOptions, AdapterUpdateOptions, ItemsPredicate } from '../../interfaces/index';\r\n\r\nexport default class Remove extends BaseAdapterProcessFactory(AdapterProcess.remove) {\r\n\r\n static run(scroller: Scroller, options: AdapterRemoveOptions): void {\r\n const { params } = Remove.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldRemove = Remove.doRemove(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Remove.process,\r\n status: shouldRemove ? ProcessStatus.next : ProcessStatus.done\r\n });\r\n }\r\n\r\n static doRemove(scroller: Scroller, params: AdapterRemoveOptions): boolean {\r\n const { fetch } = scroller.state;\r\n fetch.firstVisible.index = NaN;\r\n const removed = Remove.removeBufferedItems(scroller, params);\r\n const shouldBuffered = removed.length > 0;\r\n if (shouldBuffered) {\r\n // exclude just removed in-buffer indexes\r\n if (params.indexes && params.indexes.length) {\r\n params.indexes = params.indexes.filter(i => !removed.includes(i));\r\n }\r\n // shift virtual indexes that remain\r\n if (params.indexes && params.indexes.length) {\r\n const diffLeft = (params.increase ? 1 : 0) * removed.length;\r\n const diffRight = (params.increase ? 0 : -1) * removed.length;\r\n params.indexes = params.indexes.map(index =>\r\n index + (index < removed[0] ? diffLeft : diffRight)\r\n );\r\n }\r\n }\r\n const shouldVirtual = Remove.removeVirtualItems(scroller, params);\r\n if (!shouldBuffered && !shouldVirtual) {\r\n return false;\r\n }\r\n scroller.logger.stat('after remove');\r\n return true;\r\n }\r\n\r\n static removeBufferedItems(scroller: Scroller, options: AdapterRemoveOptions): number[] {\r\n const { predicate, indexes, increase } = options;\r\n if (!predicate && !indexes) {\r\n return [];\r\n }\r\n const newPredicate: ItemsPredicate = item =>\r\n (predicate && predicate(item)) ||\r\n (!!indexes && indexes.includes(item.$index));\r\n\r\n const indexesToRemove: number[] = scroller.buffer.items.reduce((acc, item) =>\r\n newPredicate(item) ? [...acc, item.$index] : acc, [] as number[]\r\n );\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: item => !newPredicate(item),\r\n fixRight: increase\r\n };\r\n Update.doUpdate(scroller, updateOptions);\r\n return indexesToRemove;\r\n }\r\n\r\n static removeVirtualItems(scroller: Scroller, params: AdapterRemoveOptions): boolean {\r\n const { indexes, increase } = params;\r\n if (!indexes || !indexes.length) {\r\n return false;\r\n }\r\n const { buffer, viewport, state: { fetch } } = scroller;\r\n\r\n // get items to remove\r\n const { finiteAbsMinIndex, firstIndex, finiteAbsMaxIndex, lastIndex } = buffer;\r\n const toRemove = [];\r\n for (let i = 0, len = indexes.length; i < len; i++) {\r\n const index = indexes[i];\r\n if (index >= finiteAbsMinIndex && !isNaN(firstIndex) && index < firstIndex) {\r\n toRemove.push(index); // backward;\r\n } else if (index <= finiteAbsMaxIndex && !isNaN(lastIndex) && index > lastIndex) {\r\n toRemove.push(index); // forward;\r\n } else {\r\n continue;\r\n }\r\n }\r\n\r\n if (!toRemove.length) {\r\n return false;\r\n }\r\n\r\n // what should be shown after remove; Buffer removal has priority\r\n if (isNaN(fetch.firstVisible.index)) {\r\n const { index, diff } = viewport.getEdgeVisibleItem(buffer.items, Direction.backward);\r\n fetch.firstVisible.index = index;\r\n if (!isNaN(index)) {\r\n fetch.firstVisible.delta = - buffer.getSizeByIndex(index) + diff;\r\n }\r\n }\r\n\r\n // virtual removal\r\n scroller.logger.log(() => `going to remove ${toRemove.length} item(s) virtually`);\r\n buffer.removeVirtually(toRemove, !!increase);\r\n buffer.checkDefaultSize();\r\n Remove.shiftFirstVisibleIndex(scroller, toRemove, !!increase);\r\n\r\n return true;\r\n }\r\n\r\n static shiftFirstVisibleIndex(scroller: Scroller, listToRemove: number[], increase: boolean): void {\r\n const { firstVisible } = scroller.state.fetch;\r\n if (isNaN(firstVisible.index)) {\r\n return;\r\n }\r\n const shift = listToRemove.reduce((acc, index) => acc + (\r\n ((increase && index > firstVisible.index) || (!increase && index < firstVisible.index)) ? 1 : 0\r\n ), 0);\r\n firstVisible.index = firstVisible.index + (increase ? shift : -shift);\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterClipOptions } from '../../interfaces/index';\r\n\r\nexport default class UserClip extends BaseAdapterProcessFactory(AdapterProcess.clip) {\r\n\r\n static run(scroller: Scroller, options?: AdapterClipOptions): void {\r\n const { params } = UserClip.parseInput(scroller, options);\r\n\r\n scroller.state.clip.forceForward = !(params && params.backwardOnly);\r\n scroller.state.clip.forceBackward = !(params && params.forwardOnly);\r\n\r\n scroller.workflow.call({\r\n process: UserClip.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport Update from './update';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport { AdapterReplaceOptions, AdapterUpdateOptions } from '../../interfaces/index';\r\n\r\nexport default class Replace extends BaseAdapterProcessFactory(AdapterProcess.replace) {\r\n\r\n static run(scroller: Scroller, options: AdapterReplaceOptions): void {\r\n const { params } = Replace.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n const shouldReplace = Replace.doReplace(scroller, params);\r\n\r\n scroller.workflow.call({\r\n process: Replace.process,\r\n status: shouldReplace ? ProcessStatus.next : ProcessStatus.done,\r\n });\r\n }\r\n\r\n static doReplace(scroller: Scroller, params: AdapterReplaceOptions): boolean {\r\n const toRemove = scroller.buffer.items\r\n .filter(item => params.predicate(item))\r\n .map(item => item.$index);\r\n\r\n if (!toRemove.length) {\r\n scroller.logger.log('no items to be replaced');\r\n return false;\r\n }\r\n\r\n let injected = false;\r\n const updateOptions: AdapterUpdateOptions = {\r\n predicate: ({ $index }) => {\r\n if (!toRemove.includes($index)) {\r\n return true;\r\n }\r\n if (!injected) {\r\n injected = true;\r\n return params.items;\r\n }\r\n return false;\r\n },\r\n fixRight: params.fixRight\r\n };\r\n\r\n return Update.doUpdate(scroller, updateOptions);\r\n }\r\n\r\n}\r\n","import { Scroller } from '../../scroller';\r\nimport { AdapterMethods } from '../../inputs/index';\r\nimport { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';\r\nimport {\r\n ItemsPredicate,\r\n ItemsUpdater,\r\n AdapterFixOptions,\r\n IValidatedData,\r\n} from '../../interfaces/index';\r\n\r\nconst { [AdapterProcess.fix]: FixParams } = AdapterMethods;\r\n\r\nexport default class Fix extends BaseAdapterProcessFactory(AdapterProcess.fix) {\r\n\r\n static run(scroller: Scroller, options: AdapterFixOptions): void {\r\n const { workflow } = scroller;\r\n\r\n const { data, params } = Fix.parseInput(scroller, options);\r\n if (!params) {\r\n return;\r\n }\r\n\r\n Object.entries(data.params).forEach(([key, value]) => {\r\n if (value.isSet && value.isValid) {\r\n Fix.runByType(scroller, key, value.value, data);\r\n }\r\n });\r\n\r\n workflow.call({\r\n process: Fix.process,\r\n status: ProcessStatus.done\r\n });\r\n }\r\n\r\n static runByType(scroller: Scroller, token: string, value: unknown, methodData: IValidatedData): void {\r\n switch (token) {\r\n case FixParams.scrollPosition:\r\n return Fix.setScrollPosition(scroller, value as number);\r\n case FixParams.minIndex:\r\n return Fix.setMinIndex(scroller, value as number);\r\n case FixParams.maxIndex:\r\n return Fix.setMaxIndex(scroller, value as number);\r\n case FixParams.updater:\r\n return Fix.updateItems(scroller, value as ItemsUpdater);\r\n case FixParams.scrollToItem:\r\n if (methodData.params) {\r\n const scrollToItemOpt = methodData.params[FixParams.scrollToItemOpt];\r\n const options = scrollToItemOpt ? scrollToItemOpt.value as AdapterFixOptions['scrollToItemOpt'] : void 0;\r\n return Fix.scrollToItem(scroller, value as ItemsPredicate, options);\r\n }\r\n return;\r\n case FixParams.scrollToItemOpt:\r\n return;\r\n }\r\n }\r\n\r\n static setScrollPosition({ viewport }: Scroller, value: number): void {\r\n let result = value;\r\n if (value === -Infinity) {\r\n result = 0;\r\n } else if (value === Infinity) {\r\n result = viewport.getScrollableSize();\r\n }\r\n viewport.setPosition(result);\r\n }\r\n\r\n static setMinIndex({ buffer, settings }: Scroller, value: number): void {\r\n settings.minIndex = value;\r\n buffer.absMinIndex = value;\r\n }\r\n\r\n static setMaxIndex({ buffer, settings }: Scroller, value: number): void {\r\n settings.maxIndex = value;\r\n buffer.absMaxIndex = value;\r\n }\r\n\r\n static updateItems({ buffer, logger }: Scroller, value: ItemsUpdater): void {\r\n let updateReference = false;\r\n const updater = () => updateReference = true;\r\n buffer.items.forEach(item => value(item.get(), updater));\r\n if (updateReference) {\r\n logger.log(() => 'update Buffer.items reference');\r\n buffer.items = [...buffer.items];\r\n }\r\n }\r\n\r\n static scrollToItem(scroller: Scroller, value: ItemsPredicate, options?: boolean | ScrollIntoViewOptions): void {\r\n const found = scroller.buffer.items.find(item => value(item.get()));\r\n if (!found) {\r\n scroller.logger.log(() => 'scrollToItem cancelled, item not found');\r\n return;\r\n }\r\n found.scrollTo(options);\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\n\r\nexport default class Start extends BaseProcessFactory(CommonProcess.start) {\r\n\r\n static run(scroller: Scroller): void {\r\n const payload = scroller.state.startInnerLoop();\r\n\r\n scroller.workflow.call({\r\n process: Start.process,\r\n status: ProcessStatus.next,\r\n payload\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, AdapterProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class PreFetch extends BaseProcessFactory(CommonProcess.preFetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, buffer, state: { fetch, cycle } } = scroller;\r\n fetch.minIndex = buffer.minIndex;\r\n\r\n // set first and last indexes of items to fetch\r\n PreFetch.setPositionsAndIndexes(scroller);\r\n\r\n // skip indexes that are in buffer\r\n PreFetch.skipBufferedItems(scroller);\r\n\r\n if (scroller.settings.infinite) {\r\n // fill indexes to include buffer if no clip\r\n PreFetch.checkBufferGaps(scroller);\r\n }\r\n\r\n // add indexes if there are too few items to fetch (clip padding)\r\n PreFetch.checkFetchPackSize(scroller);\r\n\r\n // set fetch direction\r\n PreFetch.setFetchDirection(scroller);\r\n\r\n workflow.call({\r\n process: PreFetch.process,\r\n status: PreFetch.getStatus(scroller),\r\n payload: { process: cycle.initiator }\r\n });\r\n }\r\n\r\n static setPositionsAndIndexes(scroller: Scroller): void {\r\n PreFetch.setPositions(scroller);\r\n PreFetch.setFirstIndex(scroller);\r\n PreFetch.setLastIndex(scroller);\r\n scroller.logger.fetch();\r\n }\r\n\r\n static setPositions(scroller: Scroller): void {\r\n const { state: { fetch: { positions } }, viewport } = scroller;\r\n const paddingDelta = viewport.getBufferPadding();\r\n positions.before = viewport.scrollPosition;\r\n positions.startDelta = PreFetch.getStartDelta(scroller);\r\n positions.relative = positions.before - positions.startDelta;\r\n positions.start = positions.relative - paddingDelta;\r\n positions.end = positions.relative + viewport.getSize() + paddingDelta;\r\n }\r\n\r\n static getStartDelta(scroller: Scroller): number { // calculate size before start index\r\n const { buffer, viewport: { offset } } = scroller;\r\n let startDelta = 0;\r\n if (offset) {\r\n startDelta += offset;\r\n }\r\n if (!buffer.defaultSize) {\r\n return startDelta;\r\n }\r\n for (let index = buffer.finiteAbsMinIndex; index < buffer.startIndex; index++) {\r\n startDelta += buffer.getSizeByIndex(index);\r\n }\r\n scroller.logger.log(() => [\r\n `start delta is ${startDelta}`, ...(offset ? [` (+${offset} offset)`] : [])\r\n ]);\r\n return startDelta;\r\n }\r\n\r\n static setFirstIndex(scroller: Scroller): void {\r\n const { state, buffer } = scroller;\r\n const { positions: { start }, first } = state.fetch;\r\n let firstIndex = buffer.startIndex;\r\n let firstIndexPosition = 0;\r\n if (state.cycle.innerLoop.isInitial) {\r\n scroller.logger.log('skipping fetch backward direction [initial loop]');\r\n } else if (!buffer.defaultSize) {\r\n scroller.logger.log('skipping fetch backward direction [no item size]');\r\n } else {\r\n let position = firstIndexPosition;\r\n let index = firstIndex;\r\n while (1) { // eslint-disable-line no-constant-condition\r\n if (start >= 0) {\r\n const size = buffer.getSizeByIndex(index);\r\n const diff = (position + size) - start;\r\n if (diff > 0) {\r\n firstIndex = index;\r\n firstIndexPosition = position;\r\n break;\r\n }\r\n position += size;\r\n index++;\r\n if (index < buffer.absMinIndex) {\r\n break;\r\n }\r\n }\r\n if (start < 0) {\r\n index--;\r\n if (index < buffer.absMinIndex) {\r\n break;\r\n }\r\n position -= buffer.getSizeByIndex(index);\r\n const diff = position - start;\r\n firstIndex = index;\r\n firstIndexPosition = position;\r\n if (diff <= 0) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n first.index = first.indexBuffer = Math.max(firstIndex, buffer.absMinIndex);\r\n first.position = firstIndexPosition;\r\n }\r\n\r\n static setLastIndex(scroller: Scroller): void {\r\n const { state: { fetch, cycle }, buffer, settings } = scroller;\r\n const { firstVisible, positions: { relative, end }, first, last } = fetch;\r\n let lastIndex;\r\n if (!buffer.defaultSize) {\r\n // just to fetch forward bufferSize items if neither averageItemSize nor itemSize are present\r\n lastIndex = buffer.startIndex + settings.bufferSize - 1;\r\n scroller.logger.log('forcing fetch forward direction [no item size]');\r\n } else {\r\n let index = first.indexBuffer;\r\n let position = first.position;\r\n lastIndex = index;\r\n while (1) { // eslint-disable-line no-constant-condition\r\n lastIndex = index;\r\n const size = buffer.getSizeByIndex(index);\r\n position += size;\r\n if (isNaN(firstVisible.index) && position > relative) {\r\n firstVisible.index = index;\r\n if (!cycle.innerLoop.isInitial) {\r\n firstVisible.delta = position - size - relative;\r\n }\r\n }\r\n if (position >= end) {\r\n break;\r\n }\r\n if (index++ > buffer.absMaxIndex) {\r\n break;\r\n }\r\n }\r\n }\r\n last.index = last.indexBuffer = Math.min(lastIndex, buffer.absMaxIndex);\r\n }\r\n\r\n static skipBufferedItems(scroller: Scroller): void {\r\n const { buffer } = scroller;\r\n if (!buffer.size) {\r\n return;\r\n }\r\n const { fetch } = scroller.state;\r\n const firstIndex = fetch.first.index;\r\n const lastIndex = fetch.last.index;\r\n const packs: number[][] = [[]];\r\n let p = 0;\r\n for (let i = firstIndex; i <= lastIndex; i++) {\r\n if (!buffer.get(i)) {\r\n packs[p].push(i);\r\n } else if (packs[p].length) {\r\n packs[++p] = [];\r\n }\r\n }\r\n let pack = packs[0];\r\n if (packs[0].length && packs[1] && packs[1].length) {\r\n fetch.hasAnotherPack = true;\r\n // todo: need to look for biggest pack in visible area\r\n // todo: or think about merging two requests in a single Fetch process\r\n if (packs[1].length >= packs[0].length) {\r\n pack = packs[1];\r\n }\r\n }\r\n fetch.first.index = Math.max(pack[0], buffer.absMinIndex);\r\n fetch.last.index = Math.min(pack[pack.length - 1], buffer.absMaxIndex);\r\n if (fetch.first.index !== firstIndex || fetch.last.index !== lastIndex) {\r\n scroller.logger.fetch('after Buffer flushing');\r\n }\r\n }\r\n\r\n static checkBufferGaps(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (!buffer.size) {\r\n return;\r\n }\r\n const fetchFirst = fetch.first.index;\r\n const bufferLast = buffer.lastIndex;\r\n if (fetchFirst > bufferLast) {\r\n fetch.first.index = fetch.first.indexBuffer = bufferLast + 1;\r\n }\r\n const bufferFirst = buffer.firstIndex;\r\n const fetchLast = fetch.last.index;\r\n if (fetchLast < bufferFirst) {\r\n fetch.last.index = fetch.last.indexBuffer = bufferFirst - 1;\r\n }\r\n if (fetch.first.index !== fetchFirst || fetch.last.index !== fetchLast) {\r\n scroller.logger.fetch('after Buffer filling (no clip case)');\r\n }\r\n }\r\n\r\n static checkFetchPackSize(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (!fetch.shouldFetch) {\r\n return;\r\n }\r\n const firstIndex = fetch.first.index;\r\n const lastIndex = fetch.last.index;\r\n const diff = scroller.settings.bufferSize - (lastIndex - firstIndex + 1);\r\n if (diff <= 0) {\r\n return;\r\n }\r\n if (!buffer.size || lastIndex > buffer.items[0].$index) { // forward\r\n const newLastIndex = Math.min(lastIndex + diff, buffer.absMaxIndex);\r\n if (newLastIndex > lastIndex) {\r\n fetch.last.index = fetch.last.indexBuffer = newLastIndex;\r\n }\r\n } else {\r\n const newFirstIndex = Math.max(firstIndex - diff, buffer.absMinIndex);\r\n if (newFirstIndex < firstIndex) {\r\n fetch.first.index = fetch.first.indexBuffer = newFirstIndex;\r\n }\r\n }\r\n if (fetch.first.index !== firstIndex || fetch.last.index !== lastIndex) {\r\n scroller.logger.fetch('after bufferSize adjustment');\r\n PreFetch.skipBufferedItems(scroller);\r\n }\r\n }\r\n\r\n static setFetchDirection(scroller: Scroller): void {\r\n const { buffer, state: { fetch } } = scroller;\r\n if (fetch.last.index) {\r\n let direction = Direction.forward;\r\n if (buffer.size) {\r\n direction = fetch.last.index < buffer.items[0].$index ? Direction.backward : Direction.forward;\r\n }\r\n fetch.direction = direction;\r\n scroller.logger.log(() => `fetch direction is \"${direction}\"`);\r\n }\r\n }\r\n\r\n static getStatus(scroller: Scroller): ProcessStatus {\r\n const { cycle, fetch } = scroller.state;\r\n if (cycle.initiator === AdapterProcess.clip) {\r\n scroller.logger.log(() => `going to skip fetch due to \"${AdapterProcess.clip}\" process`);\r\n return ProcessStatus.next;\r\n }\r\n if (fetch.shouldFetch) {\r\n scroller.logger.log(() => `going to fetch ${fetch.count} items started from index ${fetch.index}`);\r\n return ProcessStatus.next;\r\n }\r\n return ProcessStatus.done;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ObservableLike } from '../interfaces/index';\r\n\r\ninterface Immediate {\r\n data: unknown[] | null;\r\n error: unknown | null;\r\n isError: boolean;\r\n}\r\n\r\ntype FetchGetResult = Immediate | Promise<unknown>;\r\n\r\ninterface FetchBox {\r\n success: (value: unknown[]) => void;\r\n fail: (value: unknown) => void;\r\n}\r\n\r\nexport default class Fetch extends BaseProcessFactory(CommonProcess.fetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n\r\n const box = {\r\n success: (data: unknown[]) => {\r\n scroller.logger.log(() =>\r\n `resolved ${data.length} items ` +\r\n `(index = ${scroller.state.fetch.index}, count = ${scroller.state.fetch.count})`\r\n );\r\n scroller.state.fetch.newItemsData = data;\r\n workflow.call({\r\n process: Fetch.process,\r\n status: ProcessStatus.next\r\n });\r\n },\r\n fail: (error: unknown) =>\r\n workflow.call({\r\n process: Fetch.process,\r\n status: ProcessStatus.error,\r\n payload: { error }\r\n })\r\n };\r\n\r\n const result = Fetch.get(scroller);\r\n Fetch.complete(scroller, box, result);\r\n }\r\n\r\n static complete(scroller: Scroller, box: FetchBox, result: FetchGetResult): void {\r\n if (Object.prototype.hasOwnProperty.call(result, 'data')) {\r\n const { data, error, isError } = result as Immediate;\r\n if (!isError) {\r\n box.success(data || []);\r\n } else {\r\n box.fail(error);\r\n }\r\n } else {\r\n const { state: { scroll, fetch }, viewport } = scroller;\r\n if (scroll.positionBeforeAsync === null) {\r\n scroll.positionBeforeAsync = viewport.scrollPosition;\r\n }\r\n fetch.cancel = () => {\r\n box.success = () => null;\r\n box.fail = () => null;\r\n };\r\n (result as Promise<unknown[]>).then(\r\n (data) => box.success(data),\r\n (error) => box.fail(error)\r\n );\r\n }\r\n }\r\n\r\n static get(scroller: Scroller): FetchGetResult {\r\n const _get = scroller.datasource.get;\r\n const { index, count } = scroller.state.fetch;\r\n\r\n let immediateData, immediateError;\r\n let resolve: (value: unknown) => void, reject: (value: unknown) => void;\r\n\r\n const done = (data: unknown[]) => {\r\n if (!resolve) {\r\n immediateData = data || null;\r\n return;\r\n }\r\n resolve(data);\r\n };\r\n const fail = (error: unknown) => {\r\n if (!reject) {\r\n immediateError = error || null;\r\n return;\r\n }\r\n reject(error);\r\n };\r\n\r\n const getResult = _get(index, count, done, fail);\r\n\r\n if (getResult && typeof getResult === 'object' && getResult !== null) {\r\n if (typeof (getResult as PromiseLike<unknown>).then === 'function') {\r\n return getResult as Promise<unknown>;\r\n } else if (typeof (getResult as ObservableLike).subscribe === 'function') {\r\n let sub: undefined | ReturnType<ObservableLike['subscribe']> = void 0;\r\n sub = (getResult as ObservableLike).subscribe(done, fail, () => {\r\n if (sub && typeof sub === 'object' && typeof sub.unsubscribe === 'function') {\r\n sub.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (immediateData || immediateError) { // callback case or immediate observable\r\n return {\r\n data: immediateError ? null : (immediateData || []),\r\n error: immediateError,\r\n isError: !!immediateError\r\n };\r\n }\r\n\r\n return new Promise((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Item } from '../classes/item';\r\n\r\nexport default class PostFetch extends BaseProcessFactory(CommonProcess.postFetch) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n if (PostFetch.setItems(scroller)) {\r\n PostFetch.setBufferLimits(scroller);\r\n workflow.call({\r\n process: PostFetch.process,\r\n status: scroller.state.fetch.hasNewItems\r\n ? ProcessStatus.next\r\n : ProcessStatus.done\r\n });\r\n } else {\r\n workflow.call({\r\n process: PostFetch.process,\r\n status: ProcessStatus.error,\r\n payload: { error: 'Can\\'t set buffer items' }\r\n });\r\n }\r\n }\r\n\r\n static setBufferLimits(scroller: Scroller): void {\r\n const { buffer, state: { fetch, cycle: { innerLoop } } } = scroller;\r\n const { items, first: { index: first }, last: { index: last } } = fetch;\r\n if (!items.length) {\r\n if (last < buffer.minIndex || innerLoop.isInitial) {\r\n buffer.absMinIndex = buffer.minIndex;\r\n }\r\n if (first > buffer.maxIndex || innerLoop.isInitial) {\r\n buffer.absMaxIndex = buffer.maxIndex;\r\n }\r\n } else {\r\n const lastIndex = items.length - 1;\r\n if (first < items[0].$index) {\r\n buffer.absMinIndex = items[0].$index;\r\n }\r\n if (last > items[lastIndex].$index) {\r\n buffer.absMaxIndex = items[lastIndex].$index;\r\n }\r\n }\r\n }\r\n\r\n static setItems(scroller: Scroller): boolean {\r\n const { buffer, state: { fetch, cycle } } = scroller;\r\n const items = fetch.newItemsData;\r\n if (!items || !items.length) { // empty result\r\n return true;\r\n }\r\n // eof/bof case, need to shift fetch index if bof\r\n let fetchIndex = fetch.index;\r\n if (items.length < fetch.count) {\r\n if (cycle.innerLoop.isInitial) {\r\n // let's treat initial poor fetch as startIndex-bof\r\n fetchIndex = buffer.startIndex;\r\n } else if (fetch.first.index < buffer.minIndex) {\r\n // normal bof\r\n fetchIndex = buffer.firstIndex - items.length;\r\n }\r\n }\r\n fetch.items = items.map((item, index: number) =>\r\n new Item(fetchIndex + index, item, scroller.routines)\r\n );\r\n return buffer.setItems(fetch.items);\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Item } from '../classes/item';\r\n\r\nexport default class Render extends BaseProcessFactory(CommonProcess.render) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, state: { cycle, render, scroll }, viewport, routines } = scroller;\r\n scroller.logger.stat('before new items render');\r\n if (scroll.positionBeforeAsync === null) {\r\n scroll.positionBeforeAsync = viewport.scrollPosition;\r\n }\r\n render.cancel = routines.render(() => {\r\n render.cancel = null;\r\n if (Render.doRender(scroller)) {\r\n workflow.call({\r\n process: Render.process,\r\n status: render.noSize ? ProcessStatus.done : ProcessStatus.next,\r\n payload: { process: cycle.initiator }\r\n });\r\n } else {\r\n workflow.call({\r\n process: Render.process,\r\n status: ProcessStatus.error,\r\n payload: { error: 'Can\\'t associate item with element' }\r\n });\r\n }\r\n });\r\n }\r\n\r\n static doRender(scroller: Scroller): boolean {\r\n const { state: { fetch, render }, viewport, buffer, logger } = scroller;\r\n render.positionBefore = viewport.scrollPosition;\r\n if (!fetch.isCheck) {\r\n render.sizeBefore = viewport.getScrollableSize();\r\n if (!fetch.items.every(item =>\r\n Render.processElement(scroller, item)\r\n )) {\r\n return false;\r\n }\r\n }\r\n buffer.checkDefaultSize();\r\n render.sizeAfter = viewport.getScrollableSize();\r\n logger.stat('after new items render');\r\n logger.log(() => render.noSize ? 'viewport size has not been changed' : void 0);\r\n return true;\r\n }\r\n\r\n static processElement(scroller: Scroller, item: Item): boolean {\r\n const { viewport, buffer } = scroller;\r\n const element = viewport.findItemElementById(item.nodeId);\r\n if (!element) {\r\n return false;\r\n }\r\n item.element = element as HTMLElement;\r\n item.makeVisible();\r\n item.setSize(buffer.getSizeByIndex(item.$index));\r\n buffer.cacheItem(item);\r\n return true;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { ScrollerWorkflow } from '../interfaces/index';\r\n\r\nconst isInterrupted = ({ call }: ScrollerWorkflow): boolean => !!call.interrupted;\r\n\r\nexport default class End extends BaseProcessFactory(CommonProcess.end) {\r\n\r\n static run(scroller: Scroller, { error }: { error?: unknown } = {}): void {\r\n const { workflow, state: { cycle: { interrupter } } } = scroller;\r\n\r\n if (!error && !interrupter) {\r\n // set out params accessible via Adapter\r\n End.calculateParams(scroller);\r\n }\r\n\r\n // explicit interruption for we don't want to go through the inner loop finalizing\r\n if (isInterrupted(workflow)) {\r\n workflow.call({ process: End.process, status: ProcessStatus.done });\r\n return;\r\n }\r\n\r\n const next = End.shouldContinueRun(scroller, error);\r\n scroller.state.endInnerLoop();\r\n\r\n workflow.call({\r\n process: End.process,\r\n status: next ? ProcessStatus.next : ProcessStatus.done,\r\n payload: { ...(interrupter ? { process: interrupter } : {}) }\r\n });\r\n }\r\n\r\n static calculateParams(scroller: Scroller): void {\r\n const { adapter, workflow } = scroller;\r\n\r\n adapter.setFirstOrLastVisible({ first: true, workflow });\r\n adapter.setFirstOrLastVisible({ last: true, workflow });\r\n }\r\n\r\n static shouldContinueRun(scroller: Scroller, error: unknown): boolean {\r\n const { cycle, fetch, render } = scroller.state;\r\n // Adapter.reload or Adapter.reset\r\n if (cycle.interrupter) {\r\n return true;\r\n }\r\n // critical error\r\n if (error) {\r\n return false;\r\n }\r\n // Adapter.check\r\n if (fetch.simulate && fetch.isCheck && !render.noSize) {\r\n return true;\r\n }\r\n // Adapter.remove or Adapter.update with clip\r\n if (fetch.simulate && fetch.doRemove) {\r\n return true;\r\n }\r\n // common inner loop (App start, scroll, Adapter.clip) with full fetch\r\n if (!fetch.simulate && ((fetch.hasNewItems && !render.noSize) || fetch.hasAnotherPack)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport End from './end';\r\n\r\nexport default class Adjust extends BaseProcessFactory(CommonProcess.adjust) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow, viewport, state: { scroll } } = scroller;\r\n\r\n scroll.positionBeforeAdjust = viewport.scrollPosition;\r\n Adjust.setPaddings(scroller);\r\n scroll.positionAfterAdjust = viewport.scrollPosition;\r\n\r\n // scroll position adjustments\r\n const position = Adjust.calculatePosition(scroller);\r\n\r\n // additional adjustment if the position can't be reached during the initial cycle\r\n Adjust.setAdditionalForwardPadding(scroller, position);\r\n\r\n // set new position using animation frame\r\n Adjust.setPosition(scroller, position, () =>\r\n workflow.call({\r\n process: Adjust.process,\r\n status: ProcessStatus.done\r\n })\r\n );\r\n }\r\n\r\n static setPaddings(scroller: Scroller): void {\r\n const { viewport, buffer, settings: { inverse }, state: { fetch } } = scroller;\r\n const firstItem = buffer.getFirstVisibleItem();\r\n const lastItem = buffer.getLastVisibleItem();\r\n let first, last;\r\n if (firstItem && lastItem) {\r\n first = firstItem.$index;\r\n last = lastItem.$index;\r\n } else {\r\n first = !isNaN(fetch.firstVisible.index) ? fetch.firstVisible.index : buffer.startIndex;\r\n last = first - 1;\r\n }\r\n const { forward, backward } = viewport.paddings;\r\n let index, bwdSize = 0, fwdSize = 0;\r\n\r\n // new backward and forward paddings size\r\n for (index = buffer.finiteAbsMinIndex; index < first; index++) {\r\n bwdSize += buffer.getSizeByIndex(index);\r\n }\r\n for (index = last + 1; index <= buffer.finiteAbsMaxIndex; index++) {\r\n fwdSize += buffer.getSizeByIndex(index);\r\n }\r\n\r\n // lack of items case\r\n const bufferSize = viewport.getScrollableSize() - forward.size - backward.size;\r\n const scrollSize = bwdSize + bufferSize + fwdSize;\r\n const viewportSizeDiff = viewport.getSize() - scrollSize;\r\n if (viewportSizeDiff > 0) {\r\n if (inverse) {\r\n bwdSize += viewportSizeDiff;\r\n } else {\r\n fwdSize += viewportSizeDiff;\r\n }\r\n scroller.logger.log(() =>\r\n inverse ? 'backward' : 'forward' + ` padding will be increased by ${viewportSizeDiff} to fill the viewport`\r\n );\r\n }\r\n\r\n backward.size = bwdSize;\r\n forward.size = fwdSize;\r\n\r\n scroller.logger.stat('after paddings adjustments');\r\n }\r\n\r\n static calculatePosition(scroller: Scroller): number {\r\n const { viewport, buffer, state: { fetch, render, scroll } } = scroller;\r\n let position = viewport.paddings.backward.size;\r\n\r\n // increase the position to meet the expectation of the first visible item\r\n if (!isNaN(fetch.firstVisible.index) && !isNaN(buffer.firstIndex)) {\r\n scroller.logger.log(`first index = ${fetch.firstVisible.index}, delta = ${fetch.firstVisible.delta}`);\r\n const shouldCheckPreSizeExpectation = fetch.shouldCheckPreSizeExpectation(buffer.lastIndex);\r\n buffer.items.forEach(item => {\r\n // 1) shift of the buffered items before the first visible item\r\n if (item.$index < fetch.firstVisible.index) {\r\n position += item.size;\r\n return;\r\n }\r\n // 2) delta of the first visible item\r\n if (item.$index === fetch.firstVisible.index && fetch.firstVisible.delta) {\r\n position -= fetch.firstVisible.delta;\r\n }\r\n // 3) difference between expected and real sizes of fetched items after the first visible\r\n if (shouldCheckPreSizeExpectation && item.preSize && fetch.items.includes(item)) {\r\n position += item.size - item.preSize;\r\n }\r\n });\r\n }\r\n\r\n // slow fetch/render case\r\n if (scroll.positionBeforeAsync !== null) {\r\n const diff = render.positionBefore - scroll.positionBeforeAsync;\r\n if (diff !== 0) {\r\n scroller.logger.log(`shift position due to fetch-render difference (${diff})`);\r\n position += diff;\r\n }\r\n }\r\n\r\n // increase the position due to viewport's offset\r\n if (viewport.offset > 0 && (position || fetch.positions.before)) {\r\n position += viewport.offset;\r\n }\r\n\r\n return Math.round(position);\r\n }\r\n\r\n static setAdditionalForwardPadding(scroller: Scroller, position: number): void {\r\n const { viewport, buffer, state: { cycle } } = scroller;\r\n if (!cycle.isInitial || !End.shouldContinueRun(scroller, null)) {\r\n return;\r\n }\r\n const diff = position - viewport.getMaxScrollPosition();\r\n if (diff <= 0) {\r\n return;\r\n }\r\n const last = buffer.getLastVisibleItem();\r\n if (!last) {\r\n return;\r\n }\r\n let size = 0;\r\n let index = last.$index + 1;\r\n while (size <= diff && index <= buffer.absMaxIndex) {\r\n size += buffer.getSizeByIndex(index++);\r\n }\r\n const shift = Math.min(size, diff);\r\n if (shift) {\r\n viewport.paddings.forward.size += shift;\r\n scroller.logger.log(`increase fwd padding due to lack of items (${diff} -> ${shift})`);\r\n }\r\n }\r\n\r\n static setPosition(scroller: Scroller, position: number, done: () => void): void {\r\n const { state: { scroll }, viewport, routines } = scroller;\r\n if (!scroll.hasPositionChanged(position)) {\r\n return done();\r\n }\r\n scroll.syntheticPosition = position;\r\n scroll.syntheticFulfill = false;\r\n\r\n scroll.cancelAnimation = routines.animate(() => {\r\n scroll.cancelAnimation = null;\r\n const inertiaDiff = (scroll.positionAfterAdjust as number) - viewport.scrollPosition;\r\n let diffLog = '';\r\n if (inertiaDiff > 0) {\r\n position -= inertiaDiff;\r\n scroll.syntheticPosition = position;\r\n diffLog = ` (-${inertiaDiff})`;\r\n }\r\n scroll.syntheticFulfill = true;\r\n viewport.scrollPosition = position;\r\n scroller.logger.stat('after scroll adjustment' + diffLog);\r\n done();\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class PreClip extends BaseProcessFactory(CommonProcess.preClip) {\r\n\r\n static run(scroller: Scroller): void {\r\n PreClip.prepareClip(scroller);\r\n\r\n scroller.workflow.call({\r\n process: PreClip.process,\r\n status: ProcessStatus.next,\r\n payload: {\r\n doClip: scroller.state.clip.doClip\r\n }\r\n });\r\n }\r\n\r\n static prepareClip(scroller: Scroller): void {\r\n const { state: { fetch, clip } } = scroller;\r\n if (PreClip.shouldNotClip(scroller)) {\r\n return;\r\n }\r\n const firstIndex = fetch.first.indexBuffer;\r\n const lastIndex = fetch.last.indexBuffer;\r\n scroller.logger.log(() =>\r\n `looking for ${fetch.direction ? 'anti-' + fetch.direction + ' ' : ''}items ` +\r\n `that are out of [${firstIndex}..${lastIndex}] range`);\r\n if (PreClip.isBackward(scroller, firstIndex)) {\r\n PreClip.prepareClipByDirection(scroller, Direction.backward, firstIndex);\r\n }\r\n if (PreClip.isForward(scroller, lastIndex)) {\r\n PreClip.prepareClipByDirection(scroller, Direction.forward, lastIndex);\r\n }\r\n if (!clip.doClip) {\r\n scroller.logger.log('skipping clip [no items to clip]');\r\n }\r\n return;\r\n }\r\n\r\n static shouldNotClip(scroller: Scroller): boolean {\r\n const { settings, buffer, state } = scroller;\r\n if (settings.infinite && !state.clip.force) {\r\n scroller.logger.log('skipping clip [infinite mode]');\r\n return true;\r\n }\r\n if (!buffer.size) {\r\n scroller.logger.log('skipping clip [empty buffer]');\r\n return true;\r\n }\r\n if (state.cycle.isInitial) {\r\n scroller.logger.log('skipping clip [initial cycle]');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static isBackward(scroller: Scroller, firstIndex: number): boolean {\r\n const { buffer, state: { clip, fetch } } = scroller;\r\n if (clip.force) {\r\n return clip.forceBackward;\r\n }\r\n if (fetch.direction !== Direction.backward) {\r\n if (firstIndex - 1 >= buffer.absMinIndex) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static isForward(scroller: Scroller, lastIndex: number): boolean {\r\n const { buffer, state: { clip, fetch } } = scroller;\r\n if (clip.force) {\r\n return clip.forceForward;\r\n }\r\n if (fetch.direction !== Direction.forward) {\r\n if (lastIndex + 1 <= buffer.absMaxIndex) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static prepareClipByDirection(scroller: Scroller, direction: Direction, edgeIndex: number): void {\r\n const forward = direction === Direction.forward;\r\n scroller.buffer.items.forEach(item => {\r\n if (\r\n (!forward && item.$index < edgeIndex) ||\r\n (forward && item.$index > edgeIndex)\r\n ) {\r\n item.toRemove = true;\r\n item.removeDirection = direction;\r\n scroller.state.clip.doClip = true;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { BaseProcessFactory, CommonProcess, ProcessStatus } from './misc/index';\r\nimport { Scroller } from '../scroller';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport default class Clip extends BaseProcessFactory(CommonProcess.clip) {\r\n\r\n static run(scroller: Scroller): void {\r\n const { workflow } = scroller;\r\n\r\n Clip.doClip(scroller);\r\n\r\n workflow.call({\r\n process: Clip.process,\r\n status: ProcessStatus.next\r\n });\r\n }\r\n\r\n static doClip(scroller: Scroller): void {\r\n const { buffer, viewport: { paddings }, state: { clip }, logger } = scroller;\r\n const size = { [Direction.backward]: 0, [Direction.forward]: 0 };\r\n\r\n logger.stat(`before clip (${++clip.callCount})`);\r\n\r\n const itemsToRemove = buffer.items.filter(item => {\r\n if (!item.toRemove) {\r\n return false;\r\n }\r\n item.hide();\r\n size[item.removeDirection] += item.size;\r\n return true;\r\n });\r\n\r\n if (itemsToRemove.length) {\r\n if (size[Direction.backward]) {\r\n paddings.byDirection(Direction.backward).size += size[Direction.backward];\r\n }\r\n if (size[Direction.forward]) {\r\n paddings.byDirection(Direction.forward).size += size[Direction.forward];\r\n }\r\n if (scroller.settings.onBeforeClip) {\r\n scroller.settings.onBeforeClip(itemsToRemove.map(item => item.get()));\r\n }\r\n }\r\n\r\n buffer.clip();\r\n\r\n logger.log(() => {\r\n const list = itemsToRemove.map(({ $index }) => $index);\r\n return list.length\r\n ? [\r\n `clipped ${list.length} item(s) from Buffer` +\r\n (size.backward ? `, +${size.backward} fwd px` : '') +\r\n (size.forward ? `, +${size.forward} bwd px` : '') +\r\n `, range: [${list[0]}..${list[list.length - 1]}]`\r\n ]\r\n : 'clipped 0 items from Buffer';\r\n });\r\n\r\n logger.stat('after clip');\r\n }\r\n\r\n}\r\n","import { Scroller } from '../scroller';\r\nimport { CommonProcess, AdapterProcess, ProcessStatus as Status } from '../processes/index';\r\nimport { IPackages, ProcessSubject } from '../interfaces/index';\r\n\r\ntype LogType = [unknown?, ...unknown[]];\r\n\r\nexport class Logger {\r\n\r\n readonly debug: boolean;\r\n readonly immediateLog: boolean;\r\n readonly logTime: boolean;\r\n readonly getTime: () => string;\r\n readonly getStat: () => string;\r\n readonly getFetchRange: () => string;\r\n readonly getWorkflowCycleData: () => string;\r\n readonly getLoopId: () => string;\r\n readonly getLoopIdNext: () => string;\r\n readonly getScrollPosition: () => number;\r\n private logs: unknown[][] = [];\r\n\r\n constructor(scroller: Scroller, packageInfo: IPackages, adapter?: { id: number }) {\r\n const { settings } = scroller;\r\n this.debug = settings.debug;\r\n this.immediateLog = settings.immediateLog;\r\n this.logTime = settings.logTime;\r\n this.getTime = (): string =>\r\n scroller.state && ` // time: ${scroller.state.time}`;\r\n this.getStat = (): string => {\r\n const { buffer, viewport } = scroller;\r\n const first = buffer.getFirstVisibleItem();\r\n const last = buffer.getLastVisibleItem();\r\n return 'pos: ' + viewport.scrollPosition + ', ' +\r\n 'size: ' + viewport.getScrollableSize() + ', ' +\r\n 'bwd_p: ' + viewport.paddings.backward.size + ', ' +\r\n 'fwd_p: ' + viewport.paddings.forward.size + ', ' +\r\n 'default: ' + (buffer.defaultSize || 'no') + ', ' +\r\n 'items: ' + buffer.getVisibleItemsCount() + ', ' +\r\n 'range: ' + (first && last ? `[${first.$index}..${last.$index}]` : 'no');\r\n };\r\n this.getFetchRange = (): string => {\r\n const { first: { index: first }, last: { index: last } } = scroller.state.fetch;\r\n return !Number.isNaN(first) && !Number.isNaN(last)\r\n ? `[${first}..${last}]`\r\n : 'no';\r\n };\r\n this.getLoopId = (): string => scroller.state.cycle.loopId;\r\n this.getLoopIdNext = (): string => scroller.state.cycle.loopIdNext;\r\n this.getWorkflowCycleData = (): string =>\r\n `${settings.instanceIndex}-${scroller.state.cycle.count}`;\r\n this.getScrollPosition = () => scroller.routines.getScrollPosition();\r\n this.log(() =>\r\n 'vscroll Workflow has been started, ' +\r\n `core: ${packageInfo.core.name} v${packageInfo.core.version}, ` +\r\n `consumer: ${packageInfo.consumer.name} v${packageInfo.consumer.version}, ` +\r\n `scroller instance: ${settings.instanceIndex}, adapter ` +\r\n (!adapter ? 'is not instantiated' : `instance: ${adapter.id}`)\r\n );\r\n }\r\n\r\n object(str: string, obj: unknown, stringify?: boolean): void {\r\n this.log(() => [\r\n str,\r\n stringify\r\n ? JSON.stringify(obj, (k, v) => {\r\n if (Number.isNaN(v)) {\r\n return 'NaN';\r\n }\r\n if (v === Infinity) {\r\n return 'Infinity';\r\n }\r\n if (v === -Infinity) {\r\n return '-Infinity';\r\n }\r\n if (v instanceof Element) {\r\n return 'HTMLElement';\r\n }\r\n if (v instanceof HTMLDocument) {\r\n return 'HTMLDocument';\r\n }\r\n if (typeof v === 'function') {\r\n return 'Function';\r\n }\r\n return v;\r\n })\r\n .replace(/\"/g, '')\r\n .replace(/(\\{|:|,)/g, '$1 ')\r\n .replace(/(\\})/g, ' $1')\r\n : obj\r\n ]);\r\n }\r\n\r\n stat(str?: string): void {\r\n if (this.debug) {\r\n const logStyles = [\r\n 'color: #888; border: dashed #888 0; border-bottom-width: 0px',\r\n 'color: #000; border-width: 0'\r\n ];\r\n this.log(() => ['%cstat' + (str ? ` ${str}` : '') + ',%c ' + this.getStat(), ...logStyles]);\r\n }\r\n }\r\n\r\n fetch(str?: string): void {\r\n if (this.debug) {\r\n const _text = 'fetch interval' + (str ? ` ${str}` : '');\r\n const logStyles = ['color: #888', 'color: #000'];\r\n this.log(() => [`%c${_text}: %c${this.getFetchRange()}`, ...logStyles]);\r\n }\r\n }\r\n\r\n prepareForLog(data: unknown): unknown {\r\n return data instanceof Event && data.target\r\n ? this.getScrollPosition()\r\n : data;\r\n }\r\n\r\n logProcess(data: ProcessSubject): void {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const { process, status, payload } = data;\r\n\r\n // inner loop start-end log\r\n const loopLog: string[] = [];\r\n if (\r\n process === CommonProcess.init && status === Status.next\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopIdNext()} start`);\r\n } else if (\r\n process === CommonProcess.end\r\n ) {\r\n loopLog.push(`%c---=== loop ${this.getLoopId()} done`);\r\n const parent = payload && payload.process;\r\n if (status === Status.next && (parent !== AdapterProcess.reset && parent !== AdapterProcess.reload)) {\r\n loopLog[0] += `, loop ${this.getLoopIdNext()} start`;\r\n }\r\n }\r\n if (loopLog.length) {\r\n this.log(() => [...loopLog, 'color: #006600;']);\r\n }\r\n }\r\n\r\n logCycle(start = true): void {\r\n const logData = this.getWorkflowCycleData();\r\n const border = start ? '1px 0 0 1px' : '0 0 1px 1px';\r\n const logStyles = `color: #0000aa; border: solid #555 1px; border-width: ${border}; margin-left: -2px`;\r\n this.log(() => [`%c ~~~ WF Cycle ${logData} ${start ? 'STARTED' : 'FINALIZED'} ~~~ `, logStyles]);\r\n }\r\n\r\n logError(str: string): void {\r\n if (this.debug) {\r\n const logStyles = ['color: #a00;', 'color: #000'];\r\n this.log(() => ['error:%c' + (str ? ` ${str}` : '') + `%c (loop ${this.getLoopIdNext()})`, ...logStyles]);\r\n }\r\n }\r\n\r\n logAdapterMethod = (methodName: string, args?: unknown, add?: string): void => {\r\n if (!this.debug) {\r\n return;\r\n }\r\n const params = (\r\n args === void 0 ? [] : (Array.isArray(args) ? args : [args])\r\n )\r\n .map((arg: unknown) => {\r\n if (typeof arg === 'function') {\r\n return 'func';\r\n } else if (typeof arg !== 'object' || !arg) {\r\n return arg;\r\n } else if (Array.isArray(arg)) {\r\n return `[of ${arg.length}]`;\r\n }\r\n return '{ ' + Object.keys(arg).join(', ') + ' }';\r\n })\r\n .join(', ');\r\n this.log(`adapter: ${methodName}(${params || ''})${add || ''}`);\r\n };\r\n\r\n log(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (typeof args[0] === 'function') {\r\n args = args[0]();\r\n if (!Array.isArray(args)) {\r\n args = [args];\r\n }\r\n }\r\n if (args.every(item => item === void 0)) {\r\n return;\r\n }\r\n if (this.logTime) {\r\n args = [...args, this.getTime()];\r\n }\r\n args = args.map((arg: unknown) => this.prepareForLog(arg));\r\n if (this.immediateLog) {\r\n console.log.apply(this, args as LogType);\r\n } else {\r\n this.logs.push(args);\r\n }\r\n }\r\n }\r\n\r\n // logNow(...args: unknown[]) {\r\n // const immediateLog = this.immediateLog;\r\n // const debug = this.debug;\r\n // (this as any).debug = true;\r\n // (this as any).immediateLog = true;\r\n // this.log.apply(this, args);\r\n // (this as any).debug = debug;\r\n // (this as any).immediateLog = immediateLog;\r\n // }\r\n\r\n logForce(...args: unknown[]): void {\r\n if (this.debug) {\r\n if (!this.immediateLog && this.logs.length) {\r\n this.logs.forEach(logArgs => console.log.apply(this, logArgs));\r\n this.logs = [];\r\n }\r\n if (args.length) {\r\n console.log.apply(this, args as LogType);\r\n }\r\n }\r\n }\r\n}\r\n","import { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\nimport { IRoutines, CustomRoutinesClass } from '../interfaces/index';\r\n\r\ntype MethodContainer = { [key: string]: (...args: unknown[]) => void };\r\n\r\nexport class Routines implements IRoutines {\r\n\r\n readonly settings: IRoutines['settings'];\r\n readonly element: HTMLElement;\r\n readonly viewport: HTMLElement;\r\n\r\n constructor(element: HTMLElement, settings: Settings, CustomRoutines?: CustomRoutinesClass) {\r\n this.element = element;\r\n this.settings = {\r\n viewport: settings.viewport,\r\n horizontal: settings.horizontal,\r\n window: settings.windowViewport\r\n };\r\n // provide custom overrides for IRoutines methods\r\n if (CustomRoutines) {\r\n const self = (this as unknown as MethodContainer);\r\n const routines = new CustomRoutines(element, this.settings) as MethodContainer;\r\n Object.getOwnPropertyNames(Object.getPrototypeOf(routines))\r\n .filter(method =>\r\n method !== 'constructor' &&\r\n typeof routines[method] === 'function' &&\r\n typeof self[method] === 'function'\r\n )\r\n .forEach(method =>\r\n self[method] = (...args: unknown[]) =>\r\n routines[method].apply(this, args)\r\n );\r\n }\r\n // initialization\r\n this.viewport = this.getViewportElement();\r\n this.onInit(settings);\r\n }\r\n\r\n checkElement(element: HTMLElement): void {\r\n if (!element) {\r\n throw new Error('HTML element is not defined');\r\n }\r\n }\r\n\r\n getViewportElement(): HTMLElement {\r\n if (this.settings.window) {\r\n return document.documentElement;\r\n }\r\n if (this.settings.viewport) {\r\n return this.settings.viewport;\r\n }\r\n this.checkElement(this.element);\r\n const parent = this.element.parentElement as HTMLElement;\r\n this.checkElement(parent);\r\n return parent;\r\n }\r\n\r\n onInit(settings: Settings): void {\r\n if (settings.windowViewport) {\r\n if ('scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n }\r\n if (settings.dismissOverflowAnchor) {\r\n this.viewport.style.overflowAnchor = 'none';\r\n }\r\n }\r\n\r\n findElementBySelector(element: HTMLElement, selector: string): HTMLElement | null {\r\n this.checkElement(element);\r\n return element.querySelector(selector);\r\n }\r\n\r\n findPaddingElement(direction: Direction): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-padding-${direction}]`);\r\n }\r\n\r\n findItemElement(id: string): HTMLElement | null {\r\n return this.findElementBySelector(this.element, `[data-sid=\"${id}\"]`);\r\n }\r\n\r\n getScrollPosition(): number {\r\n if (this.settings.window) {\r\n return this.settings.horizontal ? window.pageXOffset : window.pageYOffset;\r\n }\r\n return this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'];\r\n }\r\n\r\n setScrollPosition(value: number): void {\r\n value = Math.max(0, value);\r\n if (this.settings.window) {\r\n if (this.settings.horizontal) {\r\n window.scrollTo(value, window.scrollY);\r\n } else {\r\n window.scrollTo(window.scrollX, value);\r\n }\r\n return;\r\n }\r\n this.viewport[this.settings.horizontal ? 'scrollLeft' : 'scrollTop'] = value;\r\n }\r\n\r\n getElementParams(element: HTMLElement): DOMRect {\r\n this.checkElement(element);\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n getWindowParams(): DOMRect {\r\n const { clientWidth, clientHeight, clientLeft, clientTop } = this.viewport;\r\n return {\r\n 'height': clientHeight,\r\n 'width': clientWidth,\r\n 'top': clientTop,\r\n 'bottom': clientTop + clientHeight,\r\n 'left': clientLeft,\r\n 'right': clientLeft + clientWidth,\r\n 'x': clientLeft,\r\n 'y': clientTop,\r\n 'toJSON': () => null,\r\n };\r\n }\r\n\r\n getSize(element: HTMLElement): number {\r\n return this.getElementParams(element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getScrollerSize(): number {\r\n return this.getElementParams(this.element)[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n\r\n getViewportSize(): number {\r\n if (this.settings.window) {\r\n return this.getWindowParams()[this.settings.horizontal ? 'width' : 'height'];\r\n }\r\n return this.getSize(this.viewport);\r\n }\r\n\r\n getSizeStyle(element: HTMLElement): number {\r\n this.checkElement(element);\r\n const size = element.style[this.settings.horizontal ? 'width' : 'height'];\r\n return parseFloat(size as string) || 0;\r\n }\r\n\r\n setSizeStyle(element: HTMLElement, value: number): void {\r\n this.checkElement(element);\r\n value = Math.max(0, Math.round(value));\r\n element.style[this.settings.horizontal ? 'width' : 'height'] = `${value}px`;\r\n }\r\n\r\n getEdge(element: HTMLElement, direction: Direction): number {\r\n const { horizontal } = this.settings;\r\n const params = this.getElementParams(element);\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n\r\n getViewportEdge(direction: Direction): number {\r\n const { window, horizontal } = this.settings;\r\n if (window) {\r\n const params = this.getWindowParams();\r\n const isFwd = direction === Direction.forward;\r\n return params[isFwd ? (horizontal ? 'right' : 'bottom') : (horizontal ? 'left' : 'top')];\r\n }\r\n return this.getEdge(this.viewport, direction);\r\n }\r\n\r\n makeElementVisible(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.left = '';\r\n element.style.top = '';\r\n element.style.position = '';\r\n }\r\n\r\n hideElement(element: HTMLElement): void {\r\n this.checkElement(element);\r\n element.style.display = 'none';\r\n }\r\n\r\n getOffset(): number {\r\n const get = (element: HTMLElement) =>\r\n (this.settings.horizontal ? element.offsetLeft : element.offsetTop) || 0;\r\n return get(this.element) - (!this.settings.window ? get(this.viewport) : 0);\r\n }\r\n\r\n scrollTo(element: HTMLElement, argument?: boolean | ScrollIntoViewOptions): void {\r\n this.checkElement(element);\r\n element.scrollIntoView(argument);\r\n }\r\n\r\n render(cb: () => void): () => void {\r\n const timeoutId = setTimeout(() => cb());\r\n return () => clearTimeout(timeoutId);\r\n }\r\n\r\n animate(cb: () => void): () => void {\r\n const animationFrameId = requestAnimationFrame(() => cb());\r\n return () => cancelAnimationFrame(animationFrameId);\r\n }\r\n\r\n onScroll(handler: EventListener): () => void {\r\n const eventReceiver = this.settings.window ? window : this.viewport;\r\n eventReceiver.addEventListener('scroll', handler);\r\n return () => eventReceiver.removeEventListener('scroll', handler);\r\n }\r\n\r\n}\r\n","import { Routines } from './domRoutines';\r\nimport { Settings } from './settings';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Padding {\r\n\r\n element: HTMLElement;\r\n direction: Direction;\r\n routines: Routines;\r\n\r\n constructor(direction: Direction, routines: Routines) {\r\n const found = routines.findPaddingElement(direction);\r\n routines.checkElement(found as HTMLElement);\r\n this.element = found as HTMLElement;\r\n this.direction = direction;\r\n this.routines = routines;\r\n }\r\n\r\n reset(size?: number): void {\r\n this.size = size || 0;\r\n }\r\n\r\n get size(): number {\r\n return this.routines.getSizeStyle(this.element);\r\n }\r\n\r\n set size(value: number) {\r\n this.routines.setSizeStyle(this.element, value);\r\n }\r\n\r\n}\r\n\r\nexport class Paddings {\r\n settings: Settings;\r\n forward: Padding;\r\n backward: Padding;\r\n\r\n constructor(routines: Routines, settings: Settings) {\r\n this.settings = settings;\r\n this.forward = new Padding(Direction.forward, routines);\r\n this.backward = new Padding(Direction.backward, routines);\r\n }\r\n\r\n byDirection(direction: Direction, opposite?: boolean): Padding {\r\n return direction === Direction.backward\r\n ? (opposite ? this.forward : this.backward)\r\n : (opposite ? this.backward : this.forward);\r\n }\r\n\r\n reset(viewportSize: number, startIndex: number, offset: number): void {\r\n const positive = this.getPositiveSize(startIndex, viewportSize, offset);\r\n const negative = this.getNegativeSize(startIndex);\r\n if (this.settings.inverse) {\r\n this.forward.reset(negative);\r\n this.backward.reset(positive);\r\n const diff = viewportSize - this.backward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size += diff;\r\n this.forward.size -= diff;\r\n }\r\n } else {\r\n this.forward.reset(positive);\r\n this.backward.reset(negative);\r\n const diff = viewportSize - this.forward.size - offset;\r\n if (diff > 0) {\r\n this.backward.size -= diff;\r\n this.forward.size += diff;\r\n }\r\n }\r\n\r\n }\r\n\r\n getPositiveSize(startIndex: number, viewportSize: number, offset: number): number {\r\n const { settings } = this;\r\n let positiveSize = viewportSize;\r\n if (isFinite(settings.maxIndex)) {\r\n positiveSize = (settings.maxIndex - startIndex + 1) * settings.itemSize;\r\n }\r\n if (offset) {\r\n positiveSize = Math.max(positiveSize - offset, 0);\r\n }\r\n return positiveSize;\r\n }\r\n\r\n getNegativeSize(startIndex: number): number {\r\n const { settings } = this;\r\n let negativeSize = 0;\r\n if (isFinite(settings.minIndex)) {\r\n negativeSize = (startIndex - settings.minIndex) * settings.itemSize;\r\n }\r\n return negativeSize;\r\n }\r\n}\r\n","import { Paddings } from './paddings';\r\nimport { Settings } from './settings';\r\nimport { Routines } from './domRoutines';\r\nimport { Item } from './item';\r\nimport { State } from './state';\r\nimport { Logger } from './logger';\r\nimport { Direction } from '../inputs/index';\r\n\r\nexport class Viewport {\r\n\r\n offset: number;\r\n paddings: Paddings;\r\n\r\n readonly settings: Settings;\r\n readonly routines: Routines;\r\n readonly state: State;\r\n readonly logger: Logger;\r\n\r\n constructor(settings: Settings, routines: Routines, state: State, logger: Logger) {\r\n this.settings = settings;\r\n this.routines = routines;\r\n this.state = state;\r\n this.logger = logger;\r\n this.paddings = new Paddings(this.routines, settings);\r\n }\r\n\r\n reset(startIndex: number): void {\r\n this.setOffset();\r\n this.paddings.reset(this.getSize(), startIndex, this.offset);\r\n this.scrollPosition = this.paddings.backward.size || 0;\r\n this.state.scroll.reset();\r\n }\r\n\r\n setPosition(value: number): number {\r\n const oldPosition = this.scrollPosition;\r\n if (oldPosition === value) {\r\n this.logger.log(() => ['setting scroll position at', value, '[cancelled]']);\r\n return value;\r\n }\r\n this.routines.setScrollPosition(value);\r\n const position = this.scrollPosition;\r\n this.logger.log(() => [\r\n 'setting scroll position at', position, ...(position !== value ? [`(${value})`] : [])\r\n ]);\r\n return position;\r\n }\r\n\r\n get scrollPosition(): number {\r\n return this.routines.getScrollPosition();\r\n }\r\n\r\n set scrollPosition(value: number) {\r\n this.setPosition(value);\r\n }\r\n\r\n getSize(): number {\r\n return this.routines.getViewportSize();\r\n }\r\n\r\n getScrollableSize(): number {\r\n return this.routines.getScrollerSize();\r\n }\r\n\r\n getMaxScrollPosition(): number {\r\n return this.getScrollableSize() - this.getSize();\r\n }\r\n\r\n getBufferPadding(): number {\r\n return this.getSize() * this.settings.padding;\r\n }\r\n\r\n getEdge(direction: Direction): number {\r\n return this.routines.getViewportEdge(direction);\r\n }\r\n\r\n setOffset(): void {\r\n this.offset = this.routines.getOffset();\r\n }\r\n\r\n findItemElementById(id: string): HTMLElement | null {\r\n return this.routines.findItemElement(id);\r\n }\r\n\r\n getEdgeVisibleItem(items: Item[], direction: Direction): { item?: Item, index: number, diff: number } {\r\n const bwd = direction === Direction.backward;\r\n const opposite = bwd ? Direction.forward : Direction.backward;\r\n const viewportEdge = this.getEdge(direction);\r\n let item, diff = 0;\r\n for (\r\n let i = bwd ? 0 : items.length - 1;\r\n bwd ? i <= items.length - 1 : i >= 0;\r\n i += bwd ? 1 : -1\r\n ) {\r\n const itemEdge = this.routines.getEdge(items[i].element, opposite);\r\n diff = itemEdge - viewportEdge;\r\n if (bwd && diff > 0 || !bwd && diff < 0) {\r\n item = items[i];\r\n break;\r\n }\r\n }\r\n return { item, index: item ? item.$index : NaN, diff };\r\n }\r\n\r\n}\r\n","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","import { DefaultSize } from './defaultSize';\r\nimport { Item } from '../item';\r\nimport { Settings } from '../settings';\r\nimport { Logger } from '../logger';\r\nimport { SizeStrategy, Direction } from '../../inputs/index';\r\n\r\ninterface ItemToCache<Data> {\r\n $index: number;\r\n data: Data;\r\n size?: number;\r\n}\r\n\r\ninterface ItemUpdate {\r\n $index: number;\r\n size: number;\r\n toRemove?: boolean;\r\n}\r\n\r\nexport class ItemCache<Data = unknown> {\r\n $index: number;\r\n data: Data | null;\r\n size?: number;\r\n position: number;\r\n\r\n constructor(item: ItemToCache<Data>, saveData: boolean) {\r\n this.$index = item.$index;\r\n this.data = saveData ? item.data : null;\r\n this.size = item.size;\r\n }\r\n\r\n changeIndex(value: number): void {\r\n this.$index = value;\r\n }\r\n}\r\n\r\nexport class Cache<Data = unknown> {\r\n minIndex: number;\r\n maxIndex: number;\r\n\r\n readonly itemSize: number;\r\n readonly saveData: boolean;\r\n readonly cacheOnReload: boolean;\r\n readonly sizeStrategy: SizeStrategy;\r\n readonly logger: Logger;\r\n private items: Map<number, ItemCache<Data>>;\r\n private defaultSize: DefaultSize;\r\n\r\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\r\n this.itemSize = itemSize;\r\n this.saveData = cacheData;\r\n this.cacheOnReload = cacheOnReload;\r\n this.sizeStrategy = sizeStrategy;\r\n this.logger = logger;\r\n this.items = new Map<number, ItemCache<Data>>();\r\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\r\n this.reset(true);\r\n }\r\n\r\n reset(force: boolean): void {\r\n force = force || !this.cacheOnReload;\r\n if (force) {\r\n this.minIndex = +Infinity;\r\n this.maxIndex = -Infinity;\r\n this.items.clear();\r\n }\r\n this.defaultSize.reset(force);\r\n }\r\n\r\n get size(): number {\r\n return this.items.size;\r\n }\r\n\r\n get(index: number): ItemCache<Data> | undefined {\r\n return this.items.get(index);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n const item = this.get(index);\r\n return item && item.size || this.defaultSize.get();\r\n }\r\n\r\n getDefaultSize(): number {\r\n return this.defaultSize.get();\r\n }\r\n\r\n recalculateDefaultSize(): boolean {\r\n if (this.defaultSize.recalculate(this.size)) {\r\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds item to Set by $index, replaces existed item if $index matches.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\r\n * \r\n * @returns {ItemCache<Data>} Cached item.\r\n */\r\n add(item: Item<Data>): ItemCache<Data> {\r\n let itemCache = this.get(item.$index);\r\n if (itemCache) { // adding item is already cached\r\n if (this.saveData) {\r\n itemCache.data = item.data;\r\n }\r\n if (itemCache.size !== item.size) {\r\n if (itemCache.size) {\r\n this.defaultSize.setExisted(itemCache.size, item.size);\r\n } else {\r\n this.defaultSize.setNew(item.size);\r\n }\r\n itemCache.size = item.size;\r\n }\r\n } else {\r\n itemCache = new ItemCache<Data>(item, this.saveData);\r\n this.items.set(item.$index, itemCache);\r\n this.defaultSize.setNew(item.size);\r\n }\r\n if (item.$index < this.minIndex) {\r\n this.minIndex = item.$index;\r\n }\r\n if (item.$index > this.maxIndex) {\r\n this.maxIndex = item.$index;\r\n }\r\n return itemCache;\r\n }\r\n\r\n /**\r\n * Inserts items to Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\r\n * @param {number} index The index before/after which the insertion is performed.\r\n * @param {Direction} direction Determines the direction of insertion.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the inserted ones are increased.\r\n * If true, indexes that are less than than the inserted ones are decreased.\r\n */\r\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n const length = toInsert.length;\r\n let min = Infinity, max = -Infinity;\r\n const set = (item: ItemCache<Data>) => {\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n };\r\n this.items.forEach(item => {\r\n let shift = 0;\r\n if (direction === Direction.backward) {\r\n if (item.$index < index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index >= index && !fixRight) {\r\n shift = length;\r\n }\r\n } else if (direction === Direction.forward) {\r\n if (item.$index <= index && fixRight) {\r\n shift = -length;\r\n } else if (item.$index > index && !fixRight) {\r\n shift = length;\r\n }\r\n }\r\n if (shift) {\r\n item.changeIndex(item.$index + shift);\r\n }\r\n set(item);\r\n });\r\n if (this.saveData) { // persist data with no sizes\r\n toInsert.forEach((data, i) => {\r\n const $index = index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\r\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\r\n set(item);\r\n });\r\n }\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Removes items from Set, shifts $indexes of items that remain.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes and default item size.\r\n *\r\n * @param {number[]} toRemove List of indexes to be removed.\r\n * @param {boolean} fixRight Defines indexes shifting strategy.\r\n * If false, indexes that are greater than the removed ones will be decreased.\r\n * If true, indexes that are less than than the removed ones will be increased.\r\n */\r\n removeItems(toRemove: number[], fixRight: boolean): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n if (toRemove.some(index => index === item.$index)) {\r\n if (item.size) {\r\n this.defaultSize.setRemoved(item.size);\r\n }\r\n return;\r\n }\r\n const diff = fixRight\r\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\r\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\r\n item.changeIndex(item.$index + diff);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n\r\n /**\r\n * Destructively updates Set based on subset (before-after) changes.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes. Maintains default item size on remove only.\r\n *\r\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\r\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\r\n * Items to be removed must have toRemove flag: before[].toRemove = true.\r\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\r\n * Must contain at least 1 $index from \"before\" or be empty.\r\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\r\n */\r\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\r\n if (!this.size || !before.length) {\r\n return;\r\n }\r\n const minB = before[0].$index, maxB = before[before.length - 1].$index;\r\n let leftDiff: number, rightDiff: number;\r\n if (after.length) {\r\n const minA = after[0].$index, maxA = after[after.length - 1].$index;\r\n leftDiff = minA - minB;\r\n rightDiff = maxA - maxB;\r\n } else {\r\n leftDiff = fixRight ? maxB - minB + 1 : 0;\r\n rightDiff = fixRight ? 0 : minB - maxB - 1;\r\n }\r\n const items = new Map<number, ItemCache<Data>>();\r\n this.items.forEach(item => {\r\n if (item.$index < minB) { // items to the left of the subset\r\n item.changeIndex(item.$index + leftDiff);\r\n items.set(item.$index, item);\r\n return;\r\n } else if (item.$index > maxB) { // items to the right of the subset\r\n item.changeIndex(item.$index + rightDiff);\r\n items.set(item.$index, item);\r\n return;\r\n }\r\n });\r\n after.forEach(item => // subset items\r\n items.set(item.$index, new ItemCache<Data>(item, this.saveData))\r\n );\r\n before // to maintain default size on remove\r\n .filter(item => item.toRemove)\r\n .forEach(item => this.defaultSize.setRemoved(item.size));\r\n this.minIndex += leftDiff;\r\n this.maxIndex += rightDiff;\r\n this.items = items;\r\n }\r\n\r\n /**\r\n * Shifts all indexes by some value.\r\n * Replaces current Set with a new one with new regular $indexes.\r\n * Maintains min/max indexes.\r\n *\r\n * @param {number} delta A shift value.\r\n */\r\n shiftIndexes(delta: number): void {\r\n const items = new Map<number, ItemCache<Data>>();\r\n let min = Infinity, max = -Infinity;\r\n this.items.forEach(item => {\r\n item.changeIndex(item.$index + delta);\r\n items.set(item.$index, item);\r\n min = item.$index < min ? item.$index : min;\r\n max = item.$index > max ? item.$index : max;\r\n });\r\n this.items = items;\r\n this.minIndex = min;\r\n this.maxIndex = max;\r\n }\r\n}\r\n","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","import { Cache } from './buffer/cache';\r\nimport { CheckBufferCall } from './buffer/checkCall';\r\nimport { Item } from './item';\r\nimport { Settings } from './settings';\r\nimport { Logger } from './logger';\r\nimport { Reactive } from './reactive';\r\nimport { Direction } from '../inputs/index';\r\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\r\n\r\nexport class Buffer<Data> {\r\n\r\n private _items: Item<Data>[] = [];\r\n private _absMinIndex: number;\r\n private _absMaxIndex: number;\r\n bof: Reactive<boolean>;\r\n eof: Reactive<boolean>;\r\n\r\n changeItems: OnDataChanged<Data>;\r\n minIndexUser: number;\r\n maxIndexUser: number;\r\n startIndexUser: number;\r\n startIndex: number;\r\n\r\n private pristine: boolean;\r\n private cache: Cache<Data>;\r\n private checkCall: CheckBufferCall<Data>;\r\n private readonly logger: Logger;\r\n\r\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\r\n this.logger = logger;\r\n this.changeItems = onDataChanged;\r\n this.bof = new Reactive<boolean>(false);\r\n this.eof = new Reactive<boolean>(false);\r\n this.cache = new Cache<Data>(settings, logger);\r\n this.checkCall = new CheckBufferCall(this, logger);\r\n this.startIndexUser = settings.startIndex;\r\n this.minIndexUser = settings.minIndex;\r\n this.maxIndexUser = settings.maxIndex;\r\n this.reset(true);\r\n }\r\n\r\n dispose(): void {\r\n this.bof.dispose();\r\n this.eof.dispose();\r\n this._items.forEach(item => item.dispose());\r\n this._items = [];\r\n }\r\n\r\n reset(force: boolean, startIndex?: number): void {\r\n this.items.forEach(item => item.hide());\r\n this.pristine = true;\r\n this.items = [];\r\n this.cache.reset(force);\r\n this.absMinIndex = this.minIndexUser;\r\n this.absMaxIndex = this.maxIndexUser;\r\n this.setCurrentStartIndex(startIndex);\r\n this.bof.set(false);\r\n this.eof.set(false);\r\n this.pristine = false;\r\n }\r\n\r\n setCurrentStartIndex(newStartIndex?: unknown): void {\r\n const min = this.minIndexUser;\r\n const max = this.maxIndexUser;\r\n const start = this.startIndexUser;\r\n let index = Number(newStartIndex);\r\n if (Number.isNaN(index)) {\r\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\r\n index = start;\r\n }\r\n if (index < min) {\r\n this.logger.log(() => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`);\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(() => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`);\r\n index = max;\r\n }\r\n this.startIndex = index;\r\n }\r\n\r\n set items(items: Item<Data>[]) {\r\n this._items = items;\r\n this.changeItems(items);\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get items(): Item<Data>[] {\r\n return this._items;\r\n }\r\n\r\n set absMinIndex(value: number) {\r\n if (this._absMinIndex !== value) {\r\n this._absMinIndex = Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkBOF();\r\n }\r\n }\r\n\r\n get absMinIndex(): number {\r\n return this._absMinIndex;\r\n }\r\n\r\n set absMaxIndex(value: number) {\r\n if (this._absMaxIndex !== value) {\r\n this._absMaxIndex = Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\r\n }\r\n if (!this.pristine) {\r\n this.checkEOF();\r\n }\r\n }\r\n\r\n get absMaxIndex(): number {\r\n return this._absMaxIndex;\r\n }\r\n\r\n private checkBOF() {\r\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\r\n const bof = this.items.length\r\n ? (this.items[0].$index === this.absMinIndex)\r\n : isFinite(this.absMinIndex);\r\n this.bof.set(bof);\r\n }\r\n\r\n private checkEOF() {\r\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\r\n const eof = this.items.length\r\n ? (this.items[this.items.length - 1].$index === this.absMaxIndex)\r\n : isFinite(this.absMaxIndex);\r\n this.eof.set(eof);\r\n }\r\n\r\n get size(): number {\r\n return this._items.length;\r\n }\r\n\r\n get cacheSize(): number {\r\n return this.cache.size;\r\n }\r\n\r\n get defaultSize(): number {\r\n return this.cache.getDefaultSize();\r\n }\r\n\r\n get minIndex(): number {\r\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\r\n }\r\n\r\n get maxIndex(): number {\r\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\r\n }\r\n\r\n get firstIndex(): number {\r\n return this.items.length ? this.items[0].$index : NaN;\r\n }\r\n\r\n get lastIndex(): number {\r\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\r\n }\r\n\r\n get finiteAbsMinIndex(): number {\r\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\r\n }\r\n\r\n get finiteAbsMaxIndex(): number {\r\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\r\n }\r\n\r\n get($index: number): Item<Data> | undefined {\r\n return this.items.find(item => item.$index === $index);\r\n }\r\n\r\n setItems(items: Item<Data>[]): boolean {\r\n if (!this.items.length) {\r\n this.items = [...items];\r\n } else if (this.items[0].$index > items[items.length - 1].$index) {\r\n this.items = [...items, ...this.items];\r\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\r\n this.items = [...this.items, ...items];\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n clip(): void {\r\n this.items = this.items.filter(({ toRemove }) => !toRemove);\r\n }\r\n\r\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n return this.checkCall.insertInBuffer(predicate, before, after);\r\n }\r\n\r\n private shiftExtremum(amount: number, fixRight: boolean) {\r\n if (!fixRight) {\r\n this.absMaxIndex += amount;\r\n } else {\r\n this.absMinIndex -= amount;\r\n this.startIndex -= amount;\r\n }\r\n if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n } else if (this.startIndex < this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n }\r\n }\r\n\r\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\r\n if (!this.checkCall.insertVirtual(items, index, direction)) {\r\n return false;\r\n }\r\n let shift = 0;\r\n if (index <= this.firstIndex && !fixRight) {\r\n shift = items.length;\r\n } else if (index >= this.lastIndex && fixRight) {\r\n shift = -items.length;\r\n }\r\n if (shift) {\r\n this.items.forEach(item => item.updateIndex(item.$index + shift));\r\n this.cache.insertItems(items, index, direction, fixRight);\r\n this.items = [...this.items];\r\n }\r\n this.shiftExtremum(items.length, fixRight);\r\n return true;\r\n }\r\n\r\n removeVirtually(indexes: number[], fixRight: boolean): void {\r\n const length = this.items.length;\r\n let shifted = false;\r\n for (\r\n let i = fixRight ? length - 1 : 0;\r\n fixRight ? i >= 0 : i < length;\r\n fixRight ? i-- : i++\r\n ) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce((acc, index) => acc + (fixRight\r\n ? (item.$index < index ? 1 : 0)\r\n : (item.$index > index ? -1 : 0)\r\n ), 0);\r\n shifted = shifted || !!diff;\r\n item.updateIndex(item.$index + diff);\r\n }\r\n this.shiftExtremum(-indexes.length, fixRight);\r\n if (shifted) {\r\n this.items = [...this.items];\r\n }\r\n this.cache.removeItems(indexes, fixRight);\r\n }\r\n\r\n fillEmpty(\r\n items: Data[], beforeIndex: number | undefined, afterIndex: number | undefined, fixRight: boolean,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n ): boolean {\r\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\r\n return false;\r\n }\r\n const before = Number.isInteger(beforeIndex);\r\n const index = (before ? beforeIndex : afterIndex) as number;\r\n const shift = (fixRight ? items.length : (before ? 1 : 0));\r\n this.items = items.map((data, i) =>\r\n generator(index + i + (!before ? 1 : 0) - shift, data)\r\n );\r\n this._absMinIndex = this.items[0].$index;\r\n this._absMaxIndex = this.items[this.size - 1].$index;\r\n if (this.startIndex <= this.absMinIndex) {\r\n this.startIndex = this.absMinIndex;\r\n } else if (this.startIndex > this.absMaxIndex) {\r\n this.startIndex = this.absMaxIndex;\r\n }\r\n return true;\r\n }\r\n\r\n updateItems(\r\n predicate: BufferUpdater<Data>,\r\n generator: (index: number, data: Data) => Item<Data>,\r\n indexToTrack: number,\r\n fixRight: boolean\r\n ): { trackedIndex: number, toRemove: Item<Data>[] } {\r\n if (!this.size || Number.isNaN(this.firstIndex)) {\r\n return { trackedIndex: NaN, toRemove: [] };\r\n }\r\n let trackedIndex = indexToTrack;\r\n let index = fixRight ? this.lastIndex : this.firstIndex;\r\n const items: Item<Data>[] = [];\r\n const diff = fixRight ? -1 : 1;\r\n const limit = this.size - 1;\r\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\r\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\r\n\r\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\r\n const item = this.items[i];\r\n beforeMap.set(item.$index, item);\r\n const result = predicate(item);\r\n\r\n // if predicate result is falsy or empty array -> delete\r\n if (!result || (Array.isArray(result) && !result.length)) {\r\n item.toRemove = true;\r\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : (fixRight ? 0 : -1);\r\n this.shiftExtremum(-1, fixRight);\r\n continue;\r\n }\r\n\r\n // if predicate result is truthy but not array -> leave\r\n if (!Array.isArray(result)) {\r\n item.updateIndex(index);\r\n updateArray.call(items, item);\r\n index += diff;\r\n continue;\r\n }\r\n\r\n // if predicate result is non-empty array -> insert/replace\r\n if (item.$index < indexToTrack) {\r\n trackedIndex += fixRight ? 0 : result.length - 1;\r\n } else if (item.$index > indexToTrack) {\r\n trackedIndex += fixRight ? 1 - result.length : 0;\r\n }\r\n let toRemove = true;\r\n const newItems: Item<Data>[] = [];\r\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\r\n let newItem: Item<Data>;\r\n if (item.data === data) {\r\n if (indexToTrack === item.$index) {\r\n trackedIndex = index + i * diff;\r\n }\r\n item.updateIndex(index + i * diff);\r\n newItem = item;\r\n toRemove = false; // insert case\r\n } else {\r\n newItem = generator(index + i * diff, data);\r\n newItem.toInsert = true;\r\n }\r\n updateArray.call(newItems, newItem);\r\n });\r\n item.toRemove = toRemove;\r\n updateArray.call(items, ...newItems);\r\n index += diff * result.length;\r\n if (result.length > 1) {\r\n this.shiftExtremum(result.length - 1, fixRight);\r\n }\r\n }\r\n\r\n const toRemove = this.items.filter(item => item.toRemove);\r\n const itemsBefore = Array.from(beforeMap)\r\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\r\n .sort((a, b) => a.$index - b.$index);\r\n this.items = items;\r\n this.cache.updateSubset(itemsBefore, items, fixRight);\r\n\r\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\r\n trackedIndex = NaN;\r\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\r\n trackedIndex = this.finiteAbsMaxIndex;\r\n } else if (trackedIndex < this.finiteAbsMinIndex) {\r\n trackedIndex = this.finiteAbsMinIndex;\r\n }\r\n return { trackedIndex, toRemove };\r\n }\r\n\r\n cacheItem(item: Item<Data>): void {\r\n this.cache.add(item);\r\n }\r\n\r\n getFirstVisibleItemIndex(): number {\r\n const length = this.items.length;\r\n for (let i = 0; i < length; i++) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getLastVisibleItemIndex(): number {\r\n for (let i = this.items.length - 1; i >= 0; i--) {\r\n if (!this.items[i].invisible) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n getFirstVisibleItem(): Item<Data> | undefined {\r\n const index = this.getFirstVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getLastVisibleItem(): Item<Data> | undefined {\r\n const index = this.getLastVisibleItemIndex();\r\n return index >= 0 ? this.items[index] : void 0;\r\n }\r\n\r\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\r\n return direction === (!opposite ? Direction.forward : Direction.backward) ?\r\n this.getLastVisibleItem() : this.getFirstVisibleItem();\r\n }\r\n\r\n getVisibleItemsCount(): number {\r\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\r\n }\r\n\r\n getSizeByIndex(index: number): number {\r\n return this.cache.getSizeByIndex(index);\r\n }\r\n\r\n checkDefaultSize(): boolean {\r\n return this.cache.recalculateDefaultSize();\r\n }\r\n\r\n}\r\n","import { ProcessName } from '../../interfaces/index';\r\nimport { Reactive } from '../reactive';\r\n\r\nclass InnerLoopModel {\r\n total: number;\r\n count: number;\r\n isInitial: boolean;\r\n busy: Reactive<boolean>;\r\n\r\n get first(): boolean {\r\n return this.count === 0;\r\n }\r\n\r\n constructor(total: number) {\r\n this.total = total;\r\n this.isInitial = false;\r\n this.busy = new Reactive<boolean>(false);\r\n }\r\n\r\n done() {\r\n this.isInitial = false;\r\n this.count++;\r\n this.total++;\r\n this.busy.set(false);\r\n }\r\n\r\n start() {\r\n this.busy.set(true);\r\n }\r\n\r\n dispose() {\r\n this.busy.dispose();\r\n }\r\n}\r\n\r\nexport class WorkflowCycleModel {\r\n instanceIndex: number;\r\n count: number;\r\n isInitial: boolean;\r\n initiator: ProcessName;\r\n innerLoop: InnerLoopModel;\r\n interrupter: ProcessName | null;\r\n busy: Reactive<boolean>;\r\n\r\n get loopId(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total}`;\r\n }\r\n\r\n get loopIdNext(): string {\r\n return `${this.instanceIndex}-${this.count}-${this.innerLoop.total + 1}`;\r\n }\r\n\r\n constructor(instanceIndex: number, cycle?: WorkflowCycleModel) {\r\n const cycleCount = cycle ? cycle.count : 1;\r\n const loopCount = cycle ? cycle.innerLoop.count : 0;\r\n\r\n this.instanceIndex = instanceIndex;\r\n this.innerLoop = new InnerLoopModel(loopCount);\r\n this.interrupter = null;\r\n this.busy = new Reactive<boolean>(false);\r\n this.end(cycleCount);\r\n }\r\n\r\n start(isInitial: boolean, initiator: ProcessName): void {\r\n this.isInitial = isInitial;\r\n this.initiator = initiator;\r\n this.innerLoop.isInitial = isInitial;\r\n this.innerLoop.count = 0;\r\n this.interrupter = null;\r\n this.busy.set(true);\r\n }\r\n\r\n end(count: number): void {\r\n this.count = count;\r\n this.isInitial = false;\r\n this.busy.set(false);\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n if (forever) {\r\n // otherwise the value will be persisted during re-instantiation\r\n this.busy.dispose();\r\n }\r\n this.innerLoop.dispose();\r\n }\r\n}\r\n","import { Item } from '../item';\r\nimport { Direction } from '../../inputs/index';\r\n\r\nclass Positions {\r\n startDelta: number;\r\n before: number;\r\n relative: number;\r\n start: number;\r\n end: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.startDelta = 0;\r\n this.before = 0;\r\n }\r\n}\r\n\r\nclass First {\r\n index: number;\r\n indexBuffer: number;\r\n position: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n this.position = NaN;\r\n }\r\n}\r\n\r\nclass Last {\r\n index: number;\r\n indexBuffer: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.indexBuffer = NaN;\r\n }\r\n}\r\n\r\nclass FirstVisible {\r\n index: number;\r\n delta: number;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.index = NaN;\r\n this.delta = 0;\r\n }\r\n}\r\n\r\nexport class FetchModel {\r\n private readonly directionPriority: Direction;\r\n private _newItemsData: unknown[] | null; // there are public setter and getter\r\n\r\n items: Item[];\r\n positions: Positions;\r\n first: First;\r\n last: Last;\r\n hasAnotherPack: boolean;\r\n callCount: number;\r\n minIndex: number;\r\n firstVisible: FirstVisible;\r\n direction: Direction | null;\r\n cancel: (() => void) | null;\r\n\r\n simulate: boolean;\r\n isCheck: boolean;\r\n doRemove: boolean;\r\n\r\n constructor(directionPriority: Direction) {\r\n this.directionPriority = directionPriority;\r\n this.callCount = 0;\r\n this.positions = new Positions();\r\n this.first = new First();\r\n this.last = new Last();\r\n this.firstVisible = new FirstVisible();\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this._newItemsData = null;\r\n this.items = [];\r\n this.positions.reset();\r\n this.first.reset();\r\n this.last.reset();\r\n this.firstVisible.reset();\r\n this.hasAnotherPack = false;\r\n this.direction = null;\r\n this.cancel = null;\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n get newItemsData(): unknown[] | null {\r\n return this._newItemsData;\r\n }\r\n\r\n set newItemsData(items: unknown[] | null) {\r\n this._newItemsData = items;\r\n if (items && items.length) {\r\n this.callCount++;\r\n }\r\n }\r\n\r\n get shouldFetch(): boolean {\r\n return !!this.count;\r\n }\r\n\r\n get hasNewItems(): boolean {\r\n return !!((this._newItemsData && this._newItemsData.length));\r\n }\r\n\r\n get index(): number {\r\n return this.first.index;\r\n }\r\n\r\n get count(): number {\r\n return !isNaN(this.first.index) && !isNaN(this.last.index) ? this.last.index - this.first.index + 1 : 0;\r\n }\r\n\r\n shouldCheckPreSizeExpectation(lastBufferedIndex: number): boolean {\r\n if (this.directionPriority === Direction.backward) {\r\n return false;\r\n }\r\n const lastFetched = this.items[this.items.length - 1];\r\n return lastFetched && lastFetched.$index < lastBufferedIndex;\r\n }\r\n\r\n startSimulate(items: Item[]): void {\r\n this.simulate = true;\r\n this._newItemsData = items.map(item => item.data);\r\n this.items = items;\r\n this.hasAnotherPack = false;\r\n }\r\n\r\n stopSimulate(): void {\r\n this.simulate = false;\r\n this.isCheck = false;\r\n this.doRemove = false;\r\n }\r\n\r\n fill(items: Item[], start: number): void {\r\n this.startSimulate(items);\r\n this.first.index = items[0].$index;\r\n this.last.index = items[items.length - 1].$index;\r\n this.direction = Direction.forward;\r\n this.firstVisible.index = start;\r\n this.firstVisible.delta = 0;\r\n }\r\n\r\n check(items: Item[]): void {\r\n this.startSimulate(items);\r\n this.last.index = items[0].$index;\r\n this.first.index = items[items.length - 1].$index;\r\n this.isCheck = true;\r\n }\r\n\r\n update(index: number, delta: number, items: Item[], itemsToRemove: Item[]): void {\r\n this.startSimulate(items);\r\n this.firstVisible.index = index;\r\n this.firstVisible.delta = delta;\r\n this.doRemove = itemsToRemove.length > 0;\r\n }\r\n}\r\n","export class ClipModel {\r\n doClip: boolean;\r\n callCount: number;\r\n forceForward: boolean;\r\n forceBackward: boolean;\r\n\r\n get force(): boolean {\r\n return this.forceForward || this.forceBackward;\r\n }\r\n\r\n constructor() {\r\n this.callCount = 0;\r\n this.reset();\r\n }\r\n\r\n reset(force?: boolean): void {\r\n this.doClip = false;\r\n if (!force) {\r\n this.forceForward = false;\r\n this.forceBackward = false;\r\n }\r\n }\r\n\r\n}\r\n","export class RenderModel {\r\n sizeBefore: number;\r\n sizeAfter: number;\r\n positionBefore: number;\r\n cancel: (() => void) | null;\r\n\r\n get noSize(): boolean {\r\n return this.sizeBefore === this.sizeAfter;\r\n }\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.sizeBefore = 0;\r\n this.sizeAfter = 0;\r\n this.positionBefore = 0;\r\n this.cancel = null;\r\n }\r\n}\r\n","import { ScrollEventData as IScrollEventData } from '../../interfaces/index';\r\n\r\nexport class ScrollModel {\r\n previous: IScrollEventData | null;\r\n current: IScrollEventData | null;\r\n\r\n scrollTimer: ReturnType<typeof setTimeout> | null;\r\n\r\n syntheticPosition: number | null;\r\n syntheticFulfill: boolean;\r\n cancelAnimation: (() => void) | null;\r\n positionBeforeAsync: number | null;\r\n positionBeforeAdjust: number | null;\r\n positionAfterAdjust: number | null;\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.previous = null;\r\n this.current = null;\r\n this.syntheticPosition = null;\r\n this.syntheticFulfill = false;\r\n this.positionBeforeAsync = null;\r\n this.positionBeforeAdjust = null;\r\n this.positionAfterAdjust = null;\r\n this.stop();\r\n }\r\n\r\n stop(): void {\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = null;\r\n }\r\n if (this.cancelAnimation) {\r\n this.cancelAnimation();\r\n this.cancelAnimation = null;\r\n }\r\n }\r\n\r\n hasPositionChanged(position: number): boolean {\r\n const before = this.positionBeforeAdjust;\r\n const after = this.positionAfterAdjust;\r\n return before === null || before !== position || after === null || after !== position;\r\n }\r\n}\r\n","import { Settings } from './settings';\r\nimport { WorkflowCycleModel } from './state/cycle';\r\nimport { FetchModel } from './state/fetch';\r\nimport { ClipModel } from './state/clip';\r\nimport { RenderModel } from './state/render';\r\nimport { ScrollModel } from './state/scroll';\r\nimport { State as IState, IPackages, ProcessName } from '../interfaces/index';\r\n\r\nexport class State implements IState {\r\n\r\n readonly packageInfo: IPackages;\r\n private settings: Settings;\r\n initTime: number;\r\n\r\n cycle: WorkflowCycleModel;\r\n fetch: FetchModel;\r\n clip: ClipModel;\r\n render: RenderModel;\r\n scroll: ScrollModel;\r\n\r\n get time(): number {\r\n return Number(new Date()) - this.initTime;\r\n }\r\n\r\n constructor(packageInfo: IPackages, settings: Settings, state?: IState) {\r\n this.packageInfo = packageInfo;\r\n this.settings = settings;\r\n this.initTime = Number(new Date());\r\n\r\n this.cycle = new WorkflowCycleModel(this.settings.instanceIndex, state ? state.cycle : void 0);\r\n this.fetch = new FetchModel(settings.directionPriority);\r\n this.clip = new ClipModel();\r\n this.render = new RenderModel();\r\n this.scroll = new ScrollModel();\r\n }\r\n\r\n startWorkflowCycle(isInitial: boolean, initiator: ProcessName): void {\r\n this.cycle.start(isInitial, initiator);\r\n }\r\n\r\n endWorkflowCycle(count: number): void {\r\n this.cycle.end(count);\r\n }\r\n\r\n startInnerLoop(): { process?: ProcessName, doRender?: boolean } {\r\n const { cycle, scroll: scroll, fetch, render, clip } = this;\r\n\r\n cycle.innerLoop.start();\r\n scroll.positionBeforeAsync = null;\r\n\r\n if (!fetch.simulate) {\r\n fetch.reset();\r\n }\r\n clip.reset(clip.force);\r\n render.reset();\r\n\r\n return {\r\n ...(cycle.innerLoop.first ? {\r\n process: cycle.initiator,\r\n doRender: fetch.simulate && fetch.items.length > 0\r\n } : {})\r\n };\r\n }\r\n\r\n endInnerLoop(): void {\r\n const { fetch, clip, render, cycle } = this;\r\n fetch.stopSimulate();\r\n clip.reset(true);\r\n if (fetch.cancel) {\r\n fetch.cancel();\r\n fetch.cancel = null;\r\n }\r\n if (render.cancel) {\r\n render.cancel();\r\n render.cancel = null;\r\n }\r\n cycle.innerLoop.done();\r\n }\r\n\r\n dispose(): void {\r\n this.scroll.stop();\r\n this.cycle.dispose();\r\n this.endInnerLoop();\r\n }\r\n\r\n}\r\n","import { Logger } from './logger';\r\nimport { Buffer } from './buffer';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n AdapterPropName, AdapterPropType, EMPTY_ITEM, getDefaultAdapterProps, methodPreResult, reactiveConfigStorage\r\n} from './adapter/props';\r\nimport { wantedUtils } from './adapter/wanted';\r\nimport { Viewport } from './viewport';\r\nimport { Direction } from '../inputs/index';\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: unknown[]) => Promise<AdapterMethodResult>;\r\ntype InitializationParams<Item> = {\r\n buffer: Buffer<Item>,\r\n state: State,\r\n viewport: Viewport,\r\n logger: Logger,\r\n adapterRun$?: Reactive<ProcessSubject>,\r\n getWorkflow?: WorkflowGetter<Item>\r\n}\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 private disposed: boolean;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n setFirstOrLastVisible = (_: { first?: boolean, last?: boolean, workflow?: ScrollerWorkflow }) => { };\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: unknown[]): 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 const contextId = context?.id || -1;\r\n\r\n // public context (if exists) should provide access to Reactive props config by id\r\n const reactivePropsStore = context && reactiveConfigStorage.get(context.id) || {};\r\n\r\n // the Adapter initialization should not trigger \"wanted\" props setting;\r\n // after the initialization is completed, \"wanted\" functionality must be unblocked\r\n wantedUtils.setBlock(true, contextId);\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: store original values in \"source\" container, to avoid extra .get() calls on scalar twins set\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: () => this.source[name]\r\n });\r\n });\r\n\r\n // for \"wanted\" props that can be explicitly requested for the first time after the Adapter initialization,\r\n // an implicit calculation of the initial value is required;\r\n // so this method should be called when accessing the \"wanted\" props through one of the following getters\r\n const processWanted = (prop: IAdapterProp) => {\r\n if (wantedUtils.setBox(prop, contextId)) {\r\n if ([AdapterPropName.firstVisible, AdapterPropName.firstVisible$].some(n => n === prop.name)) {\r\n this.setFirstOrLastVisible({ first: true });\r\n } else if ([AdapterPropName.lastVisible, AdapterPropName.lastVisible$].some(n => n === prop.name)) {\r\n this.setFirstOrLastVisible({ last: true });\r\n }\r\n }\r\n };\r\n\r\n // Scalar props that have Reactive twins\r\n // 1) reactive props (from \"source\") should be triggered on set\r\n // 2) scalars should use \"box\" container on get\r\n // 3) \"wanted\" scalars should also run wanted-related logic on get\r\n adapterProps\r\n .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)\r\n .forEach((prop: IAdapterProp) => {\r\n const { name, value, reactive } = prop;\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 processWanted(prop);\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((prop: IAdapterProp) => {\r\n const { name, type, value: defaultValue, permanent } = prop;\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 const nonPermanentScalar = !permanent && type === AdapterPropType.Scalar;\r\n Object.defineProperty(context, name, {\r\n configurable: true,\r\n get: () => {\r\n processWanted(prop); // consider accessing \"wanted\" Reactive props\r\n if (nonPermanentScalar) {\r\n return (this as IAdapter)[name]; // non-permanent Scalars should be taken in runtime\r\n }\r\n return value; // other props (Reactive/Functions/WorkflowRunners) can be defined once\r\n }\r\n });\r\n });\r\n\r\n this.externalContext = context;\r\n wantedUtils.setBlock(false, contextId);\r\n }\r\n\r\n initialize(\r\n { buffer, state, viewport, logger, adapterRun$, getWorkflow }: InitializationParams<Item>\r\n ): 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 //viewport\r\n this.setFirstOrLastVisible = ({ first, last, workflow }) => {\r\n if ((!first && !last) || workflow?.call?.interrupted) {\r\n return;\r\n }\r\n const token = first ? AdapterPropName.firstVisible : AdapterPropName.lastVisible;\r\n if (!wantedUtils.getBox(this.externalContext?.id)?.[token]) {\r\n return;\r\n }\r\n if (buffer.items.some(({ element }) => !element)) {\r\n logger.log('skipping first/lastVisible set because not all buffered items are rendered at this moment');\r\n return;\r\n }\r\n const direction = first ? Direction.backward : Direction.forward;\r\n const { item } = viewport.getEdgeVisibleItem(buffer.items, direction);\r\n if (!item || item.element !== this[token].element) {\r\n this[token] = (item ? item.get() : EMPTY_ITEM) as ItemAdapter<Item>;\r\n }\r\n };\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 // workflow getter\r\n if (getWorkflow) {\r\n this.getWorkflow = getWorkflow;\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 this.disposed = true;\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 if (this.disposed) {\r\n return {\r\n immediate,\r\n success: false,\r\n details: 'Adapter was disposed'\r\n };\r\n }\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","import { DatasourceGeneric, makeDatasource } from './classes/datasource';\r\nimport { Settings } from './classes/settings';\r\nimport { Logger } from './classes/logger';\r\nimport { Routines } from './classes/domRoutines';\r\nimport { Viewport } from './classes/viewport';\r\nimport { Buffer } from './classes/buffer';\r\nimport { State } from './classes/state';\r\nimport { Adapter } from './classes/adapter';\r\nimport { Reactive } from './classes/reactive';\r\nimport { validate, DATASOURCE } from './inputs/index';\r\nimport core from './version';\r\nimport {\r\n ScrollerWorkflow, IDatasource, IDatasourceConstructed, ScrollerParams, IPackages, ProcessSubject\r\n} from './interfaces/index';\r\n\r\nexport const INVALID_DATASOURCE_PREFIX = 'Invalid datasource:';\r\n\r\nlet instanceCount = 0;\r\n\r\nexport class Scroller<Data = unknown> {\r\n public datasource: IDatasourceConstructed<Data>;\r\n public workflow: ScrollerWorkflow<Data>;\r\n\r\n public settings: Settings<Data>;\r\n public logger: Logger;\r\n public routines: Routines;\r\n public viewport: Viewport;\r\n public buffer: Buffer<Data>;\r\n public state: State;\r\n public adapter: Adapter<Data>;\r\n\r\n constructor({\r\n datasource, consumer, element, workflow, Routines: CustomRoutines, scroller\r\n }: ScrollerParams<Data>) {\r\n const { params: { get } } = validate(datasource, DATASOURCE);\r\n if (!get.isValid) {\r\n throw new Error(`${INVALID_DATASOURCE_PREFIX} ${get.errors[0]}`);\r\n }\r\n\r\n const packageInfo = scroller ? scroller.state.packageInfo : ({ consumer, core } as IPackages);\r\n element = scroller ? scroller.routines.element : (element as HTMLElement);\r\n workflow = scroller ? scroller.workflow : (workflow as ScrollerWorkflow<Data>);\r\n\r\n this.workflow = workflow;\r\n this.settings = new Settings<Data>(datasource.settings, datasource.devSettings, ++instanceCount);\r\n this.logger = new Logger(this as Scroller, packageInfo, datasource.adapter);\r\n this.routines = new Routines(element, this.settings, CustomRoutines);\r\n this.state = new State(packageInfo, this.settings, scroller ? scroller.state : void 0);\r\n this.buffer = new Buffer<Data>(this.settings, workflow.onDataChanged, this.logger);\r\n this.viewport = new Viewport(this.settings, this.routines, this.state, this.logger);\r\n this.logger.object('vscroll settings object', this.settings, true);\r\n\r\n this.initDatasource(datasource, scroller);\r\n }\r\n\r\n initDatasource(datasource: IDatasource<Data>, scroller?: Scroller<Data>): void {\r\n if (scroller) { // scroller re-instantiating case\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n this.adapter = scroller.adapter;\r\n // todo: what about (this.settings.adapter !== scroller.setting.adapter) case?\r\n return;\r\n }\r\n // scroller is being instantiated for the first time\r\n const constructed = datasource instanceof DatasourceGeneric;\r\n const mockAdapter = !constructed && !this.settings.adapter;\r\n if (constructed) { // datasource is already instantiated\r\n this.datasource = datasource as IDatasourceConstructed<Data>;\r\n } else { // datasource as POJO\r\n const DS = makeDatasource(() => ({ mock: mockAdapter }));\r\n this.datasource = new DS<Data>(datasource);\r\n if (this.settings.adapter) {\r\n datasource.adapter = this.datasource.adapter;\r\n }\r\n }\r\n const publicContext = !mockAdapter ? this.datasource.adapter : null;\r\n this.adapter = new Adapter<Data>(publicContext, () => this.workflow, this.logger);\r\n }\r\n\r\n init(adapterRun$?: Reactive<ProcessSubject>): void {\r\n this.viewport.reset(this.buffer.startIndex);\r\n this.logger.stat('initialization');\r\n this.adapter.initialize({\r\n buffer: this.buffer,\r\n state: this.state,\r\n viewport: this.viewport,\r\n logger: this.logger, adapterRun$,\r\n getWorkflow: () => this.workflow\r\n });\r\n }\r\n\r\n dispose(forever?: boolean): void {\r\n this.logger.log(() => 'disposing scroller' + (forever ? ' (forever)' : ''));\r\n if (forever) { // Adapter is not re-instantiated on reset\r\n this.adapter.dispose();\r\n }\r\n this.buffer.dispose();\r\n this.state.dispose();\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n","import { Scroller } from './scroller';\r\nimport { runStateMachine } from './workflow-transducer';\r\nimport { Reactive } from './classes/reactive';\r\nimport { Item } from './classes/item';\r\nimport { CommonProcess, ProcessStatus as Status, } from './processes/index';\r\nimport {\r\n WorkflowParams,\r\n ProcessName,\r\n ProcessPayload,\r\n ProcessClass,\r\n ProcessSubject,\r\n WorkflowError,\r\n InterruptParams,\r\n StateMachineMethods,\r\n ScrollerWorkflow,\r\n} from './interfaces/index';\r\n\r\nexport class Workflow<ItemData = unknown> {\r\n\r\n isInitialized: boolean;\r\n disposed: boolean;\r\n initTimer: ReturnType<typeof setTimeout> | null;\r\n adapterRun$: Reactive<ProcessSubject>;\r\n cyclesDone: number;\r\n interruptionCount: number;\r\n errors: WorkflowError[];\r\n\r\n private offScroll: () => void;\r\n readonly propagateChanges: WorkflowParams<ItemData>['run'];\r\n readonly stateMachineMethods: StateMachineMethods<ItemData>;\r\n\r\n scroller: Scroller<ItemData>;\r\n\r\n constructor({ element, datasource, consumer, run, Routines }: WorkflowParams<ItemData>) {\r\n this.isInitialized = false;\r\n this.disposed = false;\r\n this.initTimer = null;\r\n this.adapterRun$ = new Reactive();\r\n this.cyclesDone = 0;\r\n this.interruptionCount = 0;\r\n this.errors = [];\r\n this.offScroll = () => null;\r\n this.propagateChanges = run;\r\n this.stateMachineMethods = {\r\n run: this.runProcess(),\r\n interrupt: this.interrupt.bind(this),\r\n done: this.done.bind(this),\r\n onError: this.onError.bind(this)\r\n };\r\n\r\n this.scroller = new Scroller<ItemData>({\r\n element, datasource, consumer, workflow: this.getUpdater(), Routines\r\n });\r\n\r\n if (this.scroller.settings.initializeDelay) {\r\n this.initTimer = setTimeout(() => {\r\n this.initTimer = null;\r\n this.init();\r\n }, this.scroller.settings.initializeDelay);\r\n } else {\r\n this.init();\r\n }\r\n }\r\n\r\n init(): void {\r\n this.scroller.init(this.adapterRun$);\r\n\r\n // set up scroll event listener\r\n const { routines } = this.scroller;\r\n const onScrollHandler: EventListener =\r\n event => this.callWorkflow({\r\n process: CommonProcess.scroll,\r\n status: Status.start,\r\n payload: { event }\r\n });\r\n this.offScroll = routines.onScroll(onScrollHandler);\r\n\r\n // run the Workflow\r\n this.isInitialized = true;\r\n this.callWorkflow({\r\n process: CommonProcess.init,\r\n status: Status.start\r\n });\r\n }\r\n\r\n changeItems(items: Item<ItemData>[]): void {\r\n this.propagateChanges(items);\r\n }\r\n\r\n callWorkflow(processSubject: ProcessSubject): void {\r\n if (!this.isInitialized) {\r\n return;\r\n }\r\n const { process, status } = processSubject;\r\n if (process && process.startsWith('adapter') && status !== Status.next) {\r\n this.adapterRun$.set(processSubject);\r\n }\r\n this.process(processSubject);\r\n }\r\n\r\n getUpdater(): ScrollerWorkflow<ItemData> {\r\n return {\r\n call: this.callWorkflow.bind(this),\r\n onDataChanged: this.changeItems.bind(this),\r\n };\r\n }\r\n\r\n process(data: ProcessSubject): void {\r\n const { status, process, payload } = data;\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%cfire%c', ...['color: #cc7777;', 'color: #000000;'],\r\n process, `\"${status}\"`, ...(payload !== void 0 ? [payload] : [])\r\n ]);\r\n }\r\n this.scroller.logger.logProcess(data);\r\n\r\n if (process === CommonProcess.end) {\r\n this.scroller.finalize();\r\n }\r\n runStateMachine({\r\n input: data,\r\n methods: this.stateMachineMethods as StateMachineMethods<unknown>\r\n });\r\n }\r\n\r\n runProcess() {\r\n return ({ run, process, name }: ProcessClass) =>\r\n (...args: unknown[]): void => {\r\n if (this.scroller.settings.logProcessRun) {\r\n this.scroller.logger.log(() => [\r\n '%crun%c', ...['color: #333399;', 'color: #000000;'],\r\n process || name, ...args\r\n ]);\r\n }\r\n run(this.scroller as Scroller, ...args);\r\n };\r\n }\r\n\r\n onError(process: ProcessName, payload?: ProcessPayload): void {\r\n const message: string = payload && String(payload.error) || '';\r\n const { time, cycle } = this.scroller.state;\r\n this.errors.push({\r\n process,\r\n message,\r\n time,\r\n loop: cycle.loopIdNext\r\n });\r\n this.scroller.logger.logError(message);\r\n }\r\n\r\n interrupt({ process, finalize, datasource }: InterruptParams<ItemData>): void {\r\n if (finalize) {\r\n const { workflow, logger } = this.scroller;\r\n // we are going to create a new reference for the scroller.workflow object\r\n // calling the old version of the scroller.workflow by any outstanding async processes will be skipped\r\n workflow.call = (_: ProcessSubject) => // eslint-disable-line @typescript-eslint/no-unused-vars\r\n logger.log('[skip wf call]');\r\n workflow.call.interrupted = true;\r\n this.scroller.workflow = this.getUpdater();\r\n this.interruptionCount++;\r\n logger.log(() => `workflow had been interrupted by the ${process} process (${this.interruptionCount})`);\r\n }\r\n if (datasource) { // Scroller re-initialization case\r\n const reInit = () => {\r\n this.scroller.logger.log('new Scroller instantiation');\r\n const scroller = new Scroller<ItemData>({ datasource, scroller: this.scroller });\r\n this.scroller.dispose();\r\n this.scroller = scroller;\r\n this.scroller.init();\r\n };\r\n if (this.scroller.state.cycle.busy.get()) {\r\n // todo: think about immediate re-initialization even is there are pending processes\r\n this.scroller.adapter.relax(reInit.bind(this));\r\n } else {\r\n reInit();\r\n }\r\n }\r\n }\r\n\r\n done(): void {\r\n const { state, logger } = this.scroller;\r\n this.cyclesDone++;\r\n logger.logCycle(false);\r\n state.endWorkflowCycle(this.cyclesDone + 1);\r\n this.finalize();\r\n }\r\n\r\n dispose(): void {\r\n this.scroller.logger.log(() => 'disposing workflow');\r\n if (this.initTimer) {\r\n clearTimeout(this.initTimer);\r\n }\r\n this.offScroll();\r\n this.adapterRun$.dispose();\r\n this.scroller.dispose(true);\r\n Object.getOwnPropertyNames(this).forEach(prop => {\r\n delete (this as Record<string, unknown>)[prop];\r\n });\r\n this.disposed = true;\r\n }\r\n\r\n finalize(): void {\r\n }\r\n\r\n}\r\n","import {\r\n CommonProcess,\r\n AdapterProcess,\r\n ProcessStatus as Status,\r\n Init,\r\n Scroll,\r\n Reset,\r\n Reload,\r\n Append,\r\n Check,\r\n Remove,\r\n UserClip,\r\n Insert,\r\n Replace,\r\n Update,\r\n Fix,\r\n Start,\r\n PreFetch,\r\n Fetch,\r\n PostFetch,\r\n Render,\r\n PreClip,\r\n Clip,\r\n Adjust,\r\n End,\r\n} from './processes/index';\r\n\r\nimport { StateMachineParams } from './interfaces/index';\r\n\r\nexport const runStateMachine = ({\r\n input: { process, status, payload = {} },\r\n methods: { run, interrupt, done, onError }\r\n}: StateMachineParams): void => {\r\n if (status === Status.error) {\r\n onError(process, payload);\r\n if (!process.startsWith('adapter')) {\r\n run(End)(payload);\r\n }\r\n return;\r\n }\r\n const { options } = payload;\r\n switch (process) {\r\n case CommonProcess.init:\r\n if (status === Status.start) { // App start\r\n run(Init)(process);\r\n }\r\n if (status === Status.next) {\r\n run(Start)();\r\n }\r\n break;\r\n case CommonProcess.scroll:\r\n if (status === Status.start) {\r\n run(Scroll)(payload);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.reset:\r\n case AdapterProcess.reload:\r\n if (status === Status.start) {\r\n if (process === AdapterProcess.reset) {\r\n run(Reset)(options);\r\n } else {\r\n run(Reload)(options);\r\n }\r\n }\r\n if (status === Status.next) {\r\n interrupt({ process, ...payload });\r\n if (payload.finalize) {\r\n run(End)();\r\n } else {\r\n run(Init)(process);\r\n }\r\n }\r\n break;\r\n case AdapterProcess.append:\r\n case AdapterProcess.prepend:\r\n if (status === Status.start) {\r\n run(Append)({ process, options });\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.check:\r\n if (status === Status.start) {\r\n run(Check)();\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.remove:\r\n if (status === Status.start) {\r\n run(Remove)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.clip:\r\n if (status === Status.start) {\r\n run(UserClip)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.insert:\r\n if (status === Status.start) {\r\n run(Insert)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.replace:\r\n if (status === Status.start) {\r\n run(Replace)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.update:\r\n if (status === Status.start) {\r\n run(Update)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case AdapterProcess.fix:\r\n if (status === Status.start) {\r\n run(Fix)(options);\r\n }\r\n if (status === Status.next) {\r\n run(Init)(process);\r\n }\r\n break;\r\n case CommonProcess.start:\r\n switch (payload.process) {\r\n case AdapterProcess.append:\r\n case AdapterProcess.insert:\r\n case AdapterProcess.replace:\r\n case AdapterProcess.update:\r\n if (payload.doRender) {\r\n run(Render)();\r\n } else {\r\n run(Adjust)();\r\n }\r\n break;\r\n case AdapterProcess.check:\r\n run(Render)();\r\n break;\r\n case AdapterProcess.remove:\r\n run(Adjust)();\r\n break;\r\n default:\r\n run(PreFetch)();\r\n }\r\n break;\r\n case CommonProcess.preFetch:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.clip:\r\n run(PreClip)();\r\n break;\r\n default:\r\n run(Fetch)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.fetch:\r\n run(PostFetch)();\r\n break;\r\n case CommonProcess.postFetch:\r\n if (status === Status.next) {\r\n run(Render)();\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.render:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.append:\r\n case AdapterProcess.check:\r\n case AdapterProcess.insert:\r\n case AdapterProcess.replace:\r\n case AdapterProcess.update:\r\n run(Adjust)();\r\n break;\r\n default:\r\n run(PreClip)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n run(End)();\r\n }\r\n break;\r\n case CommonProcess.preClip:\r\n if (payload.doClip) {\r\n run(Clip)();\r\n } else {\r\n run(Adjust)();\r\n }\r\n break;\r\n case CommonProcess.clip:\r\n run(Adjust)();\r\n break;\r\n case CommonProcess.adjust:\r\n run(End)();\r\n break;\r\n case CommonProcess.end:\r\n if (status === Status.next) {\r\n switch (payload.process) {\r\n case AdapterProcess.reset:\r\n case AdapterProcess.reload:\r\n done();\r\n run(Init)(payload.process);\r\n break;\r\n default:\r\n run(Start)();\r\n }\r\n }\r\n if (status === Status.done) {\r\n done();\r\n }\r\n break;\r\n }\r\n};\r\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__values","o","Symbol","iterator","m","next","value","done","__read","r","e","ar","push","error","__spreadArray","to","from","pack","l","slice","concat","SuppressedError","AdapterPropName","AdapterPropType","Reactive","options","id","initialValue","subscriptions","Map","set","emitEqual","_b","_c","emit","get","on","func","_this","subscription","off","delete","emitOnSubscribe","once","v","reset","dispose","forEach","sub","exports","Direction","SizeStrategy","ValidatorType","Name","Type","noop","methodPreResult","immediate","success","details","noopWF","Promise","resolve","emptyPackageInfo","core","name","version","consumer","bufferInfoDefault","firstIndex","NaN","lastIndex","minIndex","maxIndex","Infinity","defaultSize","EMPTY_ITEM","data","element","getDefaultAdapterProps","type","Scalar","permanent","mock","augmented","init","reactive","init$","packageInfo","onDemand","itemsCount","bufferInfo","isLoading","isLoading$","loopPending","loopPending$","firstVisible","firstVisible$","wanted","lastVisible","lastVisible$","bof","bof$","eof","eof$","WorkflowRunner","reload","append","prepend","check","remove","clip","insert","replace","update","fix","Function","relax","showLog","reactiveConfigStorage","wantedUtils","_a","wantedStorage","box","Wanted","block","a","a$","b$","some","instanceCount","AdapterContext","config","conf","configurable","reactivePropsStore","defineProperty","filter","prop","react","default","source","DatasourceGeneric","datasource","settings","devSettings","adapterContext","adapter","makeDatasource","getConfig","_super","class_1","Datasource","DatasourceProps","getError","msg","args","reduce","acc","arg","index","getNumber","Number","onNumber","parsedValue","errors","isNaN","number","isSet","isValid","onMoreOrEqual","limit","fallback","result","moreOrEqual","onFunction","function","onFunctionWithXToYArguments","funcOfXToYArguments","onOneOf","tokens","must","context","noOneIsPresent","err","oneOfMust","oneOfCan","isArray","token","join","isAnotherPresent","onEnum","list","values","keys","k","map","item","enum","VALIDATORS","NUMBER","method","INTEGER","integer","parseInt","INTEGER_UNLIMITED","integerUnlimited","isFinite","MORE_OR_EQUAL","BOOLEAN","boolean","OBJECT","object","toString","ITEM_LIST","itemList","ELEMENT","Element","HTMLDocument","FUNC","FUNC_WITH_X_ARGUMENTS","count","funcOfxArguments","argsCount","FUNC_WITH_X_AND_MORE_ARGUMENTS","funcOfxAndMoreArguments","FUNC_WITH_X_TO_Y_ARGUMENTS","ONE_OF_CAN","ONE_OF_MUST","OR","or","validators","every","validator","ENUM","ValidatedData","params","contextErrors","setContext","isValidContext","setCommonError","setValidity","key","setParam","showErrors","runValidator","current","_errors","getDefault","empty","auto","mandatory","defaultValue","validateOne","find","validate","entries","Settings","DevSettings","DATASOURCE","_a$3","CommonProcess","AdapterProcess","ProcessStatus","MIN","itemSize","bufferSize","padding","throttle","initDelay","initWindowDelay","SETTINGS","startIndex","infinite","horizontal","_b$2","windowViewport","viewportElement","inverse","onBeforeClip","sizeStrategy","Average","DEV_SETTINGS","debug","_c$1","immediateLog","logProcessRun","logTime","cacheData","cacheOnReload","dismissOverflowAnchor","directionPriority","backward","AdapterNoParams","AdapterReloadParams","RESET_METHOD_PARAMS","AdapterResetParams","_a$1","AdapterPrependParams","RELOAD_METHOD_PARAMS","reloadIndex","AdapterAppendParams","PREPEND_METHOD_PARAMS","items","increase","AdapterRemoveParams","APPEND_METHOD_PARAMS","_d","decrease","AdapterClipParams","REMOVE_METHOD_PARAMS","_e","predicate","indexes","AdapterInsertParams","CLIP_METHOD_PARAMS","_f","backwardOnly","forwardOnly","AdapterReplaceParams","INSERT_METHOD_PARAMS","_g","before","after","beforeIndex","afterIndex","AdapterUpdateParams","REPLACE_METHOD_PARAMS","_h","fixRight","AdapterFixParams","UPDATE_METHOD_PARAMS","_j","FIX_METHOD_PARAMS","_k","scrollPosition","updater","scrollToItem","scrollToItemOpt","AdapterMethods","_l","Process","ADAPTER_METHODS","_m","instanceIndex","parseInput","initializeDelay","getInitializeDelay","viewport","getViewport","input","props","Error","par","history","Math","max","BaseProcessFactory","process","BaseAdapterProcessFactory","BaseAdapterProcess","scroller","ignoreErrors","_process","logger","log","workflow","status","payload","initProcesses","Init","run","state","isInitial","includes","logCycle","startWorkflowCycle","Scroll","position","onSynthetic","onThrottle","onScroll","scroll","synthPos","syntheticPosition","syntheticFulfill","getScrollEvent","previous","direction","time","timeDiff","delta","shouldDelay","alreadyDelayed","scrollTimer","clearTimeout","setTimeout","curr","Date","forward","cycle","busy","Reset","buffer","paddings","data_1","constructed_1","param","ds","finalize","interrupter","Reload","Item","$index","routines","container","nodeId","invisible","toRemove","toInsert","setSize","preSize","size","getSize","makeVisible","makeElementVisible","hide","hideElement","scrollTo","argument","updateIndex","Update","shouldUpdate","doUpdate","fetch","getEdgeVisibleItem","firstItem","firstItemDiff","diff","updateItems","trackedIndex","trackedItem","getSizeByIndex","checkDefaultSize","toRender","Insert","shouldInsert","doInsert","insertEmpty","insertInBuffer","insertVirtually","fillEmpty","fill","indexToInsert","getIndexToInsert","isBackward","isInteger","updateOptions","simulate","Append","shouldAppend","doAppend","opposite","absMinIndex","reverse","absMaxIndex","Check","min","cacheItem","first","indexBuffer","last","stat","Remove","shouldRemove","doRemove","removed","removeBufferedItems","shouldBuffered","diffLeft_1","diffRight_1","shouldVirtual","removeVirtualItems","newPredicate","indexesToRemove","finiteAbsMinIndex","finiteAbsMaxIndex","len","removeVirtually","shiftFirstVisibleIndex","listToRemove","shift","UserClip","forceForward","forceBackward","Replace","shouldReplace","doReplace","injected","FixParams","Fix","runByType","methodData","setScrollPosition","setMinIndex","setMaxIndex","getScrollableSize","setPosition","updateReference","found","Start","startInnerLoop","start","PreFetch","setPositionsAndIndexes","skipBufferedItems","checkBufferGaps","checkFetchPackSize","setFetchDirection","getStatus","initiator","setPositions","setFirstIndex","setLastIndex","positions","paddingDelta","getBufferPadding","startDelta","getStartDelta","relative","end","offset","firstIndexPosition","innerLoop","packs","hasAnotherPack","fetchFirst","bufferLast","bufferFirst","fetchLast","shouldFetch","newLastIndex","newFirstIndex","direction_1","preFetch","Fetch","newItemsData","complete","isError","fail","scroll_1","fetch_1","positionBeforeAsync","cancel","then","immediateData","immediateError","reject","_get","getResult","subscribe","sub_1","unsubscribe","_resolve","_reject","PostFetch","setItems","setBufferLimits","hasNewItems","fetchIndex","postFetch","Render","render","doRender","noSize","positionBefore","isCheck","sizeBefore","processElement","sizeAfter","findItemElementById","End","calculateParams","interrupted","isInterrupted","shouldContinueRun","endInnerLoop","setFirstOrLastVisible","Adjust","positionBeforeAdjust","setPaddings","positionAfterAdjust","calculatePosition","setAdditionalForwardPadding","getFirstVisibleItem","lastItem","getLastVisibleItem","bwdSize","fwdSize","scrollSize","viewportSizeDiff","shouldCheckPreSizeExpectation_1","shouldCheckPreSizeExpectation","round","getMaxScrollPosition","hasPositionChanged","cancelAnimation","animate","inertiaDiff","diffLog","adjust","PreClip","prepareClip","doClip","shouldNotClip","prepareClipByDirection","isForward","force","edgeIndex","removeDirection","preClip","Clip","callCount","itemsToRemove","byDirection","Logger","logs","logAdapterMethod","methodName","add","getTime","getStat","getFetchRange","getLoopId","loopId","getLoopIdNext","loopIdNext","getWorkflowCycleData","getScrollPosition","str","obj","stringify","logStyles_1","_text_1","logStyles_2","prepareForLog","Event","target","logProcess","loopLog","Status","parent_1","logData","logStyles","logError","logStyles_3","_i","console","logForce","logArgs","Routines","CustomRoutines","window","self_1","getOwnPropertyNames","getPrototypeOf","routines_1","getViewportElement","onInit","checkElement","document","documentElement","parent","parentElement","scrollRestoration","overflowAnchor","findElementBySelector","selector","querySelector","findPaddingElement","findItemElement","pageXOffset","pageYOffset","scrollY","scrollX","getElementParams","getBoundingClientRect","getWindowParams","clientWidth","clientHeight","clientLeft","clientTop","height","width","top","bottom","left","right","x","y","toJSON","getScrollerSize","getViewportSize","getSizeStyle","style","parseFloat","setSizeStyle","getEdge","getViewportEdge","display","getOffset","offsetLeft","offsetTop","scrollIntoView","cb","timeoutId","animationFrameId","requestAnimationFrame","handler","eventReceiver","addEventListener","removeEventListener","Padding","Paddings","viewportSize","positive","getPositiveSize","negative","getNegativeSize","positiveSize","negativeSize","Viewport","setOffset","bwd","viewportEdge","SizesRecalculation","newItems","oldItems","DefaultSize","sizeMap","recalculation","constantSize","frequentSize","averageSize","averageSizeFloat","clear","Frequent","recalculateAverageSize","cacheSize","newSize","oldSize","removedSize","recalculateFrequentSize","oldFrequentSizeCount","sorted","sort","mostFrequentCount","listEqual","recalculate","Constant","oldValue","setExisted","setNew","setRemoved","ItemCache","saveData","changeIndex","Cache","getDefaultSize","recalculateDefaultSize","itemCache","insertItems","removeItems","updateSubset","leftDiff","rightDiff","minB","maxB","minA","maxA","shiftIndexes","CheckBufferCall","insertVirtual","Buffer","onDataChanged","_items","changeItems","cache","checkCall","startIndexUser","minIndexUser","maxIndexUser","pristine","setCurrentStartIndex","newStartIndex","_absMinIndex","_absMaxIndex","checkBOF","checkEOF","shiftExtremum","amount","shifted","generator","indexToTrack","beforeMap","updateArray","this_2","toRemove_1","newItem","itemsBefore","getFirstVisibleItemIndex","getLastVisibleItemIndex","getVisibleItemsCount","InnerLoopModel","total","WorkflowCycleModel","cycleCount","loopCount","forever","Positions","First","Last","FirstVisible","FetchModel","_newItemsData","lastBufferedIndex","lastFetched","startSimulate","stopSimulate","ClipModel","RenderModel","ScrollModel","stop","State","initTime","endWorkflowCycle","ADAPTER_PROPS_STUB","_has","convertAppendArgs","Adapter","getWorkflow","demand","_","relax$","relaxRun","reloadCounter","contextId","adapterProps","reactiveProp","processWanted","newValue","bind","getPromisifiedMethod","nonPermanentScalar","externalContext","defaultMethod","initialize","adapterRun$","relax$_1","unSubRelax","resetContext","disposed","reactiveStore","property","reloadId","_options","convertRemoveArgs","relaxUnchained","callback","runCallback","INVALID_DATASOURCE_PREFIX","Scroller","initDatasource","constructed","mockAdapter","DS","publicContext","Workflow","isInitialized","initTimer","cyclesDone","interruptionCount","offScroll","propagateChanges","stateMachineMethods","runProcess","interrupt","onError","getUpdater","event","callWorkflow","processSubject","startsWith","methods","runStateMachine","message","loop","logger_1","reInit"],"mappings":"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,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA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A,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,qBACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,mCACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0BACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,wCACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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A,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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"}