@flaid/devmap 0.2.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 +168 -0
- package/dist/ai/completion.d.ts +7 -0
- package/dist/ai/completion.d.ts.map +1 -0
- package/dist/ai/completion.js +27 -0
- package/dist/ai/completion.js.map +1 -0
- package/dist/ai/contextBuilder.d.ts +42 -0
- package/dist/ai/contextBuilder.d.ts.map +1 -0
- package/dist/ai/contextBuilder.js +632 -0
- package/dist/ai/contextBuilder.js.map +1 -0
- package/dist/ai/groq.d.ts +36 -0
- package/dist/ai/groq.d.ts.map +1 -0
- package/dist/ai/groq.js +368 -0
- package/dist/ai/groq.js.map +1 -0
- package/dist/ai/openrouter.d.ts +20 -0
- package/dist/ai/openrouter.d.ts.map +1 -0
- package/dist/ai/openrouter.js +187 -0
- package/dist/ai/openrouter.js.map +1 -0
- package/dist/ai/prompts.d.ts +7 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +88 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/provider.d.ts +15 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +28 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/snapshotEnrichment.d.ts +4 -0
- package/dist/ai/snapshotEnrichment.d.ts.map +1 -0
- package/dist/ai/snapshotEnrichment.js +188 -0
- package/dist/ai/snapshotEnrichment.js.map +1 -0
- package/dist/ai/types.d.ts +29 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/analyzers/analysis/extractors/fallbackExtractor.d.ts +30 -0
- package/dist/analyzers/analysis/extractors/fallbackExtractor.d.ts.map +1 -0
- package/dist/analyzers/analysis/extractors/fallbackExtractor.js +114 -0
- package/dist/analyzers/analysis/extractors/fallbackExtractor.js.map +1 -0
- package/dist/analyzers/analysis/extractors/index.d.ts +16 -0
- package/dist/analyzers/analysis/extractors/index.d.ts.map +1 -0
- package/dist/analyzers/analysis/extractors/index.js +135 -0
- package/dist/analyzers/analysis/extractors/index.js.map +1 -0
- package/dist/analyzers/analysis/extractors/prismaExtractor.d.ts +15 -0
- package/dist/analyzers/analysis/extractors/prismaExtractor.d.ts.map +1 -0
- package/dist/analyzers/analysis/extractors/prismaExtractor.js +183 -0
- package/dist/analyzers/analysis/extractors/prismaExtractor.js.map +1 -0
- package/dist/analyzers/analysis/extractors/sqlExtractor.d.ts +14 -0
- package/dist/analyzers/analysis/extractors/sqlExtractor.d.ts.map +1 -0
- package/dist/analyzers/analysis/extractors/sqlExtractor.js +163 -0
- package/dist/analyzers/analysis/extractors/sqlExtractor.js.map +1 -0
- package/dist/analyzers/analysis/extractors/types.d.ts +76 -0
- package/dist/analyzers/analysis/extractors/types.d.ts.map +1 -0
- package/dist/analyzers/analysis/extractors/types.js +2 -0
- package/dist/analyzers/analysis/extractors/types.js.map +1 -0
- package/dist/analyzers/analysis/fileAnalysis.d.ts +36 -0
- package/dist/analyzers/analysis/fileAnalysis.d.ts.map +1 -0
- package/dist/analyzers/analysis/fileAnalysis.js +2 -0
- package/dist/analyzers/analysis/fileAnalysis.js.map +1 -0
- package/dist/analyzers/analysis/fileRole.d.ts +30 -0
- package/dist/analyzers/analysis/fileRole.d.ts.map +1 -0
- package/dist/analyzers/analysis/fileRole.js +242 -0
- package/dist/analyzers/analysis/fileRole.js.map +1 -0
- package/dist/analyzers/analysis/fileScanner.d.ts +10 -0
- package/dist/analyzers/analysis/fileScanner.d.ts.map +1 -0
- package/dist/analyzers/analysis/fileScanner.js +44 -0
- package/dist/analyzers/analysis/fileScanner.js.map +1 -0
- package/dist/analyzers/analysis/filterEngine.d.ts +2 -0
- package/dist/analyzers/analysis/filterEngine.d.ts.map +1 -0
- package/dist/analyzers/analysis/filterEngine.js +110 -0
- package/dist/analyzers/analysis/filterEngine.js.map +1 -0
- package/dist/analyzers/analysis/index.d.ts +12 -0
- package/dist/analyzers/analysis/index.d.ts.map +1 -0
- package/dist/analyzers/analysis/index.js +8 -0
- package/dist/analyzers/analysis/index.js.map +1 -0
- package/dist/analyzers/analysis/preprocessors/astroPreprocessor.d.ts +23 -0
- package/dist/analyzers/analysis/preprocessors/astroPreprocessor.d.ts.map +1 -0
- package/dist/analyzers/analysis/preprocessors/astroPreprocessor.js +40 -0
- package/dist/analyzers/analysis/preprocessors/astroPreprocessor.js.map +1 -0
- package/dist/analyzers/analysis/preprocessors/index.d.ts +5 -0
- package/dist/analyzers/analysis/preprocessors/index.d.ts.map +1 -0
- package/dist/analyzers/analysis/preprocessors/index.js +4 -0
- package/dist/analyzers/analysis/preprocessors/index.js.map +1 -0
- package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.d.ts +27 -0
- package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.d.ts.map +1 -0
- package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.js +50 -0
- package/dist/analyzers/analysis/preprocessors/sveltePreprocessor.js.map +1 -0
- package/dist/analyzers/analysis/preprocessors/types.d.ts +45 -0
- package/dist/analyzers/analysis/preprocessors/types.d.ts.map +1 -0
- package/dist/analyzers/analysis/preprocessors/types.js +2 -0
- package/dist/analyzers/analysis/preprocessors/types.js.map +1 -0
- package/dist/analyzers/analysis/preprocessors/vuePreprocessor.d.ts +21 -0
- package/dist/analyzers/analysis/preprocessors/vuePreprocessor.d.ts.map +1 -0
- package/dist/analyzers/analysis/preprocessors/vuePreprocessor.js +44 -0
- package/dist/analyzers/analysis/preprocessors/vuePreprocessor.js.map +1 -0
- package/dist/analyzers/analysis/tsMorphAnalyzer.d.ts +10 -0
- package/dist/analyzers/analysis/tsMorphAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/analysis/tsMorphAnalyzer.js +190 -0
- package/dist/analyzers/analysis/tsMorphAnalyzer.js.map +1 -0
- package/dist/analyzers/detectors/capabilityDetector.d.ts +28 -0
- package/dist/analyzers/detectors/capabilityDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/capabilityDetector.js +288 -0
- package/dist/analyzers/detectors/capabilityDetector.js.map +1 -0
- package/dist/analyzers/detectors/databaseDetector.d.ts +7 -0
- package/dist/analyzers/detectors/databaseDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/databaseDetector.js +71 -0
- package/dist/analyzers/detectors/databaseDetector.js.map +1 -0
- package/dist/analyzers/detectors/frameworkDetector.d.ts +22 -0
- package/dist/analyzers/detectors/frameworkDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/frameworkDetector.js +160 -0
- package/dist/analyzers/detectors/frameworkDetector.js.map +1 -0
- package/dist/analyzers/detectors/frontendFeatureDetector.d.ts +26 -0
- package/dist/analyzers/detectors/frontendFeatureDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/frontendFeatureDetector.js +269 -0
- package/dist/analyzers/detectors/frontendFeatureDetector.js.map +1 -0
- package/dist/analyzers/detectors/index.d.ts +11 -0
- package/dist/analyzers/detectors/index.d.ts.map +1 -0
- package/dist/analyzers/detectors/index.js +7 -0
- package/dist/analyzers/detectors/index.js.map +1 -0
- package/dist/analyzers/detectors/nestRouteDetector.d.ts +13 -0
- package/dist/analyzers/detectors/nestRouteDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/nestRouteDetector.js +69 -0
- package/dist/analyzers/detectors/nestRouteDetector.js.map +1 -0
- package/dist/analyzers/detectors/routeDetector.d.ts +22 -0
- package/dist/analyzers/detectors/routeDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/routeDetector.js +368 -0
- package/dist/analyzers/detectors/routeDetector.js.map +1 -0
- package/dist/analyzers/detectors/serviceDetector.d.ts +3 -0
- package/dist/analyzers/detectors/serviceDetector.d.ts.map +1 -0
- package/dist/analyzers/detectors/serviceDetector.js +81 -0
- package/dist/analyzers/detectors/serviceDetector.js.map +1 -0
- package/dist/analyzers/features/featureDetector.d.ts +22 -0
- package/dist/analyzers/features/featureDetector.d.ts.map +1 -0
- package/dist/analyzers/features/featureDetector.js +821 -0
- package/dist/analyzers/features/featureDetector.js.map +1 -0
- package/dist/analyzers/features/featureMerge.d.ts +65 -0
- package/dist/analyzers/features/featureMerge.d.ts.map +1 -0
- package/dist/analyzers/features/featureMerge.js +168 -0
- package/dist/analyzers/features/featureMerge.js.map +1 -0
- package/dist/analyzers/features/featureSimilarity.d.ts +152 -0
- package/dist/analyzers/features/featureSimilarity.d.ts.map +1 -0
- package/dist/analyzers/features/featureSimilarity.js +264 -0
- package/dist/analyzers/features/featureSimilarity.js.map +1 -0
- package/dist/analyzers/features/index.d.ts +6 -0
- package/dist/analyzers/features/index.d.ts.map +1 -0
- package/dist/analyzers/features/index.js +4 -0
- package/dist/analyzers/features/index.js.map +1 -0
- package/dist/analyzers/graph/dependencyGraph.d.ts +5 -0
- package/dist/analyzers/graph/dependencyGraph.d.ts.map +1 -0
- package/dist/analyzers/graph/dependencyGraph.js +88 -0
- package/dist/analyzers/graph/dependencyGraph.js.map +1 -0
- package/dist/analyzers/graph/dependencyMap.d.ts +43 -0
- package/dist/analyzers/graph/dependencyMap.d.ts.map +1 -0
- package/dist/analyzers/graph/dependencyMap.js +85 -0
- package/dist/analyzers/graph/dependencyMap.js.map +1 -0
- package/dist/analyzers/graph/entryPoints.d.ts +3 -0
- package/dist/analyzers/graph/entryPoints.d.ts.map +1 -0
- package/dist/analyzers/graph/entryPoints.js +21 -0
- package/dist/analyzers/graph/entryPoints.js.map +1 -0
- package/dist/analyzers/graph/index.d.ts +7 -0
- package/dist/analyzers/graph/index.d.ts.map +1 -0
- package/dist/analyzers/graph/index.js +5 -0
- package/dist/analyzers/graph/index.js.map +1 -0
- package/dist/analyzers/graph/sourceScope.d.ts +2 -0
- package/dist/analyzers/graph/sourceScope.d.ts.map +1 -0
- package/dist/analyzers/graph/sourceScope.js +30 -0
- package/dist/analyzers/graph/sourceScope.js.map +1 -0
- package/dist/analyzers/inference/domainInference.d.ts +58 -0
- package/dist/analyzers/inference/domainInference.d.ts.map +1 -0
- package/dist/analyzers/inference/domainInference.js +234 -0
- package/dist/analyzers/inference/domainInference.js.map +1 -0
- package/dist/analyzers/inference/index.d.ts +5 -0
- package/dist/analyzers/inference/index.d.ts.map +1 -0
- package/dist/analyzers/inference/index.js +3 -0
- package/dist/analyzers/inference/index.js.map +1 -0
- package/dist/analyzers/inference/ownershipTopology.d.ts +8 -0
- package/dist/analyzers/inference/ownershipTopology.d.ts.map +1 -0
- package/dist/analyzers/inference/ownershipTopology.js +65 -0
- package/dist/analyzers/inference/ownershipTopology.js.map +1 -0
- package/dist/analyzers/pipeline/analyzerRegistry.d.ts +9 -0
- package/dist/analyzers/pipeline/analyzerRegistry.d.ts.map +1 -0
- package/dist/analyzers/pipeline/analyzerRegistry.js +35 -0
- package/dist/analyzers/pipeline/analyzerRegistry.js.map +1 -0
- package/dist/analyzers/pipeline/heuristicAnalyzer.d.ts +12 -0
- package/dist/analyzers/pipeline/heuristicAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/pipeline/heuristicAnalyzer.js +150 -0
- package/dist/analyzers/pipeline/heuristicAnalyzer.js.map +1 -0
- package/dist/analyzers/pipeline/index.d.ts +7 -0
- package/dist/analyzers/pipeline/index.d.ts.map +1 -0
- package/dist/analyzers/pipeline/index.js +5 -0
- package/dist/analyzers/pipeline/index.js.map +1 -0
- package/dist/analyzers/pipeline/projectMap.d.ts +120 -0
- package/dist/analyzers/pipeline/projectMap.d.ts.map +1 -0
- package/dist/analyzers/pipeline/projectMap.js +726 -0
- package/dist/analyzers/pipeline/projectMap.js.map +1 -0
- package/dist/analyzers/pipeline/projectMetadata.d.ts +19 -0
- package/dist/analyzers/pipeline/projectMetadata.d.ts.map +1 -0
- package/dist/analyzers/pipeline/projectMetadata.js +149 -0
- package/dist/analyzers/pipeline/projectMetadata.js.map +1 -0
- package/dist/analyzers/pipeline/reasonTags.d.ts +6 -0
- package/dist/analyzers/pipeline/reasonTags.d.ts.map +1 -0
- package/dist/analyzers/pipeline/reasonTags.js +6 -0
- package/dist/analyzers/pipeline/reasonTags.js.map +1 -0
- package/dist/analyzers/registry/ai-providers.d.ts +3 -0
- package/dist/analyzers/registry/ai-providers.d.ts.map +1 -0
- package/dist/analyzers/registry/ai-providers.js +94 -0
- package/dist/analyzers/registry/ai-providers.js.map +1 -0
- package/dist/analyzers/registry/analytics.d.ts +3 -0
- package/dist/analyzers/registry/analytics.d.ts.map +1 -0
- package/dist/analyzers/registry/analytics.js +15 -0
- package/dist/analyzers/registry/analytics.js.map +1 -0
- package/dist/analyzers/registry/auth.d.ts +3 -0
- package/dist/analyzers/registry/auth.d.ts.map +1 -0
- package/dist/analyzers/registry/auth.js +18 -0
- package/dist/analyzers/registry/auth.js.map +1 -0
- package/dist/analyzers/registry/background-jobs.d.ts +3 -0
- package/dist/analyzers/registry/background-jobs.d.ts.map +1 -0
- package/dist/analyzers/registry/background-jobs.js +14 -0
- package/dist/analyzers/registry/background-jobs.js.map +1 -0
- package/dist/analyzers/registry/caching.d.ts +3 -0
- package/dist/analyzers/registry/caching.d.ts.map +1 -0
- package/dist/analyzers/registry/caching.js +13 -0
- package/dist/analyzers/registry/caching.js.map +1 -0
- package/dist/analyzers/registry/cms-content.d.ts +3 -0
- package/dist/analyzers/registry/cms-content.d.ts.map +1 -0
- package/dist/analyzers/registry/cms-content.js +15 -0
- package/dist/analyzers/registry/cms-content.js.map +1 -0
- package/dist/analyzers/registry/database.d.ts +3 -0
- package/dist/analyzers/registry/database.d.ts.map +1 -0
- package/dist/analyzers/registry/database.js +13 -0
- package/dist/analyzers/registry/database.js.map +1 -0
- package/dist/analyzers/registry/email.d.ts +3 -0
- package/dist/analyzers/registry/email.d.ts.map +1 -0
- package/dist/analyzers/registry/email.js +19 -0
- package/dist/analyzers/registry/email.js.map +1 -0
- package/dist/analyzers/registry/file-upload.d.ts +3 -0
- package/dist/analyzers/registry/file-upload.d.ts.map +1 -0
- package/dist/analyzers/registry/file-upload.js +19 -0
- package/dist/analyzers/registry/file-upload.js.map +1 -0
- package/dist/analyzers/registry/firebase.d.ts +3 -0
- package/dist/analyzers/registry/firebase.d.ts.map +1 -0
- package/dist/analyzers/registry/firebase.js +8 -0
- package/dist/analyzers/registry/firebase.js.map +1 -0
- package/dist/analyzers/registry/index.d.ts +16 -0
- package/dist/analyzers/registry/index.d.ts.map +1 -0
- package/dist/analyzers/registry/index.js +88 -0
- package/dist/analyzers/registry/index.js.map +1 -0
- package/dist/analyzers/registry/internationalization.d.ts +3 -0
- package/dist/analyzers/registry/internationalization.d.ts.map +1 -0
- package/dist/analyzers/registry/internationalization.js +13 -0
- package/dist/analyzers/registry/internationalization.js.map +1 -0
- package/dist/analyzers/registry/logging-monitoring.d.ts +3 -0
- package/dist/analyzers/registry/logging-monitoring.d.ts.map +1 -0
- package/dist/analyzers/registry/logging-monitoring.js +14 -0
- package/dist/analyzers/registry/logging-monitoring.js.map +1 -0
- package/dist/analyzers/registry/notifications.d.ts +3 -0
- package/dist/analyzers/registry/notifications.d.ts.map +1 -0
- package/dist/analyzers/registry/notifications.js +14 -0
- package/dist/analyzers/registry/notifications.js.map +1 -0
- package/dist/analyzers/registry/payments.d.ts +3 -0
- package/dist/analyzers/registry/payments.d.ts.map +1 -0
- package/dist/analyzers/registry/payments.js +23 -0
- package/dist/analyzers/registry/payments.js.map +1 -0
- package/dist/analyzers/registry/rate-limiting.d.ts +3 -0
- package/dist/analyzers/registry/rate-limiting.d.ts.map +1 -0
- package/dist/analyzers/registry/rate-limiting.js +13 -0
- package/dist/analyzers/registry/rate-limiting.js.map +1 -0
- package/dist/analyzers/registry/search.d.ts +3 -0
- package/dist/analyzers/registry/search.d.ts.map +1 -0
- package/dist/analyzers/registry/search.js +15 -0
- package/dist/analyzers/registry/search.js.map +1 -0
- package/dist/analyzers/registry/testing.d.ts +3 -0
- package/dist/analyzers/registry/testing.d.ts.map +1 -0
- package/dist/analyzers/registry/testing.js +13 -0
- package/dist/analyzers/registry/testing.js.map +1 -0
- package/dist/analyzers/registry/types.d.ts +14 -0
- package/dist/analyzers/registry/types.d.ts.map +1 -0
- package/dist/analyzers/registry/types.js +2 -0
- package/dist/analyzers/registry/types.js.map +1 -0
- package/dist/cache/agentNavigation.d.ts +7 -0
- package/dist/cache/agentNavigation.d.ts.map +1 -0
- package/dist/cache/agentNavigation.js +253 -0
- package/dist/cache/agentNavigation.js.map +1 -0
- package/dist/cache/fileHash.d.ts +2 -0
- package/dist/cache/fileHash.d.ts.map +1 -0
- package/dist/cache/fileHash.js +5 -0
- package/dist/cache/fileHash.js.map +1 -0
- package/dist/cache/snapshot.d.ts +20 -0
- package/dist/cache/snapshot.d.ts.map +1 -0
- package/dist/cache/snapshot.js +184 -0
- package/dist/cache/snapshot.js.map +1 -0
- package/dist/commands/analyze.d.ts +12 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +201 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +65 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +141 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/explain.d.ts +37 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +101 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/flow.d.ts +34 -0
- package/dist/commands/flow.d.ts.map +1 -0
- package/dist/commands/flow.js +151 -0
- package/dist/commands/flow.js.map +1 -0
- package/dist/commands/init.d.ts +16 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +197 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/map.d.ts +24 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +282 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/onboarding.d.ts +36 -0
- package/dist/commands/onboarding.d.ts.map +1 -0
- package/dist/commands/onboarding.js +226 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -0
- package/dist/onboarding/model.d.ts +27 -0
- package/dist/onboarding/model.d.ts.map +1 -0
- package/dist/onboarding/model.js +2 -0
- package/dist/onboarding/model.js.map +1 -0
- package/dist/onboarding/modelBuilder.d.ts +4 -0
- package/dist/onboarding/modelBuilder.d.ts.map +1 -0
- package/dist/onboarding/modelBuilder.js +330 -0
- package/dist/onboarding/modelBuilder.js.map +1 -0
- package/dist/utils/agentsFile.d.ts +6 -0
- package/dist/utils/agentsFile.d.ts.map +1 -0
- package/dist/utils/agentsFile.js +85 -0
- package/dist/utils/agentsFile.js.map +1 -0
- package/dist/utils/config.d.ts +20 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +88 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/devmapFile.d.ts +3 -0
- package/dist/utils/devmapFile.d.ts.map +1 -0
- package/dist/utils/devmapFile.js +43 -0
- package/dist/utils/devmapFile.js.map +1 -0
- package/dist/utils/errors.d.ts +8 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +92 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gitignore.d.ts +2 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +22 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/help.d.ts +3 -0
- package/dist/utils/help.d.ts.map +1 -0
- package/dist/utils/help.js +19 -0
- package/dist/utils/help.js.map +1 -0
- package/dist/utils/mapRenderer.d.ts +39 -0
- package/dist/utils/mapRenderer.d.ts.map +1 -0
- package/dist/utils/mapRenderer.js +90 -0
- package/dist/utils/mapRenderer.js.map +1 -0
- package/dist/utils/markdownTerminal.d.ts +6 -0
- package/dist/utils/markdownTerminal.d.ts.map +1 -0
- package/dist/utils/markdownTerminal.js +153 -0
- package/dist/utils/markdownTerminal.js.map +1 -0
- package/dist/utils/output.d.ts +29 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +108 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/packageMetadata.d.ts +2 -0
- package/dist/utils/packageMetadata.d.ts.map +1 -0
- package/dist/utils/packageMetadata.js +5 -0
- package/dist/utils/packageMetadata.js.map +1 -0
- package/dist/utils/prompt.d.ts +11 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +81 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/slug.d.ts +2 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +8 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/targetResolver.d.ts +7 -0
- package/dist/utils/targetResolver.d.ts.map +1 -0
- package/dist/utils/targetResolver.js +15 -0
- package/dist/utils/targetResolver.js.map +1 -0
- package/dist/utils/welcome.d.ts +10 -0
- package/dist/utils/welcome.d.ts.map +1 -0
- package/dist/utils/welcome.js +80 -0
- package/dist/utils/welcome.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQ/D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAuBnC;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACxE,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM9B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { output } from "./output.js";
|
|
5
|
+
export function getConfigPath() {
|
|
6
|
+
return join(homedir(), ".devmap", "config.json");
|
|
7
|
+
}
|
|
8
|
+
export async function readConfig() {
|
|
9
|
+
try {
|
|
10
|
+
const raw = await readFile(getConfigPath(), "utf8");
|
|
11
|
+
const parsed = JSON.parse(raw);
|
|
12
|
+
return normalizeConfig(parsed);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function writeConfig(config) {
|
|
19
|
+
const configPath = getConfigPath();
|
|
20
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
21
|
+
await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
22
|
+
}
|
|
23
|
+
export function getLocalConfigPath(projectRoot) {
|
|
24
|
+
return join(projectRoot, ".devmap", "config.local.json");
|
|
25
|
+
}
|
|
26
|
+
export async function readLocalConfig(projectRoot) {
|
|
27
|
+
try {
|
|
28
|
+
const raw = await readFile(getLocalConfigPath(projectRoot), "utf8");
|
|
29
|
+
const parsed = JSON.parse(raw);
|
|
30
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const record = parsed;
|
|
34
|
+
if ("apiKey" in record || "provider" in record) {
|
|
35
|
+
output.warning("config.local.json only supports \"model\", apiKey/provider are always read from the global config and were ignored here.");
|
|
36
|
+
}
|
|
37
|
+
return typeof record.model === "string"
|
|
38
|
+
? { model: record.model }
|
|
39
|
+
: null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function writeLocalConfig(projectRoot, config) {
|
|
46
|
+
const configPath = getLocalConfigPath(projectRoot);
|
|
47
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
48
|
+
await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
49
|
+
}
|
|
50
|
+
export async function resolveEffectiveConfig(projectRoot, readers = {}) {
|
|
51
|
+
const global = await (readers.readGlobal ?? readConfig)();
|
|
52
|
+
if (!global)
|
|
53
|
+
return null;
|
|
54
|
+
const local = await (readers.readLocal ?? readLocalConfig)(projectRoot);
|
|
55
|
+
return local?.model ? { ...global, model: local.model } : global;
|
|
56
|
+
}
|
|
57
|
+
function normalizeConfig(value) {
|
|
58
|
+
if (typeof value !== "object"
|
|
59
|
+
|| value === null
|
|
60
|
+
|| Array.isArray(value)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const record = value;
|
|
64
|
+
const provider = record.provider === undefined
|
|
65
|
+
? "groq"
|
|
66
|
+
: record.provider;
|
|
67
|
+
const model = record.model === undefined
|
|
68
|
+
? "auto"
|
|
69
|
+
: record.model;
|
|
70
|
+
if (provider !== "groq" && provider !== "openrouter") {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
if (typeof model !== "string") {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const config = {
|
|
77
|
+
provider,
|
|
78
|
+
model
|
|
79
|
+
};
|
|
80
|
+
if (record.apiKey !== undefined) {
|
|
81
|
+
if (typeof record.apiKey !== "string") {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
config.apiKey = record.apiKey;
|
|
85
|
+
}
|
|
86
|
+
return config;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devmapFile.d.ts","sourceRoot":"","sources":["../../src/utils/devmapFile.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED,wBAAgB,eAAe,WA6B9B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { access, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export async function ensureDevmapFile(projectRoot) {
|
|
4
|
+
const path = join(projectRoot, "DEVMAP.md");
|
|
5
|
+
try {
|
|
6
|
+
await access(path);
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
await writeFile(path, buildDevmapFile(), "utf8");
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function buildDevmapFile() {
|
|
15
|
+
return `# DevMap
|
|
16
|
+
|
|
17
|
+
This repository uses DevMap to create reusable project context for developers and AI agents.
|
|
18
|
+
|
|
19
|
+
## Project Context
|
|
20
|
+
|
|
21
|
+
- Agent navigation index: \`.devmap/index.json\`
|
|
22
|
+
- Feature maps: \`.devmap/features/*.json\`
|
|
23
|
+
- Full analysis archive: \`.devmap/snapshot.json\`
|
|
24
|
+
- DevMap config: \`~/.devmap/config.json\`
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
\`\`\`bash
|
|
29
|
+
devmap analyze
|
|
30
|
+
devmap analyze --fresh
|
|
31
|
+
devmap analyze --json
|
|
32
|
+
devmap doctor
|
|
33
|
+
devmap doctor --json
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
## Navigation Order
|
|
37
|
+
|
|
38
|
+
1. \`.devmap/index.json\` — entry point, pick relevant feature
|
|
39
|
+
2. \`.devmap/features/*.json\` — focused feature map
|
|
40
|
+
3. \`.devmap/snapshot.json\` — full archive, only when above is insufficient
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=devmapFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devmapFile.js","sourceRoot":"","sources":["../../src/utils/devmapFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,CAAC,IAAI,EAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAE7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class DevmapError extends Error {
|
|
2
|
+
readonly hint?: string | undefined;
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
constructor(message: string, hint?: string | undefined, exitCode?: number);
|
|
5
|
+
}
|
|
6
|
+
export declare function handleError(error: unknown, json?: boolean): number;
|
|
7
|
+
export declare function runSafely(action: () => Promise<void>): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,IAAI,CAAC,EAAE,MAAM;aACb,QAAQ;gBAFxB,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,SAAI;CAK/B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,UAAQ,GAAG,MAAM,CA0ChE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { output } from "./output.js";
|
|
2
|
+
export class DevmapError extends Error {
|
|
3
|
+
hint;
|
|
4
|
+
exitCode;
|
|
5
|
+
constructor(message, hint, exitCode = 1) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.hint = hint;
|
|
8
|
+
this.exitCode = exitCode;
|
|
9
|
+
this.name = "DevmapError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function handleError(error, json = false) {
|
|
13
|
+
if (json) {
|
|
14
|
+
const normalized = normalizeError(error);
|
|
15
|
+
output.json({
|
|
16
|
+
status: "error",
|
|
17
|
+
error: normalized.message,
|
|
18
|
+
hint: normalized.hint ?? null
|
|
19
|
+
});
|
|
20
|
+
return normalized.exitCode;
|
|
21
|
+
}
|
|
22
|
+
if (error instanceof DevmapError) {
|
|
23
|
+
output.error(error.message);
|
|
24
|
+
if (error.hint) {
|
|
25
|
+
output.note(`Tip: ${error.hint}`);
|
|
26
|
+
}
|
|
27
|
+
return error.exitCode;
|
|
28
|
+
}
|
|
29
|
+
if (isNodeError(error)) {
|
|
30
|
+
if (error.code === "ENOENT") {
|
|
31
|
+
output.error("The requested project path could not be found.");
|
|
32
|
+
output.note("Tip: Check the path and run the command again.");
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
if (error.code === "EACCES" || error.code === "EPERM") {
|
|
36
|
+
output.error("DevMap does not have permission to access a required file.");
|
|
37
|
+
output.note("Tip: Check folder permissions or run DevMap from a writable project directory.");
|
|
38
|
+
return 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (error instanceof Error) {
|
|
42
|
+
output.error("DevMap could not complete the command.");
|
|
43
|
+
output.note(`Reason: ${error.message}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
output.error("DevMap could not complete the command due to an unknown error.");
|
|
47
|
+
}
|
|
48
|
+
output.note("Tip: Run devmap doctor and include its output when reporting this issue.");
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
export async function runSafely(action) {
|
|
52
|
+
try {
|
|
53
|
+
await action();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
process.exitCode = handleError(error, process.argv.includes("--json"));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function normalizeError(error) {
|
|
60
|
+
if (error instanceof DevmapError) {
|
|
61
|
+
return {
|
|
62
|
+
message: error.message,
|
|
63
|
+
hint: error.hint,
|
|
64
|
+
exitCode: error.exitCode
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
68
|
+
return {
|
|
69
|
+
message: "The requested project path could not be found.",
|
|
70
|
+
hint: "Check the path and run the command again.",
|
|
71
|
+
exitCode: 1
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (isNodeError(error) && (error.code === "EACCES" || error.code === "EPERM")) {
|
|
75
|
+
return {
|
|
76
|
+
message: "DevMap does not have permission to access a required file.",
|
|
77
|
+
hint: "Check folder permissions or run DevMap from a writable project directory.",
|
|
78
|
+
exitCode: 1
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
message: error instanceof Error
|
|
83
|
+
? error.message
|
|
84
|
+
: "DevMap could not complete the command due to an unknown error.",
|
|
85
|
+
hint: "Run devmap doctor --json and include its output when reporting this issue.",
|
|
86
|
+
exitCode: 1
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function isNodeError(error) {
|
|
90
|
+
return error instanceof Error && "code" in error;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/utils/gitignore.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB/E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export async function ensureDevmapIgnored(projectRoot) {
|
|
4
|
+
const gitignorePath = join(projectRoot, ".gitignore");
|
|
5
|
+
let current = "";
|
|
6
|
+
try {
|
|
7
|
+
current = await readFile(gitignorePath, "utf8");
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
current = "";
|
|
11
|
+
}
|
|
12
|
+
const lines = current.split(/\r?\n/).map((line) => line.trim());
|
|
13
|
+
if (lines.includes(".devmap/") || lines.includes(".devmap")) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const next = current.length > 0 && !current.endsWith("\n")
|
|
17
|
+
? `${current}\n.devmap/\n`
|
|
18
|
+
: `${current}.devmap/\n`;
|
|
19
|
+
await writeFile(gitignorePath, next, "utf8");
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/utils/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEtD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,GAAG,OAAO,cAAc;QAC1B,CAAC,CAAC,GAAG,OAAO,YAAY,CAAC;IAE3B,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkBhD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { theme } from "./output.js";
|
|
2
|
+
export function printHelp(program) {
|
|
3
|
+
console.log(`\n${theme.aqua}devmap${theme.reset} - Understand any codebase.\n`);
|
|
4
|
+
console.log(`${theme.aqua}USAGE${theme.reset}`);
|
|
5
|
+
console.log(` devmap <command> [options]\n`);
|
|
6
|
+
console.log(`${theme.aqua}COMMANDS${theme.reset}`);
|
|
7
|
+
for (const cmd of program.commands) {
|
|
8
|
+
const args = cmd.registeredArguments
|
|
9
|
+
.map((argument) => (argument.required ? `<${argument.name()}>` : `[${argument.name()}]`))
|
|
10
|
+
.join(" ");
|
|
11
|
+
const usage = args ? `${cmd.name()} ${args}` : cmd.name();
|
|
12
|
+
console.log(` ${theme.aqua}${usage.padEnd(16)}${theme.reset} ${theme.gray}${cmd.description()}${theme.reset}`);
|
|
13
|
+
}
|
|
14
|
+
console.log(`\n${theme.aqua}OPTIONS${theme.reset}`);
|
|
15
|
+
console.log(` ${theme.aqua}-V, --version${theme.reset} ${theme.gray}Show version number${theme.reset}`);
|
|
16
|
+
console.log(` ${theme.aqua}-h, --help${theme.reset} ${theme.gray}Show help message${theme.reset}`);
|
|
17
|
+
console.log(`\n${theme.gray}More info: ${theme.aqua}https://github.com/itsflaid/devmap${theme.reset}\n`);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,+BAA+B,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB;aACjC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACxF,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,sBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,oBAAoB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,qCAAqC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3G,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { MapTreeNode } from "../analyzers/graph/dependencyMap.js";
|
|
2
|
+
/**
|
|
3
|
+
* renderTree — render a MapTreeNode as an indented, box-drawing tree
|
|
4
|
+
* (same visual convention as the Unix `tree` command). Cycle-closing nodes
|
|
5
|
+
* are suffixed with "(cycle)" instead of being expanded further.
|
|
6
|
+
*/
|
|
7
|
+
export declare function renderTree(node: MapTreeNode, prefix?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* renderFlatList — simple bullet list for cases (feature/project mode) where
|
|
10
|
+
* a flat "these files are involved" view reads better than a nested tree.
|
|
11
|
+
*/
|
|
12
|
+
export declare function renderFlatList(paths: string[], options?: {
|
|
13
|
+
cap?: number;
|
|
14
|
+
}): string;
|
|
15
|
+
export type MermaidEdge = {
|
|
16
|
+
from: string;
|
|
17
|
+
to: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* renderMermaid — render a set of file-to-file edges as a Mermaid
|
|
21
|
+
* flowchart. Mermaid node IDs can't contain slashes/dots, so each real path
|
|
22
|
+
* gets a sanitized ID with the real path kept as the visible label.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderMermaid(edges: MermaidEdge[], options?: {
|
|
25
|
+
direction?: "LR" | "TD";
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* buildMapMarkdown — wrap a text tree + Mermaid diagram into a single .md
|
|
29
|
+
* body, in the same style as the rest of DevMap's generated docs.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildMapMarkdown(options: {
|
|
32
|
+
title: string;
|
|
33
|
+
sections: Array<{
|
|
34
|
+
heading: string;
|
|
35
|
+
body: string;
|
|
36
|
+
}>;
|
|
37
|
+
mermaid?: string;
|
|
38
|
+
}): string;
|
|
39
|
+
//# sourceMappingURL=mapRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapRenderer.d.ts","sourceRoot":"","sources":["../../src/utils/mapRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,SAAK,GAAG,MAAM,CAIjE;AA2BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAUtF;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAO,GACxC,MAAM,CAyBR;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAYT"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* renderTree — render a MapTreeNode as an indented, box-drawing tree
|
|
3
|
+
* (same visual convention as the Unix `tree` command). Cycle-closing nodes
|
|
4
|
+
* are suffixed with "(cycle)" instead of being expanded further.
|
|
5
|
+
*/
|
|
6
|
+
export function renderTree(node, prefix = "") {
|
|
7
|
+
const lines = [];
|
|
8
|
+
renderTreeLines(node, prefix, lines);
|
|
9
|
+
return lines.length > 0 ? lines.join("\n") : "(no connections found)";
|
|
10
|
+
}
|
|
11
|
+
function renderTreeLines(node, prefix, lines) {
|
|
12
|
+
const { children, truncatedCount } = node;
|
|
13
|
+
const hasMore = Boolean(truncatedCount);
|
|
14
|
+
children.forEach((child, index) => {
|
|
15
|
+
const isLast = index === children.length - 1 && !hasMore;
|
|
16
|
+
const branch = isLast ? "└── " : "├── ";
|
|
17
|
+
const nextPrefix = prefix + (isLast ? " " : "│ ");
|
|
18
|
+
const suffix = child.isCycle ? " (cycle)" : "";
|
|
19
|
+
lines.push(`${prefix}${branch}${child.path}${suffix}`);
|
|
20
|
+
if (!child.isCycle) {
|
|
21
|
+
renderTreeLines(child, nextPrefix, lines);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
if (hasMore) {
|
|
25
|
+
lines.push(`${prefix}└── … +${truncatedCount} more (truncated for readability — pass --all to see everything)`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* renderFlatList — simple bullet list for cases (feature/project mode) where
|
|
30
|
+
* a flat "these files are involved" view reads better than a nested tree.
|
|
31
|
+
*/
|
|
32
|
+
export function renderFlatList(paths, options = {}) {
|
|
33
|
+
if (paths.length === 0)
|
|
34
|
+
return "(none)";
|
|
35
|
+
const cap = options.cap ?? Infinity;
|
|
36
|
+
const shown = paths.slice(0, cap);
|
|
37
|
+
const lines = shown.map((path) => ` - ${path}`);
|
|
38
|
+
const omitted = paths.length - shown.length;
|
|
39
|
+
if (omitted > 0) {
|
|
40
|
+
lines.push(` - … +${omitted} more (truncated for readability — pass --all to see everything)`);
|
|
41
|
+
}
|
|
42
|
+
return lines.join("\n");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* renderMermaid — render a set of file-to-file edges as a Mermaid
|
|
46
|
+
* flowchart. Mermaid node IDs can't contain slashes/dots, so each real path
|
|
47
|
+
* gets a sanitized ID with the real path kept as the visible label.
|
|
48
|
+
*/
|
|
49
|
+
export function renderMermaid(edges, options = {}) {
|
|
50
|
+
const direction = options.direction ?? "LR";
|
|
51
|
+
const ids = new Map();
|
|
52
|
+
const idFor = (path) => {
|
|
53
|
+
const existing = ids.get(path);
|
|
54
|
+
if (existing)
|
|
55
|
+
return existing;
|
|
56
|
+
const id = `n${ids.size}`;
|
|
57
|
+
ids.set(path, id);
|
|
58
|
+
return id;
|
|
59
|
+
};
|
|
60
|
+
const lines = [`graph ${direction}`];
|
|
61
|
+
const seenEdges = new Set();
|
|
62
|
+
for (const edge of edges) {
|
|
63
|
+
const key = `${edge.from}=>${edge.to}`;
|
|
64
|
+
if (seenEdges.has(key))
|
|
65
|
+
continue;
|
|
66
|
+
seenEdges.add(key);
|
|
67
|
+
const fromId = idFor(edge.from);
|
|
68
|
+
const toId = idFor(edge.to);
|
|
69
|
+
lines.push(` ${fromId}["${escapeMermaidLabel(edge.from)}"] --> ${toId}["${escapeMermaidLabel(edge.to)}"]`);
|
|
70
|
+
}
|
|
71
|
+
return lines.join("\n");
|
|
72
|
+
}
|
|
73
|
+
function escapeMermaidLabel(label) {
|
|
74
|
+
return label.replace(/"/g, "#quot;");
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* buildMapMarkdown — wrap a text tree + Mermaid diagram into a single .md
|
|
78
|
+
* body, in the same style as the rest of DevMap's generated docs.
|
|
79
|
+
*/
|
|
80
|
+
export function buildMapMarkdown(options) {
|
|
81
|
+
const parts = [`# ${options.title}`, ""];
|
|
82
|
+
for (const section of options.sections) {
|
|
83
|
+
parts.push(`## ${section.heading}`, "", section.body, "");
|
|
84
|
+
}
|
|
85
|
+
if (options.mermaid) {
|
|
86
|
+
parts.push("## Diagram", "", "```mermaid", options.mermaid, "```", "");
|
|
87
|
+
}
|
|
88
|
+
return parts.join("\n").trimEnd() + "\n";
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=mapRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapRenderer.js","sourceRoot":"","sources":["../../src/utils/mapRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownTerminal.d.ts","sourceRoot":"","sources":["../../src/utils/markdownTerminal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AASF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAiER"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const ANSI = {
|
|
2
|
+
aqua: "\x1b[38;2;46;230;214m",
|
|
3
|
+
bold: "\x1b[1m",
|
|
4
|
+
gray: "\x1b[90m",
|
|
5
|
+
reset: "\x1b[0m"
|
|
6
|
+
};
|
|
7
|
+
export function renderTerminalMarkdown(markdown, options = {}) {
|
|
8
|
+
const width = Math.max(32, options.width ?? 80);
|
|
9
|
+
const colors = options.colors ?? true;
|
|
10
|
+
const lines = markdown.replace(/\r\n?/g, "\n").split("\n");
|
|
11
|
+
const rendered = [];
|
|
12
|
+
let index = 0;
|
|
13
|
+
let inCodeBlock = false;
|
|
14
|
+
while (index < lines.length) {
|
|
15
|
+
const line = lines[index];
|
|
16
|
+
if (/^\s*```/.test(line)) {
|
|
17
|
+
inCodeBlock = !inCodeBlock;
|
|
18
|
+
index += 1;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (inCodeBlock) {
|
|
22
|
+
rendered.push(style(` ${line}`, "gray", colors));
|
|
23
|
+
index += 1;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (isTableStart(lines, index)) {
|
|
27
|
+
const tableEnd = findTableEnd(lines, index);
|
|
28
|
+
rendered.push(...renderTable(lines.slice(index, tableEnd), width, colors));
|
|
29
|
+
index = tableEnd;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const heading = line.match(/^\s{0,3}#{1,6}\s+(.+?)\s*#*\s*$/);
|
|
33
|
+
if (heading) {
|
|
34
|
+
const title = cleanInline(heading[1]);
|
|
35
|
+
rendered.push(style(title, "heading", colors));
|
|
36
|
+
rendered.push(style("-".repeat(Math.min(width, Math.max(12, title.length))), "gray", colors));
|
|
37
|
+
index += 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const listItem = line.match(/^(\s*)([-+*]|\d+\.)\s+(.+)$/);
|
|
41
|
+
if (listItem) {
|
|
42
|
+
const marker = /^\d/.test(listItem[2]) ? listItem[2] : "-";
|
|
43
|
+
const indent = listItem[1].length + (marker === "-" ? 0 : 0);
|
|
44
|
+
rendered.push(...wrapWithPrefix(cleanInline(listItem[3]), `${" ".repeat(indent)}${marker} `, width));
|
|
45
|
+
index += 1;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (line.trim() === "") {
|
|
49
|
+
if (rendered.at(-1) !== "") {
|
|
50
|
+
rendered.push("");
|
|
51
|
+
}
|
|
52
|
+
index += 1;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
rendered.push(...wrapText(cleanInline(line.trim()), width));
|
|
56
|
+
index += 1;
|
|
57
|
+
}
|
|
58
|
+
return trimBlankLines(rendered).join("\n");
|
|
59
|
+
}
|
|
60
|
+
function isTableStart(lines, index) {
|
|
61
|
+
return (index + 1 < lines.length
|
|
62
|
+
&& lines[index].includes("|")
|
|
63
|
+
&& /^\s*\|?\s*:?-{3,}/.test(lines[index + 1]));
|
|
64
|
+
}
|
|
65
|
+
function findTableEnd(lines, start) {
|
|
66
|
+
let index = start + 2;
|
|
67
|
+
while (index < lines.length && lines[index].includes("|") && lines[index].trim() !== "") {
|
|
68
|
+
index += 1;
|
|
69
|
+
}
|
|
70
|
+
return index;
|
|
71
|
+
}
|
|
72
|
+
function renderTable(tableLines, width, colors) {
|
|
73
|
+
const headers = parseTableRow(tableLines[0]).map(cleanInline);
|
|
74
|
+
const rows = tableLines.slice(2).map((line) => parseTableRow(line).map(cleanInline));
|
|
75
|
+
const labelWidth = Math.min(18, Math.max(8, ...headers.slice(1).map((header) => header.length)));
|
|
76
|
+
const rendered = [];
|
|
77
|
+
for (const row of rows) {
|
|
78
|
+
const title = row[0] || "Item";
|
|
79
|
+
rendered.push(style(title, "heading", colors));
|
|
80
|
+
for (let index = 1; index < headers.length; index += 1) {
|
|
81
|
+
const label = headers[index] || `Column ${index + 1}`;
|
|
82
|
+
const value = row[index] || "-";
|
|
83
|
+
rendered.push(...wrapWithPrefix(value, ` ${label.padEnd(labelWidth)} `, width));
|
|
84
|
+
}
|
|
85
|
+
rendered.push("");
|
|
86
|
+
}
|
|
87
|
+
return trimBlankLines(rendered);
|
|
88
|
+
}
|
|
89
|
+
function parseTableRow(line) {
|
|
90
|
+
return line
|
|
91
|
+
.trim()
|
|
92
|
+
.replace(/^\|/, "")
|
|
93
|
+
.replace(/\|$/, "")
|
|
94
|
+
.split("|")
|
|
95
|
+
.map((cell) => cell.trim());
|
|
96
|
+
}
|
|
97
|
+
function cleanInline(value) {
|
|
98
|
+
return value
|
|
99
|
+
.replace(/!\[([^\]]*)]\([^)]*\)/g, "$1")
|
|
100
|
+
.replace(/\[([^\]]+)]\(([^)]+)\)/g, "$1 ($2)")
|
|
101
|
+
.replace(/(\*\*|__)(.*?)\1/g, "$2")
|
|
102
|
+
.replace(/\*([^*]+)\*/g, "$1")
|
|
103
|
+
.replace(/~~(.*?)~~/g, "$1")
|
|
104
|
+
.replace(/`([^`]+)`/g, "$1")
|
|
105
|
+
.replace(/\\([\\`*_[\]{}()#+\-.!|>])/g, "$1");
|
|
106
|
+
}
|
|
107
|
+
function wrapText(value, width) {
|
|
108
|
+
return wrapWithPrefix(value, "", width);
|
|
109
|
+
}
|
|
110
|
+
function wrapWithPrefix(value, prefix, width) {
|
|
111
|
+
const continuation = " ".repeat(prefix.length);
|
|
112
|
+
const available = Math.max(12, width - prefix.length);
|
|
113
|
+
const words = value.split(/\s+/).filter(Boolean);
|
|
114
|
+
const lines = [];
|
|
115
|
+
let current = "";
|
|
116
|
+
for (const word of words) {
|
|
117
|
+
if (!current) {
|
|
118
|
+
current = word;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (`${current} ${word}`.length <= available) {
|
|
122
|
+
current = `${current} ${word}`;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
lines.push(`${lines.length === 0 ? prefix : continuation}${current}`);
|
|
126
|
+
current = word;
|
|
127
|
+
}
|
|
128
|
+
if (current || lines.length === 0) {
|
|
129
|
+
lines.push(`${lines.length === 0 ? prefix : continuation}${current}`);
|
|
130
|
+
}
|
|
131
|
+
return lines;
|
|
132
|
+
}
|
|
133
|
+
function style(value, tone, colors) {
|
|
134
|
+
if (!colors) {
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
if (tone === "heading") {
|
|
138
|
+
return `${ANSI.bold}${ANSI.aqua}${value}${ANSI.reset}`;
|
|
139
|
+
}
|
|
140
|
+
return `${ANSI.gray}${value}${ANSI.reset}`;
|
|
141
|
+
}
|
|
142
|
+
function trimBlankLines(lines) {
|
|
143
|
+
let start = 0;
|
|
144
|
+
let end = lines.length;
|
|
145
|
+
while (start < end && lines[start] === "") {
|
|
146
|
+
start += 1;
|
|
147
|
+
}
|
|
148
|
+
while (end > start && lines[end - 1] === "") {
|
|
149
|
+
end -= 1;
|
|
150
|
+
}
|
|
151
|
+
return lines.slice(start, end);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=markdownTerminal.js.map
|