1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| class DependencyManagement { packageTypes = { infrastructure: { name: 'infrastructure', description: 'Shared infrastructure components', dependencies: { dev: ['typescript', '@types/node'], prod: [] } },
shared: { name: 'shared', description: 'Common utilities and functions', dependencies: { dev: ['@types/jest', 'jest'], prod: [] } },
ui: { name: 'ui', description: 'Reusable UI components', dependencies: { dev: ['@storybook/*', '@types/react'], prod: ['react', 'react-dom', '@my-org/shared'] } },
feature: { name: 'feature', description: 'Business feature implementations', dependencies: { dev: [], prod: ['@my-org/shared', '@my-org/ui', '@my-org/entities'] } } };
versionStrategies = { fixed: { approach: '^1.2.3', useCase: 'tight integration required', pros: ['consistent behavior', 'easier debugging'], cons: ['less flexible', 'potential conflicts'] },
workspaceProtocol: { approach: 'workspace:*', useCase: 'internal packages only', pros: ['automatic linking', 'easy development'], cons: ['not for public publishing', 'requires workspace manager'] },
compatible: { approach: '~1.2.3', useCase: 'balanced approach', pros: ['controlled updates', 'backward compatibility'], cons: ['potential fragmentation', 'maintenance overhead'] } };
analyzeDependencies() { const dependencyGraph = { nodes: [], edges: [], cycles: [],
validate() { const cycles = this.detectCycles(); if (cycles.length > 0) { throw new Error(`Circular dependencies detected: ${cycles.join(', ')}`); }
this.validateLayeredArchitecture(); },
detectCycles() { return []; },
validateLayeredArchitecture() { } };
return dependencyGraph; } }
|