@thisisagile/easy 12.7.14 → 12.7.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import { Func, Store } from "../types";
2
+ import { Request } from "./Request";
3
+ import { Response } from "./Response";
4
+ export declare class NoRequestStore implements Store<Response, Request> {
5
+ execute(req: Request, f: Func<Promise<Response>, Request>): Promise<Response>;
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoRequestStore = void 0;
4
+ class NoRequestStore {
5
+ execute(req, f) {
6
+ return f(req);
7
+ }
8
+ }
9
+ exports.NoRequestStore = NoRequestStore;
10
+ //# sourceMappingURL=NoRequestStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoRequestStore.js","sourceRoot":"","sources":["../../src/http/NoRequestStore.ts"],"names":[],"mappings":";;;AAIA,MAAa,cAAc;IACvB,OAAO,CAAC,GAAY,EAAE,CAAmC;QACrD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;CACJ;AAJD,wCAIC"}
@@ -1,13 +1,14 @@
1
- import { PageOptions, Uri } from '../types';
1
+ import { FetchOptions, Uri } from '../types';
2
2
  import { HttpVerb, RequestOptions, RequestProvider, Response } from '../http';
3
+ export declare type RouteOptions = RequestOptions | FetchOptions;
3
4
  export declare class Api {
4
5
  readonly provider: RequestProvider;
5
6
  constructor(provider?: RequestProvider);
6
- get(uri: Uri, options?: RequestOptions | PageOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
7
- post(uri: Uri, body?: unknown, options?: RequestOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
8
- put(uri: Uri, body?: unknown, options?: RequestOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
9
- patch(uri: Uri, body?: unknown, options?: RequestOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
10
- delete(uri: Uri, options?: RequestOptions, transform?: (b: any) => any, transformError?: (r: any) => any): Promise<Response>;
11
- options(verb: HttpVerb, options?: RequestOptions | PageOptions): RequestOptions;
7
+ get(uri: Uri, options?: RouteOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
8
+ post(uri: Uri, body?: unknown, options?: RouteOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
9
+ put(uri: Uri, body?: unknown, options?: RouteOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
10
+ patch(uri: Uri, body?: unknown, options?: RouteOptions, transform?: (r: any) => any, transformError?: (r: any) => any): Promise<Response>;
11
+ delete(uri: Uri, options?: RouteOptions, transform?: (b: any) => any, transformError?: (r: any) => any): Promise<Response>;
12
+ options(verb: HttpVerb, options?: RouteOptions): RequestOptions;
12
13
  }
13
14
  export declare const api: Api;
@@ -17,16 +17,43 @@ class Api {
17
17
  });
18
18
  }
19
19
  post(uri, body, options = http_1.RequestOptions.Json, transform, transformError = (r) => r) {
20
- return this.provider.execute({ uri, verb: http_1.HttpVerb.Post, body, transform, transformError, options: this.options(http_1.HttpVerb.Post, options) });
20
+ return this.provider.execute({
21
+ uri,
22
+ verb: http_1.HttpVerb.Post,
23
+ body,
24
+ transform,
25
+ transformError,
26
+ options: this.options(http_1.HttpVerb.Post, options)
27
+ });
21
28
  }
22
29
  put(uri, body, options = http_1.RequestOptions.Json, transform, transformError = (r) => r) {
23
- return this.provider.execute({ uri, verb: http_1.HttpVerb.Put, body, transform, transformError, options: this.options(http_1.HttpVerb.Put, options) });
30
+ return this.provider.execute({
31
+ uri,
32
+ verb: http_1.HttpVerb.Put,
33
+ body,
34
+ transform,
35
+ transformError,
36
+ options: this.options(http_1.HttpVerb.Put, options)
37
+ });
24
38
  }
25
39
  patch(uri, body, options = http_1.RequestOptions.Json, transform, transformError = (r) => r) {
26
- return this.provider.execute({ uri, verb: http_1.HttpVerb.Patch, body, transform, transformError, options: this.options(http_1.HttpVerb.Patch, options) });
40
+ return this.provider.execute({
41
+ uri,
42
+ verb: http_1.HttpVerb.Patch,
43
+ body,
44
+ transform,
45
+ transformError,
46
+ options: this.options(http_1.HttpVerb.Patch, options)
47
+ });
27
48
  }
28
49
  delete(uri, options = http_1.RequestOptions.Json, transform, transformError = (r) => r) {
29
- return this.provider.execute({ uri, verb: http_1.HttpVerb.Delete, transform, transformError, options: this.options(http_1.HttpVerb.Delete, options) });
50
+ return this.provider.execute({
51
+ uri,
52
+ verb: http_1.HttpVerb.Delete,
53
+ transform,
54
+ transformError,
55
+ options: this.options(http_1.HttpVerb.Delete, options)
56
+ });
30
57
  }
31
58
  options(verb, options) {
32
59
  return options instanceof http_1.RequestOptions ? options : http_1.RequestOptions.Json;
@@ -1 +1 @@
1
- {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/services/Api.ts"],"names":[],"mappings":";;;AACA,kCAA6F;AAC7F,mDAAgD;AAEhD,MAAa,GAAG;IACd,YAAqB,WAA4B,IAAI,6BAAa,EAAE;QAA/C,aAAQ,GAAR,QAAQ,CAAuC;IAAG,CAAC;IAExE,GAAG,CAAC,GAAQ,EAAE,OAAsC,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAC/G,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAA,oBAAa,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAA,oBAAa,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC;YAC9E,IAAI,EAAE,eAAQ,CAAC,GAAG;YAClB,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CACF,GAAQ,EACR,IAAc,EACd,UAA0B,qBAAc,CAAC,IAAI,EAC7C,SAA2B,EAC3B,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7I,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,IAAc,EAAE,UAA0B,qBAAc,CAAC,IAAI,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACtI,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3I,CAAC;IAED,KAAK,CACH,GAAQ,EACR,IAAc,EACd,UAA0B,qBAAc,CAAC,IAAI,EAC7C,SAA2B,EAC3B,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/I,CAAC;IAED,MAAM,CAAC,GAAQ,EAAE,UAA0B,qBAAc,CAAC,IAAI,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACzH,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3I,CAAC;IAED,OAAO,CAAC,IAAc,EAAE,OAAsC;QAC5D,OAAO,OAAO,YAAY,qBAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAc,CAAC,IAAI,CAAC;IAC3E,CAAC;CACF;AA5CD,kBA4CC;AAEY,QAAA,GAAG,GAAQ,IAAI,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/services/Api.ts"],"names":[],"mappings":";;;AACA,kCAA2F;AAC3F,mDAA8C;AAI9C,MAAa,GAAG;IACZ,YAAqB,WAA4B,IAAI,6BAAa,EAAE;QAA/C,aAAQ,GAAR,QAAQ,CAAuC;IACpE,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,OAAsB,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAA,oBAAa,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAA,oBAAa,EAAC,OAAO,CAAC,EAAE,IAAI,CAAC;YAC9E,IAAI,EAAE,eAAQ,CAAC,GAAG;YAClB,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;SAC/C,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CACA,GAAQ,EACR,IAAc,EACd,UAAwB,qBAAc,CAAC,IAAI,EAC3C,SAA2B,EAC3B,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,GAAG;YACH,IAAI,EAAE,eAAQ,CAAC,IAAI;YACnB,IAAI;YACJ,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;SAChD,CAAC,CAAC;IACP,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,IAAc,EAAE,UAAwB,qBAAc,CAAC,IAAI,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAClI,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,GAAG;YACH,IAAI,EAAE,eAAQ,CAAC,GAAG;YAClB,IAAI;YACJ,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;SAC/C,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CACD,GAAQ,EACR,IAAc,EACd,UAAwB,qBAAc,CAAC,IAAI,EAC3C,SAA2B,EAC3B,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,GAAG;YACH,IAAI,EAAE,eAAQ,CAAC,KAAK;YACpB,IAAI;YACJ,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;SACjD,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,GAAQ,EAAE,UAAwB,qBAAc,CAAC,IAAI,EAAE,SAA2B,EAAE,iBAAiB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACrH,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,GAAG;YACH,IAAI,EAAE,eAAQ,CAAC,MAAM;YACrB,SAAS;YACT,cAAc;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;SAClD,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,IAAc,EAAE,OAAsB;QAC1C,OAAO,OAAO,YAAY,qBAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAc,CAAC,IAAI,CAAC;IAC7E,CAAC;CACJ;AAxED,kBAwEC;AAEY,QAAA,GAAG,GAAQ,IAAI,GAAG,EAAE,CAAC"}
@@ -1,25 +1,25 @@
1
- import { Api } from './Api';
2
- import { Func, Gateway, Id, Json, JsonValue, PageList, PageOptions, Uri } from '../types';
1
+ import { Api, RouteOptions } from './Api';
2
+ import { FetchOptions, Func, Gateway, Id, Json, JsonValue, PageList, Uri } from '../types';
3
3
  import { RequestOptions } from '../http';
4
- export declare class RouteGateway extends Gateway {
4
+ export declare class RouteGateway extends Gateway<RouteOptions> {
5
5
  readonly route: Func<Uri>;
6
6
  readonly routeId: Func<Uri>;
7
7
  readonly api: Api;
8
8
  constructor(route: Func<Uri>, routeId: Func<Uri>, api?: Api);
9
- get(uri: Uri, options?: RequestOptions | PageOptions): Promise<PageList<Json>>;
10
- getOne(uri: Uri, options?: RequestOptions): Promise<Json | undefined>;
11
- all(options?: PageOptions): Promise<PageList<Json>>;
12
- byId(id: Id): Promise<Json | undefined>;
13
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
14
- exists(id: Id): Promise<boolean>;
9
+ get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>>;
10
+ getOne(uri: Uri, options?: RouteOptions): Promise<Json | undefined>;
11
+ all(options?: RouteOptions): Promise<PageList<Json>>;
12
+ byId(id: Id, options?: RouteOptions): Promise<Json | undefined>;
13
+ search(q: JsonValue, options?: RouteOptions): Promise<PageList<Json>>;
14
+ exists(id: Id, options?: RouteOptions): Promise<boolean>;
15
+ add(item: Json, options?: RouteOptions): Promise<Json>;
16
+ filter(options?: RouteOptions): Promise<PageList<Json>>;
17
+ update(item: Json, options?: RouteOptions): Promise<Json>;
18
+ upsert(item: Json, options?: RouteOptions): Promise<Json>;
19
+ remove(id: Id, options?: RouteOptions): Promise<boolean>;
15
20
  post(uri: Uri, item?: Json): Promise<Json>;
16
- postSearch(uri: Uri, options?: RequestOptions | PageOptions): Promise<PageList<Json>>;
17
- add(item: Json): Promise<Json>;
18
- filter(options?: RequestOptions | PageOptions): Promise<PageList<Json>>;
19
- update(item: Json): Promise<Json>;
21
+ postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>>;
20
22
  patch(uri: Uri, item: Json): Promise<Json>;
21
- upsert(item: Json): Promise<Json>;
22
23
  put(uri: Uri, item: Json): Promise<Json>;
23
- remove(id: Id): Promise<boolean>;
24
- delete(uri: Uri): Promise<boolean>;
24
+ delete(uri: Uri, options?: RouteOptions): Promise<boolean>;
25
25
  }
@@ -23,17 +23,32 @@ class RouteGateway extends types_1.Gateway {
23
23
  all(options) {
24
24
  return this.get(this.route(), options);
25
25
  }
26
- byId(id) {
26
+ byId(id, options) {
27
27
  return this.getOne(this.routeId().id(id));
28
28
  }
29
29
  search(q, options) {
30
30
  return this.get(this.route().query(q), options);
31
31
  }
32
- exists(id) {
32
+ exists(id, options) {
33
33
  return this.get(this.routeId().id(id))
34
34
  .then(r => r.length === 1)
35
35
  .catch(r => (http_1.HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));
36
36
  }
37
+ add(item, options) {
38
+ return this.post(this.route(), item);
39
+ }
40
+ filter(options) {
41
+ return this.postSearch(this.route(), options);
42
+ }
43
+ update(item, options) {
44
+ return this.patch(this.routeId().id(item.id), item);
45
+ }
46
+ upsert(item, options) {
47
+ return this.put(this.routeId().id(item.id), item);
48
+ }
49
+ remove(id, options) {
50
+ return this.delete(this.routeId().id(id));
51
+ }
37
52
  post(uri, item) {
38
53
  return this.api.post(uri, item).then(r => r.body.data?.items.first() ?? {});
39
54
  }
@@ -43,28 +58,13 @@ class RouteGateway extends types_1.Gateway {
43
58
  filters: r.body.data?.meta?.filters,
44
59
  }));
45
60
  }
46
- add(item) {
47
- return this.post(this.route(), item);
48
- }
49
- filter(options) {
50
- return this.postSearch(this.route(), options);
51
- }
52
- update(item) {
53
- return this.patch(this.routeId().id(item.id), item);
54
- }
55
61
  patch(uri, item) {
56
62
  return this.api.patch(uri, item).then(r => r.body.data?.items.first() ?? {});
57
63
  }
58
- upsert(item) {
59
- return this.put(this.routeId().id(item.id), item);
60
- }
61
64
  put(uri, item) {
62
65
  return this.api.put(uri, item).then(r => r.body.data?.items.first() ?? {});
63
66
  }
64
- remove(id) {
65
- return this.delete(this.routeId().id(id));
66
- }
67
- delete(uri) {
67
+ delete(uri, options) {
68
68
  return this.api.delete(uri).then(() => true);
69
69
  }
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RouteGateway.js","sourceRoot":"","sources":["../../src/services/RouteGateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteGateway.js","sourceRoot":"","sources":["../../src/services/RouteGateway.ts"],"names":[],"mappings":";;;AAAA,+BAAwC;AACxC,oCAA6G;AAC7G,kCAAkE;AAElE,MAAa,YAAa,SAAQ,eAAqB;IACnD,YAAqB,KAAgB,EAAW,OAAkB,EAAW,MAAW,IAAI,SAAG,EAAE;QAC7F,KAAK,EAAE,CAAC;QADS,UAAK,GAAL,KAAK,CAAW;QAAW,YAAO,GAAP,OAAO,CAAW;QAAW,QAAG,GAAH,GAAG,CAAiB;IAEjG,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,OAAsB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,kBAAU,EAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAA,oBAAa,EAAC,OAAO,CAAC,IAAI;YACvG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU;YAC9B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAmB;SAClD,CAAC,CAAC,CAAC;IACR,CAAC;IAED,MAAM,CAAC,GAAQ,EAAE,OAAsB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,OAAsB;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,EAAM,EAAE,OAAsB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,CAAY,EAAE,OAAsB;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,OAAsB;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;aACzB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,GAAG,CAAC,IAAU,EAAE,OAAsB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,OAAsB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,IAAU,EAAE,OAAsB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,IAAU,EAAE,OAAsB;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,OAAsB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,IAAW;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,UAAU,CAAC,GAAQ,EAAE,OAAuC;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,kBAAU,EAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAA,oBAAa,EAAC,OAAO,CAAC,IAAI;YACxG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU;YAC9B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAmB;SAClD,CAAC,CAAC,CAAC;IACR,CAAC;IAED,KAAK,CAAC,GAAQ,EAAE,IAAU;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,GAAG,CAAC,GAAQ,EAAE,IAAU;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,GAAQ,EAAE,OAAsB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;CACJ;AA5ED,oCA4EC"}
@@ -0,0 +1,10 @@
1
+ import { Func } from "./Func";
2
+ import { CacheAge } from "./CacheAge";
3
+ import { Construct } from "./Constructor";
4
+ export interface Store<To = any, From = any> {
5
+ execute: (fetch: From, f: Func<Promise<To>, From>) => Promise<To>;
6
+ }
7
+ export declare type CacheOptions = {
8
+ expiresIn?: CacheAge;
9
+ store?: Construct<Store>;
10
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../src/types/Cache.ts"],"names":[],"mappings":""}
@@ -2,15 +2,17 @@ import { Json, JsonValue } from './Json';
2
2
  import { Id } from './Id';
3
3
  import { PageList, PageOptions } from './PageList';
4
4
  import { List } from './List';
5
- export declare abstract class Gateway {
6
- all(options?: PageOptions): Promise<PageList<Json>>;
7
- byId(id: Id): Promise<Json | undefined>;
8
- by(_key: string, _value: JsonValue, _options?: PageOptions): Promise<PageList<Json>>;
5
+ import { CacheOptions } from "./Cache";
6
+ export declare type FetchOptions = PageOptions & CacheOptions;
7
+ export declare abstract class Gateway<Options = FetchOptions> {
8
+ all(options?: Options): Promise<PageList<Json>>;
9
+ byId(id: Id, options?: Options): Promise<Json | undefined>;
10
+ by(_key: string, _value: JsonValue, _options?: Options): Promise<PageList<Json>>;
9
11
  byIds(..._ids: Id[]): Promise<List<Json>>;
10
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
11
- filter(options?: PageOptions): Promise<PageList<Json>>;
12
- exists(id: Id): Promise<boolean>;
13
- add(item: Json): Promise<Json>;
14
- update(item: Json): Promise<Json>;
15
- remove(id: Id): Promise<boolean>;
12
+ search(q: JsonValue, options?: Options): Promise<PageList<Json>>;
13
+ filter(options?: Options): Promise<PageList<Json>>;
14
+ exists(id: Id, options?: Options): Promise<boolean>;
15
+ add(item: Json, options?: Options): Promise<Json>;
16
+ update(item: Json, options?: Options): Promise<Json>;
17
+ remove(id: Id, options?: Options): Promise<boolean>;
16
18
  }
@@ -7,7 +7,7 @@ class Gateway {
7
7
  all(options) {
8
8
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
9
9
  }
10
- byId(id) {
10
+ byId(id, options) {
11
11
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
12
12
  }
13
13
  by(_key, _value, _options) {
@@ -22,16 +22,16 @@ class Gateway {
22
22
  filter(options) {
23
23
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
24
24
  }
25
- exists(id) {
25
+ exists(id, options) {
26
26
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
27
27
  }
28
- add(item) {
28
+ add(item, options) {
29
29
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
30
30
  }
31
- update(item) {
31
+ update(item, options) {
32
32
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
33
33
  }
34
- remove(id) {
34
+ remove(id, options) {
35
35
  return (0, utils_1.reject)(Exception_1.Exception.IsNotImplemented);
36
36
  }
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Gateway.js","sourceRoot":"","sources":["../../src/types/Gateway.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,oCAAkC;AAIlC,MAAsB,OAAO;IAC3B,GAAG,CAAC,OAAqB;QACvB,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,EAAM;QACT,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,MAAiB,EAAE,QAAsB;QACxD,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,IAAU;QACjB,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,CAAY,EAAE,OAAqB;QACxC,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,OAAqB;QAC1B,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,EAAM;QACX,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAU;QACf,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,EAAM;QACX,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;CACF;AAxCD,0BAwCC"}
1
+ {"version":3,"file":"Gateway.js","sourceRoot":"","sources":["../../src/types/Gateway.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AACxC,oCAAkC;AAQlC,MAAsB,OAAO;IAC3B,GAAG,CAAC,OAAiB;QACnB,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,EAAM,EAAE,OAAiB;QAC5B,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,MAAiB,EAAE,QAAkB;QACpD,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,IAAU;QACjB,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,CAAY,EAAE,OAAiB;QACpC,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,OAAiB;QACtB,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,OAAiB;QAC9B,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAC,IAAU,EAAE,OAAiB;QAC/B,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAU,EAAE,OAAiB;QAClC,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,OAAiB;QAC9B,OAAO,IAAA,cAAM,EAAC,qBAAS,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;CACF;AAxCD,0BAwCC"}
@@ -1,5 +1,6 @@
1
1
  export * from './Array';
2
2
  export * from './Builder';
3
+ export * from './Cache';
3
4
  export * from './CacheAge';
4
5
  export * from './Case';
5
6
  export * from './Constructor';
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Array"), exports);
18
18
  __exportStar(require("./Builder"), exports);
19
+ __exportStar(require("./Cache"), exports);
19
20
  __exportStar(require("./CacheAge"), exports);
20
21
  __exportStar(require("./Case"), exports);
21
22
  __exportStar(require("./Constructor"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,gDAA8B;AAC9B,4CAA0B;AAC1B,yCAAuB;AACvB,gDAA8B;AAC9B,8CAA4B;AAC5B,yCAAuB;AACvB,4CAA0B;AAC1B,wCAAsB;AACtB,uCAAqB;AACrB,6CAA2B;AAC3B,uCAAqB;AACrB,wCAAsB;AACtB,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AACvB,yCAAuB;AACvB,4CAA0B;AAC1B,yCAAuB;AACvB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,wCAAsB;AACtB,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAC3B,wCAAsB;AACtB,0CAAwB;AACxB,wCAAsB;AACtB,yCAAuB;AACvB,gDAA8B;AAC9B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,4CAA0B;AAC1B,0CAAwB;AACxB,6CAA2B;AAC3B,yCAAuB;AACvB,gDAA8B;AAC9B,4CAA0B;AAC1B,yCAAuB;AACvB,gDAA8B;AAC9B,8CAA4B;AAC5B,yCAAuB;AACvB,4CAA0B;AAC1B,wCAAsB;AACtB,uCAAqB;AACrB,6CAA2B;AAC3B,uCAAqB;AACrB,wCAAsB;AACtB,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AACvB,yCAAuB;AACvB,4CAA0B;AAC1B,yCAAuB;AACvB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,wCAAsB;AACtB,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAC3B,wCAAsB;AACtB,0CAAwB;AACxB,wCAAsB;AACtB,yCAAuB;AACvB,gDAA8B;AAC9B,0CAAwB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy",
3
- "version": "12.7.14",
3
+ "version": "12.7.19",
4
4
  "description": "Straightforward library for building domain-driven microservice architectures",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "12.7.14",
34
+ "@thisisagile/easy-test": "12.7.19",
35
35
  "@types/form-urlencoded": "^4.4.0",
36
36
  "@types/jsonwebtoken": "^8.5.9",
37
37
  "@types/luxon": "3.0.2",
@@ -0,0 +1,9 @@
1
+ import {Func, Store} from "../types";
2
+ import {Request} from "./Request";
3
+ import {Response} from "./Response";
4
+
5
+ export class NoRequestStore implements Store<Response, Request> {
6
+ execute(req: Request, f: Func<Promise<Response>, Request>): Promise<Response> {
7
+ return f(req);
8
+ }
9
+ }
@@ -1,51 +1,81 @@
1
- import { PageOptions, Uri } from '../types';
2
- import { HttpVerb, RequestOptions, RequestProvider, Response, toPageOptions } from '../http';
3
- import { AxiosProvider } from './AxiosProvider';
1
+ import {FetchOptions, Uri} from '../types';
2
+ import {HttpVerb, RequestOptions, RequestProvider, Response, toPageOptions} from '../http';
3
+ import {AxiosProvider} from './AxiosProvider';
4
+
5
+ export type RouteOptions = RequestOptions | FetchOptions;
4
6
 
5
7
  export class Api {
6
- constructor(readonly provider: RequestProvider = new AxiosProvider()) {}
7
-
8
- get(uri: Uri, options?: RequestOptions | PageOptions, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {
9
- return this.provider.execute({
10
- uri: uri.skip(toPageOptions(options)?.skip).take(toPageOptions(options)?.take),
11
- verb: HttpVerb.Get,
12
- transform,
13
- transformError,
14
- options: this.options(HttpVerb.Get, options),
15
- });
16
- }
17
-
18
- post(
19
- uri: Uri,
20
- body?: unknown,
21
- options: RequestOptions = RequestOptions.Json,
22
- transform?: (r: any) => any,
23
- transformError = (r: any) => r
24
- ): Promise<Response> {
25
- return this.provider.execute({ uri, verb: HttpVerb.Post, body, transform, transformError, options: this.options(HttpVerb.Post, options) });
26
- }
27
-
28
- put(uri: Uri, body?: unknown, options: RequestOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {
29
- return this.provider.execute({ uri, verb: HttpVerb.Put, body, transform, transformError, options: this.options(HttpVerb.Put, options) });
30
- }
31
-
32
- patch(
33
- uri: Uri,
34
- body?: unknown,
35
- options: RequestOptions = RequestOptions.Json,
36
- transform?: (r: any) => any,
37
- transformError = (r: any) => r
38
- ): Promise<Response> {
39
- return this.provider.execute({ uri, verb: HttpVerb.Patch, body, transform, transformError, options: this.options(HttpVerb.Patch, options) });
40
- }
41
-
42
- delete(uri: Uri, options: RequestOptions = RequestOptions.Json, transform?: (b: any) => any, transformError = (r: any) => r): Promise<Response> {
43
- return this.provider.execute({ uri, verb: HttpVerb.Delete, transform, transformError, options: this.options(HttpVerb.Delete, options) });
44
- }
45
-
46
- options(verb: HttpVerb, options?: RequestOptions | PageOptions): RequestOptions {
47
- return options instanceof RequestOptions ? options : RequestOptions.Json;
48
- }
8
+ constructor(readonly provider: RequestProvider = new AxiosProvider()) {
9
+ }
10
+
11
+ get(uri: Uri, options?: RouteOptions, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {
12
+ return this.provider.execute({
13
+ uri: uri.skip(toPageOptions(options)?.skip).take(toPageOptions(options)?.take),
14
+ verb: HttpVerb.Get,
15
+ transform,
16
+ transformError,
17
+ options: this.options(HttpVerb.Get, options),
18
+ });
19
+ }
20
+
21
+ post(
22
+ uri: Uri,
23
+ body?: unknown,
24
+ options: RouteOptions = RequestOptions.Json,
25
+ transform?: (r: any) => any,
26
+ transformError = (r: any) => r
27
+ ): Promise<Response> {
28
+ return this.provider.execute({
29
+ uri,
30
+ verb: HttpVerb.Post,
31
+ body,
32
+ transform,
33
+ transformError,
34
+ options: this.options(HttpVerb.Post, options)
35
+ });
36
+ }
37
+
38
+ put(uri: Uri, body?: unknown, options: RouteOptions = RequestOptions.Json, transform?: (r: any) => any, transformError = (r: any) => r): Promise<Response> {
39
+ return this.provider.execute({
40
+ uri,
41
+ verb: HttpVerb.Put,
42
+ body,
43
+ transform,
44
+ transformError,
45
+ options: this.options(HttpVerb.Put, options)
46
+ });
47
+ }
48
+
49
+ patch(
50
+ uri: Uri,
51
+ body?: unknown,
52
+ options: RouteOptions = RequestOptions.Json,
53
+ transform?: (r: any) => any,
54
+ transformError = (r: any) => r
55
+ ): Promise<Response> {
56
+ return this.provider.execute({
57
+ uri,
58
+ verb: HttpVerb.Patch,
59
+ body,
60
+ transform,
61
+ transformError,
62
+ options: this.options(HttpVerb.Patch, options)
63
+ });
64
+ }
65
+
66
+ delete(uri: Uri, options: RouteOptions = RequestOptions.Json, transform?: (b: any) => any, transformError = (r: any) => r): Promise<Response> {
67
+ return this.provider.execute({
68
+ uri,
69
+ verb: HttpVerb.Delete,
70
+ transform,
71
+ transformError,
72
+ options: this.options(HttpVerb.Delete, options)
73
+ });
74
+ }
75
+
76
+ options(verb: HttpVerb, options?: RouteOptions): RequestOptions {
77
+ return options instanceof RequestOptions ? options : RequestOptions.Json;
78
+ }
49
79
  }
50
80
 
51
81
  export const api: Api = new Api();
@@ -1,81 +1,81 @@
1
- import { Api } from './Api';
2
- import { Filter, Func, Gateway, Id, Json, JsonValue, PageList, PageOptions, toPageList, Uri } from '../types';
3
- import { HttpStatus, RequestOptions, toPageOptions } from '../http';
4
-
5
- export class RouteGateway extends Gateway {
6
- constructor(readonly route: Func<Uri>, readonly routeId: Func<Uri>, readonly api: Api = new Api()) {
7
- super();
8
- }
9
-
10
- get(uri: Uri, options?: RequestOptions | PageOptions): Promise<PageList<Json>> {
11
- return this.api.get(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
12
- total: r.body.data?.totalItems,
13
- filters: r.body.data?.meta?.filters as Filter[],
14
- }));
15
- }
16
-
17
- getOne(uri: Uri, options?: RequestOptions): Promise<Json | undefined> {
18
- return this.get(uri, options).then(r => r.first());
19
- }
20
-
21
- all(options?: PageOptions): Promise<PageList<Json>> {
22
- return this.get(this.route(), options);
23
- }
24
-
25
- byId(id: Id): Promise<Json | undefined> {
26
- return this.getOne(this.routeId().id(id));
27
- }
28
-
29
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
30
- return this.get(this.route().query(q), options);
31
- }
32
-
33
- exists(id: Id): Promise<boolean> {
34
- return this.get(this.routeId().id(id))
35
- .then(r => r.length === 1)
36
- .catch(r => (HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));
37
- }
38
-
39
- post(uri: Uri, item?: Json): Promise<Json> {
40
- return this.api.post(uri, item).then(r => r.body.data?.items.first() ?? {});
41
- }
42
-
43
- postSearch(uri: Uri, options?: RequestOptions | PageOptions): Promise<PageList<Json>> {
44
- return this.api.post(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
45
- total: r.body.data?.totalItems,
46
- filters: r.body.data?.meta?.filters as Filter[],
47
- }));
48
- }
49
-
50
- add(item: Json): Promise<Json> {
51
- return this.post(this.route(), item);
52
- }
53
-
54
- filter(options?: RequestOptions | PageOptions): Promise<PageList<Json>> {
55
- return this.postSearch(this.route(), options);
56
- }
57
-
58
- update(item: Json): Promise<Json> {
59
- return this.patch(this.routeId().id(item.id), item);
60
- }
61
-
62
- patch(uri: Uri, item: Json): Promise<Json> {
63
- return this.api.patch(uri, item).then(r => r.body.data?.items.first() ?? {});
64
- }
65
-
66
- upsert(item: Json): Promise<Json> {
67
- return this.put(this.routeId().id(item.id), item);
68
- }
69
-
70
- put(uri: Uri, item: Json): Promise<Json> {
71
- return this.api.put(uri, item).then(r => r.body.data?.items.first() ?? {});
72
- }
73
-
74
- remove(id: Id): Promise<boolean> {
75
- return this.delete(this.routeId().id(id));
76
- }
77
-
78
- delete(uri: Uri): Promise<boolean> {
79
- return this.api.delete(uri).then(() => true);
80
- }
1
+ import {Api, RouteOptions} from './Api';
2
+ import {FetchOptions, Filter, Func, Gateway, Id, Json, JsonValue, PageList, toPageList, Uri} from '../types';
3
+ import {HttpStatus, RequestOptions, toPageOptions} from '../http';
4
+
5
+ export class RouteGateway extends Gateway<RouteOptions> {
6
+ constructor(readonly route: Func<Uri>, readonly routeId: Func<Uri>, readonly api: Api = new Api()) {
7
+ super();
8
+ }
9
+
10
+ get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>> {
11
+ return this.api.get(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
12
+ total: r.body.data?.totalItems,
13
+ filters: r.body.data?.meta?.filters as Filter[],
14
+ }));
15
+ }
16
+
17
+ getOne(uri: Uri, options?: RouteOptions): Promise<Json | undefined> {
18
+ return this.get(uri, options).then(r => r.first());
19
+ }
20
+
21
+ all(options?: RouteOptions): Promise<PageList<Json>> {
22
+ return this.get(this.route(), options);
23
+ }
24
+
25
+ byId(id: Id, options?: RouteOptions): Promise<Json | undefined> {
26
+ return this.getOne(this.routeId().id(id));
27
+ }
28
+
29
+ search(q: JsonValue, options?: RouteOptions): Promise<PageList<Json>> {
30
+ return this.get(this.route().query(q), options);
31
+ }
32
+
33
+ exists(id: Id, options?: RouteOptions): Promise<boolean> {
34
+ return this.get(this.routeId().id(id))
35
+ .then(r => r.length === 1)
36
+ .catch(r => (HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));
37
+ }
38
+
39
+ add(item: Json, options?: RouteOptions): Promise<Json> {
40
+ return this.post(this.route(), item);
41
+ }
42
+
43
+ filter(options?: RouteOptions): Promise<PageList<Json>> {
44
+ return this.postSearch(this.route(), options);
45
+ }
46
+
47
+ update(item: Json, options?: RouteOptions): Promise<Json> {
48
+ return this.patch(this.routeId().id(item.id), item);
49
+ }
50
+
51
+ upsert(item: Json, options?: RouteOptions): Promise<Json> {
52
+ return this.put(this.routeId().id(item.id), item);
53
+ }
54
+
55
+ remove(id: Id, options?: RouteOptions): Promise<boolean> {
56
+ return this.delete(this.routeId().id(id));
57
+ }
58
+
59
+ post(uri: Uri, item?: Json): Promise<Json> {
60
+ return this.api.post(uri, item).then(r => r.body.data?.items.first() ?? {});
61
+ }
62
+
63
+ postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>> {
64
+ return this.api.post(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
65
+ total: r.body.data?.totalItems,
66
+ filters: r.body.data?.meta?.filters as Filter[],
67
+ }));
68
+ }
69
+
70
+ patch(uri: Uri, item: Json): Promise<Json> {
71
+ return this.api.patch(uri, item).then(r => r.body.data?.items.first() ?? {});
72
+ }
73
+
74
+ put(uri: Uri, item: Json): Promise<Json> {
75
+ return this.api.put(uri, item).then(r => r.body.data?.items.first() ?? {});
76
+ }
77
+
78
+ delete(uri: Uri, options?: RouteOptions): Promise<boolean> {
79
+ return this.api.delete(uri).then(() => true);
80
+ }
81
81
  }
@@ -0,0 +1,13 @@
1
+ import {Func} from "./Func";
2
+ import {CacheAge} from "./CacheAge";
3
+ import {Construct} from "./Constructor";
4
+
5
+ export interface Store<To = any, From = any> {
6
+ execute: (fetch: From, f: Func<Promise<To>, From>) => Promise<To>;
7
+ }
8
+
9
+ export type CacheOptions = {
10
+ expiresIn?: CacheAge;
11
+ store?: Construct<Store>;
12
+ };
13
+
@@ -4,17 +4,21 @@ import { Exception } from './Exception';
4
4
  import { reject } from '../utils';
5
5
  import { PageList, PageOptions } from './PageList';
6
6
  import { List } from './List';
7
+ import {CacheOptions} from "./Cache";
7
8
 
8
- export abstract class Gateway {
9
- all(options?: PageOptions): Promise<PageList<Json>> {
9
+
10
+ export type FetchOptions = PageOptions & CacheOptions;
11
+
12
+ export abstract class Gateway<Options = FetchOptions> {
13
+ all(options?: Options): Promise<PageList<Json>> {
10
14
  return reject(Exception.IsNotImplemented);
11
15
  }
12
16
 
13
- byId(id: Id): Promise<Json | undefined> {
17
+ byId(id: Id, options?: Options): Promise<Json | undefined> {
14
18
  return reject(Exception.IsNotImplemented);
15
19
  }
16
20
 
17
- by(_key: string, _value: JsonValue, _options?: PageOptions): Promise<PageList<Json>> {
21
+ by(_key: string, _value: JsonValue, _options?: Options): Promise<PageList<Json>> {
18
22
  return reject(Exception.IsNotImplemented);
19
23
  }
20
24
 
@@ -22,27 +26,27 @@ export abstract class Gateway {
22
26
  return reject(Exception.IsNotImplemented);
23
27
  }
24
28
 
25
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
29
+ search(q: JsonValue, options?: Options): Promise<PageList<Json>> {
26
30
  return reject(Exception.IsNotImplemented);
27
31
  }
28
32
 
29
- filter(options?: PageOptions): Promise<PageList<Json>> {
33
+ filter(options?: Options): Promise<PageList<Json>> {
30
34
  return reject(Exception.IsNotImplemented);
31
35
  }
32
36
 
33
- exists(id: Id): Promise<boolean> {
37
+ exists(id: Id, options?: Options): Promise<boolean> {
34
38
  return reject(Exception.IsNotImplemented);
35
39
  }
36
40
 
37
- add(item: Json): Promise<Json> {
41
+ add(item: Json, options?: Options): Promise<Json> {
38
42
  return reject(Exception.IsNotImplemented);
39
43
  }
40
44
 
41
- update(item: Json): Promise<Json> {
45
+ update(item: Json, options?: Options): Promise<Json> {
42
46
  return reject(Exception.IsNotImplemented);
43
47
  }
44
48
 
45
- remove(id: Id): Promise<boolean> {
49
+ remove(id: Id, options?: Options): Promise<boolean> {
46
50
  return reject(Exception.IsNotImplemented);
47
51
  }
48
52
  }
@@ -1,5 +1,6 @@
1
1
  export * from './Array';
2
2
  export * from './Builder';
3
+ export * from './Cache';
3
4
  export * from './CacheAge';
4
5
  export * from './Case';
5
6
  export * from './Constructor';