Skip to content

Commit c9e3bb3

Browse files
wip - config introduction
1 parent 71e74f6 commit c9e3bb3

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

packages/core/src/generators/interface.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ export const generateInterface = ({
5353
} else {
5454
model += `export type ${name} = ${scalar.value};\n`;
5555
}
56-
model += `export function create${name}(): ${name} ${scalar.factoryMethodValue}\n`;
56+
if (context?.output.override.modelFactoryMethods?.outputMode == 'inline') {
57+
let factoryMethodPrefix = context?.output.override.modelFactoryMethods?.factoryMethodPrefix!;
58+
model += `export function ${factoryMethodPrefix}${name}(): ${name} ${scalar.factoryMethodValue}\n`;
59+
} else {
60+
model += '// export to separate file\n';
61+
}
5762

5863
// Filter out imports that refer to the type defined in current file (OpenAPI recursive schema definitions)
5964
const externalModulesImportsOnly = scalar.imports.filter(

packages/core/src/types.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export type NormalizedOutputOptions = {
4949
override: NormalizedOverrideOutput;
5050
client: OutputClient | OutputClientFunc;
5151
httpClient: OutputHttpClient;
52+
modelFactoryMethods?: boolean;
5253
clean: boolean | string[];
5354
prettier: boolean;
5455
tslint: boolean;
@@ -68,6 +69,16 @@ export type NormalizedParamsSerializerOptions = {
6869
qs?: Record<string, any>;
6970
};
7071

72+
export const OutputModelFactoryMethodsMode = {
73+
INLINE: 'inline',
74+
ISOLATED: 'isolated',
75+
} as const;
76+
77+
export type NormalizedModelFactoryMethodsOptions = {
78+
factoryMethodPrefix?: string;
79+
outputMode?: (typeof OutputModelFactoryMethodsMode)[keyof typeof OutputModelFactoryMethodsMode];
80+
};
81+
7182
export type NormalizedOverrideOutput = {
7283
title?: (title: string) => string;
7384
transformer?: OutputTransformer;
@@ -81,6 +92,7 @@ export type NormalizedOverrideOutput = {
8192
formUrlEncoded: boolean | NormalizedMutator;
8293
paramsSerializer?: NormalizedMutator;
8394
paramsSerializerOptions?: NormalizedParamsSerializerOptions;
95+
modelFactoryMethods?: NormalizedModelFactoryMethodsOptions;
8496
components: {
8597
schemas: {
8698
suffix: string;
@@ -173,6 +185,7 @@ export type OutputOptions = {
173185
override?: OverrideOutput;
174186
client?: OutputClient | OutputClientFunc;
175187
httpClient?: OutputHttpClient;
188+
modelFactoryMethods?: boolean;
176189
clean?: boolean | string[];
177190
prettier?: boolean;
178191
tslint?: boolean;
@@ -321,6 +334,11 @@ export type ParamsSerializerOptions = {
321334
qs?: Record<string, any>;
322335
};
323336

337+
export type ModelFactoryMethodsOptions = {
338+
factoryMethodPrefix?: string;
339+
outputMode?: (typeof OutputModelFactoryMethodsMode)[keyof typeof OutputModelFactoryMethodsMode];
340+
};
341+
324342
export type OverrideOutput = {
325343
title?: (title: string) => string;
326344
transformer?: OutputTransformer;
@@ -334,6 +352,7 @@ export type OverrideOutput = {
334352
formUrlEncoded?: boolean | Mutator;
335353
paramsSerializer?: Mutator;
336354
paramsSerializerOptions?: ParamsSerializerOptions;
355+
modelFactoryMethods?: ModelFactoryMethodsOptions;
337356
components?: {
338357
schemas?: {
339358
suffix?: string;
@@ -596,6 +615,7 @@ export interface GlobalOptions {
596615
mock?: boolean | GlobalMockOptions;
597616
client?: OutputClient;
598617
httpClient?: OutputHttpClient;
618+
modelFactoryMethods?: boolean;
599619
mode?: OutputMode;
600620
tsconfig?: string | Tsconfig;
601621
packageJson?: string;

packages/orval/src/utils/options.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export const normalizeOptions = async (
7878
workspace,
7979
);
8080

81-
const { clean, prettier, client, httpClient, mode, tslint, biome } =
81+
const { clean, prettier, client, httpClient, modelFactoryMethods, mode, tslint, biome } =
8282
globalOptions;
8383

8484
const tsconfig = await loadTsconfig(
@@ -143,6 +143,8 @@ export const normalizeOptions = async (
143143
fileExtension: outputOptions.fileExtension || defaultFileExtension,
144144
workspace: outputOptions.workspace ? outputWorkspace : undefined,
145145
client: outputOptions.client ?? client ?? OutputClient.AXIOS_FUNCTIONS,
146+
modelFactoryMethods:
147+
outputOptions.modelFactoryMethods ?? modelFactoryMethods ?? false,
146148
httpClient:
147149
outputOptions.httpClient ?? httpClient ?? OutputHttpClient.AXIOS,
148150
mode: normalizeOutputMode(outputOptions.mode ?? mode),
@@ -208,6 +210,14 @@ export const normalizeOptions = async (
208210
? outputOptions.override?.header!
209211
: getDefaultFilesHeader,
210212
requestOptions: outputOptions.override?.requestOptions ?? true,
213+
modelFactoryMethods: {
214+
factoryMethodPrefix:
215+
outputOptions.override?.modelFactoryMethods?.factoryMethodPrefix
216+
?? 'new',
217+
outputMode:
218+
outputOptions.override?.modelFactoryMethods?.outputMode
219+
?? 'isolated'
220+
},
211221
components: {
212222
schemas: {
213223
suffix: RefComponentSuffix.schemas,

0 commit comments

Comments
 (0)