Skip to content

Commit 45f4d4d

Browse files
wip - config introduction
1 parent 25e1e83 commit 45f4d4d

File tree

14 files changed

+138
-10
lines changed

14 files changed

+138
-10
lines changed

packages/core/src/generators/component-definition.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export const generateComponentDefinition = (
5555
if (modelName !== type) {
5656
acc.push({
5757
name: modelName,
58+
factoryMethod: '',
5859
model,
5960
imports,
6061
});

packages/core/src/generators/imports.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
GeneratorMutator,
66
GeneratorVerbOptions,
77
GetterPropType,
8+
OutputModelFactoryMethodsMode,
89
} from '../types';
910
import { camel, upath } from '../utils';
1011

@@ -14,12 +15,16 @@ export const generateImports = ({
1415
isRootKey,
1516
specsName,
1617
specKey: currentSpecKey,
18+
factoryMethodOutput,
19+
factoryMethodPrefix
1720
}: {
1821
imports: GeneratorImport[];
1922
target: string;
2023
isRootKey: boolean;
2124
specsName: Record<string, string>;
2225
specKey: string;
26+
factoryMethodOutput?: (typeof OutputModelFactoryMethodsMode)[keyof typeof OutputModelFactoryMethodsMode];
27+
factoryMethodPrefix?: string;
2328
}) => {
2429
if (!imports.length) {
2530
return '';
@@ -47,9 +52,14 @@ export const generateImports = ({
4752
} } from \'./${upath.join(path, camel(name))}\';`;
4853
}
4954

50-
return `import { create${name}, ${name}${
55+
let mainImport = `import ${!values ? 'type ' : ''}{ ${name}${
5156
alias ? ` as ${alias}` : ''
52-
} } from \'./${camel(name)}\';`;
57+
}${factoryMethodOutput == OutputModelFactoryMethodsMode.SINGLE ? `${factoryMethodPrefix}${name}` : ''} } from \'./${camel(name)}\';`;
58+
if (factoryMethodOutput == OutputModelFactoryMethodsMode.SPLIT) {
59+
let factoryMethodImport = `import { ${factoryMethodPrefix}${name} } from \'./${camel(name)}.factory\';`;
60+
mainImport += '\n' + factoryMethodImport;
61+
}
62+
return mainImport;
5363
})
5464
.join('\n');
5565
};

packages/core/src/generators/interface.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SchemaObject } from 'openapi3-ts/oas30';
22
import { getScalar } from '../getters';
3-
import { ContextSpecs } from '../types';
3+
import { ContextSpecs, OutputModelFactoryMethodsMode } from '../types';
44
import { jsDoc } from '../utils';
55

66
/**
@@ -53,18 +53,27 @@ export const generateInterface = ({
5353
} else {
5454
model += `export type ${name} = ${scalar.value};\n`;
5555
}
56-
model += `export function create${name}(): ${name} ${scalar.factoryMethodValue}\n`;
57-
5856
// Filter out imports that refer to the type defined in current file (OpenAPI recursive schema definitions)
5957
const externalModulesImportsOnly = scalar.imports.filter(
6058
(importName) => importName.name !== name,
6159
);
6260

61+
let factoryMethod: string = '';
62+
if (context?.output.modelFactoryMethods) {
63+
let factoryMethodPrefix = context?.output.override?.modelFactoryMethods?.factoryMethodPrefix!;
64+
factoryMethod = `export function ${factoryMethodPrefix}${name}(): ${name} ${scalar.factoryMethodValue}\n`;
65+
if (context?.output.override?.modelFactoryMethods?.outputMode == OutputModelFactoryMethodsMode.SINGLE) {
66+
model += factoryMethod;
67+
factoryMethod = '';
68+
}
69+
}
70+
6371
return [
6472
...scalar.schemas,
6573
{
6674
name,
6775
model,
76+
factoryMethod,
6877
imports: externalModulesImportsOnly,
6978
},
7079
];

packages/core/src/generators/parameter-definition.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export const generateParameterDefinition = (
2929
if (!schema.schema || imports.length) {
3030
acc.push({
3131
name: modelName,
32+
factoryMethod: '',
3233
imports: imports.length
3334
? [
3435
{
@@ -63,6 +64,7 @@ export const generateParameterDefinition = (
6364
if (modelName !== resolvedObject.value) {
6465
acc.push({
6566
name: modelName,
67+
factoryMethod: '',
6668
model,
6769
imports: resolvedObject.imports,
6870
});

packages/core/src/generators/schema-definition.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export const generateSchemasDefinition = (
127127

128128
acc.push(...resolvedValue.schemas, {
129129
name: schemaName,
130+
factoryMethod: '',
130131
model: output,
131132
imports,
132133
});

packages/core/src/getters/combine.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ export const combineSchemas = ({
193193
})),
194194
],
195195
model: newEnum,
196+
factoryMethod: '',
196197
name: name,
197198
},
198199
],

packages/core/src/getters/props.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export const getProps = ({
9696
required: true,
9797
schema: {
9898
name: parameterTypeName,
99+
factoryMethod: '',
99100
model: namedParametersTypeDefinition,
100101
imports: params.flatMap((property) => property.imports),
101102
},

packages/core/src/getters/query-params.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const getQueryParamsTypes = (
8282
imports: [{ name: enumName }],
8383
schemas: [
8484
...resolvedValue.schemas,
85-
{ name: enumName, model: enumValue, imports: resolvedValue.imports },
85+
{ name: enumName, model: enumValue, factoryMethod: '', imports: resolvedValue.imports },
8686
],
8787
originalSchema: resolvedValue.originalSchema,
8888
};
@@ -125,6 +125,7 @@ export const getQueryParams = ({
125125

126126
const schema = {
127127
name,
128+
factoryMethod: '',
128129
model: `export type ${name} = {\n${type}\n};\n`,
129130
imports,
130131
};

packages/core/src/resolvers/object.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const resolveObjectOriginal = ({
3636
...resolvedValue.schemas,
3737
{
3838
name: propName,
39+
factoryMethod: `export function ${context.output.override.modelFactoryMethods?.factoryMethodPrefix}${propName}(): ${propName}${resolvedValue.factoryMethodValue}`,
3940
model: `${doc}export type ${propName} = ${resolvedValue.value};\n`,
4041
imports: resolvedValue.imports,
4142
},
@@ -55,14 +56,19 @@ const resolveObjectOriginal = ({
5556
resolvedValue.originalSchema?.['x-enumNames'],
5657
context.output.override.useNativeEnums,
5758
);
59+
const factoryMethodValue = context?.output.override?.useTypeOverInterfaces
60+
? `${propName}[${resolvedValue.value.split(' | ')[0]}]`
61+
: `${resolvedValue.value.split(' | ')[0]}`;
62+
5863

5964
return {
6065
value: propName,
61-
factoryMethodValue: `${propName}[${resolvedValue.value.split(' | ')[0]}]`,
66+
factoryMethodValue,
6267
imports: [{ name: propName }],
6368
schemas: [
6469
...resolvedValue.schemas,
6570
{
71+
factoryMethod: '',
6672
name: propName,
6773
model: doc + enumValue,
6874
imports: resolvedValue.imports,

packages/core/src/resolvers/value.ts

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

4545
return {
4646
value: resolvedImport.name,
47-
factoryMethodValue: `create${resolvedImport.name}()`,
47+
factoryMethodValue: `${context.output.override.modelFactoryMethods?.factoryMethodPrefix}${resolvedImport.name}()`,
4848
imports: [
4949
{
5050
name: resolvedImport.name,

0 commit comments

Comments
 (0)