Socket
Socket
Sign inDemoInstall

@rpldy/uploader

Package Overview
Dependencies
Maintainers
1
Versions
102
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rpldy/uploader - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0-rc.0

lib/cjs/queue/processAbort.js

1

lib/cjs/batchItemsSender.js

@@ -20,2 +20,3 @@ "use strict";

//TODO (v2): Load using enhancer to allow using uploader (tree-shake) that doesnt import the defualt sender if not needed
const reportItemsProgress = (items, completed, loaded, trigger) => {

@@ -22,0 +23,0 @@ items.forEach(item => {

3

lib/cjs/defaults.js

@@ -32,4 +32,5 @@ "use strict";

sendWithFormData: true,
formDataAllowUndefined: false
formDataAllowUndefined: false,
fastAbortThreshold: 100
});
exports.DEFAULT_OPTIONS = DEFAULT_OPTIONS;

@@ -6,3 +6,3 @@ "use strict";

});
exports.triggerUploaderBatchEvent = exports.removePendingBatches = exports.preparePendingForUpload = exports.loadNewBatchForItem = exports.isNewBatchStarting = exports.incrementBatchFinishedCounter = exports.getIsItemBatchReady = exports.getIsBatchFinalized = exports.getBatchFromState = exports.getBatchFromItemId = exports.getBatchDataFromItemId = exports.failBatchForItem = exports.detachRecycledFromPreviousBatch = exports.cleanUpFinishedBatches = exports.cancelBatchForItem = void 0;
exports.triggerUploaderBatchEvent = exports.removePendingBatches = exports.removeBatchItems = exports.preparePendingForUpload = exports.loadNewBatchForItem = exports.isNewBatchStarting = exports.incrementBatchFinishedCounter = exports.getIsBatchReady = exports.getIsBatchFinalized = exports.getBatchFromState = exports.getBatchFromItemId = exports.getBatchDataFromItemId = exports.finalizeBatch = exports.failBatchForItem = exports.detachRecycledFromPreviousBatch = exports.clearBatchData = exports.cleanUpFinishedBatches = exports.cancelBatchForItem = void 0;

@@ -63,9 +63,27 @@ var _shared = require("@rpldy/shared");

exports.removeBatchItems = removeBatchItems;
const removeBatch = (queue, batchId) => {
queue.updateState(state => {
delete state.batches[batchId];
delete state.itemQueue[batchId];
const batchQueueIndex = state.batchQueue.indexOf(batchId);
if (~batchQueueIndex) {
state.batchQueue.splice(batchQueueIndex, 1);
}
});
};
const finalizeBatch = (queue, batchId, eventType) => {
const finalizeBatch = function (queue, batchId, eventType) {
let finalState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _shared.BATCH_STATES.FINISHED;
let additionalInfo = arguments.length > 4 ? arguments[4] : undefined;
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = finalState;
if (additionalInfo) {
batch.additionalInfo = additionalInfo;
}
});
triggerUploaderBatchEvent(queue, batchId, eventType);

@@ -75,2 +93,4 @@ triggerUploaderBatchEvent(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_FINALIZE);

exports.finalizeBatch = finalizeBatch;
const cancelBatchForItem = (queue, itemId) => {

@@ -84,7 +104,3 @@ if ((0, _itemHelpers.getIsItemExists)(queue, itemId)) {

queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = _shared.BATCH_STATES.CANCELLED;
});
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_CANCEL);
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_CANCEL, _shared.BATCH_STATES.CANCELLED);
removeBatchItems(queue, batchId);

@@ -108,8 +124,3 @@ removeBatch(queue, batchId);

queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = _shared.BATCH_STATES.ERROR;
batch.additionalInfo = err.message;
});
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_ERROR);
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_ERROR, _shared.BATCH_STATES.ERROR, err.message);
removeBatchItems(queue, batchId);

@@ -154,51 +165,48 @@ removeBatch(queue, batchId);

const cleanUpFinishedBatches = queue => {
//TODO: schedule clean up on requestIdle
const state = queue.getState();
Object.keys(state.batches).forEach(batchId => {
const {
batch,
finishedCounter
} = state.batches[batchId];
const {
orgItemCount
} = batch; //shouldnt be the case, but if wasnt cleaned before, it will now
(0, _shared.scheduleIdleWork)(() => {
const state = queue.getState();
Object.keys(state.batches).forEach(batchId => {
const {
batch,
finishedCounter
} = state.batches[batchId];
const {
orgItemCount
} = batch; //shouldnt be the case, but if wasnt cleaned before, it will now
const alreadyFinalized = getIsBatchFinalized(batch);
const alreadyFinalized = getIsBatchFinalized(batch);
if (orgItemCount === finishedCounter) {
//batch may not be updated with completed/loaded with 100% values
if (!alreadyFinalized && batch.completed !== 100) {
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.completed = 100;
batch.loaded = batch.items.reduce((res, _ref3) => {
let {
loaded
} = _ref3;
return res + loaded;
}, 0);
}); //ensure we trigger progress event with completed = 100 for all items
if (orgItemCount === finishedCounter) {
//batch may not be updated with completed/loaded with 100% values
if (!alreadyFinalized && batch.completed !== 100) {
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.completed = 100;
batch.loaded = batch.items.reduce((res, _ref3) => {
let {
loaded
} = _ref3;
return res + loaded;
}, 0);
}); //ensure we trigger progress event with completed = 100 for all items
triggerUploaderBatchEvent(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_PROGRESS);
}
triggerUploaderBatchEvent(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_PROGRESS);
}
queue.updateState(state => {
const batch = getBatchFromState(state, batchId); //set batch state to FINISHED before triggering event and removing it from queue
queue.updateState(state => {
if (state.currentBatch === batchId) {
state.currentBatch = null;
}
});
batch.state = alreadyFinalized ? batch.state : _shared.BATCH_STATES.FINISHED;
_shared.logger.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${batch.id}`);
if (state.currentBatch === batchId) {
state.currentBatch = null;
if (!alreadyFinalized) {
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_FINISH);
}
});
_shared.logger.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${batch.id}`);
if (!alreadyFinalized) {
finalizeBatch(queue, batchId, _consts.UPLOADER_EVENTS.BATCH_FINISH);
removeBatchItems(queue, batchId);
removeBatch(queue, batchId);
}
removeBatchItems(queue, batchId);
removeBatch(queue, batchId);
}
});
});

@@ -227,8 +235,8 @@ };

const getIsItemBatchReady = (queue, itemId) => {
const batch = getBatchFromItemId(queue, itemId);
const getIsBatchReady = (queue, batchId) => {
const batch = getBatchFromState(queue.getState(), batchId);
return BATCH_READY_STATES.includes(batch.state);
};
exports.getIsItemBatchReady = getIsItemBatchReady;
exports.getIsBatchReady = getIsBatchReady;

@@ -307,3 +315,41 @@ const detachRecycledFromPreviousBatch = (queue, item) => {

const getIsBatchFinalized = batch => BATCH_FINISHED_STATES.includes(batch.state);
/**
* As this is a data-destructive method it is meant
* to be used with fast-abort ONLY. Not for any regular operation
*/
exports.getIsBatchFinalized = getIsBatchFinalized;
exports.getIsBatchFinalized = getIsBatchFinalized;
const clearBatchData = (queue, batchId) => {
queue.updateState(state => {
const {
items
} = getBatchFromState(state, batchId);
delete state.batches[batchId];
delete state.itemQueue[batchId];
const indx = state.batchQueue.indexOf(batchId);
if (~indx) {
state.batchQueue.splice(indx, 1);
}
if (state.currentBatch === batchId) {
state.currentBatch = null;
}
items.forEach(_ref6 => {
let {
id
} = _ref6;
delete state.items[id];
const activeIndex = state.activeIds.indexOf(id);
if (~activeIndex) {
state.activeIds.splice(activeIndex, 1);
}
});
});
};
exports.clearBatchData = clearBatchData;

@@ -6,3 +6,3 @@ "use strict";

});
exports.isItemBelongsToBatch = exports.getIsItemExists = exports.finalizeItem = void 0;
exports.getIsItemExists = exports.finalizeItem = void 0;

@@ -12,2 +12,6 @@ const finalizeItem = function (queue, id) {

queue.updateState(state => {
const {
batchId
} = state.items[id] || {};
if (delItem) {

@@ -17,6 +21,6 @@ delete state.items[id];

const index = state.itemQueue.indexOf(id);
const index = batchId ? state.itemQueue[batchId].indexOf(id) : -1;
if (~index) {
state.itemQueue.splice(index, 1);
state.itemQueue[batchId].splice(index, 1);
}

@@ -34,8 +38,4 @@

const isItemBelongsToBatch = (queue, itemId, batchId) => queue.getState().items[itemId].batchId === batchId;
exports.isItemBelongsToBatch = isItemBelongsToBatch;
const getIsItemExists = (queue, itemId) => !!queue.getState().items[itemId];
exports.getIsItemExists = getIsItemExists;

@@ -14,4 +14,2 @@ "use strict";

var _itemHelpers = require("./itemHelpers");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -30,11 +28,25 @@

items = state.items;
let index = 0,
nextId = itemQueue[index]; //find item that isnt already in an active request and belongs to a "ready" batch
let nextItemId = null,
batchIndex = 0,
itemIndex = 0,
batchId = state.batchQueue[batchIndex];
while (nextId && (getIsItemInActiveRequest(queue, nextId) || !(0, _batchHelpers.getIsItemBatchReady)(queue, nextId) || !getIsItemReady(items[nextId]))) {
index += 1;
nextId = itemQueue[index];
while (batchId && !nextItemId) {
if ((0, _batchHelpers.getIsBatchReady)(queue, batchId)) {
nextItemId = itemQueue[batchId][itemIndex];
while (nextItemId && (getIsItemInActiveRequest(queue, nextItemId) || !getIsItemReady(items[nextItemId]))) {
itemIndex += 1;
nextItemId = itemQueue[batchId][itemIndex];
}
}
if (!nextItemId) {
batchIndex += 1;
batchId = state.batchQueue[batchIndex];
itemIndex = 0;
}
}
return nextId ? index : -1;
return nextItemId ? [batchId, itemIndex] : null;
};

@@ -45,21 +57,18 @@

const getNextIdGroup = queue => {
const itemQueue = queue.getState().itemQueue;
const nextItemIndex = findNextItemIndex(queue);
let nextId = itemQueue[nextItemIndex],
const state = queue.getState(),
itemQueue = state.itemQueue,
[nextBatchId, nextItemIndex] = findNextItemIndex(queue) || [];
let nextId = nextBatchId && ~nextItemIndex ? itemQueue[nextBatchId][nextItemIndex] : null,
nextGroup;
if (nextId) {
const batchData = (0, _batchHelpers.getBatchDataFromItemId)(queue, nextId);
const batchId = batchData.batch.id,
groupMax = batchData.batchOptions.maxGroupSize || 0;
const {
batchOptions
} = state.batches[nextBatchId],
groupMax = batchOptions.maxGroupSize || 0;
if (batchData.batchOptions.grouped && groupMax > 1) {
nextGroup = [];
let nextBelongsToSameBatch = true; //dont group files from different batches
if (batchOptions.grouped && groupMax > 1) {
const batchItems = state.itemQueue[nextBatchId]; //get ids for the batch with max of configured group size (never mix items from different batches)
while (nextGroup.length < groupMax && nextBelongsToSameBatch) {
nextGroup.push(nextId);
nextId = itemQueue[nextItemIndex + nextGroup.length];
nextBelongsToSameBatch = nextId && (0, _itemHelpers.isItemBelongsToBatch)(queue, nextId, batchId);
}
nextGroup = batchItems.slice(nextItemIndex, nextItemIndex + groupMax);
} else {

@@ -66,0 +75,0 @@ nextGroup = [nextId];

@@ -16,10 +16,6 @@ "use strict";

var abortMethods = _interopRequireWildcard(require("./abort"));
var _processAbort = require("./processAbort");
var _batchHelpers = require("./batchHelpers");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -32,3 +28,4 @@

} = (0, _simpleState.default)({
itemQueue: [],
itemQueue: {},
batchQueue: [],
currentBatch: null,

@@ -58,3 +55,2 @@ batches: {},

state.items[item.id] = item;
state.itemQueue.push(item.id);
});

@@ -82,6 +78,6 @@ };

if (batchItems) {
const [completed, loaded] = batchItems.reduce((res, _ref) => {
const [completed, loaded] = batchItems.reduce((res, _ref2) => {
let {
id
} = _ref;
} = _ref2;
//getting data from state.items since in dev the wrapped state.batch.items and state.items aren't the same objects

@@ -126,3 +122,22 @@ const {

sender,
handleItemProgress
handleItemProgress,
clearAllUploads: () => {
queueState.updateState(state => {
state.itemQueue = {};
state.batchQueue = [];
state.currentBatch = null;
state.batches = {};
state.items = {};
state.activeIds = [];
});
},
clearBatchUploads: batchId => {
(0, _shared.scheduleIdleWork)(() => {
_shared.logger.debugLog(`uploader.queue: started scheduled work to clear batch uploads (${batchId})`);
if (getState().batches[batchId]) {
(0, _batchHelpers.clearBatchData)(queueState, batchId);
}
});
}
};

@@ -154,2 +169,9 @@

};
state.batchQueue.push(batch.id);
state.itemQueue[batch.id] = batch.items.map(_ref => {
let {
id
} = _ref;
return id;
});
});

@@ -159,10 +181,22 @@ batch.items.forEach(add);

},
abortItem: id => {
return abortMethods.abortItem(queueState, id, _processQueueNext.default);
abortItem: function () {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return (0, _processAbort.processAbortItem)(queueState, ...args);
},
abortBatch: id => {
abortMethods.abortBatch(queueState, id, _processQueueNext.default);
abortBatch: function () {
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return (0, _processAbort.processAbortBatch)(queueState, ...args);
},
abortAll: () => {
abortMethods.abortAll(queueState, _processQueueNext.default);
abortAll: function () {
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return (0, _processAbort.processAbortAll)(queueState, ...args);
},

@@ -169,0 +203,0 @@ clearPendingBatches: () => {

@@ -12,2 +12,4 @@ "use strict";

var _abort = _interopRequireDefault(require("@rpldy/abort"));
var _processor = _interopRequireDefault(require("./processor"));

@@ -19,2 +21,4 @@

var _composeEnhancers = _interopRequireDefault(require("./composeEnhancers"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -31,2 +35,16 @@

const getComposedEnhancer = extEnhancer => (0, _composeEnhancers.default)((0, _abort.default)(), extEnhancer);
const getEnhancedUploader = (uploader, options, triggerWithUnwrap, setEnhancerTime) => {
//TODO: create raw-uploader without internal enhancers (while default-uploader will use abort & xhr-sender enhancers)
//TODO need new mechanism for registering and using internal methods (abort, send)
//that will use enhancers but also allow overrides without having to expose the method in the options (ie: send)
const enhancer = options.enhancer ? getComposedEnhancer(options.enhancer) : (0, _abort.default)();
setEnhancerTime(true);
const enhanced = enhancer(uploader, triggerWithUnwrap);
setEnhancerTime(false); //graceful handling for enhancer forgetting to return uploader
return enhanced || uploader;
};
const createUploader = options => {

@@ -45,41 +63,2 @@ counter += 1;

const update = updateOptions => {
//TODO: updating concurrent and maxConcurrent means we need to update the processor - not supported yet!
uploaderOptions = (0, _shared.merge)({}, uploaderOptions, updateOptions); //need deep merge for destination
return uploader;
};
const add = (files, addOptions) => {
const processOptions = (0, _shared.merge)({}, uploaderOptions, addOptions);
if (processOptions.clearPendingOnAdd) {
clearPending();
}
return processor.addNewBatch(files, uploader.id, processOptions).then(batch => {
let resultP;
if (batch.items.length) {
resultP = processor.runCancellable(_consts.UPLOADER_EVENTS.BATCH_ADD, batch, processOptions).then(isCancelled => {
if (!isCancelled) {
_shared.logger.debugLog(`uploady.uploader [${uploader.id}]: new items added - auto upload =
${String(processOptions.autoUpload)}`, batch.items);
if (processOptions.autoUpload) {
processor.process(batch);
}
} else {
batch.state = _shared.BATCH_STATES.CANCELLED;
triggerWithUnwrap(_consts.UPLOADER_EVENTS.BATCH_CANCEL, batch);
}
});
} else {
_shared.logger.debugLog(`uploady.uploader: no items to add. batch ${batch.id} is empty. check fileFilter if this isn't intended`);
}
return resultP;
});
};
const clearPending = () => {

@@ -102,4 +81,39 @@ processor.clearPendingBatches();

id: uploaderId,
update,
add,
update: updateOptions => {
//TODO: updating concurrent and maxConcurrent means we need to update the processor - not supported yet!
uploaderOptions = (0, _shared.merge)({}, uploaderOptions, updateOptions); //need deep merge for destination
return uploader;
},
add: (files, addOptions) => {
const processOptions = (0, _shared.merge)({}, uploaderOptions, addOptions);
if (processOptions.clearPendingOnAdd) {
clearPending();
}
return processor.addNewBatch(files, uploader.id, processOptions).then(batch => {
let resultP;
if (batch.items.length) {
resultP = processor.runCancellable(_consts.UPLOADER_EVENTS.BATCH_ADD, batch, processOptions).then(isCancelled => {
if (!isCancelled) {
_shared.logger.debugLog(`uploady.uploader [${uploader.id}]: new items added - auto upload =
${String(processOptions.autoUpload)}`, batch.items);
if (processOptions.autoUpload) {
processor.process(batch);
}
} else {
batch.state = _shared.BATCH_STATES.CANCELLED;
triggerWithUnwrap(_consts.UPLOADER_EVENTS.BATCH_CANCEL, batch);
}
});
} else {
_shared.logger.debugLog(`uploady.uploader: no items to add. batch ${batch.id} is empty. check fileFilter if this isn't intended`);
}
return resultP;
});
},
upload: uploadOptions => {

@@ -146,13 +160,7 @@ processor.processPendingBatches(uploadOptions);

const cancellable = (0, _shared.triggerCancellable)(triggerWithUnwrap);
if (uploaderOptions.enhancer) {
enhancerTime = true;
const enhanced = uploaderOptions.enhancer(uploader, triggerWithUnwrap);
enhancerTime = false; //graceful handling for enhancer forgetting to return uploader
uploader = enhanced || uploader;
}
const processor = (0, _processor.default)(triggerWithUnwrap, cancellable, uploaderOptions, uploader.id);
return (0, _shared.devFreeze)(uploader);
const enhancedUploader = getEnhancedUploader(uploader, uploaderOptions, triggerWithUnwrap, state => {
enhancerTime = state;
});
const processor = (0, _processor.default)(triggerWithUnwrap, cancellable, uploaderOptions, enhancedUploader.id);
return (0, _shared.devFreeze)(enhancedUploader);
};

@@ -159,0 +167,0 @@

import { isFunction, logger, throttle } from "@rpldy/shared";
import addLife from "@rpldy/life-events";
import addLife from "@rpldy/life-events"; //TODO (v2): Load using enhancer to allow using uploader (tree-shake) that doesnt import the defualt sender if not needed
import defaultSend from "@rpldy/sender";

@@ -4,0 +5,0 @@ import { PROGRESS_DELAY, SENDER_EVENTS } from "./consts";

@@ -20,3 +20,4 @@ import { devFreeze } from "@rpldy/shared";

sendWithFormData: true,
formDataAllowUndefined: false
formDataAllowUndefined: false,
fastAbortThreshold: 100
});

@@ -1,2 +0,2 @@

import { BATCH_STATES, logger, merge, FILE_STATES } from "@rpldy/shared";
import { BATCH_STATES, logger, merge, FILE_STATES, scheduleIdleWork } from "@rpldy/shared";
import { unwrap } from "@rpldy/simple-state";

@@ -47,6 +47,22 @@ import { UPLOADER_EVENTS } from "../consts";

delete state.batches[batchId];
delete state.itemQueue[batchId];
const batchQueueIndex = state.batchQueue.indexOf(batchId);
if (~batchQueueIndex) {
state.batchQueue.splice(batchQueueIndex, 1);
}
});
};
const finalizeBatch = (queue, batchId, eventType) => {
const finalizeBatch = function (queue, batchId, eventType) {
let finalState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : BATCH_STATES.FINISHED;
let additionalInfo = arguments.length > 4 ? arguments[4] : undefined;
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = finalState;
if (additionalInfo) {
batch.additionalInfo = additionalInfo;
}
});
triggerUploaderBatchEvent(queue, batchId, eventType);

@@ -63,7 +79,3 @@ triggerUploaderBatchEvent(queue, batchId, UPLOADER_EVENTS.BATCH_FINALIZE);

logger.debugLog("uploady.uploader.batchHelpers: cancelling batch: ", batchId);
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = BATCH_STATES.CANCELLED;
});
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_CANCEL);
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_CANCEL, BATCH_STATES.CANCELLED);
removeBatchItems(queue, batchId);

@@ -83,8 +95,3 @@ removeBatch(queue, batchId);

});
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.state = BATCH_STATES.ERROR;
batch.additionalInfo = err.message;
});
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_ERROR);
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_ERROR, BATCH_STATES.ERROR, err.message);
removeBatchItems(queue, batchId);

