import { PatchDB } from 'patch-db-client' import { DataModel, InstalledState, InstallingState, PackageDataEntry, PackageState, UpdatingState, } from 'src/app/services/patch-db/data-model' import { firstValueFrom } from 'rxjs' import { Manifest } from '@start9labs/marketplace' export async function getPackage( patch: PatchDB, id: string, ): Promise { return firstValueFrom(patch.watch$('packageData', id)) } export async function getAllPackages( patch: PatchDB, ): Promise { return firstValueFrom(patch.watch$('packageData')) } export function getManifest(pkg: PackageDataEntry): Manifest { if (isInstalled(pkg) || isRemoving(pkg)) return pkg.stateInfo.manifest return (pkg.stateInfo as InstallingState).installingInfo.newManifest } export function isInstalled( pkg: PackageDataEntry, ): pkg is PackageDataEntry { return pkg.stateInfo.state === PackageState.Installed } export function isRemoving( pkg: PackageDataEntry, ): pkg is PackageDataEntry { return pkg.stateInfo.state === PackageState.Removing } export function isInstalling( pkg: PackageDataEntry, ): pkg is PackageDataEntry { return pkg.stateInfo.state === PackageState.Installing } export function isRestoring( pkg: PackageDataEntry, ): pkg is PackageDataEntry { return pkg.stateInfo.state === PackageState.Restoring } export function isUpdating( pkg: PackageDataEntry, ): pkg is PackageDataEntry { return pkg.stateInfo.state === PackageState.Updating }