lemon-core 4.2.7 → 5.0.0
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/README.md +128 -2
- package/dist/common/lemon-error.d.ts +34 -0
- package/dist/common/lemon-error.js +52 -0
- package/dist/common/lemon-error.js.map +1 -0
- package/dist/controllers/general-api-controller.d.ts +7 -0
- package/dist/controllers/general-api-controller.js +7 -0
- package/dist/controllers/general-api-controller.js.map +1 -1
- package/dist/cores/api/api-service.js +10 -43
- package/dist/cores/api/api-service.js.map +1 -1
- package/dist/cores/aws/aws-kms-service.d.ts +13 -5
- package/dist/cores/aws/aws-kms-service.js +23 -9
- package/dist/cores/aws/aws-kms-service.js.map +1 -1
- package/dist/cores/aws/aws-s3-service.d.ts +30 -4
- package/dist/cores/aws/aws-s3-service.js +35 -15
- package/dist/cores/aws/aws-s3-service.js.map +1 -1
- package/dist/cores/aws/aws-sns-service.js +59 -9
- package/dist/cores/aws/aws-sns-service.js.map +1 -1
- package/dist/cores/aws/aws-sqs-service.d.ts +1 -1
- package/dist/cores/aws/aws-sqs-service.js +54 -12
- package/dist/cores/aws/aws-sqs-service.js.map +1 -1
- package/dist/cores/cache/cache-service.d.ts +10 -9
- package/dist/cores/cache/cache-service.js +9 -346
- package/dist/cores/cache/cache-service.js.map +1 -1
- package/dist/cores/config/config-service.d.ts +3 -15
- package/dist/cores/config/config-service.js +5 -34
- package/dist/cores/config/config-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-query-service.js +42 -2
- package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-scan-service.js +42 -2
- package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-service.d.ts +45 -14
- package/dist/cores/dynamo/dynamo-service.js +48 -21
- package/dist/cores/dynamo/dynamo-service.js.map +1 -1
- package/dist/cores/dynamo/tools/expressions.js +32 -22
- package/dist/cores/dynamo/tools/expressions.js.map +1 -1
- package/dist/cores/dynamo/tools/lang.d.ts +30 -0
- package/dist/cores/dynamo/tools/lang.js +75 -0
- package/dist/cores/dynamo/tools/lang.js.map +1 -0
- package/dist/cores/dynamo/tools/query.js +20 -21
- package/dist/cores/dynamo/tools/query.js.map +1 -1
- package/dist/cores/dynamo/tools/scan.js +15 -16
- package/dist/cores/dynamo/tools/scan.js.map +1 -1
- package/dist/cores/dynamo/tools/serializer.js +40 -38
- package/dist/cores/dynamo/tools/serializer.js.map +1 -1
- package/dist/cores/dynamo/tools/utils.d.ts +6 -2
- package/dist/cores/dynamo/tools/utils.js +11 -8
- package/dist/cores/dynamo/tools/utils.js.map +1 -1
- package/dist/cores/elastic/elastic6-query-service.d.ts +1 -104
- package/dist/cores/elastic/elastic6-query-service.js +15 -489
- package/dist/cores/elastic/elastic6-query-service.js.map +1 -1
- package/dist/cores/elastic/elastic6-service.d.ts +1 -482
- package/dist/cores/elastic/elastic6-service.js +15 -1153
- package/dist/cores/elastic/elastic6-service.js.map +1 -1
- package/dist/cores/elastic/index.d.ts +2 -2
- package/dist/cores/elastic/index.js +3 -2
- package/dist/cores/elastic/index.js.map +1 -1
- package/dist/cores/elastic/os2-query-service.d.ts +104 -0
- package/dist/cores/elastic/os2-query-service.js +495 -0
- package/dist/cores/elastic/os2-query-service.js.map +1 -0
- package/dist/cores/elastic/os2-service.d.ts +372 -0
- package/dist/cores/elastic/os2-service.js +943 -0
- package/dist/cores/elastic/os2-service.js.map +1 -0
- package/dist/cores/index.d.ts +6 -1
- package/dist/cores/index.js +9 -2
- package/dist/cores/index.js.map +1 -1
- package/dist/cores/lambda/index.js +2 -1
- package/dist/cores/lambda/index.js.map +1 -1
- package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-cron-handler.js +5 -1
- package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +5 -4
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js +18 -5
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-handler.d.ts +22 -2
- package/dist/cores/lambda/lambda-handler.js +85 -23
- package/dist/cores/lambda/lambda-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sns-handler.js +5 -0
- package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sqs-handler.js +20 -5
- package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-web-handler.d.ts +10 -0
- package/dist/cores/lambda/lambda-web-handler.js +107 -41
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/cores/protocol/aws-lambda-helper.js +58 -11
- package/dist/cores/protocol/aws-lambda-helper.js.map +1 -1
- package/dist/cores/protocol/index.js +3 -0
- package/dist/cores/protocol/index.js.map +1 -1
- package/dist/cores/protocol/protocol-service.d.ts +26 -5
- package/dist/cores/protocol/protocol-service.js +42 -12
- package/dist/cores/protocol/protocol-service.js.map +1 -1
- package/dist/cores/protocol/protocol-sign.d.ts +72 -0
- package/dist/cores/protocol/protocol-sign.js +194 -0
- package/dist/cores/protocol/protocol-sign.js.map +1 -0
- package/dist/cores/storage/index.d.ts +0 -1
- package/dist/cores/storage/index.js +0 -1
- package/dist/cores/storage/index.js.map +1 -1
- package/dist/cores/storage/model-fields.d.ts +7 -0
- package/dist/cores/storage/model-fields.js +21 -0
- package/dist/cores/storage/model-fields.js.map +1 -0
- package/dist/cores/storage/model-manager.d.ts +3 -2
- package/dist/cores/storage/model-manager.js +7 -3
- package/dist/cores/storage/model-manager.js.map +1 -1
- package/dist/engine/builder.js +20 -2
- package/dist/engine/builder.js.map +1 -1
- package/dist/engine/engine.d.ts +2 -2
- package/dist/engine/engine.js +4 -4
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/utilities.d.ts +11 -12
- package/dist/engine/utilities.js +30 -82
- package/dist/engine/utilities.js.map +1 -1
- package/dist/environ.d.ts +0 -6
- package/dist/environ.js +1 -12
- package/dist/environ.js.map +1 -1
- package/dist/esm/index.mjs +140 -0
- package/dist/esm/testing.mjs +12 -0
- package/dist/extended/abstract-service.d.ts +48 -139
- package/dist/extended/abstract-service.js +46 -382
- package/dist/extended/abstract-service.js.map +1 -1
- package/dist/extended/cores/abstract-controllers.d.ts +170 -0
- package/dist/extended/cores/abstract-controllers.js +533 -0
- package/dist/extended/cores/abstract-controllers.js.map +1 -0
- package/dist/extended/cores/abstract-rest-apis.d.ts +142 -0
- package/dist/extended/cores/abstract-rest-apis.js +203 -0
- package/dist/extended/cores/abstract-rest-apis.js.map +1 -0
- package/dist/extended/cores/abstract-services.d.ts +771 -0
- package/dist/extended/cores/abstract-services.js +2042 -0
- package/dist/extended/cores/abstract-services.js.map +1 -0
- package/dist/extended/cores/browser-cache.d.ts +2 -0
- package/dist/extended/cores/browser-cache.js +34 -0
- package/dist/extended/cores/browser-cache.js.map +1 -0
- package/dist/extended/cores/commons.d.ts +20 -0
- package/dist/extended/cores/commons.js +31 -0
- package/dist/extended/cores/commons.js.map +1 -0
- package/dist/extended/cores/index.d.ts +15 -0
- package/dist/extended/cores/index.js +32 -0
- package/dist/extended/cores/index.js.map +1 -0
- package/dist/extended/cores/types.d.ts +14 -0
- package/dist/extended/cores/types.js +31 -0
- package/dist/extended/cores/types.js.map +1 -0
- package/dist/helpers/helpers.d.ts +10 -5
- package/dist/helpers/helpers.js +46 -58
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/types.d.ts +22 -10
- package/dist/index.d.ts +4 -0
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/http-fetch.d.ts +54 -0
- package/dist/lib/http-fetch.js +133 -0
- package/dist/lib/http-fetch.js.map +1 -0
- package/dist/lib/lazy.d.ts +22 -0
- package/dist/lib/lazy.js +54 -0
- package/dist/lib/lazy.js.map +1 -0
- package/dist/lib/perf.d.ts +35 -0
- package/dist/lib/perf.js +52 -0
- package/dist/lib/perf.js.map +1 -0
- package/dist/tools/tools.d.ts +15 -3
- package/dist/tools/tools.js +21 -4
- package/dist/tools/tools.js.map +1 -1
- package/package.json +96 -39
- package/dist/cores/storage/redis-storage-service.d.ts +0 -183
- package/dist/cores/storage/redis-storage-service.js +0 -377
- package/dist/cores/storage/redis-storage-service.js.map +0 -1
- package/dist/generated/field-registry.d.ts +0 -10
- package/dist/generated/field-registry.js +0 -17
- package/dist/generated/field-registry.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `abstract-rest-api.ts`
|
|
3
|
+
* - support the rest-api pattern w/ remote service.
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* @author Steve <steve@lemoncloud.io>
|
|
7
|
+
* @date 2022-09-21 optimized w/ `abstract-rest-apis`
|
|
8
|
+
* @date 2023-09-18 optimized `asProtocol()` w/ public.
|
|
9
|
+
* @date 2025-02-26 optimized `$createApi` w/ reversor.
|
|
10
|
+
*
|
|
11
|
+
* @copyright (C) 2022 LemonCloud Co Ltd. - All Rights Reserved.
|
|
12
|
+
* @origin `@lemoncloud/lemon-templates-api/cores`
|
|
13
|
+
*/
|
|
14
|
+
import { Reversable, NextContext } from 'lemon-model';
|
|
15
|
+
import { PaginatedListResult, PaginateParam } from './types';
|
|
16
|
+
export { Reversable };
|
|
17
|
+
/**
|
|
18
|
+
* support rest-api from remote service.
|
|
19
|
+
* - useful to use the common CRUD RestAPI.
|
|
20
|
+
*/
|
|
21
|
+
export declare class RestAPI<View extends object = any, Body = View, Model = View> {
|
|
22
|
+
readonly context: NextContext;
|
|
23
|
+
readonly endpoint: string;
|
|
24
|
+
readonly _reverser?: Reversable<Model, View, Body>;
|
|
25
|
+
readonly options?: {
|
|
26
|
+
isProd?: boolean;
|
|
27
|
+
};
|
|
28
|
+
constructor(context: NextContext, endpoint: string, _reverser?: Reversable<Model, View, Body>, options?: {
|
|
29
|
+
isProd?: boolean;
|
|
30
|
+
});
|
|
31
|
+
/** translate protocol */
|
|
32
|
+
asProtocol(id?: string, cmd?: string): {
|
|
33
|
+
hello: () => string;
|
|
34
|
+
asTargetUrl: () => string;
|
|
35
|
+
execute: <T = any>(param?: any, body?: any, mode?: string) => Promise<T>;
|
|
36
|
+
enqueue: <T = any>(param?: any, body?: any, mode?: string, callback?: string, delaySeconds?: number) => Promise<string>;
|
|
37
|
+
notify: (param?: any, body?: any, mode?: string, callback?: string) => Promise<string>;
|
|
38
|
+
};
|
|
39
|
+
/** get the current transform (may throw error) */
|
|
40
|
+
get reverser(): Reversable<Model, View, Body>;
|
|
41
|
+
/** say hello */
|
|
42
|
+
hello: () => string;
|
|
43
|
+
/** list model as view */
|
|
44
|
+
list: <T extends PaginateParam>(param?: T) => Promise<PaginatedListResult<View, string>>;
|
|
45
|
+
/** read model as view */
|
|
46
|
+
read: (id: string, param?: any) => Promise<View>;
|
|
47
|
+
/** insert model w/ body w/o id */
|
|
48
|
+
insert: (body: Body, param?: any) => Promise<View>;
|
|
49
|
+
/** update model w/ body by id */
|
|
50
|
+
update: (id: string, body: Body, param?: any) => Promise<View>;
|
|
51
|
+
/** delete model by id */
|
|
52
|
+
delete: (id: string, param?: any) => Promise<View>;
|
|
53
|
+
/** enqueue vis SQS */
|
|
54
|
+
enqueue: (params: {
|
|
55
|
+
id?: string;
|
|
56
|
+
cmd?: string;
|
|
57
|
+
mode?: string;
|
|
58
|
+
param?: any;
|
|
59
|
+
body?: any;
|
|
60
|
+
callback?: string;
|
|
61
|
+
}, delay?: number) => Promise<string>;
|
|
62
|
+
/** notify vis SNS */
|
|
63
|
+
notify: (params: {
|
|
64
|
+
id?: string;
|
|
65
|
+
cmd?: string;
|
|
66
|
+
mode?: string;
|
|
67
|
+
param?: any;
|
|
68
|
+
body?: any;
|
|
69
|
+
callback?: string;
|
|
70
|
+
}, delay?: number) => Promise<string>;
|
|
71
|
+
/** execute vis API */
|
|
72
|
+
execute: <T = any>(params: {
|
|
73
|
+
id?: string;
|
|
74
|
+
cmd?: string;
|
|
75
|
+
mode?: string;
|
|
76
|
+
param?: any;
|
|
77
|
+
body?: any;
|
|
78
|
+
}) => Promise<T>;
|
|
79
|
+
/**
|
|
80
|
+
* set by model.
|
|
81
|
+
*/
|
|
82
|
+
set: (id: string, model: Model) => Promise<Model>;
|
|
83
|
+
/**
|
|
84
|
+
* get by id
|
|
85
|
+
*/
|
|
86
|
+
get: (id: string, throwable?: boolean) => Promise<Model>;
|
|
87
|
+
/**
|
|
88
|
+
* make new (w/ auto id)
|
|
89
|
+
*/
|
|
90
|
+
new: (model: Model) => Promise<Model>;
|
|
91
|
+
/**
|
|
92
|
+
* delete (w/ auto id)
|
|
93
|
+
*/
|
|
94
|
+
del: (id: string) => Promise<Model>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* rest-api for dummy
|
|
98
|
+
* - save model in memory.
|
|
99
|
+
*/
|
|
100
|
+
export declare class DummyRestAPI<View = any, Body = View, Model = View> extends RestAPI {
|
|
101
|
+
readonly context: NextContext;
|
|
102
|
+
readonly endpoint: string;
|
|
103
|
+
readonly _reverser?: Reversable<Model, View, Body>;
|
|
104
|
+
initialNo: number;
|
|
105
|
+
constructor(context: NextContext, endpoint: string, _reverser?: Reversable<Model, View, Body>, initialNo?: number);
|
|
106
|
+
/** say hello */
|
|
107
|
+
hello: () => string;
|
|
108
|
+
/** internal dummy memory */
|
|
109
|
+
protected $buf: {
|
|
110
|
+
[key: string]: any;
|
|
111
|
+
};
|
|
112
|
+
read: (id: string, param?: any) => Promise<View>;
|
|
113
|
+
insert: (body: any, param?: any) => Promise<View>;
|
|
114
|
+
update: (id: string, body: any, param?: any) => Promise<View>;
|
|
115
|
+
delete: (id: string, param?: any) => Promise<View>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* factory to create `rest-api` instance for both real and dummy.
|
|
119
|
+
*
|
|
120
|
+
* - see the example below:
|
|
121
|
+
*
|
|
122
|
+
* ```ts
|
|
123
|
+
* import * as $boards from '@lemoncloud/lemon-boards-api'; //INFO! import the type information.
|
|
124
|
+
* ...
|
|
125
|
+
* const boardId = '100001'; //NOTE! sample board-id.
|
|
126
|
+
* //WARN! v5: `domain: 'localhost'` grants nothing — claim the role explicitly (the call is signed, B5 § 6.3).
|
|
127
|
+
* const $ctx = this.proxy.asNextContext(null, { identity: { ...identity, roles: [...(identity?.roles ?? []), 'admin'] } });
|
|
128
|
+
* const opts = { isProd: true }; //WARN! use the production data.
|
|
129
|
+
* const $api = {
|
|
130
|
+
* boards: $createApi<$boards.BoardView, $boards.BoardBody>($ctx, '//lemon-boards-api/boards', opts),
|
|
131
|
+
* posts: $createApi<$boards.PostView, $boards.PostBody>($ctx, '//lemon-boards-api/posts', opts),
|
|
132
|
+
* };
|
|
133
|
+
* const $board = await $api.boards.get(boardId);
|
|
134
|
+
* const $res = await $api.posts.list({ boardId });
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare const $createApi: <View extends object = object, Body = View, Model = View>($context: NextContext, endpoint: string, options?: {
|
|
138
|
+
reversor?: Reversable<Model, View, Body>;
|
|
139
|
+
isProd?: boolean;
|
|
140
|
+
isDummy?: boolean;
|
|
141
|
+
initialNo?: number;
|
|
142
|
+
}) => RestAPI<View, Body, Model>;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `abstract-rest-api.ts`
|
|
4
|
+
* - support the rest-api pattern w/ remote service.
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
* @author Steve <steve@lemoncloud.io>
|
|
8
|
+
* @date 2022-09-21 optimized w/ `abstract-rest-apis`
|
|
9
|
+
* @date 2023-09-18 optimized `asProtocol()` w/ public.
|
|
10
|
+
* @date 2025-02-26 optimized `$createApi` w/ reversor.
|
|
11
|
+
*
|
|
12
|
+
* @copyright (C) 2022 LemonCloud Co Ltd. - All Rights Reserved.
|
|
13
|
+
* @origin `@lemoncloud/lemon-templates-api/cores`
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.$createApi = exports.DummyRestAPI = exports.RestAPI = void 0;
|
|
17
|
+
const helpers_1 = require("../../helpers/");
|
|
18
|
+
const commons_1 = require("./commons");
|
|
19
|
+
/**
|
|
20
|
+
* support rest-api from remote service.
|
|
21
|
+
* - useful to use the common CRUD RestAPI.
|
|
22
|
+
*/
|
|
23
|
+
class RestAPI {
|
|
24
|
+
context;
|
|
25
|
+
endpoint;
|
|
26
|
+
_reverser;
|
|
27
|
+
options;
|
|
28
|
+
constructor(context, endpoint, _reverser, options) {
|
|
29
|
+
this.context = context;
|
|
30
|
+
this.endpoint = endpoint;
|
|
31
|
+
this._reverser = _reverser;
|
|
32
|
+
this.options = options;
|
|
33
|
+
}
|
|
34
|
+
/** translate protocol */
|
|
35
|
+
asProtocol(id, cmd) {
|
|
36
|
+
const _nul = (v) => v === undefined || v === null;
|
|
37
|
+
const _has = (v) => !_nul(v);
|
|
38
|
+
const service = _has(id) && _has(cmd)
|
|
39
|
+
? `${this.endpoint}/${id}/${cmd}`
|
|
40
|
+
: _has(id)
|
|
41
|
+
? `${this.endpoint}/${id}`
|
|
42
|
+
: this.endpoint;
|
|
43
|
+
return (0, helpers_1.$protocol)(this.context, service, { isProd: this.options?.isProd });
|
|
44
|
+
}
|
|
45
|
+
/** get the current transform (may throw error) */
|
|
46
|
+
get reverser() {
|
|
47
|
+
if (!this._reverser) {
|
|
48
|
+
// throw new Error(`.transform is required - setup before use!`);
|
|
49
|
+
return {
|
|
50
|
+
asModel: (V) => ({ ...V }),
|
|
51
|
+
asBody: (M) => ({ ...M }),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return this._reverser;
|
|
55
|
+
}
|
|
56
|
+
/** say hello */
|
|
57
|
+
hello = () => `rest-api:${this.endpoint}`;
|
|
58
|
+
/** list model as view */
|
|
59
|
+
list = (param) => this.asProtocol().execute(param, null, 'GET');
|
|
60
|
+
/** read model as view */
|
|
61
|
+
read = (id, param) => this.asProtocol(id).execute(param, null, 'GET');
|
|
62
|
+
/** insert model w/ body w/o id */
|
|
63
|
+
insert = (body, param) => this.asProtocol('0').execute(param, body, 'POST');
|
|
64
|
+
/** update model w/ body by id */
|
|
65
|
+
update = (id, body, param) => this.asProtocol(id).execute(param, body, 'PUT');
|
|
66
|
+
/** delete model by id */
|
|
67
|
+
delete = (id, param) => this.asProtocol(id).execute(param, null, 'DELETE');
|
|
68
|
+
/** enqueue vis SQS */
|
|
69
|
+
enqueue = (params, delay) => {
|
|
70
|
+
const id = params?.id ?? '';
|
|
71
|
+
const cmd = params?.cmd ?? null;
|
|
72
|
+
const mode = params?.mode || 'POST';
|
|
73
|
+
const callback = params?.callback;
|
|
74
|
+
return this.asProtocol(id, cmd).enqueue(params?.param, params?.body, mode, callback, delay);
|
|
75
|
+
};
|
|
76
|
+
/** notify vis SNS */
|
|
77
|
+
notify = (params, delay) => {
|
|
78
|
+
const id = params?.id ?? '';
|
|
79
|
+
const cmd = params?.cmd ?? null;
|
|
80
|
+
const mode = params?.mode || 'POST';
|
|
81
|
+
const callback = params?.callback;
|
|
82
|
+
return this.asProtocol(id, cmd).notify(params?.param, params?.body, mode, callback);
|
|
83
|
+
};
|
|
84
|
+
/** execute vis API */
|
|
85
|
+
execute = (params) => {
|
|
86
|
+
const id = params?.id ?? '';
|
|
87
|
+
const cmd = params?.cmd ?? null;
|
|
88
|
+
const mode = params?.mode || 'POST';
|
|
89
|
+
return this.asProtocol(id, cmd).execute(params?.param, params?.body, mode);
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* set by model.
|
|
93
|
+
*/
|
|
94
|
+
set = async (id, model) => {
|
|
95
|
+
const body = (0, commons_1.onlyDefined)(this.reverser.asBody(model));
|
|
96
|
+
const saved = await this.update(id, body);
|
|
97
|
+
return (0, commons_1.onlyDefined)(this.reverser.asModel(saved));
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* get by id
|
|
101
|
+
*/
|
|
102
|
+
get = async (id, throwable) => {
|
|
103
|
+
const view = await this.read(id).catch(e => {
|
|
104
|
+
if (throwable)
|
|
105
|
+
throw e;
|
|
106
|
+
return null;
|
|
107
|
+
});
|
|
108
|
+
return (0, commons_1.onlyDefined)(this.reverser.asModel(view));
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* make new (w/ auto id)
|
|
112
|
+
*/
|
|
113
|
+
new = async (model) => {
|
|
114
|
+
const body = (0, commons_1.onlyDefined)(this.reverser.asBody(model));
|
|
115
|
+
const saved = await this.insert(body);
|
|
116
|
+
return (0, commons_1.onlyDefined)(this.reverser.asModel(saved));
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* delete (w/ auto id)
|
|
120
|
+
*/
|
|
121
|
+
del = async (id) => {
|
|
122
|
+
const saved = await this.delete(id);
|
|
123
|
+
return (0, commons_1.onlyDefined)(this.reverser.asModel(saved));
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
exports.RestAPI = RestAPI;
|
|
127
|
+
/**
|
|
128
|
+
* rest-api for dummy
|
|
129
|
+
* - save model in memory.
|
|
130
|
+
*/
|
|
131
|
+
class DummyRestAPI extends RestAPI {
|
|
132
|
+
context;
|
|
133
|
+
endpoint;
|
|
134
|
+
_reverser;
|
|
135
|
+
initialNo;
|
|
136
|
+
constructor(context, endpoint, _reverser, initialNo = 80000) {
|
|
137
|
+
super(context, endpoint, _reverser);
|
|
138
|
+
this.context = context;
|
|
139
|
+
this.endpoint = endpoint;
|
|
140
|
+
this._reverser = _reverser;
|
|
141
|
+
this.initialNo = initialNo;
|
|
142
|
+
}
|
|
143
|
+
/** say hello */
|
|
144
|
+
hello = () => `dummy-rest-api:${this.endpoint}`;
|
|
145
|
+
/** internal dummy memory */
|
|
146
|
+
$buf = {};
|
|
147
|
+
read = async (id, param) => {
|
|
148
|
+
const view = this.$buf[id];
|
|
149
|
+
if (view === undefined)
|
|
150
|
+
throw new Error(`404 NOT FOUND - dummy-id:${id}`);
|
|
151
|
+
return view ? { ...view } : view;
|
|
152
|
+
};
|
|
153
|
+
insert = async (body, param) => {
|
|
154
|
+
const id = `${++this.initialNo}`;
|
|
155
|
+
const view = { ...body, id };
|
|
156
|
+
this.$buf[id] = view;
|
|
157
|
+
return view ? { ...view } : view;
|
|
158
|
+
};
|
|
159
|
+
update = async (id, body, param) => {
|
|
160
|
+
const $org = this.$buf[id];
|
|
161
|
+
if ($org === undefined)
|
|
162
|
+
throw new Error(`404 NOT FOUND - dummy-id:${id}`);
|
|
163
|
+
const view = { ...$org, ...body };
|
|
164
|
+
this.$buf[id] = view;
|
|
165
|
+
return view ? { ...view } : view;
|
|
166
|
+
};
|
|
167
|
+
delete = async (id, param) => {
|
|
168
|
+
const view = this.$buf[id];
|
|
169
|
+
if (view === undefined)
|
|
170
|
+
throw new Error(`404 NOT FOUND - dummy-id:${id}`);
|
|
171
|
+
delete this.$buf[id];
|
|
172
|
+
return view ? { ...view } : view;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
exports.DummyRestAPI = DummyRestAPI;
|
|
176
|
+
/**
|
|
177
|
+
* factory to create `rest-api` instance for both real and dummy.
|
|
178
|
+
*
|
|
179
|
+
* - see the example below:
|
|
180
|
+
*
|
|
181
|
+
* ```ts
|
|
182
|
+
* import * as $boards from '@lemoncloud/lemon-boards-api'; //INFO! import the type information.
|
|
183
|
+
* ...
|
|
184
|
+
* const boardId = '100001'; //NOTE! sample board-id.
|
|
185
|
+
* //WARN! v5: `domain: 'localhost'` grants nothing — claim the role explicitly (the call is signed, B5 § 6.3).
|
|
186
|
+
* const $ctx = this.proxy.asNextContext(null, { identity: { ...identity, roles: [...(identity?.roles ?? []), 'admin'] } });
|
|
187
|
+
* const opts = { isProd: true }; //WARN! use the production data.
|
|
188
|
+
* const $api = {
|
|
189
|
+
* boards: $createApi<$boards.BoardView, $boards.BoardBody>($ctx, '//lemon-boards-api/boards', opts),
|
|
190
|
+
* posts: $createApi<$boards.PostView, $boards.PostBody>($ctx, '//lemon-boards-api/posts', opts),
|
|
191
|
+
* };
|
|
192
|
+
* const $board = await $api.boards.get(boardId);
|
|
193
|
+
* const $res = await $api.posts.list({ boardId });
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
const $createApi = ($context, endpoint, options) => {
|
|
197
|
+
const reversor = options?.reversor;
|
|
198
|
+
if (options?.isDummy)
|
|
199
|
+
return new DummyRestAPI($context, endpoint, reversor, options?.initialNo);
|
|
200
|
+
return new RestAPI($context, endpoint, reversor, { isProd: options?.isProd });
|
|
201
|
+
};
|
|
202
|
+
exports.$createApi = $createApi;
|
|
203
|
+
//# sourceMappingURL=abstract-rest-apis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-rest-apis.js","sourceRoot":"","sources":["../../../src/extended/cores/abstract-rest-apis.ts"],"names":[],"mappings":"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"}
|