@amaui/utils
Version:
196 lines (195 loc) • 9.11 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sizeFormat = exports.blobToDataURI = exports.dataUriToBuffer = exports.dataUriToBlob = void 0;
const is_1 = __importDefault(require("./is"));
const isValid_1 = __importDefault(require("./isValid"));
const isEnvironment_1 = __importDefault(require("./isEnvironment"));
const stringify_1 = __importDefault(require("./stringify"));
const castParam_1 = __importDefault(require("./castParam"));
// Only for browser, since browser only has Blob
const dataUriToBlob = (value, arrayBuffer = false) => {
if ((0, isValid_1.default)('datauri', value) || (0, isValid_1.default)('base64', value)) {
try {
// Convert base64 to raw binary data held in a string
const byteString = atob((0, isValid_1.default)('datauri', value) ? value.split(',')[1] : value);
// Separate out the mime component
const mimeString = (0, isValid_1.default)('datauri', value) && value.split(',')[0].split(':')[1].split(';')[0];
// Write the bytes of the string to an ArrayBuffer
const ab = new ArrayBuffer(byteString.length * 2);
// create a view into the buffer
const ia = new Uint16Array(ab);
// Set the bytes of the buffer to the correct values
for (let i = 0; i < byteString.length; i++)
ia[i] = byteString.charCodeAt(i);
if (arrayBuffer)
return ab;
// Write the ArrayBuffer to a blob, and you're done
const blob = new Blob([ab], { type: mimeString });
return blob;
}
catch (error) {
return;
}
}
};
exports.dataUriToBlob = dataUriToBlob;
// Only for nodejs, since only nodejs has Buffer
const dataUriToBuffer = (value) => {
if ((0, isValid_1.default)('datauri', value) || (0, isValid_1.default)('base64', value)) {
try {
// Extract the base64 data from dataUri
const data = (0, isValid_1.default)('datauri', value) ? value.split(',')[1] : value;
// Create buffer from base64 string
return Buffer.from(data, 'base64');
}
catch (error) {
return;
}
}
};
exports.dataUriToBuffer = dataUriToBuffer;
const blobToDataURI = blob => new Promise(resolve => {
const fileReader = new FileReader();
fileReader.onload = event => resolve(event.target.result);
fileReader.readAsDataURL(blob);
});
exports.blobToDataURI = blobToDataURI;
const sizeFormat = (value, decimals = 2, thousand = 1000) => {
if (!(0, is_1.default)('number', value) || value <= 0)
return '0 Bytes';
const k = thousand;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const unitIndex = Math.floor(Math.log(value) / Math.log(k));
return `${parseFloat((value / Math.pow(k, unitIndex)).toFixed(dm))} ${sizes[unitIndex]}`;
};
exports.sizeFormat = sizeFormat;
const optionsDefault = {
thousand: 1000,
decimals: 2,
mime: 'text/plain',
};
const to = (value_, type = 'arraybuffer', options_ = {}) => {
const options = Object.assign(Object.assign({}, optionsDefault), options_);
let value = value_;
switch (type) {
case 'string':
if ((0, is_1.default)('arraybuffer', value))
return String.fromCharCode.apply(null, new Uint16Array(value));
if ((0, is_1.default)('buffer', value))
return value.toString('utf-8');
if ((0, isValid_1.default)('base64', value)) {
if ((0, isEnvironment_1.default)('browser'))
return atob(value);
if ((0, isEnvironment_1.default)('nodejs'))
return Buffer.from(value, 'base64').toString('binary');
}
if ((0, isValid_1.default)('datauri', value)) {
if ((0, isEnvironment_1.default)('browser'))
return atob(value.split(',')[1]);
if ((0, isEnvironment_1.default)('nodejs'))
return Buffer.from(value.split(',')[1], 'base64').toString('binary');
}
if ((0, is_1.default)('string', value))
return value;
return (0, stringify_1.default)(value);
case 'arraybuffer':
if ((0, isValid_1.default)('base64', value)) {
if ((0, isEnvironment_1.default)('browser'))
return (0, exports.dataUriToBlob)(value, true);
if ((0, isEnvironment_1.default)('nodejs'))
return to(Buffer.from(value, 'base64'), 'arraybuffer', options);
}
if ((0, isValid_1.default)('datauri', value)) {
if ((0, isEnvironment_1.default)('browser'))
return (0, exports.dataUriToBlob)(value, true);
if ((0, isEnvironment_1.default)('nodejs'))
return to(value.split(',')[1], 'arraybuffer', options);
}
if ((0, is_1.default)('string', value)) {
const arrayBuffer = new ArrayBuffer(value.length * 2);
const arrayBufferView = new Uint16Array(arrayBuffer);
for (let i = 0; i < value.length; i++)
arrayBufferView[i] = value.charCodeAt(i);
return arrayBuffer;
}
if ((0, is_1.default)('buffer', value)) {
const arrayBuffer = new ArrayBuffer(value.length * 2);
const arrayBufferView = new Uint16Array(arrayBuffer);
for (let i = 0; i < value.length; i++)
arrayBufferView[i] = value[i];
return arrayBuffer;
}
if ((0, is_1.default)('arraybuffer', value))
return value;
return;
case 'base64':
if ((0, isValid_1.default)('base64', value))
return value;
if ((0, is_1.default)('string', value)) {
if ((0, isEnvironment_1.default)('browser'))
value = btoa(value);
if ((0, isEnvironment_1.default)('nodejs'))
value = Buffer.from(value, 'binary').toString('base64');
return value;
}
return;
case 'datauri':
if ((0, isValid_1.default)('datauri', value))
return value;
if ((0, is_1.default)('string', value)) {
let base64;
if ((0, isEnvironment_1.default)('browser'))
base64 = btoa(value);
if ((0, isEnvironment_1.default)('nodejs'))
base64 = Buffer.from(value, 'binary').toString('base64');
return `data:${options.mime};base64,${base64}`;
}
return;
case 'blob':
if ((0, isEnvironment_1.default)('browser')) {
if ((0, isValid_1.default)('base64', value))
return (0, exports.dataUriToBlob)(value);
if ((0, isValid_1.default)('datauri', value))
return (0, exports.dataUriToBlob)(value);
if ((0, is_1.default)('string', value))
return new Blob([value], { type: 'text/plain' });
if ((0, is_1.default)('blob', value))
return value;
}
return;
case 'buffer':
if ((0, isEnvironment_1.default)('nodejs')) {
if ((0, isValid_1.default)('base64', value))
return (0, exports.dataUriToBuffer)(value);
if ((0, isValid_1.default)('datauri', value))
return (0, exports.dataUriToBuffer)(value);
if ((0, is_1.default)('string', value))
return Buffer.from(value, 'utf-8');
if ((0, is_1.default)('buffer', value))
return value;
return Buffer.from((0, stringify_1.default)(value), 'utf-8');
}
return;
case 'byte-size':
if ((0, is_1.default)('string', value))
return new TextEncoder().encode(value).byteLength;
if ((0, is_1.default)('typedarray', value) || (0, is_1.default)('buffer', value))
return value.byteLength;
return;
case 'size-format':
if ((0, is_1.default)('string', value) || (0, is_1.default)('number', value))
return (0, exports.sizeFormat)((0, castParam_1.default)(value), options.decimals, options.thousand);
return;
case 'size':
if ((0, is_1.default)('string', value))
return (0, exports.sizeFormat)((0, castParam_1.default)(new TextEncoder().encode(value).byteLength), options.decimals, options.thousand);
return;
default:
return;
}
};
exports.default = to;