/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/@azure/storage-blob-changefeed@12.0.0-preview.4/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var tslib=require("tslib"),storageBlob=require("@azure/storage-blob"),coreHttp=require("@azure/core-http"),coreTracing=require("@azure/core-tracing"),abortController=require("@azure/abort-controller");require("@azure/core-paging");var stream=require("stream");const SDK_VERSION="12.0.0-preview.4",CHANGE_FEED_CONTAINER_NAME="$blobchangefeed",CHANGE_FEED_META_SEGMENT_PATH="meta/segments.json",CHANGE_FEED_SEGMENT_PREFIX="idx/segments/",CHANGE_FEED_INITIALIZATION_SEGMENT="1601",CHANGE_FEED_MAX_PAGE_SIZE=5e3,CHANGE_FEED_CHUNK_BLOCK_DOWNLOAD_SIZE=16777216,createSpan=coreTracing.createSpanFunction({packagePrefix:"Azure.Storage.Blob.Changefeed",namespace:"Microsoft.Storage"}),millisecondsInAnHour=36e5;function ceilToNearestHour(e){if(void 0!==e)return new Date(36e5*Math.ceil(e.getTime()/36e5))}function floorToNearestHour(e){if(void 0!==e)return new Date(36e5*Math.floor(e.getTime()/36e5))}function getHost(e){return coreHttp.URLBuilder.parse(e).getHost()}async function getYearsPaths(e,t={}){var r,a;const{span:n,updatedOptions:s}=createSpan("getYearsPaths",t);try{const n=[];try{for(var i,o=tslib.__asyncValues(e.listBlobsByHierarchy("/",{abortSignal:t.abortSignal,tracingOptions:s.tracingOptions,prefix:"idx/segments/"}));!(i=await o.next()).done;){const e=i.value;if("prefix"===e.kind&&!e.name.includes("1601")){const t=e.name.slice(13,-1);n.push(parseInt(t))}}}catch(e){r={error:e}}finally{try{i&&!i.done&&(a=o.return)&&await a.call(o)}finally{if(r)throw r.error}}return n.sort(((e,t)=>e-t))}catch(e){throw n.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{n.end()}}async function getSegmentsInYear(e,t,r,a,n={}){var s,i;const{span:o,updatedOptions:c}=createSpan("getSegmentsInYear",n);try{const o=[],d=new Date(Date.UTC(t,0));if(a&&d>=a)return o;const g=`idx/segments/${t}/`;try{for(var l,h=tslib.__asyncValues(e.listBlobsFlat({prefix:g,abortSignal:n.abortSignal,tracingOptions:c.tracingOptions}));!(l=await h.next()).done;){const e=l.value,t=parseDateFromSegmentPath(e.name);r&&t<r||a&&t>=a||o.push(e.name)}}catch(e){s={error:e}}finally{try{l&&!l.done&&(i=h.return)&&await i.call(h)}finally{if(s)throw s.error}}return o}catch(e){throw o.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{o.end()}}function parseDateFromSegmentPath(e){const t=e.split("/");if(t.length<3)throw new Error(`${e} is not a valid segment path.`);const r=new Date(0);return r.setUTCFullYear(parseInt(t[2])),t.length>=4&&r.setUTCMonth(parseInt(t[3])-1),t.length>=5&&r.setUTCDate(parseInt(t[4])),t.length>=6&&r.setUTCHours(parseInt(t[5])/100),r}function minDate(e,t){return t&&t<e?t:e}function rawEventToBlobChangeFeedEvent(e){if(e.eventTime&&(e.eventTime=new Date(e.eventTime)),e.eTag&&(e.etag=e.eTag,delete e.eTag),e.data){if(void 0!==e.data.recursive&&(e.data.isRecursive=e.data.recursive,delete e.data.recursive),e.data.previousInfo){const t=e.data.previousInfo;t.SoftDeleteSnapshot&&(t.softDeleteSnapshot=t.SoftDeleteSnapshot,delete t.SoftDeleteSnapshot),t.WasBlobSoftDeleted&&(t.isBlobSoftDeleted="true"===t.WasBlobSoftDeleted,delete t.WasBlobSoftDeleted),t.BlobVersion&&(t.newBlobVersion=t.BlobVersion,delete t.BlobVersion),t.LastVersion&&(t.oldBlobVersion=t.LastVersion,delete t.LastVersion),t.PreviousTier&&(t.previousTier=t.PreviousTier,delete t.PreviousTier),e.data.previousInfo=t}if(e.data.blobPropertiesUpdated){const t={};Object.entries(e.data.blobPropertiesUpdated).map((e=>{const r={propertyName:e[0],oldValue:e[1].previous,newValue:e[1].current};t[e[0]]=r})),e.data.updatedBlobProperties=t,delete e.data.blobPropertiesUpdated}if(e.data.asyncOperationInfo){const t=e.data.asyncOperationInfo;t.DestinationTier&&(t.destinationAccessTier=t.DestinationTier,delete t.DestinationTier),"WasAsyncOperation"in t&&(t.isAsync="true"===t.WasAsyncOperation,delete t.WasAsyncOperation),t.CopyId&&(t.copyId=t.CopyId,delete t.CopyId),e.data.longRunningOperationInfo=t,delete e.data.asyncOperationInfo}e.data.blobTagsUpdated&&(e.data.updatedBlobTags={newTags:e.data.blobTagsUpdated.current,oldTags:e.data.blobTagsUpdated.previous},delete e.data.blobTagsUpdated),e.data.blobTier&&(e.data.blobAccessTier=e.data.blobTier,delete e.data.blobTier)}return e}class ChangeFeed{constructor(e,t,r,a,n,s,i,o){this.containerClient=e,this.segmentFactory=t,this.years=r||[],this.segments=a||[],this.currentSegment=n,this.lastConsumable=s,this.startTime=i,this.endTime=o,this.lastConsumable&&(this.end=minDate(this.lastConsumable,this.endTime))}async advanceSegmentIfNecessary(e={}){const{span:t,updatedOptions:r}=createSpan("ChangeFeed-advanceSegmentIfNecessary",e);try{if(!this.currentSegment)throw new Error("Empty Change Feed shouldn't call this function.");if(this.currentSegment.hasNext())return;if(this.segments.length>0)this.currentSegment=await this.segmentFactory.create(this.containerClient,this.segments.shift(),void 0,{abortSignal:e.abortSignal,tracingOptions:r.tracingOptions});else if(0===this.segments.length&&this.years.length>0){const t=this.years.shift();this.segments=await getSegmentsInYear(this.containerClient,t,this.startTime,this.end,{abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}),this.segments.length>0?this.currentSegment=await this.segmentFactory.create(this.containerClient,this.segments.shift(),void 0,{abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}):this.currentSegment=void 0}}catch(e){throw t.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{t.end()}}hasNext(){return!!this.currentSegment&&(!(0===this.segments.length&&0===this.years.length&&!this.currentSegment.hasNext())&&this.currentSegment.dateTime<this.end)}async getChange(e={}){const{span:t,updatedOptions:r}=createSpan("ChangeFeed-getChange",e);try{let t;for(;void 0===t&&this.hasNext();)t=await this.currentSegment.getChange({abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}),await this.advanceSegmentIfNecessary({abortSignal:e.abortSignal,tracingOptions:r.tracingOptions});return t}catch(e){throw t.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{t.end()}}getCursor(){var e;if(!this.currentSegment)throw new Error("Empty Change Feed shouldn't call this function.");return{CursorVersion:1,UrlHost:getHost(this.containerClient.url),EndTime:null===(e=this.endTime)||void 0===e?void 0:e.toJSON(),CurrentSegmentCursor:this.currentSegment.getCursor()}}}const AVRO_SYNC_MARKER_SIZE=16,AVRO_INIT_BYTES=new Uint8Array([79,98,106,1]),AVRO_CODEC_KEY="avro.codec",AVRO_SCHEMA_KEY="avro.schema";class AvroParser{static async readFixedBytes(e,t,r={}){const a=await e.read(t,{abortSignal:r.abortSignal});if(a.length!==t)throw new Error("Hit stream end.");return a}static async readByte(e,t={}){return(await AvroParser.readFixedBytes(e,1,t))[0]}static async readZigZagLong(e,t={}){let r,a,n,s=0,i=0;do{r=await AvroParser.readByte(e,t),a=128&r,s|=(127&r)<<i,i+=7}while(a&&i<28);if(a){n=268435456;do{r=await AvroParser.readByte(e,t),s+=(127&r)*n,n*=128}while(128&r);const a=(s%2?-(s+1):s)/2;if(a<Number.MIN_SAFE_INTEGER||a>Number.MAX_SAFE_INTEGER)throw new Error("Integer overflow.");return a}return s>>1^-(1&s)}static async readLong(e,t={}){return AvroParser.readZigZagLong(e,t)}static async readInt(e,t={}){return AvroParser.readZigZagLong(e,t)}static async readNull(){return null}static async readBoolean(e,t={}){const r=await AvroParser.readByte(e,t);if(1===r)return!0;if(0===r)return!1;throw new Error("Byte was not a boolean.")}static async readFloat(e,t={}){const r=await AvroParser.readFixedBytes(e,4,t);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat32(0,!0)}static async readDouble(e,t={}){const r=await AvroParser.readFixedBytes(e,8,t);return new DataView(r.buffer,r.byteOffset,r.byteLength).getFloat64(0,!0)}static async readBytes(e,t={}){const r=await AvroParser.readLong(e,t);if(r<0)throw new Error("Bytes size was negative.");return e.read(r,{abortSignal:t.abortSignal})}static async readString(e,t={}){const r=await AvroParser.readBytes(e,t);return(new TextDecoder).decode(r)}static async readMapPair(e,t,r={}){return{key:await AvroParser.readString(e,r),value:await t(e,r)}}static async readMap(e,t,r={}){const a=await AvroParser.readArray(e,((e,r={})=>AvroParser.readMapPair(e,t,r)),r),n={};for(const e of a)n[e.key]=e.value;return n}static async readArray(e,t,r={}){const a=[];for(let n=await AvroParser.readLong(e,r);0!==n;n=await AvroParser.readLong(e,r))for(n<0&&(await AvroParser.readLong(e,r),n=-n);n--;){const n=await t(e,r);a.push(n)}return a}}var AvroComplex,AvroPrimitive;!function(e){e.RECORD="record",e.ENUM="enum",e.ARRAY="array",e.MAP="map",e.UNION="union",e.FIXED="fixed"}(AvroComplex||(AvroComplex={})),function(e){e.NULL="null",e.BOOLEAN="boolean",e.INT="int",e.LONG="long",e.FLOAT="float",e.DOUBLE="double",e.BYTES="bytes",e.STRING="string"}(AvroPrimitive||(AvroPrimitive={}));class AvroType{static fromSchema(e){return"string"==typeof e?AvroType.fromStringSchema(e):Array.isArray(e)?AvroType.fromArraySchema(e):AvroType.fromObjectSchema(e)}static fromStringSchema(e){switch(e){case AvroPrimitive.NULL:case AvroPrimitive.BOOLEAN:case AvroPrimitive.INT:case AvroPrimitive.LONG:case AvroPrimitive.FLOAT:case AvroPrimitive.DOUBLE:case AvroPrimitive.BYTES:case AvroPrimitive.STRING:return new AvroPrimitiveType(e);default:throw new Error(`Unexpected Avro type ${e}`)}}static fromArraySchema(e){return new AvroUnionType(e.map(AvroType.fromSchema))}static fromObjectSchema(e){const t=e.type;try{return AvroType.fromStringSchema(t)}catch(e){}switch(t){case AvroComplex.RECORD:if(e.aliases)throw new Error(`aliases currently is not supported, schema: ${e}`);if(!e.name)throw new Error(`Required attribute 'name' doesn't exist on schema: ${e}`);const r={};if(!e.fields)throw new Error(`Required attribute 'fields' doesn't exist on schema: ${e}`);for(const t of e.fields)r[t.name]=AvroType.fromSchema(t.type);return new AvroRecordType(r,e.name);case AvroComplex.ENUM:if(e.aliases)throw new Error(`aliases currently is not supported, schema: ${e}`);if(!e.symbols)throw new Error(`Required attribute 'symbols' doesn't exist on schema: ${e}`);return new AvroEnumType(e.symbols);case AvroComplex.MAP:if(!e.values)throw new Error(`Required attribute 'values' doesn't exist on schema: ${e}`);return new AvroMapType(AvroType.fromSchema(e.values));case AvroComplex.ARRAY:case AvroComplex.FIXED:default:throw new Error(`Unexpected Avro type ${t} in ${e}`)}}}class AvroPrimitiveType extends AvroType{constructor(e){super(),this._primitive=e}read(e,t={}){switch(this._primitive){case AvroPrimitive.NULL:return AvroParser.readNull();case AvroPrimitive.BOOLEAN:return AvroParser.readBoolean(e,t);case AvroPrimitive.INT:return AvroParser.readInt(e,t);case AvroPrimitive.LONG:return AvroParser.readLong(e,t);case AvroPrimitive.FLOAT:return AvroParser.readFloat(e,t);case AvroPrimitive.DOUBLE:return AvroParser.readDouble(e,t);case AvroPrimitive.BYTES:return AvroParser.readBytes(e,t);case AvroPrimitive.STRING:return AvroParser.readString(e,t);default:throw new Error("Unknown Avro Primitive")}}}class AvroEnumType extends AvroType{constructor(e){super(),this._symbols=e}async read(e,t={}){const r=await AvroParser.readInt(e,t);return this._symbols[r]}}class AvroUnionType extends AvroType{constructor(e){super(),this._types=e}async read(e,t={}){const r=await AvroParser.readInt(e,t);return this._types[r].read(e,t)}}class AvroMapType extends AvroType{constructor(e){super(),this._itemType=e}read(e,t={}){return AvroParser.readMap(e,((e,t)=>this._itemType.read(e,t)),t)}}class AvroRecordType extends AvroType{constructor(e,t){super(),this._fields=e,this._name=t}async read(e,t={}){const r={};r.$schema=this._name;for(const a in this._fields)Object.prototype.hasOwnProperty.call(this._fields,a)&&(r[a]=await this._fields[a].read(e,t));return r}}function arraysEqual(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(let r=0;r<e.length;++r)if(e[r]!==t[r])return!1;return!0}class AvroReader{constructor(e,t,r,a){this._dataStream=e,this._headerStream=t||e,this._initialized=!1,this._blockOffset=r||0,this._objectIndex=a||0,this._initialBlockOffset=r||0}get blockOffset(){return this._blockOffset}get objectIndex(){return this._objectIndex}async initialize(e={}){if(!arraysEqual(await AvroParser.readFixedBytes(this._headerStream,AVRO_INIT_BYTES.length,{abortSignal:e.abortSignal}),AVRO_INIT_BYTES))throw new Error("Stream is not an Avro file.");this._metadata=await AvroParser.readMap(this._headerStream,AvroParser.readString,{abortSignal:e.abortSignal});const t=this._metadata["avro.codec"];if(null!=t&&"null"!==t)throw new Error("Codecs are not supported");this._syncMarker=await AvroParser.readFixedBytes(this._headerStream,16,{abortSignal:e.abortSignal});const r=JSON.parse(this._metadata["avro.schema"]);if(this._itemType=AvroType.fromSchema(r),0===this._blockOffset&&(this._blockOffset=this._initialBlockOffset+this._dataStream.position),this._itemsRemainingInBlock=await AvroParser.readLong(this._dataStream,{abortSignal:e.abortSignal}),await AvroParser.readLong(this._dataStream,{abortSignal:e.abortSignal}),this._initialized=!0,this._objectIndex&&this._objectIndex>0)for(let t=0;t<this._objectIndex;t++)await this._itemType.read(this._dataStream,{abortSignal:e.abortSignal}),this._itemsRemainingInBlock--}hasNext(){return!this._initialized||this._itemsRemainingInBlock>0}parseObjects(e={}){return tslib.__asyncGenerator(this,arguments,(function*(){for(this._initialized||(yield tslib.__await(this.initialize(e)));this.hasNext();){const t=yield tslib.__await(this._itemType.read(this._dataStream,{abortSignal:e.abortSignal}));if(this._itemsRemainingInBlock--,this._objectIndex++,0===this._itemsRemainingInBlock){const t=yield tslib.__await(AvroParser.readFixedBytes(this._dataStream,16,{abortSignal:e.abortSignal}));if(this._blockOffset=this._initialBlockOffset+this._dataStream.position,this._objectIndex=0,!arraysEqual(this._syncMarker,t))throw new Error("Stream is not a valid Avro file.");try{this._itemsRemainingInBlock=yield tslib.__await(AvroParser.readLong(this._dataStream,{abortSignal:e.abortSignal}))}catch(e){this._itemsRemainingInBlock=0}this._itemsRemainingInBlock>0&&(yield tslib.__await(AvroParser.readLong(this._dataStream,{abortSignal:e.abortSignal})))}yield yield tslib.__await(t)}}))}}class AvroReadable{}const ABORT_ERROR=new abortController.AbortError("Reading from the avro stream was aborted.");class AvroReadableFromStream extends AvroReadable{constructor(e){super(),this._readable=e,this._position=0}toUint8Array(e){return"string"==typeof e?Buffer.from(e):e}get position(){return this._position}async read(e,t={}){var r;if(null===(r=t.abortSignal)||void 0===r?void 0:r.aborted)throw ABORT_ERROR;if(e<0)throw new Error(`size parameter should be positive: ${e}`);if(0===e)return new Uint8Array;if(!this._readable.readable)throw new Error("Stream no longer readable.");const a=this._readable.read(e);return a?(this._position+=a.length,this.toUint8Array(a)):new Promise(((r,a)=>{const n=()=>{this._readable.removeListener("readable",s),this._readable.removeListener("error",i),this._readable.removeListener("end",i),this._readable.removeListener("close",i),t.abortSignal&&t.abortSignal.removeEventListener("abort",o)},s=()=>{const t=this._readable.read(e);t&&(this._position+=t.length,n(),r(this.toUint8Array(t)))},i=()=>{n(),a()},o=()=>{n(),a(ABORT_ERROR)};this._readable.on("readable",s),this._readable.once("error",i),this._readable.once("end",i),this._readable.once("close",i),t.abortSignal&&t.abortSignal.addEventListener("abort",o)}))}}async function bodyToString(e,t){return new Promise(((r,a)=>{e.readableStreamBody.on("readable",(()=>{const a=e.readableStreamBody.read(t);a&&r(a.toString())})),e.readableStreamBody.on("error",a),e.readableStreamBody.on("end",(()=>{r("")}))}))}function streamToAvroReadable(e){return new AvroReadableFromStream(e)}class Segment{constructor(e,t,r,a){this.manifestPath=a,this.shards=e,this.shardIndex=t,this._dateTime=r,this.shardDone=Array(e.length).fill(!1),this.shardDoneCount=0}get dateTime(){return this._dateTime}hasNext(){return this.shards.length>this.shardDoneCount}async getChange(e={}){const{span:t,updatedOptions:r}=createSpan("Segment-getChange",e);try{if(this.shardIndex>=this.shards.length||this.shardIndex<0)throw new Error("shardIndex invalid.");let t;for(;void 0===t&&this.hasNext();){if(this.shardDone[this.shardIndex]){this.shardIndex=(this.shardIndex+1)%this.shards.length;continue}const a=this.shards[this.shardIndex];t=await a.getChange({abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}),a.hasNext()||(this.shardDone[this.shardIndex]=!0,this.shardDoneCount++),this.shardIndex=(this.shardIndex+1)%this.shards.length}return t}catch(e){throw t.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{t.end()}}getCursor(){const e=[];for(const t of this.shards){const r=t.getCursor();r&&e.push(r)}return{SegmentPath:this.manifestPath,ShardCursors:e,CurrentShardPath:this.shards[this.shardIndex].shardPath}}}class SegmentFactory{constructor(e){this.shardFactory=e}async create(e,t,r,a={}){const{span:n,updatedOptions:s}=createSpan("SegmentFactory-create",a);try{const n=[],i=parseDateFromSegmentPath(t),o=e.getBlobClient(t),c=await o.download(void 0,void 0,{abortSignal:a.abortSignal,tracingOptions:s.tracingOptions}),l=await bodyToString(c),h=JSON.parse(l),d=16;for(const t of h.chunkFilePaths){const i=t.substring(d),o=null==r?void 0:r.ShardCursors.find((e=>e.CurrentChunkPath.startsWith(i))),c=await this.shardFactory.create(e,i,o,{abortSignal:a.abortSignal,tracingOptions:s.tracingOptions});c.hasNext()&&n.push(c)}let g=0;return(null==r?void 0:r.CurrentShardPath)&&(g=n.findIndex((e=>e.shardPath===(null==r?void 0:r.CurrentShardPath))),-1===g&&(g=0)),new Segment(n,g,i,t)}catch(e){throw n.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{n.end()}}}class Shard{constructor(e,t,r,a,n){this.shardPath=n,this.containerClient=e,this.chunkFactory=t,this.chunks=r,this.currentChunk=a}hasNext(){return this.chunks.length>0||void 0!==this.currentChunk&&this.currentChunk.hasNext()}async getChange(e={}){const{span:t,updatedOptions:r}=createSpan("Shard-getChange",e);try{let t;for(;void 0===t&&this.hasNext();)t=await this.currentChunk.getChange(),!this.currentChunk.hasNext()&&this.chunks.length>0&&(this.currentChunk=await this.chunkFactory.create(this.containerClient,this.chunks.shift(),void 0,void 0,{abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}));return t}catch(e){throw t.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{t.end()}}getCursor(){return void 0===this.currentChunk?void 0:{CurrentChunkPath:this.currentChunk.chunkPath,BlockOffset:this.currentChunk.blockOffset,EventIndex:this.currentChunk.eventIndex}}}class ShardFactory{constructor(e){this.chunkFactory=e}async create(e,t,r,a={}){var n,s;const{span:i,updatedOptions:o}=createSpan("ShardFactory-create",a);try{const i=[],h=(null==r?void 0:r.BlockOffset)||0,d=(null==r?void 0:r.EventIndex)||0;try{for(var c,l=tslib.__asyncValues(e.listBlobsFlat({prefix:t,abortSignal:a.abortSignal,tracingOptions:o.tracingOptions}));!(c=await l.next()).done;){const e=c.value;i.push(e.name)}}catch(e){n={error:e}}finally{try{c&&!c.done&&(s=l.return)&&await s.call(l)}finally{if(n)throw n.error}}const g=null==r?void 0:r.CurrentChunkPath;let u,b=-1;if(0!==i.length){if(g){for(let e=0;e<i.length;e++)if(i[e]===g){b=e;break}if(-1===b)throw new Error(`Chunk ${g} not found.`)}else b=0;b>0&&i.splice(0,b),u=await this.chunkFactory.create(e,i.shift(),h,d,{abortSignal:a.abortSignal,tracingOptions:o.tracingOptions})}return new Shard(e,this.chunkFactory,i,u,t)}catch(e){throw i.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{i.end()}}}class Chunk{constructor(e,t,r,a,n={}){this.chunkPath=a,this.avroReader=e,this._blockOffset=t,this._eventIndex=r,this.iter=this.avroReader.parseObjects(n)}get blockOffset(){return this._blockOffset}get eventIndex(){return this._eventIndex}hasNext(){return this.avroReader.hasNext()}async getChange(){if(!this.hasNext())return;const e=await this.iter.next();if(this._eventIndex=this.avroReader.objectIndex,this._blockOffset=this.avroReader.blockOffset,!e.done){const t=e.value;if(null===t)return;return rawEventToBlobChangeFeedEvent(t)}}}class ChunkFactory{constructor(e,t,r){this.avroReaderFactory=e,this.lazyLoadingBlobStreamFactory=t,this.maxTransferSize=r}async create(e,t,r,a,n={}){const s=e.getBlobClient(t);r=r||0,a=a||0;const i=streamToAvroReadable(this.lazyLoadingBlobStreamFactory.create(s,r,this.maxTransferSize?this.maxTransferSize:16777216,n));let o;if(0!==r){const e=streamToAvroReadable(this.lazyLoadingBlobStreamFactory.create(s,0,this.maxTransferSize?this.maxTransferSize:16777216,n));o=this.avroReaderFactory.create(i,e,r,a)}else o=this.avroReaderFactory.create(i);return new Chunk(o,r,a,t,{abortSignal:n.abortSignal})}}class AvroReaderFactory{create(e,t,r,a){return t?new AvroReader(e,t,r,a):new AvroReader(e)}}class LazyLoadingBlobStream extends stream.Readable{constructor(e,t,r,a){super(a),this.blobClient=e,this.offset=t,this.blockSize=r,this.lastDownloadBytes=-1,this.blobLength=-1,this.options=a}async downloadBlock(e={}){const{span:t,updatedOptions:r}=createSpan("LazyLoadingBlobStream-downloadBlock",e);try{const t=await this.blobClient.getProperties({abortSignal:e.abortSignal,tracingOptions:r.tracingOptions});if(this.blobLength=t.contentLength,this.lastDownloadBytes=Math.min(this.blockSize,this.blobLength-this.offset),0===this.lastDownloadBytes)return void(this.lastDownloadData=void 0);this.lastDownloadData=await this.blobClient.downloadToBuffer(this.offset,this.lastDownloadBytes,{abortSignal:e.abortSignal,tracingOptions:r.tracingOptions}),this.offset+=this.lastDownloadBytes}catch(e){throw t.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{t.end()}}async _read(e){var t,r,a,n;const{span:s,updatedOptions:i}=createSpan("LazyLoadingBlobStream-read",this.options);try{e||(e=this.readableHighWaterMark);let s=0,o=0;const c=[];do{void 0!==this.lastDownloadData&&0!==(null===(t=this.lastDownloadData)||void 0===t?void 0:t.byteLength)||await this.downloadBlock({abortSignal:null===(r=this.options)||void 0===r?void 0:r.abortSignal,tracingOptions:null==i?void 0:i.tracingOptions}),(null===(a=this.lastDownloadData)||void 0===a?void 0:a.byteLength)?(o=Math.min(e-s,null===(n=this.lastDownloadData)||void 0===n?void 0:n.byteLength),c.push(this.lastDownloadData.slice(0,o)),this.lastDownloadData=this.lastDownloadData.slice(o),s+=o):o=0}while(o>0&&s<e);this.push(Buffer.concat(c)),s<e&&this.push(null)}catch(e){s.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),this.emit("error",e)}finally{s.end()}}}class LazyLoadingBlobStreamFactory{create(e,t,r,a){return new LazyLoadingBlobStream(e,t,r,a)}}class ChangeFeedFactory{constructor(e){let t;e&&(Number.isFinite(e)?this.maxTransferSize=e:e instanceof SegmentFactory&&(t=e)),this.segmentFactory=t||new SegmentFactory(new ShardFactory(new ChunkFactory(new AvroReaderFactory,new LazyLoadingBlobStreamFactory,this.maxTransferSize)))}static validateCursor(e,t){if(getHost(e.url)!==t.UrlHost)throw new Error("Cursor URL host does not match container URL host.");if(1!==t.CursorVersion)throw new Error("Unsupported cursor version.")}async create(e,t,r={}){const{span:a,updatedOptions:n}=createSpan("ChangeFeedFactory-create",r);try{const a=e.getContainerClient("$blobchangefeed");let s;t?(s=JSON.parse(t),ChangeFeedFactory.validateCursor(a,s),r.start=parseDateFromSegmentPath(s.CurrentSegmentCursor.SegmentPath),r.end=new Date(s.EndTime)):(r.start=floorToNearestHour(r.start),r.end=ceilToNearestHour(r.end));if(!await a.exists({abortSignal:r.abortSignal,tracingOptions:n.tracingOptions}))throw new Error("Change Feed hasn't been enabled on this account, or is currently being enabled.");if(r.start&&r.end&&r.start>=r.end)return new ChangeFeed;const i=a.getBlobClient("meta/segments.json");let o;try{o=await i.download(void 0,void 0,{abortSignal:r.abortSignal,tracingOptions:n.tracingOptions})}catch(e){if(404===e.statusCode)return new ChangeFeed;throw e}const c=new Date(JSON.parse(await bodyToString(o)).lastConsumable),l=await getYearsPaths(a,{abortSignal:r.abortSignal,tracingOptions:n.tracingOptions});if(r.start){const e=r.start.getUTCFullYear();for(;l.length>0&&l[0]<e;)l.shift()}if(0===l.length)return new ChangeFeed;let h=[];for(;0===h.length&&0!==l.length;)h=await getSegmentsInYear(a,l.shift(),r.start,minDate(c,r.end),{abortSignal:r.abortSignal,tracingOptions:n.tracingOptions});if(0===h.length)return new ChangeFeed;const d=await this.segmentFactory.create(a,h.shift(),null==s?void 0:s.CurrentSegmentCursor,{abortSignal:r.abortSignal,tracingOptions:n.tracingOptions});return new ChangeFeed(a,this.segmentFactory,l,h,d,c,r.start,r.end)}catch(e){throw a.setStatus({code:coreTracing.SpanStatusCode.ERROR,message:e.message}),e}finally{a.end()}}}class BlobChangeFeedEventPage{constructor(){this.events=[],this.continuationToken=""}}function newPipeline(e,t={}){return newPipeline(e,appendUserAgentPrefix(t))}function appendUserAgentPrefix(e){return e||(e={}),void 0===e.userAgentOptions&&(e.userAgentOptions={}),void 0===e.userAgentOptions.userAgentPrefix?e.userAgentOptions.userAgentPrefix="":""!==e.userAgentOptions.userAgentPrefix&&(e.userAgentOptions.userAgentPrefix+=" "),e.userAgentOptions.userAgentPrefix+=`changefeed-js/${SDK_VERSION}`,e}class BlobChangeFeedClient{constructor(e,t,r,a){this.changeFeedClientOptions=a||{},this.changeFeedFactory=new ChangeFeedFactory(this.changeFeedClientOptions.maximumTransferSize),t instanceof storageBlob.Pipeline?this.blobServiceClient=new storageBlob.BlobServiceClient(e,t):this.blobServiceClient=new storageBlob.BlobServiceClient(e,t,appendUserAgentPrefix(r))}static fromConnectionString(e,t,r){const a=storageBlob.BlobServiceClient.fromConnectionString(e,t);return new BlobChangeFeedClient(a.url,a.credential,appendUserAgentPrefix(t),r)}getChange(e={}){return tslib.__asyncGenerator(this,arguments,(function*(){const t=yield tslib.__await(this.changeFeedFactory.create(this.blobServiceClient,void 0,e));for(;t.hasNext();){const r=yield tslib.__await(t.getChange({abortSignal:e.abortSignal,tracingOptions:e.tracingOptions}));if(!r)return yield tslib.__await(void 0);yield yield tslib.__await(r)}}))}getPage(e,t,r={}){return tslib.__asyncGenerator(this,arguments,(function*(){const a=yield tslib.__await(this.changeFeedFactory.create(this.blobServiceClient,e,r));for((!t||t>5e3)&&(t=5e3);a.hasNext();){const e=new BlobChangeFeedEventPage;for(;a.hasNext()&&e.events.length<t;){const t=yield tslib.__await(a.getChange({abortSignal:r.abortSignal,tracingOptions:r.tracingOptions}));t&&e.events.push(t)}if(a.hasNext()&&(e.continuationToken=JSON.stringify(a.getCursor())),!(e.events.length>0))return yield tslib.__await(void 0);yield yield tslib.__await(e)}}))}listChanges(e={}){const t=this.getChange(e);return{next:async()=>t.next(),[Symbol.asyncIterator](){return this},byPage:(t={})=>this.getPage(t.continuationToken,t.maxPageSize,e)}}}exports.BlobChangeFeedClient=BlobChangeFeedClient,exports.BlobChangeFeedEventPage=BlobChangeFeedEventPage,exports.newPipeline=newPipeline;
//# sourceMappingURL=/sm/e98e1bbcb45bc0b9943b640f8515a42abf9daf3f7dbb5ca02b11d609ad64cdd6.map