rawsql-ts 0.11.37-beta → 0.11.38-beta

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 (129) hide show
  1. package/dist/esm/index.min.js +54 -51
  2. package/dist/esm/index.min.js.map +3 -3
  3. package/dist/esm/src/models/Lexeme.d.ts +8 -0
  4. package/dist/esm/src/models/SqlComponent.d.ts +20 -0
  5. package/dist/esm/src/models/SqlComponent.js +46 -0
  6. package/dist/esm/src/models/SqlComponent.js.map +1 -1
  7. package/dist/esm/src/parsers/CommandExpressionParser.d.ts +9 -0
  8. package/dist/esm/src/parsers/CommandExpressionParser.js +118 -14
  9. package/dist/esm/src/parsers/CommandExpressionParser.js.map +1 -1
  10. package/dist/esm/src/parsers/CommonTableParser.d.ts +8 -0
  11. package/dist/esm/src/parsers/CommonTableParser.js +127 -35
  12. package/dist/esm/src/parsers/CommonTableParser.js.map +1 -1
  13. package/dist/esm/src/parsers/FromClauseParser.js +2 -2
  14. package/dist/esm/src/parsers/FromClauseParser.js.map +1 -1
  15. package/dist/esm/src/parsers/FullNameParser.js +13 -1
  16. package/dist/esm/src/parsers/FullNameParser.js.map +1 -1
  17. package/dist/esm/src/parsers/FunctionExpressionParser.js +37 -3
  18. package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
  19. package/dist/esm/src/parsers/JoinClauseParser.d.ts +4 -0
  20. package/dist/esm/src/parsers/JoinClauseParser.js +54 -20
  21. package/dist/esm/src/parsers/JoinClauseParser.js.map +1 -1
  22. package/dist/esm/src/parsers/OrderByClauseParser.js +39 -8
  23. package/dist/esm/src/parsers/OrderByClauseParser.js.map +1 -1
  24. package/dist/esm/src/parsers/ParenExpressionParser.js +1 -1
  25. package/dist/esm/src/parsers/ParenExpressionParser.js.map +1 -1
  26. package/dist/esm/src/parsers/SelectClauseParser.d.ts +10 -0
  27. package/dist/esm/src/parsers/SelectClauseParser.js +124 -12
  28. package/dist/esm/src/parsers/SelectClauseParser.js.map +1 -1
  29. package/dist/esm/src/parsers/SelectQueryParser.d.ts +12 -0
  30. package/dist/esm/src/parsers/SelectQueryParser.js +277 -115
  31. package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
  32. package/dist/esm/src/parsers/SourceAliasExpressionParser.js +15 -4
  33. package/dist/esm/src/parsers/SourceAliasExpressionParser.js.map +1 -1
  34. package/dist/esm/src/parsers/SourceParser.js +33 -2
  35. package/dist/esm/src/parsers/SourceParser.js.map +1 -1
  36. package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +62 -0
  37. package/dist/esm/src/parsers/SqlPrintTokenParser.js +700 -32
  38. package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
  39. package/dist/esm/src/parsers/SqlTokenizer.d.ts +1 -4
  40. package/dist/esm/src/parsers/SqlTokenizer.js +108 -52
  41. package/dist/esm/src/parsers/SqlTokenizer.js.map +1 -1
  42. package/dist/esm/src/parsers/ValueParser.d.ts +4 -0
  43. package/dist/esm/src/parsers/ValueParser.js +119 -20
  44. package/dist/esm/src/parsers/ValueParser.js.map +1 -1
  45. package/dist/esm/src/parsers/WithClauseParser.d.ts +4 -0
  46. package/dist/esm/src/parsers/WithClauseParser.js +64 -35
  47. package/dist/esm/src/parsers/WithClauseParser.js.map +1 -1
  48. package/dist/esm/src/tokenReaders/CommandTokenReader.js +9 -1
  49. package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
  50. package/dist/esm/src/transformers/LinePrinter.d.ts +17 -2
  51. package/dist/esm/src/transformers/LinePrinter.js +39 -10
  52. package/dist/esm/src/transformers/LinePrinter.js.map +1 -1
  53. package/dist/esm/src/transformers/SqlFormatter.d.ts +10 -0
  54. package/dist/esm/src/transformers/SqlFormatter.js +1 -1
  55. package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
  56. package/dist/esm/src/transformers/SqlPrinter.d.ts +6 -1
  57. package/dist/esm/src/transformers/SqlPrinter.js +76 -31
  58. package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
  59. package/dist/esm/src/utils/CommentEditor.d.ts +12 -5
  60. package/dist/esm/src/utils/CommentEditor.js +67 -28
  61. package/dist/esm/src/utils/CommentEditor.js.map +1 -1
  62. package/dist/esm/src/utils/stringUtils.js +21 -9
  63. package/dist/esm/src/utils/stringUtils.js.map +1 -1
  64. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  65. package/dist/index.min.js +54 -51
  66. package/dist/index.min.js.map +3 -3
  67. package/dist/src/models/Lexeme.d.ts +8 -0
  68. package/dist/src/models/SqlComponent.d.ts +20 -0
  69. package/dist/src/models/SqlComponent.js +46 -0
  70. package/dist/src/models/SqlComponent.js.map +1 -1
  71. package/dist/src/parsers/CommandExpressionParser.d.ts +9 -0
  72. package/dist/src/parsers/CommandExpressionParser.js +118 -14
  73. package/dist/src/parsers/CommandExpressionParser.js.map +1 -1
  74. package/dist/src/parsers/CommonTableParser.d.ts +8 -0
  75. package/dist/src/parsers/CommonTableParser.js +127 -35
  76. package/dist/src/parsers/CommonTableParser.js.map +1 -1
  77. package/dist/src/parsers/FromClauseParser.js +2 -2
  78. package/dist/src/parsers/FromClauseParser.js.map +1 -1
  79. package/dist/src/parsers/FullNameParser.js +13 -1
  80. package/dist/src/parsers/FullNameParser.js.map +1 -1
  81. package/dist/src/parsers/FunctionExpressionParser.js +37 -3
  82. package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
  83. package/dist/src/parsers/JoinClauseParser.d.ts +4 -0
  84. package/dist/src/parsers/JoinClauseParser.js +54 -20
  85. package/dist/src/parsers/JoinClauseParser.js.map +1 -1
  86. package/dist/src/parsers/OrderByClauseParser.js +39 -8
  87. package/dist/src/parsers/OrderByClauseParser.js.map +1 -1
  88. package/dist/src/parsers/ParenExpressionParser.js +1 -1
  89. package/dist/src/parsers/ParenExpressionParser.js.map +1 -1
  90. package/dist/src/parsers/SelectClauseParser.d.ts +10 -0
  91. package/dist/src/parsers/SelectClauseParser.js +124 -12
  92. package/dist/src/parsers/SelectClauseParser.js.map +1 -1
  93. package/dist/src/parsers/SelectQueryParser.d.ts +12 -0
  94. package/dist/src/parsers/SelectQueryParser.js +280 -115
  95. package/dist/src/parsers/SelectQueryParser.js.map +1 -1
  96. package/dist/src/parsers/SourceAliasExpressionParser.js +15 -4
  97. package/dist/src/parsers/SourceAliasExpressionParser.js.map +1 -1
  98. package/dist/src/parsers/SourceParser.js +33 -2
  99. package/dist/src/parsers/SourceParser.js.map +1 -1
  100. package/dist/src/parsers/SqlPrintTokenParser.d.ts +62 -0
  101. package/dist/src/parsers/SqlPrintTokenParser.js +700 -32
  102. package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
  103. package/dist/src/parsers/SqlTokenizer.d.ts +1 -4
  104. package/dist/src/parsers/SqlTokenizer.js +108 -52
  105. package/dist/src/parsers/SqlTokenizer.js.map +1 -1
  106. package/dist/src/parsers/ValueParser.d.ts +4 -0
  107. package/dist/src/parsers/ValueParser.js +119 -20
  108. package/dist/src/parsers/ValueParser.js.map +1 -1
  109. package/dist/src/parsers/WithClauseParser.d.ts +4 -0
  110. package/dist/src/parsers/WithClauseParser.js +64 -35
  111. package/dist/src/parsers/WithClauseParser.js.map +1 -1
  112. package/dist/src/tokenReaders/CommandTokenReader.js +9 -1
  113. package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
  114. package/dist/src/transformers/LinePrinter.d.ts +17 -2
  115. package/dist/src/transformers/LinePrinter.js +39 -10
  116. package/dist/src/transformers/LinePrinter.js.map +1 -1
  117. package/dist/src/transformers/SqlFormatter.d.ts +10 -0
  118. package/dist/src/transformers/SqlFormatter.js +4 -1
  119. package/dist/src/transformers/SqlFormatter.js.map +1 -1
  120. package/dist/src/transformers/SqlPrinter.d.ts +6 -1
  121. package/dist/src/transformers/SqlPrinter.js +76 -31
  122. package/dist/src/transformers/SqlPrinter.js.map +1 -1
  123. package/dist/src/utils/CommentEditor.d.ts +12 -5
  124. package/dist/src/utils/CommentEditor.js +67 -28
  125. package/dist/src/utils/CommentEditor.js.map +1 -1
  126. package/dist/src/utils/stringUtils.js +21 -9
  127. package/dist/src/utils/stringUtils.js.map +1 -1
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +3 -3
@@ -26,6 +26,13 @@ export interface LexemePosition {
26
26
  endLine?: number;
27
27
  endColumn?: number;
28
28
  }
