Skip to content

Commit cdf09d2

Browse files
authored
Merge pull request #28 from EdenK/master
Add property case option
2 parents 5c0dad2 + 93aedca commit cdf09d2

File tree

4 files changed

+185
-148
lines changed

4 files changed

+185
-148
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
node_modules/
22
test/generated/
33
generated/
4-
dist/
4+
55
*.wsdl
66
*.wso
77
*.xsd

src/generator.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@ import {
88
PropertySignatureStructure,
99
StructureKind,
1010
} from "ts-morph";
11+
import { ModelPropertyNaming } from ".";
1112
import { Definition, Method, ParsedWsdl } from "./models/parsed-wsdl";
1213
import { Logger } from "./utils/logger";
1314

1415
export interface GeneratorOptions {
1516
emitDefinitionsOnly: boolean;
17+
modelPropertyNaming: ModelPropertyNaming
1618
}
1719

1820
const defaultOptions: GeneratorOptions = {
19-
emitDefinitionsOnly: false
21+
emitDefinitionsOnly: false,
22+
modelPropertyNaming: null
2023
};
2124

2225
/**
@@ -63,7 +66,8 @@ function generateDefinitionFile(
6366
definition: null | Definition,
6467
defDir: string,
6568
stack: string[],
66-
generated: Definition[]
69+
generated: Definition[],
70+
options: GeneratorOptions
6771
): void {
6872
const defName = definition.name;
6973
const defFilePath = path.join(defDir, `${defName}.ts`);
@@ -76,14 +80,24 @@ function generateDefinitionFile(
7680
const definitionImports: OptionalKind<ImportDeclarationStructure>[] = [];
7781
const definitionProperties: PropertySignatureStructure[] = [];
7882
for (const prop of definition.properties) {
83+
if(options.modelPropertyNaming) {
84+
switch (options.modelPropertyNaming) {
85+
case ModelPropertyNaming.camelCase:
86+
prop.name = camelcase(prop.name);
87+
break;
88+
case ModelPropertyNaming.PascalCase:
89+
prop.name = camelcase(prop.name, { pascalCase: true });
90+
break;
91+
}
92+
}
7993
if (prop.kind === "PRIMITIVE") {
8094
// e.g. string
8195
definitionProperties.push(createProperty(prop.name, prop.type, prop.description, prop.isArray));
8296
} else if (prop.kind === "REFERENCE") {
8397
// e.g. Items
8498
if (!generated.includes(prop.ref)) {
8599
// Wasn't generated yet
86-
generateDefinitionFile(project, prop.ref, defDir, [...stack, prop.ref.name], generated);
100+
generateDefinitionFile(project, prop.ref, defDir, [...stack, prop.ref.name], generated, options);
87101
}
88102
// If a property is of the same type as its parent type, don't add import
89103
if(prop.ref.name !== definition.name) {
@@ -150,7 +164,8 @@ export async function generate(parsedWsdl: ParsedWsdl, outDir: string, options:
150164
method.paramDefinition,
151165
defDir,
152166
[method.paramDefinition.name],
153-
allDefinitions
167+
allDefinitions,
168+
mergedOptions
154169
);
155170
addSafeImport(clientImports, `./definitions/${method.paramDefinition.name}`, method.paramDefinition.name);
156171
}
@@ -164,7 +179,8 @@ export async function generate(parsedWsdl: ParsedWsdl, outDir: string, options:
164179
method.returnDefinition,
165180
defDir,
166181
[method.returnDefinition.name],
167-
allDefinitions
182+
allDefinitions,
183+
mergedOptions
168184
);
169185
addSafeImport(clientImports, `./definitions/${method.returnDefinition.name}`, method.returnDefinition.name);
170186
}

src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import { Logger } from "./utils/logger";
77
export { generate } from "./generator";
88
export { parseWsdl } from "./parser";
99

10+
export enum ModelPropertyNaming {
11+
'camelCase' = 'camelCase',
12+
'PascalCase' = 'PascalCase'
13+
}
1014
export interface Options {
1115
/**
1216
* Generate only Definitions
@@ -33,6 +37,7 @@ export interface Options {
3337
* @default 64
3438
*/
3539
maxRecursiveDefinitionName: number;
40+
modelPropertyNaming: ModelPropertyNaming
3641
/**
3742
* Print verbose logs
3843
* @default false
@@ -56,6 +61,7 @@ export const defaultOptions: Options = {
5661
modelNameSuffix: "",
5762
caseInsensitiveNames: false,
5863
maxRecursiveDefinitionName: 64,
64+
modelPropertyNaming: null
5965
//
6066
verbose: false,
6167
quiet: false,

0 commit comments

Comments
 (0)