codingbuddy 0.0.0-canary.20251218090747.c1e8699 → 0.0.0-canary.20251219012535.c6f28a6

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 (42) hide show
  1. package/dist/src/analyzer/analyzer.module.d.ts +2 -0
  2. package/dist/src/analyzer/analyzer.module.js +21 -0
  3. package/dist/src/analyzer/analyzer.module.js.map +1 -0
  4. package/dist/src/analyzer/analyzer.service.d.ts +10 -0
  5. package/dist/src/analyzer/analyzer.service.js +73 -0
  6. package/dist/src/analyzer/analyzer.service.js.map +1 -0
  7. package/dist/src/analyzer/analyzer.service.spec.d.ts +1 -0
  8. package/dist/src/analyzer/analyzer.service.spec.js +67 -0
  9. package/dist/src/analyzer/analyzer.service.spec.js.map +1 -0
  10. package/dist/src/analyzer/analyzer.types.d.ts +70 -0
  11. package/dist/src/analyzer/analyzer.types.js +3 -0
  12. package/dist/src/analyzer/analyzer.types.js.map +1 -0
  13. package/dist/src/analyzer/code.sampler.d.ts +7 -0
  14. package/dist/src/analyzer/code.sampler.js +202 -0
  15. package/dist/src/analyzer/code.sampler.js.map +1 -0
  16. package/dist/src/analyzer/code.sampler.spec.d.ts +1 -0
  17. package/dist/src/analyzer/code.sampler.spec.js +157 -0
  18. package/dist/src/analyzer/code.sampler.spec.js.map +1 -0
  19. package/dist/src/analyzer/config.analyzer.d.ts +7 -0
  20. package/dist/src/analyzer/config.analyzer.js +178 -0
  21. package/dist/src/analyzer/config.analyzer.js.map +1 -0
  22. package/dist/src/analyzer/config.analyzer.spec.d.ts +1 -0
  23. package/dist/src/analyzer/config.analyzer.spec.js +146 -0
  24. package/dist/src/analyzer/config.analyzer.spec.js.map +1 -0
  25. package/dist/src/analyzer/directory.analyzer.d.ts +12 -0
  26. package/dist/src/analyzer/directory.analyzer.js +149 -0
  27. package/dist/src/analyzer/directory.analyzer.js.map +1 -0
  28. package/dist/src/analyzer/directory.analyzer.spec.d.ts +1 -0
  29. package/dist/src/analyzer/directory.analyzer.spec.js +119 -0
  30. package/dist/src/analyzer/directory.analyzer.spec.js.map +1 -0
  31. package/dist/src/analyzer/index.d.ts +7 -0
  32. package/dist/src/analyzer/index.js +32 -0
  33. package/dist/src/analyzer/index.js.map +1 -0
  34. package/dist/src/analyzer/package.analyzer.d.ts +12 -0
  35. package/dist/src/analyzer/package.analyzer.js +118 -0
  36. package/dist/src/analyzer/package.analyzer.js.map +1 -0
  37. package/dist/src/analyzer/package.analyzer.spec.d.ts +1 -0
  38. package/dist/src/analyzer/package.analyzer.spec.js +109 -0
  39. package/dist/src/analyzer/package.analyzer.spec.js.map +1 -0
  40. package/dist/src/config/config.schema.d.ts +24 -24
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ARCHITECTURE_PATTERNS = void 0;
4
+ exports.categorizeDirectory = categorizeDirectory;
5
+ exports.detectArchitecturePatterns = detectArchitecturePatterns;
6
+ exports.analyzeDirectory = analyzeDirectory;
7
+ const fs = require("fs/promises");
8
+ const fs_1 = require("fs");
9
+ const path = require("path");
10
+ const ignore_parser_1 = require("../config/ignore.parser");
11
+ exports.ARCHITECTURE_PATTERNS = [
12
+ {
13
+ name: 'Next.js App Router',
14
+ indicators: ['app', 'components', 'lib', 'public'],
15
+ minIndicators: 2,
16
+ },
17
+ {
18
+ name: 'Next.js Pages Router',
19
+ indicators: ['pages', 'components', 'styles', 'public'],
20
+ minIndicators: 2,
21
+ },
22
+ {
23
+ name: 'NestJS Modular',
24
+ indicators: ['src/modules', 'src/common', 'src/config', 'src/shared'],
25
+ minIndicators: 2,
26
+ },
27
+ {
28
+ name: 'Feature-Sliced Design',
29
+ indicators: ['src/features', 'src/entities', 'src/shared', 'src/widgets', 'src/app'],
30
+ minIndicators: 3,
31
+ },
32
+ {
33
+ name: 'Component-Based',
34
+ indicators: ['src/components', 'src/hooks', 'src/utils', 'src/services'],
35
+ minIndicators: 2,
36
+ },
37
+ {
38
+ name: 'Monorepo',
39
+ indicators: ['packages', 'apps', 'libs'],
40
+ minIndicators: 1,
41
+ },
42
+ {
43
+ name: 'MVC',
44
+ indicators: ['src/models', 'src/views', 'src/controllers'],
45
+ minIndicators: 2,
46
+ },
47
+ {
48
+ name: 'Clean Architecture',
49
+ indicators: ['src/domain', 'src/application', 'src/infrastructure', 'src/presentation'],
50
+ minIndicators: 3,
51
+ },
52
+ ];
53
+ function categorizeDirectory(dirName) {
54
+ const lower = dirName.toLowerCase();
55
+ if (['src', 'lib', 'source', 'app'].includes(lower)) {
56
+ return 'source';
57
+ }
58
+ if (['test', 'tests', '__tests__', 'spec', 'specs', '__mocks__'].includes(lower)) {
59
+ return 'test';
60
+ }
61
+ if (lower === 'config' || lower.startsWith('.config')) {
62
+ return 'config';
63
+ }
64
+ if (['dist', 'build', 'out', '.next', '.nuxt', 'coverage', '.output'].includes(lower)) {
65
+ return 'build';
66
+ }
67
+ if (lower === 'node_modules' || lower === 'vendor') {
68
+ return 'dependencies';
69
+ }
70
+ if (['public', 'static', 'assets', 'images', 'media'].includes(lower)) {
71
+ return 'static';
72
+ }
73
+ return 'other';
74
+ }
75
+ function detectArchitecturePatterns(directories) {
76
+ const detected = [];
77
+ const normalizedDirs = new Set(directories.map((d) => d.toLowerCase()));
78
+ for (const pattern of exports.ARCHITECTURE_PATTERNS) {
79
+ const matchingIndicators = pattern.indicators.filter((indicator) => normalizedDirs.has(indicator.toLowerCase()));
80
+ if (matchingIndicators.length >= pattern.minIndicators) {
81
+ const confidence = matchingIndicators.length / pattern.indicators.length;
82
+ detected.push({
83
+ name: pattern.name,
84
+ confidence,
85
+ indicators: matchingIndicators,
86
+ });
87
+ }
88
+ }
89
+ return detected.sort((a, b) => b.confidence - a.confidence);
90
+ }
91
+ async function scanDirectory(rootPath, ignorePatterns, relativePath = '') {
92
+ const files = [];
93
+ const dirs = [];
94
+ const currentPath = relativePath ? path.join(rootPath, relativePath) : rootPath;
95
+ if (!(0, fs_1.existsSync)(currentPath)) {
96
+ return { files, dirs };
97
+ }
98
+ try {
99
+ const entries = await fs.readdir(currentPath, { withFileTypes: true });
100
+ for (const entry of entries) {
101
+ const entryRelativePath = relativePath
102
+ ? `${relativePath}/${entry.name}`
103
+ : entry.name;
104
+ if ((0, ignore_parser_1.shouldIgnore)(entryRelativePath, ignorePatterns)) {
105
+ continue;
106
+ }
107
+ if (entry.isDirectory()) {
108
+ dirs.push(entryRelativePath);
109
+ const subResult = await scanDirectory(rootPath, ignorePatterns, entryRelativePath);
110
+ files.push(...subResult.files);
111
+ dirs.push(...subResult.dirs);
112
+ }
113
+ else if (entry.isFile()) {
114
+ files.push(entryRelativePath);
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ }
120
+ return { files, dirs };
121
+ }
122
+ async function analyzeDirectory(projectRoot, customIgnorePatterns = []) {
123
+ const ignorePatterns = [...(0, ignore_parser_1.getDefaultIgnorePatterns)(), ...customIgnorePatterns];
124
+ const { files, dirs } = await scanDirectory(projectRoot, ignorePatterns);
125
+ if (files.length === 0 && dirs.length === 0) {
126
+ if (!(0, fs_1.existsSync)(projectRoot)) {
127
+ return {
128
+ rootDirs: [],
129
+ rootFiles: [],
130
+ allFiles: [],
131
+ patterns: [],
132
+ totalFiles: 0,
133
+ totalDirs: 0,
134
+ };
135
+ }
136
+ }
137
+ const rootFiles = files.filter((f) => !f.includes('/'));
138
+ const rootDirs = dirs.filter((d) => !d.includes('/'));
139
+ const patterns = detectArchitecturePatterns(dirs);
140
+ return {
141
+ rootDirs,
142
+ rootFiles,
143
+ allFiles: files,
144
+ patterns,
145
+ totalFiles: files.length,
146
+ totalDirs: dirs.length,
147
+ };
148
+ }
149
+ //# sourceMappingURL=directory.analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/directory.analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const directory_analyzer_1 = require("./directory.analyzer");
5
+ (0, vitest_1.describe)('directory.analyzer', () => {
6
+ (0, vitest_1.describe)('ARCHITECTURE_PATTERNS', () => {
7
+ (0, vitest_1.it)('should have definitions for common patterns', () => {
8
+ const names = directory_analyzer_1.ARCHITECTURE_PATTERNS.map((p) => p.name);
9
+ (0, vitest_1.expect)(names).toContain('Next.js App Router');
10
+ (0, vitest_1.expect)(names).toContain('Next.js Pages Router');
11
+ (0, vitest_1.expect)(names).toContain('NestJS Modular');
12
+ (0, vitest_1.expect)(names).toContain('Feature-Sliced Design');
13
+ (0, vitest_1.expect)(names).toContain('Component-Based');
14
+ });
15
+ });
16
+ (0, vitest_1.describe)('detectArchitecturePatterns', () => {
17
+ (0, vitest_1.it)('should detect Next.js App Router pattern', () => {
18
+ const dirs = ['app', 'components', 'lib', 'public'];
19
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
20
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
21
+ name: 'Next.js App Router',
22
+ confidence: vitest_1.expect.any(Number),
23
+ }));
24
+ });
25
+ (0, vitest_1.it)('should detect Next.js Pages Router pattern', () => {
26
+ const dirs = ['pages', 'components', 'styles', 'public'];
27
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
28
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
29
+ name: 'Next.js Pages Router',
30
+ confidence: vitest_1.expect.any(Number),
31
+ }));
32
+ });
33
+ (0, vitest_1.it)('should detect NestJS Modular pattern', () => {
34
+ const dirs = ['src/modules', 'src/common', 'src/config'];
35
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
36
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
37
+ name: 'NestJS Modular',
38
+ }));
39
+ });
40
+ (0, vitest_1.it)('should detect Feature-Sliced Design', () => {
41
+ const dirs = ['src/features', 'src/entities', 'src/shared', 'src/widgets'];
42
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
43
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
44
+ name: 'Feature-Sliced Design',
45
+ }));
46
+ });
47
+ (0, vitest_1.it)('should detect Component-Based architecture', () => {
48
+ const dirs = ['src/components', 'src/hooks', 'src/utils'];
49
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
50
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
51
+ name: 'Component-Based',
52
+ }));
53
+ });
54
+ (0, vitest_1.it)('should detect Monorepo pattern', () => {
55
+ const dirs = ['packages', 'apps'];
56
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
57
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({
58
+ name: 'Monorepo',
59
+ }));
60
+ });
61
+ (0, vitest_1.it)('should return empty array for unrecognized structure', () => {
62
+ const dirs = ['random', 'unknown', 'folders'];
63
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
64
+ (0, vitest_1.expect)(result).toEqual([]);
65
+ });
66
+ (0, vitest_1.it)('should calculate confidence based on matching indicators', () => {
67
+ const fullMatch = (0, directory_analyzer_1.detectArchitecturePatterns)(['app', 'components', 'lib', 'public']);
68
+ const appRouterPattern = fullMatch.find((p) => p.name === 'Next.js App Router');
69
+ (0, vitest_1.expect)(appRouterPattern?.confidence).toBe(1);
70
+ (0, vitest_1.expect)(appRouterPattern?.indicators).toHaveLength(4);
71
+ const partialMatch = (0, directory_analyzer_1.detectArchitecturePatterns)(['app', 'components']);
72
+ const partialPattern = partialMatch.find((p) => p.name === 'Next.js App Router');
73
+ (0, vitest_1.expect)(partialPattern?.confidence).toBe(0.5);
74
+ (0, vitest_1.expect)(partialPattern?.indicators).toHaveLength(2);
75
+ });
76
+ (0, vitest_1.it)('should sort patterns by confidence descending', () => {
77
+ const dirs = ['app', 'src/components', 'src/hooks'];
78
+ const result = (0, directory_analyzer_1.detectArchitecturePatterns)(dirs);
79
+ for (let i = 1; i < result.length; i++) {
80
+ (0, vitest_1.expect)(result[i - 1].confidence).toBeGreaterThanOrEqual(result[i].confidence);
81
+ }
82
+ });
83
+ });
84
+ (0, vitest_1.describe)('categorizeDirectory', () => {
85
+ (0, vitest_1.it)('should categorize source directories', () => {
86
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('src')).toBe('source');
87
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('lib')).toBe('source');
88
+ });
89
+ (0, vitest_1.it)('should categorize test directories', () => {
90
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('test')).toBe('test');
91
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('tests')).toBe('test');
92
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('__tests__')).toBe('test');
93
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('spec')).toBe('test');
94
+ });
95
+ (0, vitest_1.it)('should categorize config directories', () => {
96
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('config')).toBe('config');
97
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('.config')).toBe('config');
98
+ });
99
+ (0, vitest_1.it)('should categorize build output directories', () => {
100
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('dist')).toBe('build');
101
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('build')).toBe('build');
102
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('out')).toBe('build');
103
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('.next')).toBe('build');
104
+ });
105
+ (0, vitest_1.it)('should categorize dependency directories', () => {
106
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('node_modules')).toBe('dependencies');
107
+ });
108
+ (0, vitest_1.it)('should categorize public/static directories', () => {
109
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('public')).toBe('static');
110
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('static')).toBe('static');
111
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('assets')).toBe('static');
112
+ });
113
+ (0, vitest_1.it)('should return other for unknown directories', () => {
114
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('random')).toBe('other');
115
+ (0, vitest_1.expect)((0, directory_analyzer_1.categorizeDirectory)('custom')).toBe('other');
116
+ });
117
+ });
118
+ });
119
+ //# sourceMappingURL=directory.analyzer.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory.analyzer.spec.js","sourceRoot":"","sources":["../../../src/analyzer/directory.analyzer.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type { ProjectAnalysis, PackageInfo, DetectedFramework, FrameworkCategory, DirectoryAnalysis, ArchitecturePattern, ConfigFilesSummary, TsConfigSummary, EslintSummary, PrettierSummary, CodeSample, CodeCategory, } from './analyzer.types';
2
+ export { analyzePackage, parsePackageJson, detectFrameworks, FRAMEWORK_DEFINITIONS, } from './package.analyzer';
3
+ export { analyzeDirectory, detectArchitecturePatterns, categorizeDirectory, ARCHITECTURE_PATTERNS, } from './directory.analyzer';
4
+ export { analyzeConfigs, parseTsConfig, parseEslintConfig, parsePrettierConfig, detectConfigFiles, CONFIG_FILE_PATTERNS, } from './config.analyzer';
5
+ export { sampleCode, selectSampleFiles, categorizeFile, detectLanguage, isCodeFile, LANGUAGE_EXTENSIONS, } from './code.sampler';
6
+ export { AnalyzerService, type AnalyzeOptions } from './analyzer.service';
7
+ export { AnalyzerModule } from './analyzer.module';
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnalyzerModule = exports.AnalyzerService = exports.LANGUAGE_EXTENSIONS = exports.isCodeFile = exports.detectLanguage = exports.categorizeFile = exports.selectSampleFiles = exports.sampleCode = exports.CONFIG_FILE_PATTERNS = exports.detectConfigFiles = exports.parsePrettierConfig = exports.parseEslintConfig = exports.parseTsConfig = exports.analyzeConfigs = exports.ARCHITECTURE_PATTERNS = exports.categorizeDirectory = exports.detectArchitecturePatterns = exports.analyzeDirectory = exports.FRAMEWORK_DEFINITIONS = exports.detectFrameworks = exports.parsePackageJson = exports.analyzePackage = void 0;
4
+ var package_analyzer_1 = require("./package.analyzer");
5
+ Object.defineProperty(exports, "analyzePackage", { enumerable: true, get: function () { return package_analyzer_1.analyzePackage; } });
6
+ Object.defineProperty(exports, "parsePackageJson", { enumerable: true, get: function () { return package_analyzer_1.parsePackageJson; } });
7
+ Object.defineProperty(exports, "detectFrameworks", { enumerable: true, get: function () { return package_analyzer_1.detectFrameworks; } });
8
+ Object.defineProperty(exports, "FRAMEWORK_DEFINITIONS", { enumerable: true, get: function () { return package_analyzer_1.FRAMEWORK_DEFINITIONS; } });
9
+ var directory_analyzer_1 = require("./directory.analyzer");
10
+ Object.defineProperty(exports, "analyzeDirectory", { enumerable: true, get: function () { return directory_analyzer_1.analyzeDirectory; } });
11
+ Object.defineProperty(exports, "detectArchitecturePatterns", { enumerable: true, get: function () { return directory_analyzer_1.detectArchitecturePatterns; } });
12
+ Object.defineProperty(exports, "categorizeDirectory", { enumerable: true, get: function () { return directory_analyzer_1.categorizeDirectory; } });
13
+ Object.defineProperty(exports, "ARCHITECTURE_PATTERNS", { enumerable: true, get: function () { return directory_analyzer_1.ARCHITECTURE_PATTERNS; } });
14
+ var config_analyzer_1 = require("./config.analyzer");
15
+ Object.defineProperty(exports, "analyzeConfigs", { enumerable: true, get: function () { return config_analyzer_1.analyzeConfigs; } });
16
+ Object.defineProperty(exports, "parseTsConfig", { enumerable: true, get: function () { return config_analyzer_1.parseTsConfig; } });
17
+ Object.defineProperty(exports, "parseEslintConfig", { enumerable: true, get: function () { return config_analyzer_1.parseEslintConfig; } });
18
+ Object.defineProperty(exports, "parsePrettierConfig", { enumerable: true, get: function () { return config_analyzer_1.parsePrettierConfig; } });
19
+ Object.defineProperty(exports, "detectConfigFiles", { enumerable: true, get: function () { return config_analyzer_1.detectConfigFiles; } });
20
+ Object.defineProperty(exports, "CONFIG_FILE_PATTERNS", { enumerable: true, get: function () { return config_analyzer_1.CONFIG_FILE_PATTERNS; } });
21
+ var code_sampler_1 = require("./code.sampler");
22
+ Object.defineProperty(exports, "sampleCode", { enumerable: true, get: function () { return code_sampler_1.sampleCode; } });
23
+ Object.defineProperty(exports, "selectSampleFiles", { enumerable: true, get: function () { return code_sampler_1.selectSampleFiles; } });
24
+ Object.defineProperty(exports, "categorizeFile", { enumerable: true, get: function () { return code_sampler_1.categorizeFile; } });
25
+ Object.defineProperty(exports, "detectLanguage", { enumerable: true, get: function () { return code_sampler_1.detectLanguage; } });
26
+ Object.defineProperty(exports, "isCodeFile", { enumerable: true, get: function () { return code_sampler_1.isCodeFile; } });
27
+ Object.defineProperty(exports, "LANGUAGE_EXTENSIONS", { enumerable: true, get: function () { return code_sampler_1.LANGUAGE_EXTENSIONS; } });
28
+ var analyzer_service_1 = require("./analyzer.service");
29
+ Object.defineProperty(exports, "AnalyzerService", { enumerable: true, get: function () { return analyzer_service_1.AnalyzerService; } });
30
+ var analyzer_module_1 = require("./analyzer.module");
31
+ Object.defineProperty(exports, "AnalyzerModule", { enumerable: true, get: function () { return analyzer_module_1.AnalyzerModule; } });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzer/index.ts"],"names":[],"mappings":";;;AAiBA,uDAK4B;AAJ1B,kHAAA,cAAc,OAAA;AACd,oHAAA,gBAAgB,OAAA;AAChB,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AAGvB,2DAK8B;AAJ5B,sHAAA,gBAAgB,OAAA;AAChB,gIAAA,0BAA0B,OAAA;AAC1B,yHAAA,mBAAmB,OAAA;AACnB,2HAAA,qBAAqB,OAAA;AAGvB,qDAO2B;AANzB,iHAAA,cAAc,OAAA;AACd,gHAAA,aAAa,OAAA;AACb,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,oHAAA,iBAAiB,OAAA;AACjB,uHAAA,oBAAoB,OAAA;AAGtB,+CAOwB;AANtB,0GAAA,UAAU,OAAA;AACV,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,8GAAA,cAAc,OAAA;AACd,0GAAA,UAAU,OAAA;AACV,mHAAA,mBAAmB,OAAA;AAIrB,uDAA0E;AAAjE,mHAAA,eAAe,OAAA;AACxB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA"}
@@ -0,0 +1,12 @@
1
+ import type { PackageInfo, DetectedFramework, FrameworkCategory } from './analyzer.types';
2
+ interface FrameworkDefinition {
3
+ name: string;
4
+ packageName: string;
5
+ category: FrameworkCategory;
6
+ devOnly?: boolean;
7
+ }
8
+ export declare const FRAMEWORK_DEFINITIONS: FrameworkDefinition[];
9
+ export declare function parsePackageJson(content: string): Omit<PackageInfo, 'detectedFrameworks'>;
10
+ export declare function detectFrameworks(dependencies: Record<string, string>, devDependencies: Record<string, string>): DetectedFramework[];
11
+ export declare function analyzePackage(projectRoot: string): Promise<PackageInfo | null>;
12
+ export {};
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FRAMEWORK_DEFINITIONS = void 0;
4
+ exports.parsePackageJson = parsePackageJson;
5
+ exports.detectFrameworks = detectFrameworks;
6
+ exports.analyzePackage = analyzePackage;
7
+ const fs = require("fs/promises");
8
+ const fs_1 = require("fs");
9
+ const path = require("path");
10
+ exports.FRAMEWORK_DEFINITIONS = [
11
+ { name: 'React', packageName: 'react', category: 'frontend' },
12
+ { name: 'Vue', packageName: 'vue', category: 'frontend' },
13
+ { name: 'Angular', packageName: '@angular/core', category: 'frontend' },
14
+ { name: 'Svelte', packageName: 'svelte', category: 'frontend' },
15
+ { name: 'Solid', packageName: 'solid-js', category: 'frontend' },
16
+ { name: 'Next.js', packageName: 'next', category: 'fullstack' },
17
+ { name: 'Nuxt', packageName: 'nuxt', category: 'fullstack' },
18
+ { name: 'Remix', packageName: '@remix-run/react', category: 'fullstack' },
19
+ { name: 'Astro', packageName: 'astro', category: 'fullstack' },
20
+ { name: 'NestJS', packageName: '@nestjs/core', category: 'backend' },
21
+ { name: 'Express', packageName: 'express', category: 'backend' },
22
+ { name: 'Fastify', packageName: 'fastify', category: 'backend' },
23
+ { name: 'Hono', packageName: 'hono', category: 'backend' },
24
+ { name: 'Koa', packageName: 'koa', category: 'backend' },
25
+ { name: 'Jest', packageName: 'jest', category: 'testing', devOnly: true },
26
+ { name: 'Vitest', packageName: 'vitest', category: 'testing', devOnly: true },
27
+ { name: 'Mocha', packageName: 'mocha', category: 'testing', devOnly: true },
28
+ {
29
+ name: 'Playwright',
30
+ packageName: '@playwright/test',
31
+ category: 'testing',
32
+ devOnly: true,
33
+ },
34
+ {
35
+ name: 'Cypress',
36
+ packageName: 'cypress',
37
+ category: 'testing',
38
+ devOnly: true,
39
+ },
40
+ { name: 'Vite', packageName: 'vite', category: 'build', devOnly: true },
41
+ { name: 'Webpack', packageName: 'webpack', category: 'build', devOnly: true },
42
+ { name: 'esbuild', packageName: 'esbuild', category: 'build', devOnly: true },
43
+ { name: 'Rollup', packageName: 'rollup', category: 'build', devOnly: true },
44
+ { name: 'Turbopack', packageName: 'turbo', category: 'build', devOnly: true },
45
+ { name: 'ESLint', packageName: 'eslint', category: 'linting', devOnly: true },
46
+ {
47
+ name: 'Prettier',
48
+ packageName: 'prettier',
49
+ category: 'linting',
50
+ devOnly: true,
51
+ },
52
+ { name: 'Biome', packageName: '@biomejs/biome', category: 'linting', devOnly: true },
53
+ {
54
+ name: 'Tailwind CSS',
55
+ packageName: 'tailwindcss',
56
+ category: 'styling',
57
+ devOnly: true,
58
+ },
59
+ {
60
+ name: 'Styled Components',
61
+ packageName: 'styled-components',
62
+ category: 'styling',
63
+ },
64
+ { name: 'Emotion', packageName: '@emotion/react', category: 'styling' },
65
+ { name: 'Sass', packageName: 'sass', category: 'styling', devOnly: true },
66
+ { name: 'Prisma', packageName: '@prisma/client', category: 'database' },
67
+ { name: 'TypeORM', packageName: 'typeorm', category: 'database' },
68
+ { name: 'Drizzle', packageName: 'drizzle-orm', category: 'database' },
69
+ { name: 'Mongoose', packageName: 'mongoose', category: 'database' },
70
+ ];
71
+ function parsePackageJson(content) {
72
+ const raw = JSON.parse(content);
73
+ return {
74
+ name: raw.name ?? 'unknown',
75
+ version: raw.version ?? '0.0.0',
76
+ description: raw.description,
77
+ type: raw.type,
78
+ dependencies: raw.dependencies ?? {},
79
+ devDependencies: raw.devDependencies ?? {},
80
+ scripts: raw.scripts ?? {},
81
+ };
82
+ }
83
+ function detectFrameworks(dependencies, devDependencies) {
84
+ const allDeps = { ...dependencies, ...devDependencies };
85
+ const detected = [];
86
+ for (const def of exports.FRAMEWORK_DEFINITIONS) {
87
+ const version = def.devOnly
88
+ ? devDependencies[def.packageName]
89
+ : allDeps[def.packageName];
90
+ if (version) {
91
+ detected.push({
92
+ name: def.name,
93
+ category: def.category,
94
+ version,
95
+ });
96
+ }
97
+ }
98
+ return detected;
99
+ }
100
+ async function analyzePackage(projectRoot) {
101
+ const packagePath = path.join(projectRoot, 'package.json');
102
+ if (!(0, fs_1.existsSync)(packagePath)) {
103
+ return null;
104
+ }
105
+ try {
106
+ const content = await fs.readFile(packagePath, 'utf-8');
107
+ const parsed = parsePackageJson(content);
108
+ const frameworks = detectFrameworks(parsed.dependencies, parsed.devDependencies);
109
+ return {
110
+ ...parsed,
111
+ detectedFrameworks: frameworks,
112
+ };
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ //# sourceMappingURL=package.analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/package.analyzer.ts"],"names":[],"mappings":";;;AAuHA,4CAYC;AAKD,4CAsBC;AAQD,wCAmBC;AAzLD,kCAAkC;AAClC,2BAAgC;AAChC,6BAA6B;AAwBhB,QAAA,qBAAqB,GAA0B;IAE1D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;IACzD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE;IACvE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;IAC/D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;IAGhE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACzE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;IAG9D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;IAChE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;IAChE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC1D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;IAGxD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IACzE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7E,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3E;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,IAAI;KACd;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,IAAI;KACd;IAGD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IACvE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7E,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3E,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAG7E,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7E;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,IAAI;KACd;IACD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAGpF;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,IAAI;KACd;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,mBAAmB;QAChC,QAAQ,EAAE,SAAS;KACpB;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE;IACvE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAGzE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;IACvE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;IACjE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE;IACrE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;CACpE,CAAC;AAkBF,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;QAC3B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO;QAC/B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;QAC1C,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;KAC3B,CAAC;AACJ,CAAC;AAKD,SAAgB,gBAAgB,CAC9B,YAAoC,EACpC,eAAuC;IAEvC,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,6BAAqB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;YAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE7B,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAQM,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAE3D,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAEjF,OAAO;YACL,GAAG,MAAM;YACT,kBAAkB,EAAE,UAAU;SAC/B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const package_analyzer_1 = require("./package.analyzer");
5
+ (0, vitest_1.describe)('package.analyzer', () => {
6
+ (0, vitest_1.describe)('parsePackageJson', () => {
7
+ (0, vitest_1.it)('should parse minimal package.json', () => {
8
+ const content = JSON.stringify({
9
+ name: 'test-project',
10
+ version: '1.0.0',
11
+ });
12
+ const result = (0, package_analyzer_1.parsePackageJson)(content);
13
+ (0, vitest_1.expect)(result.name).toBe('test-project');
14
+ (0, vitest_1.expect)(result.version).toBe('1.0.0');
15
+ (0, vitest_1.expect)(result.dependencies).toEqual({});
16
+ (0, vitest_1.expect)(result.devDependencies).toEqual({});
17
+ (0, vitest_1.expect)(result.scripts).toEqual({});
18
+ });
19
+ (0, vitest_1.it)('should parse full package.json', () => {
20
+ const content = JSON.stringify({
21
+ name: 'full-project',
22
+ version: '2.0.0',
23
+ description: 'A test project',
24
+ type: 'module',
25
+ dependencies: {
26
+ react: '^18.0.0',
27
+ },
28
+ devDependencies: {
29
+ typescript: '^5.0.0',
30
+ },
31
+ scripts: {
32
+ build: 'tsc',
33
+ test: 'vitest',
34
+ },
35
+ });
36
+ const result = (0, package_analyzer_1.parsePackageJson)(content);
37
+ (0, vitest_1.expect)(result.name).toBe('full-project');
38
+ (0, vitest_1.expect)(result.version).toBe('2.0.0');
39
+ (0, vitest_1.expect)(result.description).toBe('A test project');
40
+ (0, vitest_1.expect)(result.type).toBe('module');
41
+ (0, vitest_1.expect)(result.dependencies).toEqual({ react: '^18.0.0' });
42
+ (0, vitest_1.expect)(result.devDependencies).toEqual({ typescript: '^5.0.0' });
43
+ (0, vitest_1.expect)(result.scripts).toEqual({ build: 'tsc', test: 'vitest' });
44
+ });
45
+ (0, vitest_1.it)('should throw on invalid JSON', () => {
46
+ (0, vitest_1.expect)(() => (0, package_analyzer_1.parsePackageJson)('invalid json')).toThrow();
47
+ });
48
+ (0, vitest_1.it)('should handle missing name/version with defaults', () => {
49
+ const content = JSON.stringify({});
50
+ const result = (0, package_analyzer_1.parsePackageJson)(content);
51
+ (0, vitest_1.expect)(result.name).toBe('unknown');
52
+ (0, vitest_1.expect)(result.version).toBe('0.0.0');
53
+ });
54
+ });
55
+ (0, vitest_1.describe)('detectFrameworks', () => {
56
+ (0, vitest_1.it)('should detect React', () => {
57
+ const deps = { react: '^18.0.0', 'react-dom': '^18.0.0' };
58
+ const result = (0, package_analyzer_1.detectFrameworks)(deps, {});
59
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'React', category: 'frontend' }));
60
+ });
61
+ (0, vitest_1.it)('should detect Next.js', () => {
62
+ const deps = { next: '^14.0.0', react: '^18.0.0' };
63
+ const result = (0, package_analyzer_1.detectFrameworks)(deps, {});
64
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'Next.js', category: 'fullstack' }));
65
+ });
66
+ (0, vitest_1.it)('should detect NestJS', () => {
67
+ const deps = { '@nestjs/core': '^10.0.0', '@nestjs/common': '^10.0.0' };
68
+ const result = (0, package_analyzer_1.detectFrameworks)(deps, {});
69
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'NestJS', category: 'backend' }));
70
+ });
71
+ (0, vitest_1.it)('should detect Vue', () => {
72
+ const deps = { vue: '^3.0.0' };
73
+ const result = (0, package_analyzer_1.detectFrameworks)(deps, {});
74
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'Vue', category: 'frontend' }));
75
+ });
76
+ (0, vitest_1.it)('should detect testing frameworks from devDependencies', () => {
77
+ const devDeps = { vitest: '^1.0.0', jest: '^29.0.0' };
78
+ const result = (0, package_analyzer_1.detectFrameworks)({}, devDeps);
79
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'Vitest', category: 'testing' }));
80
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'Jest', category: 'testing' }));
81
+ });
82
+ (0, vitest_1.it)('should detect build tools', () => {
83
+ const devDeps = { vite: '^5.0.0' };
84
+ const result = (0, package_analyzer_1.detectFrameworks)({}, devDeps);
85
+ (0, vitest_1.expect)(result).toContainEqual(vitest_1.expect.objectContaining({ name: 'Vite', category: 'build' }));
86
+ });
87
+ (0, vitest_1.it)('should return empty array for no recognized frameworks', () => {
88
+ const result = (0, package_analyzer_1.detectFrameworks)({}, {});
89
+ (0, vitest_1.expect)(result).toEqual([]);
90
+ });
91
+ });
92
+ (0, vitest_1.describe)('FRAMEWORK_DEFINITIONS', () => {
93
+ (0, vitest_1.it)('should have definitions for major frameworks', () => {
94
+ const names = package_analyzer_1.FRAMEWORK_DEFINITIONS.map((f) => f.name);
95
+ (0, vitest_1.expect)(names).toContain('React');
96
+ (0, vitest_1.expect)(names).toContain('Next.js');
97
+ (0, vitest_1.expect)(names).toContain('NestJS');
98
+ (0, vitest_1.expect)(names).toContain('Vue');
99
+ (0, vitest_1.expect)(names).toContain('Express');
100
+ });
101
+ });
102
+ (0, vitest_1.describe)('analyzePackage', () => {
103
+ (0, vitest_1.it)('should return null for non-existent package.json', async () => {
104
+ const result = await (0, package_analyzer_1.analyzePackage)('/non/existent/path');
105
+ (0, vitest_1.expect)(result).toBeNull();
106
+ });
107
+ });
108
+ });
109
+ //# sourceMappingURL=package.analyzer.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.analyzer.spec.js","sourceRoot":"","sources":["../../../src/analyzer/package.analyzer.spec.ts"],"names":[],"mappings":"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"}