Skip to content

Commit 614727c

Browse files
committed
refactor: convert ProjectContext class to functional API
- Replace static-only class with standalone functions - Export getProjectId, getProjectName, and clearProjectCache - Update all imports and references across codebase - Fixes Biome noStaticOnlyClass warning - All tests passing (100% coverage maintained)
1 parent 3b9cb80 commit 614727c

File tree

4 files changed

+163
-163
lines changed

4 files changed

+163
-163
lines changed

packages/core/src/__tests__/context.test.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it } from 'bun:test';
22
import { mkdirSync, writeFileSync } from 'node:fs';
33
import { tmpdir } from 'node:os';
44
import { join } from 'node:path';
5-
import { ProjectContext } from '../context';
5+
import { clearProjectCache, getProjectId, getProjectName } from '../context';
66

77
describe('ProjectContext', () => {
88
let testDir: string;
@@ -11,13 +11,13 @@ describe('ProjectContext', () => {
1111
// Create a temporary test directory
1212
testDir = join(tmpdir(), `cortex-test-${Date.now()}`);
1313
mkdirSync(testDir, { recursive: true });
14-
ProjectContext.clearCache();
14+
clearProjectCache();
1515
});
1616

1717
describe('getProjectId', () => {
1818
it('should return a consistent hash for the same directory', () => {
19-
const id1 = ProjectContext.getProjectId(testDir);
20-
const id2 = ProjectContext.getProjectId(testDir);
19+
const id1 = getProjectId(testDir);
20+
const id2 = getProjectId(testDir);
2121

2222
expect(id1).toBe(id2);
2323
expect(id1).toHaveLength(16); // SHA-256 truncated to 16 chars
@@ -30,8 +30,8 @@ describe('ProjectContext', () => {
3030
mkdirSync(dir1, { recursive: true });
3131
mkdirSync(dir2, { recursive: true });
3232

33-
const id1 = ProjectContext.getProjectId(dir1);
34-
const id2 = ProjectContext.getProjectId(dir2);
33+
const id1 = getProjectId(dir1);
34+
const id2 = getProjectId(dir2);
3535

3636
expect(id1).not.toBe(id2);
3737
});
@@ -44,8 +44,8 @@ describe('ProjectContext', () => {
4444
mkdirSync(subDir, { recursive: true });
4545

4646
// Both should return the same ID (git root)
47-
const rootId = ProjectContext.getProjectId(testDir);
48-
const subId = ProjectContext.getProjectId(subDir);
47+
const rootId = getProjectId(testDir);
48+
const subId = getProjectId(subDir);
4949

5050
expect(rootId).toBe(subId);
5151
});
@@ -58,7 +58,7 @@ describe('ProjectContext', () => {
5858

5959
writeFileSync(join(testDir, 'package.json'), JSON.stringify(packageJson));
6060

61-
const id = ProjectContext.getProjectId(testDir);
61+
const id = getProjectId(testDir);
6262

6363
expect(id).toBeTruthy();
6464
expect(id).toHaveLength(16);
@@ -75,8 +75,8 @@ describe('ProjectContext', () => {
7575
const subDir = join(testDir, 'deeply', 'nested', 'folder');
7676
mkdirSync(subDir, { recursive: true });
7777

78-
const rootId = ProjectContext.getProjectId(testDir);
79-
const nestedId = ProjectContext.getProjectId(subDir);
78+
const rootId = getProjectId(testDir);
79+
const nestedId = getProjectId(subDir);
8080

8181
expect(rootId).toBe(nestedId);
8282
});
@@ -91,12 +91,12 @@ describe('ProjectContext', () => {
9191

9292
writeFileSync(join(testDir, 'package.json'), JSON.stringify(packageJson));
9393

94-
const name = ProjectContext.getProjectName(testDir);
94+
const name = getProjectName(testDir);
9595
expect(name).toBe('my-awesome-project');
9696
});
9797

9898
it('should return directory name when no package.json', () => {
99-
const name = ProjectContext.getProjectName(testDir);
99+
const name = getProjectName(testDir);
100100
expect(name).toBeTruthy();
101101
expect(name).not.toBe('unknown-project');
102102
});
@@ -105,31 +105,31 @@ describe('ProjectContext', () => {
105105
const gitDir = join(testDir, '.git');
106106
mkdirSync(gitDir, { recursive: true });
107107

108-
const name = ProjectContext.getProjectName(testDir);
108+
const name = getProjectName(testDir);
109109
expect(name).toBeTruthy();
110110
expect(name).not.toBe('unknown-project');
111111
});
112112
});
113113

114114
describe('caching', () => {
115115
it('should cache project IDs', () => {
116-
const id1 = ProjectContext.getProjectId(testDir);
116+
const id1 = getProjectId(testDir);
117117

118118
// Modify the directory (add a file)
119119
writeFileSync(join(testDir, 'test.txt'), 'test');
120120

121-
const id2 = ProjectContext.getProjectId(testDir);
121+
const id2 = getProjectId(testDir);
122122

123123
// Should return cached value
124124
expect(id1).toBe(id2);
125125
});
126126

127127
it('should clear cache when requested', () => {
128-
const id1 = ProjectContext.getProjectId(testDir);
128+
const id1 = getProjectId(testDir);
129129

130-
ProjectContext.clearCache();
130+
clearProjectCache();
131131

132-
const id2 = ProjectContext.getProjectId(testDir);
132+
const id2 = getProjectId(testDir);
133133

134134
// Should still be the same (deterministic)
135135
expect(id1).toBe(id2);

0 commit comments

Comments
 (0)