@hyperttp/core 1.3.1 → 1.4.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/Core/HyperCore.d.ts +135 -77
- package/Core/HyperCore.d.ts.map +1 -1
- package/Core/HyperCore.js +280 -246
- package/Core/HyperCore.js.map +1 -1
- package/README.md +169 -96
- package/package.json +14 -8
- package/transports/browser.d.ts +228 -0
- package/transports/browser.d.ts.map +1 -0
- package/transports/browser.js +451 -0
- package/transports/browser.js.map +1 -0
- package/transports/manager.d.ts +9 -85
- package/transports/manager.d.ts.map +1 -1
- package/transports/manager.js +152 -222
- package/transports/manager.js.map +1 -1
- package/transports/node.d.ts +4 -36
- package/transports/node.d.ts.map +1 -1
- package/transports/node.js +119 -159
- package/transports/node.js.map +1 -1
- package/utils/decompress.d.ts +16 -20
- package/utils/decompress.d.ts.map +1 -1
- package/utils/decompress.js +151 -60
- package/utils/decompress.js.map +1 -1
- package/utils/errors.d.ts +0 -10
- package/utils/errors.d.ts.map +1 -1
- package/utils/errors.js +1 -11
- package/utils/errors.js.map +1 -1
- package/utils/merge.d.ts +0 -3
- package/utils/merge.d.ts.map +1 -1
- package/utils/merge.js +12 -22
- package/utils/merge.js.map +1 -1
- package/utils/normalize.d.ts +40 -21
- package/utils/normalize.d.ts.map +1 -1
- package/utils/normalize.js +217 -138
- package/utils/normalize.js.map +1 -1
- package/utils/pipeline.d.ts +10 -30
- package/utils/pipeline.d.ts.map +1 -1
- package/utils/pipeline.js +44 -44
- package/utils/pipeline.js.map +1 -1
- package/utils/response.d.ts +105 -23
- package/utils/response.d.ts.map +1 -1
- package/utils/response.js +308 -38
- package/utils/response.js.map +1 -1
- package/utils/retryUtils.d.ts +2 -10
- package/utils/retryUtils.d.ts.map +1 -1
- package/utils/retryUtils.js +17 -21
- package/utils/retryUtils.js.map +1 -1
package/utils/pipeline.js
CHANGED
|
@@ -27,12 +27,8 @@ export function insertHookSorted(list, hook) {
|
|
|
27
27
|
list.splice(i, 0, hook);
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit
|
|
31
|
-
* @en Executes the pre-request pipeline. Supports short-circuiting
|
|
32
|
-
* @param hooks - Array of request hooks.
|
|
33
|
-
* @param req - Internal request object.
|
|
34
|
-
* @param ctx - Plugin context.
|
|
35
|
-
* @returns A response if short-circuited, null otherwise, or a promise.
|
|
30
|
+
* @ru Выполняет конвейер пред-запроса. Поддерживает short-circuit.
|
|
31
|
+
* @en Executes the pre-request pipeline. Supports short-circuiting.
|
|
36
32
|
*/
|
|
37
33
|
export function executeRequestPipeline(hooks, req, ctx) {
|
|
38
34
|
const len = hooks.length;
|
|
@@ -49,12 +45,8 @@ export function executeRequestPipeline(hooks, req, ctx) {
|
|
|
49
45
|
return null;
|
|
50
46
|
}
|
|
51
47
|
/**
|
|
52
|
-
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
53
|
-
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
54
|
-
* @param hooks - Array of response data hooks.
|
|
55
|
-
* @param res - Current transport response.
|
|
56
|
-
* @param ctx - Plugin context.
|
|
57
|
-
* @returns The (possibly transformed) transport response, either directly or wrapped in a promise.
|
|
48
|
+
* @ru Выполняет низкоуровневый конвейер трансформации сырых данных транспорта (фаза DATA).
|
|
49
|
+
* @en Executes low-level transport data transformation pipeline (DATA phase).
|
|
58
50
|
*/
|
|
59
51
|
export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
60
52
|
const len = hooks.length;
|
|
@@ -73,15 +65,8 @@ export function executeResponseDataPipeline(hooks, res, ctx) {
|
|
|
73
65
|
return currentRes;
|
|
74
66
|
}
|
|
75
67
|
/**
|
|
76
|
-
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы
|
|
77
|
-
* @en Executes the post-response pipeline. Split into mutators
|
|
78
|
-
* @param mutators - Hooks that mutate the response (executed sequentially).
|
|
79
|
-
* @param sideEffects - Hooks that run in background, errors are logged but do not break the main flow.
|
|
80
|
-
* @param res - HTTP response object.
|
|
81
|
-
* @param req - Internal request object.
|
|
82
|
-
* @param ctx - Plugin context.
|
|
83
|
-
* @param logger - Optional logger for side-effect errors.
|
|
84
|
-
* @returns A promise if any mutator returns a promise, otherwise void.
|
|
68
|
+
* @ru Выполняет конвейер пост-ответа. Разделен на мутаторы и сайд-эффекты.
|
|
69
|
+
* @en Executes the post-response pipeline. Split into mutators and side-effects.
|
|
85
70
|
*/
|
|
86
71
|
export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, logger) {
|
|
87
72
|
const seLen = sideEffects.length;
|
|
@@ -91,7 +76,7 @@ export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, lo
|
|
|
91
76
|
try {
|
|
92
77
|
const promise = effect.run(res, req, ctx);
|
|
93
78
|
if (promise instanceof Promise) {
|
|
94
|
-
promise
|
|
79
|
+
safelyAttachSideEffectCatch(promise, effect.name, logger);
|
|
95
80
|
}
|
|
96
81
|
}
|
|
97
82
|
catch (err) {
|
|
@@ -110,13 +95,8 @@ export function executeResponsePipeline(mutators, sideEffects, res, req, ctx, lo
|
|
|
110
95
|
}
|
|
111
96
|
}
|
|
112
97
|
/**
|
|
113
|
-
* @ru Выполняет конвейер перехвата ошибок.
|
|
114
|
-
* @en Executes the error interception pipeline.
|
|
115
|
-
* @param hooks - Array of error hooks.
|
|
116
|
-
* @param error - The error that occurred.
|
|
117
|
-
* @param req - Internal request object.
|
|
118
|
-
* @param ctx - Plugin context.
|
|
119
|
-
* @returns A response if recovered, null otherwise, or a promise.
|
|
98
|
+
* @ru Выполняет конвейер перехвата ошибок.
|
|
99
|
+
* @en Executes the error interception pipeline.
|
|
120
100
|
*/
|
|
121
101
|
export function executeErrorPipeline(hooks, error, req, ctx) {
|
|
122
102
|
const len = hooks.length;
|
|
@@ -138,9 +118,15 @@ async function executeRequestPipelineAsync(hooks, req, ctx, startIndex, initialP
|
|
|
138
118
|
return shortCircuit;
|
|
139
119
|
const len = hooks.length;
|
|
140
120
|
for (let i = startIndex + 1; i < len; i++) {
|
|
141
|
-
const res =
|
|
142
|
-
if (res
|
|
121
|
+
const res = hooks[i].run(req, ctx);
|
|
122
|
+
if (res instanceof Promise) {
|
|
123
|
+
const asyncRes = await res;
|
|
124
|
+
if (asyncRes != null)
|
|
125
|
+
return asyncRes;
|
|
126
|
+
}
|
|
127
|
+
else if (res != null) {
|
|
143
128
|
return res;
|
|
129
|
+
}
|
|
144
130
|
}
|
|
145
131
|
return null;
|
|
146
132
|
}
|
|
@@ -152,8 +138,14 @@ async function executeResponseDataPipelineAsync(hooks, ctx, startIndex, initialP
|
|
|
152
138
|
}
|
|
153
139
|
const len = hooks.length;
|
|
154
140
|
for (let i = startIndex + 1; i < len; i++) {
|
|
155
|
-
const result =
|
|
156
|
-
if (result
|
|
141
|
+
const result = hooks[i].run(currentRes, ctx);
|
|
142
|
+
if (result instanceof Promise) {
|
|
143
|
+
const asyncResult = await result;
|
|
144
|
+
if (asyncResult != null) {
|
|
145
|
+
currentRes = asyncResult;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (result != null) {
|
|
157
149
|
currentRes = result;
|
|
158
150
|
}
|
|
159
151
|
}
|
|
@@ -163,7 +155,10 @@ async function executeMutatorsAsync(mutators, res, req, ctx, startIndex, initial
|
|
|
163
155
|
await initialPromise;
|
|
164
156
|
const len = mutators.length;
|
|
165
157
|
for (let i = startIndex + 1; i < len; i++) {
|
|
166
|
-
|
|
158
|
+
const result = mutators[i].run(res, req, ctx);
|
|
159
|
+
if (result instanceof Promise) {
|
|
160
|
+
await result;
|
|
161
|
+
}
|
|
167
162
|
}
|
|
168
163
|
}
|
|
169
164
|
async function executeErrorPipelineAsync(hooks, error, req, ctx, startIndex, initialPromise) {
|
|
@@ -172,20 +167,25 @@ async function executeErrorPipelineAsync(hooks, error, req, ctx, startIndex, ini
|
|
|
172
167
|
return recovered;
|
|
173
168
|
const len = hooks.length;
|
|
174
169
|
for (let i = startIndex + 1; i < len; i++) {
|
|
175
|
-
const res =
|
|
176
|
-
if (res
|
|
170
|
+
const res = hooks[i].run(error, req, ctx);
|
|
171
|
+
if (res instanceof Promise) {
|
|
172
|
+
const asyncRes = await res;
|
|
173
|
+
if (asyncRes != null)
|
|
174
|
+
return asyncRes;
|
|
175
|
+
}
|
|
176
|
+
else if (res != null) {
|
|
177
177
|
return res;
|
|
178
|
+
}
|
|
178
179
|
}
|
|
179
180
|
return null;
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
* @param err - Caught error.
|
|
185
|
-
* @param hookName - Name of the hook that failed.
|
|
186
|
-
* @param logger - Optional logger.
|
|
187
|
-
*/
|
|
182
|
+
function safelyAttachSideEffectCatch(promise, hookName, logger) {
|
|
183
|
+
promise.catch((err) => handleSideEffectError(err, hookName, logger));
|
|
184
|
+
}
|
|
188
185
|
function handleSideEffectError(err, hookName, logger) {
|
|
189
|
-
|
|
186
|
+
if (!logger)
|
|
187
|
+
return;
|
|
188
|
+
const errorObject = err instanceof Error ? err : new Error(String(err));
|
|
189
|
+
logger("warn", `Background hook "${hookName}" crashed: ${errorObject.message}`, errorObject);
|
|
190
190
|
}
|
|
191
191
|
//# sourceMappingURL=pipeline.js.map
|
package/utils/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/utils/pipeline.ts"],"names":[],"mappings":"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"}
|
package/utils/response.d.ts
CHANGED
|
@@ -1,40 +1,122 @@
|
|
|
1
|
-
import type { HttpResponse, HyperTransport,
|
|
1
|
+
import type { HttpResponse, HyperTransport, HyperBody } from "@hyperttp/types";
|
|
2
2
|
type TransportResponse = Awaited<ReturnType<HyperTransport["execute"]>>;
|
|
3
3
|
/**
|
|
4
|
-
* @ru
|
|
5
|
-
*
|
|
6
|
-
* @
|
|
4
|
+
* @ru Символы для скрытого кэширования распарсенных данных тела ответа.
|
|
5
|
+
* Использование Symbol предотвращает коллизии имен и сохраняет мономорфизм в V8.
|
|
6
|
+
* @en Symbols for hidden caching of parsed response body data.
|
|
7
|
+
* Using Symbol prevents name collisions and preserves monomorphism in V8.
|
|
8
|
+
*/
|
|
9
|
+
declare const TEXT_CACHE: unique symbol;
|
|
10
|
+
declare const JSON_CACHE: unique symbol;
|
|
11
|
+
declare const ARRAY_BUFFER_CACHE: unique symbol;
|
|
12
|
+
/**
|
|
13
|
+
* @ru Интерфейс объекта, поддерживающего скрытое кэширование данных.
|
|
14
|
+
* @en Interface for an object supporting hidden data caching.
|
|
15
|
+
*/
|
|
16
|
+
type CacheHolder = {
|
|
17
|
+
[TEXT_CACHE]?: string;
|
|
18
|
+
[JSON_CACHE]?: unknown;
|
|
19
|
+
[ARRAY_BUFFER_CACHE]?: ArrayBuffer | SharedArrayBuffer;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* @ru Высокопроизводительное глубокое клонирование тела ответа.
|
|
23
|
+
* Избегает накладных расходов structuredClone для стримов и буферов, возвращая ссылки.
|
|
24
|
+
* @en High-performance deep cloning of the response body.
|
|
25
|
+
* Avoids structuredClone overhead for streams and buffers by returning references.
|
|
26
|
+
* @template T - The type of the body.
|
|
27
|
+
* @param body - The body to clone.
|
|
28
|
+
* @returns The cloned body.
|
|
7
29
|
*/
|
|
8
30
|
export declare const cloneBodyFast: <T>(body: T) => T;
|
|
9
31
|
/**
|
|
10
|
-
* @ru
|
|
11
|
-
*
|
|
32
|
+
* @ru Высокопроизводительный контейнер HTTP-ответа с ленивым парсингом и кэшированием.
|
|
33
|
+
* Гарантирует идентичный API чтения тела ответа во всех рантаймах.
|
|
34
|
+
* @en High-performance HTTP response container with lazy parsing and caching.
|
|
35
|
+
* Guarantees identical response body reading API across all runtimes.
|
|
36
|
+
* @template T - Expected type of the parsed response body.
|
|
37
|
+
*/
|
|
38
|
+
export declare class HyperHttpResponse<T = unknown> implements HttpResponse<T>, CacheHolder {
|
|
39
|
+
status: number;
|
|
40
|
+
headers: Record<string, string | string[]>;
|
|
41
|
+
body: HyperBody;
|
|
42
|
+
url: string;
|
|
43
|
+
data: T | null;
|
|
44
|
+
[TEXT_CACHE]: string | undefined;
|
|
45
|
+
[JSON_CACHE]: unknown | undefined;
|
|
46
|
+
[ARRAY_BUFFER_CACHE]: ArrayBuffer | SharedArrayBuffer | undefined;
|
|
47
|
+
private _bodyConsumed;
|
|
48
|
+
/**
|
|
49
|
+
* @ru Создаёт экземпляр ответа из сырых данных транспорта.
|
|
50
|
+
* @en Creates a response instance from raw transport data.
|
|
51
|
+
* @param rawResponse - The raw response from the transport layer.
|
|
52
|
+
*/
|
|
53
|
+
constructor(rawResponse: TransportResponse);
|
|
54
|
+
/**
|
|
55
|
+
* @ru Лениво вычитывает и кэширует тело ответа в виде ArrayBuffer и текста.
|
|
56
|
+
* @en Lazily consumes and caches the response body as ArrayBuffer and text.
|
|
57
|
+
*/
|
|
58
|
+
private _consumeBody;
|
|
59
|
+
/**
|
|
60
|
+
* @ru Возвращает тело ответа как ArrayBuffer. Результат кэшируется.
|
|
61
|
+
* @en Returns the response body as an ArrayBuffer. Result is cached.
|
|
62
|
+
* @returns Promise resolving to the ArrayBuffer or SharedArrayBuffer.
|
|
63
|
+
*/
|
|
64
|
+
arrayBuffer(): Promise<ArrayBuffer | SharedArrayBuffer>;
|
|
65
|
+
/**
|
|
66
|
+
* @ru Возвращает тело ответа как текст. Результат кэшируется.
|
|
67
|
+
* @en Returns the response body as text. Result is cached.
|
|
68
|
+
* @returns Promise resolving to the text string.
|
|
69
|
+
*/
|
|
70
|
+
text(): Promise<string>;
|
|
71
|
+
/**
|
|
72
|
+
* @ru Парсит тело ответа как JSON. Результат кэшируется.
|
|
73
|
+
* @en Parses the response body as JSON. Result is cached.
|
|
74
|
+
* @template TJson - Expected type of the parsed JSON.
|
|
75
|
+
* @returns Promise resolving to the parsed JSON object.
|
|
76
|
+
*/
|
|
77
|
+
json<TJson = T>(): Promise<TJson>;
|
|
78
|
+
/**
|
|
79
|
+
* @ru Отбрасывает тело ответа для освобождения ресурсов (сокета).
|
|
80
|
+
* @en Discards the response body to free up resources (socket).
|
|
81
|
+
* @returns Promise that resolves when the body is drained.
|
|
82
|
+
*/
|
|
83
|
+
dump(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* @ru Создаёт глубокую изолированную копию ответа.
|
|
86
|
+
* Для стримов использует tee() для безопасного раздвоения потока.
|
|
87
|
+
* @en Creates a deep isolated copy of the response.
|
|
88
|
+
* Uses tee() for streams to safely duplicate the flow.
|
|
89
|
+
* @returns A new HttpResponse instance with cloned data.
|
|
90
|
+
*/
|
|
91
|
+
clone(): HttpResponse<T>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @ru Быстрое создание экземпляра HyperHttpResponse из сырого ответа транспорта.
|
|
95
|
+
* @en Fast creation of a HyperHttpResponse instance from a raw transport response.
|
|
96
|
+
* @param rawResponse - The raw transport response.
|
|
97
|
+
* @returns A new HyperHttpResponse instance.
|
|
12
98
|
*/
|
|
13
|
-
export declare
|
|
99
|
+
export declare const mapResponseFast: (rawResponse: TransportResponse) => HttpResponse<unknown>;
|
|
14
100
|
/**
|
|
15
|
-
* @ru
|
|
16
|
-
* @en Fast
|
|
17
|
-
* @param rawResponse -
|
|
101
|
+
* @ru Быстрое создание объекта StreamResponse без overhead-а классов.
|
|
102
|
+
* @en Fast creation of a StreamResponse object without class overhead.
|
|
103
|
+
* @param rawResponse - The raw transport response.
|
|
104
|
+
* @returns A lightweight StreamResponse object.
|
|
18
105
|
*/
|
|
19
|
-
export declare const
|
|
106
|
+
export declare const mapStreamFast: (rawResponse: TransportResponse) => {
|
|
20
107
|
status: number;
|
|
21
108
|
headers: Record<string, string | string[]>;
|
|
22
109
|
body: import("@hyperttp/types").TransportResponsePayload;
|
|
23
110
|
url: string;
|
|
24
|
-
clone: typeof responseCloneHandler;
|
|
25
|
-
data: null;
|
|
26
111
|
};
|
|
27
112
|
/**
|
|
28
|
-
* @ru
|
|
29
|
-
*
|
|
30
|
-
* @
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
* @
|
|
35
|
-
* @en Zero-allocation headers merging layout. Completely avoids `Object.keys()` overhead and heavy heap array operations.
|
|
36
|
-
* @param base - Primary dictionary containing foundational header values.
|
|
37
|
-
* @param override - High-priority map containing overrides or additions.
|
|
113
|
+
* @ru Оптимизированное слияние заголовков.
|
|
114
|
+
* Использует ранний возврат при первой итерации цикла, что быстрее, чем Object.keys().length > 0.
|
|
115
|
+
* @en Optimized headers merging.
|
|
116
|
+
* Uses early return on the first loop iteration, which is faster than Object.keys().length > 0.
|
|
117
|
+
* @param base - Base headers object.
|
|
118
|
+
* @param override - Headers to override or add.
|
|
119
|
+
* @returns Merged headers object.
|
|
38
120
|
*/
|
|
39
121
|
export declare const mergeHeadersFast: (base: Record<string, string | string[]>, override?: Record<string, string | string[]>) => Record<string, string | string[]>;
|
|
40
122
|
export {};
|
package/utils/response.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/E,KAAK,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAgDxE;;;;;GAKG;AACH,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,UAAU,eAA+B,CAAC;AAChD,QAAA,MAAM,kBAAkB,eAAsC,CAAC;AAE/D;;;GAGG;AACH,KAAK,WAAW,GAAG;IACjB,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC;CACxD,CAAC;AA2BF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,CAqB1C,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,GAAG,IAAI,CAAQ;IAEtB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAa;IAC7C,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAa;IAC9C,CAAC,kBAAkB,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAa;IAErF,OAAO,CAAC,aAAa,CAAS;IAE9B;;;;OAIG;gBACS,WAAW,EAAE,iBAAiB;IAO1C;;;OAGG;YACW,YAAY;IA8C1B;;;;OAIG;IACU,WAAW,IAAI,OAAO,CAAC,WAAW,GAAG,iBAAiB,CAAC;IA2BpE;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAiCpC;;;;;OAKG;IACU,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC;IA2B9C;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYlC;;;;;;OAMG;IACI,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC;CA2BhC;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,iBAAiB,KAAG,YAAY,CAAC,OAAO,CAEpF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,aAAa,iBAAiB;;;;;CAK1D,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACvC,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,KAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlC,CAAC"}
|