/*
  options.target         - name of the target object
  options.global         - target is the global object
  options.stat           - export as static methods of target
  options.proto          - export as prototype methods of target
  options.real           - real prototype method for the `pure` version
  options.forced         - export even if the native feature is available
  options.bind           - bind methods to the target, required for the `pure` version
  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe         - use the simple assignment of property instead of delete + defineProperty
  options.sham           - add a flag to not completely full polyfills
  options.enumerable     - export as enumerable property
  options.dontCallGetSet - prevent calling a getter on target
  options.name           - the .name of the function if it does not match the key
*/

/* , options */

/* binding */

/* empty */

/* eslint class-methods-use-this: ["error", { "exceptMethods": ["generateId"] }] */

/* eslint class-methods-use-this: ["error", { "exceptMethods": ["getName", "getType"] }] */

/* eslint comma-dangle: ["error", "never"] */

/* eslint import/no-cycle: "off" */

/* eslint no-console: ["error", { allow: ["log", "groupCollapsed", "groupEnd"] }] */

/* eslint no-console: ["error", { allow: ["warn", "error"] }] */

/* eslint no-else-return: off */

/* eslint no-param-reassign: "error" */

/* eslint no-param-reassign: off */

/* eslint no-underscore-dangle: [2, { "allow": ["_id"] }] */

/* eslint use-isnan: "error" */

/* eslint-disable es/no-array-prototype-keys -- safe */

/* eslint-disable es/no-object-getownpropertynames -- safe */

/* eslint-disable es/no-symbol -- required for testing */

/* eslint-disable es/no-symbol -- safe */

/* eslint-disable no-proto -- safe */

/* eslint-disable no-self-assign -- prototype methods protection */

/* eslint-enable no-self-assign -- prototype methods protection */

/* eslint-env es6 */

/* global ActiveXObject -- old IE, WSH */

/* global Deno -- Deno case */

/* global Worker */

/* global localStorage */

/* global localforage */

/* global window:true */

/* harmony default export */

/* ignore */

/* istanbul ignore else */

/* istanbul ignore next */

/* jshint evil:true */

/* jshint unused:false */

/* provided dependency */

/*#__PURE__*/

/**
   * Add event to store
   *
   * @param  {String} key
   * @param  {Function} cb
   * @return {void}
   *
   * @api public
   */

/**
   * Add item to container
   *
   * @param  {String} id
   * @param  {Any} value
   * @return {void}
   *
   * @api public
   */

/**
   * Add item to local storage
   *
   * @param  {String} key
   * @param  {String} value
   * @return {Promise<Any>}
   *
   * @api public
   */

/**
   * Add item to store
   *
   * @param  {String} key
   * @param  {String} value
   * @return {Promise<Any>}
   *
   * @api public
   */

/**
   * Add some necessary properties
   *
   * @param  {ITask[]} tasks
   * @return {Function}
   *
   * @api public
   */

/**
   * Add some necessary properties
   *
   * @param  {String} id
   * @return {ITask}
   *
   * @api public
   */

/**
   * Check a task whether exists by job id
   *
   * @param  {String} tag
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Check a task whether exists by job id
   *
   * @return {Boolean}
   *
   * @api public
   * @param id
   */

/**
   * Check a task whether exists by tag
   *
   * @param  {String} tag
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Check config property
   *
   * @param  {String} name
   * @return {any}
   *
   * @api public
   */

/**
   * Check event in store
   *
   * @param  {String} key
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Check if the channel working
   *
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Check item in container
   *
   * @param  {String} id
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Check whether there is any task
   *
   * @return {Booelan}
   *
   * @api public
   */

/**
   * Checker of event keys
   *
   * @param  {String} key
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Clear tasks with given channel name
   *
   * @param  {String} channel
   * @return {void}
   *
   * @api public
   */

/**
   * Compose collection name by suffix
   *
   * @param  {String} suffix
   * @return {String}
   *
   * @api public
   */

/**
   * Create a new channel
   *
   * @param  {String} task
   * @return {Queue} channel
   *
   * @api public
   */

/**
   * Create a new channel
   *
   * @return {Queue} channel
   *
   * @api public
   * @param channel
   */

/**
   * Create event
   *
   * @param  {String} key
   * @param  {Function} cb
   * @return {void}
   *
   * @api public
   */

/**
   * Create new job to channel
   *
   * @param  {Object} task
   * @return {String|Boolean} job
   *
   * @api public
   */

