@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.
- package/dist/http/NoRequestStore.d.ts +6 -0
- package/dist/http/NoRequestStore.js +10 -0
- package/dist/http/NoRequestStore.js.map +1 -0
- package/dist/services/Api.d.ts +8 -7
- package/dist/services/Api.js +31 -4
- package/dist/services/Api.js.map +1 -1
- package/dist/services/RouteGateway.d.ts +16 -16
- package/dist/services/RouteGateway.js +18 -18
- package/dist/services/RouteGateway.js.map +1 -1
- package/dist/types/Cache.d.ts +10 -0
- package/dist/types/Cache.js +3 -0
- package/dist/types/Cache.js.map +1 -0
- package/dist/types/Gateway.d.ts +12 -10
- package/dist/types/Gateway.js +5 -5
- package/dist/types/Gateway.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -2
- package/src/http/NoRequestStore.ts +9 -0
- package/src/services/Api.ts +76 -46
- package/src/services/RouteGateway.ts +80 -80
- package/src/types/Cache.ts +13 -0
- package/src/types/Gateway.ts +14 -10
- package/src/types/index.ts +1 -0
|
@@ -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"}
|
package/dist/services/Api.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
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?:
|
|
7
|
-
post(uri: Uri, body?: unknown, options?:
|
|
8
|
-
put(uri: Uri, body?: unknown, options?:
|
|
9
|
-
patch(uri: Uri, body?: unknown, options?:
|
|
10
|
-
delete(uri: Uri, options?:
|
|
11
|
-
options(verb: HttpVerb, options?:
|
|
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;
|
package/dist/services/Api.js
CHANGED
|
@@ -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({
|
|
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({
|
|
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({
|
|
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({
|
|
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;
|
package/dist/services/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/services/Api.ts"],"names":[],"mappings":";;;AACA,
|
|
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,
|
|
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?:
|
|
10
|
-
getOne(uri: Uri, options?:
|
|
11
|
-
all(options?:
|
|
12
|
-
byId(id: Id): Promise<Json | undefined>;
|
|
13
|
-
search(q: JsonValue, options?:
|
|
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 |
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;AAAA,+
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../src/types/Cache.ts"],"names":[],"mappings":""}
|
package/dist/types/Gateway.d.ts
CHANGED
|
@@ -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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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?:
|
|
11
|
-
filter(options?:
|
|
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
|
}
|
package/dist/types/Gateway.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/types/index.d.ts
CHANGED
package/dist/types/index.js
CHANGED
|
@@ -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);
|
package/dist/types/index.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
+
}
|
package/src/services/Api.ts
CHANGED
|
@@ -1,51 +1,81 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
transform?: (r: any) => any,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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 {
|
|
2
|
-
import { Filter, Func, Gateway, Id, Json, JsonValue, PageList,
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export class RouteGateway extends Gateway {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
+
|
package/src/types/Gateway.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
-
|
|
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?:
|
|
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?:
|
|
29
|
+
search(q: JsonValue, options?: Options): Promise<PageList<Json>> {
|
|
26
30
|
return reject(Exception.IsNotImplemented);
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
filter(options?:
|
|
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
|
}
|