1 | import { CreateCRUD } from './CreateCRUD';
|
2 | import { DeleteCRUD } from './DeleteCRUD';
|
3 | import { DescribeCRUD } from './DescribeCRUD';
|
4 | import { GetCRUD } from './GetCRUD';
|
5 | import { ResourceType } from './ResourceType';
|
6 | import { StartCRUD } from './StartCRUD';
|
7 | import { StopCRUD } from './StopCRUD';
|
8 | import { BaseResource, BaseResourceOptions } from './types';
|
9 |
|
10 | export interface CRUDOptions<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> {
|
11 | readonly resourceType: ResourceType<Resource, ResourceOptions>;
|
12 | readonly start?: StartCRUD<Resource, ResourceOptions> | undefined;
|
13 | readonly stop?: StopCRUD<Resource, ResourceOptions> | undefined;
|
14 | readonly delete?: DeleteCRUD<Resource, ResourceOptions>;
|
15 | readonly create?: CreateCRUD<Resource, ResourceOptions>;
|
16 | readonly get?: GetCRUD<Resource, ResourceOptions>;
|
17 | readonly describe?: DescribeCRUD<Resource, ResourceOptions>;
|
18 | }
|
19 |
|
20 | export class CRUD<Resource extends BaseResource, ResourceOptions extends BaseResourceOptions> {
|
21 | public readonly resourceType: ResourceType<Resource, ResourceOptions>;
|
22 | public readonly start: StartCRUD<Resource, ResourceOptions> | undefined;
|
23 | public readonly stop: StopCRUD<Resource, ResourceOptions> | undefined;
|
24 | public readonly delete: DeleteCRUD<Resource, ResourceOptions>;
|
25 | public readonly create: CreateCRUD<Resource, ResourceOptions>;
|
26 | public readonly get: GetCRUD<Resource, ResourceOptions>;
|
27 | public readonly describe: DescribeCRUD<Resource, ResourceOptions>;
|
28 |
|
29 | public constructor({
|
30 | resourceType,
|
31 | start = new StartCRUD({ resourceType, hidden: true }),
|
32 | stop = new StopCRUD({ resourceType, hidden: true }),
|
33 | delete: del = new DeleteCRUD({ resourceType, hidden: true }),
|
34 | create = new CreateCRUD({ resourceType, hidden: true }),
|
35 | get = new GetCRUD({ resourceType, hidden: true }),
|
36 | describe = new DescribeCRUD({ resourceType, hidden: true }),
|
37 | }: CRUDOptions<Resource, ResourceOptions>) {
|
38 | this.resourceType = resourceType;
|
39 | this.start = start;
|
40 | this.stop = stop;
|
41 | this.delete = del;
|
42 | this.create = create;
|
43 | this.get = get;
|
44 | this.describe = describe;
|
45 | }
|
46 | }
|