Skip to content

Commit 38cd8ea

Browse files
committed
fix(web): keep generated OpenAPI client out of lint
1 parent 9bfd067 commit 38cd8ea

12 files changed

Lines changed: 429 additions & 327 deletions

packages/app/biome.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"useIgnoreFile": false
77
},
88
"files": {
9-
"ignoreUnknown": false
9+
"ignoreUnknown": false,
10+
"includes": ["**", "!src/web/generated/**"]
1011
},
1112
"assist": {
1213
"enabled": false

packages/app/eslint.config.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,5 +304,5 @@ export default defineConfig(
304304
},
305305

306306
// 4) Глобальные игноры
307-
{ ignores: ['dist/**', 'build/**', 'coverage/**', '**/dist/**'] },
307+
{ ignores: ['dist/**', 'build/**', 'coverage/**', '**/dist/**', 'src/web/generated/**'] },
308308
);

packages/app/src/web/api-create-project.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const createProjectAcceptedBody = (draft: CreateProjectDraft) => ({
2121
})
2222

2323
export const startCreateProject = (draft: CreateProjectDraft): Effect.Effect<CreateProjectAcceptedResponse, string> =>
24-
openApiJsonSchema(CreateProjectAcceptedResponseSchema, (client) => client.POST("/projects", {
25-
body: createProjectAcceptedBody(draft)
26-
}))
24+
openApiJsonSchema(CreateProjectAcceptedResponseSchema, (client) =>
25+
client.POST("/projects", {
26+
body: createProjectAcceptedBody(draft)
27+
}))

packages/app/src/web/api-database.ts

Lines changed: 62 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,24 @@ export const projectDatabaseExternalUrl = (forward: ProjectDatabaseForward): str
1616
`${forward.publicHost}:${forward.hostPort}`
1717