29
+ /**
30
+ * Positioned comment information for lexemes
31
+ */
32
+ export interface LexemePositionedComment {
33
+ position: 'before' | 'after';
34
+ comments: string[];
35
+ }
29
36
  /**
30
37
  * Represents a lexical token in SQL parsing
31
38
  */
@@ -33,5 +40,6 @@ export interface Lexeme {
33
40
  type: number;
34
41
  value: string;
35
42
  comments: string[] | null;
43
+ positionedComments?: LexemePositionedComment[];
36
44
  position?: LexemePosition;
37
45
  }
@@ -1,9 +1,29 @@
1
+ /**
2
+ * Represents a comment with its position relative to a token or component
3
+ */
4
+ export interface PositionedComment {
5
+ position: 'before' | 'after';
6
+ comments: string[];
7
+ }
1
8
  export declare abstract class SqlComponent {
2
9
  static kind: symbol;
3
10
  getKind(): symbol;
4
11
  accept<T>(visitor: SqlComponentVisitor<T>): T;
5
12
  toSqlString(formatter: SqlComponentVisitor<string>): string;
6
13
  comments: string[] | null;
14
+ positionedComments: PositionedComment[] | null;
15
+ /**
16
+ * Add comments at a specific position
17
+ */
18
+ addPositionedComments(position: 'before' | 'after', comments: string[]): void;
19
+ /**
20
+ * Get comments for a specific position
21
+ */
22
+ getPositionedComments(position: 'before' | 'after'): string[];
23
+ /**
24
+ * Get all positioned comments as a flat array in order (before, after)
25
+ */
26
+ getAllPositionedComments(): string[];
7
27
  }
