UNPKG

2.24 kBPlain TextView Raw
1import { Observable } from 'rxjs';
2import { map } from 'rxjs/operators';
3import { CLIOption, CRUDBase } from './CRUDBase';
4import { ResourceType } from './ResourceType';
5import { BaseResource, BaseResourceOptions, Client, InteractiveCLI } from './types';
6
7export interface ExecCLIOptions<ResourceOptions extends BaseResourceOptions> {
8 readonly cli: InteractiveCLI;
9 readonly options: ResourceOptions;
10}
11
12export interface GetResources$Options<ResourceOptions extends BaseResourceOptions> {
13 readonly client: Client;
14 readonly options: ResourceOptions;
15}
16
17export interface GetCRUDOptions<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> {
18 readonly resourceType: ResourceType<Resource, ResourceOptions>;
19 readonly help?: string;
20 readonly aliases?: ReadonlyArray<string>;
21 readonly options?: ReadonlyArray<CLIOption>;
22 readonly autocomplete?: ReadonlyArray<string>;
23 readonly hidden?: boolean;
24}
25
26export class GetCRUD<
27 Resource extends BaseResource = BaseResource,
28 ResourceOptions extends BaseResourceOptions = BaseResourceOptions
29> extends CRUDBase<Resource, ResourceOptions> {
30 public constructor({
31 resourceType,
32 help,
33 aliases,
34 options,
35 autocomplete,
36 hidden,
37 }: GetCRUDOptions<Resource, ResourceOptions>) {
38 super({
39 name: 'get',
40 command: `get ${resourceType.name}`,
41 resourceType,
42 help: help === undefined ? `List ${resourceType.names.lowerPlural}` : help,
43 aliases,
44 options,
45 autocomplete,
46 hidden,
47 });
48 }
49
50 // Function to execute before the command.
51 public async preExecCLI(_options: ExecCLIOptions<ResourceOptions>): Promise<void> {
52 return Promise.resolve();
53 }
54
55 // Function to execute after the command.
56 public async postExecCLI(_options: ExecCLIOptions<ResourceOptions>): Promise<void> {
57 return Promise.resolve();
58 }
59
60 public getResources$({
61 client,
62 options,
63 }: GetResources$Options<ResourceOptions>): Observable<ReadonlyArray<Resource>> {
64 return client
65 .getResources$({
66 plugin: this.resourceType.plugin.name,
67 resourceType: this.resourceType.name,
68 options,
69 })
70 .pipe(map((resources) => resources.map((resource) => resource as Resource)));
71 }
72}