elit 3.3.3 → 3.3.4
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/build.d.mts +1 -1
- package/dist/build.js +1 -0
- package/dist/build.js.map +1 -0
- package/dist/build.mjs +1 -0
- package/dist/build.mjs.map +1 -0
- package/dist/chokidar.js +1 -0
- package/dist/chokidar.js.map +1 -0
- package/dist/chokidar.mjs +1 -0
- package/dist/chokidar.mjs.map +1 -0
- package/dist/cli.js +4687 -34
- package/dist/config.d.mts +3 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +1 -0
- package/dist/config.mjs.map +1 -0
- package/dist/coverage.d.mts +85 -0
- package/dist/coverage.d.ts +76 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +1549 -0
- package/dist/coverage.js.map +1 -0
- package/dist/coverage.mjs +1520 -0
- package/dist/coverage.mjs.map +1 -0
- package/dist/database.d.mts +31 -6
- package/dist/database.d.ts +31 -6
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +60 -33
- package/dist/database.js.map +1 -0
- package/dist/database.mjs +60 -33
- package/dist/database.mjs.map +1 -0
- package/dist/dom.js +1 -0
- package/dist/dom.js.map +1 -0
- package/dist/dom.mjs +1 -0
- package/dist/dom.mjs.map +1 -0
- package/dist/el.js +1 -0
- package/dist/el.js.map +1 -0
- package/dist/el.mjs +1 -0
- package/dist/el.mjs.map +1 -0
- package/dist/fs.js +1 -0
- package/dist/fs.js.map +1 -0
- package/dist/fs.mjs +1 -0
- package/dist/fs.mjs.map +1 -0
- package/dist/hmr.js +1 -0
- package/dist/hmr.js.map +1 -0
- package/dist/hmr.mjs +1 -0
- package/dist/hmr.mjs.map +1 -0
- package/dist/http.js +1 -0
- package/dist/http.js.map +1 -0
- package/dist/http.mjs +1 -0
- package/dist/http.mjs.map +1 -0
- package/dist/https.d.mts +1 -1
- package/dist/https.js +1 -0
- package/dist/https.js.map +1 -0
- package/dist/https.mjs +1 -0
- package/dist/https.mjs.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mime-types.js +1 -0
- package/dist/mime-types.js.map +1 -0
- package/dist/mime-types.mjs +1 -0
- package/dist/mime-types.mjs.map +1 -0
- package/dist/path.js +1 -0
- package/dist/path.js.map +1 -0
- package/dist/path.mjs +1 -0
- package/dist/path.mjs.map +1 -0
- package/dist/router.js +1 -0
- package/dist/router.js.map +1 -0
- package/dist/router.mjs +1 -0
- package/dist/router.mjs.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/runtime.js.map +1 -0
- package/dist/runtime.mjs +1 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/{server-Cz3z-5ls.d.mts → server-BFTzgJpO.d.mts} +62 -1
- package/dist/{server-BG2CaVMh.d.ts → server-CIXtexNS.d.ts} +62 -1
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +12 -0
- package/dist/server.mjs.map +1 -0
- package/dist/state.d.mts +1 -1
- package/dist/state.js +1 -0
- package/dist/state.js.map +1 -0
- package/dist/state.mjs +1 -0
- package/dist/state.mjs.map +1 -0
- package/dist/style.js +1 -0
- package/dist/style.js.map +1 -0
- package/dist/style.mjs +1 -0
- package/dist/style.mjs.map +1 -0
- package/dist/test-globals.d.ts +184 -0
- package/dist/test-reporter.d.mts +77 -0
- package/dist/test-reporter.d.ts +73 -0
- package/dist/test-reporter.d.ts.map +1 -0
- package/dist/test-reporter.js +726 -0
- package/dist/test-reporter.js.map +1 -0
- package/dist/test-reporter.mjs +696 -0
- package/dist/test-reporter.mjs.map +1 -0
- package/dist/test-runtime.d.mts +122 -0
- package/dist/test-runtime.d.ts +120 -0
- package/dist/test-runtime.d.ts.map +1 -0
- package/dist/test-runtime.js +1292 -0
- package/dist/test-runtime.js.map +1 -0
- package/dist/test-runtime.mjs +1269 -0
- package/dist/test-runtime.mjs.map +1 -0
- package/dist/test.d.mts +39 -0
- package/dist/test.d.ts +38 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +4966 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +4944 -0
- package/dist/test.mjs.map +1 -0
- package/dist/types.d.mts +62 -1
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +1 -0
- package/dist/ws.js +1 -0
- package/dist/ws.js.map +1 -0
- package/dist/ws.mjs +1 -0
- package/dist/ws.mjs.map +1 -0
- package/dist/wss.js +1 -0
- package/dist/wss.js.map +1 -0
- package/dist/wss.mjs +1 -0
- package/dist/wss.mjs.map +1 -0
- package/package.json +37 -5
- package/src/cli.ts +165 -1
- package/src/config.ts +3 -1
- package/src/coverage.ts +1479 -0
- package/src/database.ts +71 -35
- package/src/server.ts +12 -0
- package/src/test-globals.d.ts +184 -0
- package/src/test-reporter.ts +609 -0
- package/src/test-runtime.ts +1359 -0
- package/src/test.ts +368 -0
- package/src/types.ts +59 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Global Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Provides global type declarations for test globals.
|
|
5
|
+
*
|
|
6
|
+
* To use these types in your test files, add this to your tsconfig.json:
|
|
7
|
+
* {
|
|
8
|
+
* "compilerOptions": {
|
|
9
|
+
* "types": ["elit/test-globals"]
|
|
10
|
+
* }
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* Or add a triple-slash directive to your test file:
|
|
14
|
+
* /// <reference types="elit/test-globals" />
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Global Functions with Modifiers
|
|
19
|
+
// ============================================================================
|
|
20
|
+
|
|
21
|
+
declare function describe(name: string, fn: () => void): void;
|
|
22
|
+
declare namespace describe {
|
|
23
|
+
function skip(name: string, fn: () => void): void;
|
|
24
|
+
function only(name: string, fn: () => void): void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
declare function it(name: string, fn: () => void | Promise<void>): void;
|
|
28
|
+
declare namespace it {
|
|
29
|
+
function skip(name: string, fn: () => void | Promise<void>): void;
|
|
30
|
+
function only(name: string, fn: () => void | Promise<void>): void;
|
|
31
|
+
function todo(name: string, fn?: () => void | Promise<void>): void;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare function test(name: string, fn: () => void | Promise<void>): void;
|
|
35
|
+
declare namespace test {
|
|
36
|
+
function skip(name: string, fn: () => void | Promise<void>): void;
|
|
37
|
+
function only(name: string, fn: () => void | Promise<void>): void;
|
|
38
|
+
function todo(name: string, fn?: () => void | Promise<void>): void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Expect Interface
|
|
43
|
+
// ============================================================================
|
|
44
|
+
|
|
45
|
+
interface TestMatchers<T> {
|
|
46
|
+
// Equality
|
|
47
|
+
toBe(value: T): void;
|
|
48
|
+
toEqual(value: T): void;
|
|
49
|
+
toStrictEqual(value: T): void;
|
|
50
|
+
|
|
51
|
+
// Truthiness
|
|
52
|
+
toBeTruthy(): void;
|
|
53
|
+
toBeFalsy(): void;
|
|
54
|
+
|
|
55
|
+
// Nullability
|
|
56
|
+
toBeNull(): void;
|
|
57
|
+
toBeUndefined(): void;
|
|
58
|
+
toBeDefined(): void;
|
|
59
|
+
toBeNaN(): void;
|
|
60
|
+
|
|
61
|
+
// Numbers
|
|
62
|
+
toBeGreaterThan(value: number): void;
|
|
63
|
+
toBeGreaterThanOrEqual(value: number): void;
|
|
64
|
+
toBeLessThan(value: number): void;
|
|
65
|
+
toBeLessThanOrEqual(value: number): void;
|
|
66
|
+
toBeCloseTo(value: number, precision?: number): void;
|
|
67
|
+
toBeFinite(): void;
|
|
68
|
+
|
|
69
|
+
// Strings
|
|
70
|
+
toMatch(pattern: RegExp | string): void;
|
|
71
|
+
toContain(value: any): void;
|
|
72
|
+
|
|
73
|
+
// Arrays
|
|
74
|
+
toHaveLength(length: number): void;
|
|
75
|
+
toContainEqual(item: any): void;
|
|
76
|
+
|
|
77
|
+
// Objects
|
|
78
|
+
toHaveProperty(path: string | (string | number)[], value?: any): void;
|
|
79
|
+
toMatchObject(properties: Record<string, any>): void;
|
|
80
|
+
toBeInstanceOf(classType: any): void;
|
|
81
|
+
|
|
82
|
+
// Functions
|
|
83
|
+
toThrow(error?: RegExp | string | Error | any): void;
|
|
84
|
+
toHaveReturnedWith(value: any): void;
|
|
85
|
+
toHaveReturnedTimes(times: number): void;
|
|
86
|
+
toHaveLastReturnedWith(value: any): void;
|
|
87
|
+
|
|
88
|
+
// Modifiers
|
|
89
|
+
not: TestMatchers<T>;
|
|
90
|
+
resolves: TestMatchers<T>;
|
|
91
|
+
rejects: TestMatchers<T>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface ExpectStatic {
|
|
95
|
+
<T = any>(actual: T): TestMatchers<T>;
|
|
96
|
+
extends(matchers: Record<string, any>): void;
|
|
97
|
+
any(constructor: any): any;
|
|
98
|
+
anything(): any;
|
|
99
|
+
arrayContaining(arr: any[]): any;
|
|
100
|
+
objectContaining(obj: Record<string, any>): any;
|
|
101
|
+
stringContaining(str: string): any;
|
|
102
|
+
stringMatching(str: RegExp | string): any;
|
|
103
|
+
not: {
|
|
104
|
+
toBe(value: any): void;
|
|
105
|
+
toEqual(value: any): void;
|
|
106
|
+
toMatchObject(properties: Record<string, any>): void;
|
|
107
|
+
toContain(value: any): void;
|
|
108
|
+
toThrow(error?: RegExp | string | Error): void;
|
|
109
|
+
};
|
|
110
|
+
addSnapshotSerializer(serializer: any): void;
|
|
111
|
+
assertions(expected: number): void;
|
|
112
|
+
hasAssertions(): void;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
declare const expect: ExpectStatic;
|
|
116
|
+
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Mock Functions (vi)
|
|
119
|
+
// ============================================================================
|
|
120
|
+
|
|
121
|
+
interface MockFunction<T extends (...args: any[]) => any> {
|
|
122
|
+
(...args: Parameters<T>): ReturnType<T>;
|
|
123
|
+
mockImplementation(fn: T): this;
|
|
124
|
+
mockImplementationOnce(fn: T): this;
|
|
125
|
+
mockReturnThis(): this;
|
|
126
|
+
mockReturnValue(value: ReturnType<T>): this;
|
|
127
|
+
mockReturnValueOnce(value: ReturnType<T>): this;
|
|
128
|
+
mockResolvedValue(value: ReturnType<T> extends Promise<any> ? never : Awaited<ReturnType<T>>): this;
|
|
129
|
+
mockResolvedValueOnce(value: ReturnType<T> extends Promise<any> ? never : Awaited<ReturnType<T>>): this;
|
|
130
|
+
mockRejectedValue(value: any): this;
|
|
131
|
+
mockRejectedValueOnce(value: any): this;
|
|
132
|
+
get mock(): {
|
|
133
|
+
calls: Parameters<T>[];
|
|
134
|
+
instances: any[];
|
|
135
|
+
contexts: any[];
|
|
136
|
+
returnValues: ReturnType<T>[];
|
|
137
|
+
lastCall?: Parameters<T>;
|
|
138
|
+
};
|
|
139
|
+
get calls(): Parameters<T>[];
|
|
140
|
+
get instances(): any[];
|
|
141
|
+
get invocationCallOrder(): number[];
|
|
142
|
+
get results(): Array<{ type: 'return' | 'throw' | 'incomplete'; value: any }>;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
interface SpyInstance {
|
|
146
|
+
mockRestore(): void;
|
|
147
|
+
mockReturnValue(value: any): this;
|
|
148
|
+
mockResolvedValue(value: any): this;
|
|
149
|
+
mockRejectedValue(value: any): this;
|
|
150
|
+
mockImplementation(fn: (...args: any[]) => any): this;
|
|
151
|
+
get calls(): any[][];
|
|
152
|
+
get callCount(): number;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
interface Elitest {
|
|
156
|
+
fn<T extends (...args: any[]) => any>(implementation?: T): MockFunction<T>;
|
|
157
|
+
spyOn(object: any, method: string): SpyInstance;
|
|
158
|
+
clearAllMocks(): void;
|
|
159
|
+
resetAllMocks(): void;
|
|
160
|
+
restoreAllMocks(): void;
|
|
161
|
+
doMock(modulePath: string, mockFactory?: () => any): void;
|
|
162
|
+
dontMock(modulePath: string): void;
|
|
163
|
+
unmock(modulePath: string): void;
|
|
164
|
+
useFakeTimers(): void;
|
|
165
|
+
useRealTimers(): void;
|
|
166
|
+
runAllTimers(): void;
|
|
167
|
+
runOnlyPendingTimers(): void;
|
|
168
|
+
advanceTimersByTime(msToRun: number): void;
|
|
169
|
+
advanceTimersToNextTimer(): number;
|
|
170
|
+
clearAllTimers(): void;
|
|
171
|
+
setSystemTime(time?: number | Date): void;
|
|
172
|
+
getTimerCount(): number;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
declare const vi: Elitest;
|
|
176
|
+
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// Hooks
|
|
179
|
+
// ============================================================================
|
|
180
|
+
|
|
181
|
+
declare function beforeAll(fn: () => void | Promise<void>, timeout?: number): void;
|
|
182
|
+
declare function afterAll(fn: () => void | Promise<void>, timeout?: number): void;
|
|
183
|
+
declare function beforeEach(fn: () => void | Promise<void>, timeout?: number): void;
|
|
184
|
+
declare function afterEach(fn: () => void | Promise<void>, timeout?: number): void;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { TestResult } from './test-runtime.mjs';
|
|
2
|
+
import 'source-map';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Jest-style Reporters for Elit Test Framework
|
|
6
|
+
*
|
|
7
|
+
* Provides beautiful Jest-compatible output formats:
|
|
8
|
+
* - Default reporter with colored output
|
|
9
|
+
* - Dot reporter for CI/CD
|
|
10
|
+
* - JSON reporter for machine parsing
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
interface TestReporterOptions {
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
colors?: boolean;
|
|
16
|
+
}
|
|
17
|
+
declare class TestReporter {
|
|
18
|
+
private options;
|
|
19
|
+
private startTime;
|
|
20
|
+
private currentFile;
|
|
21
|
+
private fileTestCount;
|
|
22
|
+
private totalFiles;
|
|
23
|
+
constructor(options?: TestReporterOptions);
|
|
24
|
+
private c;
|
|
25
|
+
onRunStart(files: string[]): void;
|
|
26
|
+
onTestResult(result: TestResult): void;
|
|
27
|
+
onRunEnd(results: TestResult[]): void;
|
|
28
|
+
}
|
|
29
|
+
declare class DotReporter {
|
|
30
|
+
private passed;
|
|
31
|
+
private failed;
|
|
32
|
+
private skipped;
|
|
33
|
+
private todo;
|
|
34
|
+
private lineLength;
|
|
35
|
+
onRunStart(files: string[]): void;
|
|
36
|
+
onTestResult(result: TestResult): void;
|
|
37
|
+
onRunEnd(_results: TestResult[]): void;
|
|
38
|
+
private c;
|
|
39
|
+
}
|
|
40
|
+
interface JsonTestResult {
|
|
41
|
+
status: 'passed' | 'failed' | 'skipped' | 'todo';
|
|
42
|
+
name: string;
|
|
43
|
+
suite: string;
|
|
44
|
+
duration: number;
|
|
45
|
+
error?: {
|
|
46
|
+
message: string;
|
|
47
|
+
stack?: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
interface JsonReport {
|
|
51
|
+
summary: {
|
|
52
|
+
total: number;
|
|
53
|
+
passed: number;
|
|
54
|
+
failed: number;
|
|
55
|
+
skipped: number;
|
|
56
|
+
todo: number;
|
|
57
|
+
duration: number;
|
|
58
|
+
};
|
|
59
|
+
tests: JsonTestResult[];
|
|
60
|
+
}
|
|
61
|
+
declare class JsonReporter {
|
|
62
|
+
private startTime;
|
|
63
|
+
private results;
|
|
64
|
+
onRunStart(_files: string[]): void;
|
|
65
|
+
onTestResult(result: TestResult): void;
|
|
66
|
+
onRunEnd(results: TestResult[]): void;
|
|
67
|
+
}
|
|
68
|
+
declare class VerboseReporter {
|
|
69
|
+
private currentSuite;
|
|
70
|
+
onRunStart(_files: string[]): void;
|
|
71
|
+
onTestResult(result: TestResult): void;
|
|
72
|
+
onRunEnd(results: TestResult[]): void;
|
|
73
|
+
}
|
|
74
|
+
declare function formatErrorStack(error: Error): string;
|
|
75
|
+
declare function formatProgress(current: number, total: number): string;
|
|
76
|
+
|
|
77
|
+
export { DotReporter, type JsonReport, JsonReporter, type JsonTestResult, TestReporter, type TestReporterOptions, VerboseReporter, formatErrorStack, formatProgress };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jest-style Reporters for Elit Test Framework
|
|
3
|
+
*
|
|
4
|
+
* Provides beautiful Jest-compatible output formats:
|
|
5
|
+
* - Default reporter with colored output
|
|
6
|
+
* - Dot reporter for CI/CD
|
|
7
|
+
* - JSON reporter for machine parsing
|
|
8
|
+
*/
|
|
9
|
+
import type { TestResult } from './test-runtime';
|
|
10
|
+
export interface TestReporterOptions {
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
colors?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class TestReporter {
|
|
15
|
+
private options;
|
|
16
|
+
private startTime;
|
|
17
|
+
private currentFile;
|
|
18
|
+
private fileTestCount;
|
|
19
|
+
private totalFiles;
|
|
20
|
+
constructor(options?: TestReporterOptions);
|
|
21
|
+
private c;
|
|
22
|
+
onRunStart(files: string[]): void;
|
|
23
|
+
onTestResult(result: TestResult): void;
|
|
24
|
+
onRunEnd(results: TestResult[]): void;
|
|
25
|
+
}
|
|
26
|
+
export declare class DotReporter {
|
|
27
|
+
private passed;
|
|
28
|
+
private failed;
|
|
29
|
+
private skipped;
|
|
30
|
+
private todo;
|
|
31
|
+
private lineLength;
|
|
32
|
+
onRunStart(files: string[]): void;
|
|
33
|
+
onTestResult(result: TestResult): void;
|
|
34
|
+
onRunEnd(_results: TestResult[]): void;
|
|
35
|
+
private c;
|
|
36
|
+
}
|
|
37
|
+
export interface JsonTestResult {
|
|
38
|
+
status: 'passed' | 'failed' | 'skipped' | 'todo';
|
|
39
|
+
name: string;
|
|
40
|
+
suite: string;
|
|
41
|
+
duration: number;
|
|
42
|
+
error?: {
|
|
43
|
+
message: string;
|
|
44
|
+
stack?: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface JsonReport {
|
|
48
|
+
summary: {
|
|
49
|
+
total: number;
|
|
50
|
+
passed: number;
|
|
51
|
+
failed: number;
|
|
52
|
+
skipped: number;
|
|
53
|
+
todo: number;
|
|
54
|
+
duration: number;
|
|
55
|
+
};
|
|
56
|
+
tests: JsonTestResult[];
|
|
57
|
+
}
|
|
58
|
+
export declare class JsonReporter {
|
|
59
|
+
private startTime;
|
|
60
|
+
private results;
|
|
61
|
+
onRunStart(_files: string[]): void;
|
|
62
|
+
onTestResult(result: TestResult): void;
|
|
63
|
+
onRunEnd(results: TestResult[]): void;
|
|
64
|
+
}
|
|
65
|
+
export declare class VerboseReporter {
|
|
66
|
+
private currentSuite;
|
|
67
|
+
onRunStart(_files: string[]): void;
|
|
68
|
+
onTestResult(result: TestResult): void;
|
|
69
|
+
onRunEnd(results: TestResult[]): void;
|
|
70
|
+
}
|
|
71
|
+
export declare function formatErrorStack(error: Error): string;
|
|
72
|
+
export declare function formatProgress(current: number, total: number): string;
|
|
73
|
+
//# sourceMappingURL=test-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-reporter.d.ts","sourceRoot":"","sources":["../src/test-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiHjD,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAAa;gBAEnB,OAAO,GAAE,mBAAwB;IAQ7C,OAAO,CAAC,CAAC;IAIT,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;IAO1B,YAAY,CAAC,MAAM,EAAE,UAAU;IA6O/B,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;CAsBjC;AAMD,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IAEvB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;IAI1B,YAAY,CAAC,MAAM,EAAE,UAAU;IAqB/B,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE;IAI/B,OAAO,CAAC,CAAC;CAGZ;AAMD,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAoB;IAEnC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE;IAK3B,YAAY,CAAC,MAAM,EAAE,UAAU;IAI/B,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;CAwBjC;AAMD,qBAAa,eAAe;IACxB,OAAO,CAAC,YAAY,CAAc;IAElC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE;IAI3B,YAAY,CAAC,MAAM,EAAE,UAAU;IAuB/B,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;CAmBjC;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAYrD;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrE"}
|