8
28
  export interface SqlComponentVisitor<T> {
9
29
  visit(expr: SqlComponent): T;
@@ -1,6 +1,10 @@
1
1
  export class SqlComponent {
2
2
  constructor() {
3
+ // Legacy comment field for backward compatibility
4
+ // @deprecated Use positionedComments instead for better comment positioning
3
5
  this.comments = null;
6
+ // New position-based comment system
7
+ this.positionedComments = null;
4
8
  }
5
9
  getKind() {
6
10
  return this.constructor.kind;
@@ -11,6 +15,48 @@ export class SqlComponent {
11
15
  toSqlString(formatter) {
12
16
  return this.accept(formatter);
13
17
  }
18
+ /**
19
+ * Add comments at a specific position
20
+ */
21
+ addPositionedComments(position, comments) {
22
+ if (!comments || comments.length === 0)
23
+ return;
24
+ if (!this.positionedComments) {
25
+ this.positionedComments = [];
26
+ }
27
+ // Find existing positioned comment for this position
28
+ const existing = this.positionedComments.find(pc => pc.position === position);
29
+ if (existing) {
30
+ existing.comments.push(...comments);
31
+ }
32
+ else {
33
+ this.positionedComments.push({ position, comments: [...comments] });
34
+ }
35
+ }
36
+ /**
37
+ * Get comments for a specific position
38
+ */
39
+ getPositionedComments(position) {
40
+ if (!this.positionedComments)
41
+ return [];
42
+ const positioned = this.positionedComments.find(pc => pc.position === position);
43
+ return positioned ? positioned.comments : [];
44
+ }
45
+ /**
46
+ * Get all positioned comments as a flat array in order (before, after)
47
+ */
48
+ getAllPositionedComments() {
49
+ if (!this.positionedComments)
50
+ return [];
51
+ const result = [];
52
+ // Add 'before' comments first
53
+ const beforeComments = this.getPositionedComments('before');
54
+ result.push(...beforeComments);
55
+ // Add 'after' comments second
56
+ const afterComments = this.getPositionedComments('after');
57
+ result.push(...afterComments);
58
+ return result;
59
+ }
14
60
  }
15
61
  export class SqlDialectConfiguration {
16
62
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"SqlComponent.js","sourceRoot":"","sources":["../../../../src/models/SqlComponent.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,YAAY;IAAlC;QAgBI,aAAQ,GAAoB,IAAI,CAAC;IACrC,CAAC;IAbG,OAAO;QACH,OAAQ,IAAI,CAAC,WAAmC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAED,MAAM,CAAI,OAA+B;QACrC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,SAAsC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CAGJ;AAMD,MAAM,OAAO,uBAAuB;IAApC;QACW,oBAAe,GAAW,GAAG,CAAC;QAC9B,qBAAgB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5C,kBAAa,GAAY,IAAI,CAAC;IACzC,CAAC;CAAA"}
1
+ {"version":3,"file":"SqlComponent.js","sourceRoot":"","sources":["../../../../src/models/SqlComponent.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,YAAY;IAAlC;QAgBI,kDAAkD;QAClD,4EAA4E;QAC5E,aAAQ,GAAoB,IAAI,CAAC;QAEjC,oCAAoC;QACpC,uBAAkB,GAA+B,IAAI,CAAC;IAiD1D,CAAC;IAlEG,OAAO;QACH,OAAQ,IAAI,CAAC,WAAmC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAED,MAAM,CAAI,OAA+B;QACrC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,SAAsC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IASD;;OAEG;IACH,qBAAqB,CAAC,QAA4B,EAAE,QAAkB;QAClE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,QAA4B;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAChF,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,8BAA8B;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAE/B,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE9B,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAMD,MAAM,OAAO,uBAAuB;IAApC;QACW,oBAAe,GAAW,GAAG,CAAC;QAC9B,qBAAgB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5C,kBAAa,GAAY,IAAI,CAAC;IACzC,CAAC;CAAA"}
@@ -9,6 +9,15 @@ export declare class CommandExpressionParser {
9
9
  private static parseCaseExpression;
10
10
  private static parseCaseWhenExpression;
11
11
  private static parseSwitchCaseArgument;
12
+ private static parseAdditionalWhenClauses;
13
+ private static parseElseClause;
14
+ private static parseEndClause;
15
+ private static extractKeywordComments;
16
+ private static applySwitchCaseComments;
12
17
  private static isCommandWithValue;
13
18
  private static parseCaseConditionValuePair;
19
+ /**
20
+ * Convert legacy comments to positioned comments format
21
+ */
22
+ private static convertLegacyToPositioned;
14
23
  }
@@ -6,12 +6,18 @@ export class CommandExpressionParser {
6
6
  let idx = index;
7
7
  const current = lexemes[idx];
8
8
  if (current.value === "case") {
9
+ // Capture CASE keyword comments before consuming
10
+ const caseKeywordComments = current.comments;
11
+ const caseKeywordPositionedComments = current.positionedComments;
9
12
  idx++;
10
- return this.parseCaseExpression(lexemes, idx);
13
+ return this.parseCaseExpression(lexemes, idx, caseKeywordComments, caseKeywordPositionedComments);
11
14
  }
12
15
  else if (current.value === "case when") {
16
+ // Capture CASE WHEN keyword comments before consuming
17
+ const caseWhenKeywordComments = current.comments;
18
+ const caseWhenKeywordPositionedComments = current.positionedComments;
13
19
  idx++;
14
- return this.parseCaseWhenExpression(lexemes, idx);
20
+ return this.parseCaseWhenExpression(lexemes, idx, caseWhenKeywordComments, caseWhenKeywordPositionedComments);
15
21
  }
16
22
  return this.parseModifierUnaryExpression(lexemes, idx);
17
23
  }
@@ -26,7 +32,7 @@ export class CommandExpressionParser {
26
32
  }
27
33
  throw new Error(`Invalid modifier unary expression at index ${idx}, Lexeme: ${lexemes[idx].value}`);
28
34
  }
29
- static parseCaseExpression(lexemes, index) {
35
+ static parseCaseExpression(lexemes, index, caseKeywordComments, caseKeywordPositionedComments) {
30
36
  let idx = index;
31
37
  const condition = ValueParser.parseFromLexeme(lexemes, idx);
32
38
  idx = condition.newIndex;
@@ -34,9 +40,17 @@ export class CommandExpressionParser {
34
40
  idx = switchCaseResult.newIndex;
35
41
  // Create CASE expression
36
42
  const result = new CaseExpression(condition.value, switchCaseResult.value);
43
+ // Assign CASE keyword comments to the CaseExpression (positioned comments only for unified spec)
44
+ if (caseKeywordPositionedComments && caseKeywordPositionedComments.length > 0) {
45
+ result.positionedComments = caseKeywordPositionedComments;
46
+ }
47
+ else if (caseKeywordComments && caseKeywordComments.length > 0) {
48
+ // Convert legacy comments to positioned comments for unified spec
49
+ result.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(caseKeywordComments, 'before')];
50
+ }
37
51
  return { value: result, newIndex: idx };
38
52
  }
39
- static parseCaseWhenExpression(lexemes, index) {
53
+ static parseCaseWhenExpression(lexemes, index, caseWhenKeywordComments, caseWhenKeywordPositionedComments) {
40
54
  let idx = index;
41
55
  // Parse the first WHEN clause
42
56
  const casewhenResult = this.parseCaseConditionValuePair(lexemes, idx);
@@ -48,40 +62,108 @@ export class CommandExpressionParser {
48
62
  idx = switchCaseResult.newIndex;
49
63
  // Create CASE expression with condition null (uses WHEN conditions instead of a simple CASE)
50
64
  const result = new CaseExpression(null, switchCaseResult.value);
65
+ // Assign CASE WHEN keyword comments to the CaseExpression (positioned comments only for unified spec)
66
+ if (caseWhenKeywordPositionedComments && caseWhenKeywordPositionedComments.length > 0) {
67
+ result.positionedComments = caseWhenKeywordPositionedComments;
68
+ }
69
+ else if (caseWhenKeywordComments && caseWhenKeywordComments.length > 0) {
70
+ // Convert legacy comments to positioned comments for unified spec
71
+ result.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(caseWhenKeywordComments, 'before')];
72
+ }
51
73
  return { value: result, newIndex: idx };
52
74
  }
53
75
  // parseSwitchCaseArgument method processes the WHEN, ELSE, and END clauses of a CASE expression.
54
76
  static parseSwitchCaseArgument(lexemes, index, initialWhenThenList) {
55
77
  let idx = index;
56
78
  const whenThenList = [...initialWhenThenList];
57
- let elseValue = null;
58
- // Process WHEN clauses
79
+ // Parse all WHEN clauses
80
+ idx = this.parseAdditionalWhenClauses(lexemes, idx, whenThenList);
81
+ // Parse optional ELSE clause
82
+ const { elseValue, elseComments, newIndex: elseIndex } = this.parseElseClause(lexemes, idx);
83
+ idx = elseIndex;
84
+ // Parse required END clause
85
+ const { endComments, newIndex: endIndex } = this.parseEndClause(lexemes, idx);
86
+ idx = endIndex;
87
+ if (whenThenList.length === 0) {
88
+ throw new Error(`The CASE expression requires at least one WHEN clause (index ${idx})`);
89
+ }
90
+ // Create SwitchCaseArgument and apply comments directly
91
+ const switchCaseArg = new SwitchCaseArgument(whenThenList, elseValue);
92
+ this.applySwitchCaseComments(switchCaseArg, elseComments, endComments);
93
+ return { value: switchCaseArg, newIndex: idx };
94
+ }
95
+ // Parse additional WHEN clauses
96
+ static parseAdditionalWhenClauses(lexemes, index, whenThenList) {
97
+ let idx = index;
59
98
  while (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "when")) {
60
99
  idx++;
61
100
  const whenResult = this.parseCaseConditionValuePair(lexemes, idx);
62
101
  idx = whenResult.newIndex;
63
102
  whenThenList.push(whenResult.value);
64
103
  }
65
- // Process ELSE
104
+ return idx;
105
+ }
106
+ // Parse optional ELSE clause
107
+ static parseElseClause(lexemes, index) {
108
+ let elseValue = null;
109
+ let elseComments = null;
110
+ let idx = index;
66
111
  if (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "else")) {
112
+ // Extract comments from ELSE keyword before consuming
113
+ elseComments = this.extractKeywordComments(lexemes[idx]);
67
114
  idx++;
68
115
  const elseResult = ValueParser.parseFromLexeme(lexemes, idx);
69
116
  elseValue = elseResult.value;
70
117
  idx = elseResult.newIndex;
71
118
  }
72
- // Process END
119
+ return { elseValue, elseComments, newIndex: idx };
120
+ }
121
+ // Parse required END clause
122
+ static parseEndClause(lexemes, index) {
123
+ let idx = index;
124
+ let endComments = null;
73
125
  if (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "end")) {
126
+ // Extract comments from END keyword before consuming
127
+ endComments = this.extractKeywordComments(lexemes[idx]);
74
128
  idx++;
75
129
  }
76
130
  else {
77
131
  throw new Error(`The CASE expression requires 'end' keyword at the end (index ${idx})`);
78
132
  }
79
- if (whenThenList.length === 0) {
80
- throw new Error(`The CASE expression requires at least one WHEN clause (index ${idx})`);
133
+ return { endComments, newIndex: idx };
134
+ }
135
+ // Extract comments from a keyword token
136
+ static extractKeywordComments(token) {
137
+ return {
138
+ legacy: token.comments,
139
+ positioned: token.positionedComments
140
+ };
141
+ }
142
+ // Apply comments to SwitchCaseArgument directly (no collection then assignment)
143
+ static applySwitchCaseComments(switchCaseArg, elseComments, endComments) {
144
+ const allPositionedComments = [];
145
+ const allLegacyComments = [];
146
+ // Process ELSE comments directly
147
+ if ((elseComments === null || elseComments === void 0 ? void 0 : elseComments.positioned) && elseComments.positioned.length > 0) {
148
+ allPositionedComments.push(...elseComments.positioned);
149
+ }
150
+ if ((elseComments === null || elseComments === void 0 ? void 0 : elseComments.legacy) && elseComments.legacy.length > 0) {
151
+ allLegacyComments.push(...elseComments.legacy);
152
+ }
153
+ // Process END comments directly
154
+ if ((endComments === null || endComments === void 0 ? void 0 : endComments.positioned) && endComments.positioned.length > 0) {
155
+ allPositionedComments.push(...endComments.positioned);
156
+ }
157
+ if ((endComments === null || endComments === void 0 ? void 0 : endComments.legacy) && endComments.legacy.length > 0) {
158
+ allLegacyComments.push(...endComments.legacy);
159
+ }
160
+ // Apply positioned comments directly, or convert legacy comments
161
+ if (allPositionedComments.length > 0) {
162
+ switchCaseArg.positionedComments = allPositionedComments;
163
+ }
164
+ else if (allLegacyComments.length > 0) {
165
+ switchCaseArg.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(allLegacyComments, 'after')];
81
166
  }
82
- // Create SwitchCaseArgument
83
- const value = new SwitchCaseArgument(whenThenList, elseValue);
84
- return { value, newIndex: idx };
85
167
  }
86
168
  // Helper method: Check if a lexeme is a Command token with the specified value
87
169
  static isCommandWithValue(lexeme, value) {
@@ -95,11 +177,33 @@ export class CommandExpressionParser {
95
177
  if (idx >= lexemes.length || !(lexemes[idx].type & TokenType.Command) || lexemes[idx].value !== "then") {
96
178
  throw new Error(`Expected 'then' after WHEN condition at index ${idx}`);
97
179
  }
180
+ // Capture THEN keyword comments before consuming
181
+ const thenKeywordComments = lexemes[idx].comments;
182
+ const thenKeywordPositionedComments = lexemes[idx].positionedComments;
98
183
  idx++; // Skip the THEN keyword
99
184
  // Parse the value after THEN
100
185
  const value = ValueParser.parseFromLexeme(lexemes, idx);
101
186
  idx = value.newIndex;
102
- return { value: new CaseKeyValuePair(condition.value, value.value), newIndex: idx };
187
+ const keyValuePair = new CaseKeyValuePair(condition.value, value.value);
188
+ // Store THEN keyword comments on the CaseKeyValuePair
189
+ // Store THEN keyword comments - unified spec: positioned comments only
190
+ if (thenKeywordPositionedComments && thenKeywordPositionedComments.length > 0) {
191
+ keyValuePair.positionedComments = thenKeywordPositionedComments;
192
+ }
193
+ else if (thenKeywordComments && thenKeywordComments.length > 0) {
194
+ // Convert legacy comments to positioned comments for unified spec
195
+ keyValuePair.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(thenKeywordComments, 'after')];
196
+ }
197
+ return { value: keyValuePair, newIndex: idx };
198
+ }
199
+ /**
200
+ * Convert legacy comments to positioned comments format
201
+ */
202
+ static convertLegacyToPositioned(legacyComments, position = 'before') {
203
+ return {
204
+ position,
205
+ comments: legacyComments
206
+ };
103
207
  }
104
208
  }
105
209
  //# sourceMappingURL=CommandExpressionParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,12 @@ export declare class CommonTableParser {
7
7
  newIndex: number;
8
8
  trailingComments: string[] | null;
9
9
  };
10
+ private static collectPrecedingComments;
11
+ private static collectWithTokenComments;
12
+ private static collectTokenComments;
13
+ private static addPositionedComment;
14
+ private static parseAsKeyword;
15
+ private static parseMaterializedFlag;
16
+ private static parseInnerSelectQuery;
17
+ private static extractComments;
10
18
  }
