UNPKG

@rpldy/uploader

Version:

the processing and queuing engine for react-uploady

97 lines (96 loc) 4.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lifeEvents = _interopRequireWildcard(require("@rpldy/life-events")); var _shared = require("@rpldy/shared"); var _abort = _interopRequireDefault(require("@rpldy/abort")); var _processor = _interopRequireDefault(require("./processor")); var _consts = require("./consts"); var _utils = require("./utils"); var _composeEnhancers = _interopRequireDefault(require("./composeEnhancers")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const EVENT_NAMES = Object.values(_consts.UPLOADER_EVENTS); const EXT_OUTSIDE_ENHANCER_TIME = "Uploady - uploader extensions can only be registered by enhancers", EXT_ALREADY_EXISTS = "Uploady - uploader extension by this name [%s] already exists"; let counter = 0; const getComposedEnhancer = extEnhancer => (0, _composeEnhancers.default)((0, _abort.default)(), extEnhancer); const getEnhancedUploader = (uploader, options, triggerWithUnwrap, setEnhancerTime) => { const enhancer = options.enhancer ? getComposedEnhancer(options.enhancer) : (0, _abort.default)(); setEnhancerTime(true); const enhanced = enhancer(uploader, triggerWithUnwrap); setEnhancerTime(false); return enhanced || uploader; }; const createUploader = options => { counter += 1; const uploaderId = `uploader-${counter}`; let enhancerTime = false; const extensions = {}; _shared.logger.debugLog(`uploady.uploader: creating new instance (${uploaderId})`, { options, counter }); let uploaderOptions = (0, _utils.getMandatoryOptions)(options); const clearPending = () => { processor.clearPendingBatches(); }; const getOptions = () => { return (0, _shared.clone)(uploaderOptions); }; let { trigger, target: uploader } = (0, _lifeEvents.default)({ id: uploaderId, update: updateOptions => { uploaderOptions = (0, _shared.merge)({}, uploaderOptions, updateOptions); return uploader; }, add: (files, addOptions) => { const processOptions = (0, _shared.merge)({}, uploaderOptions, addOptions); if (processOptions.clearPendingOnAdd) { clearPending(); } return processor.addNewBatch(files, processOptions).then(() => { _shared.logger.debugLog(`uploady.uploader: finished adding file data to be processed`); }); }, upload: uploadOptions => { processor.processPendingBatches(uploadOptions); }, abort: id => { processor.abort(id); }, abortBatch: id => { processor.abortBatch(id); }, getOptions, clearPending, registerExtension: (name, methods) => { (0, _shared.invariant)(enhancerTime, EXT_OUTSIDE_ENHANCER_TIME); (0, _shared.invariant)(!extensions[name], EXT_ALREADY_EXISTS, name); _shared.logger.debugLog(`uploady.uploader: registering extension: ${name.toString()}`, methods); extensions[name] = methods; }, getExtension: name => { return extensions[name]; } }, EVENT_NAMES, { canAddEvents: false, canRemoveEvents: false }); const triggerWithUnwrap = (name, ...data) => { const lp = (0, _lifeEvents.createLifePack)(() => data.map(_utils.deepProxyUnwrap)); return trigger(name, lp); }; const cancellable = (0, _shared.triggerCancellable)(triggerWithUnwrap); const enhancedUploader = getEnhancedUploader(uploader, uploaderOptions, triggerWithUnwrap, state => { enhancerTime = state; }); const processor = (0, _processor.default)(triggerWithUnwrap, cancellable, uploaderOptions, enhancedUploader.id); return (0, _shared.devFreeze)(enhancedUploader); }; var _default = exports.default = createUploader;