lemon-core 4.2.6 → 4.3.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 +1 -0
- package/dist/cores/lambda/index.d.ts +1 -0
- package/dist/cores/lambda/index.js +6 -3
- package/dist/cores/lambda/index.js.map +1 -1
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/cores/storage/proxy-storage-service.js +2 -1
- package/dist/cores/storage/proxy-storage-service.js.map +1 -1
- package/dist/extended/abstract-service.d.ts +4 -0
- package/dist/extended/abstract-service.js +4 -0
- 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 +141 -0
- package/dist/extended/cores/abstract-rest-apis.js +202 -0
- package/dist/extended/cores/abstract-rest-apis.js.map +1 -0
- package/dist/extended/cores/abstract-services.d.ts +810 -0
- package/dist/extended/cores/abstract-services.js +2181 -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 +129 -0
- package/dist/extended/cores/commons.js +185 -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 +236 -0
- package/dist/extended/cores/types.js +3 -0
- package/dist/extended/cores/types.js.map +1 -0
- package/dist/generated/field-registry.d.ts +4 -2
- package/dist/generated/field-registry.js +6 -2
- package/dist/generated/field-registry.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
* const $ctx = this.proxy.asNextContext(null, { domain: 'localhost' }); //WARN! asumme as internal call.
|
|
127
|
+
* const opts = { isProd: true }; //WARN! use the production data.
|
|
128
|
+
* const $api = {
|
|
129
|
+
* boards: $createApi<$boards.BoardView, $boards.BoardBody>($ctx, '//lemon-boards-api/boards', opts),
|
|
130
|
+
* posts: $createApi<$boards.PostView, $boards.PostBody>($ctx, '//lemon-boards-api/posts', opts),
|
|
131
|
+
* };
|
|
132
|
+
* const $board = await $api.boards.get(boardId);
|
|
133
|
+
* const $res = await $api.posts.list({ boardId });
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare const $createApi: <View extends object = object, Body = View, Model = View>($context: NextContext, endpoint: string, options?: {
|
|
137
|
+
reversor?: Reversable<Model, View, Body>;
|
|
138
|
+
isProd?: boolean;
|
|
139
|
+
isDummy?: boolean;
|
|
140
|
+
initialNo?: number;
|
|
141
|
+
}) => RestAPI<View, Body, Model>;
|
|
@@ -0,0 +1,202 @@
|
|
|
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
|
+
* const $ctx = this.proxy.asNextContext(null, { domain: 'localhost' }); //WARN! asumme as internal call.
|
|
186
|
+
* const opts = { isProd: true }; //WARN! use the production data.
|
|
187
|
+
* const $api = {
|
|
188
|
+
* boards: $createApi<$boards.BoardView, $boards.BoardBody>($ctx, '//lemon-boards-api/boards', opts),
|
|
189
|
+
* posts: $createApi<$boards.PostView, $boards.PostBody>($ctx, '//lemon-boards-api/posts', opts),
|
|
190
|
+
* };
|
|
191
|
+
* const $board = await $api.boards.get(boardId);
|
|
192
|
+
* const $res = await $api.posts.list({ boardId });
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
const $createApi = ($context, endpoint, options) => {
|
|
196
|
+
const reversor = options?.reversor;
|
|
197
|
+
if (options?.isDummy)
|
|
198
|
+
return new DummyRestAPI($context, endpoint, reversor, options?.initialNo);
|
|
199
|
+
return new RestAPI($context, endpoint, reversor, { isProd: options?.isProd });
|
|
200
|
+
};
|
|
201
|
+
exports.$createApi = $createApi;
|
|
202
|
+
//# 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":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,4CAA2C;AAE3C,uCAAwC;AAIxC;;;GAGG;AACH,MAAa,OAAO;IAEI;IACA;IACA;IACA;IAJpB,YACoB,OAAoB,EACpB,QAAgB,EAChB,SAAyC,EACzC,OAA8B;QAH9B,YAAO,GAAP,OAAO,CAAa;QACpB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAgC;QACzC,YAAO,GAAP,OAAO,CAAuB;IAC/C,CAAC;IAEJ,yBAAyB;IAClB,UAAU,CAAC,EAAW,EAAE,GAAY;QACvC,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GACT,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;YACjB,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,GAAG,EAAE;YACjC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACV,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;gBAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB,OAAO,IAAA,mBAAS,EAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,kDAAkD;IAClD,IAAW,QAAQ;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,iEAAiE;YACjE,OAAO;gBACH,OAAO,EAAE,CAAC,CAAO,EAAS,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAU,CAAA;gBAC9C,MAAM,EAAE,CAAC,CAAQ,EAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAU,CAAA;aAChD,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACT,KAAK,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC;IAEjD,yBAAyB;IAClB,IAAI,GAAG,CAA0B,KAAS,EAAE,EAAE,CACjD,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAA4B,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7E,yBAAyB;IAClB,IAAI,GAAG,CAAC,EAAU,EAAE,KAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAO,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjG,kCAAkC;IAC3B,MAAM,GAAG,CAAC,IAAU,EAAE,KAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAO,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrG,iCAAiC;IAC1B,MAAM,GAAG,CAAC,EAAU,EAAE,IAAU,EAAE,KAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAO,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/G,yBAAyB;IAClB,MAAM,GAAG,CAAC,EAAU,EAAE,KAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEtG,sBAAsB;IACf,OAAO,GAAG,CACb,MAAgG,EAChG,KAAc,EAChB,EAAE;QACA,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC,CAAC;IAEF,qBAAqB;IACd,MAAM,GAAG,CACZ,MAAgG,EAChG,KAAc,EAChB,EAAE;QACA,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxF,CAAC,CAAC;IAEF,sBAAsB;IACf,OAAO,GAAG,CAAU,MAA6E,EAAE,EAAE;QACxG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,CAAI,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF;;OAEG;IACI,GAAG,GAAG,KAAK,EAAE,EAAU,EAAE,KAAY,EAAkB,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF;;OAEG;IACI,GAAG,GAAG,KAAK,EAAE,EAAU,EAAE,SAAmB,EAAkB,EAAE;QACnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACvC,IAAI,SAAS;gBAAE,MAAM,CAAC,CAAC;YACvB,OAAO,IAAY,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF;;OAEG;IACI,GAAG,GAAG,KAAK,EAAE,KAAY,EAAkB,EAAE;QAChD,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF;;OAEG;IACI,GAAG,GAAG,KAAK,EAAE,EAAU,EAAkB,EAAE;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,IAAA,qBAAW,EAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;CACL;AApHD,0BAoHC;AAED;;;GAGG;AACH,MAAa,YAAoD,SAAQ,OAAO;IAExD;IACA;IACA;IACT;IAJX,YACoB,OAAoB,EACpB,QAAgB,EAChB,SAAyC,EAClD,YAAoB,KAAK;QAEhC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QALpB,YAAO,GAAP,OAAO,CAAa;QACpB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAgC;QAClD,cAAS,GAAT,SAAS,CAAgB;IAGpC,CAAC;IAED,gBAAgB;IACT,KAAK,GAAG,GAAG,EAAE,CAAC,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC;IAEvD,4BAA4B;IAClB,IAAI,GAA2B,EAAE,CAAC;IAErC,IAAI,GAAG,KAAK,EAAE,EAAU,EAAE,KAAW,EAAiB,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEK,MAAM,GAAG,KAAK,EAAE,IAAS,EAAE,KAAW,EAAiB,EAAE;QAC5D,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEK,MAAM,GAAG,KAAK,EAAE,EAAU,EAAE,IAAS,EAAE,KAAW,EAAiB,EAAE;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAS,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEK,MAAM,GAAG,KAAK,EAAE,EAAU,EAAE,KAAW,EAAiB,EAAE;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;CACL;AA3CD,oCA2CC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,UAAU,GAAG,CACtB,QAAqB,EACrB,QAAgB,EAChB,OAKC,EACyB,EAAE;IAC5B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,IAAI,OAAO,EAAE,OAAO;QAAE,OAAO,IAAI,YAAY,CAAoB,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACnH,OAAO,IAAI,OAAO,CAAoB,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACrG,CAAC,CAAC;AAbW,QAAA,UAAU,cAarB"}
|