/**
   * Create new jobs to channel
   *
   * @param  {Object} task
   * @return {String|Boolean} job
   *
   * @api public
   */

/**
   * Fetch tasks from storage with ordered
   *
   * @return {any[]}
   *
   * @api public
   */

/**
   * Generate unique id
   *
   * @return {String}
   *
   * @api public
   */

/**
   * Get a config
   *
   * @param  {String} name
   * @return {any}
   *
   * @api public
   */

/**
   * Get all config
   *
   * @param  {String} name
   * @return {IConfig[]}
   *
   * @api public
   */

/**
   * Get all items from container
   *
   * @return {Object}
   *
   * @api public
   */

/**
   * Get all tasks
   *
   * @return {Any[]}
   *
   * @api public
   */

/**
   * Get channel instance by channel name
   *
   * @param  {String} name
   * @return {Queue}
   *
   * @api public
   */

/**
   * Get channel name
   *
   * @return {String} channel name
   *
   * @api public
   */

/**
   * Get collection
   *
   * @param  {String} name
   * @return {String}
   *
   * @api private
   */

/**
   * Get event name by parse key
   *
   * @param  {String} key
   * @return {String}
   *
   * @api public
   */

/**
   * Get event type by parse key
   *
   * @param  {String} key
   * @return {String}
   *
   * @api public
   */

/**
   * Get item from container
   *
   * @param  {String} id
   * @return {Any}
   *
   * @api public
   */

/**
   * Get prefix of channel collection
   *
   * @return {String}
   *
   * @api public
   */

/**
   * Get task count
   *
   * @return {Number}
   *
   * @api public
   */

/**
   * Get task count by tag
   *
   * @param  {String} tag
   * @return {Array<ITask>}
   *
   * @api public
   */

/**
   * Item checker in local storage
   *
   * @param  {String} key
   * @return {Promise<Boolean>}
   *
   * @api public
   */

/**
   * Item checker in store
   *
   * @param  {String} key
   * @return {Promise<Boolean>}
   *
   * @api public
   */

/**
   * Merge continers
   *
   * @param  {Object} data
   * @return {void}
   *
   * @api public
   */

/**
   * Merge two config object
   *
   * @param  {String} name
   * @return {void}
   *
   * @api public
   */

/**
   * Process next job
   *
   * @return {void}
   *
   * @api public
   */

/**
   * Remove a config
   *
   * @param  {String} name
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Remove all items from container
   *
   * @return {void}
   *
   * @api public
   */

/**
   * Remove all tasks from channel
   *
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Remove all tasks from channel by tag
   *
   * @param  {String} tag
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Remove item
   *
   * @param  {String} key
   * @return {Promise<Any>}
   *
   * @api public
   */

/**
   * Remove item from container
   *
   * @param  {String} id
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Remove task from storage
   *
   * @param  {String} id
   * @return {string}
   *
   * @api public
   */

/**
   * Remove tasks from storage
   *
   * @param  {String} id
   * @return {string}
   *
   * @api public
   */

/**
   * Run event via it's key
   *
   * @param  {String} key
   * @param  {Any} args
   * @return {void}
   *
   * @api public
   */

/**
   * Run wildcard events
   *
   * @param  {String} key
   * @param  {String} actionKey
   * @param  {Any} args
   * @return {void}
   *
   * @api public
   */

/**
   * Save tasks to storage
   *
   * @param  {ITask} task
   * @return {String|Boolean}
   *
   * @api public
   */

/**
   * Select a channel by channel name
   *
   * @param  {String} name
   * @return {StorageCapsule}
   *
   * @api public
   */

/**
   * Set action events
   *
   * @param  {String} key
   * @param  {Function} cb
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config debug value
   *
   * @param  {Boolean} val
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config limit value
   *
   * @param  {Number} val
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config prefix value
   *
   * @param  {String} val
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config priciple value
   *
   * @param  {String} val
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config timeout value
   *
   * @param  {Number} val
   * @return {Void}
   *
   * @api public
   */

/**
   * Set config to global config reference
   *
   * @param  {String} name
   * @param  {Any} value
   * @return {void}
   *
   * @api public
   */

/**
   * Start queue listener
   *
   * @return {Boolean} job
   *
   * @api public
   */

/**
   * Stop queue listener after end of current task
   *
   * @return {Void}
   *
   * @api public
   */

/**
   * Stop queue listener including current task
   *
   * @return {Void}
   *
   * @api public
   */

