Skip to content

Commit 581b773

Browse files
orval/core - factory method generated
1 parent fb32cf5 commit 581b773

File tree

10 files changed

+27
-1
lines changed

10 files changed

+27
-1
lines changed

packages/core/src/generators/imports.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export const generateImports = ({
4747
} } from \'./${upath.join(path, camel(name))}\';`;
4848
}
4949

50-
return `import ${!values ? 'type ' : ''}{ ${name}${
50+
return `import { create${name}, ${name}${
5151
alias ? ` as ${alias}` : ''
5252
} } from \'./${camel(name)}\';`;
5353
})

packages/core/src/generators/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export const generateInterface = ({
5353
} else {
5454
model += `export type ${name} = ${scalar.value};\n`;
5555
}
56+
model += `export function create${name}(): ${name} ${scalar.factoryMethodValue}\n`;
5657

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

packages/core/src/getters/array.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const getArray = ({
4444
}
4545
return {
4646
type: 'array',
47+
factoryMethodValue: `[]`,
4748
isEnum: false,
4849
isRef: false,
4950
value: `[${resolvedObjects.map((o) => o.value).join(', ')}]`,
@@ -66,6 +67,7 @@ export const getArray = ({
6667
? `(${resolvedObject.value})[]`
6768
: `${resolvedObject.value}[]`
6869
}`,
70+
factoryMethodValue: `[]`,
6971
imports: resolvedObject.imports,
7072
schemas: resolvedObject.schemas,
7173
isEnum: false,

packages/core/src/getters/combine.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ export const combineSchemas = ({
179179
value:
180180
`typeof ${pascal(name)}[keyof typeof ${pascal(name)}] ${nullable};` +
181181
newEnum,
182+
factoryMethodValue: `{}`,
182183
imports: resolvedData.imports.map<GeneratorImport>((toImport) => ({
183184
...toImport,
184185
values: true,
@@ -195,6 +196,7 @@ export const combineSchemas = ({
195196

196197
return {
197198
value: value + nullable,
199+
factoryMethodValue: `{}`,
198200
imports: resolvedValue
199201
? [...resolvedData.imports, ...resolvedValue.imports]
200202
: resolvedData.imports,

packages/core/src/getters/object.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const getObject = ({
3030
const { name, specKey } = getRefInfo(item.$ref, context);
3131
return {
3232
value: name + nullable,
33+
factoryMethodValue: `''`,
3334
imports: [{ name, specKey }],
3435
schemas: [],
3536
isEnum: false,
@@ -114,12 +115,14 @@ export const getObject = ({
114115
const isReadOnly = item.readOnly || (schema as SchemaObject).readOnly;
115116
if (!index) {
116117
acc.value += '{';
118+
acc.factoryMethodValue += '{\n return {';
117119
}
118120

119121
const doc = jsDoc(schema as SchemaObject, true);
120122

121123
acc.hasReadonlyProps ||= isReadOnly || false;
122124
acc.imports.push(...resolvedValue.imports);
125+
acc.factoryMethodValue += `\n ${getKey(key)}: ${resolvedValue.factoryMethodValue},`;
123126
acc.value += `\n ${doc ? `${doc} ` : ''}${
124127
isReadOnly ? 'readonly ' : ''
125128
}${getKey(key)}${isRequired ? '' : '?'}: ${resolvedValue.value};`;
@@ -139,6 +142,7 @@ export const getObject = ({
139142
}
140143
} else {
141144
acc.value += '\n}';
145+
acc.factoryMethodValue += '\n };\n}';
142146
}
143147

144148
acc.value += nullable;
@@ -150,6 +154,7 @@ export const getObject = ({
150154
imports: [],
151155
schemas: [],
152156
value: '',
157+
factoryMethodValue: '',
153158
isEnum: false,
154159
type: 'object' as SchemaType,
155160
isRef: false,
@@ -165,6 +170,7 @@ export const getObject = ({
165170
if (isBoolean(item.additionalProperties)) {
166171
return {
167172
value: `{ [key: string]: any }` + nullable,
173+
factoryMethodValue: `{}`,
168174
imports: [],
169175
schemas: [],
170176
isEnum: false,
@@ -180,6 +186,7 @@ export const getObject = ({
180186
});
181187
return {
182188
value: `{[key: string]: ${resolvedValue.value}}` + nullable,
189+
factoryMethodValue: `{}`,
183190
imports: resolvedValue.imports ?? [],
184191
schemas: resolvedValue.schemas ?? [],
185192
isEnum: false,
@@ -193,6 +200,7 @@ export const getObject = ({
193200
if (itemWithConst.const) {
194201
return {
195202
value: `'${itemWithConst.const}'` + nullable,
203+
factoryMethodValue: `null`,
196204
imports: [],
197205
schemas: [],
198206
isEnum: false,
@@ -206,6 +214,7 @@ export const getObject = ({
206214
value:
207215
(item.type === 'object' ? '{ [key: string]: any }' : 'unknown') +
208216
nullable,
217+
factoryMethodValue: `${item.type === 'object' ? '{}' : 'null'}`,
209218
imports: [],
210219
schemas: [],
211220
isEnum: false,

packages/core/src/getters/res-req-types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export const getResReqTypes = (
7272
return [
7373
{
7474
value: name,
75+
factoryMethodValue: name,
7576
imports: [{ name, specKey, schemaName }],
7677
schemas: [],
7778
type: 'unknown',
@@ -115,6 +116,7 @@ export const getResReqTypes = (
115116
return [
116117
{
117118
value: name,
119+
factoryMethodValue: name,
118120
imports: [{ name, specKey, schemaName }],
119121
schemas: [],
120122
type: 'unknown',
@@ -202,6 +204,7 @@ export const getResReqTypes = (
202204
return [
203205
{
204206
value: defaultType,
207+
factoryMethodValue: `''`,
205208
imports: [],
206209
schemas: [],
207210
type: defaultType,

packages/core/src/getters/scalar.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export const getScalar = ({
4848

4949
return {
5050
value: value + nullable,
51+
factoryMethodValue: `0`,
5152
isEnum,
5253
type: 'number',
5354
schemas: [],
@@ -62,6 +63,7 @@ export const getScalar = ({
6263
case 'boolean':
6364
return {
6465
value: 'boolean' + nullable,
66+
factoryMethodValue: `false`,
6567
type: 'boolean',
6668
isEnum: false,
6769
schemas: [],
@@ -111,6 +113,7 @@ export const getScalar = ({
111113

112114
return {
113115
value: value + nullable,
116+
factoryMethodValue: `''`,
114117
isEnum,
115118
type: 'string',
116119
imports: [],
@@ -125,6 +128,7 @@ export const getScalar = ({
125128
case 'null':
126129
return {
127130
value: 'null',
131+
factoryMethodValue: `null`,
128132
isEnum: false,
129133
type: 'null',
130134
imports: [],
@@ -145,6 +149,7 @@ export const getScalar = ({
145149

146150
return {
147151
value: value + nullable,
152+
factoryMethodValue: enumItems[0],
148153
isEnum: true,
149154
type: 'string',
150155
imports: [],

packages/core/src/resolvers/object.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const resolveObjectOriginal = ({
3030
) {
3131
return {
3232
value: propName,
33+
factoryMethodValue: `{}`,
3334
imports: [{ name: propName }],
3435
schemas: [
3536
...resolvedValue.schemas,
@@ -57,6 +58,7 @@ const resolveObjectOriginal = ({
5758

5859
return {
5960
value: propName,
61+
factoryMethodValue: `${propName}[${resolvedValue.value.split(' | ')[0]}]`,
6062
imports: [{ name: propName }],
6163
schemas: [
6264
...resolvedValue.schemas,

packages/core/src/resolvers/value.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const resolveValue = ({
4444

4545
return {
4646
value: resolvedImport.name,
47+
factoryMethodValue: `create${resolvedImport.name}()`,
4748
imports: [
4849
{
4950
name: resolvedImport.name,

packages/core/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,7 @@ export const SchemaType = {
879879

880880
export type ScalarValue = {
881881
value: string;
882+
factoryMethodValue: string;
882883
isEnum: boolean;
883884
hasReadonlyProps: boolean;
884885
type: SchemaType;

0 commit comments

Comments
 (0)