@principal-ai/codebase-composition 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -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 +286 -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 +46 -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 +169 -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 +388 -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 +810 -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 +180 -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 +32 -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 +7 -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 +3 -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 +23 -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 +39 -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 +361 -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 +21 -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 +380 -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 +14 -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 +10 -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 +391 -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 +7 -0
- package/dist/services/index.js.map +1 -0
- package/dist/types/file-system.d.ts +7 -0
- package/dist/types/file-system.d.ts.map +1 -0
- package/dist/types/file-system.js +7 -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 +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +187 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +7 -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 +3 -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 +7 -0
- package/dist/types/workspace-boundaries.js.map +1 -0
- package/package.json +42 -0
- package/src/index.ts +62 -0
- package/src/modules/DependencyLayerModule.ts +329 -0
- package/src/modules/FileSystemModule.ts +65 -0
- package/src/modules/FileTypeLayerModule.ts +199 -0
- package/src/modules/FrameworkLayerModule.ts +437 -0
- package/src/modules/PackageLayerModule.ts +979 -0
- package/src/modules/TypeExtractionModule.test.ts +340 -0
- package/src/modules/TypeExtractionModule.ts +180 -0
- package/src/modules/VersionControlLayerModule.ts +31 -0
- package/src/modules/__fixtures__/typescript-packages/complex-types/package.json +6 -0
- package/src/modules/__fixtures__/typescript-packages/complex-types/src/index.ts +6 -0
- package/src/modules/__fixtures__/typescript-packages/complex-types/src/models/category.ts +15 -0
- package/src/modules/__fixtures__/typescript-packages/complex-types/src/models/product.ts +48 -0
- package/src/modules/__fixtures__/typescript-packages/javascript-only/index.js +18 -0
- package/src/modules/__fixtures__/typescript-packages/javascript-only/package.json +5 -0
- package/src/modules/__fixtures__/typescript-packages/simple-types/index.ts +53 -0
- package/src/modules/__fixtures__/typescript-packages/simple-types/package.json +6 -0
- package/src/modules/extractors/README.md +55 -0
- package/src/modules/extractors/TypeScriptExtractor.ts +409 -0
- package/src/modules/index.ts +13 -0
- package/src/providers/GitVersionControlProvider.ts +500 -0
- package/src/providers/PackageManagerApiProvider.ts +108 -0
- package/src/providers/README.md +88 -0
- package/src/providers/index.ts +17 -0
- package/src/services/FilesystemService.ts +530 -0
- package/src/services/index.ts +2 -0
- package/src/types/file-system.ts +11 -0
- package/src/types/index.ts +24 -0
- package/src/types/layer-types.ts +264 -0
- package/src/types/version-control-layer.ts +87 -0
- package/src/types/workspace-boundaries.ts +17 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-types.d.ts","sourceRoot":"","sources":["../../src/types/layer-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-types.js","sourceRoot":"","sources":["../../src/types/layer-types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { BaseLayer, FilePattern } from './layer-types';
|
|
2
|
+
/**
|
|
3
|
+
* Version Control Layer - provides VCS-specific functionality
|
|
4
|
+
* including ignore patterns, tracked files, and VCS metadata
|
|
5
|
+
*/
|
|
6
|
+
export interface VersionControlLayer extends BaseLayer {
|
|
7
|
+
type: 'version-control';
|
|
8
|
+
vcsData: {
|
|
9
|
+
system: 'git' | 'svn' | 'mercurial' | 'perforce' | 'unknown';
|
|
10
|
+
repositoryRoot: string;
|
|
11
|
+
remotes?: Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
url: string;
|
|
14
|
+
type: 'fetch' | 'push' | 'both';
|
|
15
|
+
}>;
|
|
16
|
+
currentBranch?: string;
|
|
17
|
+
currentRevision?: string;
|
|
18
|
+
ignorePatterns: VersionControlIgnorePattern[];
|
|
19
|
+
status?: {
|
|
20
|
+
trackedFiles?: string[];
|
|
21
|
+
untrackedFiles?: string[];
|
|
22
|
+
modifiedFiles?: string[];
|
|
23
|
+
stagedFiles?: string[];
|
|
24
|
+
conflictedFiles?: string[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Represents an ignore pattern from version control
|
|
30
|
+
*/
|
|
31
|
+
export interface VersionControlIgnorePattern extends FilePattern {
|
|
32
|
+
source: string;
|
|
33
|
+
negated?: boolean;
|
|
34
|
+
directoryOnly?: boolean;
|
|
35
|
+
scope?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Interface for version control providers
|
|
39
|
+
*/
|
|
40
|
+
export interface VersionControlProvider {
|
|
41
|
+
detect(directoryPath: string): Promise<boolean>;
|
|
42
|
+
getRepositoryRoot(directoryPath: string): Promise<string | null>;
|
|
43
|
+
createLayer(repositoryRoot: string): Promise<VersionControlLayer>;
|
|
44
|
+
extractIgnorePatterns(repositoryRoot: string): Promise<VersionControlIgnorePattern[]>;
|
|
45
|
+
getCurrentBranch(repositoryRoot: string): Promise<string | null>;
|
|
46
|
+
getCurrentRevision(repositoryPath: string): Promise<string | null>;
|
|
47
|
+
getRemotes(repositoryRoot: string): Promise<Array<{
|
|
48
|
+
name: string;
|
|
49
|
+
url: string;
|
|
50
|
+
type: 'fetch' | 'push' | 'both';
|
|
51
|
+
}>>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=version-control-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-control-layer.d.ts","sourceRoot":"","sources":["../../src/types/version-control-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,iBAAiB,CAAC;IAExB,OAAO,EAAE;QAEP,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;QAG7D,cAAc,EAAE,MAAM,CAAC;QAGvB,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;SACjC,CAAC,CAAC;QAGH,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QAGzB,cAAc,EAAE,2BAA2B,EAAE,CAAC;QAG9C,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;YAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;YACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5B,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAE9D,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IAErC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGhD,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAGjE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAGlE,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAGtF,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjE,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAGnE,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CACzC,KAAK,CAAC;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;KACjC,CAAC,CACH,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-control-layer.js","sourceRoot":"","sources":["../../src/types/version-control-layer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal workspace boundary type for backwards compatibility
|
|
3
|
+
* This is a stub - the full implementation can be added later if needed
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkspaceBoundary {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
rootPath?: string;
|
|
9
|
+
packageJsonPath: string;
|
|
10
|
+
isRoot: boolean;
|
|
11
|
+
packageData?: {
|
|
12
|
+
name?: string;
|
|
13
|
+
version?: string;
|
|
14
|
+
workspaces?: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=workspace-boundaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-boundaries.d.ts","sourceRoot":"","sources":["../../src/types/workspace-boundaries.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal workspace boundary type for backwards compatibility
|
|
4
|
+
* This is a stub - the full implementation can be added later if needed
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
//# sourceMappingURL=workspace-boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-boundaries.js","sourceRoot":"","sources":["../../src/types/workspace-boundaries.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@principal-ai/codebase-composition",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Codebase decomposition into semantic layers",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"src",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "bun build:clean && bun build:ts",
|
|
15
|
+
"build:clean": "rm -rf dist",
|
|
16
|
+
"build:ts": "bun run tsc",
|
|
17
|
+
"dev": "bun run tsc --watch",
|
|
18
|
+
"test": "bun test",
|
|
19
|
+
"typecheck": "tsc --noEmit"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@principal-ai/repository-abstraction": "^0.1.0",
|
|
23
|
+
"ignore": "^5.3.0",
|
|
24
|
+
"js-toml": "^1.0.0",
|
|
25
|
+
"pip-requirements-js": "^0.2.1",
|
|
26
|
+
"typescript": "^5.0.4"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/bun": "latest",
|
|
30
|
+
"@types/node": "^22.0.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/principal-ai/principle-md.git",
|
|
36
|
+
"directory": "packages/codebase-composition"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "restricted",
|
|
40
|
+
"registry": "https://registry.npmjs.org/"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Main export file for layers module
|
|
2
|
+
|
|
3
|
+
// Types
|
|
4
|
+
export type {
|
|
5
|
+
FilePattern,
|
|
6
|
+
FileSet,
|
|
7
|
+
BaseLayer,
|
|
8
|
+
PackageCommand,
|
|
9
|
+
ConfigFile,
|
|
10
|
+
PackageLayer,
|
|
11
|
+
FileSystemFilterLayer,
|
|
12
|
+
VersionControlLayer,
|
|
13
|
+
VersionControlIgnorePattern,
|
|
14
|
+
VersionControlProvider,
|
|
15
|
+
FileInfo,
|
|
16
|
+
DirectoryInfo,
|
|
17
|
+
FileTree,
|
|
18
|
+
FileSystemTree, // Alias for backward compatibility
|
|
19
|
+
ExtractedType,
|
|
20
|
+
PackageTypes,
|
|
21
|
+
TypeDefinitionLayer,
|
|
22
|
+
TypeExtractor,
|
|
23
|
+
} from './types';
|
|
24
|
+
|
|
25
|
+
// Modules
|
|
26
|
+
export {
|
|
27
|
+
FileTypeLayerModule,
|
|
28
|
+
PackageLayerModule,
|
|
29
|
+
VersionControlLayerFactory,
|
|
30
|
+
DependencyLayerModule,
|
|
31
|
+
FrameworkLayerModule,
|
|
32
|
+
FileSystemModule,
|
|
33
|
+
TypeExtractionModule,
|
|
34
|
+
} from './modules';
|
|
35
|
+
export type {
|
|
36
|
+
FileTypeInfo,
|
|
37
|
+
FileSystemModuleConfig,
|
|
38
|
+
FileSystemLoadResult,
|
|
39
|
+
TypeExtractionOptions,
|
|
40
|
+
TypeScriptExtractionOptions,
|
|
41
|
+
} from './modules';
|
|
42
|
+
export { TypeScriptExtractor } from './modules';
|
|
43
|
+
|
|
44
|
+
// Services
|
|
45
|
+
export { FilesystemService } from './services';
|
|
46
|
+
|
|
47
|
+
// Providers
|
|
48
|
+
export { GitVersionControlProvider, PackageManagerApiProvider } from './providers';
|
|
49
|
+
export type {
|
|
50
|
+
FileSystemAdapter,
|
|
51
|
+
GitAdapter,
|
|
52
|
+
ShellAdapter,
|
|
53
|
+
PackageManager,
|
|
54
|
+
PackageVersionInfo,
|
|
55
|
+
VersionCheckResult,
|
|
56
|
+
VulnerabilityInfo,
|
|
57
|
+
VulnerabilityCheckResult,
|
|
58
|
+
LicenseInfo,
|
|
59
|
+
LicenseCheckResult,
|
|
60
|
+
DependencyCheckProgress,
|
|
61
|
+
BatchCheckOptions,
|
|
62
|
+
} from './providers';
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { DependencyLayer, PackageLayer, FileSet } from '../types/layer-types';
|
|
2
|
+
|
|
3
|
+
interface DependencyInfo {
|
|
4
|
+
name: string;
|
|
5
|
+
versions: Map<string, Set<string>>; // version -> set of package names using it
|
|
6
|
+
isDev: Set<string>; // packages where it's a dev dependency
|
|
7
|
+
isPeer: Set<string>; // packages where it's a peer dependency
|
|
8
|
+
isProd: Set<string>; // packages where it's a production dependency
|
|
9
|
+
packagePaths: Map<string, string>; // package name -> path
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class DependencyLayerModule {
|
|
13
|
+
/**
|
|
14
|
+
* Create dependency layers from package layers
|
|
15
|
+
*/
|
|
16
|
+
createDependencyLayers(packageLayers: PackageLayer[]): DependencyLayer[] {
|
|
17
|
+
const dependencyMap = new Map<string, DependencyInfo>();
|
|
18
|
+
|
|
19
|
+
// Collect all dependencies from all packages
|
|
20
|
+
packageLayers.forEach(packageLayer => {
|
|
21
|
+
const { dependencies, devDependencies, peerDependencies } = packageLayer.packageData;
|
|
22
|
+
const packageName = packageLayer.packageData.name;
|
|
23
|
+
const packagePath = packageLayer.packageData.path;
|
|
24
|
+
|
|
25
|
+
// Process production dependencies
|
|
26
|
+
Object.entries(dependencies).forEach(([depName, version]) => {
|
|
27
|
+
this.addDependency(dependencyMap, depName, version, packageName, packagePath, 'prod');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Process dev dependencies
|
|
31
|
+
Object.entries(devDependencies).forEach(([depName, version]) => {
|
|
32
|
+
this.addDependency(dependencyMap, depName, version, packageName, packagePath, 'dev');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Process peer dependencies
|
|
36
|
+
Object.entries(peerDependencies).forEach(([depName, version]) => {
|
|
37
|
+
this.addDependency(dependencyMap, depName, version, packageName, packagePath, 'peer');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Convert to DependencyLayer array
|
|
42
|
+
const dependencyLayers: DependencyLayer[] = [];
|
|
43
|
+
|
|
44
|
+
dependencyMap.forEach((depInfo, depName) => {
|
|
45
|
+
// For each unique version of this dependency
|
|
46
|
+
depInfo.versions.forEach((packageNames, version) => {
|
|
47
|
+
const declaredIn = Array.from(packageNames);
|
|
48
|
+
const isDev = declaredIn.every(pkg => depInfo.isDev.has(pkg));
|
|
49
|
+
const isPeer = declaredIn.some(pkg => depInfo.isPeer.has(pkg));
|
|
50
|
+
|
|
51
|
+
// Create file patterns for all package.json files that declare this dependency
|
|
52
|
+
const patterns = declaredIn.map(pkgName => {
|
|
53
|
+
const path = depInfo.packagePaths.get(pkgName) || '.';
|
|
54
|
+
return {
|
|
55
|
+
type: 'exact' as const,
|
|
56
|
+
pattern: path === '.' ? 'package.json' : `${path}/package.json`,
|
|
57
|
+
description: `${pkgName} package manifest`,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Create the source file set
|
|
62
|
+
const sourceFileSet: FileSet = {
|
|
63
|
+
id: `dep-source-${depName}-${version}`,
|
|
64
|
+
name: 'Package manifests',
|
|
65
|
+
patterns,
|
|
66
|
+
matchedFiles: patterns.map(p => p.pattern),
|
|
67
|
+
fileCount: patterns.length,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Determine the dependency type for the ID
|
|
71
|
+
const depType = isPeer ? 'peer' : isDev ? 'dev' : 'prod';
|
|
72
|
+
|
|
73
|
+
const layer: DependencyLayer = {
|
|
74
|
+
id: `dependency-${depType}-${depName}-${version.replace(/[^a-zA-Z0-9]/g, '-')}`,
|
|
75
|
+
name: depName,
|
|
76
|
+
type: 'dependency',
|
|
77
|
+
enabled: false, // Dependencies are not enabled by default
|
|
78
|
+
derivedFrom: {
|
|
79
|
+
fileSets: [sourceFileSet],
|
|
80
|
+
derivationType: 'content',
|
|
81
|
+
description: `${depName}@${version} ${isPeer ? 'peer ' : ''}${isDev ? 'dev ' : ''}dependency`,
|
|
82
|
+
contentExtraction: {
|
|
83
|
+
method: 'parse',
|
|
84
|
+
parser: {
|
|
85
|
+
format: 'json',
|
|
86
|
+
paths: this.getJsonPaths(depName, isDev, isPeer, declaredIn, depInfo),
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
dependencyData: {
|
|
91
|
+
name: depName,
|
|
92
|
+
version,
|
|
93
|
+
isDev,
|
|
94
|
+
isPeer,
|
|
95
|
+
declaredIn: declaredIn.map(pkgName => {
|
|
96
|
+
// Find the package layer ID
|
|
97
|
+
const packageLayer = packageLayers.find(p => p.packageData.name === pkgName);
|
|
98
|
+
return packageLayer?.id || `package-${pkgName}`;
|
|
99
|
+
}),
|
|
100
|
+
sourceFile: sourceFileSet,
|
|
101
|
+
},
|
|
102
|
+
color: this.getDependencyColor(depName, isDev, isPeer),
|
|
103
|
+
icon: this.getDependencyIcon(depName),
|
|
104
|
+
pillar: 'foundationHealth',
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
dependencyLayers.push(layer);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Sort by dependency name and version
|
|
112
|
+
return dependencyLayers.sort((a, b) => {
|
|
113
|
+
const nameCompare = a.name.localeCompare(b.name);
|
|
114
|
+
if (nameCompare !== 0) return nameCompare;
|
|
115
|
+
return a.dependencyData.version.localeCompare(b.dependencyData.version);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Add a dependency to the map
|
|
121
|
+
*/
|
|
122
|
+
private addDependency(
|
|
123
|
+
dependencyMap: Map<string, DependencyInfo>,
|
|
124
|
+
depName: string,
|
|
125
|
+
version: string,
|
|
126
|
+
packageName: string,
|
|
127
|
+
packagePath: string,
|
|
128
|
+
type: 'prod' | 'dev' | 'peer',
|
|
129
|
+
): void {
|
|
130
|
+
if (!dependencyMap.has(depName)) {
|
|
131
|
+
dependencyMap.set(depName, {
|
|
132
|
+
name: depName,
|
|
133
|
+
versions: new Map(),
|
|
134
|
+
isDev: new Set(),
|
|
135
|
+
isPeer: new Set(),
|
|
136
|
+
isProd: new Set(),
|
|
137
|
+
packagePaths: new Map(),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const depInfo = dependencyMap.get(depName)!;
|
|
142
|
+
|
|
143
|
+
// Add version
|
|
144
|
+
if (!depInfo.versions.has(version)) {
|
|
145
|
+
depInfo.versions.set(version, new Set());
|
|
146
|
+
}
|
|
147
|
+
depInfo.versions.get(version)!.add(packageName);
|
|
148
|
+
|
|
149
|
+
// Track package path
|
|
150
|
+
depInfo.packagePaths.set(packageName, packagePath);
|
|
151
|
+
|
|
152
|
+
// Track dependency type
|
|
153
|
+
if (type === 'dev') {
|
|
154
|
+
depInfo.isDev.add(packageName);
|
|
155
|
+
} else if (type === 'peer') {
|
|
156
|
+
depInfo.isPeer.add(packageName);
|
|
157
|
+
} else {
|
|
158
|
+
depInfo.isProd.add(packageName);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Get JSON paths for content extraction
|
|
164
|
+
*/
|
|
165
|
+
private getJsonPaths(
|
|
166
|
+
depName: string,
|
|
167
|
+
isDev: boolean,
|
|
168
|
+
isPeer: boolean,
|
|
169
|
+
declaredIn: string[],
|
|
170
|
+
depInfo: DependencyInfo,
|
|
171
|
+
): string[] {
|
|
172
|
+
const paths: string[] = [];
|
|
173
|
+
|
|
174
|
+
declaredIn.forEach(pkgName => {
|
|
175
|
+
if (depInfo.isProd.has(pkgName)) {
|
|
176
|
+
paths.push(`dependencies.${depName}`);
|
|
177
|
+
}
|
|
178
|
+
if (depInfo.isDev.has(pkgName)) {
|
|
179
|
+
paths.push(`devDependencies.${depName}`);
|
|
180
|
+
}
|
|
181
|
+
if (depInfo.isPeer.has(pkgName)) {
|
|
182
|
+
paths.push(`peerDependencies.${depName}`);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
return paths;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Get color for dependency based on type and name
|
|
191
|
+
*/
|
|
192
|
+
private getDependencyColor(name: string, isDev: boolean, isPeer: boolean): string {
|
|
193
|
+
// Special colors for common dependencies
|
|
194
|
+
const specialColors: Record<string, string> = {
|
|
195
|
+
react: '#61DAFB',
|
|
196
|
+
'react-dom': '#61DAFB',
|
|
197
|
+
vue: '#4FC08D',
|
|
198
|
+
angular: '#DD0031',
|
|
199
|
+
typescript: '#3178C6',
|
|
200
|
+
webpack: '#8DD6F9',
|
|
201
|
+
vite: '#646CFF',
|
|
202
|
+
jest: '#C21325',
|
|
203
|
+
eslint: '#4B32C3',
|
|
204
|
+
prettier: '#F7B93E',
|
|
205
|
+
lodash: '#3492FF',
|
|
206
|
+
axios: '#5A29E4',
|
|
207
|
+
express: '#000000',
|
|
208
|
+
next: '#000000',
|
|
209
|
+
tailwindcss: '#06B6D4',
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
if (specialColors[name]) {
|
|
213
|
+
return specialColors[name];
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Default colors by type
|
|
217
|
+
if (isPeer) return '#FF6B6B'; // Red for peer deps
|
|
218
|
+
if (isDev) return '#FFA94D'; // Orange for dev deps
|
|
219
|
+
return '#40C057'; // Green for production deps
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Get icon for dependency based on its name/type
|
|
224
|
+
*/
|
|
225
|
+
private getDependencyIcon(name: string): string {
|
|
226
|
+
// Special icons for common dependency types
|
|
227
|
+
if (name.includes('react')) return 'atom';
|
|
228
|
+
if (name.includes('vue')) return 'triangle';
|
|
229
|
+
if (name.includes('angular')) return 'hexagon';
|
|
230
|
+
if (name.includes('test') || name.includes('jest') || name.includes('mocha'))
|
|
231
|
+
return 'test-tube';
|
|
232
|
+
if (name.includes('lint') || name.includes('eslint')) return 'check-circle';
|
|
233
|
+
if (name.includes('prettier')) return 'palette';
|
|
234
|
+
if (name.includes('webpack') || name.includes('rollup') || name.includes('parcel'))
|
|
235
|
+
return 'package';
|
|
236
|
+
if (name.includes('vite') || name.includes('esbuild')) return 'zap';
|
|
237
|
+
if (name.includes('typescript') || name.includes('ts-')) return 'file-code';
|
|
238
|
+
if (name.includes('css') || name.includes('style')) return 'palette';
|
|
239
|
+
if (name.includes('axios') || name.includes('fetch')) return 'download';
|
|
240
|
+
if (name.includes('express') || name.includes('koa') || name.includes('fastify'))
|
|
241
|
+
return 'server';
|
|
242
|
+
if (name.includes('database') || name.includes('mongo') || name.includes('postgres'))
|
|
243
|
+
return 'database';
|
|
244
|
+
if (name.includes('auth') || name.includes('jwt')) return 'lock';
|
|
245
|
+
if (name.includes('log') || name.includes('winston') || name.includes('pino'))
|
|
246
|
+
return 'file-text';
|
|
247
|
+
if (name.includes('cli') || name.includes('commander')) return 'terminal';
|
|
248
|
+
if (name.includes('crypto') || name.includes('bcrypt')) return 'shield';
|
|
249
|
+
|
|
250
|
+
// Default icon
|
|
251
|
+
return 'package-2';
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Analyze dependency health and conflicts
|
|
256
|
+
*/
|
|
257
|
+
analyzeDependencyHealth(dependencyLayers: DependencyLayer[]): {
|
|
258
|
+
duplicates: Array<{ name: string; versions: string[]; packages: Record<string, string> }>;
|
|
259
|
+
outdated: Array<{ name: string; version: string; latest?: string }>;
|
|
260
|
+
security: Array<{ name: string; severity: 'low' | 'medium' | 'high'; issue: string }>;
|
|
261
|
+
} {
|
|
262
|
+
const health = {
|
|
263
|
+
duplicates: [] as Array<{
|
|
264
|
+
name: string;
|
|
265
|
+
versions: string[];
|
|
266
|
+
packages: Record<string, string>;
|
|
267
|
+
}>,
|
|
268
|
+
outdated: [] as Array<{ name: string; version: string; latest?: string }>,
|
|
269
|
+
security: [] as Array<{ name: string; severity: 'low' | 'medium' | 'high'; issue: string }>,
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// Group by dependency name
|
|
273
|
+
const depGroups = new Map<string, DependencyLayer[]>();
|
|
274
|
+
dependencyLayers.forEach(layer => {
|
|
275
|
+
const name = layer.dependencyData.name;
|
|
276
|
+
if (!depGroups.has(name)) {
|
|
277
|
+
depGroups.set(name, []);
|
|
278
|
+
}
|
|
279
|
+
depGroups.get(name)!.push(layer);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// Check for duplicates (multiple versions)
|
|
283
|
+
depGroups.forEach((layers, name) => {
|
|
284
|
+
if (layers.length > 1) {
|
|
285
|
+
const versions = new Set<string>();
|
|
286
|
+
const packages: Record<string, string> = {};
|
|
287
|
+
|
|
288
|
+
layers.forEach(layer => {
|
|
289
|
+
versions.add(layer.dependencyData.version);
|
|
290
|
+
// Get package names from declaredIn
|
|
291
|
+
layer.dependencyData.declaredIn.forEach((layerId: string) => {
|
|
292
|
+
// Extract package name from layer ID (e.g., "package-node-root" -> "root")
|
|
293
|
+
const pkgName = layerId.replace(/^package-[^-]+-/, '');
|
|
294
|
+
packages[pkgName] = layer.dependencyData.version;
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
if (versions.size > 1) {
|
|
299
|
+
health.duplicates.push({
|
|
300
|
+
name,
|
|
301
|
+
versions: Array.from(versions),
|
|
302
|
+
packages,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Check for known security issues (simplified)
|
|
309
|
+
const knownIssues: Record<string, { severity: 'low' | 'medium' | 'high'; issue: string }> = {
|
|
310
|
+
minimist: {
|
|
311
|
+
severity: 'high',
|
|
312
|
+
issue: 'Prototype pollution vulnerability in versions < 1.2.6',
|
|
313
|
+
},
|
|
314
|
+
lodash: { severity: 'medium', issue: 'Multiple vulnerabilities in versions < 4.17.21' },
|
|
315
|
+
'node-fetch': { severity: 'high', issue: 'Denial of service in versions < 2.6.7' },
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
depGroups.forEach((layers, name) => {
|
|
319
|
+
if (knownIssues[name]) {
|
|
320
|
+
health.security.push({
|
|
321
|
+
name,
|
|
322
|
+
...knownIssues[name],
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
return health;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { FileTree } from '@principal-ai/repository-abstraction';
|
|
2
|
+
import { FileSystemFilterLayer, BaseLayer } from '../types';
|
|
3
|
+
|
|
4
|
+
export interface FileSystemModuleConfig {
|
|
5
|
+
directoryPath: string;
|
|
6
|
+
buildFileSystemTree: (path: string, filters?: FileSystemFilterLayer[]) => Promise<FileTree>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface FileSystemLoadResult {
|
|
10
|
+
fileSystemTree: FileTree;
|
|
11
|
+
filterLayers: FileSystemFilterLayer[];
|
|
12
|
+
warningLayers: BaseLayer[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Module responsible for loading and filtering the filesystem tree
|
|
17
|
+
* Now simplified to use globby-based filtering
|
|
18
|
+
*/
|
|
19
|
+
export class FileSystemModule {
|
|
20
|
+
private config: FileSystemModuleConfig;
|
|
21
|
+
|
|
22
|
+
constructor(config: FileSystemModuleConfig) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Load the filesystem tree using globby-based filtering
|
|
28
|
+
*/
|
|
29
|
+
async loadFileSystemTree(): Promise<FileSystemLoadResult> {
|
|
30
|
+
const { directoryPath, buildFileSystemTree } = this.config;
|
|
31
|
+
|
|
32
|
+
if (!directoryPath || !buildFileSystemTree) {
|
|
33
|
+
throw new Error('Directory path and buildFileSystemTree function are required');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
console.log('[FileSystemModule] Loading filesystem tree with globby...');
|
|
37
|
+
|
|
38
|
+
// Build filesystem tree (adapters handle .gitignore filtering via globby)
|
|
39
|
+
const fileSystemTree = await buildFileSystemTree(directoryPath, []);
|
|
40
|
+
|
|
41
|
+
console.log('[FileSystemModule] Tree loaded:', {
|
|
42
|
+
totalFiles: fileSystemTree?.allFiles?.length || 0,
|
|
43
|
+
totalDirectories: fileSystemTree?.allDirectories?.length || 0,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
fileSystemTree,
|
|
48
|
+
filterLayers: [], // No filter layers - globby handles everything
|
|
49
|
+
warningLayers: [],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Get all package.json files from the filesystem tree
|
|
55
|
+
*/
|
|
56
|
+
getPackageJsonFiles(fileSystemTree: FileTree): Array<{ path: string }> {
|
|
57
|
+
if (!fileSystemTree?.allFiles) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return fileSystemTree.allFiles
|
|
62
|
+
.filter(file => file.path?.endsWith('package.json'))
|
|
63
|
+
.map(file => ({ path: file.path! }));
|
|
64
|
+
}
|
|
65
|
+
}
|