@shapediver/sdk.geometry-api-sdk-v2
Version:
SDK to communicate with the Geometry API version 2
93 lines • 3.88 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.sleep = sleep;
exports.extractFileInfo = extractFileInfo;
exports.contentDispositionFromFilename = contentDispositionFromFilename;
exports.filenameFromContentDisposition = filenameFromContentDisposition;
exports.exists = exists;
exports.processError = processError;
const error_1 = require("./error");
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function extractFileInfo(headers) {
if (!headers)
return { size: undefined, filename: undefined };
const contentLength = headers['Content-Length'] || headers['content-length'];
const size = contentLength ? parseInt(contentLength) : undefined;
const contentDisposition = headers['Content-Disposition'] || headers['content-disposition'];
const filename = contentDisposition
? filenameFromContentDisposition(contentDisposition)
: undefined;
return { size, filename };
}
function contentDispositionFromFilename(filename) {
const asciiName = filename.normalize('NFKD').replace(/[^\x00-\x7F]/g, '');
let header = `attachment; filename="${asciiName}"`;
if (asciiName !== filename) {
const quotedName = encodeURIComponent(filename);
header += `; filename*=UTF-8''${quotedName}`;
}
return header;
}
function filenameFromContentDisposition(contentDisposition) {
let filename;
let filenameStar;
const filenameMatch = contentDisposition.match(/filename="([^"]+)"/);
if (filenameMatch)
filename = filenameMatch[1];
const filenameStarMatch = contentDisposition.match(/filename\*=([^'']+''|)?(.+)/);
if (filenameStarMatch) {
const encoding = filenameStarMatch[1] ? filenameStarMatch[1] : 'utf-8';
const encodedFilename = filenameStarMatch[2];
if (encoding.toLowerCase().startsWith('utf-8'))
filenameStar = decodeURIComponent(encodedFilename);
}
return filenameStar || filename;
}
function exists(apiCall) {
return __awaiter(this, void 0, void 0, function* () {
return apiCall()
.then(() => true)
.catch((error) => {
var _a;
if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404)
return false;
throw error;
});
});
}
function processError(error) {
if ('response' in error) {
const err = error, status = err.response.status, data = err.response.data;
if (data &&
typeof data === 'object' &&
'desc' in data &&
typeof data.desc === 'string' &&
'error' in data &&
typeof data.error === 'string' &&
'message' in data &&
typeof data.message === 'string') {
return new error_1.ResponseError(status, data.message, data.desc, data.error);
}
else {
return new error_1.ResponseError(status, err.message, 'No error description provided');
}
}
else if ('request' in error) {
return new error_1.RequestError(error.message);
}
else {
return error;
}
}
//# sourceMappingURL=utils.js.map