Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

tus.min.js 18KB

1
  1. (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.tus=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.encode=encode;var _window=window;var btoa=_window.btoa;function encode(data){return btoa(unescape(encodeURIComponent(data)))}var isSupported=exports.isSupported="btoa"in window},{}],2:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.newRequest=newRequest;exports.resolveUrl=resolveUrl;var _resolveUrl=_dereq_("resolve-url");var _resolveUrl2=_interopRequireDefault(_resolveUrl);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function newRequest(){return new window.XMLHttpRequest}function resolveUrl(origin,link){return(0,_resolveUrl2.default)(origin,link)}},{"resolve-url":10}],3:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});exports.getSource=getSource;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var FileSource=function(){function FileSource(file){_classCallCheck(this,FileSource);this._file=file;this.size=file.size}_createClass(FileSource,[{key:"slice",value:function slice(start,end){return this._file.slice(start,end)}},{key:"close",value:function close(){}}]);return FileSource}();function getSource(input){if(typeof input.slice==="function"&&typeof input.size!=="undefined"){return new FileSource(input)}throw new Error("source object may only be an instance of File or Blob in this environment")}},{}],4:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.setItem=setItem;exports.getItem=getItem;exports.removeItem=removeItem;var hasStorage=false;try{hasStorage="localStorage"in window;var key="tusSupport";localStorage.setItem(key,localStorage.getItem(key))}catch(e){if(e.code===e.SECURITY_ERR||e.code===e.QUOTA_EXCEEDED_ERR){hasStorage=false}else{throw e}}var canStoreURLs=exports.canStoreURLs=hasStorage;function setItem(key,value){if(!hasStorage)return;return localStorage.setItem(key,value)}function getItem(key){if(!hasStorage)return;return localStorage.getItem(key)}function removeItem(key){if(!hasStorage)return;return localStorage.removeItem(key)}},{}],5:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var DetailedError=function(_Error){_inherits(DetailedError,_Error);function DetailedError(error){var causingErr=arguments.length<=1||arguments[1]===undefined?null:arguments[1];var xhr=arguments.length<=2||arguments[2]===undefined?null:arguments[2];_classCallCheck(this,DetailedError);var _this=_possibleConstructorReturn(this,Object.getPrototypeOf(DetailedError).call(this,error.message));_this.originalRequest=xhr;_this.causingError=causingErr;var message=error.message;if(causingErr!=null){message+=", caused by "+causingErr.toString()}if(xhr!=null){message+=", originated from request (response code: "+xhr.status+", response text: "+xhr.responseText+")"}_this.message=message;return _this}return DetailedError}(Error);exports.default=DetailedError},{}],6:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=fingerprint;function fingerprint(file,options){return["tus",file.name,file.type,file.size,file.lastModified,options.endpoint].join("-")}},{}],7:[function(_dereq_,module,exports){"use strict";var _upload=_dereq_("./upload");var _upload2=_interopRequireDefault(_upload);var _storage=_dereq_("./node/storage");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var defaultOptions=_upload2.default.defaultOptions;var isSupported=void 0;if(typeof window!=="undefined"){var _window=window;var XMLHttpRequest=_window.XMLHttpRequest;var Blob=_window.Blob;isSupported=XMLHttpRequest&&Blob&&typeof Blob.prototype.slice==="function"}else{isSupported=true}module.exports={Upload:_upload2.default,isSupported:isSupported,canStoreURLs:_storage.canStoreURLs,defaultOptions:defaultOptions}},{"./node/storage":4,"./upload":8}],8:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});var _fingerprint=_dereq_("./fingerprint");var _fingerprint2=_interopRequireDefault(_fingerprint);var _error=_dereq_("./error");var _error2=_interopRequireDefault(_error);var _extend=_dereq_("extend");var _extend2=_interopRequireDefault(_extend);var _request=_dereq_("./node/request");var _source=_dereq_("./node/source");var _base=_dereq_("./node/base64");var Base64=_interopRequireWildcard(_base);var _storage=_dereq_("./node/storage");var Storage=_interopRequireWildcard(_storage);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var defaultOptions={endpoint:null,fingerprint:_fingerprint2.default,resume:true,onProgress:null,onChunkComplete:null,onSuccess:null,onError:null,headers:{},chunkSize:Infinity,withCredentials:false,uploadUrl:null,uploadSize:null,overridePatchMethod:false,retryDelays:null,removeFingerprintOnSuccess:false};var Upload=function(){function Upload(file,options){_classCallCheck(this,Upload);this.options=(0,_extend2.default)(true,{},defaultOptions,options);this.file=file;this.url=null;this._xhr=null;this._fingerprint=null;this._offset=null;this._aborted=false;this._size=null;this._source=null;this._retryAttempt=0;this._retryTimeout=null;this._offsetBeforeRetry=0}_createClass(Upload,[{key:"start",value:function start(){var _this=this;var file=this.file;if(!file){this._emitError(new Error("tus: no file or stream to upload provided"));return}if(!this.options.endpoint&&!this.options.uploadUrl){this._emitError(new Error("tus: neither an endpoint or an upload URL is provided"));return}var source=this._source=(0,_source.getSource)(file,this.options.chunkSize);if(this.options.uploadSize!=null){var size=+this.options.uploadSize;if(isNaN(size)){throw new Error("tus: cannot convert `uploadSize` option into a number")}this._size=size}else{var size=source.size;if(size==null){throw new Error("tus: cannot automatically derive upload's size from input and must be specified manually using the `uploadSize` option")}this._size=size}var retryDelays=this.options.retryDelays;if(retryDelays!=null){if(Object.prototype.toString.call(retryDelays)!=="[object Array]"){throw new Error("tus: the `retryDelays` option must either be an array or null")}else{(function(){var errorCallback=_this.options.onError;_this.options.onError=function(err){_this.options.onError=errorCallback;var shouldResetDelays=_this._offset!=null&&_this._offset>_this._offsetBeforeRetry;if(shouldResetDelays){_this._retryAttempt=0}var isOnline=true;if(typeof window!=="undefined"&&"navigator"in window&&window.navigator.onLine===false){isOnline=false}var shouldRetry=_this._retryAttempt<retryDelays.length&&err.originalRequest!=null&&!inStatusCategory(err.originalRequest.status,400)&&isOnline;if(!shouldRetry){_this._emitError(err);return}var delay=retryDelays[_this._retryAttempt++];_this._offsetBeforeRetry=_this._offset;_this.options.uploadUrl=_this.url;_this._retryTimeout=setTimeout(function(){_this.start()},delay)}})()}}this._aborted=false;if(this.url!=null){this._resumeUpload();return}if(this.options.uploadUrl!=null){this.url=this.options.uploadUrl;this._resumeUpload();return}if(this.options.resume){this._fingerprint=this.options.fingerprint(file,this.options);var resumedUrl=Storage.getItem(this._fingerprint);if(resumedUrl!=null){this.url=resumedUrl;this._resumeUpload();return}}this._createUpload()}},{key:"abort",value:function abort(){if(this._xhr!==null){this._xhr.abort();this._source.close();this._aborted=true}if(this._retryTimeout!=null){clearTimeout(this._retryTimeout);this._retryTimeout=null}}},{key:"_emitXhrError",value:function _emitXhrError(xhr,err,causingErr){this._emitError(new _error2.default(err,causingErr,xhr))}},{key:"_emitError",value:function _emitError(err){if(typeof this.options.onError==="function"){this.options.onError(err)}else{throw err}}},{key:"_emitSuccess",value:function _emitSuccess(){if(typeof this.options.onSuccess==="function"){this.options.onSuccess()}}},{key:"_emitProgress",value:function _emitProgress(bytesSent,bytesTotal){if(typeof this.options.onProgress==="function"){this.options.onProgress(bytesSent,bytesTotal)}}},{key:"_emitChunkComplete",value:function _emitChunkComplete(chunkSize,bytesAccepted,bytesTotal){if(typeof this.options.onChunkComplete==="function"){this.options.onChunkComplete(chunkSize,bytesAccepted,bytesTotal)}}},{key:"_setupXHR",value:function _setupXHR(xhr){this._xhr=xhr;xhr.setRequestHeader("Tus-Resumable","1.0.0");var headers=this.options.headers;for(var name in headers){xhr.setRequestHeader(name,headers[name])}xhr.withCredentials=this.options.withCredentials}},{key:"_createUpload",value:function _createUpload(){var _this2=this;if(!this.options.endpoint){this._emitError(new Error("tus: unable to create upload because no endpoint is provided"));return}var xhr=(0,_request.newRequest)();xhr.open("POST",this.options.endpoint,true);xhr.onload=function(){if(!inStatusCategory(xhr.status,200)){_this2._emitXhrError(xhr,new Error("tus: unexpected response while creating upload"));return}var location=xhr.getResponseHeader("Location");if(location==null){_this2._emitXhrError(xhr,new Error("tus: invalid or missing Location header"));return}_this2.url=(0,_request.resolveUrl)(_this2.options.endpoint,location);if(_this2._size===0){_this2._emitSuccess();_this2._source.close();return}if(_this2.options.resume){Storage.setItem(_this2._fingerprint,_this2.url)}_this2._offset=0;_this2._startUpload()};xhr.onerror=function(err){_this2._emitXhrError(xhr,new Error("tus: failed to create upload"),err)};this._setupXHR(xhr);xhr.setRequestHeader("Upload-Length",this._size);var metadata=encodeMetadata(this.options.metadata);if(metadata!==""){xhr.setRequestHeader("Upload-Metadata",metadata)}xhr.send(null)}},{key:"_resumeUpload",value:function _resumeUpload(){var _this3=this;var xhr=(0,_request.newRequest)();xhr.open("HEAD",this.url,true);xhr.onload=function(){if(!inStatusCategory(xhr.status,200)){if(_this3.options.resume&&inStatusCategory(xhr.status,400)){Storage.removeItem(_this3._fingerprint)}if(xhr.status===423){_this3._emitXhrError(xhr,new Error("tus: upload is currently locked; retry later"));return}if(!_this3.options.endpoint){_this3._emitXhrError(xhr,new Error("tus: unable to resume upload (new upload cannot be created without an endpoint)"));return}_this3.url=null;_this3._createUpload();return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this3._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}var length=parseInt(xhr.getResponseHeader("Upload-Length"),10);if(isNaN(length)){_this3._emitXhrError(xhr,new Error("tus: invalid or missing length value"));return}if(offset===length){_this3._emitProgress(length,length);_this3._emitSuccess();return}_this3._offset=offset;_this3._startUpload()};xhr.onerror=function(err){_this3._emitXhrError(xhr,new Error("tus: failed to resume upload"),err)};this._setupXHR(xhr);xhr.send(null)}},{key:"_startUpload",value:function _startUpload(){var _this4=this;if(this._aborted){return}var xhr=(0,_request.newRequest)();if(this.options.overridePatchMethod){xhr.open("POST",this.url,true);xhr.setRequestHeader("X-HTTP-Method-Override","PATCH")}else{xhr.open("PATCH",this.url,true)}xhr.onload=function(){if(!inStatusCategory(xhr.status,200)){_this4._emitXhrError(xhr,new Error("tus: unexpected response while uploading chunk"));return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this4._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}_this4._emitProgress(offset,_this4._size);_this4._emitChunkComplete(offset-_this4._offset,offset,_this4._size);_this4._offset=offset;if(offset==_this4._size){if(_this4.options.removeFingerprintOnSuccess&&_this4.options.resume){Storage.removeItem(_this4._fingerprint)}_this4._emitSuccess();_this4._source.close();return}_this4._startUpload()};xhr.onerror=function(err){if(_this4._aborted){return}_this4._emitXhrError(xhr,new Error("tus: failed to upload chunk at offset "+_this4._offset),err)};if("upload"in xhr){xhr.upload.onprogress=function(e){if(!e.lengthComputable){return}_this4._emitProgress(start+e.loaded,_this4._size)}}this._setupXHR(xhr);xhr.setRequestHeader("Upload-Offset",this._offset);xhr.setRequestHeader("Content-Type","application/offset+octet-stream");var start=this._offset;var end=this._offset+this.options.chunkSize;if(end===Infinity||end>this._size){end=this._size}xhr.send(this._source.slice(start,end));this._emitProgress(this._offset,this._size)}}]);return Upload}();function encodeMetadata(metadata){if(!Base64.isSupported){return""}var encoded=[];for(var key in metadata){encoded.push(key+" "+Base64.encode(metadata[key]))}return encoded.join(",")}function inStatusCategory(status,category){return status>=category&&status<category+100}Upload.defaultOptions=defaultOptions;exports.default=Upload},{"./error":5,"./fingerprint":6,"./node/base64":1,"./node/request":2,"./node/source":3,"./node/storage":4,extend:9}],9:[function(_dereq_,module,exports){"use strict";var hasOwn=Object.prototype.hasOwnProperty;var toStr=Object.prototype.toString;var isArray=function isArray(arr){if(typeof Array.isArray==="function"){return Array.isArray(arr)}return toStr.call(arr)==="[object Array]"};var isPlainObject=function isPlainObject(obj){if(!obj||toStr.call(obj)!=="[object Object]"){return false}var hasOwnConstructor=hasOwn.call(obj,"constructor");var hasIsPrototypeOf=obj.constructor&&obj.constructor.prototype&&hasOwn.call(obj.constructor.prototype,"isPrototypeOf");if(obj.constructor&&!hasOwnConstructor&&!hasIsPrototypeOf){return false}var key;for(key in obj){}return typeof key==="undefined"||hasOwn.call(obj,key)};module.exports=function extend(){var options,name,src,copy,copyIsArray,clone,target=arguments[0],i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2}else if(typeof target!=="object"&&typeof target!=="function"||target==null){target={}}for(;i<length;++i){options=arguments[i];if(options!=null){for(name in options){src=target[name];copy=options[name];if(target!==copy){if(deep&&copy&&(isPlainObject(copy)||(copyIsArray=isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&isArray(src)?src:[]}else{clone=src&&isPlainObject(src)?src:{}}target[name]=extend(deep,clone,copy)}else if(typeof copy!=="undefined"){target[name]=copy}}}}}return target}},{}],10:[function(_dereq_,module,exports){void function(root,factory){if(typeof define==="function"&&define.amd){define(factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.resolveUrl=factory()}}(this,function(){function resolveUrl(){var numUrls=arguments.length;if(numUrls===0){throw new Error("resolveUrl requires at least one argument; got none.")}var base=document.createElement("base");base.href=arguments[0];if(numUrls===1){return base.href}var head=document.getElementsByTagName("head")[0];head.insertBefore(base,head.firstChild);var a=document.createElement("a");var resolved;for(var index=1;index<numUrls;index++){a.href=arguments[index];resolved=a.href;base.href=resolved}head.removeChild(base);return resolved}return resolveUrl})},{}]},{},[7])(7)});