kopytko-formatter 1.0.9 → 1.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 (129) hide show
  1. package/dist/src/config.d.ts +4 -0
  2. package/dist/src/config.d.ts.map +1 -1
  3. package/dist/src/config.js +3 -0
  4. package/dist/src/config.js.map +1 -1
  5. package/dist/src/cst-passes/aaThreshold.d.ts +4 -0
  6. package/dist/src/cst-passes/aaThreshold.d.ts.map +1 -0
  7. package/dist/src/cst-passes/aaThreshold.js +11 -0
  8. package/dist/src/cst-passes/aaThreshold.js.map +1 -0
  9. package/dist/src/cst-passes/alignAssignments.d.ts +4 -0
  10. package/dist/src/cst-passes/alignAssignments.d.ts.map +1 -0
  11. package/dist/src/cst-passes/alignAssignments.js +11 -0
  12. package/dist/src/cst-passes/alignAssignments.js.map +1 -0
  13. package/dist/src/cst-passes/blankLines.d.ts +19 -0
  14. package/dist/src/cst-passes/blankLines.d.ts.map +1 -0
  15. package/dist/src/cst-passes/blankLines.js +40 -0
  16. package/dist/src/cst-passes/blankLines.js.map +1 -0
  17. package/dist/src/cst-passes/casingPass.d.ts +12 -0
  18. package/dist/src/cst-passes/casingPass.d.ts.map +1 -0
  19. package/dist/src/cst-passes/casingPass.js +214 -0
  20. package/dist/src/cst-passes/casingPass.js.map +1 -0
  21. package/dist/src/cst-passes/commentNormalization.d.ts +24 -0
  22. package/dist/src/cst-passes/commentNormalization.d.ts.map +1 -0
  23. package/dist/src/cst-passes/commentNormalization.js +76 -0
  24. package/dist/src/cst-passes/commentNormalization.js.map +1 -0
  25. package/dist/src/cst-passes/commentWidth.d.ts +4 -0
  26. package/dist/src/cst-passes/commentWidth.d.ts.map +1 -0
  27. package/dist/src/cst-passes/commentWidth.js +50 -0
  28. package/dist/src/cst-passes/commentWidth.js.map +1 -0
  29. package/dist/src/cst-passes/elseOnNewLine.d.ts +4 -0
  30. package/dist/src/cst-passes/elseOnNewLine.d.ts.map +1 -0
  31. package/dist/src/cst-passes/elseOnNewLine.js +11 -0
  32. package/dist/src/cst-passes/elseOnNewLine.js.map +1 -0
  33. package/dist/src/cst-passes/emptyLinesBetweenMethods.d.ts +4 -0
  34. package/dist/src/cst-passes/emptyLinesBetweenMethods.d.ts.map +1 -0
  35. package/dist/src/cst-passes/emptyLinesBetweenMethods.js +11 -0
  36. package/dist/src/cst-passes/emptyLinesBetweenMethods.js.map +1 -0
  37. package/dist/src/cst-passes/endKeywordStyle.d.ts +21 -0
  38. package/dist/src/cst-passes/endKeywordStyle.d.ts.map +1 -0
  39. package/dist/src/cst-passes/endKeywordStyle.js +95 -0
  40. package/dist/src/cst-passes/endKeywordStyle.js.map +1 -0
  41. package/dist/src/cst-passes/fieldAccessConsistency.d.ts +4 -0
  42. package/dist/src/cst-passes/fieldAccessConsistency.d.ts.map +1 -0
  43. package/dist/src/cst-passes/fieldAccessConsistency.js +11 -0
  44. package/dist/src/cst-passes/fieldAccessConsistency.js.map +1 -0
  45. package/dist/src/cst-passes/functionVsSub.d.ts +13 -0
  46. package/dist/src/cst-passes/functionVsSub.d.ts.map +1 -0
  47. package/dist/src/cst-passes/functionVsSub.js +112 -0
  48. package/dist/src/cst-passes/functionVsSub.js.map +1 -0
  49. package/dist/src/cst-passes/importSorting.d.ts +25 -0
  50. package/dist/src/cst-passes/importSorting.d.ts.map +1 -0
  51. package/dist/src/cst-passes/importSorting.js +126 -0
  52. package/dist/src/cst-passes/importSorting.js.map +1 -0
  53. package/dist/src/cst-passes/indentation.d.ts +21 -0
  54. package/dist/src/cst-passes/indentation.d.ts.map +1 -0
  55. package/dist/src/cst-passes/indentation.js +115 -0
  56. package/dist/src/cst-passes/indentation.js.map +1 -0
  57. package/dist/src/cst-passes/index.d.ts +45 -0
  58. package/dist/src/cst-passes/index.d.ts.map +1 -0
  59. package/dist/src/cst-passes/index.js +77 -0
  60. package/dist/src/cst-passes/index.js.map +1 -0
  61. package/dist/src/cst-passes/infrastructure.d.ts +39 -0
  62. package/dist/src/cst-passes/infrastructure.d.ts.map +1 -0
  63. package/dist/src/cst-passes/infrastructure.js +63 -0
  64. package/dist/src/cst-passes/infrastructure.js.map +1 -0
  65. package/dist/src/cst-passes/lineCommentPosition.d.ts +4 -0
  66. package/dist/src/cst-passes/lineCommentPosition.d.ts.map +1 -0
  67. package/dist/src/cst-passes/lineCommentPosition.js +42 -0
  68. package/dist/src/cst-passes/lineCommentPosition.js.map +1 -0
  69. package/dist/src/cst-passes/mPrefixStyle.d.ts +4 -0
  70. package/dist/src/cst-passes/mPrefixStyle.d.ts.map +1 -0
  71. package/dist/src/cst-passes/mPrefixStyle.js +11 -0
  72. package/dist/src/cst-passes/mPrefixStyle.js.map +1 -0
  73. package/dist/src/cst-passes/observeFieldStyle.d.ts +6 -0
  74. package/dist/src/cst-passes/observeFieldStyle.d.ts.map +1 -0
  75. package/dist/src/cst-passes/observeFieldStyle.js +21 -0
  76. package/dist/src/cst-passes/observeFieldStyle.js.map +1 -0
  77. package/dist/src/cst-passes/paramAlignment.d.ts +4 -0
  78. package/dist/src/cst-passes/paramAlignment.d.ts.map +1 -0
  79. package/dist/src/cst-passes/paramAlignment.js +11 -0
  80. package/dist/src/cst-passes/paramAlignment.js.map +1 -0
  81. package/dist/src/cst-passes/parenthesisIfCase.d.ts +6 -0
  82. package/dist/src/cst-passes/parenthesisIfCase.d.ts.map +1 -0
  83. package/dist/src/cst-passes/parenthesisIfCase.js +42 -0
  84. package/dist/src/cst-passes/parenthesisIfCase.js.map +1 -0
  85. package/dist/src/cst-passes/printStatementRemoval.d.ts +20 -0
  86. package/dist/src/cst-passes/printStatementRemoval.d.ts.map +1 -0
  87. package/dist/src/cst-passes/printStatementRemoval.js +67 -0
  88. package/dist/src/cst-passes/printStatementRemoval.js.map +1 -0
  89. package/dist/src/cst-passes/spacing.d.ts +19 -0
  90. package/dist/src/cst-passes/spacing.d.ts.map +1 -0
  91. package/dist/src/cst-passes/spacing.js +81 -0
  92. package/dist/src/cst-passes/spacing.js.map +1 -0
  93. package/dist/src/cst-passes/splitArrayOpenBracket.d.ts +4 -0
  94. package/dist/src/cst-passes/splitArrayOpenBracket.d.ts.map +1 -0
  95. package/dist/src/cst-passes/splitArrayOpenBracket.js +11 -0
  96. package/dist/src/cst-passes/splitArrayOpenBracket.js.map +1 -0
  97. package/dist/src/cst-passes/stringConcatStyle.d.ts +4 -0
  98. package/dist/src/cst-passes/stringConcatStyle.d.ts.map +1 -0
  99. package/dist/src/cst-passes/stringConcatStyle.js +11 -0
  100. package/dist/src/cst-passes/stringConcatStyle.js.map +1 -0
  101. package/dist/src/cst-passes/stripCatchParens.d.ts +4 -0
  102. package/dist/src/cst-passes/stripCatchParens.d.ts.map +1 -0
  103. package/dist/src/cst-passes/stripCatchParens.js +29 -0
  104. package/dist/src/cst-passes/stripCatchParens.js.map +1 -0
  105. package/dist/src/cst-passes/thenStyle.d.ts +15 -0
  106. package/dist/src/cst-passes/thenStyle.d.ts.map +1 -0
  107. package/dist/src/cst-passes/thenStyle.js +140 -0
  108. package/dist/src/cst-passes/thenStyle.js.map +1 -0
  109. package/dist/src/cst-passes/trailingCommas.d.ts +13 -0
  110. package/dist/src/cst-passes/trailingCommas.d.ts.map +1 -0
  111. package/dist/src/cst-passes/trailingCommas.js +56 -0
  112. package/dist/src/cst-passes/trailingCommas.js.map +1 -0
  113. package/dist/src/cst-passes/trailingWhitespace.d.ts +13 -0
  114. package/dist/src/cst-passes/trailingWhitespace.d.ts.map +1 -0
  115. package/dist/src/cst-passes/trailingWhitespace.js +26 -0
  116. package/dist/src/cst-passes/trailingWhitespace.js.map +1 -0
  117. package/dist/src/cst-passes/wrapLongStrings.d.ts +4 -0
  118. package/dist/src/cst-passes/wrapLongStrings.d.ts.map +1 -0
  119. package/dist/src/cst-passes/wrapLongStrings.js +11 -0
  120. package/dist/src/cst-passes/wrapLongStrings.js.map +1 -0
  121. package/dist/src/formatter.d.ts +2 -1
  122. package/dist/src/formatter.d.ts.map +1 -1
  123. package/dist/src/formatter.js +74 -333
  124. package/dist/src/formatter.js.map +1 -1
  125. package/dist/src/index.d.ts +3 -2
  126. package/dist/src/index.d.ts.map +1 -1
  127. package/dist/src/index.js +11 -10
  128. package/dist/src/index.js.map +1 -1
  129. package/package.json +5 -2
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * CST Pass: Spacing normalization.
4
+ *
5
+ * Enforces consistent spacing around operators, assignments, and parentheses.
6
+ * Works on the whitespace trivia between tokens.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.spacingPass = spacingPass;
10
+ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
11
+ const BINARY_OPS = new Set([
12
+ kopytko_brightscript_parser_1.TokenKind.Plus, kopytko_brightscript_parser_1.TokenKind.Minus, kopytko_brightscript_parser_1.TokenKind.Star, kopytko_brightscript_parser_1.TokenKind.Slash,
13
+ kopytko_brightscript_parser_1.TokenKind.Backslash, kopytko_brightscript_parser_1.TokenKind.Caret, kopytko_brightscript_parser_1.TokenKind.Mod,
14
+ kopytko_brightscript_parser_1.TokenKind.And, kopytko_brightscript_parser_1.TokenKind.Or,
15
+ kopytko_brightscript_parser_1.TokenKind.Less, kopytko_brightscript_parser_1.TokenKind.Greater, kopytko_brightscript_parser_1.TokenKind.LessEqual, kopytko_brightscript_parser_1.TokenKind.GreaterEqual,
16
+ kopytko_brightscript_parser_1.TokenKind.LessGreater, kopytko_brightscript_parser_1.TokenKind.LeftShift, kopytko_brightscript_parser_1.TokenKind.RightShift,
17
+ ]);
18
+ const ASSIGNMENT_OPS = new Set([
19
+ kopytko_brightscript_parser_1.TokenKind.Equal,
20
+ kopytko_brightscript_parser_1.TokenKind.PlusEqual, kopytko_brightscript_parser_1.TokenKind.MinusEqual,
21
+ kopytko_brightscript_parser_1.TokenKind.StarEqual, kopytko_brightscript_parser_1.TokenKind.SlashEqual,
22
+ kopytko_brightscript_parser_1.TokenKind.BackslashEqual,
23
+ kopytko_brightscript_parser_1.TokenKind.LeftShiftEqual, kopytko_brightscript_parser_1.TokenKind.RightShiftEqual,
24
+ ]);
25
+ /**
26
+ * Creates a spacing pass that normalizes whitespace around operators.
27
+ * This is a simplified version — handles the most common cases.
28
+ */
29
+ function spacingPass(config) {
30
+ if (!config.spaceAroundOperators && !config.spaceAroundAssignment)
31
+ return () => [];
32
+ return (root, source) => {
33
+ const edits = [];
34
+ const tokens = collectAllTokens(root);
35
+ for (let i = 0; i < tokens.length - 1; i++) {
36
+ const token = tokens[i];
37
+ const next = tokens[i + 1];
38
+ // Skip if tokens are on different lines
39
+ if (next.line !== token.line)
40
+ continue;
41
+ if (config.spaceAroundOperators && BINARY_OPS.has(token.kind)) {
42
+ ensureSpaceBefore(token, source, edits);
43
+ ensureSpaceAfter(token, next, source, edits);
44
+ }
45
+ if (config.spaceAroundAssignment && ASSIGNMENT_OPS.has(token.kind)) {
46
+ ensureSpaceBefore(token, source, edits);
47
+ ensureSpaceAfter(token, next, source, edits);
48
+ }
49
+ }
50
+ return edits;
51
+ };
52
+ }
53
+ function ensureSpaceBefore(token, source, edits) {
54
+ if (token.pos === 0)
55
+ return;
56
+ const charBefore = source[token.pos - 1];
57
+ if (charBefore !== ' ' && charBefore !== '\t' && charBefore !== '\n' && charBefore !== '\r') {
58
+ edits.push({ pos: token.pos, end: token.pos, newText: ' ' });
59
+ }
60
+ }
61
+ function ensureSpaceAfter(token, next, source, edits) {
62
+ const gap = source.slice(token.end, next.pos);
63
+ // Check leading trivia of next token for whitespace
64
+ if (next.leadingTrivia.length === 0 && gap === '') {
65
+ edits.push({ pos: token.end, end: token.end, newText: ' ' });
66
+ }
67
+ }
68
+ function collectAllTokens(node) {
69
+ const tokens = [];
70
+ function walk(n) {
71
+ for (const child of n.children) {
72
+ if ((0, kopytko_brightscript_parser_1.isToken)(child))
73
+ tokens.push(child);
74
+ else if ((0, kopytko_brightscript_parser_1.isNode)(child))
75
+ walk(child);
76
+ }
77
+ }
78
+ walk(node);
79
+ return tokens;
80
+ }
81
+ //# sourceMappingURL=spacing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing.js","sourceRoot":"","sources":["../../../src/cst-passes/spacing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SyntaxNode } from 'kopytko-brightscript-parser';
2
+ import { TextEdit } from './infrastructure';
3
+ export declare function splitArrayOpenBracketPass(enabled: boolean): (root: SyntaxNode, source: string) => TextEdit[];
4
+ //# sourceMappingURL=splitArrayOpenBracket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitArrayOpenBracket.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/splitArrayOpenBracket.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAK5G"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitArrayOpenBracketPass = splitArrayOpenBracketPass;
4
+ function splitArrayOpenBracketPass(enabled) {
5
+ if (!enabled)
6
+ return () => [];
7
+ return (_root, _source) => {
8
+ return [];
9
+ };
10
+ }
11
+ //# sourceMappingURL=splitArrayOpenBracket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitArrayOpenBracket.js","sourceRoot":"","sources":["../../../src/cst-passes/splitArrayOpenBracket.ts"],"names":[],"mappings":";;AAGA,8DAKC;AALD,SAAgB,yBAAyB,CAAC,OAAgB;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SyntaxNode } from 'kopytko-brightscript-parser';
2
+ import { TextEdit } from './infrastructure';
3
+ export declare function stringConcatStylePass(style: string): (root: SyntaxNode, source: string) => TextEdit[];
4
+ //# sourceMappingURL=stringConcatStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringConcatStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/stringConcatStyle.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKrG"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringConcatStylePass = stringConcatStylePass;
4
+ function stringConcatStylePass(style) {
5
+ if (style === 'preserve')
6
+ return () => [];
7
+ return (_root, _source) => {
8
+ return [];
9
+ };
10
+ }
11
+ //# sourceMappingURL=stringConcatStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringConcatStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/stringConcatStyle.ts"],"names":[],"mappings":";;AAGA,sDAKC;AALD,SAAgB,qBAAqB,CAAC,KAAa;IACjD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { SyntaxNode } from 'kopytko-brightscript-parser';
2
+ import { TextEdit } from './infrastructure';
3
+ export declare function stripCatchParensPass(): (root: SyntaxNode, source: string) => TextEdit[];
4
+ //# sourceMappingURL=stripCatchParens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripCatchParens.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/stripCatchParens.ts"],"names":[],"mappings":"AAAsD,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AACvJ,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,oBAAoB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAoBvF"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripCatchParensPass = stripCatchParensPass;
4
+ /* eslint-disable @typescript-eslint/no-unused-vars */ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
5
+ function stripCatchParensPass() {
6
+ return (root, source) => {
7
+ const edits = [];
8
+ function visit(node) {
9
+ if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.CatchClause) {
10
+ const tokens = node.childTokens;
11
+ for (let i = 0; i < tokens.length; i++) {
12
+ if (tokens[i].kind === kopytko_brightscript_parser_1.TokenKind.LeftParen) {
13
+ edits.push({ pos: tokens[i].pos, end: tokens[i].end, newText: '' });
14
+ }
15
+ if (tokens[i].kind === kopytko_brightscript_parser_1.TokenKind.RightParen) {
16
+ edits.push({ pos: tokens[i].pos, end: tokens[i].end, newText: '' });
17
+ }
18
+ }
19
+ }
20
+ for (const child of node.children) {
21
+ if ((0, kopytko_brightscript_parser_1.isNode)(child))
22
+ visit(child);
23
+ }
24
+ }
25
+ visit(root);
26
+ return edits;
27
+ };
28
+ }
29
+ //# sourceMappingURL=stripCatchParens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripCatchParens.js","sourceRoot":"","sources":["../../../src/cst-passes/stripCatchParens.ts"],"names":[],"mappings":";;AAGA,oDAoBC;AAvBD,sDAAsD,CAAA,6EAAiG;AAGvJ,SAAgB,oBAAoB;IAClC,OAAO,CAAC,IAAgB,EAAE,MAAc,EAAc,EAAE;QACtD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,SAAS,KAAK,CAAC,IAAgB;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,SAAS,EAAE,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtE,CAAC;oBACD,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,uCAAS,CAAC,UAAU,EAAE,CAAC;wBAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CST Pass: Then style.
3
+ *
4
+ * Controls the presence of `then` keyword after `if`/`else if` conditions:
5
+ * - 'always': add `then` if missing
6
+ * - 'never': remove `then` from multi-line ifs (keep on single-line)
7
+ * - 'multiline-only': add `then` only on multi-line ifs
8
+ * - 'singleline-only': remove `then` from multi-line ifs, keep on single-line
9
+ */
10
+ import { SyntaxNode } from 'kopytko-brightscript-parser';
11
+ import { TextEdit } from './infrastructure';
12
+ type ThenStyle = 'always' | 'never' | 'multiline-only' | 'singleline-only' | 'preserve';
13
+ export declare function thenStylePass(style: ThenStyle): (root: SyntaxNode, source: string) => TextEdit[];
14
+ export {};
15
+ //# sourceMappingURL=thenStyle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thenStyle.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/thenStyle.ts"],"names":[],"mappings":"CAAsD;;;;;;;;GAQnD;AAEH,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAEjG,OAAO,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAC;AAExD,KAAK,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAExF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAkBhG"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */ /**
3
+ * CST Pass: Then style.
4
+ *
5
+ * Controls the presence of `then` keyword after `if`/`else if` conditions:
6
+ * - 'always': add `then` if missing
7
+ * - 'never': remove `then` from multi-line ifs (keep on single-line)
8
+ * - 'multiline-only': add `then` only on multi-line ifs
9
+ * - 'singleline-only': remove `then` from multi-line ifs, keep on single-line
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.thenStylePass = thenStylePass;
13
+ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
14
+ function thenStylePass(style) {
15
+ if (style === 'preserve')
16
+ return () => [];
17
+ return (root, source) => {
18
+ const edits = [];
19
+ function visitNode(node) {
20
+ if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.IfStatement || node.kind === kopytko_brightscript_parser_1.SyntaxKind.ElseIfClause) {
21
+ processIfNode(node, edits, style, source);
22
+ }
23
+ for (const child of node.children) {
24
+ if ((0, kopytko_brightscript_parser_1.isNode)(child))
25
+ visitNode(child);
26
+ }
27
+ }
28
+ visitNode(root);
29
+ return edits;
30
+ };
31
+ }
32
+ function processIfNode(node, edits, style, source) {
33
+ const thenToken = node.findToken(kopytko_brightscript_parser_1.TokenKind.Then);
34
+ const hasThen = thenToken !== undefined;
35
+ // Detect single-line: if there's a `then` token AND the next statement after
36
+ // `then` is on the SAME line as `then`, it's a single-line if.
37
+ // Single-line: `if x then return y` (no end if needed)
38
+ // Multi-line: `if x then\n ...\nend if`
39
+ let isSingleLine = false;
40
+ if (hasThen) {
41
+ // Check if there's code after 'then' on the same line
42
+ const thenLine = thenToken.line;
43
+ const children = node.children;
44
+ const thenIdx = children.indexOf(thenToken);
45
+ if (thenIdx >= 0) {
46
+ for (let i = thenIdx + 1; i < children.length; i++) {
47
+ const c = children[i];
48
+ if ('line' in c && c.line === thenLine) {
49
+ isSingleLine = true;
50
+ break;
51
+ }
52
+ if ('children' in c) {
53
+ const firstToken = findFirstTokenInNode(c);
54
+ if (firstToken && firstToken.line === thenLine) {
55
+ isSingleLine = true;
56
+ break;
57
+ }
58
+ }
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ switch (style) {
64
+ case 'always':
65
+ if (!hasThen) {
66
+ // Find the position right before the body starts — after condition
67
+ const insertPos = findThenInsertPosition(node);
68
+ if (insertPos >= 0) {
69
+ edits.push({ pos: insertPos, end: insertPos, newText: ' then' });
70
+ }
71
+ }
72
+ break;
73
+ case 'never':
74
+ if (hasThen && !isSingleLine) {
75
+ removeThen(thenToken, edits, source);
76
+ }
77
+ break;
78
+ case 'multiline-only':
79
+ if (!hasThen && !isSingleLine) {
80
+ const insertPos = findThenInsertPosition(node);
81
+ if (insertPos >= 0) {
82
+ edits.push({ pos: insertPos, end: insertPos, newText: ' then' });
83
+ }
84
+ }
85
+ break;
86
+ case 'singleline-only':
87
+ if (hasThen && !isSingleLine) {
88
+ removeThen(thenToken, edits, source);
89
+ }
90
+ break;
91
+ }
92
+ }
93
+ function removeThen(token, edits, source) {
94
+ // Remove the 'then' token and the preceding space
95
+ let start = token.leadingTrivia.length > 0
96
+ ? token.leadingTrivia[0].pos
97
+ : token.pos;
98
+ // Also consume one space before 'then' to avoid double spacing
99
+ if (start > 0 && (source[start - 1] === ' ' || source[start - 1] === '\t')) {
100
+ start--;
101
+ }
102
+ edits.push({ pos: start, end: token.end, newText: '' });
103
+ }
104
+ function findThenInsertPosition(node) {
105
+ // Find the last token before the body (after the condition expression)
106
+ // For if: the condition is between `if` keyword and the body/then
107
+ // We want to insert after the last condition token
108
+ let lastConditionEnd = -1;
109
+ let foundIf = false;
110
+ for (const child of node.children) {
111
+ if ((0, kopytko_brightscript_parser_1.isToken)(child)) {
112
+ if (child.kind === kopytko_brightscript_parser_1.TokenKind.If || child.kind === kopytko_brightscript_parser_1.TokenKind.ElseIf) {
113
+ foundIf = true;
114
+ continue;
115
+ }
116
+ if (foundIf && child.kind !== kopytko_brightscript_parser_1.TokenKind.Then) {
117
+ lastConditionEnd = child.end;
118
+ }
119
+ }
120
+ else if ((0, kopytko_brightscript_parser_1.isNode)(child) && foundIf) {
121
+ // First child node after if keyword is the condition expression
122
+ lastConditionEnd = child.end;
123
+ break;
124
+ }
125
+ }
126
+ return lastConditionEnd;
127
+ }
128
+ function findFirstTokenInNode(node) {
129
+ for (const child of node.children) {
130
+ if ((0, kopytko_brightscript_parser_1.isToken)(child))
131
+ return child;
132
+ if ((0, kopytko_brightscript_parser_1.isNode)(child)) {
133
+ const found = findFirstTokenInNode(child);
134
+ if (found)
135
+ return found;
136
+ }
137
+ }
138
+ return undefined;
139
+ }
140
+ //# sourceMappingURL=thenStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thenStyle.js","sourceRoot":"","sources":["../../../src/cst-passes/thenStyle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CST Pass: Trailing commas.
3
+ *
4
+ * Controls trailing commas in array and AA literals:
5
+ * - 'always': add trailing comma after last element
6
+ * - 'never': remove trailing comma after last element
7
+ */
8
+ import { SyntaxNode } from 'kopytko-brightscript-parser';
9
+ import { TextEdit } from './infrastructure';
10
+ type TrailingCommaStyle = 'always' | 'never' | 'preserve';
11
+ export declare function trailingCommaPass(style: TrailingCommaStyle): (root: SyntaxNode, source: string) => TextEdit[];
12
+ export {};
13
+ //# sourceMappingURL=trailingCommas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCommas.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/trailingCommas.ts"],"names":[],"mappings":"CAAsD;;;;;;GAMnD;AAEH,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,KAAK,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAkB7G"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */ /**
3
+ * CST Pass: Trailing commas.
4
+ *
5
+ * Controls trailing commas in array and AA literals:
6
+ * - 'always': add trailing comma after last element
7
+ * - 'never': remove trailing comma after last element
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.trailingCommaPass = trailingCommaPass;
11
+ const kopytko_brightscript_parser_1 = require("kopytko-brightscript-parser");
12
+ function trailingCommaPass(style) {
13
+ if (style === 'preserve')
14
+ return () => [];
15
+ return (root, _source) => {
16
+ const edits = [];
17
+ function visit(node) {
18
+ if (node.kind === kopytko_brightscript_parser_1.SyntaxKind.ArrayLiteral || node.kind === kopytko_brightscript_parser_1.SyntaxKind.AALiteral) {
19
+ processLiteral(node, edits, style);
20
+ }
21
+ for (const child of node.children) {
22
+ if ((0, kopytko_brightscript_parser_1.isNode)(child))
23
+ visit(child);
24
+ }
25
+ }
26
+ visit(root);
27
+ return edits;
28
+ };
29
+ }
30
+ function processLiteral(node, edits, style) {
31
+ const closingKind = node.kind === kopytko_brightscript_parser_1.SyntaxKind.ArrayLiteral ? kopytko_brightscript_parser_1.TokenKind.RightBracket : kopytko_brightscript_parser_1.TokenKind.RightBrace;
32
+ // Find the last significant token before the closing bracket/brace
33
+ const tokens = node.childTokens;
34
+ const closingIdx = tokens.findIndex(t => t.kind === closingKind);
35
+ if (closingIdx <= 0)
36
+ return;
37
+ // Check if it's multi-line (opening and closing on different lines)
38
+ const openToken = tokens[0];
39
+ const closeToken = tokens[closingIdx];
40
+ if (openToken.line === closeToken.line)
41
+ return; // single-line — don't touch
42
+ // Find the last token before closing (could be a comma or a value)
43
+ const prevToken = tokens[closingIdx - 1];
44
+ if (!prevToken)
45
+ return;
46
+ const hasTrailingComma = prevToken.kind === kopytko_brightscript_parser_1.TokenKind.Comma;
47
+ if (style === 'always' && !hasTrailingComma) {
48
+ // Insert comma after last element
49
+ edits.push({ pos: prevToken.end, end: prevToken.end, newText: ',' });
50
+ }
51
+ else if (style === 'never' && hasTrailingComma) {
52
+ // Remove trailing comma
53
+ edits.push({ pos: prevToken.pos, end: prevToken.end, newText: '' });
54
+ }
55
+ }
56
+ //# sourceMappingURL=trailingCommas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingCommas.js","sourceRoot":"","sources":["../../../src/cst-passes/trailingCommas.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;;GAMnD;;AAQH,8CAkBC;AAxBD,6EAAiG;AAMjG,SAAgB,iBAAiB,CAAC,KAAyB;IACzD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAE1C,OAAO,CAAC,IAAgB,EAAE,OAAe,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAE7B,SAAS,KAAK,CAAC,IAAgB;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,SAAS,EAAE,CAAC;gBAChF,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,IAAA,oCAAM,EAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,KAAiB,EAAE,KAAyB;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,wCAAU,CAAC,YAAY,CAAC,CAAC,CAAC,uCAAS,CAAC,YAAY,CAAC,CAAC,CAAC,uCAAS,CAAC,UAAU,CAAC;IAE1G,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACjE,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO;IAE5B,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;QAAE,OAAO,CAAC,4BAA4B;IAE5E,mEAAmE;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,KAAK,uCAAS,CAAC,KAAK,CAAC;IAE5D,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,kCAAkC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,KAAK,KAAK,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACjD,wBAAwB;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CST Pass: Trailing whitespace removal.
3
+ *
4
+ * Removes trailing spaces/tabs from the end of lines.
5
+ * Works on whitespace trivia that appears before a LineBreak trivia.
6
+ */
7
+ import { SyntaxNode } from 'kopytko-brightscript-parser';
8
+ import { TextEdit } from './infrastructure';
9
+ /**
10
+ * Creates a trailing-whitespace-removal pass.
11
+ */
12
+ export declare function trailingWhitespacePass(): (root: SyntaxNode, source: string) => TextEdit[];
13
+ //# sourceMappingURL=trailingWhitespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingWhitespace.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/trailingWhitespace.ts"],"names":[],"mappings":"CAAsD;;;;;GAKnD;AAEH,OAAO,EAAE,UAAU,EAA+B,MAAM,6BAA6B,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAYzF"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */ /**
3
+ * CST Pass: Trailing whitespace removal.
4
+ *
5
+ * Removes trailing spaces/tabs from the end of lines.
6
+ * Works on whitespace trivia that appears before a LineBreak trivia.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.trailingWhitespacePass = trailingWhitespacePass;
10
+ /**
11
+ * Creates a trailing-whitespace-removal pass.
12
+ */
13
+ function trailingWhitespacePass() {
14
+ return (_root, source) => {
15
+ const edits = [];
16
+ // Simple approach: find all trailing whitespace before newlines in the source
17
+ const trailingRe = /[ \t]+(?=\r?\n|$)/g;
18
+ let match;
19
+ while ((match = trailingRe.exec(source)) !== null) {
20
+ // Don't trim if it's the only content (empty lines are handled by blank line rules)
21
+ edits.push({ pos: match.index, end: match.index + match[0].length, newText: '' });
22
+ }
23
+ return edits;
24
+ };
25
+ }
26
+ //# sourceMappingURL=trailingWhitespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trailingWhitespace.js","sourceRoot":"","sources":["../../../src/cst-passes/trailingWhitespace.ts"],"names":[],"mappings":";AAAA,sDAAsD,CAAA;;;;;GAKnD;;AASH,wDAYC;AAfD;;GAEG;AACH,SAAgB,sBAAsB;IACpC,OAAO,CAAC,KAAiB,EAAE,MAAc,EAAc,EAAE;QACvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,8EAA8E;QAC9E,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,oFAAoF;YACpF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SyntaxNode } from 'kopytko-brightscript-parser';
2
+ import { TextEdit } from './infrastructure';
3
+ export declare function wrapLongStringsPass(style: string, maxLength: number): (root: SyntaxNode, source: string) => TextEdit[];
4
+ //# sourceMappingURL=wrapLongStrings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapLongStrings.d.ts","sourceRoot":"","sources":["../../../src/cst-passes/wrapLongStrings.ts"],"names":[],"mappings":"AAAsD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAKtH"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapLongStringsPass = wrapLongStringsPass;
4
+ function wrapLongStringsPass(style, maxLength) {
5
+ if (style === 'preserve' || maxLength <= 0)
6
+ return () => [];
7
+ return (_root, _source) => {
8
+ return [];
9
+ };
10
+ }
11
+ //# sourceMappingURL=wrapLongStrings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapLongStrings.js","sourceRoot":"","sources":["../../../src/cst-passes/wrapLongStrings.ts"],"names":[],"mappings":";;AAGA,kDAKC;AALD,SAAgB,mBAAmB,CAAC,KAAa,EAAE,SAAiB;IAClE,IAAI,KAAK,KAAK,UAAU,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAiB,EAAE,OAAe,EAAc,EAAE;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
- import { CasingConfig } from './casing';
1
+ import { CasingConfig } from 'kopytko-brightscript-parser';
2
2
  import { FunctionDefinition } from './types';
3
3
  import { FormattingConfig } from './config';
4
+ /** Reverse mapping: spaced form → compact. */
4
5
  /**
5
6
  * Formats BrightScript source code using an 11-pass engine.
6
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAsF,MAAM,UAAU,CAAC;AAC5H,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAuB5C;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,GAAE,YAAoC,EAC5C,aAAa,GAAE,kBAAkB,EAAO,GACvC,MAAM,CA6FR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,CAAC,EAAE,YAAY,EACrB,aAAa,CAAC,EAAE,kBAAkB,EAAE,GACnC,OAAO,CAET"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyB,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAc5C,8CAA8C;AAE9C;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,GAAE,YAAoC,EAC5C,aAAa,GAAE,kBAAkB,EAAO,GACvC,MAAM,CAmHR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,MAAM,CAAC,EAAE,YAAY,EACrB,aAAa,CAAC,EAAE,kBAAkB,EAAE,GACnC,OAAO,CAET"}