blob-fns
Version:
Blob fns is a lightweight, versatile npm package designed to simplify working with Blob objects in JavaScript. Whether you're dealing with text, JSON, images, or binary data, Blob Utilities provides an easy-to-use API for creating, converting, and manipul
178 lines (177 loc) • 5.84 kB
JavaScript
// src/Functions/functions.ts
var createAndDownloadBlob = (data, fileName, mimeType) => {
if (!data || !fileName || !mimeType) {
throw new Error(
"data, fileName, and mimeType are required for createAndDownloadBlob"
);
}
console.log("createAndDownloadBlob -->", { data, fileName, mimeType });
const blob = new Blob([data], { type: mimeType });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
};
var fetchAndDownloadBlob = async (url, fileName, mimeType) => {
if (!url || !fileName || !mimeType) {
throw new Error(
"url, fileName, and mimeType are required for fetchAndDownloadBlob"
);
}
fileName = fileName.replaceAll(".", "");
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.statusText}`);
}
const blob = await response.blob();
const a = document.createElement("a");
const urls = URL.createObjectURL(blob);
a.href = urls;
a.download = fileName;
a.type = mimeType;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(urls);
};
var blobToBase64 = (blob) => {
if (!blob)
throw new Error("blob is required for blobToBase64");
if (!(blob instanceof Blob))
throw new Error("blob must be a Blob instance");
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(blob);
});
};
var base64ToBlob = (base64, mimeType) => {
if (!base64)
throw new Error("base64 is required for base64ToBlob");
if (!mimeType)
throw new Error("mimeType is required for base64ToBlob");
if (!base64.startsWith("data:")) {
throw new Error("base64 must start with 'data:'");
}
const byteCharacters = atob(base64.split(",")[1]);
const byteNumbers = new Uint8Array(
new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i))
);
return new Blob([byteNumbers], { type: mimeType });
};
var getBlobMetadata = (blob) => {
if (!(blob instanceof Blob))
throw new Error("blob must be a Blob instance");
return {
size: blob.size,
type: blob.type,
lastModified: blob.lastModified || Date.now()
// Blobs don't have a lastModified property; this is just a placeholder.
};
};
var compressBlob = async (blob, quality = 0.7) => {
if (!blob.type.startsWith("image/")) {
throw new Error("Can only compress image blobs.");
}
const imageBitmap = await createImageBitmap(blob);
const canvas = document.createElement("canvas");
canvas.width = imageBitmap.width;
canvas.height = imageBitmap.height;
const ctx = canvas.getContext("2d");
if (!ctx)
throw new Error("Failed to get canvas 2D context");
ctx.drawImage(imageBitmap, 0, 0);
return new Promise((resolve) => {
canvas.toBlob(resolve, blob.type, quality);
});
};
var createTextBlob = (text) => {
if (!text)
throw new Error("text is required for createTextBlob");
if (typeof text !== "string")
throw new Error("text must be a string");
return new Blob([text], { type: "text/plain" });
};
var createJSONBlob = (jsonObject) => {
if (!jsonObject)
throw new Error("jsonObject is required for createJSONBlob");
if (typeof jsonObject !== "object")
throw new Error("jsonObject must be an object");
const jsonString = JSON.stringify(jsonObject);
return new Blob([jsonString], { type: "application/json" });
};
var createImageBlob = (base64Image) => {
if (!base64Image)
throw new Error("base64Image is required for createImageBlob");
if (!base64Image.startsWith("data:image/")) {
throw new Error("base64Image must start with 'data:image/'");
}
const byteCharacters = atob(base64Image.split(",")[1]);
const byteNumbers = new Uint8Array(
new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i))
);
return new Blob([byteNumbers], { type: "image/png" });
};
var createBinaryBlob = (dataArray) => {
if (!dataArray)
throw new Error("dataArray is required for createBinaryBlob");
if (!Array.isArray(dataArray))
throw new Error("dataArray must be an array");
const byteArray = new Uint8Array(dataArray);
return new Blob([byteArray], { type: "application/octet-stream" });
};
function blobToText(blob) {
if (!(blob instanceof Blob))
throw new Error("blob must be a Blob instance");
if (!blob.type.startsWith("text/")) {
throw new Error("blob must be a text blob");
}
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsText(blob);
});
}
async function blobToJSON(blob) {
if (!(blob instanceof Blob))
throw new Error("blob must be a Blob instance");
if (!blob.type.startsWith("application/json")) {
throw new Error("blob must be a JSON blob");
}
const text = await blobToText(blob);
return JSON.parse(text);
}
function blobToImage(blob) {
if (!(blob instanceof Blob))
throw new Error("blob must be a Blob instance");
if (!blob.type.startsWith("image/")) {
throw new Error("blob must be an image blob");
}
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(blob);
});
}
export {
base64ToBlob,
blobToBase64,
blobToImage,
blobToJSON,
blobToText,
compressBlob,
createAndDownloadBlob,
createBinaryBlob,
createImageBlob,
createJSONBlob,
createTextBlob,
fetchAndDownloadBlob,
getBlobMetadata
};