driftdetect-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 (221) hide show
  1. package/dist/analyzers/ast-analyzer.d.ts +251 -0
  2. package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ast-analyzer.js +548 -0
  4. package/dist/analyzers/ast-analyzer.js.map +1 -0
  5. package/dist/analyzers/flow-analyzer.d.ts +241 -0
  6. package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
  7. package/dist/analyzers/flow-analyzer.js +1219 -0
  8. package/dist/analyzers/flow-analyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +18 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +19 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/semantic-analyzer.d.ts +252 -0
  14. package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
  15. package/dist/analyzers/semantic-analyzer.js +1182 -0
  16. package/dist/analyzers/semantic-analyzer.js.map +1 -0
  17. package/dist/analyzers/type-analyzer.d.ts +289 -0
  18. package/dist/analyzers/type-analyzer.d.ts.map +1 -0
  19. package/dist/analyzers/type-analyzer.js +1269 -0
  20. package/dist/analyzers/type-analyzer.js.map +1 -0
  21. package/dist/analyzers/types.d.ts +537 -0
  22. package/dist/analyzers/types.d.ts.map +1 -0
  23. package/dist/analyzers/types.js +11 -0
  24. package/dist/analyzers/types.js.map +1 -0
  25. package/dist/config/config-loader.d.ts +166 -0
  26. package/dist/config/config-loader.d.ts.map +1 -0
  27. package/dist/config/config-loader.js +429 -0
  28. package/dist/config/config-loader.js.map +1 -0
  29. package/dist/config/config-validator.d.ts +204 -0
  30. package/dist/config/config-validator.d.ts.map +1 -0
  31. package/dist/config/config-validator.js +632 -0
  32. package/dist/config/config-validator.js.map +1 -0
  33. package/dist/config/defaults.d.ts +8 -0
  34. package/dist/config/defaults.d.ts.map +1 -0
  35. package/dist/config/defaults.js +26 -0
  36. package/dist/config/defaults.js.map +1 -0
  37. package/dist/config/index.d.ts +10 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +10 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/config/types.d.ts +47 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +7 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index.d.ts +37 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/manifest/exporter.d.ts +21 -0
  50. package/dist/manifest/exporter.d.ts.map +1 -0
  51. package/dist/manifest/exporter.js +339 -0
  52. package/dist/manifest/exporter.js.map +1 -0
  53. package/dist/manifest/index.d.ts +14 -0
  54. package/dist/manifest/index.d.ts.map +1 -0
  55. package/dist/manifest/index.js +15 -0
  56. package/dist/manifest/index.js.map +1 -0
  57. package/dist/manifest/manifest-store.d.ts +111 -0
  58. package/dist/manifest/manifest-store.d.ts.map +1 -0
  59. package/dist/manifest/manifest-store.js +418 -0
  60. package/dist/manifest/manifest-store.js.map +1 -0
  61. package/dist/manifest/types.d.ts +238 -0
  62. package/dist/manifest/types.d.ts.map +1 -0
  63. package/dist/manifest/types.js +11 -0
  64. package/dist/manifest/types.js.map +1 -0
  65. package/dist/matcher/confidence-scorer.d.ts +188 -0
  66. package/dist/matcher/confidence-scorer.d.ts.map +1 -0
  67. package/dist/matcher/confidence-scorer.js +302 -0
  68. package/dist/matcher/confidence-scorer.js.map +1 -0
  69. package/dist/matcher/index.d.ts +24 -0
  70. package/dist/matcher/index.d.ts.map +1 -0
  71. package/dist/matcher/index.js +26 -0
  72. package/dist/matcher/index.js.map +1 -0
  73. package/dist/matcher/outlier-detector.d.ts +252 -0
  74. package/dist/matcher/outlier-detector.d.ts.map +1 -0
  75. package/dist/matcher/outlier-detector.js +544 -0
  76. package/dist/matcher/outlier-detector.js.map +1 -0
  77. package/dist/matcher/pattern-matcher.d.ts +169 -0
  78. package/dist/matcher/pattern-matcher.d.ts.map +1 -0
  79. package/dist/matcher/pattern-matcher.js +692 -0
  80. package/dist/matcher/pattern-matcher.js.map +1 -0
  81. package/dist/matcher/types.d.ts +476 -0
  82. package/dist/matcher/types.d.ts.map +1 -0
  83. package/dist/matcher/types.js +36 -0
  84. package/dist/matcher/types.js.map +1 -0
  85. package/dist/parsers/base-parser.d.ts +282 -0
  86. package/dist/parsers/base-parser.d.ts.map +1 -0
  87. package/dist/parsers/base-parser.js +421 -0
  88. package/dist/parsers/base-parser.js.map +1 -0
  89. package/dist/parsers/css-parser.d.ts +225 -0
  90. package/dist/parsers/css-parser.d.ts.map +1 -0
  91. package/dist/parsers/css-parser.js +477 -0
  92. package/dist/parsers/css-parser.js.map +1 -0
  93. package/dist/parsers/index.d.ts +15 -0
  94. package/dist/parsers/index.d.ts.map +1 -0
  95. package/dist/parsers/index.js +15 -0
  96. package/dist/parsers/index.js.map +1 -0
  97. package/dist/parsers/json-parser.d.ts +219 -0
  98. package/dist/parsers/json-parser.d.ts.map +1 -0
  99. package/dist/parsers/json-parser.js +602 -0
  100. package/dist/parsers/json-parser.js.map +1 -0
  101. package/dist/parsers/markdown-parser.d.ts +276 -0
  102. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  103. package/dist/parsers/markdown-parser.js +731 -0
  104. package/dist/parsers/markdown-parser.js.map +1 -0
  105. package/dist/parsers/parser-manager.d.ts +294 -0
  106. package/dist/parsers/parser-manager.d.ts.map +1 -0
  107. package/dist/parsers/parser-manager.js +738 -0
  108. package/dist/parsers/parser-manager.js.map +1 -0
  109. package/dist/parsers/python-parser.d.ts +204 -0
  110. package/dist/parsers/python-parser.d.ts.map +1 -0
  111. package/dist/parsers/python-parser.js +517 -0
  112. package/dist/parsers/python-parser.js.map +1 -0
  113. package/dist/parsers/types.d.ts +43 -0
  114. package/dist/parsers/types.d.ts.map +1 -0
  115. package/dist/parsers/types.js +7 -0
  116. package/dist/parsers/types.js.map +1 -0
  117. package/dist/parsers/typescript-parser.d.ts +264 -0
  118. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  119. package/dist/parsers/typescript-parser.js +658 -0
  120. package/dist/parsers/typescript-parser.js.map +1 -0
  121. package/dist/rules/evaluator.d.ts +305 -0
  122. package/dist/rules/evaluator.d.ts.map +1 -0
  123. package/dist/rules/evaluator.js +579 -0
  124. package/dist/rules/evaluator.js.map +1 -0
  125. package/dist/rules/index.d.ts +13 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +13 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/quick-fix-generator.d.ts +334 -0
  130. package/dist/rules/quick-fix-generator.d.ts.map +1 -0
  131. package/dist/rules/quick-fix-generator.js +1075 -0
  132. package/dist/rules/quick-fix-generator.js.map +1 -0
  133. package/dist/rules/rule-engine.d.ts +241 -0
  134. package/dist/rules/rule-engine.d.ts.map +1 -0
  135. package/dist/rules/rule-engine.js +585 -0
  136. package/dist/rules/rule-engine.js.map +1 -0
  137. package/dist/rules/severity-manager.d.ts +394 -0
  138. package/dist/rules/severity-manager.d.ts.map +1 -0
  139. package/dist/rules/severity-manager.js +619 -0
  140. package/dist/rules/severity-manager.js.map +1 -0
  141. package/dist/rules/types.d.ts +370 -0
  142. package/dist/rules/types.d.ts.map +1 -0
  143. package/dist/rules/types.js +133 -0
  144. package/dist/rules/types.js.map +1 -0
  145. package/dist/rules/variant-manager.d.ts +388 -0
  146. package/dist/rules/variant-manager.d.ts.map +1 -0
  147. package/dist/rules/variant-manager.js +777 -0
  148. package/dist/rules/variant-manager.js.map +1 -0
  149. package/dist/scanner/change-detector.d.ts +164 -0
  150. package/dist/scanner/change-detector.d.ts.map +1 -0
  151. package/dist/scanner/change-detector.js +263 -0
  152. package/dist/scanner/change-detector.js.map +1 -0
  153. package/dist/scanner/dependency-graph.d.ts +270 -0
  154. package/dist/scanner/dependency-graph.d.ts.map +1 -0
  155. package/dist/scanner/dependency-graph.js +436 -0
  156. package/dist/scanner/dependency-graph.js.map +1 -0
  157. package/dist/scanner/file-walker.d.ts +127 -0
  158. package/dist/scanner/file-walker.d.ts.map +1 -0
  159. package/dist/scanner/file-walker.js +526 -0
  160. package/dist/scanner/file-walker.js.map +1 -0
  161. package/dist/scanner/index.d.ts +12 -0
  162. package/dist/scanner/index.d.ts.map +1 -0
  163. package/dist/scanner/index.js +12 -0
  164. package/dist/scanner/index.js.map +1 -0
  165. package/dist/scanner/types.d.ts +218 -0
  166. package/dist/scanner/types.d.ts.map +1 -0
  167. package/dist/scanner/types.js +10 -0
  168. package/dist/scanner/types.js.map +1 -0
  169. package/dist/scanner/worker-pool.d.ts +317 -0
  170. package/dist/scanner/worker-pool.d.ts.map +1 -0
  171. package/dist/scanner/worker-pool.js +571 -0
  172. package/dist/scanner/worker-pool.js.map +1 -0
  173. package/dist/store/cache-manager.d.ts +179 -0
  174. package/dist/store/cache-manager.d.ts.map +1 -0
  175. package/dist/store/cache-manager.js +391 -0
  176. package/dist/store/cache-manager.js.map +1 -0
  177. package/dist/store/history-store.d.ts +314 -0
  178. package/dist/store/history-store.d.ts.map +1 -0
  179. package/dist/store/history-store.js +707 -0
  180. package/dist/store/history-store.js.map +1 -0
  181. package/dist/store/index.d.ts +20 -0
  182. package/dist/store/index.d.ts.map +1 -0
  183. package/dist/store/index.js +26 -0
  184. package/dist/store/index.js.map +1 -0
  185. package/dist/store/lock-file-manager.d.ts +202 -0
  186. package/dist/store/lock-file-manager.d.ts.map +1 -0
  187. package/dist/store/lock-file-manager.js +475 -0
  188. package/dist/store/lock-file-manager.js.map +1 -0
  189. package/dist/store/pattern-store.d.ts +289 -0
  190. package/dist/store/pattern-store.d.ts.map +1 -0
  191. package/dist/store/pattern-store.js +936 -0
  192. package/dist/store/pattern-store.js.map +1 -0
  193. package/dist/store/schema-validator.d.ts +159 -0
  194. package/dist/store/schema-validator.d.ts.map +1 -0
  195. package/dist/store/schema-validator.js +1096 -0
  196. package/dist/store/schema-validator.js.map +1 -0
  197. package/dist/store/types.d.ts +585 -0
  198. package/dist/store/types.d.ts.map +1 -0
  199. package/dist/store/types.js +82 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/types/analysis.d.ts +19 -0
  202. package/dist/types/analysis.d.ts.map +1 -0
  203. package/dist/types/analysis.js +5 -0
  204. package/dist/types/analysis.js.map +1 -0
  205. package/dist/types/common.d.ts +7 -0
  206. package/dist/types/common.d.ts.map +1 -0
  207. package/dist/types/common.js +5 -0
  208. package/dist/types/common.js.map +1 -0
  209. package/dist/types/index.d.ts +12 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +10 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/types/patterns.d.ts +40 -0
  214. package/dist/types/patterns.d.ts.map +1 -0
  215. package/dist/types/patterns.js +7 -0
  216. package/dist/types/patterns.js.map +1 -0
  217. package/dist/types/violations.d.ts +7 -0
  218. package/dist/types/violations.d.ts.map +1 -0
  219. package/dist/types/violations.js +7 -0
  220. package/dist/types/violations.js.map +1 -0
  221. package/package.json +46 -0
