@azure/storage-blob
Version:
Microsoft Azure Storage SDK for JavaScript - Blob
175 lines (174 loc) • 7.69 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var blobListArrowParser_exports = {};
__export(blobListArrowParser_exports, {
parseBlobListArrowResponse: () => parseBlobListArrowResponse
});
module.exports = __toCommonJS(blobListArrowParser_exports);
var import_core_util = require("@azure/core-util");
var import_utils_common = require("./utils.common.js");
async function parseBlobListArrowResponse(response) {
const { tableFromIPC } = await import("apache-arrow");
const table = response.readableStreamBody ? await tableFromIPC(response.readableStreamBody) : tableFromIPC(await (0, import_utils_common.readResponseBodyToBytes)(response));
return projectArrowTable(table);
}
function projectArrowTable(table) {
const nextMarker = table.schema.metadata?.get("NextMarker") ?? void 0;
const getColumn = (columnName) => table.getChild(columnName);
const cell = (rowIndex, columnName) => getColumn(columnName)?.get(rowIndex);
const asString = (rowIndex, columnName) => {
const value = cell(rowIndex, columnName);
return value === void 0 || value === null ? void 0 : String(value);
};
const asBoolean = (rowIndex, columnName) => {
const value = cell(rowIndex, columnName);
return value === void 0 || value === null ? void 0 : Boolean(value);
};
const asNumber = (rowIndex, columnName) => {
const value = cell(rowIndex, columnName);
return value === void 0 || value === null ? void 0 : Number(value);
};
const asDate = (rowIndex, columnName) => {
const value = cell(rowIndex, columnName);
if (value === void 0 || value === null) {
return void 0;
}
const millis = Number(value);
if (Number.isNaN(millis)) {
const parsed = Date.parse(String(value));
return Number.isNaN(parsed) ? void 0 : new Date(parsed);
}
return new Date(millis);
};
const asBytesFromBase64 = (rowIndex, columnName) => {
const value = asString(rowIndex, columnName);
return value === void 0 ? void 0 : (0, import_core_util.stringToUint8Array)(value, "base64");
};
const asMap = (rowIndex, columnName) => toRecord(cell(rowIndex, columnName));
const blobItems = [];
const blobPrefixes = [];
for (let i = 0; i < table.numRows; i++) {
const resourceType = asString(i, "ResourceType");
if (resourceType !== void 0 && resourceType.toLowerCase() === "blobprefix") {
blobPrefixes.push({ name: { content: asString(i, "Name") ?? "" } });
continue;
}
const properties = {
createdOn: asDate(i, "Creation-Time"),
lastModified: asDate(i, "Last-Modified") ?? /* @__PURE__ */ new Date(0),
etag: asString(i, "Etag") ?? "",
contentLength: asNumber(i, "Content-Length"),
contentType: asString(i, "Content-Type"),
contentEncoding: asString(i, "Content-Encoding"),
contentLanguage: asString(i, "Content-Language"),
contentMD5: asBytesFromBase64(i, "Content-MD5"),
contentDisposition: asString(i, "Content-Disposition"),
cacheControl: asString(i, "Cache-Control"),
blobSequenceNumber: asNumber(i, "x-ms-blob-sequence-number"),
blobType: asString(i, "BlobType"),
leaseStatus: asString(i, "LeaseStatus"),
leaseState: asString(i, "LeaseState"),
leaseDuration: asString(i, "LeaseDuration"),
copyId: asString(i, "CopyId"),
copyStatus: asString(i, "CopyStatus"),
copySource: asString(i, "CopySource"),
copyProgress: asString(i, "CopyProgress"),
copyCompletedOn: asDate(i, "CopyCompletionTime"),
copyStatusDescription: asString(i, "CopyStatusDescription"),
serverEncrypted: asBoolean(i, "ServerEncrypted"),
incrementalCopy: asBoolean(i, "IncrementalCopy"),
destinationSnapshot: asString(i, "CopyDestinationSnapshot"),
deletedOn: asDate(i, "DeletedTime"),
remainingRetentionDays: asNumber(i, "RemainingRetentionDays"),
accessTier: asString(i, "AccessTier"),
accessTierInferred: asBoolean(i, "AccessTierInferred"),
archiveStatus: asString(i, "ArchiveStatus"),
smartAccessTier: asString(i, "SmartAccessTier"),
customerProvidedKeySha256: asString(i, "CustomerProvidedKeySha256"),
encryptionScope: asString(i, "EncryptionScope"),
accessTierChangedOn: asDate(i, "AccessTierChangeTime"),
tagCount: asNumber(i, "TagCount"),
expiresOn: asDate(i, "Expiry-Time"),
isSealed: asBoolean(i, "Sealed"),
rehydratePriority: asString(
i,
"RehydratePriority"
),
lastAccessedOn: asDate(i, "LastAccessTime"),
immutabilityPolicyExpiresOn: asDate(i, "ImmutabilityPolicyUntilDate"),
immutabilityPolicyMode: asString(
i,
"ImmutabilityPolicyMode"
),
legalHold: asBoolean(i, "LegalHold")
};
blobItems.push({
name: { content: asString(i, "Name") ?? "" },
deleted: asBoolean(i, "Deleted") ?? false,
snapshot: asString(i, "Snapshot") ?? "",
versionId: asString(i, "VersionId"),
isCurrentVersion: asBoolean(i, "IsCurrentVersion"),
properties,
metadata: asMap(i, "Metadata"),
blobTags: toBlobTags(asMap(i, "Tags")),
objectReplicationMetadata: asMap(i, "OrMetadata"),
hasVersionsOnly: asBoolean(i, "HasVersionsOnly")
});
}
return { nextMarker, blobItems, blobPrefixes };
}
function toBlobTags(map) {
return map === void 0 ? void 0 : { blobTagSet: Object.entries(map).map(([key, value]) => ({ key, value })) };
}
function toRecord(value) {
if (value === void 0 || value === null) {
return void 0;
}
const entries = [];
const asText = (v) => v === void 0 || v === null ? "" : String(v);
if (typeof value[Symbol.iterator] === "function") {
for (const entry of value) {
if (Array.isArray(entry)) {
entries.push([String(entry[0]), asText(entry[1])]);
} else if (entry && typeof entry === "object" && "key" in entry) {
const { key, value: entryValue } = entry;
entries.push([String(key), asText(entryValue)]);
}
}
} else if (typeof value === "object") {
for (const [key, entryValue] of Object.entries(value)) {
entries.push([key, asText(entryValue)]);
}
}
return Object.fromEntries(entries);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
parseBlobListArrowResponse
});
//# sourceMappingURL=blobListArrowParser.js.map