Skip to content

Commit 0048ccf

Browse files
author
Hweinstock
committed
refactor(project): swap to class based implementation
1 parent a686c50 commit 0048ccf

5 files changed

Lines changed: 25 additions & 19 deletions

File tree

src/core/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type {
1111
} from "./types";
1212
import type { Logger } from "../logging";
1313
import type { ProjectManager } from "../handlers/project/types";
14-
import { createProjectManager } from "./project";
14+
import { FsProjectManager } from "./project";
1515

1616
export type {
1717
AwsClients,
@@ -53,7 +53,7 @@ export class CoreClient implements AwsClients {
5353
this.createIamClient = config.createIamClient;
5454
this.logger = config.logger;
5555

56-
this.projectManager = createProjectManager({
56+
this.projectManager = new FsProjectManager({
5757
logger: this.logger.child({ module: "projectManager" }),
5858
});
5959
}

src/core/project/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { createProjectManager } from "./manager";
1+
export { FsProjectManager } from "./manager";

src/core/project/manager.tsx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
1-
import type { ProjectManager } from "../../handlers/project/types";
1+
import type {
2+
CreateProjectInput,
3+
FindProjectInput,
4+
Project,
5+
ProjectManager,
6+
} from "../../handlers/project/types";
27
import type { Logger } from "../../logging";
38

4-
type CreateProjectManagerConfig = {
9+
type ProjectManagerConfig = {
510
logger: Logger;
611
};
712

813
/**
9-
* Creates a {@link ProjectManager} that relies on the local file system to manage access to projects.
14+
* An implementation of {@link ProjectManager} that relies on the local file system to manage access to projects.
1015
*/
11-
export function createProjectManager(_config: CreateProjectManagerConfig): ProjectManager {
12-
return {
13-
find: (_input) => {
14-
throw new Error(`ProjectManager.find is not implemented yet`);
15-
},
16-
create: (_input) => {
17-
throw new Error(`ProjectManager.create is not implemented yet`);
18-
},
19-
};
16+
export class FsProjectManager implements ProjectManager {
17+
constructor(_config: ProjectManagerConfig) {}
18+
19+
public find(_input: FindProjectInput): Promise<Project> {
20+
throw new Error(`ProjectManager.find is not implemented yet`);
21+
}
22+
23+
public create(_input: CreateProjectInput): Promise<Project> {
24+
throw new Error(`ProjectManager.create is not implemented yet`);
25+
}
2026
}

src/middleware/withProject.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { test, expect, describe } from "bun:test";
22
import { Router, createHandler } from "../router";
3-
import { createProjectManager } from "../core/project";
43
import { createSilentLogger } from "../testing";
54
import { withProject } from "./withProject";
5+
import { FsProjectManager } from "../core/project";
66

77
describe("withProject", () => {
88
test("throws not implemented", async () => {
9-
const projectManager = createProjectManager({ logger: createSilentLogger() });
9+
const projectManager = new FsProjectManager({ logger: createSilentLogger() });
1010

1111
const app = new Router("app", "test");
1212
app.use(withProject({ projectManager, cwd: "/some/path" }));

src/testing/TestCoreClient.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import type { Core } from "../handlers/types";
2828
import type { CoreHarnessClient, CreateHarnessInput } from "../handlers/harness/types";
2929
import type { CoreOptions } from "../core/types";
3030
import type { ProjectManager } from "../handlers/project/types";
31-
import { createProjectManager } from "../core/project";
3231
import type { Logger } from "../logging";
3332
import { createSilentLogger } from "./logging";
33+
import { FsProjectManager } from "../core/project";
3434

3535
// TestCoreClient is a hand-controllable `Core` for tests. It implements the same
3636
// interface the real CoreClient satisfies, so it drops straight into
@@ -418,6 +418,6 @@ export class TestCoreClient implements Core {
418418
readonly projectManager: ProjectManager;
419419

420420
constructor(options?: TestCoreClientOptions) {
421-
this.projectManager = createProjectManager({ logger: options?.logger ?? createSilentLogger() });
421+
this.projectManager = new FsProjectManager({ logger: options?.logger ?? createSilentLogger() });
422422
}
423423
}

0 commit comments

Comments
 (0)