/**
   * Take item from local storage by key
   *
   * @param  {String} key
   * @return {Promise<ITask>} (array)
   *
   * @api public
   */

/**
   * Take item from store by key
   *
   * @param  {String} key
   * @return {Promise<ITask>} (array)
   *
   * @api public
   */

/**
   * Task limit checker
   *
   * @return {Boolean}
   *
   * @api public
   */

/**
   * Update channel store with batch tasks.
   *
   * @return {string}
   *   The value. This annotation can be used for type hinting purposes.
   */

/**
   * Update channel store.
   *
   * @return {string}
   *   The value. This annotation can be used for type hinting purposes.
   */

/**
   * execute next job in storage job buffer
   *
   * @return {any[]}
   */

/**
   * get all direct child nodes of given path which are not yet processed
   * NOTE: have progress info on each returned node
   */

/**
   * make sure storage actions are executed (and finished) in the order they are called
   *
   * @return {any[]}
   *
   * @api public
   */

/**
 * Added workers dependencies
 *
 * @param  {Object} driver
 * @return {Void}
 *
 * @api public
 */

/**
 * Built the getter function. Supports getter style functions
 *
 * @param {String} str
 * @return {String}
 * @api private
 */

/**
 * Check function type
 *
 * @param  {Function} func
 * @return {Boolean}
 *
 * @api public
 */

/**
 * Check method in initiated class
 *
 * @param  {Class} instance
 * @param  {String} method
 * @return {Boolean}
 *
 * @api public
 */

/**
 * Check property in object
 *
 * @param  {Object} obj
 * @return {Boolean}
 *
 * @api public
 */

/**
 * Checks whether a task is replicable or not
 * Context: Channel
 *
 * @param {ITask} task
 * @return {boolean}
 *
 * @api private
 */

/**
 * Class event luancher helper
 * Context: Channel
 *
 * @param {string} name
 * @param {IWorker} worker
 * @param {any} args
 * @return {boolean|void}
 *
 * @api private
 */

/**
 * Clear tasks by it's tags
 *
 * @param  {ITask} task
 * @return {Boolean}
 *
 * @api public
 */

/**
 * Convert `obj` to a `Function`.
 *
 * @param {Mixed} obj
 * @return {Function}
 * @api private
 */

/**
 * Convert `object` to a function.
 *
 * @param {Object} object
 * @return {Function}
 * @api private
 */

/**
 * Convert `re` to a function.
 *
 * @param {RegExp} re
 * @return {Function}
 * @api private
 */

/**
 * Convert property `str` to a function.
 *
 * @param {String} str
 * @return {Function}
 * @api private
 */

/**
 * Default to strict equality.
 *
 * @param {Mixed} val
 * @return {Function}
 * @api private
 */

/**
 * Events dispatcher helper
 * Context: Channel
 *
 * @param {ITask} task
 * @param {string} type
 * @return {void}
 *
 * @api private
 */

/**
 * Expose `toFunction()`.
 */

/**
 * Failed job handler
 * Context: Channel
 *
 * @param {ITask} task
 * @return {ITask} job
 * @return {Function}
 *
 * @api private
 */

/**
 * Get unfreezed tasks by the filter function
 * Context: Channel
 *
 * @return {ITask}
 *
 * @api private
 */

/**
 * Global Names
 */

/**
 * Group `arr` with callback `fn(val, i)`.
 *
 * @param {Array} arr
 * @param {Function|String} fn or prop
 * @return {Array}
 * @api public
 */

/**
 * Helper of the lock task of the current job
 * Context: Channel
 *
 * @param {ITask} task
 * @return {boolean}
 *
 * @api private
 */

/**
 * Job handler helper
 * Context: Channel
 *
 * @param {ITask} task
 * @param {IJob} worker
 * @param {IWorker} workerInstance
 * @return {Function}
 *
 * @api private
 */

/**
 * Log proxy helper
 * Context: Channel
 *
 * @return {void}
 * @param {string} key
 * @param {string} data
 * @param {boolean} cond
 *
 * @api private
 */

/**
 * Map with prefix `str`.
 */

/**
 * Mimic negative lookbehind to avoid problems with nested properties.
 *
 * See: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
 *
 * @param {String} prop
 * @param {String} str
 * @param {String} val
 * @return {String}
 * @api private
 */

/**
 * Module Dependencies
 */

/**
 * Module dependencies.
 */

/**
 * New task save helper
 * Context: Channel
 *
 * @param {ITask} task
 * @return {string|boolean}
 *
 * @api private
 */

