mcp-adr-analysis-server 2.0.6 → 2.0.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 (29) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +70 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/tools/smart-git-push-tool.d.ts +24 -0
  6. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -0
  7. package/dist/src/tools/smart-git-push-tool.js +526 -0
  8. package/dist/src/tools/smart-git-push-tool.js.map +1 -0
  9. package/dist/src/utils/enhanced-sensitive-detector.d.ts +61 -0
  10. package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +1 -0
  11. package/dist/src/utils/enhanced-sensitive-detector.js +437 -0
  12. package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -0
  13. package/dist/src/utils/interactive-approval.d.ts +63 -0
  14. package/dist/src/utils/interactive-approval.d.ts.map +1 -0
  15. package/dist/src/utils/interactive-approval.js +441 -0
  16. package/dist/src/utils/interactive-approval.js.map +1 -0
  17. package/dist/src/utils/llm-artifact-detector.d.ts +76 -0
  18. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -0
  19. package/dist/src/utils/llm-artifact-detector.js +422 -0
  20. package/dist/src/utils/llm-artifact-detector.js.map +1 -0
  21. package/dist/src/utils/location-filter.d.ts +79 -0
  22. package/dist/src/utils/location-filter.d.ts.map +1 -0
  23. package/dist/src/utils/location-filter.js +327 -0
  24. package/dist/src/utils/location-filter.js.map +1 -0
  25. package/dist/src/utils/release-readiness-detector.d.ts +47 -0
  26. package/dist/src/utils/release-readiness-detector.d.ts.map +1 -0
  27. package/dist/src/utils/release-readiness-detector.js +413 -0
  28. package/dist/src/utils/release-readiness-detector.js.map +1 -0
  29. package/package.json +1 -1
