Files
advanced-camera-card/src/camera-manager/capabilities.ts
T

61 lines
1.6 KiB
TypeScript

import {
CapabilitiesRaw,
CapabilityKey,
capabilityKeys,
PTZCapabilities,
} from '../types';
import { CapabilitySearchOptions } from './types';
export class Capabilities {
private _capabilities: CapabilitiesRaw;
constructor(
capabilities: CapabilitiesRaw,
options?: {
disable?: CapabilityKey[];
disableExcept?: CapabilityKey[];
},
) {
this._capabilities = capabilities;
for (const key of options?.disable ?? []) {
this._disable(key);
}
for (const key of capabilityKeys) {
if (options?.disableExcept?.length && !options.disableExcept.includes(key)) {
this._disable(key);
}
}
}
protected _disable(capability: CapabilityKey): void {
delete this._capabilities[capability];
}
public matches(capability: CapabilitySearchOptions): boolean {
let result = true;
if (typeof capability === 'string') {
result &&= this.has(capability);
}
if (typeof capability === 'object' && capability.allCapabilities) {
result &&= capability.allCapabilities.every((capability) => this.has(capability));
}
if (typeof capability === 'object' && capability.anyCapabilities) {
result &&= capability.anyCapabilities.some((capability) => this.has(capability));
}
return result;
}
public has(capability: CapabilityKey): boolean {
return !!this._capabilities[capability];
}
public getPTZCapabilities(): PTZCapabilities | null {
return this._capabilities.ptz ?? null;
}
public getRawCapabilities(): CapabilitiesRaw {
return this._capabilities;
}
}