This commit is contained in:
parent
fa2be029a2
commit
724d70e58b
3339 changed files with 1075535 additions and 0 deletions
27
frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js
generated
vendored
Normal file
27
frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js
generated
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import isCordova from './isCordova.js'
|
||||
import readAsByteArray from './readAsByteArray.js'
|
||||
|
||||
export default class FileSource {
|
||||
// Make this.size a method
|
||||
constructor(file) {
|
||||
this._file = file
|
||||
this.size = file.size
|
||||
}
|
||||
|
||||
slice(start, end) {
|
||||
// In Apache Cordova applications, a File must be resolved using
|
||||
// FileReader instances, see
|
||||
// https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file
|
||||
if (isCordova()) {
|
||||
return readAsByteArray(this._file.slice(start, end))
|
||||
}
|
||||
|
||||
const value = this._file.slice(start, end)
|
||||
const done = end >= this.size
|
||||
return Promise.resolve({ value, done })
|
||||
}
|
||||
|
||||
close() {
|
||||
// Nothing to do here since we don't need to release any resources.
|
||||
}
|
||||
}
|
||||
89
frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js
generated
vendored
Normal file
89
frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js
generated
vendored
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
function len(blobOrArray) {
|
||||
if (blobOrArray === undefined) return 0
|
||||
if (blobOrArray.size !== undefined) return blobOrArray.size
|
||||
return blobOrArray.length
|
||||
}
|
||||
|
||||
/*
|
||||
Typed arrays and blobs don't have a concat method.
|
||||
This function helps StreamSource accumulate data to reach chunkSize.
|
||||
*/
|
||||
function concat(a, b) {
|
||||
if (a.concat) {
|
||||
// Is `a` an Array?
|
||||
return a.concat(b)
|
||||
}
|
||||
if (a instanceof Blob) {
|
||||
return new Blob([a, b], { type: a.type })
|
||||
}
|
||||
if (a.set) {
|
||||
// Is `a` a typed array?
|
||||
const c = new a.constructor(a.length + b.length)
|
||||
c.set(a)
|
||||
c.set(b, a.length)
|
||||
return c
|
||||
}
|
||||
throw new Error('Unknown data type')
|
||||
}
|
||||
|
||||
export default class StreamSource {
|
||||
constructor(reader) {
|
||||
this._buffer = undefined
|
||||
this._bufferOffset = 0
|
||||
this._reader = reader
|
||||
this._done = false
|
||||
}
|
||||
|
||||
slice(start, end) {
|
||||
if (start < this._bufferOffset) {
|
||||
return Promise.reject(new Error("Requested data is before the reader's current offset"))
|
||||
}
|
||||
|
||||
return this._readUntilEnoughDataOrDone(start, end)
|
||||
}
|
||||
|
||||
_readUntilEnoughDataOrDone(start, end) {
|
||||
const hasEnoughData = end <= this._bufferOffset + len(this._buffer)
|
||||
if (this._done || hasEnoughData) {
|
||||
const value = this._getDataFromBuffer(start, end)
|
||||
const done = value == null ? this._done : false
|
||||
return Promise.resolve({ value, done })
|
||||
}
|
||||
|
||||
return this._reader.read().then(({ value, done }) => {
|
||||
if (done) {
|
||||
this._done = true
|
||||
} else if (this._buffer === undefined) {
|
||||
this._buffer = value
|
||||
} else {
|
||||
this._buffer = concat(this._buffer, value)
|
||||
}
|
||||
|
||||
return this._readUntilEnoughDataOrDone(start, end)
|
||||
})
|
||||
}
|
||||
|
||||
_getDataFromBuffer(start, end) {
|
||||
// Remove data from buffer before `start`.
|
||||
// Data might be reread from the buffer if an upload fails, so we can only
|
||||
// safely delete data when it comes *before* what is currently being read.
|
||||
if (start > this._bufferOffset) {
|
||||
this._buffer = this._buffer.slice(start - this._bufferOffset)
|
||||
this._bufferOffset = start
|
||||
}
|
||||
// If the buffer is empty after removing old data, all data has been read.
|
||||
const hasAllDataBeenRead = len(this._buffer) === 0
|
||||
if (this._done && hasAllDataBeenRead) {
|
||||
return null
|
||||
}
|
||||
// We already removed data before `start`, so we just return the first
|
||||
// chunk from the buffer.
|
||||
return this._buffer.slice(0, end - start)
|
||||
}
|
||||
|
||||
close() {
|
||||
if (this._reader.cancel) {
|
||||
this._reader.cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
7
frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js
generated
vendored
Normal file
7
frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
const isCordova = () =>
|
||||
typeof window !== 'undefined' &&
|
||||
(typeof window.PhoneGap !== 'undefined' ||
|
||||
typeof window.Cordova !== 'undefined' ||
|
||||
typeof window.cordova !== 'undefined')
|
||||
|
||||
export default isCordova
|
||||
18
frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js
generated
vendored
Normal file
18
frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js
generated
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* readAsByteArray converts a File object to a Uint8Array.
|
||||
* This function is only used on the Apache Cordova platform.
|
||||
* See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file
|
||||
*/
|
||||
export default function readAsByteArray(chunk) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader()
|
||||
reader.onload = () => {
|
||||
const value = new Uint8Array(reader.result)
|
||||
resolve({ value })
|
||||
}
|
||||
reader.onerror = (err) => {
|
||||
reject(err)
|
||||
}
|
||||
reader.readAsArrayBuffer(chunk)
|
||||
})
|
||||
}
|
||||
Reference in a new issue