@@ -0,0 +1,422 @@
1
+ /**
2
+ * LLM Artifact Detection System
3
+ *
4
+ * Detects files and content generated by LLMs that may not be suitable for production
5
+ * Focuses on development artifacts, debug scripts, and temporary files
6
+ */
7
+ import { basename, dirname } from 'path';
8
+ /**
9
+ * Comprehensive LLM artifact patterns
10
+ */
11
+ export const LLM_ARTIFACT_PATTERNS = [
12
+ // Debug Scripts
13
+ {
14
+ name: 'debug-script',
15
+ description: 'Debug script typically generated for troubleshooting',
16
+ category: 'debug',
17
+ severity: 'warning',
18
+ filePattern: /^debug_.*\.(py|js|ts|sh|rb|go|php|java)$/,
19
+ contentPattern: /print\s*\(\s*["'].*(?:debug|test|trace).*["']\s*\)|console\.log\s*\(\s*["'].*debug.*["']\s*\)|logging\.debug|debugger\s*;/i,
20
+ locationExceptions: ['debug/', 'scripts/', 'tools/', 'dev/', 'utils/'],
21
+ confidence: 0.8
22
+ },
23
+ // Test Files in Wrong Location
24
+ {
25
+ name: 'misplaced-test',
26
+ description: 'Test file not in proper test directory',
27
+ category: 'testing',
28
+ severity: 'error',
29
+ filePattern: /^test_.*\.(py|js|ts|rb|go|php|java)$|.*\.test\.(js|ts|py)$|.*\.spec\.(js|ts|py)$/,
30
+ locationExceptions: ['tests/', 'test/', '__tests__/', 'spec/', 'specs/'],
31
+ confidence: 0.9
32
+ },
33
+ // Mock/Fixture Files
34
+ {
35
+ name: 'mock-data',
36
+ description: 'Mock data or fixture files',
37
+ category: 'testing',
38
+ severity: 'info',
39
+ filePattern: /^mock_.*\.(json|js|ts|py|yaml|yml)$|^fixture_.*\.(json|js|ts|py|yaml|yml)$/,
40
+ contentPattern: /mock|fixture|dummy.*data|fake.*data|test.*data/i,
41
+ locationExceptions: ['tests/', 'test/', '__tests__/', 'fixtures/', 'mocks/', 'dev/'],
42
+ confidence: 0.7
43
+ },
44
+ // Temporary Files
45
+ {
46
+ name: 'temporary-file',
47
+ description: 'Temporary file that should not be committed',
48
+ category: 'temporary',
49
+ severity: 'error',
50
+ filePattern: /^temp_.*|.*\.tmp$|.*\.temp$|.*\.bak$|.*\.orig$|^scratch_.*|^playground_.*/,
51
+ locationExceptions: ['tmp/', 'temp/', 'dev/'],
52
+ confidence: 0.9
53
+ },
54
+ // Experimental Code
55
+ {
56
+ name: 'experimental-code',
57
+ description: 'Experimental or prototype code',
58
+ category: 'experimental',
59
+ severity: 'warning',
60
+ filePattern: /^experiment_.*|^poc_.*|^prototype_.*|^try_.*|^attempt_.*/,
61
+ contentPattern: /\/\*.*experiment.*\*\/|#.*experiment|\/\/.*experiment|TODO.*experiment/i,
62
+ locationExceptions: ['experiments/', 'poc/', 'prototypes/', 'dev/', 'playground/'],
63
+ confidence: 0.8
64
+ },
65
+ // Tutorial/Learning Files
66
+ {
67
+ name: 'tutorial-file',
68
+ description: 'Tutorial or learning file with step-by-step instructions',
69
+ category: 'tutorial',
70
+ severity: 'info',
71
+ filePattern: /^tutorial_.*|^learn_.*|^example_.*|^demo_.*|^walkthrough_.*/,
72
+ contentPattern: /step\s+\d+|tutorial|walkthrough|follow.*along|this.*example.*shows/i,
73
+ locationExceptions: ['tutorials/', 'examples/', 'demos/', 'docs/', 'learning/'],
74
+ confidence: 0.7
75
+ },
76
+ // Documentation Drafts
77
+ {
78
+ name: 'documentation-draft',
79
+ description: 'Draft documentation that may not be ready',
80
+ category: 'documentation',
81
+ severity: 'info',
82
+ filePattern: /^draft_.*\.md$|^notes_.*\.md$|^wip_.*\.md$|^todo_.*\.md$/,
83
+ contentPattern: /\[draft\]|\[wip\]|\[todo\]|work.*in.*progress|need.*to.*update/i,
84
+ locationExceptions: ['docs/', 'documentation/', 'drafts/', 'dev/'],
85
+ confidence: 0.6
86
+ },
87
+ // LLM Conversation Logs
88
+ {
89
+ name: 'llm-conversation',
90
+ description: 'LLM conversation log or output',
91
+ category: 'temporary',
92
+ severity: 'warning',
93
+ filePattern: /^llm_.*|^ai_.*|^claude_.*|^gpt_.*|^chat_.*\.txt$|^conversation_.*\.txt$/,
94
+ contentPattern: /human:|assistant:|claude:|gpt:|user:|system:|you:|me:|i'll.*help.*you/i,
95
+ locationExceptions: ['dev/', 'logs/', 'temp/'],
96
+ confidence: 0.9
97
+ },
98
+ // Analysis/Report Files
99
+ {
100
+ name: 'analysis-report',
101
+ description: 'Analysis or report file that may be temporary',
102
+ category: 'temporary',
103
+ severity: 'info',
104
+ filePattern: /^analysis_.*|^report_.*|^output_.*|^results_.*\.(txt|md|json|csv)$/,
105
+ contentPattern: /analysis.*results|generated.*on|report.*summary|output.*from/i,
106
+ locationExceptions: ['reports/', 'analysis/', 'output/', 'dev/'],
107
+ confidence: 0.5
108
+ },
109
+ // Configuration Experiments
110
+ {
111
+ name: 'config-experiment',
112
+ description: 'Experimental configuration file',
113
+ category: 'experimental',
114
+ severity: 'warning',
115
+ filePattern: /^test_.*\.config\.(js|json|yaml|yml)$|^experiment_.*\.config\.(js|json|yaml|yml)$/,
116
+ contentPattern: /test.*config|experiment.*config|temporary.*config/i,
117
+ locationExceptions: ['configs/', 'dev/', 'experiments/'],
118
+ confidence: 0.7
119
+ },
120
+ // Utility Scripts
121
+ {
122
+ name: 'utility-script',
123
+ description: 'Utility script that may be temporary',
124
+ category: 'debug',
125
+ severity: 'info',
126
+ filePattern: /^util_.*|^helper_.*|^tool_.*\.(py|js|ts|sh|rb)$/,
127
+ contentPattern: /quick.*script|helper.*function|utility.*tool|one.*time.*use/i,
128
+ locationExceptions: ['utils/', 'helpers/', 'tools/', 'scripts/'],
129
+ confidence: 0.6
130
+ },
131
+ // Code Generation Artifacts
132
+ {
133
+ name: 'code-generation',
134
+ description: 'Generated code that may need review',
135
+ category: 'experimental',
136
+ severity: 'info',
137
+ filePattern: /^generated_.*|^auto_.*|^codegen_.*/,
138
+ contentPattern: /\/\*.*generated.*\*\/|#.*auto.*generated|\/\/.*generated|@generated/i,
139
+ locationExceptions: ['generated/', 'auto/', 'codegen/', 'build/'],
140
+ confidence: 0.8
141
+ },
142
+ // Learning/Practice Files
143
+ {
144
+ name: 'learning-file',
145
+ description: 'Learning or practice file',
146
+ category: 'tutorial',
147
+ severity: 'info',
148
+ filePattern: /^practice_.*|^learning_.*|^exercise_.*|^kata_.*/,
149
+ contentPattern: /practice|exercise|kata|learning|studying|following.*tutorial/i,
150
+ locationExceptions: ['practice/', 'learning/', 'exercises/', 'dev/'],
151
+ confidence: 0.7
152
+ },
153
+ // Verbose Comments (LLM-style)
154
+ {
155
+ name: 'verbose-comments',
156
+ description: 'Unusually verbose comments typical of LLM generation',
157
+ category: 'documentation',
158
+ severity: 'info',
159
+ combinedPattern: (_fileName, content) => {
160
+ // Check for excessive commenting ratio
161
+ const lines = content.split('\n');
162
+ const commentLines = lines.filter(line => line.trim().startsWith('//') ||
163
+ line.trim().startsWith('#') ||
164
+ line.trim().startsWith('/*') ||
165
+ line.trim().startsWith('*') ||
166
+ line.trim().startsWith('"""') ||
167
+ line.trim().startsWith("'''"));
168
+ // If more than 40% of lines are comments, it might be LLM-generated
169
+ const commentRatio = commentLines.length / lines.length;
170
+ return commentRatio > 0.4 && content.length > 500;
171
+ },
172
+ locationExceptions: ['docs/', 'examples/', 'tutorials/'],
173
+ confidence: 0.4
174
+ }
175
+ ];
176
+ /**
177
+ * Detect LLM artifacts in a file
178
+ */
179
+ export function detectLLMArtifacts(filePath, content, customPatterns = []) {
180
+ const fileName = basename(filePath);
181
+ const dirPath = dirname(filePath);
182
+ const allPatterns = [...LLM_ARTIFACT_PATTERNS, ...customPatterns];
183
+ const matches = [];
184
+ // Check each pattern
185
+ for (const pattern of allPatterns) {
186
+ const patternMatches = checkPattern(pattern, fileName, content, filePath);
187
+ matches.push(...patternMatches);
188
+ }
189
+ // Calculate overall confidence
190
+ const overallConfidence = matches.length > 0
191
+ ? matches.reduce((sum, match) => sum + match.confidence, 0) / matches.length
192
+ : 0;
193
+ // Determine severity
194
+ const severity = matches.length > 0
195
+ ? matches.reduce((highest, match) => {
196
+ const severityOrder = { error: 3, warning: 2, info: 1 };
197
+ return severityOrder[match.pattern.severity] > severityOrder[highest]
198
+ ? match.pattern.severity
199
+ : highest;
200
+ }, 'info')
201
+ : 'info';
202
+ // Check if current location is allowed
203
+ const allowedInCurrentLocation = matches.length === 0 || matches.every(match => match.pattern.locationExceptions.some(exception => dirPath.includes(exception) || dirPath.endsWith(exception.replace('/', ''))));
204
+ // Generate recommendations
205
+ const recommendations = generateRecommendations(matches, filePath, allowedInCurrentLocation);
206
+ return {
207
+ filePath,
208
+ isLLMArtifact: matches.length > 0,
209
+ matches,
210
+ overallConfidence,
211
+ severity,
212
+ recommendations,
213
+ allowedInCurrentLocation
214
+ };
215
+ }
216
+ /**
217
+ * Check a specific pattern against file and content
218
+ */
219
+ function checkPattern(pattern, fileName, content, filePath) {
220
+ const matches = [];
221
+ // Check filename pattern
222
+ if (pattern.filePattern && pattern.filePattern.test(fileName)) {
223
+ matches.push({
224
+ pattern,
225
+ matchType: 'filename',
226
+ match: fileName,
227
+ confidence: pattern.confidence,
228
+ suggestions: generateSuggestions(pattern, filePath, 'filename')
229
+ });
230
+ }
231
+ // Check content pattern
232
+ if (pattern.contentPattern && content) {
233
+ const contentMatches = content.match(pattern.contentPattern);
234
+ if (contentMatches) {
235
+ const lines = content.split('\n');
236
+ for (let i = 0; i < lines.length; i++) {
237
+ if (pattern.contentPattern.test(lines[i])) {
238
+ matches.push({
239
+ pattern,
240
+ matchType: 'content',
241
+ match: lines[i] || '',
242
+ line: i + 1,
243
+ context: getLineContext(lines, i, 2),
244
+ confidence: pattern.confidence * 0.9, // Slightly lower confidence for content matches
245
+ suggestions: generateSuggestions(pattern, filePath, 'content')
246
+ });
247
+ break; // Only report first match per pattern
248
+ }
249
+ }
250
+ }
251
+ }
252
+ // Check combined pattern
253
+ if (pattern.combinedPattern && pattern.combinedPattern(fileName, content)) {
254
+ matches.push({
255
+ pattern,
256
+ matchType: 'combined',
257
+ match: 'Pattern detected in file structure and content',
258
+ confidence: pattern.confidence,
259
+ suggestions: generateSuggestions(pattern, filePath, 'combined')
260
+ });
261
+ }
262
+ return matches;
263
+ }
264
+ /**
265
+ * Get context around a line
266
+ */
267
+ function getLineContext(lines, lineIndex, contextSize) {
268
+ const start = Math.max(0, lineIndex - contextSize);
269
+ const end = Math.min(lines.length, lineIndex + contextSize + 1);
270
+ return lines.slice(start, end).join('\n');
271
+ }
272
+ /**
273
+ * Generate suggestions for handling LLM artifacts
274
+ */
275
+ function generateSuggestions(pattern, filePath, _matchType) {
276
+ const suggestions = [];
277
+ const fileName = basename(filePath);
278
+ // Category-specific suggestions
279
+ switch (pattern.category) {
280
+ case 'debug':
281
+ suggestions.push(`Move ${fileName} to scripts/ or tools/ directory`);
282
+ suggestions.push('Add to .gitignore if it\'s temporary');
283
+ suggestions.push('Remove debug logging before commit');
284
+ break;
285
+ case 'testing':
286
+ suggestions.push(`Move ${fileName} to tests/ directory`);
287
+ suggestions.push('Ensure test follows project testing conventions');
288
+ break;
289
+ case 'temporary':
290
+ suggestions.push('Remove file if no longer needed');
291
+ suggestions.push('Add to .gitignore');
292
+ suggestions.push('Move to tmp/ directory if needed');
293
+ break;
294
+ case 'experimental':
295
+ suggestions.push(`Move ${fileName} to experiments/ or dev/ directory`);
296
+ suggestions.push('Add documentation about experimental status');
297
+ suggestions.push('Consider if this should be in version control');
298
+ break;
299
+ case 'tutorial':
300
+ suggestions.push(`Move ${fileName} to examples/ or tutorials/ directory`);
301
+ suggestions.push('Add to documentation structure');
302
+ break;
303
+ case 'documentation':
304
+ suggestions.push(`Move ${fileName} to docs/ directory`);
305
+ suggestions.push('Review and finalize before committing');
306
+ break;
307
+ }
308
+ // Location-specific suggestions
309
+ if (pattern.locationExceptions.length > 0) {
310
+ const allowedDirs = pattern.locationExceptions.join(', ');
311
+ suggestions.push(`Consider moving to: ${allowedDirs}`);
312
+ }
313
+ // Severity-specific suggestions
314
+ if (pattern.severity === 'error') {
315
+ suggestions.push('🚨 This file should not be committed in its current location');
316
+ }
317
+ else if (pattern.severity === 'warning') {
318
+ suggestions.push('⚠️ Review this file before committing');
319
+ }
320
+ return suggestions;
321
+ }
322
+ /**
323
+ * Generate recommendations for the overall result
324
+ */
325
+ function generateRecommendations(matches, _filePath, allowedInCurrentLocation) {
326
+ const recommendations = [];
327
+ if (matches.length === 0) {
328
+ return ['File appears to be a legitimate source file'];
329
+ }
330
+ if (allowedInCurrentLocation) {
331
+ recommendations.push('✅ File is in an appropriate location for its type');
332
+ }
333
+ else {
334
+ recommendations.push('❌ File should be moved to an appropriate directory');
335
+ // Add specific suggestions from matches
336
+ const uniqueSuggestions = new Set();
337
+ matches.forEach(match => {
338
+ match.suggestions.forEach(suggestion => {
339
+ if (suggestion.includes('Move') || suggestion.includes('scripts/') || suggestion.includes('tests/') || suggestion.includes('tools/')) {
340
+ uniqueSuggestions.add(suggestion);
341
+ }
342
+ });
343
+ });
344
+ uniqueSuggestions.forEach(suggestion => {
345
+ recommendations.push(suggestion);
346
+ });
347
+ }
348
+ // Count by severity
349
+ const errorCount = matches.filter(m => m.pattern.severity === 'error').length;
350
+ const warningCount = matches.filter(m => m.pattern.severity === 'warning').length;
351
+ if (errorCount > 0) {
352
+ recommendations.push(`🚨 ${errorCount} critical issue(s) - file should not be committed`);
353
+ }
354
+ if (warningCount > 0) {
355
+ recommendations.push(`⚠️ ${warningCount} warning(s) - review before committing`);
356
+ }
357
+ // Category-specific recommendations
358
+ const categories = [...new Set(matches.map(m => m.pattern.category))];
359
+ if (categories.includes('debug')) {
360
+ recommendations.push('Consider if debug code is needed in repository');
361
+ }
362
+ if (categories.includes('temporary')) {
363
+ recommendations.push('Remove temporary files before committing');
364
+ }
365
+ if (categories.includes('experimental')) {
366
+ recommendations.push('Move experimental code to appropriate directory');
367
+ }
368
+ return recommendations;
369
+ }
370
+ /**
371
+ * Batch analyze multiple files
372
+ */
373
+ export function batchDetectLLMArtifacts(files, customPatterns = []) {
374
+ return files.map(file => detectLLMArtifacts(file.path, file.content, customPatterns));
375
+ }
376
+ /**
377
+ * Get summary statistics for LLM artifact detection
378
+ */
379
+ export function getLLMArtifactSummary(results) {
380
+ const summary = {
381
+ totalFiles: results.length,
382
+ artifactFiles: results.filter(r => r.isLLMArtifact).length,
383
+ allowedFiles: results.filter(r => r.allowedInCurrentLocation).length,
384
+ errorCount: results.filter(r => r.severity === 'error').length,
385
+ warningCount: results.filter(r => r.severity === 'warning').length,
386
+ infoCount: results.filter(r => r.severity === 'info').length,
387
+ categorySummary: {},
388
+ topPatterns: []
389
+ };
390
+ // Count by category
391
+ const patternCounts = {};
392
+ for (const result of results) {
393
+ for (const match of result.matches) {
394
+ const category = match.pattern.category;
395
+ summary.categorySummary[category] = (summary.categorySummary[category] || 0) + 1;
396
+ const patternName = match.pattern.name;
397
+ patternCounts[patternName] = (patternCounts[patternName] || 0) + 1;
398
+ }
399
+ }
400
+ // Top patterns
401
+ summary.topPatterns = Object.entries(patternCounts)
402
+ .sort((a, b) => b[1] - a[1])
403
+ .slice(0, 5)
404
+ .map(([name, count]) => ({ name, count }));
405
+ return summary;
406
+ }
407
+ /**
408
+ * Create a custom LLM artifact pattern
409
+ */
410
+ export function createLLMPattern(name, description, category, severity, options) {
411
+ return {
412
+ name,
413
+ description,
414
+ category,
415
+ severity,
416
+ ...(options.filePattern && { filePattern: new RegExp(options.filePattern) }),
417
+ ...(options.contentPattern && { contentPattern: new RegExp(options.contentPattern, 'i') }),
418
+ locationExceptions: options.locationExceptions || [],
419
+ confidence: options.confidence || 0.7
420
+ };
421
+ }
422
+ //# sourceMappingURL=llm-artifact-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-artifact-detector.js","sourceRoot":"","sources":["../../../src/utils/llm-artifact-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Location-based filtering system for smart git push
3
+ *
4
+ * Determines if files are in appropriate locations based on their type and content
5
+ */
6
+ export interface LocationRule {
7
+ name: string;
8
+ description: string;
9
+ filePattern: RegExp;
10
+ contentPattern?: RegExp;
11
+ allowedPaths: string[];
12
+ blockedPaths: string[];
13
+ severity: 'error' | 'warning' | 'info';
14
+ category: 'development' | 'security' | 'temporary' | 'testing';
15
+ }
16
+ export interface LocationValidationResult {
17
+ isValid: boolean;
18
+ rule?: LocationRule;
19
+ currentPath: string;
20
+ suggestedPaths: string[];
21
+ severity: 'error' | 'warning' | 'info';
22
+ message: string;
23
+ }
24
+ /**
25
+ * Default location rules for common development artifacts
26
+ */
27
+ export declare const DEFAULT_LOCATION_RULES: LocationRule[];
28
+ /**
29
+ * Validate file location against rules
30
+ */
31
+ export declare function validateFileLocation(filePath: string, content?: string, customRules?: LocationRule[]): LocationValidationResult;
32
+ /**
33
+ * Get location suggestions for a file
34
+ */
35
+ export declare function getLocationSuggestions(filePath: string, content?: string, customRules?: LocationRule[]): {
36
+ suggestions: string[];
37
+ reasoning: string;
38
+ category: string;
39
+ };
40
+ /**
41
+ * Check if a file should be ignored based on common patterns
42
+ */
43
+ export declare function shouldIgnoreFile(filePath: string): {
44
+ shouldIgnore: boolean;
45
+ reason: string;
46
+ severity: 'error' | 'warning' | 'info';
47
+ };
48
+ /**
49
+ * Create a custom location rule
50
+ */
51
+ export declare function createLocationRule(name: string, description: string, filePattern: string, allowedPaths: string[], blockedPaths?: string[], severity?: 'error' | 'warning' | 'info', category?: 'development' | 'security' | 'temporary' | 'testing', contentPattern?: string): LocationRule;
52
+ /**
53
+ * Load location rules from project configuration
54
+ */
55
+ export declare function loadLocationRules(_projectPath: string): LocationRule[];
56
+ /**
57
+ * Validate multiple files at once
58
+ */
59
+ export declare function validateMultipleFiles(files: Array<{
60
+ path: string;
61
+ content?: string;
62
+ }>, customRules?: LocationRule[]): Array<LocationValidationResult & {
63
+ filePath: string;
64
+ }>;
65
+ /**
66
+ * Get summary statistics for location validation
67
+ */
68
+ export declare function getLocationValidationSummary(results: Array<LocationValidationResult & {
69
+ filePath: string;
70
+ }>): {
71
+ totalFiles: number;
72
+ validFiles: number;
73
+ invalidFiles: number;
74
+ errorCount: number;
75
+ warningCount: number;
76
+ infoCount: number;
77
+ categorySummary: Record<string, number>;
78
+ };
79
+ //# sourceMappingURL=location-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location-filter.d.ts","sourceRoot":"","sources":["../../../src/utils/location-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,QAAQ,EAAE,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;CAChE;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAsGhD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,GAAE,YAAY,EAAO,GAC/B,wBAAwB,CAiE1B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,GAAE,YAAY,EAAO,GAC/B;IACD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CA4BA;AAyCD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC,CAmDA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,GAAE,MAAM,EAAO,EAC3B,QAAQ,GAAE,OAAO,GAAG,SAAS,GAAG,MAAkB,EAClD,QAAQ,GAAE,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,SAAyB,EAC9E,cAAc,CAAC,EAAE,MAAM,GACtB,YAAY,CAWd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,CAItE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,WAAW,GAAE,YAAY,EAAO,GAC/B,KAAK,CAAC,wBAAwB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAKxD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,KAAK,CAAC,wBAAwB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9D;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAoBA"}