vscroll 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/bundles/vscroll.esm5.js +4 -4
- package/dist/bundles/vscroll.esm5.js.map +1 -1
- package/dist/bundles/vscroll.esm5.min.js +2 -2
- package/dist/bundles/vscroll.esm5.min.js.map +1 -1
- package/dist/bundles/vscroll.esm6.js +4 -4
- package/dist/bundles/vscroll.esm6.js.map +1 -1
- package/dist/bundles/vscroll.esm6.min.js +2 -2
- package/dist/bundles/vscroll.esm6.min.js.map +1 -1
- package/dist/bundles/vscroll.umd.js +5 -5
- package/dist/bundles/vscroll.umd.js.map +1 -1
- package/dist/bundles/vscroll.umd.min.js +2 -2
- package/dist/bundles/vscroll.umd.min.js.map +1 -1
- package/dist/esm2015/classes/adapter/context.js.map +1 -1
- package/dist/esm2015/classes/adapter/props.js +1 -1
- package/dist/esm2015/classes/adapter/props.js.map +1 -1
- package/dist/esm2015/classes/adapter/wanted.js.map +1 -1
- package/dist/esm2015/classes/adapter.js.map +1 -1
- package/dist/esm2015/classes/buffer/cache.js.map +1 -1
- package/dist/esm2015/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm2015/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm2015/classes/buffer.js.map +1 -1
- package/dist/esm2015/classes/datasource.js.map +1 -1
- package/dist/esm2015/classes/domRoutines.js.map +1 -1
- package/dist/esm2015/classes/item.js.map +1 -1
- package/dist/esm2015/classes/logger.js.map +1 -1
- package/dist/esm2015/classes/paddings.js.map +1 -1
- package/dist/esm2015/classes/reactive.js.map +1 -1
- package/dist/esm2015/classes/settings.js.map +1 -1
- package/dist/esm2015/classes/state/clip.js.map +1 -1
- package/dist/esm2015/classes/state/cycle.js.map +1 -1
- package/dist/esm2015/classes/state/fetch.js.map +1 -1
- package/dist/esm2015/classes/state/render.js.map +1 -1
- package/dist/esm2015/classes/state/scroll.js.map +1 -1
- package/dist/esm2015/classes/state.js +1 -1
- package/dist/esm2015/classes/state.js.map +1 -1
- package/dist/esm2015/classes/viewport.js.map +1 -1
- package/dist/esm2015/index.js.map +1 -1
- package/dist/esm2015/inputs/adapter.js.map +1 -1
- package/dist/esm2015/inputs/common.js.map +1 -1
- package/dist/esm2015/inputs/datasource.js.map +1 -1
- package/dist/esm2015/inputs/index.js.map +1 -1
- package/dist/esm2015/inputs/settings.js.map +1 -1
- package/dist/esm2015/inputs/validation.js.map +1 -1
- package/dist/esm2015/inputs/workflow.js.map +1 -1
- package/dist/esm2015/interfaces/adapter.js.map +1 -1
- package/dist/esm2015/interfaces/datasource.js.map +1 -1
- package/dist/esm2015/interfaces/index.js.map +1 -1
- package/dist/esm2015/interfaces/item.js.map +1 -1
- package/dist/esm2015/interfaces/process.js.map +1 -1
- package/dist/esm2015/interfaces/routines.js.map +1 -1
- package/dist/esm2015/interfaces/settings.js.map +1 -1
- package/dist/esm2015/interfaces/state.js.map +1 -1
- package/dist/esm2015/interfaces/validation.js.map +1 -1
- package/dist/esm2015/interfaces/workflow.js.map +1 -1
- package/dist/esm2015/processes/adapter/append.js.map +1 -1
- package/dist/esm2015/processes/adapter/check.js.map +1 -1
- package/dist/esm2015/processes/adapter/clip.js.map +1 -1
- package/dist/esm2015/processes/adapter/fix.js.map +1 -1
- package/dist/esm2015/processes/adapter/insert.js.map +1 -1
- package/dist/esm2015/processes/adapter/pause.js.map +1 -1
- package/dist/esm2015/processes/adapter/reload.js.map +1 -1
- package/dist/esm2015/processes/adapter/remove.js.map +1 -1
- package/dist/esm2015/processes/adapter/replace.js.map +1 -1
- package/dist/esm2015/processes/adapter/reset.js.map +1 -1
- package/dist/esm2015/processes/adapter/update.js.map +1 -1
- package/dist/esm2015/processes/adjust.js.map +1 -1
- package/dist/esm2015/processes/clip.js.map +1 -1
- package/dist/esm2015/processes/end.js.map +1 -1
- package/dist/esm2015/processes/fetch.js.map +1 -1
- package/dist/esm2015/processes/index.js.map +1 -1
- package/dist/esm2015/processes/init.js.map +1 -1
- package/dist/esm2015/processes/misc/base.js.map +1 -1
- package/dist/esm2015/processes/misc/enums.js.map +1 -1
- package/dist/esm2015/processes/misc/index.js.map +1 -1
- package/dist/esm2015/processes/postFetch.js.map +1 -1
- package/dist/esm2015/processes/preClip.js.map +1 -1
- package/dist/esm2015/processes/preFetch.js.map +1 -1
- package/dist/esm2015/processes/render.js.map +1 -1
- package/dist/esm2015/processes/scroll.js.map +1 -1
- package/dist/esm2015/processes/start.js.map +1 -1
- package/dist/esm2015/scroller.js.map +1 -1
- package/dist/esm2015/version.js +1 -1
- package/dist/esm2015/version.js.map +1 -1
- package/dist/esm2015/workflow-transducer.js.map +1 -1
- package/dist/esm2015/workflow.js.map +1 -1
- package/dist/esm5/classes/adapter/context.js.map +1 -1
- package/dist/esm5/classes/adapter/props.js +1 -1
- package/dist/esm5/classes/adapter/props.js.map +1 -1
- package/dist/esm5/classes/adapter/wanted.js.map +1 -1
- package/dist/esm5/classes/adapter.js.map +1 -1
- package/dist/esm5/classes/buffer/cache.js.map +1 -1
- package/dist/esm5/classes/buffer/checkCall.js.map +1 -1
- package/dist/esm5/classes/buffer/defaultSize.js.map +1 -1
- package/dist/esm5/classes/buffer.js.map +1 -1
- package/dist/esm5/classes/datasource.js.map +1 -1
- package/dist/esm5/classes/domRoutines.js.map +1 -1
- package/dist/esm5/classes/item.js.map +1 -1
- package/dist/esm5/classes/logger.js.map +1 -1
- package/dist/esm5/classes/paddings.js.map +1 -1
- package/dist/esm5/classes/reactive.js.map +1 -1
- package/dist/esm5/classes/settings.js.map +1 -1
- package/dist/esm5/classes/state/clip.js.map +1 -1
- package/dist/esm5/classes/state/cycle.js.map +1 -1
- package/dist/esm5/classes/state/fetch.js.map +1 -1
- package/dist/esm5/classes/state/render.js.map +1 -1
- package/dist/esm5/classes/state/scroll.js.map +1 -1
- package/dist/esm5/classes/state.js +1 -1
- package/dist/esm5/classes/state.js.map +1 -1
- package/dist/esm5/classes/viewport.js.map +1 -1
- package/dist/esm5/index.js.map +1 -1
- package/dist/esm5/inputs/adapter.js.map +1 -1
- package/dist/esm5/inputs/common.js.map +1 -1
- package/dist/esm5/inputs/datasource.js.map +1 -1
- package/dist/esm5/inputs/index.js.map +1 -1
- package/dist/esm5/inputs/settings.js.map +1 -1
- package/dist/esm5/inputs/validation.js.map +1 -1
- package/dist/esm5/inputs/workflow.js.map +1 -1
- package/dist/esm5/interfaces/adapter.js.map +1 -1
- package/dist/esm5/interfaces/datasource.js.map +1 -1
- package/dist/esm5/interfaces/index.js.map +1 -1
- package/dist/esm5/interfaces/item.js.map +1 -1
- package/dist/esm5/interfaces/process.js.map +1 -1
- package/dist/esm5/interfaces/routines.js.map +1 -1
- package/dist/esm5/interfaces/settings.js.map +1 -1
- package/dist/esm5/interfaces/state.js.map +1 -1
- package/dist/esm5/interfaces/validation.js.map +1 -1
- package/dist/esm5/interfaces/workflow.js.map +1 -1
- package/dist/esm5/processes/adapter/append.js.map +1 -1
- package/dist/esm5/processes/adapter/check.js.map +1 -1
- package/dist/esm5/processes/adapter/clip.js.map +1 -1
- package/dist/esm5/processes/adapter/fix.js.map +1 -1
- package/dist/esm5/processes/adapter/insert.js.map +1 -1
- package/dist/esm5/processes/adapter/pause.js.map +1 -1
- package/dist/esm5/processes/adapter/reload.js.map +1 -1
- package/dist/esm5/processes/adapter/remove.js.map +1 -1
- package/dist/esm5/processes/adapter/replace.js.map +1 -1
- package/dist/esm5/processes/adapter/reset.js.map +1 -1
- package/dist/esm5/processes/adapter/update.js.map +1 -1
- package/dist/esm5/processes/adjust.js.map +1 -1
- package/dist/esm5/processes/clip.js.map +1 -1
- package/dist/esm5/processes/end.js.map +1 -1
- package/dist/esm5/processes/fetch.js.map +1 -1
- package/dist/esm5/processes/index.js.map +1 -1
- package/dist/esm5/processes/init.js.map +1 -1
- package/dist/esm5/processes/misc/base.js.map +1 -1
- package/dist/esm5/processes/misc/enums.js.map +1 -1
- package/dist/esm5/processes/misc/index.js.map +1 -1
- package/dist/esm5/processes/postFetch.js.map +1 -1
- package/dist/esm5/processes/preClip.js.map +1 -1
- package/dist/esm5/processes/preFetch.js.map +1 -1
- package/dist/esm5/processes/render.js.map +1 -1
- package/dist/esm5/processes/scroll.js.map +1 -1
- package/dist/esm5/processes/start.js.map +1 -1
- package/dist/esm5/scroller.js.map +1 -1
- package/dist/esm5/version.js +1 -1
- package/dist/esm5/version.js.map +1 -1
- package/dist/esm5/workflow-transducer.js.map +1 -1
- package/dist/esm5/workflow.js.map +1 -1
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/interfaces/index.d.ts +10 -10
- package/package.json +71 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/classes/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from './logger';\nimport { Buffer } from './buffer';\nimport { Reactive } from './reactive';\nimport {\n AdapterPropName,\n AdapterPropType,\n EMPTY_ITEM,\n getDefaultAdapterProps,\n methodPausedResult,\n methodPreResult,\n reactiveConfigStorage\n} from './adapter/props';\nimport { wantedUtils } from './adapter/wanted';\nimport { Viewport } from './viewport';\nimport { Direction } from '../inputs/index';\nimport { AdapterProcess, ProcessStatus } from '../processes/index';\nimport {\n WorkflowGetter,\n IAdapterProp,\n AdapterMethodResult,\n IAdapter,\n ItemAdapter,\n ItemsPredicate,\n AdapterPrependOptions,\n AdapterAppendOptions,\n AdapterRemoveOptions,\n AdapterClipOptions,\n AdapterInsertOptions,\n AdapterReplaceOptions,\n AdapterUpdateOptions,\n AdapterFixOptions,\n ScrollerWorkflow,\n IDatasourceOptional,\n IPackages,\n IBufferInfo,\n State,\n ProcessSubject\n} from '../interfaces/index';\n\ntype MethodResolver = (...args: unknown[]) => Promise<AdapterMethodResult>;\ntype InitializationParams<Item> = {\n buffer: Buffer<Item>;\n state: State;\n viewport: Viewport;\n logger: Logger;\n adapterRun$?: Reactive<ProcessSubject>;\n getWorkflow?: WorkflowGetter<Item>;\n};\n\nconst ADAPTER_PROPS_STUB = getDefaultAdapterProps();\nconst ALLOWED_METHODS_WHEN_PAUSED = ADAPTER_PROPS_STUB.filter(v => !!v.allowedWhenPaused).map(\n v => v.name\n);\n\nconst _has = (obj: unknown, prop: string): boolean =>\n !!obj && typeof obj === 'object' && Object.prototype.hasOwnProperty.call(obj, prop);\n\nconst convertAppendArgs = <Item>(prepend: boolean, options: unknown, eof?: boolean) => {\n let result = options as AdapterAppendOptions<Item> & AdapterPrependOptions<Item>;\n if (!_has(options, 'items')) {\n const items = !Array.isArray(options) ? [options] : options;\n result = prepend ? { items, bof: eof } : { items, eof: eof };\n }\n return result;\n};\n\nconst convertRemoveArgs = <Item>(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>) => {\n if (!(_has(options, 'predicate') || _has(options, 'indexes'))) {\n const predicate = options as ItemsPredicate<Item>;\n options = { predicate };\n }\n return options;\n};\n\nexport class Adapter<Item = unknown> implements IAdapter<Item> {\n private externalContext: IAdapter<Item>;\n private logger: Logger;\n private getWorkflow: WorkflowGetter<Item>;\n private reloadCounter: number;\n private source: { [key: string]: Reactive<unknown> } = {}; // for Reactive props\n private box: { [key: string]: unknown } = {}; // for Scalars over Reactive props\n private demand: { [key: string]: unknown } = {}; // for Scalars on demand\n private disposed: boolean;\n\n setFirstOrLastVisible = (_: {\n first?: boolean;\n last?: boolean;\n workflow?: ScrollerWorkflow;\n }) => {};\n\n get workflow(): ScrollerWorkflow<Item> {\n return this.getWorkflow();\n }\n get reloadCount(): number {\n return this.reloadCounter;\n }\n get reloadId(): string {\n return this.id + '.' + this.reloadCounter;\n }\n\n id: number;\n mock: boolean;\n augmented: boolean;\n version: string;\n init: boolean;\n init$: Reactive<boolean>;\n packageInfo: IPackages;\n itemsCount: number;\n bufferInfo: IBufferInfo;\n isLoading: boolean;\n isLoading$: Reactive<boolean>;\n loopPending: boolean;\n loopPending$: Reactive<boolean>;\n firstVisible: ItemAdapter<Item>;\n firstVisible$: Reactive<ItemAdapter<Item>>;\n lastVisible: ItemAdapter<Item>;\n lastVisible$: Reactive<ItemAdapter<Item>>;\n bof: boolean;\n bof$: Reactive<boolean>;\n eof: boolean;\n eof$: Reactive<boolean>;\n paused: boolean;\n paused$: Reactive<boolean>;\n\n private relax$: Reactive<AdapterMethodResult> | null;\n private relaxRun: Promise<AdapterMethodResult> | null;\n\n private getPromisifiedMethod(method: MethodResolver, args: unknown[]) {\n return new Promise<AdapterMethodResult>(resolve => {\n if (this.relax$) {\n this.relax$.once(value => resolve(value));\n }\n method.apply(this, args);\n });\n }\n\n private getWorkflowRunnerMethod(method: MethodResolver, name: AdapterPropName) {\n return (...args: unknown[]): Promise<AdapterMethodResult> => {\n if (!this.relax$) {\n this.logger?.log?.(() => 'scroller is not initialized: ' + name + ' method is ignored');\n return Promise.resolve(methodPreResult);\n }\n if (this.paused && !ALLOWED_METHODS_WHEN_PAUSED.includes(name)) {\n this.logger?.log?.(() => 'scroller is paused: ' + name + ' method is ignored');\n return Promise.resolve(methodPausedResult);\n }\n return this.getPromisifiedMethod(method, args);\n };\n }\n\n constructor(context: IAdapter<Item> | null, getWorkflow: WorkflowGetter<Item>, logger: Logger) {\n this.getWorkflow = getWorkflow;\n this.logger = logger;\n this.relax$ = null;\n this.relaxRun = null;\n this.reloadCounter = 0;\n const contextId = context?.id || -1;\n\n // public context (if exists) should provide access to Reactive props config by id\n const reactivePropsStore = (context && reactiveConfigStorage.get(context.id)) || {};\n\n // the Adapter initialization should not trigger \"wanted\" props setting;\n // after the initialization is completed, \"wanted\" functionality must be unblocked\n wantedUtils.setBlock(true, contextId);\n\n // make array of the original values from public context if present\n const adapterProps = context\n ? ADAPTER_PROPS_STUB.map(prop => {\n let value = context[prop.name];\n // if context is augmented, we need to replace external reactive props with inner ones\n if (context.augmented) {\n const reactiveProp = reactivePropsStore[prop.name];\n if (reactiveProp) {\n value = reactiveProp.default as Reactive<boolean>; // boolean doesn't matter here\n }\n }\n return { ...prop, value };\n })\n : getDefaultAdapterProps();\n\n // restore default reactive props if they were configured\n Object.entries(reactivePropsStore).forEach(([key, value]) => {\n const prop = adapterProps.find(({ name }) => name === key);\n if (prop && value) {\n prop.value = value.default;\n }\n });\n\n // Scalar permanent props\n adapterProps\n .filter(({ type, permanent }) => type === AdapterPropType.Scalar && permanent)\n .forEach(({ name, value }: IAdapterProp) =>\n Object.defineProperty(this, name, {\n configurable: true,\n get: () => value\n })\n );\n\n // Reactive props: store original values in \"source\" container, to avoid extra .get() calls on scalar twins set\n adapterProps\n .filter(prop => prop.type === AdapterPropType.Reactive)\n .forEach(({ name, value }: IAdapterProp) => {\n this.source[name] = value as Reactive<unknown>;\n Object.defineProperty(this, name, {\n configurable: true,\n get: () => this.source[name]\n });\n });\n\n // for \"wanted\" props that can be explicitly requested for the first time after the Adapter initialization,\n // an implicit calculation of the initial value is required;\n // so this method should be called when accessing the \"wanted\" props through one of the following getters\n const processWanted = (prop: IAdapterProp) => {\n if (wantedUtils.setBox(prop, contextId)) {\n const firstPropList = [AdapterPropName.firstVisible, AdapterPropName.firstVisible$];\n const lastPropList = [AdapterPropName.lastVisible, AdapterPropName.lastVisible$];\n if (firstPropList.some(n => n === prop.name)) {\n this.setFirstOrLastVisible({ first: true });\n } else if (lastPropList.some(n => n === prop.name)) {\n this.setFirstOrLastVisible({ last: true });\n }\n }\n };\n\n // Scalar props that have Reactive twins\n // 1) reactive props (from \"source\") should be triggered on set\n // 2) scalars should use \"box\" container on get\n // 3) \"wanted\" scalars should also run wanted-related logic on get\n adapterProps\n .filter(prop => prop.type === AdapterPropType.Scalar && !!prop.reactive)\n .forEach((prop: IAdapterProp) => {\n const { name, value, reactive } = prop;\n this.box[name] = value;\n Object.defineProperty(this, name, {\n configurable: true,\n set: (newValue: unknown) => {\n if (newValue !== this.box[name]) {\n this.box[name] = newValue;\n this.source[reactive as AdapterPropName].set(newValue);\n // need to emit new value through the configured reactive prop if present\n const reactiveProp = reactivePropsStore[reactive as AdapterPropName];\n if (reactiveProp) {\n reactiveProp.emit(reactiveProp.source, newValue);\n }\n }\n },\n get: () => {\n processWanted(prop);\n return this.box[name];\n }\n });\n });\n\n // Scalar props on-demand\n // these scalars should use \"demand\" container\n // setting defaults should be overridden on init()\n adapterProps\n .filter(prop => prop.type === AdapterPropType.Scalar && prop.onDemand)\n .forEach(({ name, value }: IAdapterProp) => {\n this.demand[name] = value;\n Object.defineProperty(this, name, {\n configurable: true,\n get: () => this.demand[name]\n });\n });\n\n if (!context) {\n return;\n }\n\n // Adapter public context augmentation\n adapterProps.forEach((prop: IAdapterProp) => {\n const { name, type, permanent } = prop;\n let value = (this as IAdapter)[name];\n if (type === AdapterPropType.Function) {\n value = (value as () => void).bind(this);\n } else if (type === AdapterPropType.WorkflowRunner) {\n value = this.getWorkflowRunnerMethod(value as MethodResolver, name);\n } else if (type === AdapterPropType.Reactive && reactivePropsStore[name]) {\n value = (context as IAdapter)[name];\n } else if (name === AdapterPropName.augmented) {\n value = true;\n }\n const nonPermanentScalar = !permanent && type === AdapterPropType.Scalar;\n Object.defineProperty(context, name, {\n configurable: true,\n get: () => {\n processWanted(prop); // consider accessing \"wanted\" Reactive props\n if (nonPermanentScalar) {\n return (this as IAdapter)[name]; // non-permanent Scalars should be taken in runtime\n }\n return value; // other props (Reactive/Functions/WorkflowRunners) can be defined once\n }\n });\n });\n\n this.externalContext = context;\n wantedUtils.setBlock(false, contextId);\n }\n\n initialize({\n buffer,\n state,\n viewport,\n logger,\n adapterRun$,\n getWorkflow\n }: InitializationParams<Item>): void {\n // buffer\n Object.defineProperty(this.demand, AdapterPropName.itemsCount, {\n get: () => buffer.getVisibleItemsCount()\n });\n Object.defineProperty(this.demand, AdapterPropName.bufferInfo, {\n get: (): IBufferInfo => ({\n firstIndex: buffer.firstIndex,\n lastIndex: buffer.lastIndex,\n minIndex: buffer.minIndex,\n maxIndex: buffer.maxIndex,\n absMinIndex: buffer.absMinIndex,\n absMaxIndex: buffer.absMaxIndex,\n defaultSize: buffer.defaultSize\n })\n });\n this.bof = buffer.bof.get();\n buffer.bof.on(bof => (this.bof = bof));\n this.eof = buffer.eof.get();\n buffer.eof.on(eof => (this.eof = eof));\n\n // state\n Object.defineProperty(this.demand, AdapterPropName.packageInfo, {\n get: () => state.packageInfo\n });\n this.loopPending = state.cycle.innerLoop.busy.get();\n state.cycle.innerLoop.busy.on(busy => (this.loopPending = busy));\n this.isLoading = state.cycle.busy.get();\n state.cycle.busy.on(busy => (this.isLoading = busy));\n this.paused = state.paused.get();\n state.paused.on(paused => (this.paused = paused));\n\n //viewport\n this.setFirstOrLastVisible = ({ first, last, workflow }) => {\n if ((!first && !last) || workflow?.call?.interrupted) {\n return;\n }\n const token = first ? AdapterPropName.firstVisible : AdapterPropName.lastVisible;\n if (!wantedUtils.getBox(this.externalContext?.id)?.[token]) {\n return;\n }\n if (buffer.items.some(({ element }) => !element)) {\n logger.log(\n 'skipping first/lastVisible set because not all buffered items are rendered at this moment'\n );\n return;\n }\n const direction = first ? Direction.backward : Direction.forward;\n const { item } = viewport.getEdgeVisibleItem(buffer.items, direction);\n if (!item || item.element !== this[token].element) {\n this[token] = (item ? item.get() : EMPTY_ITEM) as ItemAdapter<Item>;\n }\n };\n\n // logger\n this.logger = logger;\n\n // self-pending subscription; set up only on the very first init\n if (adapterRun$) {\n if (!this.relax$) {\n this.relax$ = new Reactive();\n }\n const relax$ = this.relax$;\n adapterRun$.on(({ status, payload }) => {\n let unSubRelax = () => {};\n if (status === ProcessStatus.start) {\n unSubRelax = this.isLoading$.on(value => {\n if (!value) {\n unSubRelax();\n relax$.set({ success: true, immediate: false, details: null });\n }\n });\n } else if (status === ProcessStatus.done || status === ProcessStatus.error) {\n unSubRelax();\n relax$.set({\n success: status !== ProcessStatus.error,\n immediate: true,\n details: status === ProcessStatus.error && payload ? String(payload.error) : null\n });\n }\n });\n }\n\n // workflow getter\n if (getWorkflow) {\n this.getWorkflow = getWorkflow;\n }\n\n // init\n this.init = true;\n }\n\n dispose(): void {\n if (this.relax$) {\n this.relax$.dispose();\n }\n if (this.externalContext) {\n this.resetContext();\n }\n Object.getOwnPropertyNames(this).forEach(prop => {\n delete (this as Record<string, unknown>)[prop];\n });\n this.disposed = true;\n }\n\n resetContext(): void {\n const reactiveStore = reactiveConfigStorage.get(this.externalContext?.id);\n ADAPTER_PROPS_STUB.forEach(({ type, permanent, name, value }) => {\n // assign initial values to non-reactive non-permanent props\n if (type !== AdapterPropType.Reactive && !permanent) {\n Object.defineProperty(this.externalContext, name, {\n configurable: true,\n get: () => value\n });\n }\n // reset reactive props\n if (type === AdapterPropType.Reactive && reactiveStore) {\n const property = reactiveStore[name];\n if (property) {\n property.default.reset();\n property.emit(property.source, property.default.get());\n }\n }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reset(options?: IDatasourceOptional): any {\n this.reloadCounter++;\n this.logger.logAdapterMethod('reset', options, ` of ${this.reloadId}`);\n this.workflow.call({\n process: AdapterProcess.reset,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reload(options?: number | string): any {\n this.reloadCounter++;\n this.logger.logAdapterMethod('reload', options, ` of ${this.reloadId}`);\n this.workflow.call({\n process: AdapterProcess.reload,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(_options: AdapterAppendOptions<Item> | unknown, eof?: boolean): any {\n const options = convertAppendArgs(false, _options, eof); // support old signature\n this.logger.logAdapterMethod('append', [options.items, options.eof]);\n this.workflow.call({\n process: AdapterProcess.append,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prepend(_options: AdapterPrependOptions<Item> | unknown, bof?: boolean): any {\n const options = convertAppendArgs(true, _options, bof); // support old signature\n this.logger.logAdapterMethod('prepend', [options.items, options.bof]);\n this.workflow.call({\n process: AdapterProcess.prepend,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n check(): any {\n this.logger.logAdapterMethod('check');\n this.workflow.call({\n process: AdapterProcess.check,\n status: ProcessStatus.start\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n remove(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>): any {\n options = convertRemoveArgs(options); // support old signature\n this.logger.logAdapterMethod('remove', options);\n this.workflow.call({\n process: AdapterProcess.remove,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n clip(options?: AdapterClipOptions): any {\n this.logger.logAdapterMethod('clip', options);\n this.workflow.call({\n process: AdapterProcess.clip,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n insert(options: AdapterInsertOptions<Item>): any {\n this.logger.logAdapterMethod('insert', options);\n this.workflow.call({\n process: AdapterProcess.insert,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n replace(options: AdapterReplaceOptions<Item>): any {\n this.logger.logAdapterMethod('replace', options);\n this.workflow.call({\n process: AdapterProcess.replace,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n update(options: AdapterUpdateOptions<Item>): any {\n this.logger.logAdapterMethod('update', options);\n this.workflow.call({\n process: AdapterProcess.update,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pause(): any {\n this.logger.logAdapterMethod('pause');\n this.workflow.call({\n process: AdapterProcess.pause,\n status: ProcessStatus.start\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resume(): any {\n this.logger.logAdapterMethod('resume');\n this.workflow.call({\n process: AdapterProcess.pause,\n status: ProcessStatus.start,\n payload: { options: { resume: true } }\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fix(options: AdapterFixOptions<Item>): any {\n this.logger.logAdapterMethod('fix', options);\n this.workflow.call({\n process: AdapterProcess.fix,\n status: ProcessStatus.start,\n payload: { options }\n });\n }\n\n relaxUnchained(\n callback: (() => void) | undefined,\n reloadId: string\n ): Promise<AdapterMethodResult> {\n const runCallback = () =>\n typeof callback === 'function' && reloadId === this.reloadId && callback();\n if (!this.isLoading) {\n runCallback();\n }\n return new Promise<boolean>(resolve => {\n if (!this.isLoading) {\n resolve(true);\n return;\n }\n this.isLoading$.once(() => {\n runCallback();\n resolve(false);\n });\n }).then(immediate => {\n if (this.disposed) {\n return {\n immediate,\n success: false,\n details: 'Adapter was disposed'\n };\n }\n const success = reloadId === this.reloadId;\n this.logger?.log?.(() =>\n !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0\n );\n return {\n immediate,\n success,\n details: !success ? 'Interrupted by reload or reset' : null\n };\n });\n }\n\n relax(callback?: () => void): Promise<AdapterMethodResult> {\n const reloadId = this.reloadId;\n this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);\n if (!this.init) {\n return Promise.resolve(methodPreResult);\n }\n return (this.relaxRun = this.relaxRun\n ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))\n : this.relaxUnchained(callback, reloadId).then(result => {\n this.relaxRun = null;\n return result;\n }));\n }\n\n showLog(): void {\n this.logger.logAdapterMethod('showLog');\n this.logger.logForce();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/classes/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from './logger';\r\nimport { Buffer } from './buffer';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n AdapterPropName,\r\n AdapterPropType,\r\n EMPTY_ITEM,\r\n getDefaultAdapterProps,\r\n methodPausedResult,\r\n methodPreResult,\r\n 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\nconst ALLOWED_METHODS_WHEN_PAUSED = ADAPTER_PROPS_STUB.filter(v => !!v.allowedWhenPaused).map(\r\n v => v.name\r\n);\r\n\r\nconst _has = (obj: unknown, prop: string): boolean =>\r\n !!obj && typeof obj === 'object' && 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 setFirstOrLastVisible = (_: {\r\n first?: boolean;\r\n last?: boolean;\r\n workflow?: ScrollerWorkflow;\r\n }) => {};\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 paused: boolean;\r\n paused$: 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, args: unknown[]) {\r\n return new Promise<AdapterMethodResult>(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 }\r\n\r\n private getWorkflowRunnerMethod(method: MethodResolver, name: AdapterPropName) {\r\n return (...args: unknown[]): Promise<AdapterMethodResult> => {\r\n if (!this.relax$) {\r\n this.logger?.log?.(() => 'scroller is not initialized: ' + name + ' method is ignored');\r\n return Promise.resolve(methodPreResult);\r\n }\r\n if (this.paused && !ALLOWED_METHODS_WHEN_PAUSED.includes(name)) {\r\n this.logger?.log?.(() => 'scroller is paused: ' + name + ' method is ignored');\r\n return Promise.resolve(methodPausedResult);\r\n }\r\n return this.getPromisifiedMethod(method, args);\r\n };\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 const firstPropList = [AdapterPropName.firstVisible, AdapterPropName.firstVisible$];\r\n const lastPropList = [AdapterPropName.lastVisible, AdapterPropName.lastVisible$];\r\n if (firstPropList.some(n => n === prop.name)) {\r\n this.setFirstOrLastVisible({ first: true });\r\n } else if (lastPropList.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.forEach((prop: IAdapterProp) => {\r\n const { name, type, 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.getWorkflowRunnerMethod(value as MethodResolver, name);\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,\r\n state,\r\n viewport,\r\n logger,\r\n adapterRun$,\r\n getWorkflow\r\n }: InitializationParams<Item>): 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 this.paused = state.paused.get();\r\n state.paused.on(paused => (this.paused = paused));\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(\r\n 'skipping first/lastVisible set because not all buffered items are rendered at this moment'\r\n );\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.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 pause(): any {\r\n this.logger.logAdapterMethod('pause');\r\n this.workflow.call({\r\n process: AdapterProcess.pause,\r\n status: ProcessStatus.start\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n resume(): any {\r\n this.logger.logAdapterMethod('resume');\r\n this.workflow.call({\r\n process: AdapterProcess.pause,\r\n status: ProcessStatus.start,\r\n payload: { options: { resume: true } }\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(\r\n callback: (() => void) | undefined,\r\n reloadId: string\r\n ): Promise<AdapterMethodResult> {\r\n const runCallback = () =>\r\n 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?.(() =>\r\n !success ? `relax promise cancelled due to ${reloadId} != ${this.reloadId}` : void 0\r\n );\r\n return {\r\n immediate,\r\n success,\r\n details: !success ? 'Interrupted by reload or reset' : null\r\n };\r\n });\r\n }\r\n\r\n relax(callback?: () => void): Promise<AdapterMethodResult> {\r\n const reloadId = this.reloadId;\r\n this.logger.logAdapterMethod('relax', callback, ` of ${reloadId}`);\r\n if (!this.init) {\r\n return Promise.resolve(methodPreResult);\r\n }\r\n return (this.relaxRun = this.relaxRun\r\n ? this.relaxRun.then(() => this.relaxUnchained(callback, reloadId))\r\n : this.relaxUnchained(callback, reloadId).then(result => {\r\n this.relaxRun = null;\r\n return result;\r\n }));\r\n }\r\n\r\n showLog(): void {\r\n this.logger.logAdapterMethod('showLog');\r\n this.logger.logForce();\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultSize } from './defaultSize';\nimport { Item } from '../item';\nimport { Settings } from '../settings';\nimport { Logger } from '../logger';\nimport { SizeStrategy, Direction } from '../../inputs/index';\n\ninterface ItemToCache<Data> {\n $index: number;\n data: Data;\n size?: number;\n}\n\ninterface ItemUpdate {\n $index: number;\n size: number;\n toRemove?: boolean;\n}\n\nexport class ItemCache<Data = unknown> {\n $index: number;\n data: Data | null;\n size?: number;\n position: number;\n\n constructor(item: ItemToCache<Data>, saveData: boolean) {\n this.$index = item.$index;\n this.data = saveData ? item.data : null;\n this.size = item.size;\n }\n\n changeIndex(value: number): void {\n this.$index = value;\n }\n}\n\nexport class Cache<Data = unknown> {\n minIndex: number;\n maxIndex: number;\n\n readonly itemSize: number;\n readonly saveData: boolean;\n readonly cacheOnReload: boolean;\n readonly sizeStrategy: SizeStrategy;\n readonly logger: Logger;\n private items: Map<number, ItemCache<Data>>;\n private defaultSize: DefaultSize;\n\n constructor({ itemSize, cacheData, cacheOnReload, sizeStrategy }: Settings, logger: Logger) {\n this.itemSize = itemSize;\n this.saveData = cacheData;\n this.cacheOnReload = cacheOnReload;\n this.sizeStrategy = sizeStrategy;\n this.logger = logger;\n this.items = new Map<number, ItemCache<Data>>();\n this.defaultSize = new DefaultSize(itemSize, sizeStrategy);\n this.reset(true);\n }\n\n reset(force: boolean): void {\n force = force || !this.cacheOnReload;\n if (force) {\n this.minIndex = +Infinity;\n this.maxIndex = -Infinity;\n this.items.clear();\n }\n this.defaultSize.reset(force);\n }\n\n get size(): number {\n return this.items.size;\n }\n\n get(index: number): ItemCache<Data> | undefined {\n return this.items.get(index);\n }\n\n getSizeByIndex(index: number): number {\n const item = this.get(index);\n return (item && item.size) || this.defaultSize.get();\n }\n\n getDefaultSize(): number {\n return this.defaultSize.get();\n }\n\n recalculateDefaultSize(): boolean {\n if (this.defaultSize.recalculate(this.size)) {\n this.logger.log(() => `default size has been updated: ${this.defaultSize.get()}`);\n return true;\n }\n return false;\n }\n\n /**\n * Adds item to Set by $index, replaces existed item if $index matches.\n * Maintains min/max indexes and default item size.\n *\n * @param {Item<Data>} item A Buffer item to be cached, an objects with { $index, data, size } props.\n * @returns {ItemCache<Data>} Cached item.\n */\n add(item: Item<Data>): ItemCache<Data> {\n let itemCache = this.get(item.$index);\n if (itemCache) {\n // adding item is already cached\n if (this.saveData) {\n itemCache.data = item.data;\n }\n if (itemCache.size !== item.size) {\n if (itemCache.size) {\n this.defaultSize.setExisted(itemCache.size, item.size);\n } else {\n this.defaultSize.setNew(item.size);\n }\n itemCache.size = item.size;\n }\n } else {\n itemCache = new ItemCache<Data>(item, this.saveData);\n this.items.set(item.$index, itemCache);\n this.defaultSize.setNew(item.size);\n }\n if (item.$index < this.minIndex) {\n this.minIndex = item.$index;\n }\n if (item.$index > this.maxIndex) {\n this.maxIndex = item.$index;\n }\n return itemCache;\n }\n\n /**\n * Inserts items to Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {Data[]} toInsert List of non-indexed items to be inserted.\n * @param {number} index The index before/after which the insertion is performed.\n * @param {Direction} direction Determines the direction of insertion.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the inserted ones are increased.\n * If true, indexes that are less than than the inserted ones are decreased.\n */\n insertItems(toInsert: Data[], index: number, direction: Direction, fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n const length = toInsert.length;\n let min = Infinity,\n max = -Infinity;\n const set = (item: ItemCache<Data>) => {\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n };\n this.items.forEach(item => {\n let shift = 0;\n if (direction === Direction.backward) {\n if (item.$index < index && fixRight) {\n shift = -length;\n } else if (item.$index >= index && !fixRight) {\n shift = length;\n }\n } else if (direction === Direction.forward) {\n if (item.$index <= index && fixRight) {\n shift = -length;\n } else if (item.$index > index && !fixRight) {\n shift = length;\n }\n }\n if (shift) {\n item.changeIndex(item.$index + shift);\n }\n set(item);\n });\n if (this.saveData) {\n // persist data with no sizes\n toInsert.forEach((data, i) => {\n const $index =\n index + i - (fixRight ? length : 0) + (direction === Direction.forward ? 1 : 0);\n const item = new ItemCache<Data>({ $index, data }, this.saveData);\n set(item);\n });\n }\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Removes items from Set, shifts $indexes of items that remain.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes and default item size.\n *\n * @param {number[]} toRemove List of indexes to be removed.\n * @param {boolean} fixRight Defines indexes shifting strategy.\n * If false, indexes that are greater than the removed ones will be decreased.\n * If true, indexes that are less than than the removed ones will be increased.\n */\n removeItems(toRemove: number[], fixRight: boolean): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity,\n max = -Infinity;\n this.items.forEach(item => {\n if (toRemove.some(index => index === item.$index)) {\n if (item.size) {\n this.defaultSize.setRemoved(item.size);\n }\n return;\n }\n const diff = fixRight\n ? toRemove.reduce((acc, index) => acc + (item.$index < index ? 1 : 0), 0)\n : toRemove.reduce((acc, index) => acc - (item.$index > index ? 1 : 0), 0);\n item.changeIndex(item.$index + diff);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n\n /**\n * Destructively updates Set based on subset (before-after) changes.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes. Maintains default item size on remove only.\n *\n * @param {ItemUpdate[]} before Initial subset of items to be replaced by \"after\".\n * Each element is an object with { $index, size, toRemove } props. Must be $index-incremental.\n * Items to be removed must have toRemove flag: before[].toRemove = true.\n * @param {Item<Data>[]} after Transformed subset that replaces \"before\". Must be $index-incremental.\n * Must contain at least 1 $index from \"before\" or be empty.\n * @param {boolean} fixRight This is to fix right indexes during subset collapsing. Acts only if \"after\" is empty.\n */\n updateSubset(before: ItemUpdate[], after: Item<Data>[], fixRight?: boolean): void {\n if (!this.size || !before.length) {\n return;\n }\n const minB = before[0].$index,\n maxB = before[before.length - 1].$index;\n let leftDiff: number, rightDiff: number;\n if (after.length) {\n const minA = after[0].$index,\n maxA = after[after.length - 1].$index;\n leftDiff = minA - minB;\n rightDiff = maxA - maxB;\n } else {\n leftDiff = fixRight ? maxB - minB + 1 : 0;\n rightDiff = fixRight ? 0 : minB - maxB - 1;\n }\n const items = new Map<number, ItemCache<Data>>();\n this.items.forEach(item => {\n if (item.$index < minB) {\n // items to the left of the subset\n item.changeIndex(item.$index + leftDiff);\n items.set(item.$index, item);\n return;\n } else if (item.$index > maxB) {\n // items to the right of the subset\n item.changeIndex(item.$index + rightDiff);\n items.set(item.$index, item);\n return;\n }\n });\n after.forEach(\n (\n item // subset items\n ) => items.set(item.$index, new ItemCache<Data>(item, this.saveData))\n );\n before // to maintain default size on remove\n .filter(item => item.toRemove)\n .forEach(item => this.defaultSize.setRemoved(item.size));\n this.minIndex += leftDiff;\n this.maxIndex += rightDiff;\n this.items = items;\n }\n\n /**\n * Shifts all indexes by some value.\n * Replaces current Set with a new one with new regular $indexes.\n * Maintains min/max indexes.\n *\n * @param {number} delta A shift value.\n */\n shiftIndexes(delta: number): void {\n const items = new Map<number, ItemCache<Data>>();\n let min = Infinity,\n max = -Infinity;\n this.items.forEach(item => {\n item.changeIndex(item.$index + delta);\n items.set(item.$index, item);\n min = item.$index < min ? item.$index : min;\n max = item.$index > max ? item.$index : max;\n });\n this.items = items;\n this.minIndex = min;\n this.maxIndex = max;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/classes/buffer/cache.ts"],"names":[],"mappings":"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","sourcesContent":["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 * @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) {\r\n // 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,\r\n 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) {\r\n // persist data with no sizes\r\n toInsert.forEach((data, i) => {\r\n const $index =\r\n 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,\r\n 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,\r\n 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,\r\n 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) {\r\n // 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) {\r\n // 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(\r\n (\r\n 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,\r\n 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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from '../buffer';\nimport { Logger } from '../logger';\nimport { Direction } from '../../inputs/index';\nimport { ItemsPredicate } from '../../interfaces/index';\n\nexport class CheckBufferCall<Data> {\n private context: Buffer<Data>;\n private logger: Logger;\n\n constructor(context: Buffer<Data>, logger: Logger) {\n this.context = context;\n this.logger = logger;\n }\n\n fillEmpty(items: Data[], before?: number, after?: number): boolean {\n if (!items.length) {\n this.logger.log('no items to fill the buffer; empty list');\n return false;\n }\n if (!Number.isInteger(before) && !Number.isInteger(after)) {\n this.logger.log('no items to fill the buffer; wrong indexes');\n return false;\n }\n this.logger.log(() => `going to fill the buffer with ${items.length} item(s)`);\n return true;\n }\n\n insertInBuffer(predicate?: ItemsPredicate, before?: number, after?: number): number {\n const index = Number.isInteger(before) ? before : Number.isInteger(after) ? after : NaN;\n const found = this.context.items.find(\n item =>\n (predicate && predicate(item.get())) || (Number.isInteger(index) && index === item.$index)\n );\n if (!found) {\n this.logger.log('no items to insert in buffer; empty predicate result');\n return NaN;\n }\n return found.$index;\n }\n\n insertVirtual(items: Data[], index: number, direction: Direction): boolean {\n if (!items.length) {\n this.logger.log('no items to insert virtually; empty list');\n return false;\n }\n const { firstIndex, lastIndex, finiteAbsMinIndex, finiteAbsMaxIndex } = this.context;\n if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {\n this.logger.log(\n () =>\n 'no items to insert virtually; ' +\n `selected index (${index}) does not match virtual area [${finiteAbsMinIndex}..${finiteAbsMaxIndex}]`\n );\n return false;\n }\n const before = direction === Direction.backward;\n if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {\n this.logger.log(\n `no items to insert virtually; selected index (${index}) belongs Buffer [${firstIndex}..${lastIndex}]`\n );\n return false;\n }\n this.logger.log(() => `going to insert ${items.length} item(s) virtually`);\n return true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"checkCall.js","sourceRoot":"","sources":["../../../../src/classes/buffer/checkCall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C;IAIE,yBAAY,OAAqB,EAAE,MAAc;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mCAAS,GAAT,UAAU,KAAa,EAAE,MAAe,EAAE,KAAc;QACtD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAM,OAAA,wCAAiC,KAAK,CAAC,MAAM,aAAU,EAAvD,CAAuD,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAc,GAAd,UAAe,SAA0B,EAAE,MAAe,EAAE,KAAc;QACxE,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACxF,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CACnC,UAAA,IAAI;YACF,OAAA,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;QAA1F,CAA0F,CAC7F,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACxE,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,uCAAa,GAAb,UAAc,KAAa,EAAE,KAAa,EAAE,SAAoB;QAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;QACK,IAAA,KAAkE,IAAI,CAAC,OAAO,EAA5E,UAAU,gBAAA,EAAE,SAAS,eAAA,EAAE,iBAAiB,uBAAA,EAAE,iBAAiB,uBAAiB,CAAC;QACrF,IAAI,KAAK,GAAG,iBAAiB,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CACb;gBACE,OAAA,gCAAgC;oBAChC,0BAAmB,KAAK,4CAAkC,iBAAiB,eAAK,iBAAiB,MAAG;YADpG,CACoG,CACvG,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,wDAAiD,KAAK,+BAAqB,UAAU,eAAK,SAAS,MAAG,CACvG,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAM,OAAA,0BAAmB,KAAK,CAAC,MAAM,uBAAoB,EAAnD,CAAmD,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACH,sBAAC;AAAD,CAAC,AA3DD,IA2DC","sourcesContent":["import { Buffer } from '../buffer';\r\nimport { Logger } from '../logger';\r\nimport { Direction } from '../../inputs/index';\r\nimport { ItemsPredicate } from '../../interfaces/index';\r\n\r\nexport class CheckBufferCall<Data> {\r\n private context: Buffer<Data>;\r\n private logger: Logger;\r\n\r\n constructor(context: Buffer<Data>, logger: Logger) {\r\n this.context = context;\r\n this.logger = logger;\r\n }\r\n\r\n fillEmpty(items: Data[], before?: number, after?: number): boolean {\r\n if (!items.length) {\r\n this.logger.log('no items to fill the buffer; empty list');\r\n return false;\r\n }\r\n if (!Number.isInteger(before) && !Number.isInteger(after)) {\r\n this.logger.log('no items to fill the buffer; wrong indexes');\r\n return false;\r\n }\r\n this.logger.log(() => `going to fill the buffer with ${items.length} item(s)`);\r\n return true;\r\n }\r\n\r\n insertInBuffer(predicate?: ItemsPredicate, before?: number, after?: number): number {\r\n const index = Number.isInteger(before) ? before : Number.isInteger(after) ? after : NaN;\r\n const found = this.context.items.find(\r\n item =>\r\n (predicate && predicate(item.get())) || (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 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 () =>\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultSize.js","sourceRoot":"","sources":["../../../../src/classes/buffer/defaultSize.ts"],"names":[],"mappings":"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","sourcesContent":["import { SizeStrategy } from '../../inputs/index';\n\ninterface ItemSize {\n size: number;\n newSize?: number;\n}\n\nexport class SizesRecalculation {\n newItems: ItemSize[];\n oldItems: ItemSize[];\n removed: ItemSize[];\n\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.newItems = [];\n this.oldItems = [];\n this.removed = [];\n }\n}\n\nexport class DefaultSize {\n private readonly itemSize: number;\n private readonly sizeStrategy: SizeStrategy;\n private sizeMap: Map<number, number>;\n private recalculation: SizesRecalculation;\n\n private constantSize: number;\n private frequentSize: number;\n private averageSize: number;\n private averageSizeFloat: number;\n\n constructor(itemSize: number, sizeStrategy: SizeStrategy) {\n this.itemSize = itemSize;\n this.sizeStrategy = sizeStrategy;\n this.sizeMap = new Map<number, number>();\n this.recalculation = new SizesRecalculation();\n }\n\n reset(force: boolean): void {\n if (force) {\n this.constantSize = this.itemSize;\n this.frequentSize = this.itemSize;\n this.averageSize = this.itemSize;\n this.averageSizeFloat = this.itemSize;\n this.sizeMap.clear();\n }\n this.recalculation.reset();\n }\n\n get(): number {\n switch (this.sizeStrategy) {\n case SizeStrategy.Average:\n return this.averageSize;\n case SizeStrategy.Frequent:\n return this.frequentSize;\n default:\n return this.constantSize;\n }\n }\n\n private recalculateAverageSize(cacheSize: number): void {\n const { oldItems, newItems, removed } = this.recalculation;\n if (oldItems.length) {\n const oldSize = oldItems.reduce((acc, item) => acc + item.size, 0);\n const newSize = oldItems.reduce((acc, item) => acc + (item.newSize as number), 0);\n const averageSize = this.averageSizeFloat || 0;\n this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);\n }\n if (newItems.length) {\n const newSize = newItems.reduce((acc, item) => acc + item.size, 0);\n const averageSize = this.averageSizeFloat || 0;\n this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;\n }\n if (removed.length) {\n const removedSize = removed.reduce((acc, item) => acc + item.size, 0);\n const averageSize = this.averageSizeFloat || 0;\n this.averageSizeFloat =\n ((cacheSize + removed.length) * averageSize - removedSize) / cacheSize;\n }\n this.averageSize = Math.round(this.averageSizeFloat);\n }\n\n private recalculateFrequentSize(): void {\n const { oldItems, newItems, removed } = this.recalculation;\n const oldFrequentSizeCount = this.sizeMap.get(this.frequentSize);\n if (newItems.length) {\n newItems.forEach(({ size }) => this.sizeMap.set(size, (this.sizeMap.get(size) || 0) + 1));\n }\n if (oldItems.length) {\n oldItems.forEach(({ size }) =>\n this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0))\n );\n oldItems.forEach(({ newSize: s }) =>\n this.sizeMap.set(s as number, (this.sizeMap.get(s as number) || 0) + 1)\n );\n }\n if (removed.length) {\n removed.forEach(({ size }) =>\n this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0))\n );\n }\n const sorted = [...this.sizeMap.entries()].sort((a, b) => b[1] - a[1]);\n const mostFrequentCount = sorted[0][1];\n const listEqual = sorted.filter(i => i[1] === mostFrequentCount);\n if (listEqual.length > 1 && listEqual.find(i => i[0] === oldFrequentSizeCount)) {\n // if there are more than 1 most frequent sizes, but the old one is present\n return;\n }\n this.frequentSize = sorted[0][0];\n }\n\n recalculate(cacheSize: number): boolean {\n if (this.sizeStrategy === SizeStrategy.Constant) {\n return false;\n }\n const { oldItems, newItems, removed } = this.recalculation;\n if (!oldItems.length && !newItems.length && !removed.length) {\n return false;\n }\n const oldValue = this.get();\n if (!cacheSize) {\n this.reset(true);\n } else {\n if (this.sizeStrategy === SizeStrategy.Average) {\n this.recalculateAverageSize(cacheSize);\n } else {\n this.recalculateFrequentSize();\n }\n this.recalculation.reset();\n }\n return this.get() !== oldValue;\n }\n\n setExisted(oldSize: number, newSize: number): void {\n if (this.sizeStrategy !== SizeStrategy.Constant) {\n this.recalculation.oldItems.push({\n size: oldSize,\n newSize\n });\n }\n }\n\n setNew(size: number): void {\n if (this.sizeStrategy !== SizeStrategy.Constant) {\n this.recalculation.newItems.push({ size });\n } else {\n if (!this.constantSize) {\n this.constantSize = size;\n }\n }\n }\n\n setRemoved(size: number): void {\n if (this.sizeStrategy !== SizeStrategy.Constant) {\n this.recalculation.removed.push({ size });\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"defaultSize.js","sourceRoot":"","sources":["../../../../src/classes/buffer/defaultSize.ts"],"names":[],"mappings":"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","sourcesContent":["import { SizeStrategy } from '../../inputs/index';\r\n\r\ninterface ItemSize {\r\n size: number;\r\n newSize?: number;\r\n}\r\n\r\nexport class SizesRecalculation {\r\n newItems: ItemSize[];\r\n oldItems: ItemSize[];\r\n removed: ItemSize[];\r\n\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset(): void {\r\n this.newItems = [];\r\n this.oldItems = [];\r\n this.removed = [];\r\n }\r\n}\r\n\r\nexport class DefaultSize {\r\n private readonly itemSize: number;\r\n private readonly sizeStrategy: SizeStrategy;\r\n private sizeMap: Map<number, number>;\r\n private recalculation: SizesRecalculation;\r\n\r\n private constantSize: number;\r\n private frequentSize: number;\r\n private averageSize: number;\r\n private averageSizeFloat: number;\r\n\r\n constructor(itemSize: number, sizeStrategy: SizeStrategy) {\r\n this.itemSize = itemSize;\r\n this.sizeStrategy = sizeStrategy;\r\n this.sizeMap = new Map<number, number>();\r\n this.recalculation = new SizesRecalculation();\r\n }\r\n\r\n reset(force: boolean): void {\r\n if (force) {\r\n this.constantSize = this.itemSize;\r\n this.frequentSize = this.itemSize;\r\n this.averageSize = this.itemSize;\r\n this.averageSizeFloat = this.itemSize;\r\n this.sizeMap.clear();\r\n }\r\n this.recalculation.reset();\r\n }\r\n\r\n get(): number {\r\n switch (this.sizeStrategy) {\r\n case SizeStrategy.Average:\r\n return this.averageSize;\r\n case SizeStrategy.Frequent:\r\n return this.frequentSize;\r\n default:\r\n return this.constantSize;\r\n }\r\n }\r\n\r\n private recalculateAverageSize(cacheSize: number): void {\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (oldItems.length) {\r\n const oldSize = oldItems.reduce((acc, item) => acc + item.size, 0);\r\n const newSize = oldItems.reduce((acc, item) => acc + (item.newSize as number), 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = averageSize - (oldSize - newSize) / (cacheSize - newItems.length);\r\n }\r\n if (newItems.length) {\r\n const newSize = newItems.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat = ((cacheSize - newItems.length) * averageSize + newSize) / cacheSize;\r\n }\r\n if (removed.length) {\r\n const removedSize = removed.reduce((acc, item) => acc + item.size, 0);\r\n const averageSize = this.averageSizeFloat || 0;\r\n this.averageSizeFloat =\r\n ((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 }) =>\r\n this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0))\r\n );\r\n oldItems.forEach(({ newSize: s }) =>\r\n this.sizeMap.set(s as number, (this.sizeMap.get(s as number) || 0) + 1)\r\n );\r\n }\r\n if (removed.length) {\r\n removed.forEach(({ size }) =>\r\n this.sizeMap.set(size, Math.max((this.sizeMap.get(size) || 0) - 1, 0))\r\n );\r\n }\r\n const sorted = [...this.sizeMap.entries()].sort((a, b) => b[1] - a[1]);\r\n const mostFrequentCount = sorted[0][1];\r\n const listEqual = sorted.filter(i => i[1] === mostFrequentCount);\r\n if (listEqual.length > 1 && listEqual.find(i => i[0] === oldFrequentSizeCount)) {\r\n // if there are more than 1 most frequent sizes, but the old one is present\r\n return;\r\n }\r\n this.frequentSize = sorted[0][0];\r\n }\r\n\r\n recalculate(cacheSize: number): boolean {\r\n if (this.sizeStrategy === SizeStrategy.Constant) {\r\n return false;\r\n }\r\n const { oldItems, newItems, removed } = this.recalculation;\r\n if (!oldItems.length && !newItems.length && !removed.length) {\r\n return false;\r\n }\r\n const oldValue = this.get();\r\n if (!cacheSize) {\r\n this.reset(true);\r\n } else {\r\n if (this.sizeStrategy === SizeStrategy.Average) {\r\n this.recalculateAverageSize(cacheSize);\r\n } else {\r\n this.recalculateFrequentSize();\r\n }\r\n this.recalculation.reset();\r\n }\r\n return this.get() !== oldValue;\r\n }\r\n\r\n setExisted(oldSize: number, newSize: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.oldItems.push({\r\n size: oldSize,\r\n newSize\r\n });\r\n }\r\n }\r\n\r\n setNew(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.newItems.push({ size });\r\n } else {\r\n if (!this.constantSize) {\r\n this.constantSize = size;\r\n }\r\n }\r\n }\r\n\r\n setRemoved(size: number): void {\r\n if (this.sizeStrategy !== SizeStrategy.Constant) {\r\n this.recalculation.removed.push({ size });\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Cache } from './buffer/cache';\nimport { CheckBufferCall } from './buffer/checkCall';\nimport { Item } from './item';\nimport { Settings } from './settings';\nimport { Logger } from './logger';\nimport { Reactive } from './reactive';\nimport { Direction } from '../inputs/index';\nimport { OnDataChanged, BufferUpdater, ItemsPredicate } from '../interfaces/index';\n\nexport class Buffer<Data> {\n private _items: Item<Data>[] = [];\n private _absMinIndex: number;\n private _absMaxIndex: number;\n bof: Reactive<boolean>;\n eof: Reactive<boolean>;\n\n changeItems: OnDataChanged<Data>;\n minIndexUser: number;\n maxIndexUser: number;\n startIndexUser: number;\n startIndex: number;\n\n private pristine: boolean;\n private cache: Cache<Data>;\n private checkCall: CheckBufferCall<Data>;\n private readonly logger: Logger;\n\n constructor(settings: Settings<Data>, onDataChanged: OnDataChanged<Data>, logger: Logger) {\n this.logger = logger;\n this.changeItems = onDataChanged;\n this.bof = new Reactive<boolean>(false);\n this.eof = new Reactive<boolean>(false);\n this.cache = new Cache<Data>(settings, logger);\n this.checkCall = new CheckBufferCall(this, logger);\n this.startIndexUser = settings.startIndex;\n this.minIndexUser = settings.minIndex;\n this.maxIndexUser = settings.maxIndex;\n this.reset(true);\n }\n\n dispose(): void {\n this.bof.dispose();\n this.eof.dispose();\n this._items.forEach(item => item.dispose());\n this._items = [];\n }\n\n reset(force: boolean, startIndex?: number): void {\n this.items.forEach(item => item.hide());\n this.pristine = true;\n this.items = [];\n this.cache.reset(force);\n this.absMinIndex = this.minIndexUser;\n this.absMaxIndex = this.maxIndexUser;\n this.setCurrentStartIndex(startIndex);\n this.bof.set(false);\n this.eof.set(false);\n this.pristine = false;\n }\n\n setCurrentStartIndex(newStartIndex?: unknown): void {\n const min = this.minIndexUser;\n const max = this.maxIndexUser;\n const start = this.startIndexUser;\n let index = Number(newStartIndex);\n if (Number.isNaN(index)) {\n this.logger.log(() => `fallback startIndex to settings.startIndex (${start})`);\n index = start;\n }\n if (index < min) {\n this.logger.log(\n () => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`\n );\n index = min;\n }\n if (index > max) {\n this.logger.log(\n () => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`\n );\n index = max;\n }\n this.startIndex = index;\n }\n\n set items(items: Item<Data>[]) {\n this._items = items;\n this.changeItems(items);\n if (!this.pristine) {\n this.checkBOF();\n this.checkEOF();\n }\n }\n\n get items(): Item<Data>[] {\n return this._items;\n }\n\n set absMinIndex(value: number) {\n if (this._absMinIndex !== value) {\n this._absMinIndex =\n Number.isFinite(this._absMaxIndex) && value > this._absMaxIndex ? this._absMaxIndex : value;\n }\n if (!this.pristine) {\n this.checkBOF();\n }\n }\n\n get absMinIndex(): number {\n return this._absMinIndex;\n }\n\n set absMaxIndex(value: number) {\n if (this._absMaxIndex !== value) {\n this._absMaxIndex =\n Number.isFinite(this._absMinIndex) && value < this._absMinIndex ? this._absMinIndex : value;\n }\n if (!this.pristine) {\n this.checkEOF();\n }\n }\n\n get absMaxIndex(): number {\n return this._absMaxIndex;\n }\n\n private checkBOF() {\n // since bof has no setter, need to call checkBOF() on items and absMinIndex change\n const bof = this.items.length\n ? this.items[0].$index === this.absMinIndex\n : isFinite(this.absMinIndex);\n this.bof.set(bof);\n }\n\n private checkEOF() {\n // since eof has no setter, need to call checkEOF() on items and absMaxIndex change\n const eof = this.items.length\n ? this.items[this.items.length - 1].$index === this.absMaxIndex\n : isFinite(this.absMaxIndex);\n this.eof.set(eof);\n }\n\n get size(): number {\n return this._items.length;\n }\n\n get cacheSize(): number {\n return this.cache.size;\n }\n\n get defaultSize(): number {\n return this.cache.getDefaultSize();\n }\n\n get minIndex(): number {\n return isFinite(this.cache.minIndex) ? this.cache.minIndex : this.startIndex;\n }\n\n get maxIndex(): number {\n return isFinite(this.cache.maxIndex) ? this.cache.maxIndex : this.startIndex;\n }\n\n get firstIndex(): number {\n return this.items.length ? this.items[0].$index : NaN;\n }\n\n get lastIndex(): number {\n return this.items.length ? this.items[this.items.length - 1].$index : NaN;\n }\n\n get finiteAbsMinIndex(): number {\n return isFinite(this.absMinIndex) ? this.absMinIndex : this.minIndex;\n }\n\n get finiteAbsMaxIndex(): number {\n return isFinite(this.absMaxIndex) ? this.absMaxIndex : this.maxIndex;\n }\n\n get($index: number): Item<Data> | undefined {\n return this.items.find(item => item.$index === $index);\n }\n\n setItems(items: Item<Data>[]): boolean {\n if (!this.items.length) {\n this.items = [...items];\n } else if (this.items[0].$index > items[items.length - 1].$index) {\n this.items = [...items, ...this.items];\n } else if (items[0].$index > this.items[this.items.length - 1].$index) {\n this.items = [...this.items, ...items];\n } else {\n return false;\n }\n return true;\n }\n\n clip(): void {\n this.items = this.items.filter(({ toRemove }) => !toRemove);\n }\n\n getIndexToInsert(predicate?: ItemsPredicate, before?: number, after?: number): number {\n return this.checkCall.insertInBuffer(predicate, before, after);\n }\n\n private shiftExtremum(amount: number, fixRight: boolean) {\n if (!fixRight) {\n this.absMaxIndex += amount;\n } else {\n this.absMinIndex -= amount;\n this.startIndex -= amount;\n }\n if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n } else if (this.startIndex < this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n }\n }\n\n insertVirtually(items: Data[], index: number, direction: Direction, fixRight: boolean): boolean {\n if (!this.checkCall.insertVirtual(items, index, direction)) {\n return false;\n }\n let shift = 0;\n if (index <= this.firstIndex && !fixRight) {\n shift = items.length;\n } else if (index >= this.lastIndex && fixRight) {\n shift = -items.length;\n }\n if (shift) {\n this.items.forEach(item => item.updateIndex(item.$index + shift));\n this.cache.insertItems(items, index, direction, fixRight);\n this.items = [...this.items];\n }\n this.shiftExtremum(items.length, fixRight);\n return true;\n }\n\n removeVirtually(indexes: number[], fixRight: boolean): void {\n const length = this.items.length;\n let shifted = false;\n for (let i = fixRight ? length - 1 : 0; fixRight ? i >= 0 : i < length; fixRight ? i-- : i++) {\n const item = this.items[i];\n const diff = indexes.reduce(\n (acc, index) =>\n acc + (fixRight ? (item.$index < index ? 1 : 0) : item.$index > index ? -1 : 0),\n 0\n );\n shifted = shifted || !!diff;\n item.updateIndex(item.$index + diff);\n }\n this.shiftExtremum(-indexes.length, fixRight);\n if (shifted) {\n this.items = [...this.items];\n }\n this.cache.removeItems(indexes, fixRight);\n }\n\n fillEmpty(\n items: Data[],\n beforeIndex: number | undefined,\n afterIndex: number | undefined,\n fixRight: boolean,\n generator: (index: number, data: Data) => Item<Data>\n ): boolean {\n if (!this.checkCall.fillEmpty(items, beforeIndex, afterIndex)) {\n return false;\n }\n const before = Number.isInteger(beforeIndex);\n const index = (before ? beforeIndex : afterIndex) as number;\n const shift = fixRight ? items.length : before ? 1 : 0;\n this.items = items.map((data, i) => generator(index + i + (!before ? 1 : 0) - shift, data));\n this._absMinIndex = this.items[0].$index;\n this._absMaxIndex = this.items[this.size - 1].$index;\n if (this.startIndex <= this.absMinIndex) {\n this.startIndex = this.absMinIndex;\n } else if (this.startIndex > this.absMaxIndex) {\n this.startIndex = this.absMaxIndex;\n }\n return true;\n }\n\n updateItems(\n predicate: BufferUpdater<Data>,\n generator: (index: number, data: Data) => Item<Data>,\n indexToTrack: number,\n fixRight: boolean\n ): { trackedIndex: number; toRemove: Item<Data>[] } {\n if (!this.size || Number.isNaN(this.firstIndex)) {\n return { trackedIndex: NaN, toRemove: [] };\n }\n let trackedIndex = indexToTrack;\n let index = fixRight ? this.lastIndex : this.firstIndex;\n const items: Item<Data>[] = [];\n const diff = fixRight ? -1 : 1;\n const limit = this.size - 1;\n const beforeMap = new Map<number, Item>(); // need to persist original $indexes\n const updateArray = Array.prototype[fixRight ? 'unshift' : 'push'];\n\n for (let i = fixRight ? limit : 0; fixRight ? i >= 0 : i <= limit; i += diff) {\n const item = this.items[i];\n beforeMap.set(item.$index, item);\n const result = predicate(item);\n\n // if predicate result is falsy or empty array -> delete\n if (!result || (Array.isArray(result) && !result.length)) {\n item.toRemove = true;\n trackedIndex += item.$index >= indexToTrack ? (fixRight ? 1 : 0) : fixRight ? 0 : -1;\n this.shiftExtremum(-1, fixRight);\n continue;\n }\n\n // if predicate result is truthy but not array -> leave\n if (!Array.isArray(result)) {\n item.updateIndex(index);\n updateArray.call(items, item);\n index += diff;\n continue;\n }\n\n // if predicate result is non-empty array -> insert/replace\n if (item.$index < indexToTrack) {\n trackedIndex += fixRight ? 0 : result.length - 1;\n } else if (item.$index > indexToTrack) {\n trackedIndex += fixRight ? 1 - result.length : 0;\n }\n let toRemove = true;\n const newItems: Item<Data>[] = [];\n (fixRight ? [...result].reverse() : result).forEach((data, i) => {\n let newItem: Item<Data>;\n if (item.data === data) {\n if (indexToTrack === item.$index) {\n trackedIndex = index + i * diff;\n }\n item.updateIndex(index + i * diff);\n newItem = item;\n toRemove = false; // insert case\n } else {\n newItem = generator(index + i * diff, data);\n newItem.toInsert = true;\n }\n updateArray.call(newItems, newItem);\n });\n item.toRemove = toRemove;\n updateArray.call(items, ...newItems);\n index += diff * result.length;\n if (result.length > 1) {\n this.shiftExtremum(result.length - 1, fixRight);\n }\n }\n\n const toRemove = this.items.filter(item => item.toRemove);\n const itemsBefore = Array.from(beforeMap)\n .map(([$index, { size, toRemove }]) => ({ $index, size, toRemove }))\n .sort((a, b) => a.$index - b.$index);\n this.items = items;\n this.cache.updateSubset(itemsBefore, items, fixRight);\n\n if (this.finiteAbsMinIndex === this.finiteAbsMaxIndex) {\n trackedIndex = NaN;\n } else if (trackedIndex > this.finiteAbsMaxIndex) {\n trackedIndex = this.finiteAbsMaxIndex;\n } else if (trackedIndex < this.finiteAbsMinIndex) {\n trackedIndex = this.finiteAbsMinIndex;\n }\n return { trackedIndex, toRemove };\n }\n\n cacheItem(item: Item<Data>): void {\n this.cache.add(item);\n }\n\n getFirstVisibleItemIndex(): number {\n const length = this.items.length;\n for (let i = 0; i < length; i++) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getLastVisibleItemIndex(): number {\n for (let i = this.items.length - 1; i >= 0; i--) {\n if (!this.items[i].invisible) {\n return i;\n }\n }\n return -1;\n }\n\n getFirstVisibleItem(): Item<Data> | undefined {\n const index = this.getFirstVisibleItemIndex();\n return index >= 0 ? this.items[index] : void 0;\n }\n\n getLastVisibleItem(): Item<Data> | undefined {\n const index = this.getLastVisibleItemIndex();\n return index >= 0 ? this.items[index] : void 0;\n }\n\n getEdgeVisibleItem(direction: Direction, opposite?: boolean): Item<Data> | undefined {\n return direction === (!opposite ? Direction.forward : Direction.backward)\n ? this.getLastVisibleItem()\n : this.getFirstVisibleItem();\n }\n\n getVisibleItemsCount(): number {\n return this.items.reduce((acc: number, item) => acc + (item.invisible ? 0 : 1), 0);\n }\n\n getSizeByIndex(index: number): number {\n return this.cache.getSizeByIndex(index);\n }\n\n checkDefaultSize(): boolean {\n return this.cache.recalculateDefaultSize();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/classes/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["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 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(\r\n () => `setting startIndex to settings.minIndex (${min}) because ${index} < ${min}`\r\n );\r\n index = min;\r\n }\r\n if (index > max) {\r\n this.logger.log(\r\n () => `setting startIndex to settings.maxIndex (${max}) because ${index} > ${max}`\r\n );\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 =\r\n 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 =\r\n 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 (let i = fixRight ? length - 1 : 0; fixRight ? i >= 0 : i < length; fixRight ? i-- : i++) {\r\n const item = this.items[i];\r\n const diff = indexes.reduce(\r\n (acc, index) =>\r\n acc + (fixRight ? (item.$index < index ? 1 : 0) : item.$index > index ? -1 : 0),\r\n 0\r\n );\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[],\r\n beforeIndex: number | undefined,\r\n afterIndex: number | undefined,\r\n 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) => generator(index + i + (!before ? 1 : 0) - shift, data));\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()\r\n : 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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/classes/datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAajD,IAAM,uBAAuB,GAAG;IAC9B,IAAM,QAAQ,GAAG,sBAAsB,EAAE;SACtC,MAAM,CAAC,UAAC,EAAQ;YAAN,IAAI,UAAA;QAAO,OAAA,IAAI,KAAK,eAAe,CAAC,QAAQ;IAAjC,CAAiC,CAAC;SACvD,MAAM,CACL,UAAC,GAAG,EAAE,EAAe;YAAb,IAAI,UAAA,EAAE,KAAK,WAAA;QACjB,GAAG,CAAC,IAAI,CAAC,GAAG;YACV,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAC,MAAM,EAAE,GAAG,IAAK,OAAC,MAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAtC,CAAsC;SAC9D,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAyC,CAC1C,CAAC;IAEJ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,UAAA,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF;IAME,2BAAY,UAAmC,EAAE,MAAuB;QACtE,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,cAA2C,CAAC;IAC7D,CAAC;IAED,gCAAgC;IAChC,mCAAO,GAAP;QACE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IACH,wBAAC;AAAD,CAAC,AAnBD,IAmBC;;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,UAC5B,gBAAuC;IAEvC,OAAA;QAA8B,2BAAuB;QACnD,iBAAY,UAAmC;YAC7C,IAAM,MAAM,GACV,OAAO,gBAAgB,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;YAC1F,OAAA,MAAK,YAAC,UAAU,EAAE,MAAM,CAAC,SAAC;QAC5B,CAAC;QACH,cAAC;IAAD,CAAC,AAND,CAA8B,iBAAiB,EAM/B;AANhB,CAMgB,CAAC;AAEnB,MAAM,CAAC,IAAM,UAAU,GAAG,cAAc,EAAE,CAAC","sourcesContent":["import { AdapterContext } from './adapter/context';\nimport { reactiveConfigStorage, AdapterPropType, getDefaultAdapterProps } from './adapter/props';\nimport { wantedStorage } from './adapter/wanted';\nimport { Reactive } from './reactive';\nimport {\n IDatasourceParams,\n IDatasourceConstructed,\n DatasourceGet,\n Settings,\n DevSettings,\n IAdapter,\n IAdapterConfig,\n IReactivePropConfig\n} from '../interfaces/index';\n\nconst getDefaultAdapterConfig = (): IAdapterConfig => {\n const reactive = getDefaultAdapterProps()\n .filter(({ type }) => type === AdapterPropType.Reactive)\n .reduce(\n (acc, { name, value }) => {\n acc[name] = {\n source: value,\n emit: (source, val) => (source as Reactive<unknown>).set(val)\n };\n return acc;\n },\n {} as Record<string, IReactivePropConfig>\n );\n\n return { mock: false, reactive };\n};\n\nexport class DatasourceGeneric<Data> implements IDatasourceConstructed<Data> {\n get: DatasourceGet<Data>;\n settings?: Settings<Data>;\n devSettings?: DevSettings;\n adapter: IAdapter<Data>;\n\n constructor(datasource: IDatasourceParams<Data>, config?: IAdapterConfig) {\n this.get = datasource.get;\n this.settings = datasource.settings;\n this.devSettings = datasource.devSettings;\n const adapterContext = new AdapterContext(config || { mock: false });\n this.adapter = adapterContext as unknown as IAdapter<Data>;\n }\n\n // todo: should it be published?\n dispose(): void {\n reactiveConfigStorage.delete(this.adapter.id);\n wantedStorage.delete(this.adapter.id);\n }\n}\n\nexport const makeDatasource = <DSClassType = typeof DatasourceGeneric>(\n getAdapterConfig?: () => IAdapterConfig\n) =>\n class<Data = unknown> extends DatasourceGeneric<Data> {\n constructor(datasource: IDatasourceParams<Data>) {\n const config =\n typeof getAdapterConfig === 'function' ? getAdapterConfig() : getDefaultAdapterConfig();\n super(datasource, config);\n }\n } as DSClassType;\n\nexport const Datasource = makeDatasource();\n"]}
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/classes/datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAajD,IAAM,uBAAuB,GAAG;IAC9B,IAAM,QAAQ,GAAG,sBAAsB,EAAE;SACtC,MAAM,CAAC,UAAC,EAAQ;YAAN,IAAI,UAAA;QAAO,OAAA,IAAI,KAAK,eAAe,CAAC,QAAQ;IAAjC,CAAiC,CAAC;SACvD,MAAM,CACL,UAAC,GAAG,EAAE,EAAe;YAAb,IAAI,UAAA,EAAE,KAAK,WAAA;QACjB,GAAG,CAAC,IAAI,CAAC,GAAG;YACV,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,UAAC,MAAM,EAAE,GAAG,IAAK,OAAC,MAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAtC,CAAsC;SAC9D,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAyC,CAC1C,CAAC;IAEJ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,UAAA,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF;IAME,2BAAY,UAAmC,EAAE,MAAuB;QACtE,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,cAA2C,CAAC;IAC7D,CAAC;IAED,gCAAgC;IAChC,mCAAO,GAAP;QACE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IACH,wBAAC;AAAD,CAAC,AAnBD,IAmBC;;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,UAC5B,gBAAuC;IAEvC,OAAA;QAA8B,2BAAuB;QACnD,iBAAY,UAAmC;YAC7C,IAAM,MAAM,GACV,OAAO,gBAAgB,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;YAC1F,OAAA,MAAK,YAAC,UAAU,EAAE,MAAM,CAAC,SAAC;QAC5B,CAAC;QACH,cAAC;IAAD,CAAC,AAND,CAA8B,iBAAiB,EAM/B;AANhB,CAMgB,CAAC;AAEnB,MAAM,CAAC,IAAM,UAAU,GAAG,cAAc,EAAE,CAAC","sourcesContent":["import { AdapterContext } from './adapter/context';\r\nimport { reactiveConfigStorage, AdapterPropType, getDefaultAdapterProps } from './adapter/props';\r\nimport { wantedStorage } from './adapter/wanted';\r\nimport { Reactive } from './reactive';\r\nimport {\r\n IDatasourceParams,\r\n IDatasourceConstructed,\r\n DatasourceGet,\r\n Settings,\r\n DevSettings,\r\n IAdapter,\r\n IAdapterConfig,\r\n IReactivePropConfig\r\n} from '../interfaces/index';\r\n\r\nconst getDefaultAdapterConfig = (): IAdapterConfig => {\r\n const reactive = getDefaultAdapterProps()\r\n .filter(({ type }) => type === AdapterPropType.Reactive)\r\n .reduce(\r\n (acc, { name, value }) => {\r\n acc[name] = {\r\n source: value,\r\n emit: (source, val) => (source as Reactive<unknown>).set(val)\r\n };\r\n return acc;\r\n },\r\n {} as Record<string, IReactivePropConfig>\r\n );\r\n\r\n return { mock: false, reactive };\r\n};\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: IDatasourceParams<Data>, config?: IAdapterConfig) {\r\n this.get = datasource.get;\r\n this.settings = datasource.settings;\r\n this.devSettings = datasource.devSettings;\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 // todo: should it be published?\r\n dispose(): void {\r\n reactiveConfigStorage.delete(this.adapter.id);\r\n wantedStorage.delete(this.adapter.id);\r\n }\r\n}\r\n\r\nexport const makeDatasource = <DSClassType = typeof DatasourceGeneric>(\r\n getAdapterConfig?: () => IAdapterConfig\r\n) =>\r\n class<Data = unknown> extends DatasourceGeneric<Data> {\r\n constructor(datasource: IDatasourceParams<Data>) {\r\n const config =\r\n typeof getAdapterConfig === 'function' ? getAdapterConfig() : getDefaultAdapterConfig();\r\n super(datasource, config);\r\n }\r\n } as DSClassType;\r\n\r\nexport const Datasource = makeDatasource();\r\n"]}
|