UNPKG

1.76 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 StartCRUDOptions<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 StartCRUD<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> extends CRUDResource<
26 Resource,
27 ResourceOptions
28> {
29 public constructor({
30 name = 'start',
31 resourceType,
32 help = nameToHelp(name, resourceType.names.lower),
33 aliases,
34 options,
35 autocomplete,
36 hidden,
37 }: StartCRUDOptions<Resource, ResourceOptions>) {
38 super({
39 name,
40 resourceType,
41 help,
42 aliases,
43 options,
44 autocomplete,
45 hidden,
46 });
47 }
48
49 public request$({
50 name,
51 cancel$,
52 options,
53 client,
54 }: Request$Options<ResourceOptions>): Observable<ExecuteTaskListResponse> {
55 return client.startResource$({
56 plugin: this.resourceType.plugin.name,
57 resourceType: this.resourceType.name,
58 name,
59 options,
60 cancel$,
61 });
62 }
63}