@principal-ai/codebase-composition 0.2.10 → 0.2.11
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/dist/adapters/NodeFileSystemAdapter.d.ts +28 -0
- package/dist/adapters/NodeFileSystemAdapter.d.ts.map +1 -0
- package/dist/adapters/NodeFileSystemAdapter.js +128 -0
- package/dist/adapters/NodeFileSystemAdapter.js.map +1 -0
- package/dist/helpers/QualityMetricsCalculator.d.ts +46 -0
- package/dist/helpers/QualityMetricsCalculator.d.ts.map +1 -0
- package/dist/helpers/QualityMetricsCalculator.js +163 -0
- package/dist/helpers/QualityMetricsCalculator.js.map +1 -0
- package/dist/helpers/packageLayerHelpers.d.ts +30 -0
- package/dist/helpers/packageLayerHelpers.d.ts.map +1 -0
- package/dist/helpers/packageLayerHelpers.js +88 -0
- package/dist/helpers/packageLayerHelpers.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/DependencyLayerModule.d.ts +44 -0
- package/dist/modules/DependencyLayerModule.d.ts.map +1 -0
- package/dist/modules/DependencyLayerModule.js +282 -0
- package/dist/modules/DependencyLayerModule.js.map +1 -0
- package/dist/modules/FileSystemModule.d.ts +30 -0
- package/dist/modules/FileSystemModule.d.ts.map +1 -0
- package/dist/modules/FileSystemModule.js +43 -0
- package/dist/modules/FileSystemModule.js.map +1 -0
- package/dist/modules/FileTypeLayerModule.d.ts +34 -0
- package/dist/modules/FileTypeLayerModule.d.ts.map +1 -0
- package/dist/modules/FileTypeLayerModule.js +165 -0
- package/dist/modules/FileTypeLayerModule.js.map +1 -0
- package/dist/modules/FrameworkLayerModule.d.ts +22 -0
- package/dist/modules/FrameworkLayerModule.d.ts.map +1 -0
- package/dist/modules/FrameworkLayerModule.js +384 -0
- package/dist/modules/FrameworkLayerModule.js.map +1 -0
- package/dist/modules/PackageLayerModule.d.ts +23 -0
- package/dist/modules/PackageLayerModule.d.ts.map +1 -0
- package/dist/modules/PackageLayerModule.js +866 -0
- package/dist/modules/PackageLayerModule.js.map +1 -0
- package/dist/modules/TypeExtractionModule.d.ts +37 -0
- package/dist/modules/TypeExtractionModule.d.ts.map +1 -0
- package/dist/modules/TypeExtractionModule.js +141 -0
- package/dist/modules/TypeExtractionModule.js.map +1 -0
- package/dist/modules/VersionControlLayerModule.d.ts +10 -0
- package/dist/modules/VersionControlLayerModule.d.ts.map +1 -0
- package/dist/modules/VersionControlLayerModule.js +26 -0
- package/dist/modules/VersionControlLayerModule.js.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.d.ts +4 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.d.ts.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.js +3 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/index.js.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.d.ts +15 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.d.ts.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.js +2 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/category.js.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.d.ts +34 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.d.ts.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.js +19 -0
- package/dist/modules/__fixtures__/typescript-packages/complex-types/src/models/product.js.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/simple-types/index.d.ts +39 -0
- package/dist/modules/__fixtures__/typescript-packages/simple-types/index.d.ts.map +1 -0
- package/dist/modules/__fixtures__/typescript-packages/simple-types/index.js +36 -0
- package/dist/modules/__fixtures__/typescript-packages/simple-types/index.js.map +1 -0
- package/dist/modules/extractors/TypeScriptExtractor.d.ts +18 -0
- package/dist/modules/extractors/TypeScriptExtractor.d.ts.map +1 -0
- package/dist/modules/extractors/TypeScriptExtractor.js +322 -0
- package/dist/modules/extractors/TypeScriptExtractor.js.map +1 -0
- package/dist/modules/index.d.ts +13 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +10 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/providers/GitVersionControlProvider.d.ts +108 -0
- package/dist/providers/GitVersionControlProvider.d.ts.map +1 -0
- package/dist/providers/GitVersionControlProvider.js +375 -0
- package/dist/providers/GitVersionControlProvider.js.map +1 -0
- package/dist/providers/PackageManagerApiProvider.d.ts +78 -0
- package/dist/providers/PackageManagerApiProvider.d.ts.map +1 -0
- package/dist/providers/PackageManagerApiProvider.js +10 -0
- package/dist/providers/PackageManagerApiProvider.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/services/FilesystemService.d.ts +59 -0
- package/dist/services/FilesystemService.d.ts.map +1 -0
- package/dist/services/FilesystemService.js +394 -0
- package/dist/services/FilesystemService.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -0
- package/dist/types/file-system.d.ts +6 -0
- package/dist/types/file-system.d.ts.map +1 -0
- package/dist/types/file-system.js +6 -0
- package/dist/types/file-system.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +212 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +6 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/version-control-layer.d.ts +53 -0
- package/dist/types/version-control-layer.d.ts.map +1 -0
- package/dist/types/version-control-layer.js +2 -0
- package/dist/types/version-control-layer.js.map +1 -0
- package/dist/types/workspace-boundaries.d.ts +17 -0
- package/dist/types/workspace-boundaries.d.ts.map +1 -0
- package/dist/types/workspace-boundaries.js +6 -0
- package/dist/types/workspace-boundaries.js.map +1 -0
- 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,46 @@
|
|
|
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
|
+
* Apply fallback detection for common script patterns
|
|
16
|
+
*/
|
|
17
|
+
private static applyFallbackDetection;
|
|
18
|
+
/**
|
|
19
|
+
* Calculate quality metrics from detected lenses
|
|
20
|
+
* @param detectedLenses - Map of detected lens IDs to lens info
|
|
21
|
+
* @param lensScores - Optional map of lens IDs to real quality scores (0-100)
|
|
22
|
+
* @returns Partial quality metrics hexagon with scores for available lenses
|
|
23
|
+
*/
|
|
24
|
+
static calculateMetrics(detectedLenses: Map<string, DetectedLens>, lensScores?: Map<string, number>): Partial<QualityMetrics>;
|
|
25
|
+
/**
|
|
26
|
+
* Get list of available lenses
|
|
27
|
+
*/
|
|
28
|
+
static getAvailableLenses(detectedLenses: Map<string, DetectedLens>): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Get list of missing standard lenses
|
|
31
|
+
*/
|
|
32
|
+
static getMissingLenses(detectedLenses: Map<string, DetectedLens>): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Full calculation - convenience method
|
|
35
|
+
* @param commands - Package commands to analyze
|
|
36
|
+
* @param lensScores - Optional map of lens IDs to real quality scores (0-100)
|
|
37
|
+
* @returns Quality profile with hexagon, available lenses, and missing lenses
|
|
38
|
+
*/
|
|
39
|
+
static calculateQualityProfile(commands: PackageCommand[], lensScores?: Map<string, number>): {
|
|
40
|
+
hexagon: Partial<QualityMetrics>;
|
|
41
|
+
availableLenses: string[];
|
|
42
|
+
missingLenses: string[];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# 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;AAmE1F,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;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA0BrC;;;;;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,163 @@
|
|
|
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
|
+
'oxlint': 'linting',
|
|
10
|
+
// Type checking tools
|
|
11
|
+
'typescript': 'types',
|
|
12
|
+
'flow': 'types',
|
|
13
|
+
// Testing tools
|
|
14
|
+
'test': 'tests',
|
|
15
|
+
'jest': 'tests',
|
|
16
|
+
'vitest': 'tests',
|
|
17
|
+
'mocha': 'tests',
|
|
18
|
+
'playwright': 'tests',
|
|
19
|
+
'cypress': 'tests',
|
|
20
|
+
// Formatting tools
|
|
21
|
+
'prettier': 'formatting',
|
|
22
|
+
// Dead code detection
|
|
23
|
+
'knip': 'deadCode',
|
|
24
|
+
'depcheck': 'deadCode',
|
|
25
|
+
// Documentation
|
|
26
|
+
'typedoc': 'documentation',
|
|
27
|
+
'jsdoc': 'documentation',
|
|
28
|
+
'alexandria': 'documentation',
|
|
29
|
+
};
|
|
30
|
+
// Standard lenses we expect to find
|
|
31
|
+
const STANDARD_LENSES = ['eslint', 'typescript', 'test', 'prettier', 'knip', 'typedoc', 'alexandria'];
|
|
32
|
+
// Fallback patterns for common script names
|
|
33
|
+
const SCRIPT_TO_LENS_MAP = {
|
|
34
|
+
// Linting
|
|
35
|
+
'lint': 'eslint',
|
|
36
|
+
'eslint': 'eslint',
|
|
37
|
+
// Type checking
|
|
38
|
+
'typecheck': 'typescript',
|
|
39
|
+
'type-check': 'typescript',
|
|
40
|
+
'tsc': 'typescript',
|
|
41
|
+
// Testing
|
|
42
|
+
'test': 'test',
|
|
43
|
+
'jest': 'jest',
|
|
44
|
+
'vitest': 'vitest',
|
|
45
|
+
// Formatting
|
|
46
|
+
'format': 'prettier',
|
|
47
|
+
'prettier': 'prettier',
|
|
48
|
+
// Dead code
|
|
49
|
+
'knip': 'knip',
|
|
50
|
+
'unused': 'knip',
|
|
51
|
+
// Documentation
|
|
52
|
+
'docs': 'alexandria',
|
|
53
|
+
'alexandria': 'alexandria',
|
|
54
|
+
'typedoc': 'typedoc',
|
|
55
|
+
};
|
|
56
|
+
export class QualityMetricsCalculator {
|
|
57
|
+
/**
|
|
58
|
+
* Detect lens commands from package commands
|
|
59
|
+
*/
|
|
60
|
+
static detectLensCommands(commands) {
|
|
61
|
+
const detectedLenses = new Map();
|
|
62
|
+
// First pass: explicit lens: commands
|
|
63
|
+
for (const command of commands) {
|
|
64
|
+
if (command.name.startsWith('lens:')) {
|
|
65
|
+
const parts = command.name.split(':');
|
|
66
|
+
if (parts.length >= 3) {
|
|
67
|
+
const lensId = parts[1];
|
|
68
|
+
const operation = parts[2];
|
|
69
|
+
if (!detectedLenses.has(lensId)) {
|
|
70
|
+
detectedLenses.set(lensId, {
|
|
71
|
+
lensId,
|
|
72
|
+
operations: new Set()
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
detectedLenses.get(lensId).operations.add(operation);
|
|
76
|
+
// Mark the command as a lens command
|
|
77
|
+
command.isLensCommand = true;
|
|
78
|
+
command.lensId = lensId;
|
|
79
|
+
command.lensOperation = operation;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Second pass: fallback detection if no explicit lens commands found
|
|
84
|
+
if (detectedLenses.size === 0) {
|
|
85
|
+
this.applyFallbackDetection(commands, detectedLenses);
|
|
86
|
+
}
|
|
87
|
+
return detectedLenses;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Apply fallback detection for common script patterns
|
|
91
|
+
*/
|
|
92
|
+
static applyFallbackDetection(commands, detectedLenses) {
|
|
93
|
+
for (const command of commands) {
|
|
94
|
+
const lensId = SCRIPT_TO_LENS_MAP[command.name];
|
|
95
|
+
if (lensId) {
|
|
96
|
+
if (!detectedLenses.has(lensId)) {
|
|
97
|
+
detectedLenses.set(lensId, {
|
|
98
|
+
lensId,
|
|
99
|
+
operations: new Set()
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Infer operation type from command name
|
|
103
|
+
const operation = command.name.includes('coverage') ? 'coverage' : 'check';
|
|
104
|
+
detectedLenses.get(lensId).operations.add(operation);
|
|
105
|
+
// Mark the command
|
|
106
|
+
command.isLensCommand = true;
|
|
107
|
+
command.lensId = lensId;
|
|
108
|
+
command.lensOperation = operation;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Calculate quality metrics from detected lenses
|
|
114
|
+
* @param detectedLenses - Map of detected lens IDs to lens info
|
|
115
|
+
* @param lensScores - Optional map of lens IDs to real quality scores (0-100)
|
|
116
|
+
* @returns Partial quality metrics hexagon with scores for available lenses
|
|
117
|
+
*/
|
|
118
|
+
static calculateMetrics(detectedLenses, lensScores) {
|
|
119
|
+
const metrics = {};
|
|
120
|
+
for (const [lensId] of detectedLenses) {
|
|
121
|
+
const metricKey = LENS_TO_METRIC_MAP[lensId];
|
|
122
|
+
if (metricKey) {
|
|
123
|
+
// Use real score if provided
|
|
124
|
+
const score = lensScores?.get(lensId);
|
|
125
|
+
if (score !== undefined) {
|
|
126
|
+
metrics[metricKey] = score;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return metrics;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get list of available lenses
|
|
134
|
+
*/
|
|
135
|
+
static getAvailableLenses(detectedLenses) {
|
|
136
|
+
return Array.from(detectedLenses.keys());
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get list of missing standard lenses
|
|
140
|
+
*/
|
|
141
|
+
static getMissingLenses(detectedLenses) {
|
|
142
|
+
const availableLenses = new Set(detectedLenses.keys());
|
|
143
|
+
return STANDARD_LENSES.filter(lens => !availableLenses.has(lens));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Full calculation - convenience method
|
|
147
|
+
* @param commands - Package commands to analyze
|
|
148
|
+
* @param lensScores - Optional map of lens IDs to real quality scores (0-100)
|
|
149
|
+
* @returns Quality profile with hexagon, available lenses, and missing lenses
|
|
150
|
+
*/
|
|
151
|
+
static calculateQualityProfile(commands, lensScores) {
|
|
152
|
+
const detectedLenses = this.detectLensCommands(commands);
|
|
153
|
+
const hexagon = this.calculateMetrics(detectedLenses, lensScores);
|
|
154
|
+
const availableLenses = this.getAvailableLenses(detectedLenses);
|
|
155
|
+
const missingLenses = this.getMissingLenses(detectedLenses);
|
|
156
|
+
return {
|
|
157
|
+
hexagon,
|
|
158
|
+
availableLenses,
|
|
159
|
+
missingLenses
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=QualityMetricsCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QualityMetricsCalculator.js","sourceRoot":"","sources":["../../src/helpers/QualityMetricsCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|