@fieldia/core 0.1.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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/package.json +40 -0
  4. package/schema/page.schema.json +2142 -0
  5. package/src/index.d.mts +15 -0
  6. package/src/index.d.ts +15 -0
  7. package/src/index.js +46 -0
  8. package/src/index.js.map +1 -0
  9. package/src/index.mjs +14 -0
  10. package/src/index.mjs.map +1 -0
  11. package/src/lib/expression/evaluateModifier.d.mts +55 -0
  12. package/src/lib/expression/evaluateModifier.d.ts +55 -0
  13. package/src/lib/expression/evaluateModifier.js +121 -0
  14. package/src/lib/expression/evaluateModifier.js.map +1 -0
  15. package/src/lib/expression/evaluateModifier.mjs +117 -0
  16. package/src/lib/expression/evaluateModifier.mjs.map +1 -0
  17. package/src/lib/expression/evaluator.d.mts +23 -0
  18. package/src/lib/expression/evaluator.d.ts +23 -0
  19. package/src/lib/expression/evaluator.js +122 -0
  20. package/src/lib/expression/evaluator.js.map +1 -0
  21. package/src/lib/expression/evaluator.mjs +118 -0
  22. package/src/lib/expression/evaluator.mjs.map +1 -0
  23. package/src/lib/expression/extractFieldNames.d.mts +41 -0
  24. package/src/lib/expression/extractFieldNames.d.ts +41 -0
  25. package/src/lib/expression/extractFieldNames.js +97 -0
  26. package/src/lib/expression/extractFieldNames.js.map +1 -0
  27. package/src/lib/expression/extractFieldNames.mjs +93 -0
  28. package/src/lib/expression/extractFieldNames.mjs.map +1 -0
  29. package/src/lib/expression/modifier.d.mts +14 -0
  30. package/src/lib/expression/modifier.d.ts +14 -0
  31. package/src/lib/expression/modifier.js +55 -0
  32. package/src/lib/expression/modifier.js.map +1 -0
  33. package/src/lib/expression/modifier.mjs +52 -0
  34. package/src/lib/expression/modifier.mjs.map +1 -0
  35. package/src/lib/expression/parser.d.mts +109 -0
  36. package/src/lib/expression/parser.d.ts +109 -0
  37. package/src/lib/expression/parser.js +317 -0
  38. package/src/lib/expression/parser.js.map +1 -0
  39. package/src/lib/expression/parser.mjs +313 -0
  40. package/src/lib/expression/parser.mjs.map +1 -0
  41. package/src/lib/expression/tokenizer.d.mts +31 -0
  42. package/src/lib/expression/tokenizer.d.ts +31 -0
  43. package/src/lib/expression/tokenizer.js +100 -0
  44. package/src/lib/expression/tokenizer.js.map +1 -0
  45. package/src/lib/expression/tokenizer.mjs +96 -0
  46. package/src/lib/expression/tokenizer.mjs.map +1 -0
  47. package/src/lib/format/field.d.mts +967 -0
  48. package/src/lib/format/field.d.ts +967 -0
  49. package/src/lib/format/field.js +147 -0
  50. package/src/lib/format/field.js.map +1 -0
  51. package/src/lib/format/field.mjs +144 -0
  52. package/src/lib/format/field.mjs.map +1 -0
  53. package/src/lib/format/json-schema.d.mts +6 -0
  54. package/src/lib/format/json-schema.d.ts +6 -0
  55. package/src/lib/format/json-schema.js +14 -0
  56. package/src/lib/format/json-schema.js.map +1 -0
  57. package/src/lib/format/json-schema.mjs +11 -0
  58. package/src/lib/format/json-schema.mjs.map +1 -0
  59. package/src/lib/format/json.d.mts +7 -0
  60. package/src/lib/format/json.d.ts +7 -0
  61. package/src/lib/format/json.js +7 -0
  62. package/src/lib/format/json.js.map +1 -0
  63. package/src/lib/format/json.mjs +4 -0
  64. package/src/lib/format/json.mjs.map +1 -0
  65. package/src/lib/format/layout.d.mts +521 -0
  66. package/src/lib/format/layout.d.ts +521 -0
  67. package/src/lib/format/layout.js +150 -0
  68. package/src/lib/format/layout.js.map +1 -0
  69. package/src/lib/format/layout.mjs +147 -0
  70. package/src/lib/format/layout.mjs.map +1 -0
  71. package/src/lib/format/layout.types.d.mts +22 -0
  72. package/src/lib/format/layout.types.d.ts +22 -0
  73. package/src/lib/format/layout.types.js +3 -0
  74. package/src/lib/format/layout.types.js.map +1 -0
  75. package/src/lib/format/layout.types.mjs +2 -0
  76. package/src/lib/format/layout.types.mjs.map +1 -0
  77. package/src/lib/format/page.d.mts +511 -0
  78. package/src/lib/format/page.d.ts +511 -0
  79. package/src/lib/format/page.js +27 -0
  80. package/src/lib/format/page.js.map +1 -0
  81. package/src/lib/format/page.mjs +24 -0
  82. package/src/lib/format/page.mjs.map +1 -0
  83. package/src/lib/format/validate.d.mts +23 -0
  84. package/src/lib/format/validate.d.ts +23 -0
  85. package/src/lib/format/validate.js +210 -0
  86. package/src/lib/format/validate.js.map +1 -0
  87. package/src/lib/format/validate.mjs +207 -0
  88. package/src/lib/format/validate.mjs.map +1 -0
  89. package/src/lib/record/check.d.mts +14 -0
  90. package/src/lib/record/check.d.ts +14 -0
  91. package/src/lib/record/check.js +167 -0
  92. package/src/lib/record/check.js.map +1 -0
  93. package/src/lib/record/check.mjs +163 -0
  94. package/src/lib/record/check.mjs.map +1 -0
  95. package/src/lib/record/data-source.d.mts +109 -0
  96. package/src/lib/record/data-source.d.ts +109 -0
  97. package/src/lib/record/data-source.js +3 -0
  98. package/src/lib/record/data-source.js.map +1 -0
  99. package/src/lib/record/data-source.mjs +2 -0
  100. package/src/lib/record/data-source.mjs.map +1 -0
  101. package/src/lib/record/form.d.mts +106 -0
  102. package/src/lib/record/form.d.ts +106 -0
  103. package/src/lib/record/form.js +545 -0
  104. package/src/lib/record/form.js.map +1 -0
  105. package/src/lib/record/form.mjs +542 -0
  106. package/src/lib/record/form.mjs.map +1 -0
  107. package/src/lib/record/memory-data-source.d.mts +28 -0
  108. package/src/lib/record/memory-data-source.d.ts +28 -0
  109. package/src/lib/record/memory-data-source.js +132 -0
  110. package/src/lib/record/memory-data-source.js.map +1 -0
  111. package/src/lib/record/memory-data-source.mjs +129 -0
  112. package/src/lib/record/memory-data-source.mjs.map +1 -0
  113. package/src/lib/record/messages.d.mts +35 -0
  114. package/src/lib/record/messages.d.ts +35 -0
  115. package/src/lib/record/messages.js +111 -0
  116. package/src/lib/record/messages.js.map +1 -0
  117. package/src/lib/record/messages.mjs +107 -0
  118. package/src/lib/record/messages.mjs.map +1 -0
  119. package/src/lib/record/scheduler.d.mts +12 -0
  120. package/src/lib/record/scheduler.d.ts +12 -0
  121. package/src/lib/record/scheduler.js +16 -0
  122. package/src/lib/record/scheduler.js.map +1 -0
  123. package/src/lib/record/scheduler.mjs +12 -0
  124. package/src/lib/record/scheduler.mjs.map +1 -0
  125. package/src/lib/record/values.d.mts +54 -0
  126. package/src/lib/record/values.d.ts +54 -0
  127. package/src/lib/record/values.js +78 -0
  128. package/src/lib/record/values.js.map +1 -0
  129. package/src/lib/record/values.mjs +71 -0
  130. package/src/lib/record/values.mjs.map +1 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Expression parser for modifiers, ported from the React form engine.