/**
 * New tasks save helper
 * Context: Channel
 *
 * @param {Array} tasks
 * @return {string|boolean}
 *
 * @api private
 */

/**
 * Process handler of retried job
 * Context: Channel
 *
 * @param {ITask} task
 * @param {IWorker} worker
 * @return {boolean}
 *
 * @api private
 */

/**
 * Process handler of succeeded job
 * Context: Channel
 *
 * @param {ITask} task
 * @return {void}
 *
 * @api private
 */

/**
 * Queue stopper helper
 * Context: Channel
 *
 * @return {void}
 *
 * @api private
 */

/**
 * Register worker
 *
 * @param  {Array<IJob>} jobs
 * @return {Void}
 *
 * @api public
 */

/**
 * Remove some tasks by some conditions
 *
 * @param  {Function} func
 * @return {Boolean}
 *
 * @api public
 */

/**
 * Return `str` with `props` mapped with `fn`.
 *
 * @param {String} str
 * @param {Array} props
 * @param {Function} fn
 * @return {String}
 * @api private
 */

/**
 * Return immediate identifiers in `str`.
 *
 * @param {String} str
 * @return {Array}
 * @api private
 */

/**
 * Return immediate identifiers parsed from `str`.
 *
 * @param {String} str
 * @param {String|Function} map function or prefix
 * @return {Array}
 * @api public
 */

/**
 * Return unique array.
 *
 * @param {Array} arr
 * @return {Array}
 * @api private
 */

/**
 * Set the status to false of queue
 * Context: Channel
 *
 * @return {void}
 *
 * @api private
 */

/**
 * Setup a custom driver
 *
 * @param  {Object} driver
 * @return {Void}
 *
 * @api public
 */

/**
 * Shortens function the db belongsto current channel
 * Context: Channel
 *
 * @return {StorageCapsule}
 *
 * @api private
 */

/**
 * Sort by fifo
 *
 * @param  {ITask} a
 * @param  {ITask} b
 * @return {Any}
 *
 * @api public
 */

/**
 * Sort by lifo
 *
 * @param  {ITask} a
 * @param  {ITask} b
 * @return {Any}
 *
 * @api public
 */

/**
 * Succeed job handler
 * Context: Channel
 *
 * @param {ITask} task
 * @param {IWorker} worker
 * @return {Function}
 *
 * @api private
 */

/**
 * Task priority controller helper
 * Context: Channel
 *
 * @return {ITask}
 * @param {ITask} task
 *
 * @api private
 */

/**
 * Task remove helper
 * Context: Channel
 *
 * @param {string} id
 * @return {boolean}
 *
 * @api private
 */

/**
 * Timeout creator helper
 * Context: Channel
 *
 * @return {number}
 *
 * @api private
 */

/**
 * Update task's retry value
 * Context: Channel
 *
 * @param {ITask} task
 * @param {IWorker} worker
 * @return {ITask}
 *
 * @api private
 */

/***/

/*, values */

/*istanbul ignore else*/

/*istanbul ignore next:cant test*/

//   console.log(this, id);

//   console.log(this, value);

//   https://github.com/zloirock/core-js/issues/1128

//   https://github.com/zloirock/core-js/issues/1130

// (for example, `DOMQuad` and similar in FF41-)

// 2 ** 53 - 1 == 9007199254740991

// 25.4.3.1 Promise(executor)

// Array#includes uses SameValueZero equality algorithm

// Array#indexOf ignores holes, Array#includes - not

// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`

// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should

// CONCATENATED MODULE: ../../Filemanager/js/CreateFolderTask.js

// CONCATENATED MODULE: ../../Filemanager/js/UploadFileTask.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/adapters/index.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/adapters/inmemory.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/adapters/localforage.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/adapters/localstorage.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/channel.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/config.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/console.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/container.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/enum/config.data.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/enum/log.events.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/event.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/helpers.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/index.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/queue.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/storage-capsule.js

// CONCATENATED MODULE: ./node_modules/storage-based-queue/lib/utils.js

// CONCATENATED MODULE: ./ux/file/UploadChannel.js

// CONCATENATED MODULE: ./ux/file/UploadQueue.js

// Call the handle function in worker and get promise instance.

// Check the channel limit.

// Check worker instance and route the process via instance

// Chrome 38 Symbol has incorrect toString conversion

// Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances

// Create a timeout for start the queue

// Create a worker instance

// Deno throws a ReferenceError on `location` access without `--location` flag

// Detect IE8's incomplete defineProperty implementation

