@boristype/bt-ir 0.1.0-alpha.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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +338 -0
  3. package/build/analyzer/index.d.ts +7 -0
  4. package/build/analyzer/index.d.ts.map +1 -0
  5. package/build/analyzer/index.js +7 -0
  6. package/build/analyzer/index.js.map +1 -0
  7. package/build/analyzer/scope-analyzer.d.ts +88 -0
  8. package/build/analyzer/scope-analyzer.d.ts.map +1 -0
  9. package/build/analyzer/scope-analyzer.js +565 -0
  10. package/build/analyzer/scope-analyzer.js.map +1 -0
  11. package/build/cli.d.ts +10 -0
  12. package/build/cli.d.ts.map +1 -0
  13. package/build/cli.js +96 -0
  14. package/build/cli.js.map +1 -0
  15. package/build/emitter/bt-emitter.d.ts +31 -0
  16. package/build/emitter/bt-emitter.d.ts.map +1 -0
  17. package/build/emitter/bt-emitter.js +919 -0
  18. package/build/emitter/bt-emitter.js.map +1 -0
  19. package/build/emitter/index.d.ts +7 -0
  20. package/build/emitter/index.d.ts.map +1 -0
  21. package/build/emitter/index.js +7 -0
  22. package/build/emitter/index.js.map +1 -0
  23. package/build/index.d.ts +25 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +24 -0
  26. package/build/index.js.map +1 -0
  27. package/build/ir/builders.d.ts +235 -0
  28. package/build/ir/builders.d.ts.map +1 -0
  29. package/build/ir/builders.js +387 -0
  30. package/build/ir/builders.js.map +1 -0
  31. package/build/ir/index.d.ts +8 -0
  32. package/build/ir/index.d.ts.map +1 -0
  33. package/build/ir/index.js +8 -0
  34. package/build/ir/index.js.map +1 -0
  35. package/build/ir/nodes.d.ts +596 -0
  36. package/build/ir/nodes.d.ts.map +1 -0
  37. package/build/ir/nodes.js +16 -0
  38. package/build/ir/nodes.js.map +1 -0
  39. package/build/lowering/bare-visitors.d.ts +72 -0
  40. package/build/lowering/bare-visitors.d.ts.map +1 -0
  41. package/build/lowering/bare-visitors.js +287 -0
  42. package/build/lowering/bare-visitors.js.map +1 -0
  43. package/build/lowering/binding.d.ts +127 -0
  44. package/build/lowering/binding.d.ts.map +1 -0
  45. package/build/lowering/binding.js +194 -0
  46. package/build/lowering/binding.js.map +1 -0
  47. package/build/lowering/expressions.d.ts +106 -0
  48. package/build/lowering/expressions.d.ts.map +1 -0
  49. package/build/lowering/expressions.js +1172 -0
  50. package/build/lowering/expressions.js.map +1 -0
  51. package/build/lowering/function-builder.d.ts +111 -0
  52. package/build/lowering/function-builder.d.ts.map +1 -0
  53. package/build/lowering/function-builder.js +111 -0
  54. package/build/lowering/function-builder.js.map +1 -0
  55. package/build/lowering/helpers.d.ts +88 -0
  56. package/build/lowering/helpers.d.ts.map +1 -0
  57. package/build/lowering/helpers.js +347 -0
  58. package/build/lowering/helpers.js.map +1 -0
  59. package/build/lowering/index.d.ts +21 -0
  60. package/build/lowering/index.d.ts.map +1 -0
  61. package/build/lowering/index.js +28 -0
  62. package/build/lowering/index.js.map +1 -0
  63. package/build/lowering/precedence.d.ts +18 -0
  64. package/build/lowering/precedence.d.ts.map +1 -0
  65. package/build/lowering/precedence.js +104 -0
  66. package/build/lowering/precedence.js.map +1 -0
  67. package/build/lowering/spread-helpers.d.ts +12 -0
  68. package/build/lowering/spread-helpers.d.ts.map +1 -0
  69. package/build/lowering/spread-helpers.js +32 -0
  70. package/build/lowering/spread-helpers.js.map +1 -0
  71. package/build/lowering/statements.d.ts +85 -0
  72. package/build/lowering/statements.d.ts.map +1 -0
  73. package/build/lowering/statements.js +713 -0
  74. package/build/lowering/statements.js.map +1 -0
  75. package/build/lowering/visitor.d.ts +121 -0
  76. package/build/lowering/visitor.d.ts.map +1 -0
  77. package/build/lowering/visitor.js +165 -0
  78. package/build/lowering/visitor.js.map +1 -0
  79. package/build/pipeline/index.d.ts +84 -0
  80. package/build/pipeline/index.d.ts.map +1 -0
  81. package/build/pipeline/index.js +224 -0
  82. package/build/pipeline/index.js.map +1 -0
  83. package/build/polyfill-spec.d.ts +18 -0
  84. package/build/polyfill-spec.d.ts.map +1 -0
  85. package/build/polyfill-spec.js +26 -0
  86. package/build/polyfill-spec.js.map +1 -0
  87. package/package.json +48 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 BorisType
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,338 @@
1
+ # bt-ir
2
+
3
+ **IR-based компилятор TypeScript → BorisScript**
4
+
5
+ bt-ir — бэкенд компиляции для [BorisType](../README.md), транспилирующий TypeScript в BorisScript через промежуточное представление (IR).
6
+
7
+ ## Обзор
8
+
9
+ - **Вход:** TypeScript исходный код
10
+ - **Выход:** BorisScript (.js файлы)
11
+ - **Метод:** TypeScript AST → IR (Intermediate Representation) → BorisScript
12
+
13
+ **Зачем IR?** Проще, легче поддерживать и корректнее, чем предыдущий подход на основе трансформеров.
14
+
15
+ ## Установка
16
+
17
+ ```bash
18
+ npm install bt-ir
19
+ ```
20
+
21
+ ## API
22
+
23
+ ### compile(sourceCode, options?)
24
+
25
+ Компилирует строку TypeScript исходного кода.
26
+
27
+ ```typescript
28
+ import { compile } from "bt-ir";
29
+
30
+ const result = compile(`
31
+ const greet = (name: string) => {
32
+ alert(\`Hello, \${name}!\`);
33
+ };
34
+ greet("World");
35
+ `, {
36
+ filename: "test.ts",
37
+ compileMode: "script"
38
+ });
39
+
40
+ console.log(result.outputs[0].code);
41
+ ```
42
+
43
+ **Параметры:**
44
+ - `sourceCode: string` — TypeScript код для компиляции
45
+ - `options?: CompileOptions` — Опции компиляции
46
+
47
+ **Возвращает:** `CompileResult`
48
+
49
+ ### compileFile(filePath, options?)
50
+
51
+ Компилирует TypeScript файл.
52
+
53
+ ```typescript
54
+ import { compileFile } from "bt-ir";
55
+
56
+ const result = compileFile("./src/index.ts", {
57
+ compileMode: "module"
58
+ });
59
+
60
+ console.log(result.outputs[0].code);
61
+ ```
62
+
63
+ **Параметры:**
64
+ - `filePath: string` — Путь к TypeScript файлу
65
+ - `options?: CompileOptions` — Опции компиляции
66
+
67
+ **Возвращает:** `CompileResult`
68
+
69
+ ### compileSourceFile(sourceFile, program, options?)
70
+
71
+ Компилирует TypeScript SourceFile (для интеграции с существующим TypeScript Program).
72
+
73
+ ```typescript
74
+ import ts from "typescript";
75
+ import { compileSourceFile } from "bt-ir";
76
+
77
+ const program = ts.createProgram(["src/index.ts"], {});
78
+ const sourceFile = program.getSourceFile("src/index.ts")!;
79
+
80
+ const result = compileSourceFile(sourceFile, program, {
81
+ compileMode: "module",
82
+ cwd: process.cwd()
83
+ });
84
+
85
+ console.log(result.outputs[0].code);
86
+ ```
87
+
88
+ **Параметры:**
89
+ - `sourceFile: ts.SourceFile` — TypeScript SourceFile для компиляции
90
+ - `program: ts.Program` — Экземпляр TypeScript Program
91
+ - `options?: CompileOptions` — Опции компиляции
92
+
93
+ **Возвращает:** `CompileResult`
94
+
95
+ ## Типы
96
+
97
+ ### CompileOptions
98
+
99
+ ```typescript
100
+ interface CompileOptions {
101
+ /** Режим компиляции: bare, script или module */
102
+ compileMode?: "bare" | "script" | "module";
103
+
104
+ /** Текущая рабочая директория (для разрешения относительных путей) */
105
+ cwd?: string;
106
+
107
+ /** Имя исходного файла (для функции compile()) */
108
+ filename?: string;
109
+ }
110
+ ```
111
+
112
+ ### CompileResult
113
+
114
+ ```typescript
115
+ interface CompileResult {
116
+ /** Результаты компиляции (обычно один файл) */
117
+ outputs: CompileOutput[];
118
+
119
+ /** Диагностика TypeScript (ошибки/предупреждения) */
120
+ diagnostics: ts.Diagnostic[];
121
+
122
+ /** Флаг успеха */
123
+ success: boolean;
124
+ }
125
+ ```
126
+
127
+ ### CompileOutput
128
+
129
+ ```typescript
130
+ interface CompileOutput {
131
+ /** Путь к выходному файлу (относительно входного) */
132
+ path: string;
133
+
134
+ /** Сгенерированный BorisScript код */
135
+ code: string;
136
+
137
+ /** Source map (если включено) */
138
+ map?: string;
139
+ }
140
+ ```
141
+
142
+ ## Режимы компиляции
143
+
144
+ bt-ir поддерживает три режима компиляции:
145
+
146
+ | Режим | Назначение | Возможности |
147
+ |------|----------|-------|
148
+ | **bare** | Runtime polyfills, встроенные модули | Минимальный вывод, нет bt.* обёрток |
149
+ | **script** | Тестовые файлы, executable объекты | Полные возможности с bt.getProperty, polyfills |
150
+ | **module** | Codelibrary пакеты (по умолчанию) | Обёрнуто в __init(), hoisting переменных |
151
+
152
+ См. [Справка по режимам компиляции](../docs/reference/compile-modes.md) для деталей.
153
+
154
+ ## Примеры
155
+
156
+ ### Базовое использование
157
+
158
+ ```typescript
159
+ import { compile } from "bt-ir";
160
+
161
+ const result = compile(`
162
+ function add(a: number, b: number): number {
163
+ return a + b;
164
+ }
165
+
166
+ const result = add(2, 3);
167
+ alert(result);
168
+ `);
169
+
170
+ if (result.success) {
171
+ console.log(result.outputs[0].code);
172
+ }
173
+ ```
174
+
175
+ ### С конкретным режимом
176
+
177
+ ```typescript
178
+ import { compile } from "bt-ir";
179
+
180
+ // Bare mode - минимальный overhead
181
+ const bareResult = compile(`
182
+ export function fastHash(str: string): number {
183
+ return str.length;
184
+ }
185
+ `, { compileMode: "bare" });
186
+
187
+ // Script mode - полные возможности
188
+ const scriptResult = compile(`
189
+ const obj = { foo: "bar" };
190
+ alert(obj.foo);
191
+ `, { compileMode: "script" });
192
+
193
+ // Module mode - codelibrary
194
+ const moduleResult = compile(`
195
+ export function greet(name: string) {
196
+ alert("Hello " + name);
197
+ }
198
+ `, { compileMode: "module" });
199
+ ```
200
+
201
+ ### Интеграция с TypeScript Watch
202
+
203
+ ```typescript
204
+ import ts from "typescript";
205
+ import { compileSourceFile } from "bt-ir";
206
+
207
+ const host = ts.createWatchCompilerHost(
208
+ "tsconfig.json",
209
+ { noEmit: true }, // TypeScript только для диагностики
210
+ ts.sys,
211
+ ts.createProgram,
212
+ (diagnostic) => console.log(diagnostic.messageText)
213
+ );
214
+
215
+ const originalAfterProgramCreate = host.afterProgramCreate;
216
+ host.afterProgramCreate = (program) => {
217
+ originalAfterProgramCreate?.(program);
218
+
219
+ // Emit через bt-ir
220
+ for (const sourceFile of program.getSourceFiles()) {
221
+ if (!sourceFile.isDeclarationFile) {
222
+ const result = compileSourceFile(sourceFile, program);
223
+ // Записать result.outputs[0].code на диск
224
+ }
225
+ }
226
+ };
227
+
228
+ ts.createWatchProgram(host);
229
+ ```
230
+
231
+ ## Архитектура
232
+
233
+ ```
234
+ TypeScript Source
235
+
236
+ [TypeScript Parser] ← TypeScript Compiler API
237
+
238
+ [Scope Analyzer] ← Анализ captured переменных
239
+
240
+ [IR Lowering] ← Преобразование TS AST → IR
241
+
242
+ [BT Emitter] ← Генерация BorisScript
243
+
244
+ BorisScript Output
245
+ ```
246
+
247
+ Для детальной архитектуры, см.:
248
+ - [Архитектура IR Pipeline](../ref/architecture/ir-pipeline.md)
249
+ - [Ограничения BorisScript](../docs/reference/borisscript-constraints.md)
250
+
251
+ ## Ключевые возможности
252
+
253
+ ### Автоматические трансформации
254
+
255
+ - **Стрелочные функции** → Обычные функции с env/desc
256
+ - **Шаблонные литералы** → Конкатенация строк
257
+ - **for...of** → for...in (массивы BorisScript)
258
+ - **let/const** → var с hoisting
259
+ - **Замыкания** → цепочка __env для captured переменных
260
+ - **Доступ к свойствам** → bt.getProperty() (script/module mode)
261
+ - **Вызовы методов** → bt.callFunction() (script/module mode)
262
+
263
+ ### Polyfills
264
+
265
+ Автоматическое внедрение polyfill для:
266
+ - Методы массивов: map, filter, reduce, forEach, ...
267
+ - Методы строк: split, trim, substring, ...
268
+ - Методы чисел: toFixed, toString, ...
269
+
270
+ ### Анализ Scope
271
+
272
+ - Обнаруживает captured переменные в замыканиях
273
+ - Генерирует минимальную цепочку __env
274
+ - Правильный variable hoisting
275
+
276
+ ## CLI (Разработка)
277
+
278
+ bt-ir включает CLI для тестирования:
279
+
280
+ ```bash
281
+ # Компилировать один файл
282
+ node --experimental-strip-types src/cli.ts example/src/index.ts
283
+
284
+ # Компилировать с выводом
285
+ node --experimental-strip-types src/cli.ts example/src/index.ts -o example/build/index.js
286
+
287
+ # После сборки
288
+ npm run build
289
+ node build/cli.js example/src/index.ts
290
+ ```
291
+
292
+ ## Разработка
293
+
294
+ ```bash
295
+ # Установить зависимости
296
+ npm install
297
+
298
+ # Собрать
299
+ npm run build
300
+
301
+ # Запустить тесты
302
+ npm test
303
+
304
+ # Разработка с примерами
305
+ npm run build && node build/cli.js example/src/index.ts
306
+ ```
307
+
308
+ ## Структура проекта
309
+
310
+ ```
311
+ bt-ir/
312
+ ├── src/
313
+ │ ├── index.ts # Public API
314
+ │ ├── pipeline/ # Конвейер компиляции
315
+ │ ├── analyzer/ # Анализ scope
316
+ │ ├── ir/ # Определения IR нод
317
+ │ ├── lowering/ # Трансформация TS AST → IR
318
+ │ └── emitter/ # Генерация IR → BorisScript
319
+ ├── example/ # Примеры использования
320
+ ├── build/ # Скомпилированный вывод
321
+ └── README.md # Этот файл
322
+ ```
323
+
324
+ ## Версия TypeScript
325
+
326
+ Требуется TypeScript 5.0+
327
+
328
+ ## Лицензия
329
+
330
+ MIT
331
+
332
+ ## См. также
333
+
334
+ - [Основной проект BorisType](../)
335
+ - [Компилятор btc](../btc/)
336
+ - [Справка по режимам компиляции](../docs/reference/compile-modes.md)
337
+ - [Ограничения BorisScript](../docs/reference/borisscript-constraints.md)
338
+ - [Архитектура IR Pipeline](../ref/architecture/ir-pipeline.md)
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Analyzer module - анализ исходного кода
3
+ *
4
+ * @module analyzer
5
+ */
6
+ export { analyzeScopes, printScopeTree, getEnvDepth, getCodelibraryDepth, type Scope, type VariableInfo, type ScopeAnalysisResult, } from "./scope-analyzer.ts";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Analyzer module - анализ исходного кода
3
+ *
4
+ * @module analyzer
5
+ */
6
+ export { analyzeScopes, printScopeTree, getEnvDepth, getCodelibraryDepth, } from "./scope-analyzer.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,mBAAmB,GAIpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Scope Analyzer - анализ областей видимости и захваченных переменных
3
+ *
4
+ * Определяет какие переменные используются во вложенных scopes (captured)
5
+ * и строит дерево scopes для генерации __env chain.
6
+ *
7
+ * @module analyzer
8
+ */
9
+ import * as ts from "typescript";
10
+ import { BindingManager } from "../lowering/binding.ts";
11
+ /**
12
+ * Информация о переменной
13
+ */
14
+ export interface VariableInfo {
15
+ /** Имя переменной */
16
+ name: string;
17
+ /** Тип объявления */
18
+ kind: "const" | "let" | "var" | "function" | "parameter" | "import";
19
+ /** Scope где объявлена переменная */
20
+ declarationScope: Scope;
21
+ /** Используется ли во вложенных scopes (требует __env) */
22
+ isCaptured: boolean;
23
+ /** Scopes где используется эта переменная */
24
+ usedInScopes: Set<Scope>;
25
+ /** Переименованное имя (если shadowing) */
26
+ renamedTo?: string;
27
+ }
28
+ /**
29
+ * Область видимости
30
+ */
31
+ export interface Scope {
32
+ /** Уникальный id scope */
33
+ id: number;
34
+ /** Тип scope */
35
+ type: "module" | "function" | "block";
36
+ /** Имя (для функций) */
37
+ name?: string;
38
+ /** Родительский scope */
39
+ parent: Scope | null;
40
+ /** Дочерние scopes */
41
+ children: Scope[];
42
+ /** Переменные объявленные в этом scope */
43
+ variables: Map<string, VariableInfo>;
44
+ /** Соответствующая TS нода */
45
+ node: ts.Node;
46
+ /** Глубина вложенности функций (для генерации __env.__parent chain) */
47
+ depth: number;
48
+ /** Есть ли captured переменные в этом scope */
49
+ hasCaptured: boolean;
50
+ }
51
+ /**
52
+ * Результат анализа
53
+ */
54
+ export interface ScopeAnalysisResult {
55
+ /** Корневой scope (module) */
56
+ moduleScope: Scope;
57
+ /** Все scopes по id */
58
+ scopesById: Map<number, Scope>;
59
+ /** Карта: TS Node -> Scope */
60
+ nodeToScope: Map<ts.Node, Scope>;
61
+ /** Все captured переменные */
62
+ capturedVariables: VariableInfo[];
63
+ /** Менеджер генерации имён (shared с visitor) */
64
+ bindings: BindingManager;
65
+ }
66
+ /**
67
+ * Анализирует scopes в исходном файле
68
+ * @param sourceFile - TypeScript source file
69
+ * @param bindings - Менеджер генерации имён (опциональный, создаётся если не передан)
70
+ */
71
+ export declare function analyzeScopes(sourceFile: ts.SourceFile, bindings?: BindingManager): ScopeAnalysisResult;
72
+ /**
73
+ * Выводит дерево scopes в консоль (для отладки)
74
+ */
75
+ export declare function printScopeTree(scope: Scope, indent?: number): void;
76
+ /**
77
+ * Вычисляет глубину __env chain между двумя scopes
78
+ * Используется для генерации __env.__parent.__parent...
79
+ *
80
+ * Считает только scopes с hasCaptured (которые создают свой __env)
81
+ */
82
+ export declare function getEnvDepth(fromScope: Scope, toScope: Scope): number;
83
+ /**
84
+ * Глубина до root __env для lib (__codelibrary).
85
+ * Считает только block scopes — в module mode function env не создаётся.
86
+ */
87
+ export declare function getCodelibraryDepth(fromScope: Scope, toScope: Scope): number;
88
+ //# sourceMappingURL=scope-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/scope-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpE,qCAAqC;IACrC,gBAAgB,EAAE,KAAK,CAAC;IACxB,0DAA0D;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,sBAAsB;IACtB,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,8BAA8B;IAC9B,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,WAAW,EAAE,KAAK,CAAC;IACnB,uBAAuB;IACvB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,8BAA8B;IAC9B,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,GAAE,cAAqC,GAC9C,mBAAmB,CAwDrB;AAwgBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,SAAI,GAAG,IAAI,CAa7D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,CAapE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM,CAY5E"}