3
+ *
4
+ * Recursive descent parser that converts tokens into an Abstract Syntax Tree (AST).
5
+ * Implements Python-like operator precedence:
6
+ * 1. OR (lowest precedence)
7
+ * 2. AND
8
+ * 3. NOT
9
+ * 4. Comparison operators (==, !=, <, >, <=, >=, in, not in)
10
+ * 5. Values/Identifiers (highest precedence)
11
+ */
12
+ import { type Token } from './tokenizer';
13
+ /**
14
+ * AST Node Types
15
+ */
16
+ export type ASTNode = BinaryOpNode | UnaryOpNode | LiteralNode | IdentifierNode;
17
+ export interface BinaryOpNode {
18
+ type: 'BinaryOp';
19
+ operator: string;
20
+ left: ASTNode;
21
+ right: ASTNode;
22
+ }
23
+ export interface UnaryOpNode {
24
+ type: 'UnaryOp';
25
+ operator: string;
26
+ operand: ASTNode;
27
+ }
28
+ export interface LiteralNode {
29
+ type: 'Literal';
30
+ value: unknown;
31
+ }
32
+ export interface IdentifierNode {
33
+ type: 'Identifier';
34
+ name: string;
35
+ }
36
+ /**
37
+ * Recursive Descent Expression Parser
38
+ */
39
+ export declare class ExpressionParser {
40
+ private tokens;
41
+ private position;
42
+ constructor(tokens: Token[]);
43
+ /**
44
+ * Parse tokens into an AST
45
+ */
46
+ parse(): ASTNode;
47
+ /**
48
+ * Parse OR expressions (lowest precedence)
49
+ * or_expr: and_expr ('or' and_expr)*
50
+ */
51
+ private parseOr;
52
+ /**
53
+ * Parse AND expressions
54
+ * and_expr: not_expr ('and' not_expr)*
55
+ */
56
+ private parseAnd;
57
+ /**
58
+ * Parse NOT expressions
59
+ * not_expr: 'not' comparison | comparison
60
+ */
61
+ private parseNot;
62
+ /**
63
+ * Parse comparison expressions
64
+ * comparison: value (comp_op value)?
65
+ * comp_op: '==' | '!=' | '<>' | '<' | '>' | '<=' | '>=' | 'in' | 'not in'
66
+ */
67
+ private parseComparison;
68
+ /**
69
+ * Parse value expressions (highest precedence)
70
+ * value: '(' or_expr ')' | literal | identifier
71
+ */
72
+ private parseValue;
73
+ /**
74
+ * Check if current token matches any of the given types/values
75
+ */
76
+ private match;
77
+ /**
78
+ * Match logical operators (case-insensitive)
79
+ */
80
+ private matchLogical;
81
+ /**
82
+ * Match comparison operators (case-insensitive)
83
+ */
84
+ private matchOperator;
85
+ /**
86
+ * Check if current token has given type
87
+ */
88
+ private check;
89
+ /**
90
+ * Consume current token and advance
91
+ */
92
+ private advance;
93
+ /**
94
+ * Get current token without advancing
95
+ */
96
+ private peek;
97
+ /**
98
+ * Get previous token
99
+ */
100
+ private previous;
101
+ /**
102
+ * Check if we've consumed all tokens
103
+ */
104
+ private isAtEnd;
105
+ /**
106
+ * Consume a token of specific type/value or throw error
107
+ */
108
+ private consume;
109
+ }
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ /**
3
+ * Expression parser for modifiers, ported from the React form engine.
4
+ *
5
+ * Recursive descent parser that converts tokens into an Abstract Syntax Tree (AST).
6
+ * Implements Python-like operator precedence:
7
+ * 1. OR (lowest precedence)
8
+ * 2. AND
9
+ * 3. NOT
10
+ * 4. Comparison operators (==, !=, <, >, <=, >=, in, not in)
11
+ * 5. Values/Identifiers (highest precedence)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ExpressionParser = void 0;
15
+ const tokenizer_1 = require("./tokenizer");
16
+ /**
17
+ * Recursive Descent Expression Parser
18
+ */
19
+ class ExpressionParser {
20
+ tokens;
21
+ position = 0;
22
+ constructor(tokens) {
23
+ this.tokens = tokens;
24
+ }
25
+ /**
26
+ * Parse tokens into an AST
27
+ */
28
+ parse() {
29
+ if (this.tokens.length === 0) {
30
+ throw new Error('Cannot parse empty expression');
31
+ }
32
+ const ast = this.parseOr();
33
+ // Ensure all tokens were consumed
34
+ if (!this.isAtEnd()) {
35
+ throw new Error(`Unexpected token at position ${this.position}: ${this.peek()?.value}`);
36
+ }
37
+ return ast;
38
+ }
39
+ /**
40
+ * Parse OR expressions (lowest precedence)
41
+ * or_expr: and_expr ('or' and_expr)*
42
+ */
43
+ parseOr() {
44
+ let left = this.parseAnd();
45
+ while (this.matchLogical('or')) {
46
+ const operator = this.previous().value;
47
+ const right = this.parseAnd();
48
+ left = {
49
+ type: 'BinaryOp',
50
+ operator: operator.toLowerCase(),
51
+ left,
52
+ right,
53
+ };
54
+ }
55
+ return left;
56
+ }
57
+ /**
58
+ * Parse AND expressions
59
+ * and_expr: not_expr ('and' not_expr)*
60
+ */
61
+ parseAnd() {
62
+ let left = this.parseNot();
63
+ while (this.matchLogical('and')) {
64
+ const operator = this.previous().value;
65
+ const right = this.parseNot();
66
+ left = {
67
+ type: 'BinaryOp',
68
+ operator: operator.toLowerCase(),
69
+ left,
70
+ right,
71
+ };
72
+ }
73
+ return left;
74
+ }
75
+ /**
76
+ * Parse NOT expressions
77
+ * not_expr: 'not' comparison | comparison
78
+ */
79
+ parseNot() {
80
+ if (this.matchLogical('not')) {
81
+ const operator = this.previous().value;
82
+ const operand = this.parseComparison();
83
+ return {
84
+ type: 'UnaryOp',
85
+ operator: operator.toLowerCase(),
86
+ operand,
87
+ };
88
+ }
89
+ return this.parseComparison();
90
+ }
91
+ /**
92
+ * Parse comparison expressions
93
+ * comparison: value (comp_op value)?
94
+ * comp_op: '==' | '!=' | '<>' | '<' | '>' | '<=' | '>=' | 'in' | 'not in'
95
+ */
96
+ parseComparison() {
97
+ const left = this.parseValue();
98
+ const compOperators = ['==', '!=', '<>', '<', '>', '<=', '>=', 'in', 'not in'];
99
+ if (this.matchOperator(...compOperators)) {
100
+ const operator = this.previous().value;
101
+ const right = this.parseValue();
102
+ return {
103
+ type: 'BinaryOp',
104
+ operator: operator.toLowerCase(),
105
+ left,
106
+ right,
107
+ };
108
+ }
109
+ // If no comparison operator, return value as-is (truthiness check)
110
+ return left;
111
+ }
112
+ /**
113
+ * Parse value expressions (highest precedence)
114
+ * value: '(' or_expr ')' | literal | identifier
115
+ */
116
+ parseValue() {
117
+ // Parenthesized expression
118
+ if (this.match('PAREN', '(')) {
119
+ const expr = this.parseOr();
120
+ this.consume('PAREN', ')', 'Expected closing parenthesis');
121
+ return expr;
122
+ }
123
+ // String literal
124
+ if (this.check('STRING')) {
125
+ const token = this.advance();
126
+ // Remove quotes
127
+ const value = token.value.slice(1, -1);
128
+ return { type: 'Literal', value };
129
+ }
130
+ // True, False, None
131
+ if (this.check('CONSTANT')) {
132
+ const token = this.advance();
133
+ return { type: 'Literal', value: tokenizer_1.CONSTANTS.get(token.value) ?? null };
134
+ }
135
+ // Number literal
136
+ if (this.check('NUMBER')) {
137
+ const token = this.advance();
138
+ return { type: 'Literal', value: Number(token.value) };
139
+ }
140
+ // List literal
141
+ if (this.check('LIST')) {
142
+ const token = this.advance();
143
+ const value = parseListLiteral(token.value);
144
+ return { type: 'Literal', value };
145
+ }
146
+ // Identifier
147
+ if (this.check('IDENTIFIER')) {
148
+ const token = this.advance();
149
+ return { type: 'Identifier', name: token.value };
150
+ }
151
+ throw new Error(`Unexpected token: ${this.peek()?.value || 'EOF'}`);
152
+ }
153
+ // ========== Helper Methods ==========
154
+ /**
155
+ * Check if current token matches any of the given types/values
156
+ */
157
+ match(type, ...values) {
158
+ if (this.check(type)) {
159
+ if (values.length === 0) {
160
+ this.advance();
161
+ return true;
162
+ }
163
+ const token = this.peek();
164
+ if (token && values.includes(token.value)) {
165
+ this.advance();
166
+ return true;
167
+ }
168
+ }
169
+ return false;
170
+ }
171
+ /**
172
+ * Match logical operators (case-insensitive)
173
+ */
174
+ matchLogical(...operators) {
175
+ const token = this.peek();
176
+ if (token && token.type === 'LOGICAL') {
177
+ const lowerValue = token.value.toLowerCase();
178
+ if (operators.map(op => op.toLowerCase()).includes(lowerValue)) {
179
+ this.advance();
180
+ return true;
181
+ }
182
+ }
183
+ return false;
184
+ }
185
+ /**
186
+ * Match comparison operators (case-insensitive)
187
+ */
188
+ matchOperator(...operators) {
189
+ const token = this.peek();
190
+ if (token && token.type === 'OPERATOR') {
191
+ const lowerValue = token.value.toLowerCase();
192
+ if (operators.map(op => op.toLowerCase()).includes(lowerValue)) {
193
+ this.advance();
194
+ return true;
195
+ }
196
+ }
197
+ return false;
198
+ }
199
+ /**
200
+ * Check if current token has given type
201
+ */
202
+ check(type) {
203
+ const token = this.peek();
204
+ return token?.type === type;
205
+ }
206
+ /**
207
+ * Consume current token and advance
208
+ */
209
+ advance() {
210
+ if (!this.isAtEnd()) {
211
+ this.position++;
212
+ }
213
+ return this.previous();
214
+ }
215
+ /**
216
+ * Get current token without advancing
217
+ */
218
+ peek() {
219
+ if (this.isAtEnd()) {
220
+ return null;
221
+ }
222
+ return this.tokens[this.position];
223
+ }
224
+ /**
225
+ * Get previous token
226
+ */
227
+ previous() {
228
+ return this.tokens[this.position - 1];
229
+ }
230
+ /**
231
+ * Check if we've consumed all tokens
232
+ */
233
+ isAtEnd() {
234
+ return this.position >= this.tokens.length;
235
+ }
236
+ /**
237
+ * Consume a token of specific type/value or throw error
238
+ */
239
+ consume(type, value, message) {
240
+ if (this.check(type)) {
241
+ const token = this.peek();
242
+ if (token && token.value === value) {
243
+ return this.advance();
244
+ }
245
+ }
246
+ throw new Error(message);
247
+ }
248
+ }
249
+ exports.ExpressionParser = ExpressionParser;
250
+ /**
251
+ * Parse a list literal string into an array
252
+ * Example: "['draft', 'sent']" -> ['draft', 'sent']
253
+ */
254
+ function parseListLiteral(listStr) {
255
+ try {
256
+ // Remove brackets
257
+ const content = listStr.slice(1, -1).trim();
258
+ if (!content) {
259
+ return [];
260
+ }
261
+ // Split by comma and parse each element
262
+ const elements = [];
263
+ let current = '';
264
+ let inString = false;
265
+ let stringChar = '';
266
+ for (let i = 0; i < content.length; i++) {
267
+ const char = content[i];
268
+ if ((char === "'" || char === '"') && (i === 0 || content[i - 1] !== '\\')) {
269
+ if (!inString) {
270
+ inString = true;
271
+ stringChar = char;
272
+ }
273
+ else if (char === stringChar) {
274
+ inString = false;
275
+ stringChar = '';
276
+ }
277
+ }
278
+ if (char === ',' && !inString) {
279
+ elements.push(parseElement(current.trim()));
280
+ current = '';
281
+ }
282
+ else {
283
+ current += char;
284
+ }
285
+ }
286
+ if (current.trim()) {
287
+ elements.push(parseElement(current.trim()));
288
+ }
289
+ return elements;
290
+ }
291
+ catch (error) {
292
+ // A list that cannot be read is a syntax error, not an empty list.
293
+ throw new Error(`Cannot read the list ${listStr}`, { cause: error });
294
+ }
295
+ }
296
+ /**
297
+ * Parse a single element from a list
298
+ */
299
+ function parseElement(element) {
300
+ // String
301
+ if ((element.startsWith("'") && element.endsWith("'")) ||
302
+ (element.startsWith('"') && element.endsWith('"'))) {
303
+ return element.slice(1, -1);
304
+ }
305
+ // Number
306
+ if (!isNaN(Number(element))) {
307
+ return Number(element);
308
+ }
309
+ // Boolean
310
+ if (element.toLowerCase() === 'true')
311
+ return true;
312
+ if (element.toLowerCase() === 'false')
313
+ return false;
314
+ // Default to string
315
+ return element;
316
+ }
317
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/expression/parser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,2CAAoD;AA8BpD;;GAEG;AACH,MAAa,gBAAgB;IACnB,MAAM,CAAU;IAChB,QAAQ,GAAW,CAAC,CAAC;IAE7B,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAE3B,kCAAkC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACK,OAAO;QACb,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;gBAChC,IAAI;gBACJ,KAAK;aACN,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,QAAQ;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,GAAG;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;gBAChC,IAAI;gBACJ,KAAK;aACN,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,QAAQ;QACd,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;gBAChC,OAAO;aACR,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACK,eAAe;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAE/B,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;gBAChC,IAAI;gBACJ,KAAK;aACN,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,UAAU;QAChB,2BAA2B;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,8BAA8B,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,gBAAgB;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACxE,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QAED,aAAa;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,uCAAuC;IAEvC;;OAEG;IACK,KAAK,CAAC,IAAY,EAAE,GAAG,MAAgB;QAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAG,SAAmB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,GAAG,SAAmB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,IAAI;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,QAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,OAAO;QACb,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe;QAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF;AAtQD,4CAsQC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,GAAG,KAAK,CAAC;oBACjB,UAAU,GAAG,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5C,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,SAAS;IACT,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS;IACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,UAAU;IACV,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEpD,oBAAoB;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC"}