// Detect correctness of subclassing with @@species support

// Don't enum bug & hidden keys

// ESM COMPAT FLAG

// EXPORTS

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/json/stringify.js

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/values.js

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/parse-int.js

// EXTERNAL MODULE: ./node_modules/localforage/dist/localforage.js

// EXTERNAL MODULE: ./node_modules/pseudo-worker/polyfill.js

// FF44- legacy iterators case

// Generate a log message

// Get next task

// Get worker with handler name

// Helper for a popular repeating case of the spec:

// IE8 returns string on undefined

// IE8- don't enum bug keys

// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).

// If limit is exceeded, does not insert new task

// If process rejected, current task will be removed from task pool in worker.

// JSON[@@toStringTag] property

// Let integer be ? ToInteger(index).

// MS Edge converts symbol values to JSON as {}

// NOTE: uploadId is the original/client path. fileName might have changed (e.g. number prefix of efile)

// NOTE: we don't use the uploadId here as fileName might have changed (e.g. number prefix of efile)

// Nashorn bug:

// Node.js 0.8-

// Node.js 0.9+ & IE10+ has setImmediate, otherwise:

// Note: Native worker parameters can not be class or function.

// Promise.resolve without an argument throws an error in LG WebOS 2

// Safari 8 has buggy iterators w/o `next`

// Set @@toStringTag to native iterators

// Set function to worker onmessage event for handle the repsonse of worker.

// Should return true or false value (boolean) that end of the all process

// TODO: Remove from `core-js@4`

// TODO: Remove this module from `core-js@4` since it's replaced to module below

// TODO: Remove this module from `core-js@4` since it's split to modules listed below

// Terminate browser worker.

// Thanks to IE8 for its funny defineProperty

// This is custom worker class.

// Unhandled rejections tracking support, NodeJS Promise without it fails @@species test

// V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables

// V8 ~ Chrome 36-

// V8 ~ Chrome 45- bug

// WSH

// We can't detect it synchronously, so just check versions

// We can't use @@species feature detection in V8 since it causes

// We can't use this feature detection in V8 since it causes

// We need Promise#{ catch, finally } in the pure version for preventing prototype pollution

// Works with __proto__ only. Old v8 can't work with null proto objects.

// Wrap the worker with promise class.

// `%ArrayIteratorPrototype%.next` method

// `%IteratorPrototype%[@@iterator]()` method

// `%StringIteratorPrototype%.next` method

// `AggregateError` constructor

// `Array.isArray` method

// `Array.prototype.concat` method

// `Array.prototype.entries` method

// `Array.prototype.every` method

// `Array.prototype.filterReject` method

// `Array.prototype.filter` method

// `Array.prototype.findIndex` method

// `Array.prototype.find` method

// `Array.prototype.forEach` method

// `Array.prototype.includes` method

// `Array.prototype.indexOf` method

// `Array.prototype.keys` method

// `Array.prototype.map` method

// `Array.prototype.some` method

// `Array.prototype.values` method

// `Array.prototype[@@iterator]` method

// `ArraySpeciesCreate` abstract operation

// `Assert: IsCallable(argument) is true`

// `Assert: IsConstructor(argument) is true`

// `Assert: Type(argument) is Object`

// `CreateArrayIterator` internal method

// `CreateIterResultObject` abstract operation

// `Date.now` method

// `Function#toString` throws on some built-it function in some legacy engines

// `GetMethod` abstract operation

// `HasOwnProperty` abstract operation

// `InstallErrorCause` abstract operation

// `IsArray` abstract operation

// `IsCallable` abstract operation

// `IsConstructor` abstract operation

// `JSON.stringify` method

// `LengthOfArrayLike` abstract operation

// `Math.trunc` method

// `NewPromiseCapability` abstract operation

// `Object.create` method

// `Object.defineProperties` method

// `Object.defineProperty` method

// `Object.entries` method

// `Object.getOwnPropertyDescriptor` method

// `Object.getOwnPropertyNames` method

// `Object.getOwnPropertySymbols` method

// `Object.getPrototypeOf` method

// `Object.keys` method

// `Object.prototype.propertyIsEnumerable` method implementation

// `Object.prototype.toString` method implementation

// `Object.setPrototypeOf` method

// `Object.values` method

// `OrdinaryToPrimitive` abstract operation

// `Promise.allSettled` method

// `Promise.all` method

// `Promise.any` method

// `Promise.prototype.catch` method

// `Promise.prototype.finally` method

