@@ -3030,14 +3030,14 @@ export class TypedClient {
30303030 if ( ! isString ( prefix ) ) {
30313031 throw new TypeError ( 'prefix should be of type "string"' )
30323032 }
3033- if ( ! isString ( marker ) ) {
3033+ if ( marker && ! isString ( marker ) ) {
30343034 throw new TypeError ( 'marker should be of type "string"' )
30353035 }
30363036
30373037 if ( listQueryOpts && ! isObject ( listQueryOpts ) ) {
30383038 throw new TypeError ( 'listQueryOpts should be of type "object"' )
30393039 }
3040- let { Delimiter, MaxKeys, IncludeVersion } = listQueryOpts as ListObjectQueryOpts
3040+ let { Delimiter, MaxKeys, IncludeVersion, versionIdMarker , keyMarker } = listQueryOpts as ListObjectQueryOpts
30413041
30423042 if ( ! isString ( Delimiter ) ) {
30433043 throw new TypeError ( 'Delimiter should be of type "string"' )
@@ -3056,13 +3056,17 @@ export class TypedClient {
30563056 queries . push ( `versions` )
30573057 }
30583058
3059- if ( marker ) {
3060- marker = uriEscape ( marker )
3061- if ( IncludeVersion ) {
3062- queries . push ( `key-marker=${ marker } ` )
3063- } else {
3064- queries . push ( `marker=${ marker } ` )
3059+ if ( IncludeVersion ) {
3060+ // v1 version listing..
3061+ if ( keyMarker ) {
3062+ queries . push ( `key-marker=${ keyMarker } ` )
3063+ }
3064+ if ( versionIdMarker ) {
3065+ queries . push ( `version-id-marker=${ versionIdMarker } ` )
30653066 }
3067+ } else if ( marker ) {
3068+ marker = uriEscape ( marker )
3069+ queries . push ( `marker=${ marker } ` )
30663070 }
30673071
30683072 // no need to escape maxKeys
@@ -3113,11 +3117,8 @@ export class TypedClient {
31133117 throw new TypeError ( 'listOpts should be of type "object"' )
31143118 }
31153119 let marker : string | undefined = ''
3116- const listQueryOpts = {
3117- Delimiter : recursive ? '' : '/' , // if recursive is false set delimiter to '/'
3118- MaxKeys : 1000 ,
3119- IncludeVersion : listOpts ?. IncludeVersion ,
3120- }
3120+ let keyMarker : string | undefined = ''
3121+ let versionIdMarker : string | undefined = ''
31213122 let objects : ObjectInfo [ ] = [ ]
31223123 let ended = false
31233124 const readStream : stream . Readable = new stream . Readable ( { objectMode : true } )
@@ -3132,9 +3133,24 @@ export class TypedClient {
31323133 }
31333134
31343135 try {
3136+ const listQueryOpts = {
3137+ Delimiter : recursive ? '' : '/' , // if recursive is false set delimiter to '/'
3138+ MaxKeys : 1000 ,
3139+ IncludeVersion : listOpts ?. IncludeVersion ,
3140+ // version listing specific options
3141+ keyMarker : keyMarker ,
3142+ versionIdMarker : versionIdMarker ,
3143+ }
3144+
31353145 const result : ListObjectQueryRes = await this . listObjectsQuery ( bucketName , prefix , marker , listQueryOpts )
31363146 if ( result . isTruncated ) {
3137- marker = result . nextMarker || result . versionIdMarker
3147+ marker = result . nextMarker || undefined
3148+ if ( result . keyMarker ) {
3149+ keyMarker = result . keyMarker
3150+ }
3151+ if ( result . versionIdMarker ) {
3152+ versionIdMarker = result . versionIdMarker
3153+ }
31383154 } else {
31393155 ended = true
31403156 }
0 commit comments