@principal-ai/codebase-composition 0.2.10 → 0.2.12

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 (109) hide show
  1. package/dist/adapters/NodeFileSystemAdapter.d.ts +28 -0
  2. package/dist/adapters/NodeFileSystemAdapter.d.ts.map +1 -0
  3. package/dist/adapters/NodeFileSystemAdapter.js +128 -0
  4. package/dist/adapters/NodeFileSystemAdapter.js.map +1 -0
  5. package/dist/helpers/QualityMetricsCalculator.d.ts +51 -0
  6. package/dist/helpers/QualityMetricsCalculator.d.ts.map +1 -0
  7. package/dist/helpers/QualityMetricsCalculator.js +200 -0
  8. package/dist/helpers/QualityMetricsCalculator.js.map +1 -0
  9. package/dist/helpers/packageLayerHelpers.d.ts +30 -0
  10. package/dist/helpers/packageLayerHelpers.d.ts.map +1 -0
  11. package/dist/helpers/packageLayerHelpers.js +88 -0
  12. package/dist/helpers/packageLayerHelpers.js.map +1 -0
  13. package/dist/index.d.ts +11 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +14 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/modules/DependencyLayerModule.d.ts +44 -0
  18. package/dist/modules/DependencyLayerModule.d.ts.map +1 -0
  19. package/dist/modules/DependencyLayerModule.js +282 -0
  20. package/dist/modules/DependencyLayerModule.js.map +1 -0
  21. package/dist/modules/FileSystemModule.d.ts +30 -0
  22. package/dist/modules/FileSystemModule.d.ts.map +1 -0
  23. package/dist/modules/FileSystemModule.js +43 -0
  24. package/dist/modules/FileSystemModule.js.map +1 -0
  25. package/dist/modules/FileTypeLayerModule.d.ts +34 -0
  26. package/dist/modules/FileTypeLayerModule.d.ts.map +1 -0
  27. package/dist/modules/FileTypeLayerModule.js +165 -0
  28. package/dist/modules/FileTypeLayerModule.js.map +1 -0
  29. package/dist/modules/FrameworkLayerModule.d.ts +22 -0
  30. package/dist/modules/FrameworkLayerModule.d.ts.map +1 -0
  31. package/dist/modules/FrameworkLayerModule.js +384 -0
  32. package/dist/modules/FrameworkLayerModule.js.map +1 -0
  33. package/dist/modules/PackageLayerModule.d.ts +23 -0
  34. package/dist/modules/PackageLayerModule.d.ts.map +1 -0
  35. package/dist/modules/PackageLayerModule.js +866 -0
  36. package/dist/modules/PackageLayerModule.js.map +1 -0
  37. package/dist/modules/TypeExtractionModule.d.ts +37 -0
  38. package/dist/modules/TypeExtractionModule.d.ts.map +1 -0
  39. package/dist/modules/TypeExtractionModule.js +141 -0
  40. package/dist/modules/TypeExtractionModule.js.map +1 -0
  41. package/dist/modules/VersionControlLayerModule.d.ts +10 -0
  42. package/dist/modules/VersionControlLayerModule.d.ts.map +1 -0
  43. package/dist/modules/VersionControlLayerModule.js +26 -0
  44. package/dist/modules/VersionControlLayerModule.js.map +1 -0
  45. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.d.ts +4 -0
  46. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.d.ts.map +1 -0
  47. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.js +3 -0
  48. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.js.map +1 -0
  49. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.d.ts +15 -0
  50. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.d.ts.map +1 -0
  51. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.js +2 -0
  52. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.js.map +1 -0
  53. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.d.ts +34 -0
  54. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.d.ts.map +1 -0
  55. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.js +19 -0
  56. package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.js.map +1 -0
  57. package/dist/modules/__fixtures__/typescript-packages/simple-types/index.d.ts +39 -0
  58. package/dist/modules/__fixtures__/typescript-packages/simple-types/index.d.ts.map +1 -0
  59. package/dist/modules/__fixtures__/typescript-packages/simple-types/index.js +36 -0
  60. package/dist/modules/__fixtures__/typescript-packages/simple-types/index.js.map +1 -0
  61. package/dist/modules/extractors/TypeScriptExtractor.d.ts +18 -0
  62. package/dist/modules/extractors/TypeScriptExtractor.d.ts.map +1 -0
  63. package/dist/modules/extractors/TypeScriptExtractor.js +322 -0
  64. package/dist/modules/extractors/TypeScriptExtractor.js.map +1 -0
  65. package/dist/modules/index.d.ts +13 -0
  66. package/dist/modules/index.d.ts.map +1 -0
  67. package/dist/modules/index.js +10 -0
  68. package/dist/modules/index.js.map +1 -0
  69. package/dist/providers/GitVersionControlProvider.d.ts +108 -0
  70. package/dist/providers/GitVersionControlProvider.d.ts.map +1 -0
  71. package/dist/providers/GitVersionControlProvider.js +375 -0
  72. package/dist/providers/GitVersionControlProvider.js.map +1 -0
  73. package/dist/providers/PackageManagerApiProvider.d.ts +78 -0
  74. package/dist/providers/PackageManagerApiProvider.d.ts.map +1 -0
  75. package/dist/providers/PackageManagerApiProvider.js +10 -0
  76. package/dist/providers/PackageManagerApiProvider.js.map +1 -0
  77. package/dist/providers/index.d.ts +4 -0
  78. package/dist/providers/index.d.ts.map +1 -0
  79. package/dist/providers/index.js +5 -0
  80. package/dist/providers/index.js.map +1 -0
  81. package/dist/services/FilesystemService.d.ts +59 -0
  82. package/dist/services/FilesystemService.d.ts.map +1 -0
  83. package/dist/services/FilesystemService.js +394 -0
  84. package/dist/services/FilesystemService.js.map +1 -0
  85. package/dist/services/index.d.ts +2 -0
  86. package/dist/services/index.d.ts.map +1 -0
  87. package/dist/services/index.js +3 -0
  88. package/dist/services/index.js.map +1 -0
  89. package/dist/types/file-system.d.ts +6 -0
  90. package/dist/types/file-system.d.ts.map +1 -0
  91. package/dist/types/file-system.js +6 -0
  92. package/dist/types/file-system.js.map +1 -0
  93. package/dist/types/index.d.ts +4 -0
  94. package/dist/types/index.d.ts.map +1 -0
  95. package/dist/types/index.js +2 -0
  96. package/dist/types/index.js.map +1 -0
  97. package/dist/types/layer-types.d.ts +212 -0
  98. package/dist/types/layer-types.d.ts.map +1 -0
  99. package/dist/types/layer-types.js +6 -0
  100. package/dist/types/layer-types.js.map +1 -0
  101. package/dist/types/version-control-layer.d.ts +53 -0
  102. package/dist/types/version-control-layer.d.ts.map +1 -0
  103. package/dist/types/version-control-layer.js +2 -0
  104. package/dist/types/version-control-layer.js.map +1 -0
  105. package/dist/types/workspace-boundaries.d.ts +17 -0
  106. package/dist/types/workspace-boundaries.d.ts.map +1 -0
  107. package/dist/types/workspace-boundaries.js +6 -0
  108. package/dist/types/workspace-boundaries.js.map +1 -0
  109. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Node.js FileSystem Adapter for testing