@@ -0,0 +1,477 @@
1
+ /**
2
+ * CSS Parser - CSS/SCSS/SASS/LESS parsing for AST extraction
3
+ *
4
+ * Extracts selectors, properties, values, @rules, and CSS variables
5
+ * from CSS-like files using regex-based parsing.
6
+ *
7
+ * @requirements 3.2
8
+ */
9
+ import { BaseParser } from './base-parser.js';
10
+ /**
11
+ * CSS/SCSS/SASS/LESS parser using regex-based parsing.
12
+ *
13
+ * Provides AST parsing and extraction of selectors, properties,
14
+ * values, @rules, and CSS variables from CSS-like source files.
15
+ *
16
+ * @requirements 3.2 - Support CSS/SCSS parsing
17
+ * @requirements 3.3 - Graceful degradation on parse errors
18
+ */
19
+ export class CSSParser extends BaseParser {
20
+ language = 'css';
21
+ extensions = ['.css', '.scss', '.sass', '.less'];
22
+ /**
23
+ * Parse CSS source code into an AST.
24
+ *
25
+ * @param source - The source code to parse
26
+ * @param filePath - Optional file path for error reporting
27
+ * @returns CSSParseResult containing the AST and extracted information
28
+ *
29
+ * @requirements 3.2, 3.3
30
+ */
31
+ parse(source, _filePath) {
32
+ try {
33
+ const lines = source.split('\n');
34
+ const rootChildren = [];
35
+ // Extract semantic information
36
+ const atRules = this.extractAtRules(source, lines);
37
+ const rules = this.extractRules(source, lines);
38
+ const selectors = this.extractSelectors(rules);
39
+ const properties = this.extractAllProperties(rules);
40
+ const variables = this.extractVariables(source, lines);
41
+ // Build AST nodes for @rules
42
+ for (const atRule of atRules) {
43
+ const atRuleNode = this.createAtRuleNode(atRule, source);
44
+ rootChildren.push(atRuleNode);
45
+ }
46
+ // Build AST nodes for rules
47
+ for (const rule of rules) {
48
+ const ruleNode = this.createRuleNode(rule, source);
49
+ rootChildren.push(ruleNode);
50
+ }
51
+ // Create root node
52
+ const endPosition = lines.length > 0
53
+ ? { row: lines.length - 1, column: lines[lines.length - 1]?.length ?? 0 }
54
+ : { row: 0, column: 0 };
55
+ const rootNode = this.createNode('StyleSheet', source, { row: 0, column: 0 }, endPosition, rootChildren);
56
+ const ast = this.createAST(rootNode, source);
57
+ return {
58
+ ...this.createSuccessResult(ast),
59
+ selectors,
60
+ properties,
61
+ atRules,
62
+ variables,
63
+ rules,
64
+ };
65
+ }
66
+ catch (error) {
67
+ const errorMessage = error instanceof Error ? error.message : 'Unknown parse error';
68
+ return {
69
+ ...this.createFailureResult([this.createError(errorMessage, { row: 0, column: 0 })]),
70
+ selectors: [],
71
+ properties: [],
72
+ atRules: [],
73
+ variables: [],
74
+ rules: [],
75
+ };
76
+ }
77
+ }
78
+ /**
79
+ * Query the AST for nodes matching a pattern.
80
+ *
81
+ * Supports querying by node type (e.g., 'Rule', 'AtRule', 'Declaration').
82
+ *
83
+ * @param ast - The AST to query
84
+ * @param pattern - The node type to search for
85
+ * @returns Array of matching AST nodes
86
+ *
87
+ * @requirements 3.5
88
+ */
89
+ query(ast, pattern) {
90
+ return this.findNodesByType(ast, pattern);
91
+ }
92
+ // ============================================
93
+ // @Rule Extraction
94
+ // ============================================
95
+ /**
96
+ * Extract all @rules from CSS source.
97
+ */
98
+ extractAtRules(source, _lines) {
99
+ const atRules = [];
100
+ // Match @rules: @import, @media, @keyframes, @font-face, @charset, @supports, etc.
101
+ // This regex matches @rule-name followed by params and optionally a block
102
+ const atRuleRegex = /@([\w-]+)\s*([^{;]*?)(?:\{([^}]*(?:\{[^}]*\}[^}]*)*)\}|;)/g;
103
+ let match;
104
+ while ((match = atRuleRegex.exec(source)) !== null) {
105
+ const lineStart = this.getLineNumber(source, match.index);
106
+ const name = match[1] ?? '';
107
+ const params = (match[2] ?? '').trim();
108
+ const blockContent = match[3];
109
+ const hasBlock = blockContent !== undefined;
110
+ const endOffset = match.index + (match[0]?.length ?? 0);
111
+ const lineEnd = this.getLineNumber(source, endOffset);
112
+ // Parse nested rules if this is a block @rule
113
+ const nestedRules = [];
114
+ if (hasBlock && blockContent) {
115
+ const nestedSource = blockContent;
116
+ const nestedLines = nestedSource.split('\n');
117
+ nestedRules.push(...this.extractRules(nestedSource, nestedLines));
118
+ }
119
+ atRules.push({
120
+ name,
121
+ params,
122
+ hasBlock,
123
+ nestedRules,
124
+ startPosition: { row: lineStart, column: this.getColumnNumber(source, match.index) },
125
+ endPosition: { row: lineEnd, column: this.getColumnNumber(source, endOffset) },
126
+ });
127
+ }
128
+ return atRules;
129
+ }
130
+ // ============================================
131
+ // Rule Extraction
132
+ // ============================================
133
+ /**
134
+ * Extract all CSS rules (selector + declarations) from source.
135
+ */
136
+ extractRules(source, _lines) {
137
+ const rules = [];
138
+ // Remove comments first
139
+ const sourceWithoutComments = this.removeComments(source);
140
+ // Remove @rules to avoid matching their content as regular rules
141
+ const sourceWithoutAtRules = this.removeAtRules(sourceWithoutComments);
142
+ // Match CSS rules: selector(s) { declarations }
143
+ // This handles multi-line selectors and nested rules
144
+ const ruleRegex = /([^{}@]+?)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
145
+ let match;
146
+ while ((match = ruleRegex.exec(sourceWithoutAtRules)) !== null) {
147
+ const selectorText = (match[1] ?? '').trim();
148
+ const declarationsText = match[2] ?? '';
149
+ // Skip if selector is empty or looks like a comment
150
+ if (!selectorText || selectorText.startsWith('/*') || selectorText.startsWith('//')) {
151
+ continue;
152
+ }
153
+ const lineStart = this.getLineNumber(source, match.index);
154
+ const endOffset = match.index + (match[0]?.length ?? 0);
155
+ const lineEnd = this.getLineNumber(source, endOffset);
156
+ // Parse selectors (comma-separated)
157
+ const selectors = this.parseSelectors(selectorText);
158
+ // Parse properties
159
+ const properties = this.parseDeclarations(declarationsText, selectorText, lineStart);
160
+ // Parse nested rules (for SCSS/LESS)
161
+ const nestedRules = this.parseNestedRules(declarationsText, selectorText, lineStart);
162
+ rules.push({
163
+ selectors,
164
+ properties,
165
+ nestedRules,
166
+ parentSelector: null,
167
+ startPosition: { row: lineStart, column: this.getColumnNumber(source, match.index) },
168
+ endPosition: { row: lineEnd, column: this.getColumnNumber(source, endOffset) },
169
+ });
170
+ }
171
+ return rules;
172
+ }
173
+ /**
174
+ * Remove @rules from source to avoid matching their content as regular rules.
175
+ */
176
+ removeAtRules(source) {
177
+ // Remove @rules with blocks
178
+ let result = source.replace(/@[\w-]+\s*[^{;]*\{[^}]*(?:\{[^}]*\}[^}]*)*\}/g, '');
179
+ // Remove @rules without blocks (like @import, @charset)
180
+ result = result.replace(/@[\w-]+\s*[^{;]*;/g, '');
181
+ return result;
182
+ }
183
+ /**
184
+ * Remove CSS comments from source.
185
+ */
186
+ removeComments(source) {
187
+ // Remove block comments /* ... */
188
+ let result = source.replace(/\/\*[\s\S]*?\*\//g, '');
189
+ // Remove single-line comments // ... (SCSS/LESS style)
190
+ result = result.replace(/\/\/[^\n]*/g, '');
191
+ return result;
192
+ }
193
+ /**
194
+ * Parse comma-separated selectors.
195
+ */
196
+ parseSelectors(selectorText) {
197
+ return selectorText
198
+ .split(',')
199
+ .map(s => s.trim())
200
+ .filter(s => s.length > 0 && !s.startsWith('/*'));
201
+ }
202
+ /**
203
+ * Parse CSS declarations (property: value pairs).
204
+ */
205
+ parseDeclarations(declarationsText, parentSelector, baseLineNumber) {
206
+ const properties = [];
207
+ // Remove nested rules first
208
+ const cleanDeclarations = declarationsText.replace(/[^{}]+\{[^{}]*\}/g, '');
209
+ // Match property: value pairs
210
+ const declarationRegex = /([\w-]+)\s*:\s*([^;{}]+?)(?:\s*(!important))?\s*(?:;|$)/g;
211
+ let match;
212
+ while ((match = declarationRegex.exec(cleanDeclarations)) !== null) {
213
+ const name = match[1] ?? '';
214
+ const value = (match[2] ?? '').trim();
215
+ const isImportant = !!match[3];
216
+ const isVariable = name.startsWith('--');
217
+ const lineOffset = this.getLineNumber(cleanDeclarations, match.index);
218
+ const lineNumber = baseLineNumber + lineOffset;
219
+ properties.push({
220
+ name,
221
+ value,
222
+ isVariable,
223
+ isImportant,
224
+ parentSelector,
225
+ startPosition: { row: lineNumber, column: 0 },
226
+ endPosition: { row: lineNumber, column: (match[0]?.length ?? 0) },
227
+ });
228
+ }
229
+ return properties;
230
+ }
231
+ /**
232
+ * Parse nested rules (for SCSS/LESS).
233
+ */
234
+ parseNestedRules(declarationsText, parentSelector, baseLineNumber) {
235
+ const nestedRules = [];
236
+ // Match nested rules: selector { declarations }
237
+ const nestedRuleRegex = /([&\w\s.#:\[\]="-]+?)\s*\{([^{}]*)\}/g;
238
+ let match;
239
+ while ((match = nestedRuleRegex.exec(declarationsText)) !== null) {
240
+ const nestedSelectorText = (match[1] ?? '').trim();
241
+ const nestedDeclarationsText = match[2] ?? '';
242
+ // Skip if it looks like a property value with braces
243
+ if (!nestedSelectorText || /^[\w-]+$/.test(nestedSelectorText)) {
244
+ continue;
245
+ }
246
+ const lineOffset = this.getLineNumber(declarationsText, match.index);
247
+ const lineNumber = baseLineNumber + lineOffset;
248
+ // Resolve nested selector (replace & with parent)
249
+ const resolvedSelectors = this.resolveNestedSelectors(nestedSelectorText, parentSelector);
250
+ // Parse nested properties
251
+ const properties = this.parseDeclarations(nestedDeclarationsText, resolvedSelectors[0] ?? '', lineNumber);
252
+ nestedRules.push({
253
+ selectors: resolvedSelectors,
254
+ properties,
255
+ nestedRules: [],
256
+ parentSelector,
257
+ startPosition: { row: lineNumber, column: 0 },
258
+ endPosition: { row: lineNumber + this.getLineNumber(nestedDeclarationsText, nestedDeclarationsText.length), column: 0 },
259
+ });
260
+ }
261
+ return nestedRules;
262
+ }
263
+ /**
264
+ * Resolve nested selectors by replacing & with parent selector.
265
+ */
266
+ resolveNestedSelectors(nestedSelector, parentSelector) {
267
+ const selectors = this.parseSelectors(nestedSelector);
268
+ return selectors.map(selector => {
269
+ if (selector.includes('&')) {
270
+ return selector.replace(/&/g, parentSelector);
271
+ }
272
+ // If no &, prepend parent selector
273
+ return `${parentSelector} ${selector}`;
274
+ });
275
+ }
276
+ // ============================================
277
+ // Selector Extraction
278
+ // ============================================
279
+ /**
280
+ * Extract all selectors from parsed rules.
281
+ */
282
+ extractSelectors(rules) {
283
+ const selectors = [];
284
+ for (const rule of rules) {
285
+ for (const selector of rule.selectors) {
286
+ const parts = this.parseSelectorParts(selector);
287
+ const primaryType = this.determinePrimarySelectorType(parts);
288
+ selectors.push({
289
+ selector,
290
+ type: primaryType,
291
+ parts,
292
+ startPosition: rule.startPosition,
293
+ endPosition: rule.endPosition,
294
+ });
295
+ }
296
+ // Also extract from nested rules
297
+ for (const nestedRule of rule.nestedRules) {
298
+ for (const selector of nestedRule.selectors) {
299
+ const parts = this.parseSelectorParts(selector);
300
+ const primaryType = this.determinePrimarySelectorType(parts);
301
+ selectors.push({
302
+ selector,
303
+ type: primaryType,
304
+ parts,
305
+ startPosition: nestedRule.startPosition,
306
+ endPosition: nestedRule.endPosition,
307
+ });
308
+ }
309
+ }
310
+ }
311
+ return selectors;
312
+ }
313
+ /**
314
+ * Parse a selector into its component parts.
315
+ */
316
+ parseSelectorParts(selector) {
317
+ const parts = [];
318
+ // Match different selector types
319
+ const patterns = [
320
+ { regex: /::[\w-]+/g, type: 'pseudo-element' },
321
+ { regex: /:[\w-]+(?:\([^)]*\))?/g, type: 'pseudo-class' },
322
+ { regex: /\[[\w-]+(?:[~|^$*]?=["']?[^"'\]]*["']?)?\]/g, type: 'attribute' },
323
+ { regex: /#[\w-]+/g, type: 'id' },
324
+ { regex: /\.[\w-]+/g, type: 'class' },
325
+ { regex: /\*/g, type: 'universal' },
326
+ { regex: /[>+~\s]+/g, type: 'combinator' },
327
+ ];
328
+ // First, extract all special selectors
329
+ let remaining = selector;
330
+ for (const { regex, type } of patterns) {
331
+ let match;
332
+ const localRegex = new RegExp(regex.source, 'g');
333
+ while ((match = localRegex.exec(selector)) !== null) {
334
+ const text = match[0].trim();
335
+ if (text && type !== 'combinator') {
336
+ parts.push({ text, type });
337
+ }
338
+ }
339
+ // Remove matched parts from remaining
340
+ remaining = remaining.replace(regex, ' ');
341
+ }
342
+ // What's left should be element selectors
343
+ const elementParts = remaining.trim().split(/\s+/).filter(p => p && /^[\w-]+$/.test(p));
344
+ for (const element of elementParts) {
345
+ parts.push({ text: element, type: 'element' });
346
+ }
347
+ return parts;
348
+ }
349
+ /**
350
+ * Determine the primary selector type from parts.
351
+ */
352
+ determinePrimarySelectorType(parts) {
353
+ // Priority: id > class > element > pseudo-class > pseudo-element > attribute > universal
354
+ const priority = ['id', 'class', 'element', 'pseudo-class', 'pseudo-element', 'attribute', 'universal'];
355
+ for (const type of priority) {
356
+ if (parts.some(p => p.type === type)) {
357
+ return type;
358
+ }
359
+ }
360
+ return 'element';
361
+ }
362
+ // ============================================
363
+ // Property Extraction
364
+ // ============================================
365
+ /**
366
+ * Extract all properties from parsed rules.
367
+ */
368
+ extractAllProperties(rules) {
369
+ const properties = [];
370
+ for (const rule of rules) {
371
+ properties.push(...rule.properties);
372
+ // Also extract from nested rules
373
+ for (const nestedRule of rule.nestedRules) {
374
+ properties.push(...nestedRule.properties);
375
+ }
376
+ }
377
+ return properties;
378
+ }
379
+ // ============================================
380
+ // CSS Variable Extraction
381
+ // ============================================
382
+ /**
383
+ * Extract all CSS variables (custom properties) from source.
384
+ */
385
+ extractVariables(source, _lines) {
386
+ const variables = [];
387
+ // Match CSS variable declarations: --variable-name: value;
388
+ // We need to find them within rule blocks
389
+ const ruleRegex = /([^{}]+?)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
390
+ let ruleMatch;
391
+ while ((ruleMatch = ruleRegex.exec(source)) !== null) {
392
+ const scope = (ruleMatch[1] ?? '').trim();
393
+ const declarations = ruleMatch[2] ?? '';
394
+ const ruleLineStart = this.getLineNumber(source, ruleMatch.index);
395
+ // Find variable declarations within this rule
396
+ const varRegex = /(--[\w-]+)\s*:\s*([^;{}]+?)\s*;/g;
397
+ let varMatch;
398
+ while ((varMatch = varRegex.exec(declarations)) !== null) {
399
+ const name = varMatch[1] ?? '';
400
+ const value = (varMatch[2] ?? '').trim();
401
+ const lineOffset = this.getLineNumber(declarations, varMatch.index);
402
+ const lineNumber = ruleLineStart + lineOffset;
403
+ variables.push({
404
+ name,
405
+ value,
406
+ scope,
407
+ startPosition: { row: lineNumber, column: 0 },
408
+ endPosition: { row: lineNumber, column: (varMatch[0]?.length ?? 0) },
409
+ });
410
+ }
411
+ }
412
+ return variables;
413
+ }
414
+ // ============================================
415
+ // AST Node Creation
416
+ // ============================================
417
+ /**
418
+ * Create an AST node for an @rule.
419
+ */
420
+ createAtRuleNode(atRule, _source) {
421
+ const children = [];
422
+ // Add params node if present
423
+ if (atRule.params) {
424
+ children.push(this.createNode('AtRuleParams', atRule.params, atRule.startPosition, atRule.endPosition, []));
425
+ }
426
+ // Add nested rule nodes
427
+ for (const nestedRule of atRule.nestedRules) {
428
+ children.push(this.createRuleNode(nestedRule, ''));
429
+ }
430
+ return this.createNode('AtRule', `@${atRule.name}`, atRule.startPosition, atRule.endPosition, children);
431
+ }
432
+ /**
433
+ * Create an AST node for a CSS rule.
434
+ */
435
+ createRuleNode(rule, _source) {
436
+ const children = [];
437
+ // Add selector nodes
438
+ for (const selector of rule.selectors) {
439
+ children.push(this.createNode('Selector', selector, rule.startPosition, rule.endPosition, []));
440
+ }
441
+ // Add declaration nodes
442
+ for (const prop of rule.properties) {
443
+ children.push(this.createNode('Declaration', `${prop.name}: ${prop.value}`, prop.startPosition, prop.endPosition, []));
444
+ }
445
+ // Add nested rule nodes
446
+ for (const nestedRule of rule.nestedRules) {
447
+ children.push(this.createRuleNode(nestedRule, ''));
448
+ }
449
+ return this.createNode('Rule', rule.selectors.join(', '), rule.startPosition, rule.endPosition, children);
450
+ }
451
+ // ============================================
452
+ // Utility Methods
453
+ // ============================================
454
+ /**
455
+ * Get the line number for a character offset.
456
+ */
457
+ getLineNumber(source, offset) {
458
+ let line = 0;
459
+ for (let i = 0; i < offset && i < source.length; i++) {
460
+ if (source[i] === '\n') {
461
+ line++;
462
+ }
463
+ }
464
+ return line;
465
+ }
466
+ /**
467
+ * Get the column number for a character offset.
468
+ */
469
+ getColumnNumber(source, offset) {
470
+ let column = 0;
471
+ for (let i = offset - 1; i >= 0 && source[i] !== '\n'; i--) {
472
+ column++;
473
+ }
474
+ return column;
475
+ }
476
+ }
477
+ //# sourceMappingURL=css-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-parser.js","sourceRoot":"","sources":["../../src/parsers/css-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Parser module exports
3
+ *
4
+ * Provides multi-language AST parsing via Tree-sitter with
5
+ * incremental parsing support.
6
+ */
7
+ export * from './types.js';
8
+ export * from './base-parser.js';
9
+ export * from './parser-manager.js';
10
+ export * from './typescript-parser.js';
11
+ export * from './python-parser.js';
12
+ export * from './css-parser.js';
13
+ export * from './json-parser.js';
14
+ export * from './markdown-parser.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Parser module exports
3
+ *
4
+ * Provides multi-language AST parsing via Tree-sitter with
5
+ * incremental parsing support.
6
+ */
7
+ export * from './types.js';
8
+ export * from './base-parser.js';
9
+ export * from './parser-manager.js';
10
+ export * from './typescript-parser.js';
11
+ export * from './python-parser.js';
12
+ export * from './css-parser.js';
13
+ export * from './json-parser.js';
14
+ export * from './markdown-parser.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}