@@ -123,50 +130,47 @@ removeBatch(queue, batchId);

const cleanUpFinishedBatches = queue => {
//TODO: schedule clean up on requestIdle
const state = queue.getState();
Object.keys(state.batches).forEach(batchId => {
const {
batch,
finishedCounter
} = state.batches[batchId];
const {
orgItemCount
} = batch; //shouldnt be the case, but if wasnt cleaned before, it will now
scheduleIdleWork(() => {
const state = queue.getState();
Object.keys(state.batches).forEach(batchId => {
const {
batch,
finishedCounter
} = state.batches[batchId];
const {
orgItemCount
} = batch; //shouldnt be the case, but if wasnt cleaned before, it will now
const alreadyFinalized = getIsBatchFinalized(batch);
const alreadyFinalized = getIsBatchFinalized(batch);
if (orgItemCount === finishedCounter) {
//batch may not be updated with completed/loaded with 100% values
if (!alreadyFinalized && batch.completed !== 100) {
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.completed = 100;
batch.loaded = batch.items.reduce((res, _ref3) => {
let {
loaded
} = _ref3;
return res + loaded;
}, 0);
}); //ensure we trigger progress event with completed = 100 for all items
if (orgItemCount === finishedCounter) {
//batch may not be updated with completed/loaded with 100% values
if (!alreadyFinalized && batch.completed !== 100) {
queue.updateState(state => {
const batch = getBatchFromState(state, batchId);
batch.completed = 100;
batch.loaded = batch.items.reduce((res, _ref3) => {
let {
loaded
} = _ref3;
return res + loaded;
}, 0);
}); //ensure we trigger progress event with completed = 100 for all items
triggerUploaderBatchEvent(queue, batchId, UPLOADER_EVENTS.BATCH_PROGRESS);
}
triggerUploaderBatchEvent(queue, batchId, UPLOADER_EVENTS.BATCH_PROGRESS);
}
queue.updateState(state => {
const batch = getBatchFromState(state, batchId); //set batch state to FINISHED before triggering event and removing it from queue
queue.updateState(state => {
if (state.currentBatch === batchId) {
state.currentBatch = null;
}
});
logger.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${batch.id}`);
batch.state = alreadyFinalized ? batch.state : BATCH_STATES.FINISHED;
if (state.currentBatch === batchId) {
state.currentBatch = null;
if (!alreadyFinalized) {
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_FINISH);
}
});
logger.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${batch.id}`);
if (!alreadyFinalized) {
finalizeBatch(queue, batchId, UPLOADER_EVENTS.BATCH_FINISH);
removeBatchItems(queue, batchId);
removeBatch(queue, batchId);
}
removeBatchItems(queue, batchId);
removeBatch(queue, batchId);
}
});
});

@@ -191,4 +195,4 @@ };

const getIsItemBatchReady = (queue, itemId) => {
const batch = getBatchFromItemId(queue, itemId);
const getIsBatchReady = (queue, batchId) => {
const batch = getBatchFromState(queue.getState(), batchId);
return BATCH_READY_STATES.includes(batch.state);

@@ -261,3 +265,39 @@ };

const getIsBatchFinalized = batch => BATCH_FINISHED_STATES.includes(batch.state);
/**
* As this is a data-destructive method it is meant
* to be used with fast-abort ONLY. Not for any regular operation
*/
export { loadNewBatchForItem, isNewBatchStarting, cancelBatchForItem, getBatchFromItemId, getBatchDataFromItemId, cleanUpFinishedBatches, triggerUploaderBatchEvent, getIsItemBatchReady, getBatchFromState, detachRecycledFromPreviousBatch, preparePendingForUpload, removePendingBatches, incrementBatchFinishedCounter, getIsBatchFinalized, failBatchForItem };
const clearBatchData = (queue, batchId) => {
queue.updateState(state => {
const {
items
} = getBatchFromState(state, batchId);
delete state.batches[batchId];
delete state.itemQueue[batchId];
const indx = state.batchQueue.indexOf(batchId);
if (~indx) {
state.batchQueue.splice(indx, 1);
}
if (state.currentBatch === batchId) {
state.currentBatch = null;
}
items.forEach(_ref6 => {
let {
id
} = _ref6;
delete state.items[id];
const activeIndex = state.activeIds.indexOf(id);
if (~activeIndex) {
state.activeIds.splice(activeIndex, 1);
}
});
});
};
export { loadNewBatchForItem, isNewBatchStarting, cancelBatchForItem, getBatchFromItemId, getBatchDataFromItemId, cleanUpFinishedBatches, triggerUploaderBatchEvent, getIsBatchReady, getBatchFromState, detachRecycledFromPreviousBatch, preparePendingForUpload, removePendingBatches, incrementBatchFinishedCounter, getIsBatchFinalized, failBatchForItem, finalizeBatch, removeBatchItems, clearBatchData };
const finalizeItem = function (queue, id) {
let delItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
queue.updateState(state => {
const {
batchId
} = state.items[id] || {};
if (delItem) {

@@ -8,6 +12,6 @@ delete state.items[id];

const index = state.itemQueue.indexOf(id);
const index = batchId ? state.itemQueue[batchId].indexOf(id) : -1;
if (~index) {
state.itemQueue.splice(index, 1);
state.itemQueue[batchId].splice(index, 1);
}

@@ -23,6 +27,4 @@

const isItemBelongsToBatch = (queue, itemId, batchId) => queue.getState().items[itemId].batchId === batchId;
const getIsItemExists = (queue, itemId) => !!queue.getState().items[itemId];
export { finalizeItem, isItemBelongsToBatch, getIsItemExists };
export { finalizeItem, getIsItemExists };
import { FILE_STATES, logger } from "@rpldy/shared";
import processBatchItems from "./processBatchItems";
import { getBatchDataFromItemId, getIsItemBatchReady, isNewBatchStarting, cancelBatchForItem, loadNewBatchForItem, failBatchForItem } from "./batchHelpers";
import { isItemBelongsToBatch } from "./itemHelpers";
import { getIsBatchReady, isNewBatchStarting, cancelBatchForItem, loadNewBatchForItem, failBatchForItem } from "./batchHelpers";

@@ -17,32 +16,43 @@ const getIsItemInActiveRequest = (queue, itemId) => {

items = state.items;
let index = 0,
nextId = itemQueue[index]; //find item that isnt already in an active request and belongs to a "ready" batch
let nextItemId = null,
batchIndex = 0,
itemIndex = 0,
batchId = state.batchQueue[batchIndex];
while (nextId && (getIsItemInActiveRequest(queue, nextId) || !getIsItemBatchReady(queue, nextId) || !getIsItemReady(items[nextId]))) {
index += 1;
nextId = itemQueue[index];
while (batchId && !nextItemId) {
if (getIsBatchReady(queue, batchId)) {
nextItemId = itemQueue[batchId][itemIndex];
while (nextItemId && (getIsItemInActiveRequest(queue, nextItemId) || !getIsItemReady(items[nextItemId]))) {
itemIndex += 1;
nextItemId = itemQueue[batchId][itemIndex];
}
}
if (!nextItemId) {
batchIndex += 1;
batchId = state.batchQueue[batchIndex];
itemIndex = 0;
}
}
return nextId ? index : -1;
return nextItemId ? [batchId, itemIndex] : null;
};
export const getNextIdGroup = queue => {
const itemQueue = queue.getState().itemQueue;
const nextItemIndex = findNextItemIndex(queue);
let nextId = itemQueue[nextItemIndex],
const state = queue.getState(),
itemQueue = state.itemQueue,
[nextBatchId, nextItemIndex] = findNextItemIndex(queue) || [];
let nextId = nextBatchId && ~nextItemIndex ? itemQueue[nextBatchId][nextItemIndex] : null,
nextGroup;
if (nextId) {
const batchData = getBatchDataFromItemId(queue, nextId);
const batchId = batchData.batch.id,
groupMax = batchData.batchOptions.maxGroupSize || 0;
const {
batchOptions
} = state.batches[nextBatchId],
groupMax = batchOptions.maxGroupSize || 0;
if (batchData.batchOptions.grouped && groupMax > 1) {
nextGroup = [];
let nextBelongsToSameBatch = true; //dont group files from different batches
if (batchOptions.grouped && groupMax > 1) {
const batchItems = state.itemQueue[nextBatchId]; //get ids for the batch with max of configured group size (never mix items from different batches)
while (nextGroup.length < groupMax && nextBelongsToSameBatch) {
nextGroup.push(nextId);
nextId = itemQueue[nextItemIndex + nextGroup.length];
nextBelongsToSameBatch = nextId && isItemBelongsToBatch(queue, nextId, batchId);
}
nextGroup = batchItems.slice(nextItemIndex, nextItemIndex + groupMax);
} else {

@@ -49,0 +59,0 @@ nextGroup = [nextId];

@@ -1,7 +0,7 @@

import { logger, hasWindow, isFunction } from "@rpldy/shared";
import { logger, hasWindow, isFunction, scheduleIdleWork } from "@rpldy/shared";
import createState from "@rpldy/simple-state";
import { SENDER_EVENTS, UPLOADER_EVENTS } from "../consts";
import processQueueNext from "./processQueueNext";
import * as abortMethods from "./abort";
import { detachRecycledFromPreviousBatch, getBatchFromState, preparePendingForUpload, removePendingBatches } from "./batchHelpers";
import { processAbortItem, processAbortBatch, processAbortAll } from "./processAbort";
import { detachRecycledFromPreviousBatch, getBatchFromState, preparePendingForUpload, removePendingBatches, clearBatchData } from "./batchHelpers";

@@ -13,3 +13,4 @@ const createUploaderQueue = (options, trigger, cancellable, sender, uploaderId) => {

} = createState({
itemQueue: [],
itemQueue: {},
batchQueue: [],
currentBatch: null,

@@ -39,3 +40,2 @@ batches: {},

state.items[item.id] = item;
state.itemQueue.push(item.id);
});

@@ -63,6 +63,6 @@ };

if (batchItems) {
const [completed, loaded] = batchItems.reduce((res, _ref) => {
const [completed, loaded] = batchItems.reduce((res, _ref2) => {
let {
id
} = _ref;
} = _ref2;
//getting data from state.items since in dev the wrapped state.batch.items and state.items aren't the same objects

@@ -107,3 +107,22 @@ const {

sender,
handleItemProgress
handleItemProgress,
clearAllUploads: () => {
queueState.updateState(state => {
state.itemQueue = {};
state.batchQueue = [];
state.currentBatch = null;
state.batches = {};
state.items = {};
state.activeIds = [];
});
},
clearBatchUploads: batchId => {
scheduleIdleWork(() => {
logger.debugLog(`uploader.queue: started scheduled work to clear batch uploads (${batchId})`);
if (getState().batches[batchId]) {
clearBatchData(queueState, batchId);
}
});
}
};

@@ -135,2 +154,9 @@

};
state.batchQueue.push(batch.id);
state.itemQueue[batch.id] = batch.items.map(_ref => {
let {
id
} = _ref;
return id;
});
});

@@ -140,10 +166,22 @@ batch.items.forEach(add);

},
abortItem: id => {
return abortMethods.abortItem(queueState, id, processQueueNext);
abortItem: function () {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return processAbortItem(queueState, ...args);
},
abortBatch: id => {
abortMethods.abortBatch(queueState, id, processQueueNext);
abortBatch: function () {
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return processAbortBatch(queueState, ...args);
},
abortAll: () => {
abortMethods.abortAll(queueState, processQueueNext);
abortAll: function () {
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return processAbortAll(queueState, ...args);
},

@@ -150,0 +188,0 @@ clearPendingBatches: () => {

import addLife, { createLifePack } from "@rpldy/life-events";
import { BATCH_STATES, invariant, logger, triggerCancellable, devFreeze, merge, clone } from "@rpldy/shared";
import getAbortEnhancer from "@rpldy/abort";
import getProcessor from "./processor";
import { UPLOADER_EVENTS } from "./consts";
import { getMandatoryOptions, deepProxyUnwrap } from "./utils";
import composeEnhancers from "./composeEnhancers";
const EVENT_NAMES = Object.values(UPLOADER_EVENTS);

@@ -11,2 +13,16 @@ const EXT_OUTSIDE_ENHANCER_TIME = "Uploady - uploader extensions can only be registered by enhancers",

const getComposedEnhancer = extEnhancer => composeEnhancers(getAbortEnhancer(), extEnhancer);
const getEnhancedUploader = (uploader, options, triggerWithUnwrap, setEnhancerTime) => {
//TODO: create raw-uploader without internal enhancers (while default-uploader will use abort & xhr-sender enhancers)
//TODO need new mechanism for registering and using internal methods (abort, send)
//that will use enhancers but also allow overrides without having to expose the method in the options (ie: send)
const enhancer = options.enhancer ? getComposedEnhancer(options.enhancer) : getAbortEnhancer();
setEnhancerTime(true);
const enhanced = enhancer(uploader, triggerWithUnwrap);
setEnhancerTime(false); //graceful handling for enhancer forgetting to return uploader
return enhanced || uploader;
};
const createUploader = options => {

@@ -23,41 +39,2 @@ counter += 1;

const update = updateOptions => {
//TODO: updating concurrent and maxConcurrent means we need to update the processor - not supported yet!
uploaderOptions = merge({}, uploaderOptions, updateOptions); //need deep merge for destination
return uploader;
};
const add = (files, addOptions) => {
const processOptions = merge({}, uploaderOptions, addOptions);
if (processOptions.clearPendingOnAdd) {
clearPending();
}
return processor.addNewBatch(files, uploader.id, processOptions).then(batch => {
let resultP;
if (batch.items.length) {
resultP = processor.runCancellable(UPLOADER_EVENTS.BATCH_ADD, batch, processOptions).then(isCancelled => {
if (!isCancelled) {
logger.debugLog(`uploady.uploader [${uploader.id}]: new items added - auto upload =
${String(processOptions.autoUpload)}`, batch.items);
if (processOptions.autoUpload) {
processor.process(batch);
}
} else {
batch.state = BATCH_STATES.CANCELLED;
triggerWithUnwrap(UPLOADER_EVENTS.BATCH_CANCEL, batch);
}
});
} else {
logger.debugLog(`uploady.uploader: no items to add. batch ${batch.id} is empty. check fileFilter if this isn't intended`);
}
return resultP;
});
};
const clearPending = () => {

@@ -80,4 +57,39 @@ processor.clearPendingBatches();

id: uploaderId,
update,
add,
update: updateOptions => {
//TODO: updating concurrent and maxConcurrent means we need to update the processor - not supported yet!
uploaderOptions = merge({}, uploaderOptions, updateOptions); //need deep merge for destination
return uploader;
},
add: (files, addOptions) => {
const processOptions = merge({}, uploaderOptions, addOptions);
if (processOptions.clearPendingOnAdd) {
clearPending();
}
return processor.addNewBatch(files, uploader.id, processOptions).then(batch => {
let resultP;
if (batch.items.length) {
resultP = processor.runCancellable(UPLOADER_EVENTS.BATCH_ADD, batch, processOptions).then(isCancelled => {
if (!isCancelled) {
logger.debugLog(`uploady.uploader [${uploader.id}]: new items added - auto upload =
${String(processOptions.autoUpload)}`, batch.items);
if (processOptions.autoUpload) {
processor.process(batch);
}
} else {
batch.state = BATCH_STATES.CANCELLED;
triggerWithUnwrap(UPLOADER_EVENTS.BATCH_CANCEL, batch);
}
});
} else {
logger.debugLog(`uploady.uploader: no items to add. batch ${batch.id} is empty. check fileFilter if this isn't intended`);
}
return resultP;
});
},
upload: uploadOptions => {

@@ -122,15 +134,9 @@ processor.processPendingBatches(uploadOptions);

const cancellable = triggerCancellable(triggerWithUnwrap);
if (uploaderOptions.enhancer) {
enhancerTime = true;
const enhanced = uploaderOptions.enhancer(uploader, triggerWithUnwrap);
enhancerTime = false; //graceful handling for enhancer forgetting to return uploader
uploader = enhanced || uploader;
}
const processor = getProcessor(triggerWithUnwrap, cancellable, uploaderOptions, uploader.id);
return devFreeze(uploader);
const enhancedUploader = getEnhancedUploader(uploader, uploaderOptions, triggerWithUnwrap, state => {
enhancerTime = state;
});
const processor = getProcessor(triggerWithUnwrap, cancellable, uploaderOptions, enhancedUploader.id);
return devFreeze(enhancedUploader);
};
export default createUploader;
/*! For license information please see rpldy-core.umd.min.js.LICENSE.txt */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.rpldy=t():e.rpldy=t()}(globalThis,(()=>(()=>{var e,t={SKjz:(e,t,n)=>{"use strict";n.d(t,{uZ:()=>A,ZP:()=>R});var r=n("P2gF");const o=(0,r.ZV)({allowRegisterNonExistent:!0,canAddEvents:!0,canRemoveEvents:!0,collectStats:!1}),a=(e,t)=>{if(!(0,r.mf)(e))throw new Error(`'${t}' is not a valid function`)},s=e=>void 0===e,i=Symbol.for("__le__"),l=Symbol.for("__le__pack__"),d=e=>e?e[i]:null,c=e=>{const t=d(e);if(!t)throw new Error("Didnt find LE internal object. Something very bad happened!");return t},u=e=>!!d(e),p=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];a(n,"cb");const o=c(e);if(!o.options.allowRegisterNonExistent&&!~o.events.indexOf(t))throw new Error(`Cannot register for event ${t.toString()} that wasn't already defined (allowRegisterNonExistent = false)`);const s=o.registry[t]||[];return s.find((e=>e.cb===n))||(s.push({name:t,cb:n,once:r}),o.registry[t]=s),()=>S.call(e,t,n)},h=(e,t)=>{const n=c(e).registry;return t?n[t]?n[t].slice():[]:Object.values(n).flat()},g={on:function(e,t){return p(this,e,t)},once:function(e,t){return p(this,e,t,!0)},off:S,getEvents:function(){return c(this).events.slice()}},f=()=>Object.entries(g).reduce(((e,t)=>{let[n,r]=t;return e[n]={value:r},e}),{}),m={trigger:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const a=h(this,e);let i;if(a.length){var d;let t;1===n.length&&!0===(null===(d=n[0])||void 0===d?void 0:d[l])&&(t=n[0].resolve()),i=a.map((r=>{let o;return r.once&&v(this,e,r.cb),o=t?r.cb(...t):n.length?1===n.length?r.cb(n[0]):2===n.length?r.cb(n[0],n[1]):3===n.length?r.cb(n[0],n[1],n[2]):r.cb(...n):r.cb(),o})).filter((e=>!s(e))).map((e=>(0,r.tI)(e)?e:Promise.resolve(e)))}return i&&(i.length?i:void 0)},addEvent:function(e){const t=c(this);if(!t.options.canAddEvents)throw new Error("Cannot add new events (canAddEvents = false)");if(~t.events.indexOf(e))throw new Error(`Event '${e}' already defined`);t.events.push(e)},removeEvent:function(e){const t=c(this);if(!t.options.canRemoveEvents)throw new Error("Cannot remove events (canRemoveEvents = false)");{const n=t.events.indexOf(e);t.events.splice(n,1)}},hasEvent:function(e){return!!~c(this).events.indexOf(e)},hasEventRegistrations:function(e){return!!h(this,e).length},assign:function(e){const t=c(this);return y(e,t.options,t.events,t.registry,t.stats),b(e)}},b=e=>Object.keys(m).reduce(((t,n)=>(t[n]=m[n].bind(e),t)),{target:e,...m}),E=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=c(e).registry;!r[t]||!n&&r[t].length||delete r[t]},v=(e,t,n)=>{const r=c(e).registry;r[t]&&(n?(r[t]=r[t].filter((e=>e.cb!==n)),E(e,t)):E(e,t,!0))};function S(e,t){v(this,e,t)}const y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};Object.defineProperties(e,{[i]:{value:Object.seal({registry:r,events:n,options:t,stats:o})},...f()})},R=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;return e=e||{},n={...o,...n},u(e)||y(e,n,t),b(e)},A=e=>{const t={resolve:()=>[].concat(e())};return Object.defineProperty(t,l,{value:!0,configurable:!1}),t}},Vmq3:(e,t,n)=>{"use strict";n.d(t,{PF:()=>i,Ch:()=>s,ZP:()=>f,KZ:()=>h,lW:()=>g});var r=n("i9fi"),o=n.n(r),a=n("P2gF");const s="rpldy-sender";class i extends Error{constructor(e){super(`${e} didn't receive upload URL`),this.name="MissingUrlError"}}const l=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];"set"in e?e.set(t,...r):("delete"in e&&e.delete(t),e.append(t,...r))},d=[200,201,202,203,204],c=(e,t,n,r,o)=>{let s;const i=null!=o&&o.getRequestData?o.getRequestData(e,n):((e,t)=>{let n;if(t.sendWithFormData)a.kg.debugLog(`uploady.sender: sending ${e.length} item(s) as form data`),n=((e,t)=>{const n=new FormData;return t.params&&Object.entries(t.params).forEach((e=>{let[r,o]=e;(t.formDataAllowUndefined||void 0!==o)&&l(n,r,o)})),((e,t,n)=>{const r=1===t.length;t.forEach(((t,o)=>{const s=r?n.paramName:(0,a.mf)(n.formatGroupParamName)?n.formatGroupParamName(o,n.paramName):`${n.paramName}[${o}]`;t.file?l(e,s,t.file,t.file.name):t.url&&l(e,s,t.url)}))})(n,e,t),n})(e,t);else{if(e.length>1)throw new Error(`XHR Sender - Request without form data can only contain 1 item. received ${e.length}`);const t=e[0];a.kg.debugLog(`uploady.sender: sending item ${t.id} as request body`),n=t.file||t.url}return n})(e,n),d=function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,d=arguments.length>2?arguments[2]:void 0;d=(0,a.TS)({...(0,a.ei)(n,["method","headers","withCredentials"]),preSend:t=>{t.upload.onprogress=t=>{t.lengthComputable&&r&&r(t,e.slice())}}},d);const c=(0,a.WY)(o,l,d);return s=c.xhr,c},c=null!=o&&o.preRequestHandler?o.preRequestHandler(d,e,t,n,r,o):d();return{url:t,count:e.length,pXhr:c,getXhr:()=>s,aborted:!1}},u=(e,t,n)=>{let r=e;const a=null==t?void 0:t["content-type"];if(n.forceJsonResponse||null!=a&&o()(a).call(a,"json"))try{r=JSON.parse(e)}catch{}return r},p=(e,t)=>e.pXhr.then((e=>(a.kg.debugLog("uploady.sender: received upload response ",e),((e,t)=>{const n=t.isSuccessfulCall?t.isSuccessfulCall(e):o()(d).call(d,e.status);return(0,a.tI)(n)?n:Promise.resolve(n)})(e,t).then((n=>{var r,o;const s=n?a.FD.FINISHED:a.FD.ERROR,i=e.status,l=(0,a.k7)(e);return{status:i,state:s,response:{data:null!==(r=null===(o=t.formatServerResponse)||void 0===o?void 0:o.call(t,e.response,i,l))&&void 0!==r?r:u(e.response,l,t),headers:l}}}))))).catch((t=>{let n,r;return e.aborted?(n=a.FD.ABORTED,r="aborted"):(a.kg.debugLog("uploady.sender: upload failed: ",t),n=a.FD.ERROR,r=t),{error:!0,state:n,response:r,status:0}})),h=e=>(t,n,r,o)=>{if(!n)throw new i(s);a.kg.debugLog("uploady.sender: sending file: ",{items:t,url:n,options:r});const l=c(t,n,r,o,e);return{request:p(l,r),abort:()=>(e=>{let t=!1;const{aborted:n,getXhr:r}=e,o=r();return!n&&o&&o.readyState&&4!==o.readyState&&(a.kg.debugLog(`uploady.sender: cancelling request with ${e.count} items to: ${e.url}`),o.abort(),e.aborted=!0,t=!0),t})(l),senderType:s}},g=h(),f=g},P2gF:(e,t,n)=>{"use strict";n.d(t,{FG:()=>d,FD:()=>c,d9:()=>k,Yc:()=>O,ZV:()=>N,D8:()=>H,Ym:()=>u,kG:()=>a(),mf:()=>P(),PO:()=>L,yv:()=>_(),tI:()=>q,sQ:()=>C,kg:()=>r,TS:()=>j,k7:()=>I,ei:()=>x,WY:()=>T,P2:()=>i(),tq:()=>m,sc:()=>E});var r={};n.r(r),n.d(r,{debugLog:()=>f,isDebugOn:()=>h,setDebug:()=>g});var o=n("kvau"),a=n.n(o),s=n("uDTZ"),i=n.n(s);const l="__rpldy-logger-debug__",d={PENDING:"pending",ADDED:"added",PROCESSING:"processing",UPLOADING:"uploading",CANCELLED:"cancelled",FINISHED:"finished",ABORTED:"aborted",ERROR:"error"},c={PENDING:"pending",ADDED:"added",UPLOADING:"uploading",CANCELLED:"cancelled",FINISHED:"finished",ERROR:"error",ABORTED:"aborted"},u=()=>"object"==typeof window&&!!window.document;let p;const h=()=>("boolean"!=typeof p&&(p=u()&&("location"in window&&!!~window.location.search.indexOf("rpldy_debug=true")||!0===window[l])),!!p),g=e=>{u()&&(window[l]=e),p=!!e||null},f=function(){h()&&console.log(...arguments)},m=function(e,t){const n=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return new Promise(((n,o)=>{const a=e(t,...r);a&&a.length?Promise.all(a).catch(o).then((e=>e&&n(!!~e.findIndex((e=>!1===e))))):n(!1)}))};for(var r=arguments.length,o=new Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return t?n(t,...o):n},b=e=>null==e,E=function(e,t){const n=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return new Promise(((n,o)=>{const a=e(t,...r);a&&a.length?Promise.all(a).catch(o).then((e=>{let t;if(e)for(;b(t)&&e.length;)t=e.pop();n(b(t)?void 0:t)})):n()}))};for(var r=arguments.length,o=new Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return t?n(t,...o):n},v=Symbol.for("__rpldy-bi__");let S=0;const y=(e,t)=>(e.url=t,e),R=(e,t)=>(e.file=t,e),A=e=>e&&(e instanceof File||e instanceof Blob||"object"==typeof e&&e.name&&e.type),O=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];S+=e.id&&e.batchId?0:1;const r=e.id&&e.batchId?e.id:`${t}.item-${S}`,o=n?c.PENDING:c.ADDED;let a={id:r,batchId:t,state:o,uploadStatus:0,completed:0,loaded:0,recycled:!1,previousBatch:null};if(Object.defineProperty(a,v,{value:!0,writable:!0}),"object"==typeof e&&!0===e[v]&&(a.recycled=!0,a.previousBatch=e.batchId,e=e.file||e.url),"string"==typeof e)a=y(a,e);else{if(!A(e))throw new Error("Unknown type of file added: "+typeof e);a=R(a,e)}return a},D=(e,t)=>{t&&Object.keys(t).forEach((n=>{void 0!==t[n]&&e.setRequestHeader(n,t[n])}))},I=e=>{let t;try{t=e.getAllResponseHeaders().trim().split(/[\r\n]+/).reduce(((e,t)=>{const[n,r]=t.split(": ");return e[n]=r,e}),{})}catch(t){f("uploady.request: failed to read response headers",e)}return t},T=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new XMLHttpRequest,o=new Promise(((o,a)=>{r.onerror=()=>a(r),r.ontimeout=()=>a(r),r.onabort=()=>a(r),r.onload=()=>o(r),r.open(n.method||"GET",e),D(r,n.headers),r.withCredentials=!!n.withCredentials,n.preSend&&n.preSend(r),r.send(t)}));return o.xhr=r,o};var w=n("wfJ/"),P=n.n(w);const C=(e,t,n)=>{let r=!0;const o=(e=>{const t=[].concat(e);return e=>e.map((e=>t.map((t=>e[t])).join()))})(n);if(e&&t&&e.length===t.length){const n=o(e),a=o(t);r=!!n.find(((e,t)=>e!==a[t]))}return!r};var F=n("hSSe"),_=n.n(F);const N=e=>_()()?e:Object.freeze(e),L=e=>{var t;return!!e&&"object"==typeof e&&("Object"===(null===(t=Object.getPrototypeOf(e))||void 0===t?void 0:t.constructor.name)||null===Object.getPrototypeOf(e))},B=e=>L(e)||Array.isArray(e),G=(e,t)=>{const n=Object.keys(e);return t.withSymbols?n.concat(Object.getOwnPropertySymbols(e)):n},H=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),a=1;a<r;a++)o[a-1]=arguments[a];return n&&o.length&&o.forEach((r=>{r&&G(r,e).forEach((o=>{const a=r[o];e.predicate&&!e.predicate(o,a)||(void 0!==a||e.undefinedOverwrites)&&(B(a)?(void 0!==n[o]&&L(n[o])||(n[o]=Array.isArray(a)?[]:{}),t(n[o],a)):n[o]=a)}))})),n};return t},j=H(),k=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:j;return B(e)?t(Array.isArray(e)?[]:{},e):e},x=(e,t)=>e&&Object.keys(e).reduce(((n,r)=>(~t.indexOf(r)&&(n[r]=e[r]),n)),{}),q=e=>!!e&&"object"==typeof e&&"function"==typeof e.then},"wfJ/":e=>{e.exports=function(e){return"function"==typeof e}},hSSe:e=>{e.exports=function(){return!0}},"1P8H":(e,t,n)=>{"use strict";n.r(t),n.d(t,{BATCH_STATES:()=>o.FG,DEFAULT_OPTIONS:()=>X,FILE_STATES:()=>o.FD,MissingUrlError:()=>z.PF,UPLOADER_EVENTS:()=>g,XHR_SENDER_TYPE:()=>z.Ch,composeEnhancers:()=>se,createUploader:()=>ae,default:()=>ie,getXhrSend:()=>z.KZ,send:()=>z.lW});var r=n("SKjz"),o=n("P2gF");const a=Symbol.for("__rpldy-sstt-proxy__"),s=Symbol.for("__rpldy-sstt-state__"),i=e=>!(0,o.yv)()&&!!e&&!!~Object.getOwnPropertySymbols(e).indexOf(a),l=e=>Array.isArray(e)||(0,o.PO)(e)&&!(e=>(0,o.Ym)()&&e instanceof File||e.name&&e.size&&e.uri)(e),d=(0,o.D8)({withSymbols:!0,predicate:e=>e!==a&&e!==s}),c=e=>!!(0,o.yv)()||e[s].isUpdateable,u=(e,t)=>{(0,o.yv)()||(e[s].isUpdateable=t)},p=(e,t)=>{let n;return l(e)&&(i(e)||(e[a]=!0,n=new Proxy(e,t)),Object.keys(e).forEach((n=>{e[n]=p(e[n],t)}))),n||e},h=e=>i(e)?(0,o.d9)(e,d):e,g=(0,o.ZV)({BATCH_ADD:"BATCH-ADD",BATCH_START:"BATCH-START",BATCH_PROGRESS:"BATCH_PROGRESS",BATCH_FINISH:"BATCH-FINISH",BATCH_ABORT:"BATCH-ABORT",BATCH_CANCEL:"BATCH-CANCEL",BATCH_ERROR:"BATCH-ERROR",BATCH_FINALIZE:"BATCH-FINALIZE",ITEM_START:"FILE-START",ITEM_CANCEL:"FILE-CANCEL",ITEM_PROGRESS:"FILE-PROGRESS",ITEM_FINISH:"FILE-FINISH",ITEM_ABORT:"FILE-ABORT",ITEM_ERROR:"FILE-ERROR",ITEM_FINALIZE:"FILE-FINALIZE",REQUEST_PRE_SEND:"REQUEST_PRE_SEND",ALL_ABORT:"ALL_ABORT"}),f=(0,o.ZV)({ITEM_PROGRESS:"ITEM_PROGRESS",BATCH_PROGRESS:"BATCH_PROGRESS"}),m=[o.FD.FINISHED,o.FD.ERROR,o.FD.CANCELLED,o.FD.ABORTED];var b=n("i9fi"),E=n.n(b);const v=(0,o.D8)({undefinedOverwrites:!0}),S=(e,t,n,r,a,s)=>{const i=n(t),l=e.getState().batches[i[0].batchId].batchOptions,d=(null==r?void 0:r(t,l))||t;return((e,t,n,r,a,s)=>(0,o.sc)(e.trigger,a,t,r).then((e=>(null==s||s(e),((e,t,n,r)=>{if(r){if(o.kg.debugLog(`uploader.queue: REQUEST_PRE_SEND(${e}) event returned updated items/options`,r),r.items){if(r.items.length!==t.length||!(0,o.sQ)(r.items,t,["id","batchId","recycled"]))throw new Error(`REQUEST_PRE_SEND(${e}) event handlers must return same items with same ids`);t=r.items}r.options&&(n=v({},n,r.options))}return{items:t,options:n,cancelled:!1===r}})(a,n,r,e)))))(e,d,i,l,s,a).then((t=>(t.cancelled||((e,t)=>{if(t.items[0]&&e.getState().batches[t.items[0].batchId]){e.updateState((e=>{t.items.forEach((t=>{e.items[t.id]=t})),e.batches[t.items[0].batchId].batchOptions=t.options}));const n=e.getState();t.items=t.items.map((e=>n.items[e.id])),t.options=n.batches[t.items[0].batchId].batchOptions}})(e,t),t)))},y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return(o,a)=>S(o,a,t,n,r,e)},R=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.updateState((e=>{n&&delete e.items[t];const r=e.itemQueue.indexOf(t);~r&&e.itemQueue.splice(r,1);const o=e.activeIds.indexOf(t);~o&&e.activeIds.splice(o,1)}))},A=(e,t,n)=>e.getState().items[t].batchId===n,O=(e,t)=>!!e.getState().items[t],D=y(g.BATCH_START,(e=>e.items),null,(function(){let{batch:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e)throw new Error("BATCH_START event handlers cannot update batch data. Only items & options")})),I=[o.FG.ADDED,o.FG.PROCESSING,o.FG.UPLOADING],T=[o.FG.ABORTED,o.FG.CANCELLED,o.FG.FINISHED,o.FG.ERROR],w=(e,t)=>e.batches[t].batch,P=(e,t)=>{const n=e.getState(),r=n.items[t];return n.batches[r.batchId]},C=(e,t)=>P(e,t).batch,F=(e,t)=>{const n=((e,t)=>w(e.getState(),t))(e,t);n.items.forEach((t=>{let{id:n}=t;return R(e,n,!0)}))},_=(e,t)=>{e.updateState((e=>{delete e.batches[t]}))},N=(e,t,n)=>{L(e,t,n),L(e,t,g.BATCH_FINALIZE)},L=(e,t,n)=>{const r=e.getState(),o=w(r,t),a=r.items,s={...h(o),items:o.items.map((e=>{let{id:t}=e;return h(a[t])}))};e.trigger(n,s)},B=(e,t)=>{const n=C(e,t);return E()(I).call(I,n.state)},G=e=>E()(T).call(T,e.state),H={[o.FD.PENDING]:null,[o.FD.ADDED]:g.ITEM_START,[o.FD.FINISHED]:g.ITEM_FINISH,[o.FD.ERROR]:g.ITEM_ERROR,[o.FD.CANCELLED]:g.ITEM_CANCEL,[o.FD.ABORTED]:g.ITEM_ABORT,[o.FD.UPLOADING]:g.ITEM_PROGRESS},j=e=>!!~m.indexOf(e.state),k=(e,t,n)=>{t.forEach((t=>{const n=e.getState(),{id:r,info:a}=t;if(o.kg.debugLog("uploader.processor.queue: request finished for item - ",{id:r,info:a}),n.items[r]){e.updateState((e=>{const t=e.items[r];t.state=a.state,t.uploadResponse=a.response,t.uploadStatus=a.status,j(t)&&delete e.aborts[r]}));const t=e.getState().items[r];a.state===o.FD.FINISHED&&t.completed<100&&e.handleItemProgress(t,100,t.file?t.file.size:0),H[t.state]&&e.trigger(H[t.state],t),j(t)&&(((e,t)=>{e.updateState((e=>{e.batches[t].finishedCounter+=1}))})(e,t.batchId),e.trigger(g.ITEM_FINALIZE,t))}R(e,r)})),(e=>{const t=e.getState();Object.keys(t.batches).forEach((n=>{const{batch:r,finishedCounter:a}=t.batches[n],{orgItemCount:s}=r,i=G(r);s===a&&(i||100===r.completed||(e.updateState((e=>{const t=w(e,n);t.completed=100,t.loaded=t.items.reduce(((e,t)=>{let{loaded:n}=t;return e+n}),0)})),L(e,n,g.BATCH_PROGRESS)),e.updateState((e=>{const t=w(e,n);t.state=i?t.state:o.FG.FINISHED,e.currentBatch===n&&(e.currentBatch=null)})),o.kg.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${r.id}`),i||N(e,n,g.BATCH_FINISH),F(e,n),_(e,n))}))})(e),n(e)},x=y(g.REQUEST_PRE_SEND,(e=>e),((e,t)=>({items:e,options:t}))),q=e=>{let{allowedItems:t,cancelledResults:n,queue:r,items:a,ids:s,next:i}=e;return(t.length?x(r,t):Promise.resolve()).catch((e=>{o.kg.debugLog("uploader.queue: encountered error while preparing items for request",e),((e,t,n,r)=>{const a=n.map((t=>{let{id:n}=t;return{id:n,info:{status:0,state:o.FD.ERROR,response:e}}}));k(t,a,r)})(e,r,a,i)})).then((e=>{let t;return e&&(e.cancelled?n=s.map((()=>!0)):e.items.some((e=>E()(m).call(m,e.state)))?o.kg.debugLog("uploader.queue: send data contains aborted items - not sending"):((e,t,n)=>{var r;const{items:a,options:s}=t,i=null===(r=e.getState().batches[a[0].batchId])||void 0===r?void 0:r.batch;if(i){let t;try{t=e.sender.send(a,i,s)}catch(e){o.kg.debugLog("uploader.queue: sender failed with unexpected error",e),t={request:Promise.resolve({status:0,state:o.FD.ERROR,response:e.message}),abort:()=>!1,senderType:"exception-handler"}}const{request:r}=t;((e,t,n)=>{e.updateState((e=>{t.forEach((t=>{e.items[t.id].state=o.FD.UPLOADING,e.aborts[t.id]=n.abort}))}))})(e,a,t),r.then((t=>{const r=a.map((e=>({id:e.id,info:t})));k(e,r,n)}))}})(r,{items:e.items,options:e.options},i)),((e,t,n,r)=>{const a=n.map(((e,n)=>e?t[n].id:null)).filter(Boolean);if(a.length){const t=a.map((e=>({id:e,info:{status:0,state:o.FD.CANCELLED,response:"cancel"}})));k(e,t,r)}return!!a.length})(r,a,n,i)||(t=i(r)),t}))},U=(e,t)=>{var n;return E()(n=e.getState().activeIds.flat()).call(n,t)},$=e=>{let t;const n=(e=>{const t=e.getState().itemQueue,n=(e=>{const t=e.getState(),n=t.itemQueue,r=t.items;let a=0,s=n[a];for(;s&&(U(e,s)||!B(e,s)||r[s].state!==o.FD.ADDED);)a+=1,s=n[a];return s?a:-1})(e);let r,a=t[n];if(a){const o=P(e,a),s=o.batch.id,i=o.batchOptions.maxGroupSize||0;if(o.batchOptions.grouped&&i>1){r=[];let o=!0;for(;r.length<i&&o;)r.push(a),a=t[n+r.length],o=a&&A(e,a,s)}else r=[a]}return r})(e);if(n){const r=e.getCurrentActiveCount(),{concurrent:a=0,maxConcurrent:s=0}=e.getOptions();(!r||a&&r<s)&&(o.kg.debugLog("uploader.processor: Processing next upload - ",{ids:n,currentCount:r}),t=((e,t)=>{let n;return((e,t)=>{e.updateState((e=>{e.activeIds=e.activeIds.concat(t)}))})(e,t),n=((e,t)=>{const n=C(e,t);return e.getState().currentBatch!==n.id})(e,t[0])?((e,t)=>{const n=C(e,t);return D(e,n).then((r=>{let{cancelled:o}=r,a=!1;return o||(a=!O(e,t),a||e.updateState((e=>{e.currentBatch=n.id}))),!o&&!a}))})(e,t[0]).then((n=>{let r=!n;return r&&(((e,t)=>{if(O(e,t)){const n=P(e,t),r=null==n?void 0:n.batch.id;r?(o.kg.debugLog("uploady.uploader.batchHelpers: cancelling batch: ",r),e.updateState((e=>{w(e,r).state=o.FG.CANCELLED})),N(e,r,g.BATCH_CANCEL),F(e,r),_(e,r)):o.kg.debugLog(`uploady.uploader.batchHelpers: cancel batch called for batch already removed (item id = ${t})`)}})(e,t[0]),$(e)),r})).catch((n=>(o.kg.debugLog("uploader.processor: encountered error while preparing batch for request",n),((e,t,n)=>{const r=C(e,t),a=r.id;o.kg.debugLog("uploady.uploader.batchHelpers: failing batch: ",{batch:r}),e.updateState((e=>{const t=w(e,a);t.state=o.FG.ERROR,t.additionalInfo=n.message})),N(e,a,g.BATCH_ERROR),F(e,a),_(e,a)})(e,t[0],n),$(e),!0))):Promise.resolve(!1),n})(e,n).then((t=>{t||(((e,t,n)=>{const r=e.getState();let o=Object.values(r.items);o=o.filter((e=>!!~t.indexOf(e.id))),Promise.all(o.map((t=>e.runCancellable(g.ITEM_START,t)))).then((r=>{let a=r.map(((t,n)=>t?null:((e,t)=>{const n=t.getState().items[e];return n&&!E()(m).call(m,n.state)?n:void 0})(o[n].id,e))).filter(Boolean);return{allowedItems:a,cancelledResults:r,queue:e,items:o,ids:t,next:n}})).then(q)})(e,n,$),a&&$(e))})))}return t},M=$,Z=(e,t,n)=>(o.kg.debugLog(`uploader.queue: aborting ${t.state} item - `,t),k(e,[{id:t.id,info:{status:0,state:o.FD.ABORTED,response:"aborted"}}],n),!0),Q={[o.FD.UPLOADING]:(e,t)=>(o.kg.debugLog("uploader.queue: aborting uploading item - ",t),e.getState().aborts[t.id]()),[o.FD.ADDED]:Z,[o.FD.PENDING]:Z},V=(e,t,n)=>{const r=e.getState().items[t],o=null==r?void 0:r.state;return!!Q[o]&&Q[o](e,r,n)},Y=(e,t,n,r,l)=>{const{state:d,update:m}=(e=>{const t={set:(e,r,o)=>(c(n)&&(e[r]=p(o,t)),!0),get:(e,t)=>t===a?h(e):e[t],defineProperty:()=>{throw new Error("Simple State doesnt support defining property")},setPrototypeOf:()=>{throw new Error("Simple State doesnt support setting prototype")},deleteProperty:(e,t)=>(c(n)&&delete e[t],!0)};(0,o.yv)()||i(e)||Object.defineProperty(e,s,{value:{isUpdateable:!1},configurable:!0});const n=(0,o.yv)()?e:p(e,t);return{state:n,update:e=>{if(!(0,o.yv)()&&c(n))throw new Error("Can't call update on State already being updated!");try{u(n,!0),e(n)}finally{u(n,!1)}return n},unwrap:e=>e?h(e):i(n)?h(n):n}})({itemQueue:[],currentBatch:null,batches:{},items:{},activeIds:[],aborts:{}}),b=()=>d,E=e=>{m(e)},v=e=>{if(d.items[e.id]&&!e.recycled)throw new Error(`Uploader queue conflict - item ${e.id} already exists`);e.recycled&&((e,t)=>{const{previousBatch:n}=t;if(t.recycled&&n&&e.getState().batches[n]){const{id:r}=C(e,t.id);r===n&&e.updateState((e=>{const n=w(e,r),o=n.items.findIndex((e=>{let{id:n}=e;return n===t.id}));~o&&n.items.splice(o,1)}))}})(y,e),E((t=>{t.items[e.id]=e,t.itemQueue.push(e.id)}))},S=(e,n,r)=>{d.items[e.id]&&(E((t=>{const o=t.items[e.id];o.loaded=r,o.completed=n})),t(g.ITEM_PROGRESS,b().items[e.id]))};r.on(f.ITEM_PROGRESS,S),r.on(f.BATCH_PROGRESS,(e=>{var n;const r=null===(n=d.batches[e.id])||void 0===n?void 0:n.batch.items;if(r){const[n,o]=r.reduce(((e,t)=>{let{id:n}=t;const{completed:r,loaded:o}=d.items[n];return e[0]+=r,e[1]+=o,e}),[0,0]);E((t=>{const a=t.batches[e.id].batch;a.completed=n/r.length,a.loaded=o})),t(g.BATCH_PROGRESS,d.batches[e.id].batch)}}));const y={uploaderId:l,getOptions:()=>e,getCurrentActiveCount:()=>d.activeIds.length,getState:b,updateState:E,trigger:t,runCancellable:function(e){if(!(0,o.mf)(n))throw new Error("Uploader queue - cancellable is of wrong type");for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a<t;a++)r[a-1]=arguments[a];return n(e,...r)},sender:r,handleItemProgress:S};return(0,o.Ym)()&&o.kg.isDebugOn()&&(window[`__rpldy_${l}_queue_state`]=y),{updateState:E,getState:y.getState,runCancellable:y.runCancellable,uploadBatch:(e,t)=>{t&&E((n=>{n.batches[e.id].batchOptions=t})),M(y)},addBatch:(e,t)=>(E((n=>{n.batches[e.id]={batch:e,batchOptions:t,finishedCounter:0}})),e.items.forEach(v),w(d,e.id)),abortItem:e=>((e,t,n)=>V(e,t,n))(y,e,M),abortBatch:e=>{((e,t,n)=>{const r=e.getState().batches[t],a=null==r?void 0:r.batch;a&&!G(a)&&(e.updateState((e=>{w(e,t).state=o.FG.ABORTED})),L(e,t,g.BATCH_ABORT),a.items.forEach((t=>V(e,t.id,n))))})(y,e,M)},abortAll:()=>{((e,t)=>{const n=e.getState().items;Object.keys(n).forEach((n=>V(e,n,t))),e.trigger(g.ALL_ABORT)})(y,M)},clearPendingBatches:()=>{(e=>{const t=e.getState().batches;Object.keys(t).filter((e=>t[e].batch.state===o.FG.PENDING)).forEach((t=>{F(e,t),_(e,t)}))})(y)},uploadPendingBatches:e=>{((e,t)=>{e.updateState((e=>{Object.keys(e.batches).forEach((n=>{const r=e.batches[n],{batch:a,batchOptions:s}=r;a.state===o.FG.PENDING&&(a.items.forEach((e=>{e.state=o.FD.ADDED})),a.state=o.FG.ADDED,r.batchOptions=(0,o.TS)({},s,t))}))}))})(y,e),M(y)}}};var z=n("Vmq3");const W=()=>!0,X=(0,o.ZV)({autoUpload:!0,clearPendingOnAdd:!1,inputFieldName:"file",concurrent:!1,maxConcurrent:2,grouped:!1,maxGroupSize:5,method:"POST",params:{},fileFilter:W,forceJsonResponse:!1,withCredentials:!1,destination:{},send:null,sendWithFormData:!0,formDataAllowUndefined:!1}),J=()=>{const{trigger:e,target:t}=(0,r.ZP)({send:(t,n,r)=>{const a=r.destination,s=null==a?void 0:a.url,i=(0,o.P2)((r=>((e,t,n,r)=>{((e,t,n,r)=>{e.forEach((e=>{o.kg.debugLog(`uploady.uploader.processor: file: ${e.id} progress event: loaded(${n}) - completed(${t})`),r(f.ITEM_PROGRESS,e,t,n)}))})(e,Math.min(n.loaded/n.total*100,100)/e.length,n.loaded/e.length,r),r(f.BATCH_PROGRESS,t)})(t,n,r,e)),50,!0);return((0,o.mf)(r.send)?r.send:z.ZP)(t,s,{method:(null==a?void 0:a.method)||r.method||X.method,paramName:(null==a?void 0:a.filesParamName)||r.inputFieldName||"file",params:{...r.params,...null==a?void 0:a.params},forceJsonResponse:r.forceJsonResponse,withCredentials:r.withCredentials,formatGroupParamName:r.formatGroupParamName,headers:null==a?void 0:a.headers,sendWithFormData:r.sendWithFormData,formatServerResponse:r.formatServerResponse,formDataAllowUndefined:r.formDataAllowUndefined,isSuccessfulCall:r.isSuccessfulCall},i)}},Object.values(f));return t},K=(0,o.Ym)()&&"FileList"in window,ee=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e;return(0,o.yv)()||(t<3&&i(e)?n=h(e):t<3&&l(e)&&(n=Array.isArray(e)?e.map((e=>ee(e,t+1))):Object.keys(e).reduce(((n,r)=>(n[r]=ee(e[r],t+1),n)),{}))),n};let te=0;const ne=(e,t,n,r)=>{const a=J(),s=Y(n,e,t,a,r);return{process:(e,t)=>{s.uploadBatch(e,t)},abortBatch:e=>{s.abortBatch(e)},abort:e=>{e?s.abortItem(e):s.abortAll()},addNewBatch:(e,t,n)=>((e,t,n)=>{te+=1;const r=`batch-${te}`,a=(e=>K&&e instanceof FileList||"[object FileList]"===e.toString())(e);e=Array.isArray(e)||a?e:[e];const s=!n.autoUpload;return((e,t,n,r)=>Promise.all(Array.prototype.map.call(t,(e=>{const t=(r||W)(e);return(0,o.tI)(t)?t.then((t=>!!t&&e)):!!t&&e}))).then((t=>t.filter(Boolean).map((t=>(0,o.Yc)(t,e,n))))))(r,e,s,n.fileFilter).then((e=>({id:r,uploaderId:t,items:e,state:s?o.FG.PENDING:o.FG.ADDED,completed:0,loaded:0,orgItemCount:e.length,additionalInfo:null})))})(e,t,n).then((e=>s.addBatch(e,n))),runCancellable:s.runCancellable,clearPendingBatches:()=>{s.clearPendingBatches()},processPendingBatches:e=>{s.uploadPendingBatches(e)}}},re=Object.values(g);let oe=0;const ae=e=>{oe+=1;const t=`uploader-${oe}`;let n=!1;const a={};o.kg.debugLog(`uploady.uploader: creating new instance (${t})`,{options:e,counter:oe});let s=(e=>{return{...X,...e,destination:e&&e.destination?(t=e.destination,{params:{},...t}):null};var t})(e);const i=()=>{p.clearPendingBatches()};let{trigger:l,target:d}=(0,r.ZP)({id:t,update:e=>(s=(0,o.TS)({},s,e),d),add:(e,t)=>{const n=(0,o.TS)({},s,t);return n.clearPendingOnAdd&&i(),p.addNewBatch(e,d.id,n).then((e=>{let t;return e.items.length?t=p.runCancellable(g.BATCH_ADD,e,n).then((t=>{t?(e.state=o.FG.CANCELLED,c(g.BATCH_CANCEL,e)):(o.kg.debugLog(`uploady.uploader [${d.id}]: new items added - auto upload =\n ${String(n.autoUpload)}`,e.items),n.autoUpload&&p.process(e))})):o.kg.debugLog(`uploady.uploader: no items to add. batch ${e.id} is empty. check fileFilter if this isn't intended`),t}))},upload:e=>{p.processPendingBatches(e)},abort:e=>{p.abort(e)},abortBatch:e=>{p.abortBatch(e)},getOptions:()=>(0,o.d9)(s),clearPending:i,registerExtension:(e,t)=>{(0,o.kG)(n,"Uploady - uploader extensions can only be registered by enhancers"),(0,o.kG)(!a[e],"Uploady - uploader extension by this name [%s] already exists",e),o.kg.debugLog(`uploady.uploader: registering extension: ${e.toString()}`,t),a[e]=t},getExtension:e=>a[e]},re,{canAddEvents:!1,canRemoveEvents:!1});const c=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const a=(0,r.uZ)((()=>n.map(ee)));return l(e,a)},u=(0,o.tq)(c);if(s.enhancer){n=!0;const e=s.enhancer(d,c);n=!1,d=e||d}const p=ne(c,u,s,d.id);return(0,o.ZV)(d)},se=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return t.reduce(((e,t)=>t(e,...r)||e),e)}},ie=ae}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,n,o,a)=>{if(!n){var s=1/0;for(c=0;c<e.length;c++){for(var[n,o,a]=e[c],i=!0,l=0;l<n.length;l++)(!1&a||s>=a)&&Object.keys(r.O).every((e=>r.O[e](n[l])))?n.splice(l--,1):(i=!1,a<s&&(s=a));if(i){e.splice(c--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[n,o,a]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={321:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var o,a,[s,i,l]=n,d=0;if(s.some((t=>0!==e[t]))){for(o in i)r.o(i,o)&&(r.m[o]=i[o]);if(l)var c=l(r)}for(t&&t(n);d<s.length;d++)a=s[d],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(c)},n=globalThis.webpackChunkrpldy=globalThis.webpackChunkrpldy||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.O(void 0,[429],(()=>r("SKjz"))),r.O(void 0,[429],(()=>r("P2gF"))),r.O(void 0,[429],(()=>r("Vmq3")));var o=r.O(void 0,[429],(()=>r("1P8H")));return r.O(o)})()));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.rpldy=t():e.rpldy=t()}(globalThis,(()=>(()=>{var e,t={SKjz:(e,t,n)=>{"use strict";n.d(t,{uZ:()=>O,ZP:()=>A});var r=n("tU4p");const o=(0,r.ZV)({allowRegisterNonExistent:!0,canAddEvents:!0,canRemoveEvents:!0,collectStats:!1}),a=(e,t)=>{if(!(0,r.mf)(e))throw new Error(`'${t}' is not a valid function`)},s=e=>void 0===e,i=Symbol.for("__le__"),l=Symbol.for("__le__pack__"),d=e=>e?e[i]:null,c=e=>{const t=d(e);if(!t)throw new Error("Didnt find LE internal object. Something very bad happened!");return t},u=e=>!!d(e),h=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];a(n,"cb");const o=c(e);if(!o.options.allowRegisterNonExistent&&!~o.events.indexOf(t))throw new Error(`Cannot register for event ${t.toString()} that wasn't already defined (allowRegisterNonExistent = false)`);const s=o.registry[t]||[];return s.find((e=>e.cb===n))||(s.push({name:t,cb:n,once:r}),o.registry[t]=s),()=>S.call(e,t,n)},p=(e,t)=>{const n=c(e).registry;return t?n[t]?n[t].slice():[]:Object.values(n).flat()},g={on:function(e,t){return h(this,e,t)},once:function(e,t){return h(this,e,t,!0)},off:S,getEvents:function(){return c(this).events.slice()}},f=()=>Object.entries(g).reduce(((e,t)=>{let[n,r]=t;return e[n]={value:r},e}),{}),b={trigger:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const a=p(this,e);let i;if(a.length){var d;let t;1===n.length&&!0===(null===(d=n[0])||void 0===d?void 0:d[l])&&(t=n[0].resolve()),i=a.map((r=>{let o;return r.once&&v(this,e,r.cb),o=t?r.cb(...t):n.length?1===n.length?r.cb(n[0]):2===n.length?r.cb(n[0],n[1]):3===n.length?r.cb(n[0],n[1],n[2]):r.cb(...n):r.cb(),o})).filter((e=>!s(e))).map((e=>(0,r.tI)(e)?e:Promise.resolve(e)))}return i&&(i.length?i:void 0)},addEvent:function(e){const t=c(this);if(!t.options.canAddEvents)throw new Error("Cannot add new events (canAddEvents = false)");if(~t.events.indexOf(e))throw new Error(`Event '${e}' already defined`);t.events.push(e)},removeEvent:function(e){const t=c(this);if(!t.options.canRemoveEvents)throw new Error("Cannot remove events (canRemoveEvents = false)");{const n=t.events.indexOf(e);t.events.splice(n,1)}},hasEvent:function(e){return!!~c(this).events.indexOf(e)},hasEventRegistrations:function(e){return!!p(this,e).length},assign:function(e){const t=c(this);return y(e,t.options,t.events,t.registry,t.stats),m(e)}},m=e=>Object.keys(b).reduce(((t,n)=>(t[n]=b[n].bind(e),t)),{target:e,...b}),E=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=c(e).registry;!r[t]||!n&&r[t].length||delete r[t]},v=(e,t,n)=>{const r=c(e).registry;r[t]&&(n?(r[t]=r[t].filter((e=>e.cb!==n)),E(e,t)):E(e,t,!0))};function S(e,t){v(this,e,t)}const y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};Object.defineProperties(e,{[i]:{value:Object.seal({registry:r,events:n,options:t,stats:o})},...f()})},A=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;return e=e||{},n={...o,...n},u(e)||y(e,n,t),m(e)},O=e=>{const t={resolve:()=>[].concat(e())};return Object.defineProperty(t,l,{value:!0,configurable:!1}),t}},Vmq3:(e,t,n)=>{"use strict";n.d(t,{PF:()=>i,Ch:()=>s,ZP:()=>f,KZ:()=>p,lW:()=>g});var r=n("i9fi"),o=n.n(r),a=n("tU4p");const s="rpldy-sender";class i extends Error{constructor(e){super(`${e} didn't receive upload URL`),this.name="MissingUrlError"}}const l=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];"set"in e?e.set(t,...r):("delete"in e&&e.delete(t),e.append(t,...r))},d=[200,201,202,203,204],c=(e,t,n,r,o)=>{let s;const i=null!=o&&o.getRequestData?o.getRequestData(e,n):((e,t)=>{let n;if(t.sendWithFormData)a.kg.debugLog(`uploady.sender: sending ${e.length} item(s) as form data`),n=((e,t)=>{const n=new FormData;return t.params&&Object.entries(t.params).forEach((e=>{let[r,o]=e;(t.formDataAllowUndefined||void 0!==o)&&l(n,r,o)})),((e,t,n)=>{const r=1===t.length;t.forEach(((t,o)=>{const s=r?n.paramName:(0,a.mf)(n.formatGroupParamName)?n.formatGroupParamName(o,n.paramName):`${n.paramName}[${o}]`;t.file?l(e,s,t.file,t.file.name):t.url&&l(e,s,t.url)}))})(n,e,t),n})(e,t);else{if(e.length>1)throw new Error(`XHR Sender - Request without form data can only contain 1 item. received ${e.length}`);const t=e[0];a.kg.debugLog(`uploady.sender: sending item ${t.id} as request body`),n=t.file||t.url}return n})(e,n),d=function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i,d=arguments.length>2?arguments[2]:void 0;d=(0,a.TS)({...(0,a.ei)(n,["method","headers","withCredentials"]),preSend:t=>{t.upload.onprogress=t=>{t.lengthComputable&&r&&r(t,e.slice())}}},d);const c=(0,a.WY)(o,l,d);return s=c.xhr,c},c=null!=o&&o.preRequestHandler?o.preRequestHandler(d,e,t,n,r,o):d();return{url:t,count:e.length,pXhr:c,getXhr:()=>s,aborted:!1}},u=(e,t,n)=>{let r=e;const a=null==t?void 0:t["content-type"];if(n.forceJsonResponse||null!=a&&o()(a).call(a,"json"))try{r=JSON.parse(e)}catch{}return r},h=(e,t)=>e.pXhr.then((e=>(a.kg.debugLog("uploady.sender: received upload response ",e),((e,t)=>{const n=t.isSuccessfulCall?t.isSuccessfulCall(e):o()(d).call(d,e.status);return(0,a.tI)(n)?n:Promise.resolve(n)})(e,t).then((n=>{var r,o;const s=n?a.FD.FINISHED:a.FD.ERROR,i=e.status,l=(0,a.k7)(e);return{status:i,state:s,response:{data:null!==(r=null===(o=t.formatServerResponse)||void 0===o?void 0:o.call(t,e.response,i,l))&&void 0!==r?r:u(e.response,l,t),headers:l}}}))))).catch((t=>{let n,r;return e.aborted?(n=a.FD.ABORTED,r="aborted"):(a.kg.debugLog("uploady.sender: upload failed: ",t),n=a.FD.ERROR,r=t),{error:!0,state:n,response:r,status:0}})),p=e=>(t,n,r,o)=>{if(!n)throw new i(s);a.kg.debugLog("uploady.sender: sending file: ",{items:t,url:n,options:r});const l=c(t,n,r,o,e);return{request:h(l,r),abort:()=>(e=>{let t=!1;const{aborted:n,getXhr:r}=e,o=r();return!n&&o&&o.readyState&&4!==o.readyState&&(a.kg.debugLog(`uploady.sender: cancelling request with ${e.count} items to: ${e.url}`),o.abort(),e.aborted=!0,t=!0),t})(l),senderType:s}},g=p(),f=g},tU4p:(e,t,n)=>{"use strict";n.d(t,{FG:()=>d,FD:()=>c,d9:()=>j,Yc:()=>R,ZV:()=>B,D8:()=>k,Ym:()=>u,kG:()=>a(),mf:()=>C(),PO:()=>L,yv:()=>F(),tI:()=>U,sQ:()=>P,kg:()=>r,TS:()=>H,k7:()=>D,ei:()=>x,WY:()=>w,nK:()=>Q,P2:()=>i(),tq:()=>b,sc:()=>E});var r={};n.r(r),n.d(r,{debugLog:()=>f,isDebugOn:()=>p,setDebug:()=>g});var o=n("kvau"),a=n.n(o),s=n("uDTZ"),i=n.n(s);const l="__rpldy-logger-debug__",d={PENDING:"pending",ADDED:"added",PROCESSING:"processing",UPLOADING:"uploading",CANCELLED:"cancelled",FINISHED:"finished",ABORTED:"aborted",ERROR:"error"},c={PENDING:"pending",ADDED:"added",UPLOADING:"uploading",CANCELLED:"cancelled",FINISHED:"finished",ERROR:"error",ABORTED:"aborted"},u=()=>"object"==typeof window&&!!window.document;let h;const p=()=>("boolean"!=typeof h&&(h=u()&&("location"in window&&!!~window.location.search.indexOf("rpldy_debug=true")||!0===window[l])),!!h),g=e=>{u()&&(window[l]=e),h=!!e||null},f=function(){p()&&console.log(...arguments)},b=function(e,t){const n=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return new Promise(((n,o)=>{const a=e(t,...r);a&&a.length?Promise.all(a).catch(o).then((e=>e&&n(!!~e.findIndex((e=>!1===e))))):n(!1)}))};for(var r=arguments.length,o=new Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return t?n(t,...o):n},m=e=>null==e,E=function(e,t){const n=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return new Promise(((n,o)=>{const a=e(t,...r);a&&a.length?Promise.all(a).catch(o).then((e=>{let t;if(e)for(;m(t)&&e.length;)t=e.pop();n(m(t)?void 0:t)})):n()}))};for(var r=arguments.length,o=new Array(r>2?r-2:0),a=2;a<r;a++)o[a-2]=arguments[a];return t?n(t,...o):n},v=Symbol.for("__rpldy-bi__");let S=0;const y=(e,t)=>(e.url=t,e),A=(e,t)=>(e.file=t,e),O=e=>e&&(e instanceof File||e instanceof Blob||"object"==typeof e&&e.name&&e.type),R=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];S+=e.id&&e.batchId?0:1;const r=e.id&&e.batchId?e.id:`${t}.item-${S}`,o=n?c.PENDING:c.ADDED;let a={id:r,batchId:t,state:o,uploadStatus:0,completed:0,loaded:0,recycled:!1,previousBatch:null};if(Object.defineProperty(a,v,{value:!0,writable:!0}),"object"==typeof e&&!0===e[v]&&(a.recycled=!0,a.previousBatch=e.batchId,e=e.file||e.url),"string"==typeof e)a=y(a,e);else{if(!O(e))throw new Error("Unknown type of file added: "+typeof e);a=A(a,e)}return a},I=(e,t)=>{t&&Object.keys(t).forEach((n=>{void 0!==t[n]&&e.setRequestHeader(n,t[n])}))},D=e=>{let t;try{t=e.getAllResponseHeaders().trim().split(/[\r\n]+/).reduce(((e,t)=>{const[n,r]=t.split(": ");return e[n]=r,e}),{})}catch(t){f("uploady.request: failed to read response headers",e)}return t},w=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new XMLHttpRequest,o=new Promise(((o,a)=>{r.onerror=()=>a(r),r.ontimeout=()=>a(r),r.onabort=()=>a(r),r.onload=()=>o(r),r.open(n.method||"GET",e),I(r,n.headers),r.withCredentials=!!n.withCredentials,n.preSend&&n.preSend(r),r.send(t)}));return o.xhr=r,o};var T=n("wfJ/"),C=n.n(T);const P=(e,t,n)=>{let r=!0;const o=(e=>{const t=[].concat(e);return e=>e.map((e=>t.map((t=>e[t])).join()))})(n);if(e&&t&&e.length===t.length){const n=o(e),a=o(t);r=!!n.find(((e,t)=>e!==a[t]))}return!r};var _=n("hSSe"),F=n.n(_);const B=e=>F()()?e:Object.freeze(e),L=e=>{var t;return!!e&&"object"==typeof e&&("Object"===(null===(t=Object.getPrototypeOf(e))||void 0===t?void 0:t.constructor.name)||null===Object.getPrototypeOf(e))},N=e=>L(e)||Array.isArray(e),G=(e,t)=>{const n=Object.keys(e);return t.withSymbols?n.concat(Object.getOwnPropertySymbols(e)):n},k=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),a=1;a<r;a++)o[a-1]=arguments[a];return n&&o.length&&o.forEach((r=>{r&&G(r,e).forEach((o=>{const a=r[o];e.predicate&&!e.predicate(o,a)||(void 0!==a||e.undefinedOverwrites)&&(N(a)?(void 0!==n[o]&&L(n[o])||(n[o]=Array.isArray(a)?[]:{}),t(n[o],a)):n[o]=a)}))})),n};return t},H=k(),j=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:H;return N(e)?t(Array.isArray(e)?[]:{},e):e},x=(e,t)=>e&&Object.keys(e).reduce(((n,r)=>(~t.indexOf(r)&&(n[r]=e[r]),n)),{}),U=e=>!!e&&"object"==typeof e&&"function"==typeof e.then,q=u()&&window.requestIdleCallback,$=q?window.requestIdleCallback:setTimeout,M=q?window.cancelIdleCallback:clearTimeout,Q=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const n=$(e,q?{timeout:t}:t);return()=>M(n)}},"wfJ/":e=>{e.exports=function(e){return"function"==typeof e}},hSSe:e=>{e.exports=function(){return!0}},"4W+v":(e,t,n)=>{"use strict";n.r(t),n.d(t,{BATCH_STATES:()=>o.FG,DEFAULT_OPTIONS:()=>ae,FILE_STATES:()=>o.FD,MissingUrlError:()=>re.PF,UPLOADER_EVENTS:()=>A,XHR_SENDER_TYPE:()=>re.Ch,composeEnhancers:()=>ue,createUploader:()=>ge,default:()=>fe,getXhrSend:()=>re.KZ,send:()=>re.lW});var r=n("SKjz"),o=n("tU4p");const a=(e,t,n)=>(o.kg.debugLog(`abort: aborting ${e.state} item - `,e),n(e.id,{status:0,state:o.FD.ABORTED,response:"aborted"}),!0),s={[o.FD.UPLOADING]:(e,t)=>(o.kg.debugLog("abort: aborting uploading item - ",e),t[e.id]()),[o.FD.ADDED]:a,[o.FD.PENDING]:a},i=(e,t,n)=>{const r=null==e?void 0:e.state;return!(!r||!s[r])&&s[r](e,t,n)},l=(e,t,n,r)=>i(t[e],n,r),d=(e,t)=>{let n=!1;return 0!==t&&t&&(n=e>=t),n},c=(e,t,n,r)=>{const a=Object.keys(e),s=d(a.length,r.fastAbortThreshold);return o.kg.debugLog(`abort: doing abort-all (${s?"fast":"normal"} abort)`),s?(e=>{Object.values(e).forEach((e=>e()))})(t):a.forEach((r=>l(r,e,t,n))),{isFast:s}},u=(e,t,n,r,a)=>{const s=0===t.fastAbortThreshold?0:t.fastAbortThreshold||a.fastAbortThreshold,l=d(e.items.length,s);return o.kg.debugLog(`abort: doing abort-batch on: ${e.id} (${l?"fast":"normal"} abort)`),l?((e,t)=>{e.items.forEach((e=>{var n;let{id:r}=e;return null===(n=t[r])||void 0===n?void 0:n.call(t)}))})(e,n):e.items.forEach((e=>i(e,n,r))),{isFast:l}},h=()=>e=>(e.update({abortAll:c,abortBatch:u,abortItem:l}),e),p=Symbol.for("__rpldy-sstt-proxy__"),g=Symbol.for("__rpldy-sstt-state__"),f=e=>!(0,o.yv)()&&!!e&&!!~Object.getOwnPropertySymbols(e).indexOf(p),b=e=>Array.isArray(e)||(0,o.PO)(e)&&!(e=>(0,o.Ym)()&&e instanceof File||e.name&&e.size&&e.uri)(e),m=(0,o.D8)({withSymbols:!0,predicate:e=>e!==p&&e!==g}),E=e=>!!(0,o.yv)()||e[g].isUpdateable,v=(e,t)=>{(0,o.yv)()||(e[g].isUpdateable=t)},S=(e,t)=>{let n;return b(e)&&(f(e)||(e[p]=!0,n=new Proxy(e,t)),Object.keys(e).forEach((n=>{e[n]=S(e[n],t)}))),n||e},y=e=>f(e)?(0,o.d9)(e,m):e,A=(0,o.ZV)({BATCH_ADD:"BATCH-ADD",BATCH_START:"BATCH-START",BATCH_PROGRESS:"BATCH_PROGRESS",BATCH_FINISH:"BATCH-FINISH",BATCH_ABORT:"BATCH-ABORT",BATCH_CANCEL:"BATCH-CANCEL",BATCH_ERROR:"BATCH-ERROR",BATCH_FINALIZE:"BATCH-FINALIZE",ITEM_START:"FILE-START",ITEM_CANCEL:"FILE-CANCEL",ITEM_PROGRESS:"FILE-PROGRESS",ITEM_FINISH:"FILE-FINISH",ITEM_ABORT:"FILE-ABORT",ITEM_ERROR:"FILE-ERROR",ITEM_FINALIZE:"FILE-FINALIZE",REQUEST_PRE_SEND:"REQUEST_PRE_SEND",ALL_ABORT:"ALL_ABORT"}),O=(0,o.ZV)({ITEM_PROGRESS:"ITEM_PROGRESS",BATCH_PROGRESS:"BATCH_PROGRESS"}),R=[o.FD.FINISHED,o.FD.ERROR,o.FD.CANCELLED,o.FD.ABORTED];var I=n("i9fi"),D=n.n(I);const w=(0,o.D8)({undefinedOverwrites:!0}),T=(e,t,n,r,a,s)=>{const i=n(t),l=e.getState().batches[i[0].batchId].batchOptions,d=(null==r?void 0:r(t,l))||t;return((e,t,n,r,a,s)=>(0,o.sc)(e.trigger,a,t,r).then((e=>(null==s||s(e),((e,t,n,r)=>{if(r){if(o.kg.debugLog(`uploader.queue: REQUEST_PRE_SEND(${e}) event returned updated items/options`,r),r.items){if(r.items.length!==t.length||!(0,o.sQ)(r.items,t,["id","batchId","recycled"]))throw new Error(`REQUEST_PRE_SEND(${e}) event handlers must return same items with same ids`);t=r.items}r.options&&(n=w({},n,r.options))}return{items:t,options:n,cancelled:!1===r}})(a,n,r,e)))))(e,d,i,l,s,a).then((t=>(t.cancelled||((e,t)=>{if(t.items[0]&&e.getState().batches[t.items[0].batchId]){e.updateState((e=>{t.items.forEach((t=>{e.items[t.id]=t})),e.batches[t.items[0].batchId].batchOptions=t.options}));const n=e.getState();t.items=t.items.map((e=>n.items[e.id])),t.options=n.batches[t.items[0].batchId].batchOptions}})(e,t),t)))},C=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return(o,a)=>T(o,a,t,n,r,e)},P=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.updateState((e=>{const{batchId:r}=e.items[t]||{};n&&delete e.items[t];const o=r?e.itemQueue[r].indexOf(t):-1;~o&&e.itemQueue[r].splice(o,1);const a=e.activeIds.indexOf(t);~a&&e.activeIds.splice(a,1)}))},_=(e,t)=>!!e.getState().items[t],F=C(A.BATCH_START,(e=>e.items),null,(function(){let{batch:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(e)throw new Error("BATCH_START event handlers cannot update batch data. Only items & options")})),B=[o.FG.ADDED,o.FG.PROCESSING,o.FG.UPLOADING],L=[o.FG.ABORTED,o.FG.CANCELLED,o.FG.FINISHED,o.FG.ERROR],N=(e,t)=>e.batches[t].batch,G=(e,t)=>{const n=e.getState(),r=n.items[t];return n.batches[r.batchId]},k=(e,t)=>G(e,t).batch,H=(e,t)=>{const n=((e,t)=>N(e.getState(),t))(e,t);n.items.forEach((t=>{let{id:n}=t;return P(e,n,!0)}))},j=(e,t)=>{e.updateState((e=>{delete e.batches[t],delete e.itemQueue[t];const n=e.batchQueue.indexOf(t);~n&&e.batchQueue.splice(n,1)}))},x=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:o.FG.FINISHED,a=arguments.length>4?arguments[4]:void 0;e.updateState((e=>{const n=N(e,t);n.state=r,a&&(n.additionalInfo=a)})),U(e,t,n),U(e,t,A.BATCH_FINALIZE)},U=(e,t,n)=>{const r=e.getState(),o=N(r,t),a=r.items,s={...y(o),items:o.items.map((e=>{let{id:t}=e;return y(a[t])}))};e.trigger(n,s)},q=(e,t)=>{const n=N(e.getState(),t);return D()(B).call(B,n.state)},$=e=>D()(L).call(L,e.state),M={[o.FD.PENDING]:null,[o.FD.ADDED]:A.ITEM_START,[o.FD.FINISHED]:A.ITEM_FINISH,[o.FD.ERROR]:A.ITEM_ERROR,[o.FD.CANCELLED]:A.ITEM_CANCEL,[o.FD.ABORTED]:A.ITEM_ABORT,[o.FD.UPLOADING]:A.ITEM_PROGRESS},Q=e=>!!~R.indexOf(e.state),Z=(e,t,n)=>{t.forEach((t=>{const n=e.getState(),{id:r,info:a}=t;if(o.kg.debugLog("uploader.processor.queue: request finished for item - ",{id:r,info:a}),n.items[r]){e.updateState((e=>{const t=e.items[r];t.state=a.state,t.uploadResponse=a.response,t.uploadStatus=a.status,Q(t)&&delete e.aborts[r]}));const t=e.getState().items[r];a.state===o.FD.FINISHED&&t.completed<100&&e.handleItemProgress(t,100,t.file?t.file.size:0),M[t.state]&&e.trigger(M[t.state],t),Q(t)&&(((e,t)=>{e.updateState((e=>{e.batches[t].finishedCounter+=1}))})(e,t.batchId),e.trigger(A.ITEM_FINALIZE,t))}P(e,r)})),(e=>{(0,o.nK)((()=>{const t=e.getState();Object.keys(t.batches).forEach((n=>{const{batch:r,finishedCounter:a}=t.batches[n],{orgItemCount:s}=r,i=$(r);s===a&&(i||100===r.completed||(e.updateState((e=>{const t=N(e,n);t.completed=100,t.loaded=t.items.reduce(((e,t)=>{let{loaded:n}=t;return e+n}),0)})),U(e,n,A.BATCH_PROGRESS)),e.updateState((e=>{e.currentBatch===n&&(e.currentBatch=null)})),o.kg.debugLog(`uploady.uploader.batchHelpers: cleaning up batch: ${r.id}`),i||x(e,n,A.BATCH_FINISH),H(e,n),j(e,n))}))}))})(e),n(e)},V=C(A.REQUEST_PRE_SEND,(e=>e),((e,t)=>({items:e,options:t}))),W=e=>{let{allowedItems:t,cancelledResults:n,queue:r,items:a,ids:s,next:i}=e;return(t.length?V(r,t):Promise.resolve()).catch((e=>{o.kg.debugLog("uploader.queue: encountered error while preparing items for request",e),((e,t,n,r)=>{const a=n.map((t=>{let{id:n}=t;return{id:n,info:{status:0,state:o.FD.ERROR,response:e}}}));Z(t,a,r)})(e,r,a,i)})).then((e=>{let t;return e&&(e.cancelled?n=s.map((()=>!0)):e.items.some((e=>D()(R).call(R,e.state)))?o.kg.debugLog("uploader.queue: send data contains aborted items - not sending"):((e,t,n)=>{var r;const{items:a,options:s}=t,i=null===(r=e.getState().batches[a[0].batchId])||void 0===r?void 0:r.batch;if(i){let t;try{t=e.sender.send(a,i,s)}catch(e){o.kg.debugLog("uploader.queue: sender failed with unexpected error",e),t={request:Promise.resolve({status:0,state:o.FD.ERROR,response:e.message}),abort:()=>!1,senderType:"exception-handler"}}const{request:r}=t;((e,t,n)=>{e.updateState((e=>{t.forEach((t=>{e.items[t.id].state=o.FD.UPLOADING,e.aborts[t.id]=n.abort}))}))})(e,a,t),r.then((t=>{const r=a.map((e=>({id:e.id,info:t})));Z(e,r,n)}))}})(r,{items:e.items,options:e.options},i)),((e,t,n,r)=>{const a=n.map(((e,n)=>e?t[n].id:null)).filter(Boolean);if(a.length){const t=a.map((e=>({id:e,info:{status:0,state:o.FD.CANCELLED,response:"cancel"}})));Z(e,t,r)}return!!a.length})(r,a,n,i)||(t=i(r)),t}))},Y=(e,t)=>{var n;return D()(n=e.getState().activeIds.flat()).call(n,t)},z=e=>{let t;const n=(e=>{const t=e.getState(),n=t.itemQueue,[r,a]=(e=>{const t=e.getState(),n=t.itemQueue,r=t.items;let a=null,s=0,i=0,l=t.batchQueue[s];for(;l&&!a;){if(q(e,l))for(a=n[l][i];a&&(Y(e,a)||r[a].state!==o.FD.ADDED);)i+=1,a=n[l][i];a||(s+=1,l=t.batchQueue[s],i=0)}return a?[l,i]:null})(e)||[];let s,i=r&&~a?n[r][a]:null;if(i){const{batchOptions:e}=t.batches[r],n=e.maxGroupSize||0;s=e.grouped&&n>1?t.itemQueue[r].slice(a,a+n):[i]}return s})(e);if(n){const r=e.getCurrentActiveCount(),{concurrent:a=0,maxConcurrent:s=0}=e.getOptions();(!r||a&&r<s)&&(o.kg.debugLog("uploader.processor: Processing next upload - ",{ids:n,currentCount:r}),t=((e,t)=>{let n;return((e,t)=>{e.updateState((e=>{e.activeIds=e.activeIds.concat(t)}))})(e,t),n=((e,t)=>{const n=k(e,t);return e.getState().currentBatch!==n.id})(e,t[0])?((e,t)=>{const n=k(e,t);return F(e,n).then((r=>{let{cancelled:o}=r,a=!1;return o||(a=!_(e,t),a||e.updateState((e=>{e.currentBatch=n.id}))),!o&&!a}))})(e,t[0]).then((n=>{let r=!n;return r&&(((e,t)=>{if(_(e,t)){const n=G(e,t),r=null==n?void 0:n.batch.id;r?(o.kg.debugLog("uploady.uploader.batchHelpers: cancelling batch: ",r),x(e,r,A.BATCH_CANCEL,o.FG.CANCELLED),H(e,r),j(e,r)):o.kg.debugLog(`uploady.uploader.batchHelpers: cancel batch called for batch already removed (item id = ${t})`)}})(e,t[0]),z(e)),r})).catch((n=>(o.kg.debugLog("uploader.processor: encountered error while preparing batch for request",n),((e,t,n)=>{const r=k(e,t),a=r.id;o.kg.debugLog("uploady.uploader.batchHelpers: failing batch: ",{batch:r}),x(e,a,A.BATCH_ERROR,o.FG.ERROR,n.message),H(e,a),j(e,a)})(e,t[0],n),z(e),!0))):Promise.resolve(!1),n})(e,n).then((t=>{t||(((e,t,n)=>{const r=e.getState();let o=Object.values(r.items);o=o.filter((e=>!!~t.indexOf(e.id))),Promise.all(o.map((t=>e.runCancellable(A.ITEM_START,t)))).then((r=>{let a=r.map(((t,n)=>t?null:((e,t)=>{const n=t.getState().items[e];return n&&!D()(R).call(R,n.state)?n:void 0})(o[n].id,e))).filter(Boolean);return{allowedItems:a,cancelledResults:r,queue:e,items:o,ids:t,next:n}})).then(W)})(e,n,z),a&&z(e))})))}return t},K=z,X=e=>(t,n)=>Z(e,[{id:t,info:n}],K),J=(e,t)=>{const n=e.getOptions().abortItem;(0,o.kG)(!!n,"Abort Item method not provided yet abortItem was called");const r=e.getState();return n(t,r.items,r.aborts,X(e))},ee=(e,t)=>{const n=e.getOptions().abortBatch;(0,o.kG)(!!n,"Abort Batch method not provided yet abortItem was called");const r=e.getState(),a=r.batches[t],s=null==a?void 0:a.batch;if(s&&!$(s)){x(e,t,A.BATCH_ABORT,o.FG.ABORTED);const{isFast:i}=n(s,a.batchOptions,r.aborts,X(e),e.getOptions());i&&e.clearBatchUploads(s.id)}},te=e=>{const t=e.getOptions().abortAll;(0,o.kG)(!!t,"Abort All method not provided yet abortAll was called"),e.trigger(A.ALL_ABORT);const n=e.getState(),{isFast:r}=t(n.items,n.aborts,X(e),e.getOptions());r&&e.clearAllUploads()},ne=(e,t,n,r,a)=>{const{state:s,update:i}=(e=>{const t={set:(e,r,o)=>(E(n)&&(e[r]=S(o,t)),!0),get:(e,t)=>t===p?y(e):e[t],defineProperty:()=>{throw new Error("Simple State doesnt support defining property")},setPrototypeOf:()=>{throw new Error("Simple State doesnt support setting prototype")},deleteProperty:(e,t)=>(E(n)&&delete e[t],!0)};(0,o.yv)()||f(e)||Object.defineProperty(e,g,{value:{isUpdateable:!1},configurable:!0});const n=(0,o.yv)()?e:S(e,t);return{state:n,update:e=>{if(!(0,o.yv)()&&E(n))throw new Error("Can't call update on State already being updated!");try{v(n,!0),e(n)}finally{v(n,!1)}return n},unwrap:e=>e?y(e):f(n)?y(n):n}})({itemQueue:{},batchQueue:[],currentBatch:null,batches:{},items:{},activeIds:[],aborts:{}}),l=()=>s,d=e=>{i(e)},c=e=>{if(s.items[e.id]&&!e.recycled)throw new Error(`Uploader queue conflict - item ${e.id} already exists`);e.recycled&&((e,t)=>{const{previousBatch:n}=t;if(t.recycled&&n&&e.getState().batches[n]){const{id:r}=k(e,t.id);r===n&&e.updateState((e=>{const n=N(e,r),o=n.items.findIndex((e=>{let{id:n}=e;return n===t.id}));~o&&n.items.splice(o,1)}))}})(h,e),d((t=>{t.items[e.id]=e}))},u=(e,n,r)=>{s.items[e.id]&&(d((t=>{const o=t.items[e.id];o.loaded=r,o.completed=n})),t(A.ITEM_PROGRESS,l().items[e.id]))};r.on(O.ITEM_PROGRESS,u),r.on(O.BATCH_PROGRESS,(e=>{var n;const r=null===(n=s.batches[e.id])||void 0===n?void 0:n.batch.items;if(r){const[n,o]=r.reduce(((e,t)=>{let{id:n}=t;const{completed:r,loaded:o}=s.items[n];return e[0]+=r,e[1]+=o,e}),[0,0]);d((t=>{const a=t.batches[e.id].batch;a.completed=n/r.length,a.loaded=o})),t(A.BATCH_PROGRESS,s.batches[e.id].batch)}}));const h={uploaderId:a,getOptions:()=>e,getCurrentActiveCount:()=>s.activeIds.length,getState:l,updateState:d,trigger:t,runCancellable:function(e){if(!(0,o.mf)(n))throw new Error("Uploader queue - cancellable is of wrong type");for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a<t;a++)r[a-1]=arguments[a];return n(e,...r)},sender:r,handleItemProgress:u,clearAllUploads:()=>{h.updateState((e=>{e.itemQueue={},e.batchQueue=[],e.currentBatch=null,e.batches={},e.items={},e.activeIds=[]}))},clearBatchUploads:e=>{(0,o.nK)((()=>{o.kg.debugLog(`uploader.queue: started scheduled work to clear batch uploads (${e})`),l().batches[e]&&((e,t)=>{e.updateState((e=>{const{items:n}=N(e,t);delete e.batches[t],delete e.itemQueue[t];const r=e.batchQueue.indexOf(t);~r&&e.batchQueue.splice(r,1),e.currentBatch===t&&(e.currentBatch=null),n.forEach((t=>{let{id:n}=t;delete e.items[n];const r=e.activeIds.indexOf(n);~r&&e.activeIds.splice(r,1)}))}))})(h,e)}))}};return(0,o.Ym)()&&o.kg.isDebugOn()&&(window[`__rpldy_${a}_queue_state`]=h),{updateState:d,getState:h.getState,runCancellable:h.runCancellable,uploadBatch:(e,t)=>{t&&d((n=>{n.batches[e.id].batchOptions=t})),K(h)},addBatch:(e,t)=>(d((n=>{n.batches[e.id]={batch:e,batchOptions:t,finishedCounter:0},n.batchQueue.push(e.id),n.itemQueue[e.id]=e.items.map((e=>{let{id:t}=e;return t}))})),e.items.forEach(c),N(s,e.id)),abortItem:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return J(h,...t)},abortBatch:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return ee(h,...t)},abortAll:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return te(h,...t)},clearPendingBatches:()=>{(e=>{const t=e.getState().batches;Object.keys(t).filter((e=>t[e].batch.state===o.FG.PENDING)).forEach((t=>{H(e,t),j(e,t)}))})(h)},uploadPendingBatches:e=>{((e,t)=>{e.updateState((e=>{Object.keys(e.batches).forEach((n=>{const r=e.batches[n],{batch:a,batchOptions:s}=r;a.state===o.FG.PENDING&&(a.items.forEach((e=>{e.state=o.FD.ADDED})),a.state=o.FG.ADDED,r.batchOptions=(0,o.TS)({},s,t))}))}))})(h,e),K(h)}}};var re=n("Vmq3");const oe=()=>!0,ae=(0,o.ZV)({autoUpload:!0,clearPendingOnAdd:!1,inputFieldName:"file",concurrent:!1,maxConcurrent:2,grouped:!1,maxGroupSize:5,method:"POST",params:{},fileFilter:oe,forceJsonResponse:!1,withCredentials:!1,destination:{},send:null,sendWithFormData:!0,formDataAllowUndefined:!1,fastAbortThreshold:100}),se=()=>{const{trigger:e,target:t}=(0,r.ZP)({send:(t,n,r)=>{const a=r.destination,s=null==a?void 0:a.url,i=(0,o.P2)((r=>((e,t,n,r)=>{((e,t,n,r)=>{e.forEach((e=>{o.kg.debugLog(`uploady.uploader.processor: file: ${e.id} progress event: loaded(${n}) - completed(${t})`),r(O.ITEM_PROGRESS,e,t,n)}))})(e,Math.min(n.loaded/n.total*100,100)/e.length,n.loaded/e.length,r),r(O.BATCH_PROGRESS,t)})(t,n,r,e)),50,!0);return((0,o.mf)(r.send)?r.send:re.ZP)(t,s,{method:(null==a?void 0:a.method)||r.method||ae.method,paramName:(null==a?void 0:a.filesParamName)||r.inputFieldName||"file",params:{...r.params,...null==a?void 0:a.params},forceJsonResponse:r.forceJsonResponse,withCredentials:r.withCredentials,formatGroupParamName:r.formatGroupParamName,headers:null==a?void 0:a.headers,sendWithFormData:r.sendWithFormData,formatServerResponse:r.formatServerResponse,formDataAllowUndefined:r.formDataAllowUndefined,isSuccessfulCall:r.isSuccessfulCall},i)}},Object.values(O));return t},ie=(0,o.Ym)()&&"FileList"in window,le=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e;return(0,o.yv)()||(t<3&&f(e)?n=y(e):t<3&&b(e)&&(n=Array.isArray(e)?e.map((e=>le(e,t+1))):Object.keys(e).reduce(((n,r)=>(n[r]=le(e[r],t+1),n)),{}))),n};let de=0;const ce=(e,t,n,r)=>{const a=se(),s=ne(n,e,t,a,r);return{process:(e,t)=>{s.uploadBatch(e,t)},abortBatch:e=>{s.abortBatch(e)},abort:e=>{e?s.abortItem(e):s.abortAll()},addNewBatch:(e,t,n)=>((e,t,n)=>{de+=1;const r=`batch-${de}`,a=(e=>ie&&e instanceof FileList||"[object FileList]"===e.toString())(e);e=Array.isArray(e)||a?e:[e];const s=!n.autoUpload;return((e,t,n,r)=>Promise.all(Array.prototype.map.call(t,(e=>{const t=(r||oe)(e);return(0,o.tI)(t)?t.then((t=>!!t&&e)):!!t&&e}))).then((t=>t.filter(Boolean).map((t=>(0,o.Yc)(t,e,n))))))(r,e,s,n.fileFilter).then((e=>({id:r,uploaderId:t,items:e,state:s?o.FG.PENDING:o.FG.ADDED,completed:0,loaded:0,orgItemCount:e.length,additionalInfo:null})))})(e,t,n).then((e=>s.addBatch(e,n))),runCancellable:s.runCancellable,clearPendingBatches:()=>{s.clearPendingBatches()},processPendingBatches:e=>{s.uploadPendingBatches(e)}}},ue=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return t.reduce(((e,t)=>t(e,...r)||e),e)}},he=Object.values(A);let pe=0;const ge=e=>{pe+=1;const t=`uploader-${pe}`;let n=!1;const a={};o.kg.debugLog(`uploady.uploader: creating new instance (${t})`,{options:e,counter:pe});let s=(e=>{return{...ae,...e,destination:e&&e.destination?(t=e.destination,{params:{},...t}):null};var t})(e);const i=()=>{g.clearPendingBatches()};let{trigger:l,target:d}=(0,r.ZP)({id:t,update:e=>(s=(0,o.TS)({},s,e),d),add:(e,t)=>{const n=(0,o.TS)({},s,t);return n.clearPendingOnAdd&&i(),g.addNewBatch(e,d.id,n).then((e=>{let t;return e.items.length?t=g.runCancellable(A.BATCH_ADD,e,n).then((t=>{t?(e.state=o.FG.CANCELLED,c(A.BATCH_CANCEL,e)):(o.kg.debugLog(`uploady.uploader [${d.id}]: new items added - auto upload =\n ${String(n.autoUpload)}`,e.items),n.autoUpload&&g.process(e))})):o.kg.debugLog(`uploady.uploader: no items to add. batch ${e.id} is empty. check fileFilter if this isn't intended`),t}))},upload:e=>{g.processPendingBatches(e)},abort:e=>{g.abort(e)},abortBatch:e=>{g.abortBatch(e)},getOptions:()=>(0,o.d9)(s),clearPending:i,registerExtension:(e,t)=>{(0,o.kG)(n,"Uploady - uploader extensions can only be registered by enhancers"),(0,o.kG)(!a[e],"Uploady - uploader extension by this name [%s] already exists",e),o.kg.debugLog(`uploady.uploader: registering extension: ${e.toString()}`,t),a[e]=t},getExtension:e=>a[e]},he,{canAddEvents:!1,canRemoveEvents:!1});const c=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const a=(0,r.uZ)((()=>n.map(le)));return l(e,a)},u=(0,o.tq)(c),p=((e,t,n,r)=>{const o=t.enhancer?(a=t.enhancer,ue(h(),a)):h();var a;r(!0);const s=o(e,n);return r(!1),s||e})(d,s,c,(e=>{n=e})),g=ce(c,u,s,p.id);return(0,o.ZV)(p)},fe=ge}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,n,o,a)=>{if(!n){var s=1/0;for(c=0;c<e.length;c++){for(var[n,o,a]=e[c],i=!0,l=0;l<n.length;l++)(!1&a||s>=a)&&Object.keys(r.O).every((e=>r.O[e](n[l])))?n.splice(l--,1):(i=!1,a<s&&(s=a));if(i){e.splice(c--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[n,o,a]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={321:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var o,a,[s,i,l]=n,d=0;if(s.some((t=>0!==e[t]))){for(o in i)r.o(i,o)&&(r.m[o]=i[o]);if(l)var c=l(r)}for(t&&t(n);d<s.length;d++)a=s[d],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(c)},n=globalThis.webpackChunkrpldy=globalThis.webpackChunkrpldy||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.O(void 0,[429],(()=>r("SKjz"))),r.O(void 0,[429],(()=>r("tU4p"))),r.O(void 0,[429],(()=>r("Vmq3")));var o=r.O(void 0,[429],(()=>r("4W+v")));return r.O(o)})()));
//# sourceMappingURL=rpldy-core.umd.min.js.map
{
"version": "1.0.1",
"version": "1.1.0-rc.0",
"name": "@rpldy/uploader",

@@ -33,6 +33,8 @@ "description": "the processing and queuing engine for react-uploady",

"dependencies": {
"@rpldy/life-events": "^1.0.1",
"@rpldy/sender": "^1.0.1",
"@rpldy/shared": "^1.0.1",
"@rpldy/simple-state": "^1.0.1"
"@rpldy/abort": "^1.1.0-rc.0",
"@rpldy/life-events": "^1.1.0-rc.0",
"@rpldy/raw-uploader": "^1.1.0-rc.0",
"@rpldy/sender": "^1.1.0-rc.0",
"@rpldy/shared": "^1.1.0-rc.0",
"@rpldy/simple-state": "^1.1.0-rc.0"
},

@@ -45,3 +47,3 @@ "devDependencies": {

},
"gitHead": "67393f3c81f65b61f3b247a1b95eb1448dcb06fa"
"gitHead": "a80346f4acdf01b889077da006328610142fa42e"
}

@@ -0,45 +1,19 @@

import { Trigger } from "@rpldy/shared";
import { SendMethod } from "@rpldy/sender";
import {
UploadOptions,
Batch,
Trigger,
UploadInfo,
} from "@rpldy/shared";
import {
SendMethod,
} from "@rpldy/sender";
RawUploaderType,
RawCreateOptions,
UploadAddMethod,
} from "@rpldy/raw-uploader";
import { OnAndOnceMethod, OffMethod } from "@rpldy/life-events";
export type UploadAddMethod = (files: UploadInfo | UploadInfo[], addOptions?: UploadOptions) => Promise<void>
export type PendingBatch = {
batch: Batch;
uploadOptions: CreateOptions;
};
export type RegisterExtensionMethod = (name: unknown, methods: { [key: string]: (...args: any[]) => void | unknown }) => void;
export type UploaderType = {
id: string;
export type UploaderType = RawUploaderType & {
update: (updateOptions: CreateOptions) => UploaderType;
add: UploadAddMethod;
upload: (uploadOptions?: UploadOptions) => void;
abort: (id?: string) => void;
abortBatch: (id: string) => void;
getOptions: () => CreateOptions;
getPending: () => PendingBatch[];
clearPending: () => void;
on: OnAndOnceMethod;
once: OnAndOnceMethod;
off: OffMethod;
registerExtension: RegisterExtensionMethod;
getExtension: (name: unknown) => Record<string, unknown>;
}
};
export type UploaderEnhancer = (uploader: UploaderType, trigger: Trigger<any>) => UploaderType;
export interface CreateOptions extends UploadOptions {
export interface CreateOptions extends RawCreateOptions {
enhancer?: UploaderEnhancer;
concurrent?: boolean;
maxConcurrent?: number;
send?: SendMethod;

@@ -81,1 +55,2 @@ }

export { FileFilterMethod, Trigger } from "@rpldy/shared";
export { UploadAddMethod };
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc