@questlabs/core
Version:
This is the quest SDK
60 lines (59 loc) • 2.59 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateParams = validateParams;
exports.compressImageIfNeeded = compressImageIfNeeded;
function validateParams(params) {
for (let key in params) {
if (typeof params[key] === "undefined" ||
params[key] === null ||
params[key] === "" ||
params[key] === undefined) {
if (key === "userId" || key === "token") {
throw new Error("Invalid action. Please set user or login again");
}
if (key === "apiSecret") {
throw new Error("Invalid action. Please set apiSecret in the base(QuestSdk) class");
}
throw new Error(`Invalid ${key}`);
}
}
}
const MAX_SIZE_MB = 1;
const MAX_SIZE_BYTES = MAX_SIZE_MB * 1024 * 1024;
function compressImageIfNeeded(file) {
return __awaiter(this, void 0, void 0, function* () {
if (file.size <= MAX_SIZE_BYTES)
return file;
const img = yield createImageBitmap(file);
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
const isPNG = file.type === "image/png";
const targetType = isPNG ? "image/jpeg" : file.type;
let quality = 0.9;
let blob = null;
while (quality >= 0.4) {
blob = yield new Promise((resolve) => canvas.toBlob(resolve, targetType, quality));
if (blob && blob.size <= MAX_SIZE_BYTES)
break;
quality -= 0.1;
}
if (!blob)
throw new Error("Compression failed");
return new File([blob], file.name.replace(/\.\w+$/, isPNG ? ".jpg" : ""), {
type: targetType,
lastModified: Date.now(),
});
});
}