mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
refactor: consolidate SDK Watchable with generic map/eq and rename call to fetch
This commit is contained in:
@@ -1,18 +1,47 @@
|
||||
import { Effects } from '../Effects'
|
||||
import { Manifest, PackageId } from '../osBindings'
|
||||
import { deepEqual } from './deepEqual'
|
||||
import { Watchable } from './Watchable'
|
||||
|
||||
export class GetServiceManifest extends Watchable<Manifest> {
|
||||
export class GetServiceManifest<
|
||||
Mapped = Manifest | null,
|
||||
> extends Watchable<Manifest | null, Mapped> {
|
||||
protected readonly label = 'GetServiceManifest'
|
||||
|
||||
constructor(
|
||||
effects: Effects,
|
||||
readonly opts: { packageId: PackageId },
|
||||
options?: {
|
||||
map?: (value: Manifest | null) => Mapped
|
||||
eq?: (a: Mapped, b: Mapped) => boolean
|
||||
},
|
||||
) {
|
||||
super(effects)
|
||||
super(effects, options)
|
||||
}
|
||||
|
||||
protected call(callback?: () => void) {
|
||||
protected fetch(callback?: () => void) {
|
||||
return this.effects.getServiceManifest({ ...this.opts, callback })
|
||||
}
|
||||
}
|
||||
|
||||
export function getServiceManifest(
|
||||
effects: Effects,
|
||||
packageId: PackageId,
|
||||
): GetServiceManifest<Manifest | null>
|
||||
export function getServiceManifest<Mapped>(
|
||||
effects: Effects,
|
||||
packageId: PackageId,
|
||||
map: (manifest: Manifest | null) => Mapped,
|
||||
eq?: (a: Mapped, b: Mapped) => boolean,
|
||||
): GetServiceManifest<Mapped>
|
||||
export function getServiceManifest<Mapped>(
|
||||
effects: Effects,
|
||||
packageId: PackageId,
|
||||
map?: (manifest: Manifest | null) => Mapped,
|
||||
eq?: (a: Mapped, b: Mapped) => boolean,
|
||||
): GetServiceManifest<Mapped> {
|
||||
return new GetServiceManifest<Mapped>(effects, { packageId }, {
|
||||
map: map ?? ((a) => a as Mapped),
|
||||
eq: eq ?? ((a, b) => deepEqual(a, b)),
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user