// `Promise.prototype.then` method

// `Promise.race` method

// `Promise.reject` method

// `Promise.resolve` method

// `Promise.try` method

// `RequireObjectCoercible` abstract operation

// `SpeciesConstructor` abstract operation

// `String.prototype.at` method

// `String.prototype.codePointAt` method

// `String.prototype.trim` method

// `String.prototype.{ trimLeft, trimStart }` methods

// `String.prototype.{ trimRight, trimEnd }` methods

// `String.prototype[@@iterator]` method

// `Symbol.asyncDispose` well-known symbol

// `Symbol.asyncIterator` well-known symbol

// `Symbol.dispose` well-known symbol

// `Symbol.for` method

// `Symbol.hasInstance` well-known symbol

// `Symbol.isConcatSpreadable` well-known symbol

// `Symbol.iterator` well-known symbol

// `Symbol.keyFor` method

// `Symbol.matchAll` well-known symbol

// `Symbol.match` well-known symbol

// `Symbol.matcher` well-known symbol

// `Symbol.metadataKey` well-known symbol

// `Symbol.metadata` well-known symbol

// `Symbol.observable` well-known symbol

// `Symbol.patternMatch` well-known symbol

// `Symbol.prototype[@@toPrimitive]` method

// `Symbol.prototype[@@toStringTag]` property

// `Symbol.replace` well-known symbol

// `Symbol.search` well-known symbol

// `Symbol.species` well-known symbol

// `Symbol.split` well-known symbol

// `Symbol.toPrimitive` well-known symbol

// `Symbol.toStringTag` well-known symbol

// `Symbol.unscopables` well-known symbol

// `Symbol` constructor

// `ToIntegerOrInfinity` abstract operation

// `ToLength` abstract operation

// `ToObject` abstract operation

// `ToPrimitive` abstract operation

// `ToPropertyKey` abstract operation

// `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances

// `parseInt` method

// `webpack` dev server bug on IE global methods - use bind(fn, global)

// a part of `ArraySpeciesCreate` abstract operation

// a string of all valid unicode whitespaces

// add "__proto__" for Object.getPrototypeOf polyfill

// add a flag to not completely full polyfills

// add task to storage

// add(value: any): void {

// all object keys, includes non-enumerable and symbols

// also except WebOS Webkit https://github.com/zloirock/core-js/issues/898

// argumentsList[@@iterator] is %ArrayProto_values%

// avoid memory leak

// bind methods to global for calling from export context

// binding loopHandler function to setTimeout

// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339

// but their correct versions are not interesting for us

// can throw

// check on default Array iterator

// constructor polyfill

// contains in native

// create new timeout for process a job in queue

// cross-realm fallback

// custom each loop is for IE8 support

// define iterator

// delete lock property for next process

// deoptimization and performance degradation

// deoptimization and serious performance degradation

// dispacth custom after event

// dispacth custom before event

// dispacth custom retry event

// dispatch job process after runs a task but only non error jobs

// eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing

// eslint-disable-next-line es/no-array-isarray -- safe

// eslint-disable-next-line es/no-function-prototype-bind -- safe

// eslint-disable-next-line es/no-global-this -- safe

// eslint-disable-next-line es/no-json -- safe

// eslint-disable-next-line es/no-math-trunc -- safe

// eslint-disable-next-line es/no-object-create -- safe

// eslint-disable-next-line es/no-object-defineproperties -- safe

// eslint-disable-next-line es/no-object-defineproperty -- required for testing

// eslint-disable-next-line es/no-object-defineproperty -- safe

// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe

// eslint-disable-next-line es/no-object-getownpropertynames -- safe

// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing

// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe

// eslint-disable-next-line es/no-object-getprototypeof -- required for testing

// eslint-disable-next-line es/no-object-getprototypeof -- safe

// eslint-disable-next-line es/no-object-hasown -- safe

// eslint-disable-next-line es/no-object-keys -- safe

// eslint-disable-next-line es/no-object-setprototypeof -- safe

// eslint-disable-next-line es/no-reflect -- safe

// eslint-disable-next-line no-console -- safe

// eslint-disable-next-line no-new-func -- fallback

// eslint-disable-next-line no-prototype-builtins -- safe

// eslint-disable-next-line no-restricted-globals -- safe

// eslint-disable-next-line no-self-compare -- NaN check

// eslint-disable-next-line no-underscore-dangle

// eslint-disable-next-line no-unused-vars

