@libraz/coverwise 1.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/LICENSE +191 -0
- package/README.md +119 -0
- package/README.npm.md +119 -0
- package/dist/coverwise.js +2 -0
- package/dist/coverwise.wasm +0 -0
- package/dist/js/constraint.d.ts +78 -0
- package/dist/js/constraint.d.ts.map +1 -0
- package/dist/js/constraint.js +213 -0
- package/dist/js/constraint.js.map +1 -0
- package/dist/js/index.d.ts +94 -0
- package/dist/js/index.d.ts.map +1 -0
- package/dist/js/index.js +164 -0
- package/dist/js/index.js.map +1 -0
- package/dist/js/pure/adapter.d.ts +40 -0
- package/dist/js/pure/adapter.d.ts.map +1 -0
- package/dist/js/pure/adapter.js +207 -0
- package/dist/js/pure/adapter.js.map +1 -0
- package/dist/js/pure/index.d.ts +83 -0
- package/dist/js/pure/index.d.ts.map +1 -0
- package/dist/js/pure/index.js +132 -0
- package/dist/js/pure/index.js.map +1 -0
- package/dist/js/types.d.ts +132 -0
- package/dist/js/types.d.ts.map +1 -0
- package/dist/js/types.js +3 -0
- package/dist/js/types.js.map +1 -0
- package/dist/src/ts/algo/greedy.d.ts +9 -0
- package/dist/src/ts/algo/greedy.d.ts.map +1 -0
- package/dist/src/ts/algo/greedy.js +137 -0
- package/dist/src/ts/algo/greedy.js.map +1 -0
- package/dist/src/ts/algo/index.d.ts +2 -0
- package/dist/src/ts/algo/index.d.ts.map +1 -0
- package/dist/src/ts/algo/index.js +2 -0
- package/dist/src/ts/algo/index.js.map +1 -0
- package/dist/src/ts/core/coverage-engine.d.ts +40 -0
- package/dist/src/ts/core/coverage-engine.d.ts.map +1 -0
- package/dist/src/ts/core/coverage-engine.js +366 -0
- package/dist/src/ts/core/coverage-engine.js.map +1 -0
- package/dist/src/ts/core/generator.d.ts +6 -0
- package/dist/src/ts/core/generator.d.ts.map +1 -0
- package/dist/src/ts/core/generator.js +394 -0
- package/dist/src/ts/core/generator.js.map +1 -0
- package/dist/src/ts/core/index.d.ts +3 -0
- package/dist/src/ts/core/index.d.ts.map +1 -0
- package/dist/src/ts/core/index.js +3 -0
- package/dist/src/ts/core/index.js.map +1 -0
- package/dist/src/ts/model/boundary.d.ts +29 -0
- package/dist/src/ts/model/boundary.d.ts.map +1 -0
- package/dist/src/ts/model/boundary.js +102 -0
- package/dist/src/ts/model/boundary.js.map +1 -0
- package/dist/src/ts/model/constraint-ast.d.ts +152 -0
- package/dist/src/ts/model/constraint-ast.d.ts.map +1 -0
- package/dist/src/ts/model/constraint-ast.js +384 -0
- package/dist/src/ts/model/constraint-ast.js.map +1 -0
- package/dist/src/ts/model/constraint-parser.d.ts +49 -0
- package/dist/src/ts/model/constraint-parser.d.ts.map +1 -0
- package/dist/src/ts/model/constraint-parser.js +831 -0
- package/dist/src/ts/model/constraint-parser.js.map +1 -0
- package/dist/src/ts/model/error.d.ts +19 -0
- package/dist/src/ts/model/error.d.ts.map +1 -0
- package/dist/src/ts/model/error.js +19 -0
- package/dist/src/ts/model/error.js.map +1 -0
- package/dist/src/ts/model/generate-options.d.ts +82 -0
- package/dist/src/ts/model/generate-options.d.ts.map +1 -0
- package/dist/src/ts/model/generate-options.js +52 -0
- package/dist/src/ts/model/generate-options.js.map +1 -0
- package/dist/src/ts/model/index.d.ts +6 -0
- package/dist/src/ts/model/index.d.ts.map +1 -0
- package/dist/src/ts/model/index.js +6 -0
- package/dist/src/ts/model/index.js.map +1 -0
- package/dist/src/ts/model/parameter.d.ts +65 -0
- package/dist/src/ts/model/parameter.d.ts.map +1 -0
- package/dist/src/ts/model/parameter.js +157 -0
- package/dist/src/ts/model/parameter.js.map +1 -0
- package/dist/src/ts/model/test-case.d.ts +67 -0
- package/dist/src/ts/model/test-case.d.ts.map +1 -0
- package/dist/src/ts/model/test-case.js +28 -0
- package/dist/src/ts/model/test-case.js.map +1 -0
- package/dist/src/ts/util/bitset.d.ts +14 -0
- package/dist/src/ts/util/bitset.d.ts.map +1 -0
- package/dist/src/ts/util/bitset.js +66 -0
- package/dist/src/ts/util/bitset.js.map +1 -0
- package/dist/src/ts/util/combinatorics.d.ts +4 -0
- package/dist/src/ts/util/combinatorics.d.ts.map +1 -0
- package/dist/src/ts/util/combinatorics.js +60 -0
- package/dist/src/ts/util/combinatorics.js.map +1 -0
- package/dist/src/ts/util/index.d.ts +5 -0
- package/dist/src/ts/util/index.d.ts.map +1 -0
- package/dist/src/ts/util/index.js +7 -0
- package/dist/src/ts/util/index.js.map +1 -0
- package/dist/src/ts/util/rng.d.ts +13 -0
- package/dist/src/ts/util/rng.d.ts.map +1 -0
- package/dist/src/ts/util/rng.js +112 -0
- package/dist/src/ts/util/rng.js.map +1 -0
- package/dist/src/ts/util/string_util.d.ts +3 -0
- package/dist/src/ts/util/string_util.d.ts.map +1 -0
- package/dist/src/ts/util/string_util.js +25 -0
- package/dist/src/ts/util/string_util.js.map +1 -0
- package/dist/src/ts/validator/constraint-validator.d.ts +34 -0
- package/dist/src/ts/validator/constraint-validator.d.ts.map +1 -0
- package/dist/src/ts/validator/constraint-validator.js +51 -0
- package/dist/src/ts/validator/constraint-validator.js.map +1 -0
- package/dist/src/ts/validator/coverage-validator.d.ts +42 -0
- package/dist/src/ts/validator/coverage-validator.d.ts.map +1 -0
- package/dist/src/ts/validator/coverage-validator.js +230 -0
- package/dist/src/ts/validator/coverage-validator.js.map +1 -0
- package/dist/src/ts/validator/index.d.ts +3 -0
- package/dist/src/ts/validator/index.d.ts.map +1 -0
- package/dist/src/ts/validator/index.js +3 -0
- package/dist/src/ts/validator/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/** Sentinel value indicating an unassigned parameter. */
|
|
2
|
+
export declare const UNASSIGNED = 4294967295;
|
|
3
|
+
/** Result of evaluating a constraint against a partial assignment. */
|
|
4
|
+
export declare enum ConstraintResult {
|
|
5
|
+
True = "true",
|
|
6
|
+
False = "false",
|
|
7
|
+
Unknown = "unknown"
|
|
8
|
+
}
|
|
9
|
+
/** Base interface for constraint AST nodes. */
|
|
10
|
+
export interface ConstraintNode {
|
|
11
|
+
/** Evaluate this constraint against a (possibly partial) assignment. */
|
|
12
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
13
|
+
}
|
|
14
|
+
/** Equality comparison: param_index == value_index. */
|
|
15
|
+
export declare class EqualsNode implements ConstraintNode {
|
|
16
|
+
readonly paramIndex: number;
|
|
17
|
+
readonly valueIndex: number;
|
|
18
|
+
constructor(paramIndex: number, valueIndex: number);
|
|
19
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
20
|
+
}
|
|
21
|
+
/** Inequality comparison: param_index != value_index. */
|
|
22
|
+
export declare class NotEqualsNode implements ConstraintNode {
|
|
23
|
+
readonly paramIndex: number;
|
|
24
|
+
readonly valueIndex: number;
|
|
25
|
+
constructor(paramIndex: number, valueIndex: number);
|
|
26
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
27
|
+
}
|
|
28
|
+
/** Logical AND of two sub-expressions. */
|
|
29
|
+
export declare class AndNode implements ConstraintNode {
|
|
30
|
+
private readonly left;
|
|
31
|
+
private readonly right;
|
|
32
|
+
constructor(left: ConstraintNode, right: ConstraintNode);
|
|
33
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
34
|
+
}
|
|
35
|
+
/** Logical OR of two sub-expressions. */
|
|
36
|
+
export declare class OrNode implements ConstraintNode {
|
|
37
|
+
private readonly left;
|
|
38
|
+
private readonly right;
|
|
39
|
+
constructor(left: ConstraintNode, right: ConstraintNode);
|
|
40
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
41
|
+
}
|
|
42
|
+
/** Logical NOT of a sub-expression. */
|
|
43
|
+
export declare class NotNode implements ConstraintNode {
|
|
44
|
+
private readonly child;
|
|
45
|
+
constructor(child: ConstraintNode);
|
|
46
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
47
|
+
}
|
|
48
|
+
/** Logical implication: antecedent IMPLIES consequent (= NOT antecedent OR consequent). */
|
|
49
|
+
export declare class ImpliesNode implements ConstraintNode {
|
|
50
|
+
private readonly antecedent;
|
|
51
|
+
private readonly consequent;
|
|
52
|
+
constructor(antecedent: ConstraintNode, consequent: ConstraintNode);
|
|
53
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* IF/THEN/ELSE ternary constraint.
|
|
57
|
+
*
|
|
58
|
+
* Three-valued evaluation:
|
|
59
|
+
* - condition=True -> evaluate then_branch
|
|
60
|
+
* - condition=False -> evaluate else_branch
|
|
61
|
+
* - condition=Unknown -> if both branches agree, use that; else Unknown
|
|
62
|
+
*/
|
|
63
|
+
export declare class IfThenElseNode implements ConstraintNode {
|
|
64
|
+
private readonly condition;
|
|
65
|
+
private readonly thenBranch;
|
|
66
|
+
private readonly elseBranch;
|
|
67
|
+
constructor(condition: ConstraintNode, thenBranch: ConstraintNode, elseBranch: ConstraintNode);
|
|
68
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
69
|
+
}
|
|
70
|
+
/** Relational comparison operators. */
|
|
71
|
+
export declare enum RelOp {
|
|
72
|
+
Less = "<",
|
|
73
|
+
LessEqual = "<=",
|
|
74
|
+
Greater = ">",
|
|
75
|
+
GreaterEqual = ">="
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Relational comparison of a parameter's numeric value against a literal or another parameter.
|
|
79
|
+
*
|
|
80
|
+
* Compares parameter values as numbers. If a value cannot be parsed as numeric,
|
|
81
|
+
* the result is False.
|
|
82
|
+
*/
|
|
83
|
+
export declare class RelationalNode implements ConstraintNode {
|
|
84
|
+
private readonly leftParam;
|
|
85
|
+
private readonly op;
|
|
86
|
+
private readonly isParamComparison;
|
|
87
|
+
private readonly literal;
|
|
88
|
+
private readonly rightParam;
|
|
89
|
+
private readonly leftValues;
|
|
90
|
+
private readonly rightValues;
|
|
91
|
+
/** Compare a parameter value against a literal numeric value. */
|
|
92
|
+
static fromLiteral(paramIndex: number, op: RelOp, literal: number, paramValues: string[]): RelationalNode;
|
|
93
|
+
/** Compare two parameter values against each other. */
|
|
94
|
+
static fromParams(leftParam: number, op: RelOp, rightParam: number, leftValues: string[], rightValues: string[]): RelationalNode;
|
|
95
|
+
private constructor();
|
|
96
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
97
|
+
private compareValues;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* IN-set membership test: param IN {val1, val2, ...}.
|
|
101
|
+
*
|
|
102
|
+
* Three-valued: unassigned -> Unknown, value in set -> True, else False.
|
|
103
|
+
*/
|
|
104
|
+
export declare class InNode implements ConstraintNode {
|
|
105
|
+
private readonly paramIndex;
|
|
106
|
+
private readonly valueIndices;
|
|
107
|
+
constructor(paramIndex: number, valueIndices: number[]);
|
|
108
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* LIKE pattern matching: param LIKE pattern.
|
|
112
|
+
*
|
|
113
|
+
* Supports `*` (any string) and `?` (single character) wildcards.
|
|
114
|
+
* Matching results are precomputed at construction time for efficiency.
|
|
115
|
+
*/
|
|
116
|
+
export declare class LikeNode implements ConstraintNode {
|
|
117
|
+
private readonly paramIndex;
|
|
118
|
+
private readonly matches;
|
|
119
|
+
constructor(paramIndex: number, pattern: string, paramValues: string[]);
|
|
120
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
121
|
+
}
|
|
122
|
+
/** Test whether a string matches a glob pattern (* and ?). */
|
|
123
|
+
export declare function globMatch(pattern: string, text: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Parameter-to-parameter equality comparison.
|
|
126
|
+
*
|
|
127
|
+
* Compares the string values of two parameters. Equal if the string
|
|
128
|
+
* representations are identical.
|
|
129
|
+
*/
|
|
130
|
+
export declare class ParamEqualsNode implements ConstraintNode {
|
|
131
|
+
private readonly leftParam;
|
|
132
|
+
private readonly rightParam;
|
|
133
|
+
private readonly leftValues;
|
|
134
|
+
private readonly rightValues;
|
|
135
|
+
constructor(leftParam: number, rightParam: number, leftValues: string[], rightValues: string[]);
|
|
136
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parameter-to-parameter inequality comparison.
|
|
140
|
+
*
|
|
141
|
+
* Compares the string values of two parameters. Not equal if the string
|
|
142
|
+
* representations differ.
|
|
143
|
+
*/
|
|
144
|
+
export declare class ParamNotEqualsNode implements ConstraintNode {
|
|
145
|
+
private readonly leftParam;
|
|
146
|
+
private readonly rightParam;
|
|
147
|
+
private readonly leftValues;
|
|
148
|
+
private readonly rightValues;
|
|
149
|
+
constructor(leftParam: number, rightParam: number, leftValues: string[], rightValues: string[]);
|
|
150
|
+
evaluate(assignment: number[]): ConstraintResult;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=constraint-ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-ast.d.ts","sourceRoot":"","sources":["../../../../src/ts/model/constraint-ast.ts"],"names":[],"mappings":"AAEA,yDAAyD;AACzD,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,sEAAsE;AACtE,oBAAY,gBAAgB;IAC1B,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAgBD,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;CAClD;AAED,uDAAuD;AACvD,qBAAa,UAAW,YAAW,cAAc;IAE7C,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;IAG7B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAUjD;AAED,yDAAyD;AACzD,qBAAa,aAAc,YAAW,cAAc;IAEhD,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;IAG7B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAUjD;AAED,0CAA0C;AAC1C,qBAAa,OAAQ,YAAW,cAAc;IAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc;IAGxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAcjD;AAED,yCAAyC;AACzC,qBAAa,MAAO,YAAW,cAAc;IAEzC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc;IAGxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAcjD;AAED,uCAAuC;AACvC,qBAAa,OAAQ,YAAW,cAAc;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAUjD;AAED,2FAA2F;AAC3F,qBAAa,WAAY,YAAW,cAAc;IAE9C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc;IAG7C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAejD;AAED;;;;;;;GAOG;AACH,qBAAa,cAAe,YAAW,cAAc;IAEjD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc;IAG7C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAgBjD;AAED,uCAAuC;AACvC,oBAAY,KAAK;IACf,IAAI,MAAM;IACV,SAAS,OAAO;IAChB,OAAO,MAAM;IACb,YAAY,OAAO;CACpB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAW;IAEvC,iEAAiE;IACjE,MAAM,CAAC,WAAW,CAChB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,cAAc;IAIjB,uDAAuD;IACvD,MAAM,CAAC,UAAU,CACf,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,KAAK,EACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,MAAM,EAAE,GACpB,cAAc;IAIjB,OAAO;IAkBP,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;IAkChD,OAAO,CAAC,aAAa;CAYtB;AAED;;;;GAIG;AACH,qBAAa,MAAO,YAAW,cAAc;IAEzC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE;IAGzC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAejD;AAED;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAExB,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;IAKtE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAajD;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA2BhE;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,cAAc;IAElD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,MAAM,EAAE;IAGxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAgBjD;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAErD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,MAAM,EAAE;IAGxC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB;CAgBjD"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/// AST-based constraint representation for combinatorial test generation.
|
|
2
|
+
/** Sentinel value indicating an unassigned parameter. */
|
|
3
|
+
export const UNASSIGNED = 0xffffffff;
|
|
4
|
+
/** Result of evaluating a constraint against a partial assignment. */
|
|
5
|
+
export var ConstraintResult;
|
|
6
|
+
(function (ConstraintResult) {
|
|
7
|
+
ConstraintResult["True"] = "true";
|
|
8
|
+
ConstraintResult["False"] = "false";
|
|
9
|
+
ConstraintResult["Unknown"] = "unknown";
|
|
10
|
+
})(ConstraintResult || (ConstraintResult = {}));
|
|
11
|
+
/** Check if a string can be parsed as a finite number. */
|
|
12
|
+
function isNumeric(s) {
|
|
13
|
+
if (s.length === 0) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const n = Number(s);
|
|
17
|
+
return !Number.isNaN(n) && Number.isFinite(n);
|
|
18
|
+
}
|
|
19
|
+
/** Parse a string as a number. */
|
|
20
|
+
function toDouble(s) {
|
|
21
|
+
return Number(s);
|
|
22
|
+
}
|
|
23
|
+
/** Equality comparison: param_index == value_index. */
|
|
24
|
+
export class EqualsNode {
|
|
25
|
+
constructor(paramIndex, valueIndex) {
|
|
26
|
+
this.paramIndex = paramIndex;
|
|
27
|
+
this.valueIndex = valueIndex;
|
|
28
|
+
}
|
|
29
|
+
evaluate(assignment) {
|
|
30
|
+
if (this.paramIndex >= assignment.length) {
|
|
31
|
+
return ConstraintResult.Unknown;
|
|
32
|
+
}
|
|
33
|
+
const val = assignment[this.paramIndex];
|
|
34
|
+
if (val === UNASSIGNED) {
|
|
35
|
+
return ConstraintResult.Unknown;
|
|
36
|
+
}
|
|
37
|
+
return val === this.valueIndex ? ConstraintResult.True : ConstraintResult.False;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Inequality comparison: param_index != value_index. */
|
|
41
|
+
export class NotEqualsNode {
|
|
42
|
+
constructor(paramIndex, valueIndex) {
|
|
43
|
+
this.paramIndex = paramIndex;
|
|
44
|
+
this.valueIndex = valueIndex;
|
|
45
|
+
}
|
|
46
|
+
evaluate(assignment) {
|
|
47
|
+
if (this.paramIndex >= assignment.length) {
|
|
48
|
+
return ConstraintResult.Unknown;
|
|
49
|
+
}
|
|
50
|
+
const val = assignment[this.paramIndex];
|
|
51
|
+
if (val === UNASSIGNED) {
|
|
52
|
+
return ConstraintResult.Unknown;
|
|
53
|
+
}
|
|
54
|
+
return val !== this.valueIndex ? ConstraintResult.True : ConstraintResult.False;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Logical AND of two sub-expressions. */
|
|
58
|
+
export class AndNode {
|
|
59
|
+
constructor(left, right) {
|
|
60
|
+
this.left = left;
|
|
61
|
+
this.right = right;
|
|
62
|
+
}
|
|
63
|
+
evaluate(assignment) {
|
|
64
|
+
const l = this.left.evaluate(assignment);
|
|
65
|
+
if (l === ConstraintResult.False) {
|
|
66
|
+
return ConstraintResult.False;
|
|
67
|
+
}
|
|
68
|
+
const r = this.right.evaluate(assignment);
|
|
69
|
+
if (r === ConstraintResult.False) {
|
|
70
|
+
return ConstraintResult.False;
|
|
71
|
+
}
|
|
72
|
+
if (l === ConstraintResult.True && r === ConstraintResult.True) {
|
|
73
|
+
return ConstraintResult.True;
|
|
74
|
+
}
|
|
75
|
+
return ConstraintResult.Unknown;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Logical OR of two sub-expressions. */
|
|
79
|
+
export class OrNode {
|
|
80
|
+
constructor(left, right) {
|
|
81
|
+
this.left = left;
|
|
82
|
+
this.right = right;
|
|
83
|
+
}
|
|
84
|
+
evaluate(assignment) {
|
|
85
|
+
const l = this.left.evaluate(assignment);
|
|
86
|
+
if (l === ConstraintResult.True) {
|
|
87
|
+
return ConstraintResult.True;
|
|
88
|
+
}
|
|
89
|
+
const r = this.right.evaluate(assignment);
|
|
90
|
+
if (r === ConstraintResult.True) {
|
|
91
|
+
return ConstraintResult.True;
|
|
92
|
+
}
|
|
93
|
+
if (l === ConstraintResult.False && r === ConstraintResult.False) {
|
|
94
|
+
return ConstraintResult.False;
|
|
95
|
+
}
|
|
96
|
+
return ConstraintResult.Unknown;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Logical NOT of a sub-expression. */
|
|
100
|
+
export class NotNode {
|
|
101
|
+
constructor(child) {
|
|
102
|
+
this.child = child;
|
|
103
|
+
}
|
|
104
|
+
evaluate(assignment) {
|
|
105
|
+
const c = this.child.evaluate(assignment);
|
|
106
|
+
if (c === ConstraintResult.True) {
|
|
107
|
+
return ConstraintResult.False;
|
|
108
|
+
}
|
|
109
|
+
if (c === ConstraintResult.False) {
|
|
110
|
+
return ConstraintResult.True;
|
|
111
|
+
}
|
|
112
|
+
return ConstraintResult.Unknown;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Logical implication: antecedent IMPLIES consequent (= NOT antecedent OR consequent). */
|
|
116
|
+
export class ImpliesNode {
|
|
117
|
+
constructor(antecedent, consequent) {
|
|
118
|
+
this.antecedent = antecedent;
|
|
119
|
+
this.consequent = consequent;
|
|
120
|
+
}
|
|
121
|
+
evaluate(assignment) {
|
|
122
|
+
const ante = this.antecedent.evaluate(assignment);
|
|
123
|
+
if (ante === ConstraintResult.False) {
|
|
124
|
+
return ConstraintResult.True;
|
|
125
|
+
}
|
|
126
|
+
const cons = this.consequent.evaluate(assignment);
|
|
127
|
+
if (ante === ConstraintResult.True) {
|
|
128
|
+
return cons;
|
|
129
|
+
}
|
|
130
|
+
// ante is Unknown
|
|
131
|
+
if (cons === ConstraintResult.True) {
|
|
132
|
+
return ConstraintResult.True;
|
|
133
|
+
}
|
|
134
|
+
return ConstraintResult.Unknown;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* IF/THEN/ELSE ternary constraint.
|
|
139
|
+
*
|
|
140
|
+
* Three-valued evaluation:
|
|
141
|
+
* - condition=True -> evaluate then_branch
|
|
142
|
+
* - condition=False -> evaluate else_branch
|
|
143
|
+
* - condition=Unknown -> if both branches agree, use that; else Unknown
|
|
144
|
+
*/
|
|
145
|
+
export class IfThenElseNode {
|
|
146
|
+
constructor(condition, thenBranch, elseBranch) {
|
|
147
|
+
this.condition = condition;
|
|
148
|
+
this.thenBranch = thenBranch;
|
|
149
|
+
this.elseBranch = elseBranch;
|
|
150
|
+
}
|
|
151
|
+
evaluate(assignment) {
|
|
152
|
+
const cond = this.condition.evaluate(assignment);
|
|
153
|
+
if (cond === ConstraintResult.True) {
|
|
154
|
+
return this.thenBranch.evaluate(assignment);
|
|
155
|
+
}
|
|
156
|
+
if (cond === ConstraintResult.False) {
|
|
157
|
+
return this.elseBranch.evaluate(assignment);
|
|
158
|
+
}
|
|
159
|
+
// condition is Unknown: evaluate both branches
|
|
160
|
+
const thenResult = this.thenBranch.evaluate(assignment);
|
|
161
|
+
const elseResult = this.elseBranch.evaluate(assignment);
|
|
162
|
+
if (thenResult === elseResult) {
|
|
163
|
+
return thenResult;
|
|
164
|
+
}
|
|
165
|
+
return ConstraintResult.Unknown;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Relational comparison operators. */
|
|
169
|
+
export var RelOp;
|
|
170
|
+
(function (RelOp) {
|
|
171
|
+
RelOp["Less"] = "<";
|
|
172
|
+
RelOp["LessEqual"] = "<=";
|
|
173
|
+
RelOp["Greater"] = ">";
|
|
174
|
+
RelOp["GreaterEqual"] = ">=";
|
|
175
|
+
})(RelOp || (RelOp = {}));
|
|
176
|
+
/**
|
|
177
|
+
* Relational comparison of a parameter's numeric value against a literal or another parameter.
|
|
178
|
+
*
|
|
179
|
+
* Compares parameter values as numbers. If a value cannot be parsed as numeric,
|
|
180
|
+
* the result is False.
|
|
181
|
+
*/
|
|
182
|
+
export class RelationalNode {
|
|
183
|
+
/** Compare a parameter value against a literal numeric value. */
|
|
184
|
+
static fromLiteral(paramIndex, op, literal, paramValues) {
|
|
185
|
+
return new RelationalNode(paramIndex, op, false, literal, 0, paramValues, []);
|
|
186
|
+
}
|
|
187
|
+
/** Compare two parameter values against each other. */
|
|
188
|
+
static fromParams(leftParam, op, rightParam, leftValues, rightValues) {
|
|
189
|
+
return new RelationalNode(leftParam, op, true, 0, rightParam, leftValues, rightValues);
|
|
190
|
+
}
|
|
191
|
+
constructor(leftParam, op, isParamComparison, literal, rightParam, leftValues, rightValues) {
|
|
192
|
+
this.leftParam = leftParam;
|
|
193
|
+
this.op = op;
|
|
194
|
+
this.isParamComparison = isParamComparison;
|
|
195
|
+
this.literal = literal;
|
|
196
|
+
this.rightParam = rightParam;
|
|
197
|
+
this.leftValues = leftValues;
|
|
198
|
+
this.rightValues = rightValues;
|
|
199
|
+
}
|
|
200
|
+
evaluate(assignment) {
|
|
201
|
+
if (this.leftParam >= assignment.length) {
|
|
202
|
+
return ConstraintResult.Unknown;
|
|
203
|
+
}
|
|
204
|
+
const leftVal = assignment[this.leftParam];
|
|
205
|
+
if (leftVal === UNASSIGNED) {
|
|
206
|
+
return ConstraintResult.Unknown;
|
|
207
|
+
}
|
|
208
|
+
if (leftVal >= this.leftValues.length || !isNumeric(this.leftValues[leftVal])) {
|
|
209
|
+
return ConstraintResult.False;
|
|
210
|
+
}
|
|
211
|
+
const leftNum = toDouble(this.leftValues[leftVal]);
|
|
212
|
+
if (this.isParamComparison) {
|
|
213
|
+
if (this.rightParam >= assignment.length) {
|
|
214
|
+
return ConstraintResult.Unknown;
|
|
215
|
+
}
|
|
216
|
+
const rightVal = assignment[this.rightParam];
|
|
217
|
+
if (rightVal === UNASSIGNED) {
|
|
218
|
+
return ConstraintResult.Unknown;
|
|
219
|
+
}
|
|
220
|
+
if (rightVal >= this.rightValues.length || !isNumeric(this.rightValues[rightVal])) {
|
|
221
|
+
return ConstraintResult.False;
|
|
222
|
+
}
|
|
223
|
+
const rightNum = toDouble(this.rightValues[rightVal]);
|
|
224
|
+
return this.compareValues(leftNum, rightNum) ? ConstraintResult.True : ConstraintResult.False;
|
|
225
|
+
}
|
|
226
|
+
return this.compareValues(leftNum, this.literal)
|
|
227
|
+
? ConstraintResult.True
|
|
228
|
+
: ConstraintResult.False;
|
|
229
|
+
}
|
|
230
|
+
compareValues(left, right) {
|
|
231
|
+
switch (this.op) {
|
|
232
|
+
case RelOp.Less:
|
|
233
|
+
return left < right;
|
|
234
|
+
case RelOp.LessEqual:
|
|
235
|
+
return left <= right;
|
|
236
|
+
case RelOp.Greater:
|
|
237
|
+
return left > right;
|
|
238
|
+
case RelOp.GreaterEqual:
|
|
239
|
+
return left >= right;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* IN-set membership test: param IN {val1, val2, ...}.
|
|
245
|
+
*
|
|
246
|
+
* Three-valued: unassigned -> Unknown, value in set -> True, else False.
|
|
247
|
+
*/
|
|
248
|
+
export class InNode {
|
|
249
|
+
constructor(paramIndex, valueIndices) {
|
|
250
|
+
this.paramIndex = paramIndex;
|
|
251
|
+
this.valueIndices = valueIndices;
|
|
252
|
+
}
|
|
253
|
+
evaluate(assignment) {
|
|
254
|
+
if (this.paramIndex >= assignment.length) {
|
|
255
|
+
return ConstraintResult.Unknown;
|
|
256
|
+
}
|
|
257
|
+
const val = assignment[this.paramIndex];
|
|
258
|
+
if (val === UNASSIGNED) {
|
|
259
|
+
return ConstraintResult.Unknown;
|
|
260
|
+
}
|
|
261
|
+
for (const vi of this.valueIndices) {
|
|
262
|
+
if (val === vi) {
|
|
263
|
+
return ConstraintResult.True;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return ConstraintResult.False;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* LIKE pattern matching: param LIKE pattern.
|
|
271
|
+
*
|
|
272
|
+
* Supports `*` (any string) and `?` (single character) wildcards.
|
|
273
|
+
* Matching results are precomputed at construction time for efficiency.
|
|
274
|
+
*/
|
|
275
|
+
export class LikeNode {
|
|
276
|
+
constructor(paramIndex, pattern, paramValues) {
|
|
277
|
+
this.paramIndex = paramIndex;
|
|
278
|
+
this.matches = paramValues.map((v) => globMatch(pattern, v));
|
|
279
|
+
}
|
|
280
|
+
evaluate(assignment) {
|
|
281
|
+
if (this.paramIndex >= assignment.length) {
|
|
282
|
+
return ConstraintResult.Unknown;
|
|
283
|
+
}
|
|
284
|
+
const val = assignment[this.paramIndex];
|
|
285
|
+
if (val === UNASSIGNED) {
|
|
286
|
+
return ConstraintResult.Unknown;
|
|
287
|
+
}
|
|
288
|
+
if (val >= this.matches.length) {
|
|
289
|
+
return ConstraintResult.False;
|
|
290
|
+
}
|
|
291
|
+
return this.matches[val] ? ConstraintResult.True : ConstraintResult.False;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/** Test whether a string matches a glob pattern (* and ?). */
|
|
295
|
+
export function globMatch(pattern, text) {
|
|
296
|
+
let pi = 0;
|
|
297
|
+
let ti = 0;
|
|
298
|
+
let starPi = -1;
|
|
299
|
+
let starTi = 0;
|
|
300
|
+
while (ti < text.length) {
|
|
301
|
+
if (pi < pattern.length && (pattern[pi] === '?' || pattern[pi] === text[ti])) {
|
|
302
|
+
pi++;
|
|
303
|
+
ti++;
|
|
304
|
+
}
|
|
305
|
+
else if (pi < pattern.length && pattern[pi] === '*') {
|
|
306
|
+
starPi = pi;
|
|
307
|
+
starTi = ti;
|
|
308
|
+
pi++;
|
|
309
|
+
}
|
|
310
|
+
else if (starPi !== -1) {
|
|
311
|
+
pi = starPi + 1;
|
|
312
|
+
starTi++;
|
|
313
|
+
ti = starTi;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
while (pi < pattern.length && pattern[pi] === '*') {
|
|
320
|
+
pi++;
|
|
321
|
+
}
|
|
322
|
+
return pi === pattern.length;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Parameter-to-parameter equality comparison.
|
|
326
|
+
*
|
|
327
|
+
* Compares the string values of two parameters. Equal if the string
|
|
328
|
+
* representations are identical.
|
|
329
|
+
*/
|
|
330
|
+
export class ParamEqualsNode {
|
|
331
|
+
constructor(leftParam, rightParam, leftValues, rightValues) {
|
|
332
|
+
this.leftParam = leftParam;
|
|
333
|
+
this.rightParam = rightParam;
|
|
334
|
+
this.leftValues = leftValues;
|
|
335
|
+
this.rightValues = rightValues;
|
|
336
|
+
}
|
|
337
|
+
evaluate(assignment) {
|
|
338
|
+
if (this.leftParam >= assignment.length || this.rightParam >= assignment.length) {
|
|
339
|
+
return ConstraintResult.Unknown;
|
|
340
|
+
}
|
|
341
|
+
const lv = assignment[this.leftParam];
|
|
342
|
+
const rv = assignment[this.rightParam];
|
|
343
|
+
if (lv === UNASSIGNED || rv === UNASSIGNED) {
|
|
344
|
+
return ConstraintResult.Unknown;
|
|
345
|
+
}
|
|
346
|
+
if (lv >= this.leftValues.length || rv >= this.rightValues.length) {
|
|
347
|
+
return ConstraintResult.False;
|
|
348
|
+
}
|
|
349
|
+
return this.leftValues[lv] === this.rightValues[rv]
|
|
350
|
+
? ConstraintResult.True
|
|
351
|
+
: ConstraintResult.False;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Parameter-to-parameter inequality comparison.
|
|
356
|
+
*
|
|
357
|
+
* Compares the string values of two parameters. Not equal if the string
|
|
358
|
+
* representations differ.
|
|
359
|
+
*/
|
|
360
|
+
export class ParamNotEqualsNode {
|
|
361
|
+
constructor(leftParam, rightParam, leftValues, rightValues) {
|
|
362
|
+
this.leftParam = leftParam;
|
|
363
|
+
this.rightParam = rightParam;
|
|
364
|
+
this.leftValues = leftValues;
|
|
365
|
+
this.rightValues = rightValues;
|
|
366
|
+
}
|
|
367
|
+
evaluate(assignment) {
|
|
368
|
+
if (this.leftParam >= assignment.length || this.rightParam >= assignment.length) {
|
|
369
|
+
return ConstraintResult.Unknown;
|
|
370
|
+
}
|
|
371
|
+
const lv = assignment[this.leftParam];
|
|
372
|
+
const rv = assignment[this.rightParam];
|
|
373
|
+
if (lv === UNASSIGNED || rv === UNASSIGNED) {
|
|
374
|
+
return ConstraintResult.Unknown;
|
|
375
|
+
}
|
|
376
|
+
if (lv >= this.leftValues.length || rv >= this.rightValues.length) {
|
|
377
|
+
return ConstraintResult.False;
|
|
378
|
+
}
|
|
379
|
+
return this.leftValues[lv] !== this.rightValues[rv]
|
|
380
|
+
? ConstraintResult.True
|
|
381
|
+
: ConstraintResult.False;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=constraint-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-ast.js","sourceRoot":"","sources":["../../../../src/ts/model/constraint-ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ConstraintNode } from './constraint-ast.js';
|
|
2
|
+
import { type ErrorInfo } from './error.js';
|
|
3
|
+
/** Minimal parameter interface required by the constraint parser. */
|
|
4
|
+
export interface Parameter {
|
|
5
|
+
name: string;
|
|
6
|
+
values: string[];
|
|
7
|
+
/** Find a value index by name, checking both primary values and aliases. */
|
|
8
|
+
findValueIndex(name: string, caseSensitive: boolean): number;
|
|
9
|
+
}
|
|
10
|
+
/** Result of parsing a constraint expression. */
|
|
11
|
+
export interface ParseResult {
|
|
12
|
+
constraint: ConstraintNode | null;
|
|
13
|
+
error: ErrorInfo;
|
|
14
|
+
}
|
|
15
|
+
/** Options controlling constraint parsing behavior. */
|
|
16
|
+
export interface ParseOptions {
|
|
17
|
+
/**
|
|
18
|
+
* When false (default), parameter and value name resolution
|
|
19
|
+
* is case-insensitive. When true, exact match is required.
|
|
20
|
+
*/
|
|
21
|
+
caseSensitive: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse a human-readable constraint expression into an AST.
|
|
25
|
+
*
|
|
26
|
+
* Supported syntax examples:
|
|
27
|
+
* "IF os=mac THEN browser!=ie"
|
|
28
|
+
* "IF os=mac THEN browser!=ie ELSE arch!=arm"
|
|
29
|
+
* "NOT (os=win AND browser=safari)"
|
|
30
|
+
* "os=linux IMPLIES arch!=arm"
|
|
31
|
+
* "os=win OR browser=chrome"
|
|
32
|
+
* "NOT os=linux"
|
|
33
|
+
* "version > 3"
|
|
34
|
+
* "env IN {staging, prod}"
|
|
35
|
+
* "browser LIKE chrome*"
|
|
36
|
+
* "start_date < end_date" (parameter-to-parameter comparison)
|
|
37
|
+
*
|
|
38
|
+
* Keywords (case-insensitive): IF, THEN, ELSE, IMPLIES, AND, OR, NOT, IN, LIKE
|
|
39
|
+
* Operators: = != > >= < <=
|
|
40
|
+
* Parentheses: ( )
|
|
41
|
+
* Set literals: { value1, value2, ... }
|
|
42
|
+
*
|
|
43
|
+
* @param expression The constraint string to parse.
|
|
44
|
+
* @param params The parameter definitions (used to resolve names to indices).
|
|
45
|
+
* @param options Parsing options (e.g., case sensitivity). Defaults to case-insensitive.
|
|
46
|
+
* @returns ParseResult with the AST on success, or an error on failure.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseConstraint(expression: string, params: Parameter[], options?: ParseOptions): ParseResult;
|
|
49
|
+
//# sourceMappingURL=constraint-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-parser.d.ts","sourceRoot":"","sources":["../../../../src/ts/model/constraint-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EAapB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAa,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAEhE,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;CAC9D;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;CACxB;AAs8BD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,GAAE,YAAuC,GAC/C,WAAW,CAmBb"}
|