UNPKG

2 kBPlain TextView Raw
1import { Observable } from 'rxjs';
2import { CLIOption } from './CRUDBase';
3import { CRUDResource, Request$Options } from './CRUDResource';
4import { ResourceType } from './ResourceType';
5import { BaseResource, BaseResourceOptions, ExecuteTaskListResponse } from './types';
6
7export interface StopCRUDOptions<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> {
8 readonly name?: string;
9 readonly resourceType: ResourceType<Resource, ResourceOptions>;
10 readonly help?: string;
11 readonly aliases?: ReadonlyArray<string>;
12 readonly options?: ReadonlyArray<CLIOption>;
13 readonly autocomplete?: ReadonlyArray<string>;
14 readonly hidden?: boolean;
15}
16
17function nameToUpper(name: string): string {
18 return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
19}
20
21function nameToHelp(name: string, resourceName: string): string {
22 return `${nameToUpper(name)}s a ${resourceName} called <name>`;
23}
24
25export class StopCRUD<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> extends CRUDResource<
26 Resource,
27 ResourceOptions
28> {
29 public constructor({
30 name = 'stop',
31 resourceType,
32 help,
33 aliases,
34 options,
35 autocomplete,
36 hidden,
37 }: StopCRUDOptions<Resource, ResourceOptions>) {
38 super({
39 name,
40 names:
41 name === 'stop'
42 ? {
43 ing: 'stopping',
44 ingUpper: 'Stopping',
45 ed: 'stopped',
46 edUpper: 'Stopped',
47 }
48 : undefined,
49 resourceType,
50 help: help === undefined ? nameToHelp(name, resourceType.names.lower) : help,
51 aliases,
52 options,
53 autocomplete,
54 hidden,
55 });
56 }
57
58 public request$({
59 name,
60 cancel$,
61 options,
62 client,
63 }: Request$Options<ResourceOptions>): Observable<ExecuteTaskListResponse> {
64 return client.stopResource$({
65 plugin: this.resourceType.plugin.name,
66 resourceType: this.resourceType.name,
67 name,
68 options,
69 cancel$,
70 });
71 }
72}