3
+ * Simple implementation for local testing of the bridge
4
+ */
5
+ import type { FileSystemAdapter } from '../providers';
6
+ export declare class NodeFileSystemAdapter implements FileSystemAdapter {
7
+ readFile(filePath: string): Promise<{
8
+ content: string;
9
+ } | null>;
10
+ fileExists(filePath: string): Promise<boolean>;
11
+ isDirectory(filePath: string): Promise<boolean>;
12
+ readDirectory(dirPath: string): Promise<string[]>;
13
+ getFileStats(filePath: string): Promise<{
14
+ size: number;
15
+ isDirectory: boolean;
16
+ lastModified: Date;
17
+ } | null>;
18
+ buildFilteredFileTree(directoryPath: string, patterns?: string[], sourceDirectory?: string): Promise<{
19
+ paths: string[];
20
+ stats?: Map<string, {
21
+ size: number;
22
+ isDirectory: boolean;
23
+ lastModified: Date;
24
+ }>;
25
+ }>;
26
+ private shouldSkipDirectory;
27
+ }
28
+ //# sourceMappingURL=NodeFileSystemAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeFileSystemAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/NodeFileSystemAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAS/D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQjD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,IAAI,CAAC;KACpB,GAAG,IAAI,CAAC;IAaH,qBAAqB,CACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,OAAO,CAAC;YACrB,YAAY,EAAE,IAAI,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC;IAmEF,OAAO,CAAC,mBAAmB;CAiB5B"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Node.js FileSystem Adapter for testing
3
+ * Simple implementation for local testing of the bridge
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ import ignore from 'ignore';
8
+ export class NodeFileSystemAdapter {
9
+ async readFile(filePath) {
10
+ try {
11
+ const content = await fs.readFile(filePath, 'utf-8');
12
+ return { content };
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ async fileExists(filePath) {
19
+ try {
20
+ await fs.access(filePath);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ async isDirectory(filePath) {
28
+ try {
29
+ const stats = await fs.stat(filePath);
30
+ return stats.isDirectory();
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ async readDirectory(dirPath) {
37
+ try {
38
+ return await fs.readdir(dirPath);
39
+ }
40
+ catch {
41
+ return [];
42
+ }
43
+ }
44
+ async getFileStats(filePath) {
45
+ try {
46
+ const stats = await fs.stat(filePath);
47
+ return {
48
+ size: stats.size,
49
+ isDirectory: stats.isDirectory(),
50
+ lastModified: stats.mtime,
51
+ };
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ async buildFilteredFileTree(directoryPath, patterns, sourceDirectory) {
58
+ const paths = [];
59
+ const stats = new Map();
60
+ // Create ignore instance if patterns provided
61
+ const ig = patterns && patterns.length > 0 ? ignore().add(patterns) : null;
62
+ // Recursive function to walk directory
63
+ const walkDir = async (dir, relativePath = '') => {
64
+ try {
65
+ const entries = await fs.readdir(dir, { withFileTypes: true });
66
+ for (const entry of entries) {
67
+ const fullPath = path.join(dir, entry.name);
68
+ const relPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
69
+ // Check if should be ignored
70
+ if (ig && ig.ignores(relPath)) {
71
+ continue;
72
+ }
73
+ // Skip common directories that should be ignored
74
+ if (entry.isDirectory() && this.shouldSkipDirectory(entry.name)) {
75
+ continue;
76
+ }
77
+ if (entry.isDirectory()) {
78
+ // Add directory path with trailing slash
79
+ paths.push(relPath + '/');
80
+ // Get stats
81
+ const stat = await fs.stat(fullPath);
82
+ stats.set(relPath + '/', {
83
+ size: 0,
84
+ isDirectory: true,
85
+ lastModified: stat.mtime,
86
+ });
87
+ // Recurse into directory
88
+ await walkDir(fullPath, relPath);
89
+ }
90
+ else {
91
+ // Add file path
92
+ paths.push(relPath);
93
+ // Get stats
94
+ const stat = await fs.stat(fullPath);
95
+ stats.set(relPath, {
96
+ size: stat.size,
97
+ isDirectory: false,
98
+ lastModified: stat.mtime,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ catch (error) {
104
+ console.warn(`Error walking directory ${dir}:`, error);
105
+ }
106
+ };
107
+ await walkDir(directoryPath);
108
+ return { paths, stats };
109
+ }
110
+ shouldSkipDirectory(name) {
111
+ // Skip common directories that shouldn't be included
112
+ const skipDirs = [
113
+ 'node_modules',
114
+ '.git',
115
+ 'dist',
116
+ 'build',
117
+ 'coverage',
118
+ '.next',
119
+ '.turbo',
120
+ '.cache',
121
+ 'tmp',
122
+ '.vscode',
123
+ '.idea',
124
+ ];
125
+ return skipDirs.includes(name);
126
+ }
127
+ }
128
+ //# sourceMappingURL=NodeFileSystemAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeFileSystemAdapter.js","sourceRoot":"","sources":["../../src/adapters/NodeFileSystemAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Calculate quality metrics from lens commands
3
+ */
4
+ import type { PackageCommand, QualityMetrics, LensOperation } from '../types/layer-types';
5
+ interface DetectedLens {
6
+ lensId: string;
7
+ operations: Set<LensOperation>;
8
+ }
9
+ export declare class QualityMetricsCalculator {
10
+ /**
11
+ * Detect lens commands from package commands
12
+ */
13
+ static detectLensCommands(commands: PackageCommand[]): Map<string, DetectedLens>;
14
+ /**
15
+ * Detect lens ID from script content using patterns
16
+ * The script content is stored in the description field
17
+ */
18
+ private static detectLensFromScriptContent;
19
+ /**
20
+ * Apply fallback detection for common script patterns
21
+ */
22
+ private static applyFallbackDetection;
23
+ /**
24
+ * Calculate quality metrics from detected lenses
25
+ * @param detectedLenses - Map of detected lens IDs to lens info
26
+ * @param lensScores - Optional map of lens IDs to real quality scores (0-100)
27
+ * @returns Partial quality metrics hexagon with scores for available lenses
28
+ */
29
+ static calculateMetrics(detectedLenses: Map<string, DetectedLens>, lensScores?: Map<string, number>): Partial<QualityMetrics>;
30
+ /**
31
+ * Get list of available lenses
32
+ */
33
+ static getAvailableLenses(detectedLenses: Map<string, DetectedLens>): string[];
34
+ /**
35
+ * Get list of missing standard lenses
36
+ */
37
+ static getMissingLenses(detectedLenses: Map<string, DetectedLens>): string[];
38
+ /**
39
+ * Full calculation - convenience method
40
+ * @param commands - Package commands to analyze
41
+ * @param lensScores - Optional map of lens IDs to real quality scores (0-100)
42
+ * @returns Quality profile with hexagon, available lenses, and missing lenses
43
+ */
44
+ static calculateQualityProfile(commands: PackageCommand[], lensScores?: Map<string, number>): {
45
+ hexagon: Partial<QualityMetrics>;
46
+ availableLenses: string[];
47
+ missingLenses: string[];
48
+ };
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=QualityMetricsCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityMetricsCalculator.d.ts","sourceRoot":"","sources":["../../src/helpers/QualityMetricsCalculator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwF1F,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;CAChC;AAED,qBAAa,wBAAwB;IACnC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAoChF;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAW1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAkCrC;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CACrB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACzC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAkB1B;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE;IAI9E;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE;IAK5E;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAC5B,QAAQ,EAAE,cAAc,EAAE,EAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;CAanC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Calculate quality metrics from lens commands
3
+ */
4
+ // Standard lens IDs and their corresponding hexagon metrics
5
+ const LENS_TO_METRIC_MAP = {
6
+ // Linting tools
7
+ 'eslint': 'linting',
8
+ 'biome': 'linting',
9
+ 'biome-lint': 'linting',
10
+ 'oxlint': 'linting',
11
+ // Type checking tools
12
+ 'typescript': 'types',
13
+ 'flow': 'types',
14
+ // Testing tools
15
+ 'test': 'tests',
16
+ 'jest': 'tests',
17
+ 'vitest': 'tests',
18
+ 'bun-test': 'tests',
19
+ 'mocha': 'tests',
20
+ 'playwright': 'tests',
21
+ 'cypress': 'tests',
22
+ // Formatting tools
23
+ 'prettier': 'formatting',
24
+ 'biome-format': 'formatting',
25
+ // Dead code detection
26
+ 'knip': 'deadCode',
27
+ 'depcheck': 'deadCode',
28
+ // Documentation
29
+ 'typedoc': 'documentation',
30
+ 'jsdoc': 'documentation',
31
+ 'alexandria': 'documentation',
32
+ };
33
+ // Patterns to detect specific tools from script content
34
+ // Maps regex patterns to lens IDs
35
+ const SCRIPT_CONTENT_PATTERNS = [
36
+ // Bun test runner
37
+ { pattern: /^bun\s+test\b/, lensId: 'bun-test' },
38
+ { pattern: /^bun\s+run\s+test\b/, lensId: 'bun-test' },
39
+ // Biome - can be used for both linting and formatting
40
+ { pattern: /\bbiome\s+(check|lint|ci)\b/, lensId: 'biome-lint' },
41
+ { pattern: /\bbiome\s+format\b/, lensId: 'biome-format' },
42
+ // Vitest
43
+ { pattern: /\bvitest\b/, lensId: 'vitest' },
44
+ // Jest
45
+ { pattern: /\bjest\b/, lensId: 'jest' },
46
+ ];
47
+ // Standard lenses we expect to find
48
+ const STANDARD_LENSES = ['eslint', 'typescript', 'test', 'prettier', 'knip', 'typedoc', 'alexandria'];
49
+ // Fallback patterns for common script names
50
+ const SCRIPT_TO_LENS_MAP = {
51
+ // Linting
52
+ 'lint': 'eslint',
53
+ 'eslint': 'eslint',
54
+ // Type checking
55
+ 'typecheck': 'typescript',
56
+ 'type-check': 'typescript',
57
+ 'tsc': 'typescript',
58
+ // Testing
59
+ 'test': 'test',
60
+ 'jest': 'jest',
61
+ 'vitest': 'vitest',
62
+ // Formatting
63
+ 'format': 'prettier',
64
+ 'prettier': 'prettier',
65
+ // Dead code
66
+ 'knip': 'knip',
67
+ 'unused': 'knip',
68
+ // Documentation
69
+ 'docs': 'alexandria',
70
+ 'alexandria': 'alexandria',
71
+ 'typedoc': 'typedoc',
72
+ };
73
+ export class QualityMetricsCalculator {
74
+ /**
75
+ * Detect lens commands from package commands
76
+ */
77
+ static detectLensCommands(commands) {
78
+ const detectedLenses = new Map();
79
+ // First pass: explicit lens: commands
80
+ for (const command of commands) {
81
+ if (command.name.startsWith('lens:')) {
82
+ const parts = command.name.split(':');
83
+ if (parts.length >= 3) {
84
+ const lensId = parts[1];
85
+ const operation = parts[2];
86
+ if (!detectedLenses.has(lensId)) {
87
+ detectedLenses.set(lensId, {
88
+ lensId,
89
+ operations: new Set()
90
+ });
91
+ }
92
+ detectedLenses.get(lensId).operations.add(operation);
93
+ // Mark the command as a lens command
94
+ command.isLensCommand = true;
95
+ command.lensId = lensId;
96
+ command.lensOperation = operation;
97
+ }
98
+ }
99
+ }
100
+ // Second pass: fallback detection if no explicit lens commands found
101
+ if (detectedLenses.size === 0) {
102
+ this.applyFallbackDetection(commands, detectedLenses);
103
+ }
104
+ return detectedLenses;
105
+ }
106
+ /**
107
+ * Detect lens ID from script content using patterns
108
+ * The script content is stored in the description field
109
+ */
110
+ static detectLensFromScriptContent(scriptContent) {
111
+ if (!scriptContent)
112
+ return null;
113
+ for (const { pattern, lensId } of SCRIPT_CONTENT_PATTERNS) {
114
+ if (pattern.test(scriptContent)) {
115
+ return lensId;
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ /**
121
+ * Apply fallback detection for common script patterns
122
+ */
123
+ static applyFallbackDetection(commands, detectedLenses) {
124
+ for (const command of commands) {
125
+ // First, try to detect from script content (more accurate)
126
+ // The script content is stored in the description field by PackageLayerModule
127
+ let lensId = this.detectLensFromScriptContent(command.description);
128
+ // Fall back to script name mapping
129
+ if (!lensId) {
130
+ lensId = SCRIPT_TO_LENS_MAP[command.name] || null;
131
+ }
132
+ if (lensId) {
133
+ if (!detectedLenses.has(lensId)) {
134
+ detectedLenses.set(lensId, {
135
+ lensId,
136
+ operations: new Set()
137
+ });
138
+ }
139
+ // Infer operation type from command name
140
+ const operation = command.name.includes('coverage') ? 'coverage' : 'check';
141
+ detectedLenses.get(lensId).operations.add(operation);
142
+ // Mark the command
143
+ command.isLensCommand = true;
144
+ command.lensId = lensId;
145
+ command.lensOperation = operation;
146
+ }
147
+ }
148
+ }
149
+ /**
150
+ * Calculate quality metrics from detected lenses
151
+ * @param detectedLenses - Map of detected lens IDs to lens info
152
+ * @param lensScores - Optional map of lens IDs to real quality scores (0-100)
153
+ * @returns Partial quality metrics hexagon with scores for available lenses
154
+ */
155
+ static calculateMetrics(detectedLenses, lensScores) {
156
+ const metrics = {};
157
+ for (const [lensId] of detectedLenses) {
158
+ const metricKey = LENS_TO_METRIC_MAP[lensId];
159
+ if (metricKey) {
160
+ // Use real score if provided
161
+ const score = lensScores?.get(lensId);
162
+ if (score !== undefined) {
163
+ metrics[metricKey] = score;
164
+ }
165
+ }
166
+ }
167
+ return metrics;
168
+ }
169
+ /**
170
+ * Get list of available lenses
171
+ */
172
+ static getAvailableLenses(detectedLenses) {
173
+ return Array.from(detectedLenses.keys());
174
+ }
175
+ /**
176
+ * Get list of missing standard lenses
177
+ */
178
+ static getMissingLenses(detectedLenses) {
179
+ const availableLenses = new Set(detectedLenses.keys());
180
+ return STANDARD_LENSES.filter(lens => !availableLenses.has(lens));
181
+ }
182
+ /**
183
+ * Full calculation - convenience method
184
+ * @param commands - Package commands to analyze
185
+ * @param lensScores - Optional map of lens IDs to real quality scores (0-100)
186
+ * @returns Quality profile with hexagon, available lenses, and missing lenses
187
+ */
188
+ static calculateQualityProfile(commands, lensScores) {
189
+ const detectedLenses = this.detectLensCommands(commands);
190
+ const hexagon = this.calculateMetrics(detectedLenses, lensScores);
191
+ const availableLenses = this.getAvailableLenses(detectedLenses);
192
+ const missingLenses = this.getMissingLenses(detectedLenses);
193
+ return {
194
+ hexagon,
195
+ availableLenses,
196
+ missingLenses
197
+ };
198
+ }
199
+ }
200
+ //# sourceMappingURL=QualityMetricsCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityMetricsCalculator.js","sourceRoot":"","sources":["../../src/helpers/QualityMetricsCalculator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,4DAA4D;AAC5D,MAAM,kBAAkB,GAAyC;IAC/D,gBAAgB;IAChB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;IAEnB,sBAAsB;IACtB,YAAY,EAAE,OAAO;IACrB,MAAM,EAAE,OAAO;IAEf,gBAAgB;IAChB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE,OAAO;IAElB,mBAAmB;IACnB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,YAAY;IAE5B,sBAAsB;IACtB,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,UAAU;IAEtB,gBAAgB;IAChB,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,eAAe;IACxB,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF,wDAAwD;AACxD,kCAAkC;AAClC,MAAM,uBAAuB,GAA+C;IAC1E,kBAAkB;IAClB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE;IAChD,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,UAAU,EAAE;IAEtD,sDAAsD;IACtD,EAAE,OAAO,EAAE,6BAA6B,EAAE,MAAM,EAAE,YAAY,EAAE;IAChE,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,cAAc,EAAE;IAEzD,SAAS;IACT,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IAE3C,OAAO;IACP,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;CACxC,CAAC;AAEF,oCAAoC;AACpC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAEtG,4CAA4C;AAC5C,MAAM,kBAAkB,GAA2B;IACjD,UAAU;IACV,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAElB,gBAAgB;IAChB,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,YAAY;IAEnB,UAAU;IACV,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAElB,aAAa;IACb,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IAEtB,YAAY;IACZ,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,MAAM;IAEhB,gBAAgB;IAChB,MAAM,EAAE,YAAY;IACpB,YAAY,EAAE,YAAY;IAC1B,SAAS,EAAE,SAAS;CACrB,CAAC;AAOF,MAAM,OAAO,wBAAwB;IACnC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAA0B;QAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;QAEvD,sCAAsC;QACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAkB,CAAC;oBAE5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;4BACzB,MAAM;4BACN,UAAU,EAAE,IAAI,GAAG,EAAE;yBACtB,CAAC,CAAC;oBACL,CAAC;oBAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAEtD,qCAAqC;oBACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC7B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;oBACxB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,2BAA2B,CAAC,aAAiC;QAC1E,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,uBAAuB,EAAE,CAAC;YAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,sBAAsB,CACnC,QAA0B,EAC1B,cAAyC;QAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,2DAA2D;YAC3D,8EAA8E;YAC9E,IAAI,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEnE,mCAAmC;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YACpD,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;wBACzB,MAAM;wBACN,UAAU,EAAE,IAAI,GAAG,EAAE;qBACtB,CAAC,CAAC;gBACL,CAAC;gBAED,yCAAyC;gBACzC,MAAM,SAAS,GAAkB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC1F,cAAc,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAEtD,mBAAmB;gBACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC7B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CACrB,cAAyC,EACzC,UAAgC;QAEhC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,SAAS,EAAE,CAAC;gBACd,6BAA6B;gBAC7B,MAAM,KAAK,GAAG,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAyC;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,cAAyC;QAC/D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAC5B,QAA0B,EAC1B,UAAgC;QAEhC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAE5D,OAAO;YACL,OAAO;YACP,eAAe;YACf,aAAa;SACd,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Helper functions for PackageLayer
3
+ */
4
+ import type { PackageLayer, QualityMetrics } from '../types/layer-types';
5
+ /**
6
+ * Convert PackageLayer quality metrics to complete QualityMetrics object
7
+ * Fills in defaults for missing metrics
8
+ */
9
+ export declare function toQualityMetrics(packageLayer: PackageLayer): QualityMetrics | null;
10
+ /**
11
+ * Check if a package has any quality metrics
12
+ */
13
+ export declare function hasQualityMetrics(packageLayer: PackageLayer): boolean;
14
+ /**
15
+ * Get list of available quality lenses for a package
16
+ */
17
+ export declare function getAvailableLenses(packageLayer: PackageLayer): string[];
18
+ /**
19
+ * Get list of missing standard lenses for a package
20
+ */
21
+ export declare function getMissingLenses(packageLayer: PackageLayer): string[];
22
+ /**
23
+ * Calculate overall quality score (0-100) based on available metrics
24
+ */
25
+ export declare function getOverallQualityScore(packageLayer: PackageLayer): number;
26
+ /**
27
+ * Generate recommendations for adding missing lens commands
28
+ */
29
+ export declare function generateLensRecommendations(packageLayer: PackageLayer): string[];
30
+ //# sourceMappingURL=packageLayerHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageLayerHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CAelF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAUzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAiChF"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Helper functions for PackageLayer
3
+ */
4
+ /**
5
+ * Convert PackageLayer quality metrics to complete QualityMetrics object
6
+ * Fills in defaults for missing metrics
7
+ */
8
+ export function toQualityMetrics(packageLayer) {
9
+ if (!packageLayer.qualityMetrics?.hexagon) {
10
+ return null;
11
+ }
12
+ const hexagon = packageLayer.qualityMetrics.hexagon;
13
+ return {
14
+ tests: hexagon.tests ?? 0,
15
+ deadCode: hexagon.deadCode ?? 0,
16
+ linting: hexagon.linting ?? 0,
17
+ formatting: hexagon.formatting ?? 0,
18
+ types: hexagon.types ?? 0,
19
+ documentation: hexagon.documentation ?? 0,
20
+ };
21
+ }
22
+ /**
23
+ * Check if a package has any quality metrics
24
+ */
25
+ export function hasQualityMetrics(packageLayer) {
26
+ return Boolean(packageLayer.qualityMetrics?.hexagon);
27
+ }
28
+ /**
29
+ * Get list of available quality lenses for a package
30
+ */
31
+ export function getAvailableLenses(packageLayer) {
32
+ return packageLayer.qualityMetrics?.availableLenses ?? [];
33
+ }
34
+ /**
35
+ * Get list of missing standard lenses for a package
36
+ */
37
+ export function getMissingLenses(packageLayer) {
38
+ return packageLayer.qualityMetrics?.missingLenses ?? [];
39
+ }
40
+ /**
41
+ * Calculate overall quality score (0-100) based on available metrics
42
+ */
43
+ export function getOverallQualityScore(packageLayer) {
44
+ const metrics = toQualityMetrics(packageLayer);
45
+ if (!metrics)
46
+ return 0;
47
+ const values = Object.values(metrics);
48
+ const nonZeroValues = values.filter(v => v > 0);
49
+ if (nonZeroValues.length === 0)
50
+ return 0;
51
+ return Math.round(nonZeroValues.reduce((sum, val) => sum + val, 0) / nonZeroValues.length);
52
+ }
53
+ /**
54
+ * Generate recommendations for adding missing lens commands
55
+ */
56
+ export function generateLensRecommendations(packageLayer) {
57
+ const missing = getMissingLenses(packageLayer);
58
+ const recommendations = [];
59
+ for (const lensId of missing) {
60
+ switch (lensId) {
61
+ case 'eslint':
62
+ recommendations.push('"lens:eslint:check": "eslint . --format json"');
63
+ recommendations.push('"lens:eslint:coverage": "eslint . --format json --no-inline-config"');
64
+ break;
65
+ case 'typescript':
66
+ recommendations.push('"lens:typescript:check": "tsc --noEmit"');
67
+ recommendations.push('"lens:typescript:coverage": "tsc --listFiles"');
68
+ break;
69
+ case 'test':
70
+ recommendations.push('"lens:test:check": "jest --json"');
71
+ recommendations.push('"lens:test:coverage": "jest --coverage --json"');
72
+ break;
73
+ case 'prettier':
74
+ recommendations.push('"lens:prettier:check": "prettier --check ."');
75
+ recommendations.push('"lens:prettier:coverage": "prettier --list-different ."');
76
+ break;
77
+ case 'knip':
78
+ recommendations.push('"lens:knip:check": "knip --reporter json"');
79
+ break;
80
+ case 'typedoc':
81
+ recommendations.push('"lens:typedoc:check": "typedoc --emit none"');
82
+ recommendations.push('"lens:typedoc:coverage": "typedoc --json .quality/typedoc.json"');
83
+ break;
84
+ }
85
+ }
86
+ return recommendations;
87
+ }
88
+ //# sourceMappingURL=packageLayerHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageLayerHelpers.js","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type { FilePattern, FileSet, BaseLayer, PackageCommand, ConfigFile, PackageLayer, FileSystemFilterLayer, VersionControlLayer, VersionControlIgnorePattern, VersionControlProvider, FileInfo, DirectoryInfo, FileTree, ExtractedType, PackageTypes, TypeDefinitionLayer, TypeExtractor, QualityMetrics, LensOperation, } from './types';
2
+ export { FileTypeLayerModule, PackageLayerModule, VersionControlLayerFactory, DependencyLayerModule, FrameworkLayerModule, FileSystemModule, TypeExtractionModule, } from './modules';
3
+ export type { FileTypeInfo, FileSystemModuleConfig, FileSystemLoadResult, TypeExtractionOptions, TypeScriptExtractionOptions, } from './modules';
4
+ export { TypeScriptExtractor } from './modules';
5
+ export { FilesystemService } from './services';
6
+ export { QualityMetricsCalculator } from './helpers/QualityMetricsCalculator';
7
+ export { toQualityMetrics, hasQualityMetrics, getAvailableLenses, getMissingLenses, getOverallQualityScore, generateLensRecommendations, } from './helpers/packageLayerHelpers';
8
+ export { NodeFileSystemAdapter } from './adapters/NodeFileSystemAdapter';
9
+ export { GitVersionControlProvider, PackageManagerApiProvider } from './providers';
10
+ export type { FileSystemAdapter, GitAdapter, ShellAdapter, PackageManager, PackageVersionInfo, VersionCheckResult, VulnerabilityInfo, VulnerabilityCheckResult, LicenseInfo, LicenseCheckResult, DependencyCheckProgress, BatchCheckOptions, } from './providers';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,WAAW,EACX,OAAO,EACP,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ // Main export file for layers module
2
+ // Modules
3
+ export { FileTypeLayerModule, PackageLayerModule, VersionControlLayerFactory, DependencyLayerModule, FrameworkLayerModule, FileSystemModule, TypeExtractionModule, } from './modules/index.js';
4
+ export { TypeScriptExtractor } from './modules/index.js';
5
+ // Services
6
+ export { FilesystemService } from './services/index.js';
7
+ // Helpers
8
+ export { QualityMetricsCalculator } from './helpers/QualityMetricsCalculator.js';
9
+ export { toQualityMetrics, hasQualityMetrics, getAvailableLenses, getMissingLenses, getOverallQualityScore, generateLensRecommendations, } from './helpers/packageLayerHelpers.js';
10
+ // Adapters
11
+ export { NodeFileSystemAdapter } from './adapters/NodeFileSystemAdapter.js';
12
+ // Providers
13
+ export { GitVersionControlProvider, PackageManagerApiProvider } from './providers/index.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAyBrC,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAQnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,UAAU;AACV,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,YAAY;AACZ,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { DependencyLayer, PackageLayer } from '../types/layer-types';
2
+ export declare class DependencyLayerModule {
3
+ /**
4
+ * Create dependency layers from package layers
5
+ */
6
+ createDependencyLayers(packageLayers: PackageLayer[]): DependencyLayer[];
7
+ /**
8
+ * Add a dependency to the map
9
+ */
10
+ private addDependency;
11
+ /**
12
+ * Get JSON paths for content extraction
13
+ */
14
+ private getJsonPaths;
15
+ /**
16
+ * Get color for dependency based on type and name
17
+ */
18
+ private getDependencyColor;
19
+ /**
20
+ * Get icon for dependency based on its name/type
21
+ */
22
+ private getDependencyIcon;
23
+ /**
24
+ * Analyze dependency health and conflicts
25
+ */
26
+ analyzeDependencyHealth(dependencyLayers: DependencyLayer[]): {
27
+ duplicates: Array<{
28
+ name: string;
29
+ versions: string[];
30
+ packages: Record<string, string>;
31
+ }>;
32
+ outdated: Array<{
33
+ name: string;
34
+ version: string;
35
+ latest?: string;
36
+ }>;
37
+ security: Array<{
38
+ name: string;
39
+ severity: 'low' | 'medium' | 'high';
40
+ issue: string;
41
+ }>;
42
+ };
43
+ }
44
+ //# sourceMappingURL=DependencyLayerModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyLayerModule.d.ts","sourceRoot":"","sources":["../../src/modules/DependencyLayerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAW,MAAM,sBAAsB,CAAC;AAW9E,qBAAa,qBAAqB;IAChC;;OAEG;IACH,sBAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE;IAuGxE;;OAEG;IACH,OAAO,CAAC,aAAa;IAwCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,eAAe,EAAE,GAAG;QAC5D,UAAU,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAC;QAC1F,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpE,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvF;CAoEF"}