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,602 @@
1
+ /**
2
+ * JSON Parser - JSON/YAML/JSONC parsing for AST extraction
3
+ *
4
+ * Extracts schema information, keys, types, nested structures,
5
+ * arrays, and objects from JSON-like files using native parsing.
6
+ *
7
+ * @requirements 3.2
8
+ */
9
+ import { BaseParser } from './base-parser.js';
10
+ /**
11
+ * JSON/YAML/JSONC parser using native parsing.
12
+ *
13
+ * Provides AST parsing and extraction of schema information,
14
+ * keys, types, and nested structures from JSON-like source files.
15
+ *
16
+ * @requirements 3.2 - Support JSON/YAML parsing
17
+ * @requirements 3.3 - Graceful degradation on parse errors
18
+ */
19
+ export class JSONParser extends BaseParser {
20
+ language = 'json';
21
+ extensions = ['.json', '.jsonc', '.yaml', '.yml'];
22
+ /**
23
+ * Parse JSON/YAML 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 JSONParseResult 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 isYaml = filePath ? this.isYamlFile(filePath) : false;
35
+ const isJsonc = filePath ? this.isJsoncFile(filePath) : false;
36
+ // Preprocess source if needed
37
+ let processedSource = source;
38
+ if (isJsonc) {
39
+ processedSource = this.stripJsonComments(source);
40
+ }
41
+ else if (isYaml) {
42
+ processedSource = this.convertYamlToJson(source);
43
+ }
44
+ // Parse the JSON
45
+ let parsedValue;
46
+ try {
47
+ parsedValue = JSON.parse(processedSource);
48
+ }
49
+ catch (parseError) {
50
+ const errorMessage = parseError instanceof Error ? parseError.message : 'Invalid JSON';
51
+ const errorPosition = this.extractErrorPosition(errorMessage, lines);
52
+ return {
53
+ ...this.createFailureResult([this.createError(errorMessage, errorPosition)]),
54
+ keys: [],
55
+ objects: [],
56
+ arrays: [],
57
+ schema: this.createEmptySchema(),
58
+ parsedValue: null,
59
+ };
60
+ }
61
+ // Extract semantic information
62
+ const keys = [];
63
+ const objects = [];
64
+ const arrays = [];
65
+ this.extractStructure(parsedValue, '', 0, keys, objects, arrays, source, lines);
66
+ // Build schema information
67
+ const schema = this.buildSchema(parsedValue, keys, objects, arrays);
68
+ // Build AST
69
+ const rootNode = this.buildASTNode(parsedValue, source, lines, 0, '');
70
+ const ast = this.createAST(rootNode, source);
71
+ return {
72
+ ...this.createSuccessResult(ast),
73
+ keys,
74
+ objects,
75
+ arrays,
76
+ schema,
77
+ parsedValue,
78
+ };
79
+ }
80
+ catch (error) {
81
+ const errorMessage = error instanceof Error ? error.message : 'Unknown parse error';
82
+ return {
83
+ ...this.createFailureResult([this.createError(errorMessage, { row: 0, column: 0 })]),
84
+ keys: [],
85
+ objects: [],
86
+ arrays: [],
87
+ schema: this.createEmptySchema(),
88
+ parsedValue: null,
89
+ };
90
+ }
91
+ }
92
+ /**
93
+ * Query the AST for nodes matching a pattern.
94
+ *
95
+ * Supports querying by node type (e.g., 'Object', 'Array', 'Property', 'String', 'Number').
96
+ * Also supports querying by key path pattern (e.g., '$.config.*', '$.items[*]').
97
+ *
98
+ * @param ast - The AST to query
99
+ * @param pattern - The node type or key path pattern to search for
100
+ * @returns Array of matching AST nodes
101
+ *
102
+ * @requirements 3.5
103
+ */
104
+ query(ast, pattern) {
105
+ // If pattern starts with $, treat it as a JSONPath-like query
106
+ if (pattern.startsWith('$')) {
107
+ return this.queryByPath(ast, pattern);
108
+ }
109
+ // Otherwise, query by node type
110
+ return this.findNodesByType(ast, pattern);
111
+ }
112
+ // ============================================
113
+ // File Type Detection
114
+ // ============================================
115
+ /**
116
+ * Check if a file is a YAML file based on extension.
117
+ */
118
+ isYamlFile(filePath) {
119
+ const ext = filePath.toLowerCase().split('.').pop();
120
+ return ext === 'yaml' || ext === 'yml';
121
+ }
122
+ /**
123
+ * Check if a file is a JSONC file based on extension.
124
+ */
125
+ isJsoncFile(filePath) {
126
+ const ext = filePath.toLowerCase().split('.').pop();
127
+ return ext === 'jsonc';
128
+ }
129
+ // ============================================
130
+ // Source Preprocessing
131
+ // ============================================
132
+ /**
133
+ * Strip comments from JSONC source.
134
+ * Handles both single-line (//) and multi-line (/* *\/) comments.
135
+ */
136
+ stripJsonComments(source) {
137
+ let result = '';
138
+ let i = 0;
139
+ let inString = false;
140
+ let stringChar = '';
141
+ while (i < source.length) {
142
+ const char = source[i];
143
+ const nextChar = source[i + 1];
144
+ // Handle string boundaries
145
+ if ((char === '"' || char === "'") && (i === 0 || source[i - 1] !== '\\')) {
146
+ if (!inString) {
147
+ inString = true;
148
+ stringChar = char;
149
+ }
150
+ else if (char === stringChar) {
151
+ inString = false;
152
+ }
153
+ result += char;
154
+ i++;
155
+ continue;
156
+ }
157
+ // Skip comments only when not in a string
158
+ if (!inString) {
159
+ // Single-line comment
160
+ if (char === '/' && nextChar === '/') {
161
+ // Skip until end of line
162
+ while (i < source.length && source[i] !== '\n') {
163
+ i++;
164
+ }
165
+ continue;
166
+ }
167
+ // Multi-line comment
168
+ if (char === '/' && nextChar === '*') {
169
+ i += 2;
170
+ while (i < source.length - 1 && !(source[i] === '*' && source[i + 1] === '/')) {
171
+ // Preserve newlines for position tracking
172
+ if (source[i] === '\n') {
173
+ result += '\n';
174
+ }
175
+ i++;
176
+ }
177
+ i += 2; // Skip closing */
178
+ continue;
179
+ }
180
+ }
181
+ result += char;
182
+ i++;
183
+ }
184
+ return result;
185
+ }
186
+ /**
187
+ * Convert simple YAML to JSON.
188
+ * This is a basic implementation that handles common YAML patterns.
189
+ */
190
+ convertYamlToJson(source) {
191
+ const lines = source.split('\n');
192
+ const stack = [];
193
+ let currentObject = {};
194
+ let rootValue = currentObject;
195
+ for (let i = 0; i < lines.length; i++) {
196
+ const line = lines[i] ?? '';
197
+ const trimmed = line.trim();
198
+ // Skip empty lines and comments
199
+ if (!trimmed || trimmed.startsWith('#')) {
200
+ continue;
201
+ }
202
+ // Calculate indentation
203
+ const indent = line.length - line.trimStart().length;
204
+ // Handle list items
205
+ if (trimmed.startsWith('- ')) {
206
+ const value = this.stripYamlInlineComment(trimmed.slice(2).trim());
207
+ // Find or create the array at this level
208
+ while (stack.length > 0 && (stack[stack.length - 1]?.indent ?? 0) >= indent) {
209
+ stack.pop();
210
+ }
211
+ if (stack.length === 0) {
212
+ // Root is an array
213
+ if (!Array.isArray(rootValue)) {
214
+ rootValue = [];
215
+ }
216
+ rootValue.push(this.parseYamlValue(value));
217
+ }
218
+ else {
219
+ const parent = stack[stack.length - 1];
220
+ if (parent && Array.isArray(parent.value)) {
221
+ parent.value.push(this.parseYamlValue(value));
222
+ }
223
+ }
224
+ continue;
225
+ }
226
+ // Handle key-value pairs
227
+ const colonIndex = trimmed.indexOf(':');
228
+ if (colonIndex > 0) {
229
+ const key = trimmed.slice(0, colonIndex).trim();
230
+ let valueStr = trimmed.slice(colonIndex + 1).trim();
231
+ // Strip inline comments from value
232
+ valueStr = this.stripYamlInlineComment(valueStr);
233
+ // Pop stack to find correct parent
234
+ while (stack.length > 0 && (stack[stack.length - 1]?.indent ?? 0) >= indent) {
235
+ stack.pop();
236
+ }
237
+ const parent = stack.length > 0 ? stack[stack.length - 1]?.value : currentObject;
238
+ if (parent && typeof parent === 'object' && !Array.isArray(parent)) {
239
+ if (valueStr === '' || valueStr === '|' || valueStr === '>') {
240
+ // Nested object or multi-line string
241
+ const newObj = {};
242
+ parent[key] = newObj;
243
+ stack.push({ indent, value: newObj });
244
+ }
245
+ else if (valueStr.startsWith('[') && valueStr.endsWith(']')) {
246
+ // Inline array
247
+ parent[key] = this.parseYamlInlineArray(valueStr);
248
+ }
249
+ else {
250
+ // Simple value
251
+ parent[key] = this.parseYamlValue(valueStr);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ return JSON.stringify(rootValue);
257
+ }
258
+ /**
259
+ * Strip inline comments from a YAML value.
260
+ * Handles comments that appear after values (e.g., "value # comment").
261
+ */
262
+ stripYamlInlineComment(value) {
263
+ // If the value is quoted, don't strip anything
264
+ if ((value.startsWith('"') && value.includes('"', 1)) ||
265
+ (value.startsWith("'") && value.includes("'", 1))) {
266
+ // Find the closing quote and check for comment after
267
+ const quoteChar = value[0];
268
+ let i = 1;
269
+ while (i < value.length) {
270
+ if (value[i] === '\\' && i + 1 < value.length) {
271
+ i += 2; // Skip escaped character
272
+ continue;
273
+ }
274
+ if (value[i] === quoteChar) {
275
+ // Found closing quote, return the quoted string
276
+ return value.slice(0, i + 1);
277
+ }
278
+ i++;
279
+ }
280
+ return value;
281
+ }
282
+ // For unquoted values, find the comment marker
283
+ const commentIndex = value.indexOf(' #');
284
+ if (commentIndex > 0) {
285
+ return value.slice(0, commentIndex).trim();
286
+ }
287
+ // Also check for comment at the start (after whitespace)
288
+ if (value.includes('#')) {
289
+ const hashIndex = value.indexOf('#');
290
+ // Only strip if there's whitespace before the #
291
+ if (hashIndex > 0 && /\s/.test(value[hashIndex - 1] ?? '')) {
292
+ return value.slice(0, hashIndex).trim();
293
+ }
294
+ }
295
+ return value;
296
+ }
297
+ /**
298
+ * Parse a YAML value to its JavaScript equivalent.
299
+ */
300
+ parseYamlValue(value) {
301
+ // Remove quotes if present
302
+ if ((value.startsWith('"') && value.endsWith('"')) ||
303
+ (value.startsWith("'") && value.endsWith("'"))) {
304
+ return value.slice(1, -1);
305
+ }
306
+ // Boolean
307
+ if (value === 'true' || value === 'yes' || value === 'on')
308
+ return true;
309
+ if (value === 'false' || value === 'no' || value === 'off')
310
+ return false;
311
+ // Null
312
+ if (value === 'null' || value === '~' || value === '')
313
+ return null;
314
+ // Number
315
+ const num = Number(value);
316
+ if (!isNaN(num) && value !== '')
317
+ return num;
318
+ // String
319
+ return value;
320
+ }
321
+ /**
322
+ * Parse a YAML inline array like [1, 2, 3].
323
+ */
324
+ parseYamlInlineArray(value) {
325
+ const inner = value.slice(1, -1).trim();
326
+ if (!inner)
327
+ return [];
328
+ return inner.split(',').map(item => this.parseYamlValue(item.trim()));
329
+ }
330
+ // ============================================
331
+ // Structure Extraction
332
+ // ============================================
333
+ /**
334
+ * Extract structure information from parsed JSON.
335
+ */
336
+ extractStructure(value, path, depth, keys, objects, arrays, source, lines) {
337
+ if (value === null || value === undefined) {
338
+ return;
339
+ }
340
+ if (Array.isArray(value)) {
341
+ const position = this.findPositionForPath(path, source, lines);
342
+ const elementTypes = value.map(item => this.getValueType(item));
343
+ const uniqueTypes = [...new Set(elementTypes)];
344
+ arrays.push({
345
+ path: path || '$',
346
+ length: value.length,
347
+ elementTypes,
348
+ isHomogeneous: uniqueTypes.length <= 1,
349
+ depth,
350
+ startPosition: position.start,
351
+ endPosition: position.end,
352
+ });
353
+ // Process array elements
354
+ value.forEach((item, index) => {
355
+ const itemPath = path ? `${path}[${index}]` : `$[${index}]`;
356
+ this.extractStructure(item, itemPath, depth + 1, keys, objects, arrays, source, lines);
357
+ });
358
+ }
359
+ else if (typeof value === 'object') {
360
+ const objKeys = Object.keys(value);
361
+ const position = this.findPositionForPath(path, source, lines);
362
+ objects.push({
363
+ path: path || '$',
364
+ keys: objKeys,
365
+ depth,
366
+ startPosition: position.start,
367
+ endPosition: position.end,
368
+ });
369
+ // Process object properties
370
+ for (const key of objKeys) {
371
+ const propValue = value[key];
372
+ const propPath = path ? `${path}.${key}` : key;
373
+ const propPosition = this.findPositionForKey(key, source, lines);
374
+ keys.push({
375
+ key,
376
+ path: propPath,
377
+ valueType: this.getValueType(propValue),
378
+ value: this.isPrimitive(propValue) ? propValue : undefined,
379
+ depth,
380
+ parentPath: path || null,
381
+ startPosition: propPosition.start,
382
+ endPosition: propPosition.end,
383
+ });
384
+ this.extractStructure(propValue, propPath, depth + 1, keys, objects, arrays, source, lines);
385
+ }
386
+ }
387
+ }
388
+ /**
389
+ * Get the JSON value type.
390
+ */
391
+ getValueType(value) {
392
+ if (value === null)
393
+ return 'null';
394
+ if (Array.isArray(value))
395
+ return 'array';
396
+ if (typeof value === 'object')
397
+ return 'object';
398
+ if (typeof value === 'string')
399
+ return 'string';
400
+ if (typeof value === 'number')
401
+ return 'number';
402
+ if (typeof value === 'boolean')
403
+ return 'boolean';
404
+ return 'null';
405
+ }
406
+ /**
407
+ * Check if a value is a primitive type.
408
+ */
409
+ isPrimitive(value) {
410
+ return value === null ||
411
+ typeof value === 'string' ||
412
+ typeof value === 'number' ||
413
+ typeof value === 'boolean';
414
+ }
415
+ // ============================================
416
+ // Schema Building
417
+ // ============================================
418
+ /**
419
+ * Build schema information from extracted data.
420
+ */
421
+ buildSchema(parsedValue, keys, objects, arrays) {
422
+ const keyPaths = keys.map(k => k.path);
423
+ const uniqueKeys = [...new Set(keys.map(k => k.key))];
424
+ const maxDepth = Math.max(0, ...keys.map(k => k.depth), ...objects.map(o => o.depth), ...arrays.map(a => a.depth));
425
+ return {
426
+ rootType: this.getValueType(parsedValue),
427
+ keyPaths,
428
+ uniqueKeys,
429
+ maxDepth,
430
+ totalKeys: keys.length,
431
+ totalArrays: arrays.length,
432
+ totalObjects: objects.length,
433
+ };
434
+ }
435
+ /**
436
+ * Create an empty schema for error cases.
437
+ */
438
+ createEmptySchema() {
439
+ return {
440
+ rootType: 'null',
441
+ keyPaths: [],
442
+ uniqueKeys: [],
443
+ maxDepth: 0,
444
+ totalKeys: 0,
445
+ totalArrays: 0,
446
+ totalObjects: 0,
447
+ };
448
+ }
449
+ // ============================================
450
+ // AST Building
451
+ // ============================================
452
+ /**
453
+ * Build an AST node from a JSON value.
454
+ */
455
+ buildASTNode(value, source, lines, depth, path) {
456
+ const position = this.findPositionForPath(path, source, lines);
457
+ if (value === null) {
458
+ return this.createNode('Null', 'null', position.start, position.end, []);
459
+ }
460
+ if (typeof value === 'boolean') {
461
+ return this.createNode('Boolean', String(value), position.start, position.end, []);
462
+ }
463
+ if (typeof value === 'number') {
464
+ return this.createNode('Number', String(value), position.start, position.end, []);
465
+ }
466
+ if (typeof value === 'string') {
467
+ return this.createNode('String', `"${value}"`, position.start, position.end, []);
468
+ }
469
+ if (Array.isArray(value)) {
470
+ const children = value.map((item, index) => {
471
+ const itemPath = path ? `${path}[${index}]` : `$[${index}]`;
472
+ return this.buildASTNode(item, source, lines, depth + 1, itemPath);
473
+ });
474
+ return this.createNode('Array', JSON.stringify(value), position.start, position.end, children);
475
+ }
476
+ if (typeof value === 'object') {
477
+ const children = [];
478
+ for (const [key, propValue] of Object.entries(value)) {
479
+ const propPath = path ? `${path}.${key}` : key;
480
+ const keyPosition = this.findPositionForKey(key, source, lines);
481
+ // Create property node with key and value as children
482
+ const keyNode = this.createNode('Key', `"${key}"`, keyPosition.start, keyPosition.end, []);
483
+ const valueNode = this.buildASTNode(propValue, source, lines, depth + 1, propPath);
484
+ const propertyNode = this.createNode('Property', `"${key}": ${JSON.stringify(propValue)}`, keyPosition.start, valueNode.endPosition, [keyNode, valueNode]);
485
+ children.push(propertyNode);
486
+ }
487
+ return this.createNode('Object', JSON.stringify(value), position.start, position.end, children);
488
+ }
489
+ return this.createNode('Unknown', String(value), position.start, position.end, []);
490
+ }
491
+ // ============================================
492
+ // Position Finding
493
+ // ============================================
494
+ /**
495
+ * Find the position of a path in the source.
496
+ */
497
+ findPositionForPath(path, source, lines) {
498
+ // For root, return document bounds
499
+ if (!path || path === '$') {
500
+ return {
501
+ start: { row: 0, column: 0 },
502
+ end: { row: lines.length - 1, column: lines[lines.length - 1]?.length ?? 0 },
503
+ };
504
+ }
505
+ // Try to find the key in the source
506
+ const lastKey = path.split('.').pop()?.replace(/\[\d+\]$/, '') ?? '';
507
+ return this.findPositionForKey(lastKey, source, lines);
508
+ }
509
+ /**
510
+ * Find the position of a key in the source.
511
+ */
512
+ findPositionForKey(key, _source, lines) {
513
+ // Search for the key in the source
514
+ const keyPattern = new RegExp(`"${this.escapeRegex(key)}"\\s*:`);
515
+ for (let row = 0; row < lines.length; row++) {
516
+ const line = lines[row] ?? '';
517
+ const match = keyPattern.exec(line);
518
+ if (match) {
519
+ return {
520
+ start: { row, column: match.index },
521
+ end: { row, column: match.index + match[0].length },
522
+ };
523
+ }
524
+ }
525
+ // Fallback to start of document
526
+ return {
527
+ start: { row: 0, column: 0 },
528
+ end: { row: 0, column: 0 },
529
+ };
530
+ }
531
+ /**
532
+ * Escape special regex characters.
533
+ */
534
+ escapeRegex(str) {
535
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
536
+ }
537
+ /**
538
+ * Extract error position from JSON parse error message.
539
+ */
540
+ extractErrorPosition(errorMessage, lines) {
541
+ // Try to extract position from error message
542
+ // Common format: "... at position 123" or "... at line 5 column 10"
543
+ const positionMatch = errorMessage.match(/position\s+(\d+)/i);
544
+ if (positionMatch) {
545
+ const offset = parseInt(positionMatch[1] ?? '0', 10);
546
+ return this.offsetToPosition(offset, lines);
547
+ }
548
+ const lineColMatch = errorMessage.match(/line\s+(\d+).*column\s+(\d+)/i);
549
+ if (lineColMatch) {
550
+ return {
551
+ row: parseInt(lineColMatch[1] ?? '1', 10) - 1,
552
+ column: parseInt(lineColMatch[2] ?? '1', 10) - 1,
553
+ };
554
+ }
555
+ return { row: 0, column: 0 };
556
+ }
557
+ /**
558
+ * Convert a character offset to a position.
559
+ */
560
+ offsetToPosition(offset, lines) {
561
+ let currentOffset = 0;
562
+ for (let row = 0; row < lines.length; row++) {
563
+ const lineLength = (lines[row]?.length ?? 0) + 1; // +1 for newline
564
+ if (currentOffset + lineLength > offset) {
565
+ return { row, column: offset - currentOffset };
566
+ }
567
+ currentOffset += lineLength;
568
+ }
569
+ return { row: lines.length - 1, column: lines[lines.length - 1]?.length ?? 0 };
570
+ }
571
+ // ============================================
572
+ // JSONPath-like Query
573
+ // ============================================
574
+ /**
575
+ * Query the AST using a JSONPath-like pattern.
576
+ */
577
+ queryByPath(ast, pattern) {
578
+ const results = [];
579
+ // Normalize pattern
580
+ const normalizedPattern = pattern
581
+ .replace(/^\$\.?/, '') // Remove leading $. or $
582
+ .replace(/\[\*\]/g, '.*') // Convert [*] to .*
583
+ .replace(/\./g, '\\.') // Escape dots
584
+ .replace(/\*/g, '[^.\\[\\]]+'); // Convert * to match any key
585
+ const regex = new RegExp(`^${normalizedPattern}$`);
586
+ // Traverse AST and collect matching nodes
587
+ this.traverse(ast, ({ node }) => {
588
+ // Check if node has a path that matches
589
+ if (node.type === 'Property') {
590
+ const keyNode = node.children.find(c => c.type === 'Key');
591
+ if (keyNode) {
592
+ const key = keyNode.text.replace(/^"|"$/g, '');
593
+ if (regex.test(key)) {
594
+ results.push(node);
595
+ }
596
+ }
597
+ }
598
+ });
599
+ return results;
600
+ }
601
+ }
602
+ //# sourceMappingURL=json-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parser.js","sourceRoot":"","sources":["../../src/parsers/json-parser.ts"],"names":[],"mappings":"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"}