Skip to content

Commit da3921c

Browse files
committed
fix: use fs adaptor
1 parent 3684213 commit da3921c

File tree

3 files changed

+35
-19
lines changed

3 files changed

+35
-19
lines changed

packages/openapi-code-generator/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,6 @@ export async function generate(
8787
filenameConvention: config.filenameConvention,
8888
allowAny: config.tsAllowAny,
8989
serverImplementationMethod: config.tsServerImplementationMethod,
90+
fsAdaptor,
9091
})
9192
}

packages/openapi-code-generator/src/templates.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type {IFsAdaptor} from "./core/file-system/fs-adaptor"
12
import type {Input, OperationGroupStrategy} from "./core/input"
23
import type {CompilerOptions} from "./core/loaders/tsconfig.loader"
34
import type {IdentifierConvention} from "./core/utils"
@@ -19,6 +20,7 @@ export interface OpenapiGeneratorConfig {
1920
enableTypedBasePaths: boolean
2021
groupingStrategy: OperationGroupStrategy
2122
filenameConvention: IdentifierConvention
23+
fsAdaptor: IFsAdaptor
2224
}
2325

2426
export interface OpenapiTypescriptGeneratorConfig

packages/openapi-code-generator/src/typescript/server/typescript-nextjs/typescript-nextjs.generator.ts

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// biome-ignore lint/style/useNodejsImportProtocol: <explanation>
2-
import fs from "fs"
3-
// biome-ignore lint/style/useNodejsImportProtocol: <explanation>
42
import path from "path"
5-
import {Project} from "ts-morph"
3+
import {Project, type SourceFile} from "ts-morph"
4+
import type {IFsAdaptor} from "../../../core/file-system/fs-adaptor"
65
import type {CompilerOptions} from "../../../core/loaders/tsconfig.loader"
76
import {isTruthy} from "../../../core/utils"
87
import type {OpenapiTypescriptGeneratorConfig} from "../../../templates.types"
@@ -41,6 +40,7 @@ export async function generateTypescriptNextJS(
4140
const appDirectory = [".", "app", subDirectory]
4241
.filter(isTruthy)
4342
.join(path.sep)
43+
4444
const generatedDirectory = [".", "generated", subDirectory]
4545
.filter(isTruthy)
4646
.join(path.sep)
@@ -85,23 +85,12 @@ export async function generateTypescriptNextJS(
8585
routeToNextJSFilepath(group.name),
8686
)
8787

88-
const existing = fs.existsSync(
89-
path.join(emitter.config.destinationDirectory, nextJsAppRouterPath),
90-
)
91-
? fs
92-
.readFileSync(
93-
path.join(
94-
emitter.config.destinationDirectory,
95-
nextJsAppRouterPath,
96-
),
97-
"utf-8",
98-
)
99-
.toString()
100-
: ""
101-
const sourceFile = project.createSourceFile(
88+
const sourceFile = await loadExistingRouteImplementation({
89+
fsAdaptor: config.fsAdaptor,
90+
project,
91+
destinationDirectory: emitter.config.destinationDirectory,
10292
nextJsAppRouterPath,
103-
existing,
104-
)
93+
})
10594

10695
const nextJSAppRouterBuilder = new TypescriptNextjsAppRouterBuilder(
10796
nextJsAppRouterPath,
@@ -158,6 +147,30 @@ export async function generateTypescriptNextJS(
158147
])
159148
}
160149

150+
async function loadExistingRouteImplementation({
151+
fsAdaptor,
152+
project,
153+
destinationDirectory,
154+
nextJsAppRouterPath,
155+
}: {
156+
fsAdaptor: IFsAdaptor
157+
project: Project
158+
destinationDirectory: string
159+
nextJsAppRouterPath: string
160+
}): Promise<SourceFile> {
161+
const exists = await fsAdaptor.exists(
162+
path.join(destinationDirectory, nextJsAppRouterPath),
163+
)
164+
165+
const source = exists
166+
? await fsAdaptor.readFile(
167+
path.join(destinationDirectory, nextJsAppRouterPath),
168+
)
169+
: ""
170+
171+
return project.createSourceFile(nextJsAppRouterPath, source)
172+
}
173+
161174
function routeToNextJSFilepath(route: string): string {
162175
const parts = route
163176
.split("/")

0 commit comments

Comments
 (0)