Files
delete-package-versions/src/version/delete-version.ts
T

67 lines
1.8 KiB
TypeScript
Raw Normal View History

2020-02-29 19:33:20 -06:00
import {from, Observable, merge, throwError, of} from 'rxjs'
2021-12-23 09:46:46 +00:00
import {catchError, map, tap} from 'rxjs/operators'
2022-12-28 16:33:42 +05:30
import {Octokit} from '@octokit/rest'
2022-12-29 15:35:31 +05:30
import {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods/dist-types/generated/parameters-and-response-types'
2020-02-29 19:33:20 -06:00
2021-12-22 19:09:58 +00:00
let deleted = 0
2022-12-30 13:10:17 +00:00
type PackageType =
RestEndpointMethodTypes['packages']['getAllPackageVersionsForPackageOwnedByUser']['parameters']['package_type']
2020-02-29 19:33:20 -06:00
export function deletePackageVersion(
packageVersionId: string,
2022-12-28 16:33:42 +05:30
owner: string,
packageName: string,
packageType: string,
2020-02-29 19:33:20 -06:00
token: string
): Observable<boolean> {
2022-12-28 16:33:42 +05:30
const octokit = new Octokit({
2022-12-28 12:56:30 +00:00
auth: token
})
const package_version_id = +packageVersionId
2022-12-29 15:35:31 +05:30
const package_type: PackageType = packageType as PackageType
2021-12-22 19:09:58 +00:00
deleted += 1
2022-12-28 16:33:42 +05:30
2020-02-29 19:33:20 -06:00
return from(
2022-12-28 16:33:42 +05:30
octokit.rest.packages.deletePackageVersionForUser({
2022-12-29 15:35:31 +05:30
package_type,
2022-12-28 16:33:42 +05:30
package_name: packageName,
username: owner,
2022-12-28 12:56:30 +00:00
package_version_id
2022-12-28 16:33:42 +05:30
})
2020-02-29 19:33:20 -06:00
).pipe(
2021-12-23 09:46:46 +00:00
catchError(err => {
2022-12-28 16:33:42 +05:30
const msg = 'delete version API failed.'
2020-02-29 19:33:20 -06:00
return throwError(
err.errors && err.errors.length > 0
? `${msg} ${err.errors[0].message}`
2021-12-23 13:01:35 +00:00
: `${msg} ${err.message} \n${deleted - 1} versions deleted till now.`
2020-02-29 19:33:20 -06:00
)
}),
2022-12-28 16:33:42 +05:30
map(response => response.status === 204)
2020-02-29 19:33:20 -06:00
)
}
export function deletePackageVersions(
packageVersionIds: string[],
2022-12-28 16:33:42 +05:30
owner: string,
packageName: string,
packageType: string,
2020-02-29 19:33:20 -06:00
token: string
): Observable<boolean> {
if (packageVersionIds.length === 0) {
return of(true)
}
const deletes = packageVersionIds.map(id =>
2022-12-28 16:33:42 +05:30
deletePackageVersion(id, owner, packageName, packageType, token).pipe(
2020-02-29 19:33:20 -06:00
tap(result => {
2021-12-23 13:01:35 +00:00
if (!result) {
2020-02-29 19:33:20 -06:00
console.log(`version with id: ${id}, not deleted`)
}
})
)
)
2021-12-23 13:01:35 +00:00
console.log(`Total versions deleted till now: ${deleted}`)
2020-02-29 19:33:20 -06:00
return merge(...deletes)
}