@uppy/compressor
Advanced tools
Comparing version 1.0.2 to 1.0.3
# @uppy/compressor | ||
## 1.0.3 | ||
Released: 2023-09-18 | ||
Included in: Uppy v3.16.0 | ||
- @uppy/compressor: update file.meta.name after compression, becase format/extension might have changed (Artur Paikin / #4645) | ||
## 1.0.1 | ||
@@ -4,0 +11,0 @@ |
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; } | ||
var id = 0; | ||
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; } | ||
import { BasePlugin } from '@uppy/core'; | ||
@@ -11,7 +8,5 @@ import { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue'; | ||
import prettierBytes from '@transloadit/prettier-bytes'; | ||
import CompressorJS from 'compressorjs/dist/compressor.common.js'; | ||
import CompressorJS from 'compressorjs'; | ||
import locale from './locale.js'; | ||
var _RateLimitedQueue = /*#__PURE__*/_classPrivateFieldLooseKey("RateLimitedQueue"); | ||
export default class Compressor extends BasePlugin { | ||
@@ -31,3 +26,4 @@ constructor(uppy, opts) { | ||
}; | ||
this.opts = { ...defaultOptions, | ||
this.opts = { | ||
...defaultOptions, | ||
...opts | ||
@@ -40,7 +36,7 @@ }; | ||
} | ||
compress(blob) { | ||
return new Promise((resolve, reject) => { | ||
/* eslint-disable no-new */ | ||
new CompressorJS(blob, { ...this.opts, | ||
new CompressorJS(blob, { | ||
...this.opts, | ||
success: resolve, | ||
@@ -51,7 +47,5 @@ error: reject | ||
} | ||
async prepareUpload(fileIDs) { | ||
let totalCompressedSize = 0; | ||
const compressedFiles = []; | ||
const compressAndApplyResult = _classPrivateFieldLooseBase(this, _RateLimitedQueue)[_RateLimitedQueue].wrapPromiseFunction(async file => { | ||
@@ -68,8 +62,13 @@ try { | ||
} = compressedBlob; | ||
const extension = name && getFileNameAndExtension(name).extension; | ||
this.uppy.setFileState(file.id, { ...(name && { | ||
const compressedFileName = getFileNameAndExtension(name); | ||
const metaFileName = getFileNameAndExtension(file.meta.name); | ||
// Name (file.meta.name) might have been changed by user, so we update only the extension | ||
const newMetaName = `${metaFileName.name}.${compressedFileName.extension}`; | ||
this.uppy.setFileState(file.id, { | ||
...(name && { | ||
name | ||
}), | ||
...(extension && { | ||
extension | ||
...(compressedFileName.extension && { | ||
extension: compressedFileName.extension | ||
}), | ||
@@ -82,7 +81,9 @@ ...(type && { | ||
}), | ||
data: compressedBlob | ||
data: compressedBlob, | ||
meta: { | ||
...file.meta, | ||
type, | ||
name: newMetaName | ||
} | ||
}); | ||
this.uppy.setFileMeta(file.id, { | ||
type | ||
}); | ||
compressedFiles.push(file); | ||
@@ -94,3 +95,2 @@ } catch (err) { | ||
}); | ||
const promises = fileIDs.map(fileID => { | ||
@@ -102,27 +102,26 @@ const file = this.uppy.getFile(fileID); | ||
}); | ||
if (file.isRemote) { | ||
return Promise.resolve(); | ||
} // Some browsers (Firefox) add blobs with empty file type, when files are | ||
} | ||
// Some browsers (Firefox) add blobs with empty file type, when files are | ||
// added from a folder. Uppy auto-detects type from extension, but leaves the original blob intact. | ||
// However, Compressor.js failes when file has no type, so we set it here | ||
if (!file.data.type) { | ||
file.data = file.data.slice(0, file.data.size, file.type); | ||
} | ||
if (!file.type.startsWith('image/')) { | ||
return Promise.resolve(); | ||
} | ||
return compressAndApplyResult(file); | ||
}); | ||
return compressAndApplyResult(file); | ||
}); // Why emit `preprocess-complete` for all files at once, instead of | ||
// Why emit `preprocess-complete` for all files at once, instead of | ||
// above when each is processed? | ||
// Because it leads to StatusBar showing a weird “upload 6 files” button, | ||
// while waiting for all the files to complete pre-processing. | ||
await Promise.all(promises); | ||
this.uppy.emit('compressor:complete', compressedFiles); // Only show informer if Compressor mananged to save at least a kilobyte | ||
this.uppy.emit('compressor:complete', compressedFiles); | ||
// Only show informer if Compressor mananged to save at least a kilobyte | ||
if (totalCompressedSize > 1024) { | ||
@@ -133,3 +132,2 @@ this.uppy.info(this.i18n('compressedX', { | ||
} | ||
for (const fileID of fileIDs) { | ||
@@ -140,11 +138,8 @@ const file = this.uppy.getFile(fileID); | ||
} | ||
install() { | ||
this.uppy.addPreProcessor(this.prepareUpload); | ||
} | ||
uninstall() { | ||
this.uppy.removePreProcessor(this.prepareUpload); | ||
} | ||
} |
{ | ||
"name": "@uppy/compressor", | ||
"description": "Uppy plugin that compresses images before upload, saving up to 60% in size", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"license": "MIT", | ||
@@ -27,3 +27,3 @@ "main": "lib/index.js", | ||
"@transloadit/prettier-bytes": "^0.0.9", | ||
"@uppy/utils": "^5.3.0", | ||
"@uppy/utils": "^5.5.0", | ||
"compressorjs": "^1.1.1", | ||
@@ -34,7 +34,10 @@ "preact": "^10.5.13", | ||
"peerDependencies": { | ||
"@uppy/core": "^3.2.0" | ||
"@uppy/core": "^3.5.0" | ||
}, | ||
"publishConfig": { | ||
"access": "public" | ||
}, | ||
"devDependencies": { | ||
"@jest/globals": "^29.0.0" | ||
} | ||
} |
@@ -5,3 +5,3 @@ import { BasePlugin } from '@uppy/core' | ||
import prettierBytes from '@transloadit/prettier-bytes' | ||
import CompressorJS from 'compressorjs/dist/compressor.common.js' | ||
import CompressorJS from 'compressorjs' | ||
import locale from './locale.js' | ||
@@ -56,11 +56,21 @@ | ||
const { name, type, size } = compressedBlob | ||
const extension = name && getFileNameAndExtension(name).extension | ||
const compressedFileName = getFileNameAndExtension(name) | ||
const metaFileName = getFileNameAndExtension(file.meta.name) | ||
// Name (file.meta.name) might have been changed by user, so we update only the extension | ||
const newMetaName = `${metaFileName.name}.${compressedFileName.extension}` | ||
this.uppy.setFileState(file.id, { | ||
...(name && { name }), | ||
...(extension && { extension }), | ||
...(compressedFileName.extension && { extension: compressedFileName.extension }), | ||
...(type && { type }), | ||
...(size && { size }), | ||
data: compressedBlob, | ||
meta: { | ||
...file.meta, | ||
type, | ||
name: newMetaName, | ||
}, | ||
}) | ||
this.uppy.setFileMeta(file.id, { type }) | ||
compressedFiles.push(file) | ||
@@ -67,0 +77,0 @@ } catch (err) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
28195
14
329
1
Updated@uppy/utils@^5.5.0