Skip to content
This repository was archived by the owner on Jun 22, 2021. It is now read-only.

Commit 872baed

Browse files
committed
feat(package): Adds required types, interfaces, and classes.
1 parent 9b737b1 commit 872baed

17 files changed

+193
-1
lines changed

package-lock.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
"lines": 100,
2222
"check-coverage": true
2323
},
24-
"dependencies": {},
24+
"dependencies": {
25+
"make-error": "^1.3.0"
26+
},
2527
"devDependencies": {
2628
"@ht2-labs/typescript-project": "1.0.0",
2729
"@ht2-labs/semantic-release": "1.0.9",

src/Facade.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import CountEntities from './signatures/CountEntities';
2+
import CreateEntity from './signatures/CreateEntity';
3+
import GetEntities from './signatures/GetEntities';
4+
import GetEntity from './signatures/GetEntity';
5+
import OverwriteEntity from './signatures/OverwriteEntity';
6+
import PatchEntity from './signatures/PatchEntity';
7+
import RemoveEntities from './signatures/RemoveEntities';
8+
import RemoveEntity from './signatures/RemoveEntity';
9+
10+
export default interface Facade<Id, Entity> {
11+
readonly getEntity: GetEntity<Id, Entity>;
12+
readonly createEntity: CreateEntity<Entity>;
13+
readonly overwriteEntity: OverwriteEntity<Id, Entity>;
14+
readonly patchEntity: PatchEntity<Id, Entity>;
15+
readonly removeEntity: RemoveEntity<Id>;
16+
readonly getEntities: GetEntities<Entity>;
17+
readonly countEntities: CountEntities<Entity>;
18+
readonly removeEntities: RemoveEntities<Entity>;
19+
}

src/errors/ConflictingEntityError.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// tslint:disable:no-class
2+
import { BaseError } from 'make-error';
3+
4+
export default class ConflictingEntityError<Id> extends BaseError {
5+
constructor(public entityName: string, public entityId: Id) {
6+
super();
7+
}
8+
}

src/errors/MissingEntityError.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// tslint:disable:no-class
2+
import { BaseError } from 'make-error';
3+
4+
export default class MissingEntityError<Id> extends BaseError {
5+
constructor(public entityName: string, public entityId: Id) {
6+
super();
7+
}
8+
}

src/signatures/CountEntities.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Filter from '../types/Filter';
2+
3+
export interface Opts<Entity> {
4+
readonly filter: Filter<Entity>;
5+
}
6+
7+
export interface Result {
8+
readonly count: number;
9+
}
10+
11+
export type Signature<Entity> = (opts: Opts<Entity>) => Promise<Result>;
12+
13+
export default Signature;

src/signatures/CreateEntity.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export interface Opts<Entity> {
2+
readonly entity: Entity;
3+
}
4+
5+
export interface Result<Entity> {
6+
readonly entity: Entity;
7+
}
8+
9+
export type Signature<Entity> = (opts: Opts<Entity>) => Promise<Result<Entity>>;
10+
11+
export default Signature;

src/signatures/GetEntities.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Cursor from '../types/Cursor';
2+
import Filter from '../types/Filter';
3+
import Pagination from '../types/Pagination';
4+
import Sort from '../types/Sort';
5+
6+
export interface Opts<Entity> {
7+
readonly filter: Filter<Entity>;
8+
readonly sort: Sort<Entity>;
9+
readonly pagination: Pagination;
10+
}
11+
12+
export interface Result<Entity> {
13+
readonly entities: Entity[];
14+
readonly nextCursor: Cursor;
15+
readonly previousCursor: Cursor;
16+
}
17+
18+
export type Signature<Entity> = (opts: Opts<Entity>) => Promise<Result<Entity>>;
19+
20+
export default Signature;

src/signatures/GetEntity.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export interface Opts<Id> {
2+
readonly id: Id;
3+
}
4+
5+
export interface Result<Entity> {
6+
readonly entity: Entity;
7+
}
8+
9+
export type Signature<Id, Entity> = (opts: Opts<Id>) => Promise<Result<Entity>>;
10+
11+
export default Signature;

src/signatures/OverwriteEntity.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface Opts<Id, Entity> {
2+
readonly id: Id;
3+
readonly entity: Entity;
4+
}
5+
6+
export interface Result<Entity> {
7+
readonly entity: Entity;
8+
}
9+
10+
export type Signature<Id, Entity> = (opts: Opts<Id, Entity>) => Promise<Result<Entity>>;
11+
12+
export default Signature;

src/signatures/PatchEntity.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface Opts<Id, Entity> {
2+
readonly id: Id;
3+
readonly patch: Partial<Entity>;
4+
}
5+
6+
export interface Result<Entity> {
7+
readonly entity: Entity;
8+
}
9+
10+
export type Signature<Id, Entity> = (opts: Opts<Id, Entity>) => Promise<Result<Entity>>;
11+
12+
export default Signature;

src/signatures/RemoveEntities.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Filter from '../types/Filter';
2+
3+
export interface Opts<Entity> {
4+
readonly filter: Filter<Entity>;
5+
}
6+
7+
export type Result = void;
8+
9+
export type Signature<Entity> = (opts: Opts<Entity>) => Promise<Result>;
10+
11+
export default Signature;

src/signatures/RemoveEntity.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface Opts<Id> {
2+
readonly id: Id;
3+
}
4+
5+
export type Result = void;
6+
7+
export type Signature<Id> = (opts: Opts<Id>) => Promise<Result>;
8+
9+
export default Signature;

src/types/Cursor.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
type Cursor = string | undefined;
2+
3+
export default Cursor;

src/types/Filter.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
export type GreaterFilter<Prop> = { readonly $gt: Prop } | { readonly $gte: Prop };
2+
export type LesserFilter<Prop> = { readonly $lt: Prop } | { readonly $lte: Prop };
3+
export type InFilter<Prop> = { readonly $in: Prop[] } | { readonly $nin: Prop[] };
4+
export type EqualityFilter<Prop> = { readonly $eq: Prop } | { readonly $ne: Prop };
5+
6+
export type PropFilter<Prop> = (
7+
GreaterFilter<Prop> |
8+
LesserFilter<Prop> |
9+
InFilter<Prop> |
10+
EqualityFilter<Prop>
11+
);
12+
13+
export type EntityFilter<Entity> = {
14+
readonly [P in keyof Entity]?: Entity[P] | PropFilter<Entity[P]>;
15+
};
16+
17+
export interface AndFilter<Entity> {
18+
readonly $and: Filter<Entity>[];
19+
}
20+
21+
export interface OrFilter<Entity> {
22+
readonly $or: Filter<Entity>[];
23+
}
24+
25+
export interface NotFilter<Entity> {
26+
readonly $not: Filter<Entity>[];
27+
}
28+
29+
export type Filter<Entity> = (
30+
EntityFilter<Entity> |
31+
AndFilter<Entity> |
32+
OrFilter<Entity> |
33+
NotFilter<Entity>
34+
);
35+
36+
export default Filter;

src/types/Pagination.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Cursor from './Cursor';
2+
3+
export default interface Pagination {
4+
readonly cursor: Cursor;
5+
readonly forward: boolean;
6+
readonly limit: number;
7+
}

src/types/Sort.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type Sort<Entity> = {
2+
readonly [P in keyof Entity]: boolean | undefined;
3+
};
4+
5+
export default Sort;

0 commit comments

Comments
 (0)