@milo4jo/contextkit 0.5.1 → 0.5.7

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 (55) hide show
  1. package/README.md +143 -3
  2. package/dist/commands/doctor.d.ts +3 -0
  3. package/dist/commands/doctor.d.ts.map +1 -0
  4. package/dist/commands/doctor.js +254 -0
  5. package/dist/commands/doctor.js.map +1 -0
  6. package/dist/commands/graph.d.ts +10 -0
  7. package/dist/commands/graph.d.ts.map +1 -0
  8. package/dist/commands/graph.js +289 -0
  9. package/dist/commands/graph.js.map +1 -0
  10. package/dist/commands/select.d.ts.map +1 -1
  11. package/dist/commands/select.js +9 -0
  12. package/dist/commands/select.js.map +1 -1
  13. package/dist/commands/symbol.d.ts +9 -0
  14. package/dist/commands/symbol.d.ts.map +1 -0
  15. package/dist/commands/symbol.js +420 -0
  16. package/dist/commands/symbol.js.map +1 -0
  17. package/dist/db/index.d.ts +1 -0
  18. package/dist/db/index.d.ts.map +1 -1
  19. package/dist/db/index.js +1 -0
  20. package/dist/db/index.js.map +1 -1
  21. package/dist/errors/index.d.ts +15 -0
  22. package/dist/errors/index.d.ts.map +1 -1
  23. package/dist/errors/index.js +32 -0
  24. package/dist/errors/index.js.map +1 -1
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/indexer/chunker.d.ts +10 -1
  28. package/dist/indexer/chunker.d.ts.map +1 -1
  29. package/dist/indexer/chunker.js +123 -2
  30. package/dist/indexer/chunker.js.map +1 -1
  31. package/dist/indexer/index.d.ts.map +1 -1
  32. package/dist/indexer/index.js +3 -2
  33. package/dist/indexer/index.js.map +1 -1
  34. package/dist/mcp-server.js +0 -0
  35. package/dist/parsers/index.d.ts +26 -6
  36. package/dist/parsers/index.d.ts.map +1 -1
  37. package/dist/parsers/index.js +71 -12
  38. package/dist/parsers/index.js.map +1 -1
  39. package/dist/parsers/markdown.d.ts +29 -0
  40. package/dist/parsers/markdown.d.ts.map +1 -0
  41. package/dist/parsers/markdown.js +142 -0
  42. package/dist/parsers/markdown.js.map +1 -0
  43. package/dist/parsers/tree-sitter.d.ts +32 -0
  44. package/dist/parsers/tree-sitter.d.ts.map +1 -0
  45. package/dist/parsers/tree-sitter.js +356 -0
  46. package/dist/parsers/tree-sitter.js.map +1 -0
  47. package/dist/selector/formatter.d.ts +4 -1
  48. package/dist/selector/formatter.d.ts.map +1 -1
  49. package/dist/selector/formatter.js +214 -6
  50. package/dist/selector/formatter.js.map +1 -1
  51. package/dist/selector/index.d.ts +4 -0
  52. package/dist/selector/index.d.ts.map +1 -1
  53. package/dist/selector/index.js +3 -1
  54. package/dist/selector/index.js.map +1 -1
  55. package/package.json +6 -1
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Markdown Parser
3
+ *
4
+ * Structure-aware parsing for Markdown files.
5
+ * Extracts sections based on headers, keeps code blocks intact.
6
+ *
7
+ * Inspired by QMD (Quarto) structure:
8
+ * - YAML front matter extraction
9
+ * - Header-based sections
10
+ * - Code block preservation
11
+ */
12
+ /**
13
+ * Parse a Markdown file and extract structural boundaries.
14
+ *
15
+ * @param content - Markdown file content
16
+ * @param _filePath - Optional file path for context (unused, for API consistency)
17
+ * @returns Parse result with section/code block boundaries
18
+ */
19
+ export function parseMarkdown(content, _filePath) {
20
+ const lines = content.split('\n');
21
+ const boundaries = [];
22
+ let inFrontMatter = false;
23
+ let frontMatterStart = 0;
24
+ let inCodeBlock = false;
25
+ let codeBlockStart = 0;
26
+ let codeBlockLang = '';
27
+ let currentSection = null;
28
+ // Check for YAML front matter at the start
29
+ if (lines[0]?.trim() === '---') {
30
+ inFrontMatter = true;
31
+ frontMatterStart = 1;
32
+ }
33
+ for (let i = 0; i < lines.length; i++) {
34
+ const line = lines[i];
35
+ const lineNum = i + 1;
36
+ // Handle front matter
37
+ if (inFrontMatter) {
38
+ if (line.trim() === '---' && lineNum > frontMatterStart) {
39
+ // End of front matter
40
+ boundaries.push({
41
+ type: 'constant', // Use 'constant' for front matter (document metadata)
42
+ name: 'frontmatter',
43
+ startLine: frontMatterStart,
44
+ endLine: lineNum,
45
+ exported: false,
46
+ });
47
+ inFrontMatter = false;
48
+ }
49
+ continue;
50
+ }
51
+ // Handle code blocks
52
+ const codeBlockMatch = line.match(/^```(\w*)/);
53
+ if (codeBlockMatch) {
54
+ if (!inCodeBlock) {
55
+ // Start of code block
56
+ inCodeBlock = true;
57
+ codeBlockStart = lineNum;
58
+ codeBlockLang = codeBlockMatch[1] || 'text';
59
+ }
60
+ else {
61
+ // End of code block
62
+ const blockName = codeBlockLang ? `codeblock:${codeBlockLang}` : 'codeblock';
63
+ boundaries.push({
64
+ type: 'function', // Use 'function' for code blocks (executable content)
65
+ name: blockName,
66
+ startLine: codeBlockStart,
67
+ endLine: lineNum,
68
+ exported: false,
69
+ });
70
+ inCodeBlock = false;
71
+ }
72
+ continue;
73
+ }
74
+ // Skip content inside code blocks
75
+ if (inCodeBlock) {
76
+ continue;
77
+ }
78
+ // Handle headers
79
+ const headerMatch = line.match(/^(#{1,6})\s+(.+)$/);
80
+ if (headerMatch) {
81
+ const level = headerMatch[1].length;
82
+ const title = headerMatch[2].trim();
83
+ // Always close previous section when we encounter a new header
84
+ // Each header defines a new section
85
+ if (currentSection) {
86
+ boundaries.push({
87
+ type: 'class', // Use 'class' for sections (containers of content)
88
+ name: currentSection.name,
89
+ startLine: currentSection.startLine,
90
+ endLine: lineNum - 1,
91
+ exported: currentSection.level === 1, // Top-level headers are "exported"
92
+ });
93
+ }
94
+ // Start new section
95
+ currentSection = {
96
+ name: title,
97
+ level,
98
+ startLine: lineNum,
99
+ };
100
+ }
101
+ }
102
+ // Close final section
103
+ if (currentSection) {
104
+ boundaries.push({
105
+ type: 'class',
106
+ name: currentSection.name,
107
+ startLine: currentSection.startLine,
108
+ endLine: lines.length,
109
+ exported: currentSection.level === 1,
110
+ });
111
+ }
112
+ // Handle unclosed code block
113
+ if (inCodeBlock) {
114
+ boundaries.push({
115
+ type: 'function',
116
+ name: codeBlockLang ? `codeblock:${codeBlockLang}` : 'codeblock',
117
+ startLine: codeBlockStart,
118
+ endLine: lines.length,
119
+ exported: false,
120
+ });
121
+ }
122
+ // Sort boundaries by start line
123
+ boundaries.sort((a, b) => a.startLine - b.startLine);
124
+ return {
125
+ success: true,
126
+ boundaries,
127
+ };
128
+ }
129
+ /**
130
+ * Check if a file is a Markdown file.
131
+ */
132
+ export function isMarkdown(filePath) {
133
+ const ext = filePath.toLowerCase().split('.').pop();
134
+ return ext === 'md' || ext === 'mdx' || ext === 'markdown' || ext === 'qmd';
135
+ }
136
+ /**
137
+ * Get supported Markdown extensions.
138
+ */
139
+ export function getMarkdownExtensions() {
140
+ return ['md', 'mdx', 'markdown', 'qmd'];
141
+ }
142
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/parsers/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Tree-sitter Multi-Language Parser
3
+ *
4
+ * Universal AST parsing using tree-sitter WASM bindings.
5
+ * Supports: Python, Go, Rust (and more to come)
6
+ */
7
+ import type { ParseResult } from './typescript.js';
8
+ /**
9
+ * Get language ID from file extension
10
+ */
11
+ export declare function getLanguageForFile(filePath: string): string | null;
12
+ /**
13
+ * Check if tree-sitter can parse this file type
14
+ */
15
+ export declare function canParseWithTreeSitter(filePath: string): boolean;
16
+ /**
17
+ * Parse a file using tree-sitter
18
+ */
19
+ export declare function parseWithTreeSitter(content: string, filePath: string): Promise<ParseResult>;
20
+ /**
21
+ * Generate a repo map (signatures only) from a parsed file
22
+ */
23
+ export declare function generateRepoMap(fileContent: string, filePath: string): Promise<{
24
+ success: boolean;
25
+ map: string;
26
+ error?: string;
27
+ }>;
28
+ /** Get list of supported languages */
29
+ export declare function getSupportedTreeSitterLanguages(): string[];
30
+ /** Get file extensions supported by tree-sitter */
31
+ export declare function getTreeSitterExtensions(): string[];
32
+ //# sourceMappingURL=tree-sitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/parsers/tree-sitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,iBAAiB,CAAC;AA6LjE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhE;AA+DD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAuDtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmF5D;AAED,sCAAsC;AACtC,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD"}
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Tree-sitter Multi-Language Parser
3
+ *
4
+ * Universal AST parsing using tree-sitter WASM bindings.
5
+ * Supports: Python, Go, Rust (and more to come)
6
+ */
7
+ import { Parser as TreeSitterParser, Language as TreeSitterLanguage, } from 'web-tree-sitter';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ // Cache for loaded languages
11
+ const languageCache = new Map();
12
+ // Parser instance (singleton)
13
+ let parserInstance = null;
14
+ /** Language configurations */
15
+ const LANGUAGE_CONFIGS = {
16
+ python: {
17
+ package: 'tree-sitter-python',
18
+ wasmFile: 'tree-sitter-python.wasm',
19
+ functionTypes: ['function_definition'],
20
+ classTypes: ['class_definition'],
21
+ methodTypes: ['function_definition'],
22
+ getNodeName: (node) => {
23
+ const nameNode = node.childForFieldName('name');
24
+ return nameNode?.text ?? null;
25
+ },
26
+ getSignature: (node, content) => {
27
+ const text = content.substring(node.startIndex, node.endIndex);
28
+ const lines = text.split('\n');
29
+ const firstLine = lines[0].trim();
30
+ const decorators = [];
31
+ let prev = node.previousNamedSibling;
32
+ while (prev && prev.type === 'decorator') {
33
+ decorators.unshift(prev.text);
34
+ prev = prev.previousNamedSibling;
35
+ }
36
+ if (decorators.length > 0) {
37
+ return decorators.join('\n') + '\n' + firstLine;
38
+ }
39
+ return firstLine;
40
+ },
41
+ isExported: () => true,
42
+ },
43
+ go: {
44
+ package: 'tree-sitter-go',
45
+ wasmFile: 'tree-sitter-go.wasm',
46
+ functionTypes: ['function_declaration', 'method_declaration'],
47
+ classTypes: ['type_declaration'],
48
+ methodTypes: ['method_declaration'],
49
+ getNodeName: (node) => {
50
+ const nameNode = node.childForFieldName('name');
51
+ return nameNode?.text ?? null;
52
+ },
53
+ getSignature: (node, content) => {
54
+ const text = content.substring(node.startIndex, node.endIndex);
55
+ const lines = text.split('\n');
56
+ if (node.type === 'function_declaration' || node.type === 'method_declaration') {
57
+ const funcLine = lines.find((l) => l.trim().startsWith('func'));
58
+ if (funcLine) {
59
+ const openBrace = funcLine.indexOf('{');
60
+ return openBrace > 0 ? funcLine.substring(0, openBrace).trim() : funcLine.trim();
61
+ }
62
+ }
63
+ if (node.type === 'type_declaration') {
64
+ return lines[0].trim();
65
+ }
66
+ return lines[0].trim();
67
+ },
68
+ isExported: (node) => {
69
+ const nameNode = node.childForFieldName('name');
70
+ const name = nameNode?.text;
71
+ return name ? name[0] === name[0].toUpperCase() : false;
72
+ },
73
+ },
74
+ rust: {
75
+ package: 'tree-sitter-rust',
76
+ wasmFile: 'tree-sitter-rust.wasm',
77
+ functionTypes: ['function_item'],
78
+ classTypes: ['struct_item', 'enum_item', 'trait_item', 'impl_item'],
79
+ methodTypes: ['function_item'],
80
+ getNodeName: (node) => {
81
+ const nameNode = node.childForFieldName('name');
82
+ return nameNode?.text ?? null;
83
+ },
84
+ getSignature: (node, content) => {
85
+ const text = content.substring(node.startIndex, node.endIndex);
86
+ const lines = text.split('\n');
87
+ if (node.type === 'function_item') {
88
+ let sig = '';
89
+ for (const line of lines) {
90
+ sig += line + '\n';
91
+ if (line.includes('{')) {
92
+ sig = sig.substring(0, sig.lastIndexOf('{'));
93
+ break;
94
+ }
95
+ }
96
+ return sig.trim();
97
+ }
98
+ return lines[0].trim();
99
+ },
100
+ isExported: (node) => {
101
+ const parent = node.parent;
102
+ if (parent?.type === 'visibility_modifier') {
103
+ return parent.text.includes('pub');
104
+ }
105
+ let prev = node.previousSibling;
106
+ while (prev) {
107
+ if (prev.type === 'visibility_modifier') {
108
+ return prev.text.includes('pub');
109
+ }
110
+ prev = prev.previousSibling;
111
+ }
112
+ return false;
113
+ },
114
+ },
115
+ };
116
+ /** File extension to language mapping */
117
+ const EXTENSION_TO_LANGUAGE = {
118
+ py: 'python',
119
+ pyw: 'python',
120
+ go: 'go',
121
+ rs: 'rust',
122
+ };
123
+ /**
124
+ * Initialize the parser (lazy initialization)
125
+ */
126
+ async function getParser() {
127
+ if (parserInstance)
128
+ return parserInstance;
129
+ await TreeSitterParser.init();
130
+ parserInstance = new TreeSitterParser();
131
+ return parserInstance;
132
+ }
133
+ /**
134
+ * Load a language grammar
135
+ */
136
+ async function loadLanguage(languageId) {
137
+ if (languageCache.has(languageId)) {
138
+ return languageCache.get(languageId);
139
+ }
140
+ const config = LANGUAGE_CONFIGS[languageId];
141
+ if (!config) {
142
+ return null;
143
+ }
144
+ try {
145
+ const wasmPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'node_modules', config.package, config.wasmFile);
146
+ const language = await TreeSitterLanguage.load(wasmPath);
147
+ languageCache.set(languageId, language);
148
+ return language;
149
+ }
150
+ catch (error) {
151
+ console.error(`Failed to load language ${languageId}:`, error);
152
+ return null;
153
+ }
154
+ }
155
+ /**
156
+ * Get language ID from file extension
157
+ */
158
+ export function getLanguageForFile(filePath) {
159
+ const ext = filePath.toLowerCase().split('.').pop();
160
+ if (!ext)
161
+ return null;
162
+ return EXTENSION_TO_LANGUAGE[ext] ?? null;
163
+ }
164
+ /**
165
+ * Check if tree-sitter can parse this file type
166
+ */
167
+ export function canParseWithTreeSitter(filePath) {
168
+ return getLanguageForFile(filePath) !== null;
169
+ }
170
+ /**
171
+ * Extract code boundaries from a syntax tree
172
+ */
173
+ function extractBoundaries(tree, config) {
174
+ const boundaries = [];
175
+ const visit = (node, parentClass = null) => {
176
+ let boundary = null;
177
+ if (config.functionTypes.includes(node.type)) {
178
+ const name = config.getNodeName(node);
179
+ if (name) {
180
+ const isMethod = parentClass !== null;
181
+ boundary = {
182
+ type: isMethod ? 'method' : 'function',
183
+ name: isMethod ? `${parentClass}.${name}` : name,
184
+ startLine: node.startPosition.row + 1,
185
+ endLine: node.endPosition.row + 1,
186
+ exported: config.isExported(node),
187
+ };
188
+ }
189
+ }
190
+ if (config.classTypes.includes(node.type)) {
191
+ const name = config.getNodeName(node);
192
+ if (name) {
193
+ boundary = {
194
+ type: 'class',
195
+ name,
196
+ startLine: node.startPosition.row + 1,
197
+ endLine: node.endPosition.row + 1,
198
+ exported: config.isExported(node),
199
+ };
200
+ for (const child of node.children) {
201
+ visit(child, name);
202
+ }
203
+ if (boundary) {
204
+ boundaries.push(boundary);
205
+ }
206
+ return;
207
+ }
208
+ }
209
+ if (boundary) {
210
+ boundaries.push(boundary);
211
+ }
212
+ for (const child of node.children) {
213
+ visit(child, parentClass);
214
+ }
215
+ };
216
+ visit(tree.rootNode);
217
+ return boundaries;
218
+ }
219
+ /**
220
+ * Parse a file using tree-sitter
221
+ */
222
+ export async function parseWithTreeSitter(content, filePath) {
223
+ const languageId = getLanguageForFile(filePath);
224
+ if (!languageId) {
225
+ return {
226
+ success: false,
227
+ boundaries: [],
228
+ error: `Unsupported file type: ${filePath}`,
229
+ };
230
+ }
231
+ const config = LANGUAGE_CONFIGS[languageId];
232
+ if (!config) {
233
+ return {
234
+ success: false,
235
+ boundaries: [],
236
+ error: `No configuration for language: ${languageId}`,
237
+ };
238
+ }
239
+ try {
240
+ const parser = await getParser();
241
+ const language = await loadLanguage(languageId);
242
+ if (!language) {
243
+ return {
244
+ success: false,
245
+ boundaries: [],
246
+ error: `Failed to load language grammar for: ${languageId}`,
247
+ };
248
+ }
249
+ parser.setLanguage(language);
250
+ const tree = parser.parse(content);
251
+ if (!tree) {
252
+ return {
253
+ success: false,
254
+ boundaries: [],
255
+ error: `Failed to parse file: ${filePath}`,
256
+ };
257
+ }
258
+ const boundaries = extractBoundaries(tree, config);
259
+ return {
260
+ success: true,
261
+ boundaries,
262
+ };
263
+ }
264
+ catch (error) {
265
+ return {
266
+ success: false,
267
+ boundaries: [],
268
+ error: error instanceof Error ? error.message : String(error),
269
+ };
270
+ }
271
+ }
272
+ /**
273
+ * Generate a repo map (signatures only) from a parsed file
274
+ */
275
+ export async function generateRepoMap(fileContent, filePath) {
276
+ const languageId = getLanguageForFile(filePath);
277
+ if (!languageId) {
278
+ return {
279
+ success: false,
280
+ map: '',
281
+ error: `Unsupported file type: ${filePath}`,
282
+ };
283
+ }
284
+ const config = LANGUAGE_CONFIGS[languageId];
285
+ if (!config) {
286
+ return {
287
+ success: false,
288
+ map: '',
289
+ error: `No configuration for language: ${languageId}`,
290
+ };
291
+ }
292
+ try {
293
+ const parser = await getParser();
294
+ const language = await loadLanguage(languageId);
295
+ if (!language) {
296
+ return {
297
+ success: false,
298
+ map: '',
299
+ error: `Failed to load language grammar for: ${languageId}`,
300
+ };
301
+ }
302
+ parser.setLanguage(language);
303
+ const tree = parser.parse(fileContent);
304
+ if (!tree) {
305
+ return {
306
+ success: false,
307
+ map: '',
308
+ error: `Failed to parse file: ${filePath}`,
309
+ };
310
+ }
311
+ const lines = [];
312
+ const addSignature = (node, indent = 0) => {
313
+ const prefix = '│ '.repeat(indent);
314
+ if (config.functionTypes.includes(node.type) || config.methodTypes.includes(node.type)) {
315
+ const sig = config.getSignature(node, fileContent);
316
+ const exported = config.isExported(node);
317
+ const exportPrefix = exported ? '' : '(private) ';
318
+ lines.push(`${prefix}${exportPrefix}${sig}`);
319
+ }
320
+ if (config.classTypes.includes(node.type)) {
321
+ const sig = config.getSignature(node, fileContent);
322
+ const exported = config.isExported(node);
323
+ const exportPrefix = exported ? '' : '(private) ';
324
+ lines.push(`${prefix}${exportPrefix}${sig}`);
325
+ for (const child of node.children) {
326
+ addSignature(child, indent + 1);
327
+ }
328
+ return;
329
+ }
330
+ for (const child of node.children) {
331
+ addSignature(child, indent);
332
+ }
333
+ };
334
+ addSignature(tree.rootNode);
335
+ return {
336
+ success: true,
337
+ map: lines.join('\n'),
338
+ };
339
+ }
340
+ catch (error) {
341
+ return {
342
+ success: false,
343
+ map: '',
344
+ error: error instanceof Error ? error.message : String(error),
345
+ };
346
+ }
347
+ }
348
+ /** Get list of supported languages */
349
+ export function getSupportedTreeSitterLanguages() {
350
+ return Object.keys(LANGUAGE_CONFIGS);
351
+ }
352
+ /** Get file extensions supported by tree-sitter */
353
+ export function getTreeSitterExtensions() {
354
+ return Object.keys(EXTENSION_TO_LANGUAGE);
355
+ }
356
+ //# sourceMappingURL=tree-sitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter.js","sourceRoot":"","sources":["../../src/parsers/tree-sitter.ts"],"names":[],"mappings":"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"}
@@ -52,8 +52,11 @@ export declare function formatAsXml(query: string, result: BudgetResult, totalCo
52
52
  * Format output as plain text (optimized for clipboard/pasting)
53
53
  */
54
54
  export declare function formatAsPlain(query: string, result: BudgetResult, totalConsidered: number, timeMs: number): FormattedOutput;
55
+ /** Selection mode */
56
+ type SelectMode = 'full' | 'map';
55
57
  /**
56
58
  * Format output in specified format
57
59
  */
58
- export declare function formatInFormat(format: OutputFormat, query: string, result: BudgetResult, totalConsidered: number, timeMs: number, explain?: boolean): FormattedOutput;
60
+ export declare function formatInFormat(format: OutputFormat, query: string, result: BudgetResult, totalConsidered: number, timeMs: number, explain?: boolean, mode?: SelectMode): FormattedOutput;
61
+ export {};
59
62
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CA2DjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAgDjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,GACvB,eAAe,CAoBjB"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CA2DjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAgDjB;AAED,qBAAqB;AACrB,KAAK,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjC;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,EACxB,IAAI,GAAE,UAAmB,GACxB,eAAe,CA0BjB"}