@@ -19,63 +19,155 @@ export class CommonTableParser {
19
19
  // Parse from lexeme array (was: parse)
20
20
  static parseFromLexeme(lexemes, index) {
21
21
  let idx = index;
22
- // Capture comments from the CTE name token (before parsing alias)
23
- const cteNameComments = idx < lexemes.length ? lexemes[idx].comments : null;
24
- // Parse alias and optional column aliases
25
- // SourceAliasExpressionParser already handles column aliases if present
22
+ // 1. Parse alias and optional column aliases
26
23
  const aliasResult = SourceAliasExpressionParser.parseFromLexeme(lexemes, idx);
27
24
  idx = aliasResult.newIndex;
28
- if (idx < lexemes.length && lexemes[idx].value !== "as") {
29
- throw new Error(`Syntax error at position ${idx}: Expected 'AS' keyword after CTE name but found "${lexemes[idx].value}".`);
30
- }
31
- idx++; // Skip 'AS' keyword
32
- // Materialized flag
33
- let materialized = null;
34
- // Parse optional MATERIALIZED or NOT MATERIALIZED keywords
35
- if (idx < lexemes.length) {
36
- const currentValue = lexemes[idx].value;
37
- if (currentValue === "materialized") {
38
- materialized = true;
39
- idx++;
25
+ // 2. Collect preceding comments for this CTE
26
+ this.collectPrecedingComments(lexemes, index, aliasResult);
27
+ // 3. Parse AS keyword
28
+ idx = this.parseAsKeyword(lexemes, idx);
29
+ // 4. Parse optional MATERIALIZED flag
30
+ const { materialized, newIndex: materializedIndex } = this.parseMaterializedFlag(lexemes, idx);
31
+ idx = materializedIndex;
32
+ // 5. Parse inner SELECT query with parentheses
33
+ const { selectQuery, trailingComments, newIndex: selectIndex } = this.parseInnerSelectQuery(lexemes, idx);
34
+ idx = selectIndex;
35
+ // 6. Create CommonTable instance
36
+ const value = new CommonTable(selectQuery, aliasResult.value, materialized);
37
+ return {
38
+ value,
39
+ newIndex: idx,
40
+ trailingComments
41
+ };
42
+ }
43
+ // Collect comments from preceding tokens that should belong to this CTE
44
+ static collectPrecedingComments(lexemes, index, aliasResult) {
45
+ var _a;
46
+ if (!((_a = aliasResult.value) === null || _a === void 0 ? void 0 : _a.table))
47
+ return;
48
+ const cteTable = aliasResult.value.table;
49
+ for (let i = index - 1; i >= 0; i--) {
50
+ const token = lexemes[i];
51
+ // Handle WITH keyword specially - collect its "after" comments for the first CTE
52
+ if (token.value.toLowerCase() === 'with') {
53
+ this.collectWithTokenComments(token, cteTable);
54
+ break; // Stop at WITH keyword
55
+ }
56
+ // Stop looking if we hit a comma (indicates previous CTE) or RECURSIVE keyword
57
+ if (token.type & TokenType.Comma || token.value.toLowerCase() === 'recursive') {
58
+ break;
40
59
  }
41
- else if (currentValue === "not materialized") {
42
- materialized = false;
43
- idx++;
60
+ // Collect comments from tokens before the CTE name
61
+ this.collectTokenComments(token, cteTable);
62
+ }
63
+ }
64
+ // Collect comments from WITH token
65
+ static collectWithTokenComments(token, cteTable) {
66
+ let hasPositionedComments = false;
67
+ if (token.positionedComments && token.positionedComments.length > 0) {
68
+ for (const posComment of token.positionedComments) {
69
+ if (posComment.position === 'after' && posComment.comments) {
70
+ this.addPositionedComment(cteTable, 'before', posComment.comments);
71
+ hasPositionedComments = true;
72
+ }
44
73
  }
45
74
  }
75
+ // Only use legacy comments if no positioned comments were found
76
+ if (!hasPositionedComments && token.comments && token.comments.length > 0) {
77
+ this.addPositionedComment(cteTable, 'before', token.comments);
78
+ }
79
+ }
80
+ // Collect comments from a token
81
+ static collectTokenComments(token, cteTable) {
82
+ if (token.comments && token.comments.length > 0) {
83
+ this.addPositionedComment(cteTable, 'before', token.comments);
84
+ }
85
+ if (token.positionedComments && token.positionedComments.length > 0) {
86
+ if (!cteTable.positionedComments) {
87
+ cteTable.positionedComments = [];
88
+ }
89
+ cteTable.positionedComments.unshift(...token.positionedComments);
90
+ }
91
+ }
92
+ // Helper to add positioned comment
93
+ static addPositionedComment(cteTable, position, comments) {
94
+ if (!cteTable.positionedComments) {
95
+ cteTable.positionedComments = [];
96
+ }
97
+ cteTable.positionedComments.unshift({
98
+ position,
99
+ comments: [...comments]
100
+ });
101
+ }
102
+ // Parse AS keyword
103
+ static parseAsKeyword(lexemes, index) {
104
+ if (index < lexemes.length && lexemes[index].value !== "as") {
105
+ throw new Error(`Syntax error at position ${index}: Expected 'AS' keyword after CTE name but found "${lexemes[index].value}".`);
106
+ }
107
+ return index + 1; // Skip 'AS' keyword
108
+ }
109
+ // Parse optional MATERIALIZED flag
110
+ static parseMaterializedFlag(lexemes, index) {
111
+ if (index >= lexemes.length) {
112
+ return { materialized: null, newIndex: index };
113
+ }
114
+ const currentValue = lexemes[index].value;
115
+ if (currentValue === "materialized") {
116
+ return { materialized: true, newIndex: index + 1 };
117
+ }
118
+ else if (currentValue === "not materialized") {
119
+ return { materialized: false, newIndex: index + 1 };
120
+ }
121
+ return { materialized: null, newIndex: index };
122
+ }
123
+ // Parse inner SELECT query with parentheses
124
+ static parseInnerSelectQuery(lexemes, index) {
125
+ let idx = index;
46
126
  if (idx < lexemes.length && lexemes[idx].type !== TokenType.OpenParen) {
47
127
  throw new Error(`Syntax error at position ${idx}: Expected '(' after CTE name but found "${lexemes[idx].value}".`);
48
128
  }
49
129
  // Capture comments from the opening parenthesis for the CTE inner query
50
- const cteQueryComments = lexemes[idx].comments;
130
+ const cteQueryHeaderComments = this.extractComments(lexemes[idx]);
51
131
  idx++; // Skip opening parenthesis
52
132
  const queryResult = SelectQueryParser.parseFromLexeme(lexemes, idx);
53
133
  idx = queryResult.newIndex;
54
- // If there are comments from the opening parenthesis, add them to the inner query
55
- if (cteQueryComments && cteQueryComments.length > 0) {
56
- if (queryResult.value.comments) {
57
- // Prepend the CTE query comments to existing comments
58
- queryResult.value.comments = [...cteQueryComments, ...queryResult.value.comments];
134
+ // Add comments from the opening parenthesis as header comments for the inner query
135
+ if (cteQueryHeaderComments.length > 0) {
136
+ if (queryResult.value.headerComments) {
137
+ queryResult.value.headerComments = [...cteQueryHeaderComments, ...queryResult.value.headerComments];
59
138
  }
60
139
  else {
61
- queryResult.value.comments = cteQueryComments;
140
+ queryResult.value.headerComments = cteQueryHeaderComments;
62
141
  }
63
142
  }
64
143
  if (idx < lexemes.length && lexemes[idx].type !== TokenType.CloseParen) {
65
144
  throw new Error(`Syntax error at position ${idx}: Expected ')' after CTE query but found "${lexemes[idx].value}".`);
66
145
  }
67
- // Capture comments from the closing parenthesis - these might be meant for the subsequent query
68
- const closingParenComments = lexemes[idx].comments;
146
+ // Capture comments from the closing parenthesis
147
+ const closingParenComments = this.extractComments(lexemes[idx]);
69
148
  idx++; // Skip closing parenthesis
70
- const value = new CommonTable(queryResult.value, aliasResult.value, materialized);
71
- // Set comments only from the CTE name token, not from closing parenthesis
72
- // The closing parenthesis comments likely belong to the main query, not the CTE
73
- value.comments = cteNameComments;
74
149
  return {
75
- value,
76
- newIndex: idx,
77
- trailingComments: closingParenComments && closingParenComments.length > 0 ? closingParenComments : null
150
+ selectQuery: queryResult.value,
151
+ trailingComments: closingParenComments.length > 0 ? closingParenComments : null,
152
+ newIndex: idx
78
153
  };
79
154
  }
155
+ // Extract comments from a lexeme (both positioned and legacy)
156
+ static extractComments(lexeme) {
157
+ const comments = [];
158
+ // Check positioned comments
159
+ if (lexeme.positionedComments) {
160
+ for (const posComment of lexeme.positionedComments) {
161
+ if (posComment.comments) {
162
+ comments.push(...posComment.comments);
163
+ }
164
+ }
165
+ }
166
+ // Check legacy comments for backward compatibility
167
+ if (lexeme.comments && lexeme.comments.length > 0) {
168
+ comments.push(...lexeme.comments);
169
+ }
170
+ return comments;
171
+ }
80
172
  }
81
173
  //# sourceMappingURL=CommonTableParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommonTableParser.js","sourceRoot":"","sources":["../../../../src/parsers/CommonTableParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommonTableParser.js","sourceRoot":"","sources":["../../../../src/parsers/CommonTableParser.ts"],"names":[],"mappings":"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"}
@@ -36,13 +36,13 @@ export class FromClauseParser {
36
36
  if (join !== null) {
37
37
  const clause = new FromClause(sourceExpression.value, join.value);
38
38
  // Set comments from the FROM token to the clause
39
- clause.comments = fromTokenComments;
39
+ clause;
40
40
  return { value: clause, newIndex: idx };
41
41
  }
42
42
  else {
43
43
  const clause = new FromClause(sourceExpression.value, null);
44
44
  // Set comments from the FROM token to the clause
45
- clause.comments = fromTokenComments;
45
+ clause;
46
46
  return { value: clause, newIndex: idx };
47
47
  }
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FromClauseParser.js","sourceRoot":"","sources":["../../../../src/parsers/FromClauseParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,gBAAgB;IACzB,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,gEAAgE,CAAC,CAAC;QACvL,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,YAAY,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAEnF,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,wCAAwC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,mDAAmD,CAAC,CAAC;QAClK,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;QAC/H,CAAC;QAED,mCAAmC;QACnC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9E,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QAEhC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACrD,GAAG,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,GAAG,CAAC;QAE5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,iDAAiD;YACjD,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,iDAAiD;YACjD,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"FromClauseParser.js","sourceRoot":"","sources":["../../../../src/parsers/FromClauseParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,gBAAgB;IACzB,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,gEAAgE,CAAC,CAAC;QACvL,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,YAAY,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAEnF,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,wCAAwC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,mDAAmD,CAAC,CAAC;QAClK,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;QAC/H,CAAC;QAED,mCAAmC;QACnC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9E,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QAEhC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACrD,GAAG,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,KAAI,GAAG,CAAC;QAE5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,iDAAiD;YACjD,MAAM,CAAA;YACN,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,iDAAiD;YACjD,MAAM,CAAA;YACN,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ"}