import { Observable } from 'rxjs'; import { CLIOption } from './CRUDBase'; import { CRUDResource, Request$Options } from './CRUDResource'; import { ResourceType } from './ResourceType'; import { BaseResource, BaseResourceOptions, ExecuteTaskListResponse } from './types'; export interface StopCRUDOptions { readonly name?: string; readonly resourceType: ResourceType; readonly help?: string; readonly aliases?: ReadonlyArray; readonly options?: ReadonlyArray; readonly autocomplete?: ReadonlyArray; readonly hidden?: boolean; } function nameToUpper(name: string): string { return `${name.charAt(0).toUpperCase()}${name.slice(1)}`; } function nameToHelp(name: string, resourceName: string): string { return `${nameToUpper(name)}s a ${resourceName} called `; } export class StopCRUD extends CRUDResource< Resource, ResourceOptions > { public constructor({ name = 'stop', resourceType, help, aliases, options, autocomplete, hidden, }: StopCRUDOptions) { super({ name, names: name === 'stop' ? { ing: 'stopping', ingUpper: 'Stopping', ed: 'stopped', edUpper: 'Stopped', } : undefined, resourceType, help: help === undefined ? nameToHelp(name, resourceType.names.lower) : help, aliases, options, autocomplete, hidden, }); } public request$({ name, cancel$, options, client, }: Request$Options): Observable { return client.stopResource$({ plugin: this.resourceType.plugin.name, resourceType: this.resourceType.name, name, options, cancel$, }); } }