// eslint-disable-next-line no-unused-vars -- required for .length

// eslint-disable-next-line no-unused-vars -- required for `.length`

// eslint-disable-next-line no-unused-vars,prefer-rest-params

// eslint-disable-next-line no-useless-catch

// eslint-disable-next-line no-void

// eslint-disable-next-line prefer-spread

// eslint-disable-next-line unicorn/no-thenable -- required for testing

// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing

// every

// example: createdAt etc.

// export additional methods

// export native or implementation

// export real prototype methods

// export virtual prototype methods

// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window

// fallback for non-array-like ES3 and non-enumerable old V8 strings

// filter

// filterReject

// find

// findIndex

// fire job after event

// fire job before event

// fix Array.prototype.{ values, @@iterator }.name in V8 / FF

// fix native

// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods

// freeze(id: string): void {

// get all tasks current channel's

// getting tag from ES6+ `Object.prototype.toString`

// go ahead to retry process

// go ahead to success process

// https://bugs.chromium.org/p/chromium/issues/detail?id=830565

// https://bugs.chromium.org/p/v8/issues/detail?id=3334

// https://github.com/mathiasbynens/String.prototype.at

// https://github.com/tc39/proposal-Symbol-description

// https://github.com/tc39/proposal-array-filtering

// https://github.com/tc39/proposal-async-explicit-resource-management

// https://github.com/tc39/proposal-decorator-metadata

// https://github.com/tc39/proposal-decorators

// https://github.com/tc39/proposal-explicit-resource-management

// https://github.com/tc39/proposal-observable

// https://github.com/tc39/proposal-pattern-matching

// https://github.com/tc39/proposal-promise-try

// https://github.com/zloirock/core-js/issues/475

// https://github.com/zloirock/core-js/issues/640

// https://github.com/zloirock/core-js/issues/677

// https://github.com/zloirock/core-js/issues/679

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028

// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next

// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator

// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next

// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot

// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec

// https://tc39.es/ecma262/#sec-aggregate-error-constructor

// https://tc39.es/ecma262/#sec-array.isarray

// https://tc39.es/ecma262/#sec-array.prototype-@@iterator

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables

// https://tc39.es/ecma262/#sec-array.prototype.concat

// https://tc39.es/ecma262/#sec-array.prototype.entries

// https://tc39.es/ecma262/#sec-array.prototype.every

// https://tc39.es/ecma262/#sec-array.prototype.filter

// https://tc39.es/ecma262/#sec-array.prototype.find

// https://tc39.es/ecma262/#sec-array.prototype.findIndex

// https://tc39.es/ecma262/#sec-array.prototype.foreach

// https://tc39.es/ecma262/#sec-array.prototype.includes

// https://tc39.es/ecma262/#sec-array.prototype.indexof

// https://tc39.es/ecma262/#sec-array.prototype.keys

// https://tc39.es/ecma262/#sec-array.prototype.map

// https://tc39.es/ecma262/#sec-array.prototype.some

// https://tc39.es/ecma262/#sec-array.prototype.values

// https://tc39.es/ecma262/#sec-arrayspeciescreate

// https://tc39.es/ecma262/#sec-createarrayiterator

// https://tc39.es/ecma262/#sec-createiterresultobject

// https://tc39.es/ecma262/#sec-createmappedargumentsobject

// https://tc39.es/ecma262/#sec-createunmappedargumentsobject

// https://tc39.es/ecma262/#sec-date.now

// https://tc39.es/ecma262/#sec-getmethod

// https://tc39.es/ecma262/#sec-hasownproperty

// https://tc39.es/ecma262/#sec-isarray

// https://tc39.es/ecma262/#sec-iscallable

// https://tc39.es/ecma262/#sec-isconstructor

// https://tc39.es/ecma262/#sec-json-@@tostringtag

// https://tc39.es/ecma262/#sec-json.stringify

// https://tc39.es/ecma262/#sec-lengthofarraylike

// https://tc39.es/ecma262/#sec-math.trunc

// https://tc39.es/ecma262/#sec-newpromisecapability

// https://tc39.es/ecma262/#sec-object.create

// https://tc39.es/ecma262/#sec-object.defineproperties

// https://tc39.es/ecma262/#sec-object.defineproperty

// https://tc39.es/ecma262/#sec-object.entries

// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor

// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors

// https://tc39.es/ecma262/#sec-object.getownpropertynames

// https://tc39.es/ecma262/#sec-object.getownpropertysymbols

