2020-02-29 19:33:20 -06:00
import { Input } from './input'
import { Observable , of , throwError } from 'rxjs'
import { deletePackageVersions , getOldestVersions } from './version'
import { concatMap , map } from 'rxjs/operators'
export function getVersionIds ( input : Input ) : Observable < string [ ] > {
if ( input . packageVersionIds . length > 0 ) {
return of ( input . packageVersionIds )
}
if ( input . hasOldestVersionQueryInfo ( ) ) {
return getOldestVersions (
input . owner ,
input . repo ,
input . packageName ,
2021-11-08 08:19:02 +00:00
input . numOldVersionsToDelete + input . minVersionsToKeep ,
2020-02-29 19:33:20 -06:00
input . token
2021-11-08 07:25:16 +00:00
) . pipe (
map ( versionInfo = > {
const numberVersionsToDelete =
versionInfo . length - input . minVersionsToKeep
2021-11-17 06:52:13 +00:00
2021-11-17 16:03:40 +00:00
if ( input . minVersionsToKeep > 0 ) {
2021-11-17 06:52:13 +00:00
return numberVersionsToDelete <= 0
? [ ]
: versionInfo
. filter ( info = > ! input . ignoreVersions . test ( info . version ) )
. map ( info = > info . id )
. slice ( 0 , - input . minVersionsToKeep )
} else {
return numberVersionsToDelete <= 0
? [ ]
: versionInfo
. filter ( info = > ! input . ignoreVersions . test ( info . version ) )
. map ( info = > info . id )
. slice ( 0 , numberVersionsToDelete )
}
2021-11-08 07:25:16 +00:00
} )
)
2020-02-29 19:33:20 -06:00
}
return throwError (
"Could not get packageVersionIds. Explicitly specify using the 'package-version-ids' input or provide the 'package-name' and 'num-old-versions-to-delete' inputs to dynamically retrieve oldest versions"
)
}
export function deleteVersions ( input : Input ) : Observable < boolean > {
if ( ! input . token ) {
return throwError ( 'No token found' )
}
2021-12-14 12:34:03 +00:00
if ( ! input . checkInput ( ) ) {
return throwError ( 'Invalid input combination' )
}
2020-02-29 19:33:20 -06:00
if ( input . numOldVersionsToDelete <= 0 ) {
console . log (
'Number of old versions to delete input is 0 or less, no versions will be deleted'
)
return of ( true )
}
return getVersionIds ( input ) . pipe (
concatMap ( ids = > deletePackageVersions ( ids , input . token ) )
)
}