UNPKG

@azure/storage-blob

Version:
175 lines (174 loc) • 7.69 kB
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