@thisisagile/easy 12.7.14 → 12.7.18

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.
@@ -1,25 +1,26 @@
1
1
  import { Api } from './Api';
2
- import { Func, Gateway, Id, Json, JsonValue, PageList, PageOptions, Uri } from '../types';
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 type RouteOptions = RequestOptions | FetchOptions;
5
+ export declare class RouteGateway extends Gateway<RouteOptions> {
5
6
  readonly route: Func<Uri>;
6
7
  readonly routeId: Func<Uri>;
7
8
  readonly api: Api;
8
9
  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>;
10
+ get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>>;
11
+ getOne(uri: Uri, options?: RouteOptions): Promise<Json | undefined>;
12
+ all(options?: RouteOptions): Promise<PageList<Json>>;
13
+ byId(id: Id, options?: RouteOptions): Promise<Json | undefined>;
14
+ search(q: JsonValue, options?: RouteOptions): Promise<PageList<Json>>;
15
+ exists(id: Id, options?: RouteOptions): Promise<boolean>;
16
+ add(item: Json, options?: RouteOptions): Promise<Json>;
17
+ filter(options?: RouteOptions): Promise<PageList<Json>>;
18
+ update(item: Json, options?: RouteOptions): Promise<Json>;
19
+ upsert(item: Json, options?: RouteOptions): Promise<Json>;
20
+ remove(id: Id, options?: RouteOptions): Promise<boolean>;
15
21
  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>;
22
+ postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>>;
20
23
  patch(uri: Uri, item: Json): Promise<Json>;
21
- upsert(item: Json): Promise<Json>;
22
24
  put(uri: Uri, item: Json): Promise<Json>;
23
- remove(id: Id): Promise<boolean>;
24
- delete(uri: Uri): Promise<boolean>;
25
+ delete(uri: Uri, options?: RouteOptions): Promise<boolean>;
25
26
  }
@@ -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":"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"}
@@ -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.18",
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.18",
35
35
  "@types/form-urlencoded": "^4.4.0",
36
36
  "@types/jsonwebtoken": "^8.5.9",
37
37
  "@types/luxon": "3.0.2",
@@ -1,81 +1,83 @@
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} 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 type RouteOptions = RequestOptions | FetchOptions;
6
+
7
+ export class RouteGateway extends Gateway<RouteOptions> {
8
+ constructor(readonly route: Func<Uri>, readonly routeId: Func<Uri>, readonly api: Api = new Api()) {
9
+ super();
10
+ }
11
+
12
+ get(uri: Uri, options?: RouteOptions): Promise<PageList<Json>> {
13
+ return this.api.get(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
14
+ total: r.body.data?.totalItems,
15
+ filters: r.body.data?.meta?.filters as Filter[],
16
+ }));
17
+ }
18
+
19
+ getOne(uri: Uri, options?: RouteOptions): Promise<Json | undefined> {
20
+ return this.get(uri, options).then(r => r.first());
21
+ }
22
+
23
+ all(options?: RouteOptions): Promise<PageList<Json>> {
24
+ return this.get(this.route(), options);
25
+ }
26
+
27
+ byId(id: Id, options?: RouteOptions): Promise<Json | undefined> {
28
+ return this.getOne(this.routeId().id(id));
29
+ }
30
+
31
+ search(q: JsonValue, options?: RouteOptions): Promise<PageList<Json>> {
32
+ return this.get(this.route().query(q), options);
33
+ }
34
+
35
+ exists(id: Id, options?: RouteOptions): Promise<boolean> {
36
+ return this.get(this.routeId().id(id))
37
+ .then(r => r.length === 1)
38
+ .catch(r => (HttpStatus.NotFound.equals(r.status) ? false : Promise.reject(r)));
39
+ }
40
+
41
+ add(item: Json, options?: RouteOptions): Promise<Json> {
42
+ return this.post(this.route(), item);
43
+ }
44
+
45
+ filter(options?: RouteOptions): Promise<PageList<Json>> {
46
+ return this.postSearch(this.route(), options);
47
+ }
48
+
49
+ update(item: Json, options?: RouteOptions): Promise<Json> {
50
+ return this.patch(this.routeId().id(item.id), item);
51
+ }
52
+
53
+ upsert(item: Json, options?: RouteOptions): Promise<Json> {
54
+ return this.put(this.routeId().id(item.id), item);
55
+ }
56
+
57
+ remove(id: Id, options?: RouteOptions): Promise<boolean> {
58
+ return this.delete(this.routeId().id(id));
59
+ }
60
+
61
+ post(uri: Uri, item?: Json): Promise<Json> {
62
+ return this.api.post(uri, item).then(r => r.body.data?.items.first() ?? {});
63
+ }
64
+
65
+ postSearch(uri: Uri, options?: RequestOptions | FetchOptions): Promise<PageList<Json>> {
66
+ return this.api.post(uri, options).then(r => toPageList<Json>(r.body.data?.items, toPageOptions(options) && {
67
+ total: r.body.data?.totalItems,
68
+ filters: r.body.data?.meta?.filters as Filter[],
69
+ }));
70
+ }
71
+
72
+ patch(uri: Uri, item: Json): Promise<Json> {
73
+ return this.api.patch(uri, item).then(r => r.body.data?.items.first() ?? {});
74
+ }
75
+
76
+ put(uri: Uri, item: Json): Promise<Json> {
77
+ return this.api.put(uri, item).then(r => r.body.data?.items.first() ?? {});
78
+ }
79
+
80
+ delete(uri: Uri, options?: RouteOptions): Promise<boolean> {
81
+ return this.api.delete(uri).then(() => true);
82
+ }
81
83
  }
@@ -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';