// https://tc39.es/ecma262/#sec-object.getprototypeof

// https://tc39.es/ecma262/#sec-object.keys

// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable

// https://tc39.es/ecma262/#sec-object.prototype.tostring

// https://tc39.es/ecma262/#sec-object.setprototypeof

// https://tc39.es/ecma262/#sec-object.values

// https://tc39.es/ecma262/#sec-ordinarytoprimitive

// https://tc39.es/ecma262/#sec-parseint-string-radix

// https://tc39.es/ecma262/#sec-promise.all

// https://tc39.es/ecma262/#sec-promise.allsettled

// https://tc39.es/ecma262/#sec-promise.any

// https://tc39.es/ecma262/#sec-promise.prototype.catch

// https://tc39.es/ecma262/#sec-promise.prototype.finally

// https://tc39.es/ecma262/#sec-promise.prototype.then

// https://tc39.es/ecma262/#sec-promise.race

// https://tc39.es/ecma262/#sec-promise.reject

// https://tc39.es/ecma262/#sec-promise.resolve

// https://tc39.es/ecma262/#sec-requireobjectcoercible

// https://tc39.es/ecma262/#sec-speciesconstructor

// https://tc39.es/ecma262/#sec-string.prototype-@@iterator

// https://tc39.es/ecma262/#sec-string.prototype.codepointat

// https://tc39.es/ecma262/#sec-string.prototype.trim

// https://tc39.es/ecma262/#sec-string.prototype.trimend

// https://tc39.es/ecma262/#sec-string.prototype.trimstart

// https://tc39.es/ecma262/#sec-symbol-constructor

// https://tc39.es/ecma262/#sec-symbol.asynciterator

// https://tc39.es/ecma262/#sec-symbol.for

// https://tc39.es/ecma262/#sec-symbol.hasinstance

// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable

// https://tc39.es/ecma262/#sec-symbol.iterator

// https://tc39.es/ecma262/#sec-symbol.keyfor

// https://tc39.es/ecma262/#sec-symbol.match

// https://tc39.es/ecma262/#sec-symbol.matchall

// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive

// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag

// https://tc39.es/ecma262/#sec-symbol.replace

// https://tc39.es/ecma262/#sec-symbol.search

// https://tc39.es/ecma262/#sec-symbol.species

// https://tc39.es/ecma262/#sec-symbol.split

// https://tc39.es/ecma262/#sec-symbol.toprimitive

// https://tc39.es/ecma262/#sec-symbol.tostringtag

// https://tc39.es/ecma262/#sec-symbol.unscopables

// https://tc39.es/ecma262/#sec-tointegerorinfinity

// https://tc39.es/ecma262/#sec-tolength

// https://tc39.es/ecma262/#sec-toobject

// https://tc39.es/ecma262/#sec-toprimitive

// https://tc39.es/ecma262/#sec-topropertykey

// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause

// if custom storage driver exists, setup it

// if has any dependency in dependencies, get it

// if index not found, return false

// if running any job, stop it

// immediate such as "> 20"

// in old Chrome, versions of V8 isn't V8 = Chrome / 10

// iterable DOM collections

// lock the current task for prevent race condition

// make `.constructor === Promise` work for native promise-based APIs

// make `Promise#then` return a polyfilled `Promise` for native promise-based APIs

// make `instanceof Promise` work for native promise-based APIs

// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`

// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`

// map

// merge existing object with given update object

// mimic negative lookbehind to avoid problems with nested properties

// modern engines have queueMicrotask method

// next index

// old engines have not location.origin

// optimisation for array iterators

// optional / simple context binding

// pass activity to the log service.

// prepare all properties before save

// preparing worker dependencies

// save channel name to this class with symbolic key

// save tasks

// show console

// so check `userAgent` even if `.v8` exists, but 0

// some

// start queue again

// start the native worker by passing task parameters and dependencies.

// target

// the purpose here is to prevent cocurrent operation in same channel

// then return the timeout instance

// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper

// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346

// toObject with fallback for non-array-like ES3 strings

// try next queue job

// update retry value

// we can't check .prototype since constructors produced by .bind haven't it

// we can't use just `it == null` since of `document.all` special case

// with adding support of @@isConcatSpreadable and @@species

// workaround of WebKit ~ iOS Safari 10.1 bug

// }

//check if we assume an array

//need to update grid with existing node id

//to handle objects with null prototypes (too edge case?)

//todo : paused and resume feature might be implemented in the future , but we stop and cancel upload task for now
