spec-gen-cli 1.0.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.
- package/LICENSE +21 -0
- package/README.md +1078 -0
- package/dist/api/analyze.d.ts +17 -0
- package/dist/api/analyze.d.ts.map +1 -0
- package/dist/api/analyze.js +109 -0
- package/dist/api/analyze.js.map +1 -0
- package/dist/api/drift.d.ts +21 -0
- package/dist/api/drift.d.ts.map +1 -0
- package/dist/api/drift.js +145 -0
- package/dist/api/drift.js.map +1 -0
- package/dist/api/generate.d.ts +18 -0
- package/dist/api/generate.d.ts.map +1 -0
- package/dist/api/generate.js +251 -0
- package/dist/api/generate.js.map +1 -0
- package/dist/api/index.d.ts +39 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +32 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/init.d.ts +18 -0
- package/dist/api/init.d.ts.map +1 -0
- package/dist/api/init.js +82 -0
- package/dist/api/init.js.map +1 -0
- package/dist/api/run.d.ts +19 -0
- package/dist/api/run.d.ts.map +1 -0
- package/dist/api/run.js +291 -0
- package/dist/api/run.js.map +1 -0
- package/dist/api/specs.d.ts +49 -0
- package/dist/api/specs.d.ts.map +1 -0
- package/dist/api/specs.js +136 -0
- package/dist/api/specs.js.map +1 -0
- package/dist/api/types.d.ts +176 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/verify.d.ts +20 -0
- package/dist/api/verify.d.ts.map +1 -0
- package/dist/api/verify.js +117 -0
- package/dist/api/verify.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +27 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +485 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/drift.d.ts +9 -0
- package/dist/cli/commands/drift.d.ts.map +1 -0
- package/dist/cli/commands/drift.js +540 -0
- package/dist/cli/commands/drift.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +9 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +633 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +171 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +638 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +574 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/run.d.ts +24 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +546 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +9 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +417 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/view.d.ts +9 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +511 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +83 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/analyzer/architecture-writer.d.ts +67 -0
- package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
- package/dist/core/analyzer/architecture-writer.js +209 -0
- package/dist/core/analyzer/architecture-writer.js.map +1 -0
- package/dist/core/analyzer/artifact-generator.d.ts +222 -0
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
- package/dist/core/analyzer/artifact-generator.js +726 -0
- package/dist/core/analyzer/artifact-generator.js.map +1 -0
- package/dist/core/analyzer/call-graph.d.ts +83 -0
- package/dist/core/analyzer/call-graph.d.ts.map +1 -0
- package/dist/core/analyzer/call-graph.js +827 -0
- package/dist/core/analyzer/call-graph.js.map +1 -0
- package/dist/core/analyzer/code-shaper.d.ts +33 -0
- package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
- package/dist/core/analyzer/code-shaper.js +149 -0
- package/dist/core/analyzer/code-shaper.js.map +1 -0
- package/dist/core/analyzer/dependency-graph.d.ts +179 -0
- package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
- package/dist/core/analyzer/dependency-graph.js +574 -0
- package/dist/core/analyzer/dependency-graph.js.map +1 -0
- package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
- package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
- package/dist/core/analyzer/duplicate-detector.js +279 -0
- package/dist/core/analyzer/duplicate-detector.js.map +1 -0
- package/dist/core/analyzer/embedding-service.d.ts +50 -0
- package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
- package/dist/core/analyzer/embedding-service.js +104 -0
- package/dist/core/analyzer/embedding-service.js.map +1 -0
- package/dist/core/analyzer/file-walker.d.ts +78 -0
- package/dist/core/analyzer/file-walker.d.ts.map +1 -0
- package/dist/core/analyzer/file-walker.js +531 -0
- package/dist/core/analyzer/file-walker.js.map +1 -0
- package/dist/core/analyzer/import-parser.d.ts +91 -0
- package/dist/core/analyzer/import-parser.d.ts.map +1 -0
- package/dist/core/analyzer/import-parser.js +720 -0
- package/dist/core/analyzer/import-parser.js.map +1 -0
- package/dist/core/analyzer/index.d.ts +10 -0
- package/dist/core/analyzer/index.d.ts.map +1 -0
- package/dist/core/analyzer/index.js +10 -0
- package/dist/core/analyzer/index.js.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts +80 -0
- package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
- package/dist/core/analyzer/refactor-analyzer.js +339 -0
- package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
- package/dist/core/analyzer/repository-mapper.d.ts +150 -0
- package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
- package/dist/core/analyzer/repository-mapper.js +731 -0
- package/dist/core/analyzer/repository-mapper.js.map +1 -0
- package/dist/core/analyzer/signature-extractor.d.ts +31 -0
- package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/signature-extractor.js +387 -0
- package/dist/core/analyzer/signature-extractor.js.map +1 -0
- package/dist/core/analyzer/significance-scorer.d.ts +79 -0
- package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
- package/dist/core/analyzer/significance-scorer.js +407 -0
- package/dist/core/analyzer/significance-scorer.js.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts +43 -0
- package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
- package/dist/core/analyzer/subgraph-extractor.js +129 -0
- package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
- package/dist/core/analyzer/vector-index.d.ts +63 -0
- package/dist/core/analyzer/vector-index.d.ts.map +1 -0
- package/dist/core/analyzer/vector-index.js +169 -0
- package/dist/core/analyzer/vector-index.js.map +1 -0
- package/dist/core/drift/drift-detector.d.ts +102 -0
- package/dist/core/drift/drift-detector.d.ts.map +1 -0
- package/dist/core/drift/drift-detector.js +597 -0
- package/dist/core/drift/drift-detector.js.map +1 -0
- package/dist/core/drift/git-diff.d.ts +55 -0
- package/dist/core/drift/git-diff.d.ts.map +1 -0
- package/dist/core/drift/git-diff.js +356 -0
- package/dist/core/drift/git-diff.js.map +1 -0
- package/dist/core/drift/index.d.ts +12 -0
- package/dist/core/drift/index.d.ts.map +1 -0
- package/dist/core/drift/index.js +9 -0
- package/dist/core/drift/index.js.map +1 -0
- package/dist/core/drift/spec-mapper.d.ts +73 -0
- package/dist/core/drift/spec-mapper.d.ts.map +1 -0
- package/dist/core/drift/spec-mapper.js +353 -0
- package/dist/core/drift/spec-mapper.js.map +1 -0
- package/dist/core/generator/adr-generator.d.ts +32 -0
- package/dist/core/generator/adr-generator.d.ts.map +1 -0
- package/dist/core/generator/adr-generator.js +192 -0
- package/dist/core/generator/adr-generator.js.map +1 -0
- package/dist/core/generator/index.d.ts +9 -0
- package/dist/core/generator/index.d.ts.map +1 -0
- package/dist/core/generator/index.js +12 -0
- package/dist/core/generator/index.js.map +1 -0
- package/dist/core/generator/mapping-generator.d.ts +54 -0
- package/dist/core/generator/mapping-generator.d.ts.map +1 -0
- package/dist/core/generator/mapping-generator.js +239 -0
- package/dist/core/generator/mapping-generator.js.map +1 -0
- package/dist/core/generator/openspec-compat.d.ts +160 -0
- package/dist/core/generator/openspec-compat.d.ts.map +1 -0
- package/dist/core/generator/openspec-compat.js +523 -0
- package/dist/core/generator/openspec-compat.js.map +1 -0
- package/dist/core/generator/openspec-format-generator.d.ts +111 -0
- package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
- package/dist/core/generator/openspec-format-generator.js +817 -0
- package/dist/core/generator/openspec-format-generator.js.map +1 -0
- package/dist/core/generator/openspec-writer.d.ts +131 -0
- package/dist/core/generator/openspec-writer.d.ts.map +1 -0
- package/dist/core/generator/openspec-writer.js +379 -0
- package/dist/core/generator/openspec-writer.js.map +1 -0
- package/dist/core/generator/prompts.d.ts +35 -0
- package/dist/core/generator/prompts.d.ts.map +1 -0
- package/dist/core/generator/prompts.js +212 -0
- package/dist/core/generator/prompts.js.map +1 -0
- package/dist/core/generator/spec-pipeline.d.ts +94 -0
- package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
- package/dist/core/generator/spec-pipeline.js +474 -0
- package/dist/core/generator/spec-pipeline.js.map +1 -0
- package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
- package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
- package/dist/core/generator/stages/stage1-survey.js +105 -0
- package/dist/core/generator/stages/stage1-survey.js.map +1 -0
- package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
- package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
- package/dist/core/generator/stages/stage2-entities.js +67 -0
- package/dist/core/generator/stages/stage2-entities.js.map +1 -0
- package/dist/core/generator/stages/stage3-services.d.ts +11 -0
- package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
- package/dist/core/generator/stages/stage3-services.js +75 -0
- package/dist/core/generator/stages/stage3-services.js.map +1 -0
- package/dist/core/generator/stages/stage4-api.d.ts +11 -0
- package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
- package/dist/core/generator/stages/stage4-api.js +65 -0
- package/dist/core/generator/stages/stage4-api.js.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts +10 -0
- package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
- package/dist/core/generator/stages/stage5-architecture.js +62 -0
- package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
- package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
- package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
- package/dist/core/generator/stages/stage6-adr.js +41 -0
- package/dist/core/generator/stages/stage6-adr.js.map +1 -0
- package/dist/core/services/chat-agent.d.ts +45 -0
- package/dist/core/services/chat-agent.d.ts.map +1 -0
- package/dist/core/services/chat-agent.js +310 -0
- package/dist/core/services/chat-agent.js.map +1 -0
- package/dist/core/services/chat-tools.d.ts +32 -0
- package/dist/core/services/chat-tools.d.ts.map +1 -0
- package/dist/core/services/chat-tools.js +270 -0
- package/dist/core/services/chat-tools.js.map +1 -0
- package/dist/core/services/config-manager.d.ts +61 -0
- package/dist/core/services/config-manager.d.ts.map +1 -0
- package/dist/core/services/config-manager.js +143 -0
- package/dist/core/services/config-manager.js.map +1 -0
- package/dist/core/services/gitignore-manager.d.ts +29 -0
- package/dist/core/services/gitignore-manager.d.ts.map +1 -0
- package/dist/core/services/gitignore-manager.js +106 -0
- package/dist/core/services/gitignore-manager.js.map +1 -0
- package/dist/core/services/index.d.ts +8 -0
- package/dist/core/services/index.d.ts.map +1 -0
- package/dist/core/services/index.js +8 -0
- package/dist/core/services/index.js.map +1 -0
- package/dist/core/services/llm-service.d.ts +336 -0
- package/dist/core/services/llm-service.d.ts.map +1 -0
- package/dist/core/services/llm-service.js +1155 -0
- package/dist/core/services/llm-service.js.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts +42 -0
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/analysis.js +300 -0
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
- package/dist/core/services/mcp-handlers/graph.d.ts +65 -0
- package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/graph.js +509 -0
- package/dist/core/services/mcp-handlers/graph.js.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts +38 -0
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/semantic.js +172 -0
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
- package/dist/core/services/mcp-handlers/utils.d.ts +21 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
- package/dist/core/services/mcp-handlers/utils.js +62 -0
- package/dist/core/services/mcp-handlers/utils.js.map +1 -0
- package/dist/core/services/project-detector.d.ts +32 -0
- package/dist/core/services/project-detector.d.ts.map +1 -0
- package/dist/core/services/project-detector.js +111 -0
- package/dist/core/services/project-detector.js.map +1 -0
- package/dist/core/verifier/index.d.ts +5 -0
- package/dist/core/verifier/index.d.ts.map +1 -0
- package/dist/core/verifier/index.js +5 -0
- package/dist/core/verifier/index.js.map +1 -0
- package/dist/core/verifier/verification-engine.d.ts +226 -0
- package/dist/core/verifier/verification-engine.d.ts.map +1 -0
- package/dist/core/verifier/verification-engine.js +681 -0
- package/dist/core/verifier/verification-engine.js.map +1 -0
- package/dist/types/index.d.ts +252 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pipeline.d.ts +148 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/utils/errors.d.ts +51 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +128 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +149 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +331 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/progress.d.ts +142 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +280 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +53 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +199 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shutdown.d.ts +89 -0
- package/dist/utils/shutdown.d.ts.map +1 -0
- package/dist/utils/shutdown.js +237 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/package.json +114 -0
- package/src/viewer/InteractiveGraphViewer.jsx +1486 -0
- package/src/viewer/app/index.html +17 -0
- package/src/viewer/app/main.jsx +13 -0
- package/src/viewer/components/ArchitectureView.jsx +177 -0
- package/src/viewer/components/ChatPanel.jsx +448 -0
- package/src/viewer/components/ClusterGraph.jsx +441 -0
- package/src/viewer/components/FilterBar.jsx +179 -0
- package/src/viewer/components/FlatGraph.jsx +275 -0
- package/src/viewer/components/MicroComponents.jsx +83 -0
- package/src/viewer/hooks/usePanZoom.js +79 -0
- package/src/viewer/utils/constants.js +47 -0
- package/src/viewer/utils/graph-helpers.js +291 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileWalker Service
|
|
3
|
+
*
|
|
4
|
+
* Traverses the codebase intelligently, filtering noise and respecting ignore patterns.
|
|
5
|
+
* Collects metadata about each file for significance scoring and analysis.
|
|
6
|
+
*/
|
|
7
|
+
import { opendir, readFile, stat } from 'node:fs/promises';
|
|
8
|
+
import { join, relative, basename, extname, dirname } from 'node:path';
|
|
9
|
+
import ignoreModule from 'ignore';
|
|
10
|
+
const ignore = ignoreModule.default ?? ignoreModule;
|
|
11
|
+
/**
|
|
12
|
+
* Built-in directories to always skip
|
|
13
|
+
*/
|
|
14
|
+
const SKIP_DIRECTORIES = new Set([
|
|
15
|
+
'node_modules',
|
|
16
|
+
'.git',
|
|
17
|
+
'.svn',
|
|
18
|
+
'.hg',
|
|
19
|
+
'dist',
|
|
20
|
+
'build',
|
|
21
|
+
'out',
|
|
22
|
+
'target',
|
|
23
|
+
'bin',
|
|
24
|
+
'obj',
|
|
25
|
+
'.cache',
|
|
26
|
+
'.tmp',
|
|
27
|
+
'.temp',
|
|
28
|
+
'__pycache__',
|
|
29
|
+
'.pytest_cache',
|
|
30
|
+
'coverage',
|
|
31
|
+
'.nyc_output',
|
|
32
|
+
'.coverage',
|
|
33
|
+
'.idea',
|
|
34
|
+
'.vscode',
|
|
35
|
+
'.vs',
|
|
36
|
+
'openspec',
|
|
37
|
+
'.spec-gen',
|
|
38
|
+
]);
|
|
39
|
+
/**
|
|
40
|
+
* Directories to skip only when not at root level
|
|
41
|
+
*/
|
|
42
|
+
const SKIP_DIRECTORIES_NOT_ROOT = new Set([
|
|
43
|
+
'vendor',
|
|
44
|
+
'deps',
|
|
45
|
+
'packages',
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* File extensions to always skip (binary/generated files)
|
|
49
|
+
*/
|
|
50
|
+
const SKIP_EXTENSIONS = new Set([
|
|
51
|
+
// Lock files
|
|
52
|
+
'.lock',
|
|
53
|
+
'.lockb',
|
|
54
|
+
// Minified/bundled
|
|
55
|
+
'.min.js',
|
|
56
|
+
'.min.css',
|
|
57
|
+
'.bundle.js',
|
|
58
|
+
'.chunk.js',
|
|
59
|
+
// Source maps
|
|
60
|
+
'.map',
|
|
61
|
+
// Images
|
|
62
|
+
'.png',
|
|
63
|
+
'.jpg',
|
|
64
|
+
'.jpeg',
|
|
65
|
+
'.gif',
|
|
66
|
+
'.svg',
|
|
67
|
+
'.ico',
|
|
68
|
+
'.webp',
|
|
69
|
+
'.bmp',
|
|
70
|
+
// Fonts
|
|
71
|
+
'.woff',
|
|
72
|
+
'.woff2',
|
|
73
|
+
'.ttf',
|
|
74
|
+
'.eot',
|
|
75
|
+
'.otf',
|
|
76
|
+
// Media
|
|
77
|
+
'.mp3',
|
|
78
|
+
'.mp4',
|
|
79
|
+
'.wav',
|
|
80
|
+
'.avi',
|
|
81
|
+
'.mov',
|
|
82
|
+
'.webm',
|
|
83
|
+
// Documents
|
|
84
|
+
'.pdf',
|
|
85
|
+
'.doc',
|
|
86
|
+
'.docx',
|
|
87
|
+
'.xls',
|
|
88
|
+
'.xlsx',
|
|
89
|
+
// Archives
|
|
90
|
+
'.zip',
|
|
91
|
+
'.tar',
|
|
92
|
+
'.gz',
|
|
93
|
+
'.rar',
|
|
94
|
+
'.7z',
|
|
95
|
+
// Compiled
|
|
96
|
+
'.pyc',
|
|
97
|
+
'.pyo',
|
|
98
|
+
'.class',
|
|
99
|
+
'.o',
|
|
100
|
+
'.so',
|
|
101
|
+
'.dll',
|
|
102
|
+
'.exe',
|
|
103
|
+
]);
|
|
104
|
+
/**
|
|
105
|
+
* Specific filenames to always skip
|
|
106
|
+
*/
|
|
107
|
+
const SKIP_FILENAMES = new Set([
|
|
108
|
+
'package-lock.json',
|
|
109
|
+
'pnpm-lock.yaml',
|
|
110
|
+
'yarn.lock',
|
|
111
|
+
'.DS_Store',
|
|
112
|
+
'Thumbs.db',
|
|
113
|
+
]);
|
|
114
|
+
/**
|
|
115
|
+
* Entry point file name patterns (without extension)
|
|
116
|
+
*/
|
|
117
|
+
const ENTRY_POINT_NAMES = new Set([
|
|
118
|
+
'index',
|
|
119
|
+
'main',
|
|
120
|
+
'app',
|
|
121
|
+
'server',
|
|
122
|
+
'cli',
|
|
123
|
+
'entry',
|
|
124
|
+
]);
|
|
125
|
+
/**
|
|
126
|
+
* Configuration file name patterns
|
|
127
|
+
*/
|
|
128
|
+
const CONFIG_PATTERNS = [
|
|
129
|
+
/^\..*rc$/,
|
|
130
|
+
/^\..*rc\.js$/,
|
|
131
|
+
/^\..*rc\.json$/,
|
|
132
|
+
/^\..*rc\.yaml$/,
|
|
133
|
+
/^\..*rc\.yml$/,
|
|
134
|
+
/config\./,
|
|
135
|
+
/\.config\./,
|
|
136
|
+
/settings\./,
|
|
137
|
+
/^tsconfig.*\.json$/,
|
|
138
|
+
/^package\.json$/,
|
|
139
|
+
/^pyproject\.toml$/,
|
|
140
|
+
/^Cargo\.toml$/,
|
|
141
|
+
/^go\.mod$/,
|
|
142
|
+
/^Gemfile$/,
|
|
143
|
+
/^composer\.json$/,
|
|
144
|
+
];
|
|
145
|
+
/**
|
|
146
|
+
* Test file/directory patterns
|
|
147
|
+
*/
|
|
148
|
+
const TEST_DIR_PATTERNS = [
|
|
149
|
+
/\/test\//,
|
|
150
|
+
/\/tests\//,
|
|
151
|
+
/\/__tests__\//,
|
|
152
|
+
/\/spec\//,
|
|
153
|
+
/\/specs\//,
|
|
154
|
+
/^test\//,
|
|
155
|
+
/^tests\//,
|
|
156
|
+
/^__tests__\//,
|
|
157
|
+
/^spec\//,
|
|
158
|
+
/^specs\//,
|
|
159
|
+
];
|
|
160
|
+
const TEST_FILE_PATTERNS = [
|
|
161
|
+
/\.test\.[^.]+$/,
|
|
162
|
+
/\.spec\.[^.]+$/,
|
|
163
|
+
/_test\.[^.]+$/,
|
|
164
|
+
/_spec\.[^.]+$/,
|
|
165
|
+
/^test_.*\.[^.]+$/,
|
|
166
|
+
/^spec_.*\.[^.]+$/,
|
|
167
|
+
];
|
|
168
|
+
/** Maximum file size to read for line counting / shebang detection (10 MB). */
|
|
169
|
+
const MAX_READ_SIZE = 10_000_000;
|
|
170
|
+
/**
|
|
171
|
+
* Check if a file has a shebang line
|
|
172
|
+
*/
|
|
173
|
+
async function hasShebang(filePath) {
|
|
174
|
+
try {
|
|
175
|
+
const s = await stat(filePath);
|
|
176
|
+
if (s.size > MAX_READ_SIZE)
|
|
177
|
+
return false;
|
|
178
|
+
const content = await readFile(filePath, { encoding: 'utf-8', flag: 'r' });
|
|
179
|
+
return content.startsWith('#!');
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Count lines in a file. Returns -1 for files larger than MAX_READ_SIZE.
|
|
187
|
+
*/
|
|
188
|
+
async function countLines(filePath) {
|
|
189
|
+
try {
|
|
190
|
+
const s = await stat(filePath);
|
|
191
|
+
if (s.size > MAX_READ_SIZE)
|
|
192
|
+
return -1;
|
|
193
|
+
const content = await readFile(filePath, 'utf-8');
|
|
194
|
+
return content.split('\n').length;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if file path matches test patterns
|
|
202
|
+
*/
|
|
203
|
+
function isTestFile(relativePath, fileName) {
|
|
204
|
+
// Check directory patterns
|
|
205
|
+
for (const pattern of TEST_DIR_PATTERNS) {
|
|
206
|
+
if (pattern.test(relativePath)) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Check file name patterns
|
|
211
|
+
for (const pattern of TEST_FILE_PATTERNS) {
|
|
212
|
+
if (pattern.test(fileName)) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if file is a configuration file
|
|
220
|
+
*/
|
|
221
|
+
function isConfigFile(fileName) {
|
|
222
|
+
for (const pattern of CONFIG_PATTERNS) {
|
|
223
|
+
if (pattern.test(fileName)) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if file is likely generated
|
|
231
|
+
*/
|
|
232
|
+
function isGeneratedFile(fileName, relativePath) {
|
|
233
|
+
// Check common generated file patterns
|
|
234
|
+
if (fileName.endsWith('.d.ts'))
|
|
235
|
+
return true;
|
|
236
|
+
if (fileName.endsWith('.generated.ts'))
|
|
237
|
+
return true;
|
|
238
|
+
if (fileName.endsWith('.generated.js'))
|
|
239
|
+
return true;
|
|
240
|
+
if (relativePath.includes('/generated/'))
|
|
241
|
+
return true;
|
|
242
|
+
if (relativePath.includes('/__generated__/'))
|
|
243
|
+
return true;
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Check if file might be an entry point
|
|
248
|
+
*/
|
|
249
|
+
async function isEntryPoint(fileName, relativePath, absolutePath, depth) {
|
|
250
|
+
const nameWithoutExt = basename(fileName, extname(fileName));
|
|
251
|
+
// Check if name matches entry point patterns
|
|
252
|
+
if (ENTRY_POINT_NAMES.has(nameWithoutExt.toLowerCase())) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
// Files in src/, lib/, bin/ at depth 1 might be entry points
|
|
256
|
+
if (depth === 1) {
|
|
257
|
+
const dir = dirname(relativePath);
|
|
258
|
+
if (['src', 'lib', 'bin'].includes(dir)) {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Check for shebang
|
|
263
|
+
if (await hasShebang(absolutePath)) {
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Load and combine ignore patterns
|
|
270
|
+
*/
|
|
271
|
+
async function loadIgnorePatterns(rootPath) {
|
|
272
|
+
const ig = ignore();
|
|
273
|
+
// Add built-in patterns for directories
|
|
274
|
+
for (const dir of SKIP_DIRECTORIES) {
|
|
275
|
+
ig.add(`${dir}/`);
|
|
276
|
+
}
|
|
277
|
+
// Add built-in patterns for files
|
|
278
|
+
for (const ext of SKIP_EXTENSIONS) {
|
|
279
|
+
ig.add(`*${ext}`);
|
|
280
|
+
}
|
|
281
|
+
for (const filename of SKIP_FILENAMES) {
|
|
282
|
+
ig.add(filename);
|
|
283
|
+
}
|
|
284
|
+
// Load .gitignore
|
|
285
|
+
try {
|
|
286
|
+
const gitignorePath = join(rootPath, '.gitignore');
|
|
287
|
+
const gitignoreContent = await readFile(gitignorePath, 'utf-8');
|
|
288
|
+
ig.add(gitignoreContent);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// .gitignore not found, continue without it
|
|
292
|
+
}
|
|
293
|
+
// Load .spec-gen-ignore (optional)
|
|
294
|
+
try {
|
|
295
|
+
const specGenIgnorePath = join(rootPath, '.spec-gen-ignore');
|
|
296
|
+
const specGenIgnoreContent = await readFile(specGenIgnorePath, 'utf-8');
|
|
297
|
+
ig.add(specGenIgnoreContent);
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// .spec-gen-ignore not found, continue without it
|
|
301
|
+
}
|
|
302
|
+
return ig;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* FileWalker class for traversing codebases
|
|
306
|
+
*/
|
|
307
|
+
export class FileWalker {
|
|
308
|
+
rootPath;
|
|
309
|
+
options;
|
|
310
|
+
ig = null;
|
|
311
|
+
/** Separate ignore instance used to check if a file matches includePatterns. */
|
|
312
|
+
igInclude = null;
|
|
313
|
+
files = [];
|
|
314
|
+
skippedCount = 0;
|
|
315
|
+
skippedReasons = {};
|
|
316
|
+
directoriesScanned = 0;
|
|
317
|
+
extensionCounts = {};
|
|
318
|
+
directoryCounts = {};
|
|
319
|
+
constructor(rootPath, options = {}) {
|
|
320
|
+
this.rootPath = rootPath;
|
|
321
|
+
this.options = {
|
|
322
|
+
maxFiles: options.maxFiles ?? 500,
|
|
323
|
+
includePatterns: options.includePatterns ?? [],
|
|
324
|
+
excludePatterns: options.excludePatterns ?? [],
|
|
325
|
+
onProgress: options.onProgress ?? (() => { }),
|
|
326
|
+
signal: options.signal ?? new AbortController().signal,
|
|
327
|
+
concurrency: options.concurrency ?? 10,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Record a skipped file with reason
|
|
332
|
+
*/
|
|
333
|
+
recordSkip(reason) {
|
|
334
|
+
this.skippedCount++;
|
|
335
|
+
this.skippedReasons[reason] = (this.skippedReasons[reason] ?? 0) + 1;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Check if we should skip a directory
|
|
339
|
+
*/
|
|
340
|
+
shouldSkipDirectory(dirName, depth, relativeDir) {
|
|
341
|
+
// Always skip these directories
|
|
342
|
+
if (SKIP_DIRECTORIES.has(dirName)) {
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
// Skip these only when not at root
|
|
346
|
+
if (depth > 0 && SKIP_DIRECTORIES_NOT_ROOT.has(dirName)) {
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
// Check exclude patterns against relative path
|
|
350
|
+
if (relativeDir) {
|
|
351
|
+
for (const pattern of this.options.excludePatterns) {
|
|
352
|
+
const normalized = pattern.replace(/\/\*\*$/, '').replace(/\/$/, '');
|
|
353
|
+
if (relativeDir === normalized || relativeDir.startsWith(normalized + '/')) {
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Check if we should skip a file
|
|
362
|
+
*/
|
|
363
|
+
shouldSkipFile(relativePath, _fileName) {
|
|
364
|
+
// includePatterns override all exclusions — check first
|
|
365
|
+
if (this.igInclude && this.igInclude.ignores(relativePath)) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
// Check against ignore patterns (gitignore + excludePatterns)
|
|
369
|
+
if (this.ig && this.ig.ignores(relativePath)) {
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
// Check exclude patterns against relative path (direct prefix match)
|
|
373
|
+
for (const pattern of this.options.excludePatterns) {
|
|
374
|
+
const normalized = pattern.replace(/\/\*\*$/, '').replace(/\/$/, '');
|
|
375
|
+
if (relativePath === normalized || relativePath.startsWith(normalized + '/')) {
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Walk a directory recursively
|
|
383
|
+
*/
|
|
384
|
+
async walkDirectory(dirPath, depth) {
|
|
385
|
+
// Check for cancellation
|
|
386
|
+
if (this.options.signal.aborted) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
// Check if we've reached max files
|
|
390
|
+
if (this.files.length >= this.options.maxFiles) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
this.directoriesScanned++;
|
|
394
|
+
const relativeDirPath = relative(this.rootPath, dirPath);
|
|
395
|
+
// Report progress
|
|
396
|
+
this.options.onProgress({
|
|
397
|
+
filesFound: this.files.length,
|
|
398
|
+
directoriesScanned: this.directoriesScanned,
|
|
399
|
+
currentPath: relativeDirPath || '.',
|
|
400
|
+
});
|
|
401
|
+
try {
|
|
402
|
+
const dir = await opendir(dirPath);
|
|
403
|
+
const entries = [];
|
|
404
|
+
for await (const entry of dir) {
|
|
405
|
+
entries.push({
|
|
406
|
+
name: entry.name,
|
|
407
|
+
isDirectory: entry.isDirectory(),
|
|
408
|
+
isFile: entry.isFile(),
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
// Process directories first, then files
|
|
412
|
+
const directories = entries.filter((e) => e.isDirectory);
|
|
413
|
+
const files = entries.filter((e) => e.isFile);
|
|
414
|
+
// Process subdirectories
|
|
415
|
+
for (const entry of directories) {
|
|
416
|
+
if (this.options.signal.aborted)
|
|
417
|
+
break;
|
|
418
|
+
if (this.files.length >= this.options.maxFiles)
|
|
419
|
+
break;
|
|
420
|
+
const subPath = join(dirPath, entry.name);
|
|
421
|
+
const relativeSubPath = relative(this.rootPath, subPath);
|
|
422
|
+
if (this.shouldSkipDirectory(entry.name, depth, relativeSubPath)) {
|
|
423
|
+
this.recordSkip(`directory:${entry.name}`);
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
// Check against ignore patterns
|
|
427
|
+
if (this.ig && this.ig.ignores(relativeSubPath + '/')) {
|
|
428
|
+
this.recordSkip('gitignore');
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
await this.walkDirectory(subPath, depth + 1);
|
|
432
|
+
}
|
|
433
|
+
// Process files sequentially to respect maxFiles limit accurately
|
|
434
|
+
for (const entry of files) {
|
|
435
|
+
if (this.options.signal.aborted)
|
|
436
|
+
break;
|
|
437
|
+
if (this.files.length >= this.options.maxFiles)
|
|
438
|
+
break;
|
|
439
|
+
const filePath = join(dirPath, entry.name);
|
|
440
|
+
const relativePath = relative(this.rootPath, filePath);
|
|
441
|
+
if (this.shouldSkipFile(relativePath, entry.name)) {
|
|
442
|
+
this.recordSkip('pattern');
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
await this.processFile(filePath, relativePath, entry.name, depth);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch {
|
|
449
|
+
// Permission denied or other read error, skip this directory
|
|
450
|
+
this.recordSkip('error');
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Process a single file and collect metadata
|
|
455
|
+
*/
|
|
456
|
+
async processFile(absolutePath, relativePath, fileName, depth) {
|
|
457
|
+
try {
|
|
458
|
+
const fileStat = await stat(absolutePath);
|
|
459
|
+
const extension = extname(fileName);
|
|
460
|
+
const directory = dirname(relativePath);
|
|
461
|
+
const lines = await countLines(absolutePath);
|
|
462
|
+
const metadata = {
|
|
463
|
+
path: relativePath,
|
|
464
|
+
absolutePath,
|
|
465
|
+
name: fileName,
|
|
466
|
+
extension,
|
|
467
|
+
size: fileStat.size,
|
|
468
|
+
lines,
|
|
469
|
+
depth,
|
|
470
|
+
directory: directory === '.' ? '' : directory,
|
|
471
|
+
isEntryPoint: await isEntryPoint(fileName, relativePath, absolutePath, depth),
|
|
472
|
+
isConfig: isConfigFile(fileName),
|
|
473
|
+
isTest: isTestFile(relativePath, fileName),
|
|
474
|
+
isGenerated: isGeneratedFile(fileName, relativePath),
|
|
475
|
+
};
|
|
476
|
+
this.files.push(metadata);
|
|
477
|
+
// Update counts
|
|
478
|
+
const ext = extension || '(no extension)';
|
|
479
|
+
this.extensionCounts[ext] = (this.extensionCounts[ext] ?? 0) + 1;
|
|
480
|
+
const dir = directory === '' || directory === '.' ? '(root)' : directory;
|
|
481
|
+
this.directoryCounts[dir] = (this.directoryCounts[dir] ?? 0) + 1;
|
|
482
|
+
}
|
|
483
|
+
catch {
|
|
484
|
+
this.recordSkip('error');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Walk the codebase and collect file metadata
|
|
489
|
+
*/
|
|
490
|
+
async walk() {
|
|
491
|
+
// Load ignore patterns
|
|
492
|
+
this.ig = await loadIgnorePatterns(this.rootPath);
|
|
493
|
+
// Add user-specified exclude patterns
|
|
494
|
+
for (const pattern of this.options.excludePatterns) {
|
|
495
|
+
this.ig.add(pattern);
|
|
496
|
+
}
|
|
497
|
+
// includePatterns override gitignore/excludePatterns at file level.
|
|
498
|
+
// Add them as negated patterns so this.ig lets them through, and
|
|
499
|
+
// build a separate igInclude instance for the direct excludePatterns check.
|
|
500
|
+
if (this.options.includePatterns.length > 0) {
|
|
501
|
+
this.igInclude = ignore();
|
|
502
|
+
for (const pattern of this.options.includePatterns) {
|
|
503
|
+
this.ig.add('!' + pattern);
|
|
504
|
+
this.igInclude.add(pattern);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
// Start walking from root
|
|
508
|
+
await this.walkDirectory(this.rootPath, 0);
|
|
509
|
+
return {
|
|
510
|
+
files: this.files,
|
|
511
|
+
summary: {
|
|
512
|
+
totalFiles: this.files.length,
|
|
513
|
+
totalDirectories: this.directoriesScanned,
|
|
514
|
+
byExtension: this.extensionCounts,
|
|
515
|
+
byDirectory: this.directoryCounts,
|
|
516
|
+
skippedCount: this.skippedCount,
|
|
517
|
+
skippedReasons: this.skippedReasons,
|
|
518
|
+
},
|
|
519
|
+
rootPath: this.rootPath,
|
|
520
|
+
timestamp: new Date().toISOString(),
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Convenience function to walk a directory
|
|
526
|
+
*/
|
|
527
|
+
export async function walkDirectory(rootPath, options) {
|
|
528
|
+
const walker = new FileWalker(rootPath, options);
|
|
529
|
+
return walker.walk();
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=file-walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-walker.js","sourceRoot":"","sources":["../../../src/core/analyzer/file-walker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import/Export Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses source files to extract imports and exports.
|
|
5
|
+
* Uses regex-based parsing for speed and simplicity.
|
|
6
|
+
* Supports JavaScript/TypeScript and Python.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Information about an import statement
|
|
10
|
+
*/
|
|
11
|
+
export interface ImportInfo {
|
|
12
|
+
source: string;
|
|
13
|
+
isRelative: boolean;
|
|
14
|
+
isPackage: boolean;
|
|
15
|
+
isBuiltin: boolean;
|
|
16
|
+
importedNames: string[];
|
|
17
|
+
hasDefault: boolean;
|
|
18
|
+
hasNamespace: boolean;
|
|
19
|
+
isTypeOnly: boolean;
|
|
20
|
+
isDynamic: boolean;
|
|
21
|
+
line: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Information about an export statement
|
|
25
|
+
*/
|
|
26
|
+
export interface ExportInfo {
|
|
27
|
+
name: string;
|
|
28
|
+
isDefault: boolean;
|
|
29
|
+
isType: boolean;
|
|
30
|
+
isReExport: boolean;
|
|
31
|
+
reExportSource?: string;
|
|
32
|
+
kind: 'function' | 'class' | 'variable' | 'type' | 'interface' | 'enum' | 'unknown';
|
|
33
|
+
line: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Complete analysis of a file's imports and exports
|
|
37
|
+
*/
|
|
38
|
+
export interface FileAnalysis {
|
|
39
|
+
filePath: string;
|
|
40
|
+
imports: ImportInfo[];
|
|
41
|
+
exports: ExportInfo[];
|
|
42
|
+
localImports: string[];
|
|
43
|
+
externalImports: string[];
|
|
44
|
+
parseErrors: string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Options for import resolution
|
|
48
|
+
*/
|
|
49
|
+
export interface ResolveOptions {
|
|
50
|
+
/** Base directory for resolving relative imports */
|
|
51
|
+
baseDir: string;
|
|
52
|
+
/** TypeScript paths aliases (from tsconfig) */
|
|
53
|
+
pathAliases?: Record<string, string[]>;
|
|
54
|
+
/** File extensions to try when resolving */
|
|
55
|
+
extensions?: string[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve a relative import to an absolute file path
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveImport(importSource: string, fromFile: string, options: ResolveOptions): Promise<string | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Import/Export Parser
|
|
63
|
+
*/
|
|
64
|
+
export declare class ImportExportParser {
|
|
65
|
+
private cache;
|
|
66
|
+
/**
|
|
67
|
+
* Clear the parse cache
|
|
68
|
+
*/
|
|
69
|
+
clearCache(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Get file extension type
|
|
72
|
+
*/
|
|
73
|
+
private getFileType;
|
|
74
|
+
/**
|
|
75
|
+
* Parse a file and extract imports/exports
|
|
76
|
+
*/
|
|
77
|
+
parseFile(filePath: string): Promise<FileAnalysis>;
|
|
78
|
+
/**
|
|
79
|
+
* Parse multiple files
|
|
80
|
+
*/
|
|
81
|
+
parseFiles(filePaths: string[]): Promise<Map<string, FileAnalysis>>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Convenience function to parse a single file
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseFile(filePath: string): Promise<FileAnalysis>;
|
|
87
|
+
/**
|
|
88
|
+
* Convenience function to parse multiple files
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseFiles(filePaths: string[]): Promise<Map<string, FileAnalysis>>;
|
|
91
|
+
//# sourceMappingURL=import-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-parser.d.ts","sourceRoot":"","sources":["../../../src/core/analyzer/import-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AA8kBD;;GAEG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsExB;AAMD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAwC;IAErD;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsDxD;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAU1E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAGxF"}
|