1818
export const loadProjectDatabaseProfiles = (projectId: string) =>
19-
openApiJsonSchema(ProjectDatabaseProfilesResponseSchema, (client) => client.GET("/projects/{projectId}/databases/profiles", {
20-
params: { path: { projectId } }
21-
})).pipe(
19+
openApiJsonSchema(
20+
ProjectDatabaseProfilesResponseSchema,
21+
(client) =>
22+
client.GET("/projects/{projectId}/databases/profiles", {
23+
params: { path: { projectId } }
24+
})
25+
).pipe(
2226
Effect.map((response) => response.profiles)
2327
)
2428

2529
export const loadProjectDatabaseForwards = (projectId: string) =>
26-
openApiJsonSchema(ProjectDatabaseForwardsResponseSchema, (client) => client.GET("/projects/{projectId}/databases/forwards", {
27-
params: { path: { projectId } }
28-
})).pipe(
30+
openApiJsonSchema(
31+
ProjectDatabaseForwardsResponseSchema,
32+
(client) =>
33+
client.GET("/projects/{projectId}/databases/forwards", {
34+
params: { path: { projectId } }
35+
})
36+
).pipe(
2937
Effect.map((response) => response.forwards)
3038
)
3139

@@ -34,55 +42,80 @@ export const saveProjectDatabaseProfile = (
3442
connectionString: string,
3543
label: string | null
3644
) =>
37-
openApiJsonSchema(ProjectDatabaseProfileResponseSchema, (client) => client.POST("/projects/{projectId}/databases/profiles", {
38-
body: { connectionString, label },
39-
params: { path: { projectId } }
40-
})).pipe(
45+
openApiJsonSchema(
46+
ProjectDatabaseProfileResponseSchema,
47+
(client) =>
48+
client.POST("/projects/{projectId}/databases/profiles", {
49+
body: { connectionString, label },
50+
params: { path: { projectId } }
51+
})
52+
).pipe(
4153
Effect.map((response) => response.profile)
4254
)
4355

4456
export const deleteProjectDatabaseProfile = (
4557
projectId: string,
4658
profileId: string
47-
) => openApiVoid((client) => client.DELETE("/projects/{projectId}/databases/profiles/{profileId}", {
48-
params: { path: { profileId, projectId } }
49-
}))
59+
) =>
60+
openApiVoid((client) =>
61+
client.DELETE("/projects/{projectId}/databases/profiles/{profileId}", {
62+
params: { path: { profileId, projectId } }
63+
})
64+
)
5065

5166
export const exposeProjectDatabaseProfile = (
5267
projectId: string,
5368
profileId: string
5469
) =>
55-
openApiJsonSchema(ProjectDatabaseForwardResponseSchema, (client) =>
56-
client.POST("/projects/{projectId}/databases/profiles/{profileId}/expose", {
57-
params: { path: { profileId, projectId } }
58-
})).pipe(
70+
openApiJsonSchema(
71+
ProjectDatabaseForwardResponseSchema,
72+
(client) =>
73+
client.POST("/projects/{projectId}/databases/profiles/{profileId}/expose", {
74+
params: { path: { profileId, projectId } }
75+
})
76+
).pipe(
5977
Effect.map((response) => response.forward)
6078
)
6179

6280
export const deleteProjectDatabaseForward = (
6381
projectId: string,
6482
profileId: string
65-
) => openApiVoid((client) => client.DELETE("/projects/{projectId}/databases/profiles/{profileId}/expose", {
66-
params: { path: { profileId, projectId } }
67-
}))
83+
) =>
84+
openApiVoid((client) =>
85+
client.DELETE("/projects/{projectId}/databases/profiles/{profileId}/expose", {
86+
params: { path: { profileId, projectId } }
87+
})
88+
)
6889

6990
export const loadProjectDatabaseSession = (projectId: string) =>
70-
openApiJsonSchema(ProjectDatabaseSessionResponseSchema, (client) => client.GET("/projects/{projectId}/databases/session", {
71-
params: { path: { projectId } }
72-
})).pipe(
91+
openApiJsonSchema(
92+
ProjectDatabaseSessionResponseSchema,
93+
(client) =>
94+
client.GET("/projects/{projectId}/databases/session", {
95+
params: { path: { projectId } }
96+
})
97+
).pipe(
7398
Effect.map((response) => response.session)
7499
)
75100

76101
export const openProjectDatabaseEditor = (projectId: string) =>
77-
openApiJsonSchema(ProjectDatabaseSessionResponseSchema, (client) => client.POST("/projects/{projectId}/databases/open", {
78-
params: { path: { projectId } }
79-
})).pipe(
102+
openApiJsonSchema(
103+
ProjectDatabaseSessionResponseSchema,
104+
(client) =>
105+
client.POST("/projects/{projectId}/databases/open", {
106+
params: { path: { projectId } }
107+
})
108+
).pipe(
80109
Effect.map((response) => response.session)
81110
)
82111

83112
export const restartProjectDatabaseEditor = (projectId: string) =>
84-
openApiJsonSchema(ProjectDatabaseSessionResponseSchema, (client) => client.POST("/projects/{projectId}/databases/restart", {
85-
params: { path: { projectId } }
86-
})).pipe(
113+
openApiJsonSchema(
114+
ProjectDatabaseSessionResponseSchema,
115+
(client) =>
116+
client.POST("/projects/{projectId}/databases/restart", {
117+
params: { path: { projectId } }
118+
})
119+
).pipe(
87120
Effect.map((response) => response.session)
88121
)

packages/app/src/web/api-project-core.ts

Lines changed: 56 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export type { ApplyProjectRequest, ProjectResourceLimitRequest } from "../shared
1010
type CreateProjectRequestDraft = CreateProjectDraft & ProjectResourceLimitRequest
1111

1212
const optionalProjectResourceFields = (request: ProjectResourceLimitRequest) => ({
13-
...(request.playwrightCpuLimit === undefined ? {} : { playwrightCpuLimit: request.playwrightCpuLimit }),
14-
...(request.playwrightRamLimit === undefined ? {} : { playwrightRamLimit: request.playwrightRamLimit })
13+
...(request.playwrightCpuLimit !== undefined && { playwrightCpuLimit: request.playwrightCpuLimit }),
14+
...(request.playwrightRamLimit !== undefined && { playwrightRamLimit: request.playwrightRamLimit })
1515
})
1616

1717
const applyProjectBody = (request: ApplyProjectRequest | undefined) => ({
18-
...(request?.cpuLimit === undefined ? {} : { cpuLimit: request.cpuLimit }),
19-
...(request?.gpu === undefined ? {} : { gpu: request.gpu }),
20-
...(request?.ramLimit === undefined ? {} : { ramLimit: request.ramLimit }),
21-
...(request === undefined ? {} : optionalProjectResourceFields(request))
18+
...(request?.cpuLimit !== undefined && { cpuLimit: request.cpuLimit }),
19+
...(request?.gpu !== undefined && { gpu: request.gpu }),
20+
...(request?.ramLimit !== undefined && { ramLimit: request.ramLimit }),
21+
...(request !== undefined && optionalProjectResourceFields(request))
2222
})
2323

2424
const createProjectBody = (draft: CreateProjectRequestDraft) => ({
@@ -38,62 +38,70 @@ const createProjectBody = (draft: CreateProjectRequestDraft) => ({
3838
})
3939

4040
export const loadProjectDetails = (projectId: string) =>
41-
openApiJsonSchema(ProjectResponseSchema, (client) => client.GET("/projects/{projectId}", {
42-
params: { path: { projectId } }
43-
})).pipe(
44-
Effect.map((response) => response.project)
45-
)
41+
openApiJsonSchema(ProjectResponseSchema, (client) =>
42+
client.GET("/projects/{projectId}", {
43+
params: { path: { projectId } }
44+
})).pipe(
45+
Effect.map((response) => response.project)
46+
)
4647

4748
export const loadProjectPs = (projectId: string) =>
48-
openApiJsonSchema(OutputResponseSchema, (client) => client.GET("/projects/{projectId}/ps", {
49-
params: { path: { projectId } }
50-
})).pipe(
51-
Effect.map((response) => response.output)
52-
)
49+
openApiJsonSchema(OutputResponseSchema, (client) =>
50+
client.GET("/projects/{projectId}/ps", {
51+
params: { path: { projectId } }
52+
})).pipe(
53+
Effect.map((response) => response.output)
54+
)
5355

5456
export const loadProjectLogs = (projectId: string) =>
55-
openApiJsonSchema(OutputResponseSchema, (client) => client.GET("/projects/{projectId}/logs", {
56-
params: { path: { projectId } }
57-
})).pipe(
58-
Effect.map((response) => response.output)
59-
)
57+
openApiJsonSchema(OutputResponseSchema, (client) =>
58+
client.GET("/projects/{projectId}/logs", {
59+
params: { path: { projectId } }
60+
})).pipe(
61+
Effect.map((response) => response.output)
62+
)
6063

6164
export const applyProject = (
6265
projectId: string,
6366
request?: ApplyProjectRequest
6467
) =>
65-
openApiJsonSchema(ProjectResponseSchema, (client) => client.POST("/projects/{projectId}/apply", {
66-
body: applyProjectBody(request),
67-
params: { path: { projectId } }
68-
})).pipe(
69-
Effect.map((response) => response.project)
70-
)
68+
openApiJsonSchema(ProjectResponseSchema, (client) =>
69+
client.POST("/projects/{projectId}/apply", {
70+
body: applyProjectBody(request),
71+
params: { path: { projectId } }
72+
})).pipe(
73+
Effect.map((response) => response.project)
74+
)
7175

7276
export const createProject = (draft: CreateProjectRequestDraft) =>
73-
openApiJsonSchema(ProjectResponseSchema, (client) => client.POST("/projects", {
74-
body: createProjectBody(draft)
75-
})).pipe(
76-
Effect.map((response) => response.project)
77-
)
77+
openApiJsonSchema(ProjectResponseSchema, (client) =>
78+
client.POST("/projects", {
79+
body: createProjectBody(draft)
80+
})).pipe(
81+
Effect.map((response) => response.project)
82+
)
7883

7984
export const upProject = (projectId: string) =>
80-
openApiJsonSchema(ProjectResponseSchema, (client) => client.POST("/projects/{projectId}/up", {
81-
body: { useManagedAuthorizedKeys: true },
82-
params: { path: { projectId } }
83-
})).pipe(
84-
Effect.map((response) => response.project)
85-
)
85+
openApiJsonSchema(ProjectResponseSchema, (client) =>
86+
client.POST("/projects/{projectId}/up", {
87+
body: { useManagedAuthorizedKeys: true },
88+
params: { path: { projectId } }
89+
})).pipe(
90+
Effect.map((response) => response.project)
91+
)
8692

8793
export const resumeProject = (projectId: string) =>
88-
openApiJsonSchema(ProjectResponseSchema, (client) => client.POST("/projects/{projectId}/resume", {
89-
params: { path: { projectId } }
90-
})).pipe(
91-
Effect.map((response) => response.project)
92-
)
94+
openApiJsonSchema(ProjectResponseSchema, (client) =>
95+
client.POST("/projects/{projectId}/resume", {
96+
params: { path: { projectId } }
97+
})).pipe(
98+
Effect.map((response) => response.project)
99+
)
93100

94101
export const suspendProject = (projectId: string) =>
95-
openApiJsonSchema(ProjectResponseSchema, (client) => client.POST("/projects/{projectId}/suspend", {
96-
params: { path: { projectId } }
97-
})).pipe(
98-
Effect.map((response) => response.project)
99-
)
102+
openApiJsonSchema(ProjectResponseSchema, (client) =>
103+
client.POST("/projects/{projectId}/suspend", {
104+
params: { path: { projectId } }
105+
})).pipe(
106+
Effect.map((response) => response.project)
107+
)
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
import { Effect } from "effect"
22

3-
import {
4-
ProjectPromptsResponseSchema,
5-
ProjectPromptUpdateResponseSchema
6-
} from "./api-schema.js"
3+
import { ProjectPromptsResponseSchema, ProjectPromptUpdateResponseSchema } from "./api-schema.js"
74
import type { ProjectPromptKind } from "./api-schema.js"
85
import { openApiJsonSchema } from "./openapi-client.js"
96

107
export const loadProjectPrompts = (projectId: string) =>
11-
openApiJsonSchema(ProjectPromptsResponseSchema, (client) => client.GET("/projects/{projectId}/prompts", {
12-
params: { path: { projectId } }
13-
})).pipe(
14-
Effect.map((response) => response.snapshot)
15-
)
8+
openApiJsonSchema(ProjectPromptsResponseSchema, (client) =>
9+
client.GET("/projects/{projectId}/prompts", {
10+
params: { path: { projectId } }
11+
})).pipe(
12+
Effect.map((response) => response.snapshot)
13+
)
1614

1715
export const writeProjectPrompt = (
1816
projectId: string,
1917
kind: ProjectPromptKind,
2018
content: string
2119
) =>
22-
openApiJsonSchema(ProjectPromptUpdateResponseSchema, (client) => client.PUT("/projects/{projectId}/prompts/{kind}", {
23-
body: { content },
24-
params: { path: { kind, projectId } }
25-
})).pipe(
26-
Effect.map((response) => response.snapshot)
27-
)
20+
openApiJsonSchema(ProjectPromptUpdateResponseSchema, (client) =>
21+
client.PUT("/projects/{projectId}/prompts/{kind}", {
22+
body: { content },
23+
params: { path: { kind, projectId } }
24+
})).pipe(
25+
Effect.map((response) => response.snapshot)
26+
)
2827

2928
export const deleteProjectPrompt = (
3029
projectId: string,
3130
kind: ProjectPromptKind
3231
) =>
33-
openApiJsonSchema(ProjectPromptsResponseSchema, (client) => client.DELETE("/projects/{projectId}/prompts/{kind}", {
34-
params: { path: { kind, projectId } }
35-
})).pipe(
36-
Effect.map((response) => response.snapshot)
37-
)
32+
openApiJsonSchema(ProjectPromptsResponseSchema, (client) =>
33+
client.DELETE("/projects/{projectId}/prompts/{kind}", {
34+
params: { path: { kind, projectId } }
35+
})).pipe(
36+
Effect.map((response) => response.snapshot)
37+
)

packages/app/src/web/api-share.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,12 @@ export const loadPanelCloudflareTunnel = () =>
5151
// INVARIANT: Returned state is decoded by PanelCloudflareTunnelResponseSchema.
5252
// COMPLEXITY: O(1) local work plus network IO and controller-side startup.
5353
export const startPanelCloudflareTunnel = (panelUrl: string) =>
54-
openApiJsonSchema(PanelCloudflareTunnelResponseSchema, (client) => client.POST("/cloudflare-tunnels/panel", {
55-
body: { panelUrl }
56-
})).pipe(
57-
Effect.map((response) => response.tunnel)
58-
)
54+
openApiJsonSchema(PanelCloudflareTunnelResponseSchema, (client) =>
55+
client.POST("/cloudflare-tunnels/panel", {
56+
body: { panelUrl }
57+
})).pipe(
58+
Effect.map((response) => response.tunnel)
59+
)
5960

6061
/**
6162
* Stops the controller-owned panel Cloudflare tunnel.

0 commit comments

Comments
 (0)