Skip to content

Commit 82fc6ae

Browse files
authored
Merge pull request #1734 from crycode-de/issue-1733
Fixed TypeResolver issue for negative number literal types
2 parents fba2b81 + b942878 commit 82fc6ae

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

packages/cli/src/metadataGeneration/typeResolver.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,10 @@ export class TypeResolver {
508508
return typeNode.literal.text;
509509
case ts.SyntaxKind.NumericLiteral:
510510
return parseFloat(typeNode.literal.text);
511+
case ts.SyntaxKind.PrefixUnaryExpression:
512+
// make sure to only handle the MinusToken here
513+
throwUnless((typeNode.literal as ts.PrefixUnaryExpression).operator === ts.SyntaxKind.MinusToken, new GenerateMetadataError(`Couldn't resolve literal node: ${typeNode.literal.getText()}`));
514+
return parseFloat(typeNode.literal.getText());
511515
case ts.SyntaxKind.NullKeyword:
512516
return null;
513517
default:

tests/fixtures/testModel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export interface TestModel extends Model {
7272
nullableUnionPrimitiveType?: 'String' | 1 | 20.0 | true | false | null;
7373
undefineableUnionPrimitiveType: 'String' | 1 | 20.0 | true | false | undefined;
7474
singleFloatLiteralType?: 3.1415;
75+
negativeNumberLiteralType?: -1;
7576
dateValue?: Date;
7677
optionalString?: string;
7778
anyType?: any;

tests/unit/swagger/definitionsGeneration/definitions.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,15 @@ describe('Definition generation', () => {
500500
expect(propertySchema.enum).to.have.length(1, `for property ${propertyName}.enum`);
501501
expect(propertySchema.enum).to.include(3.1415, `for property ${propertyName}.enum`);
502502
},
503+
negativeNumberLiteralType: (propertyName, propertySchema) => {
504+
expect(propertySchema.type).to.eq('number', `for property ${propertyName}.type`);
505+
expect(propertySchema['x-nullable']).to.eq(false, `for property ${propertyName}[x-nullable]`);
506+
if (!propertySchema.enum) {
507+
throw new Error(`There was no 'enum' property on ${propertyName}.`);
508+
}
509+
expect(propertySchema.enum).to.have.length(1, `for property ${propertyName}.enum`);
510+
expect(propertySchema.enum).to.include(-1, `for property ${propertyName}.enum`);
511+
},
503512
dateValue: (propertyName, propertySchema) => {
504513
expect(propertySchema.type).to.eq('string', `for property ${propertyName}.type`);
505514
expect(propertySchema['x-nullable']).to.eq(undefined, `for property ${propertyName}[x-nullable]`);

tests/unit/swagger/schemaDetails3.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,15 @@ describe('Definition generation for OpenAPI 3.0.0', () => {
15261526
expect(propertySchema.enum).to.have.length(1, `for property ${propertyName}.enum`);
15271527
expect(propertySchema.enum).to.include(3.1415, `for property ${propertyName}.enum`);
15281528
},
1529+
negativeNumberLiteralType: (propertyName, propertySchema) => {
1530+
expect(propertySchema.type).to.eq('number', `for property ${propertyName}.type`);
1531+
expect(propertySchema.nullable).to.eq(false, `for property ${propertyName}.nullable`);
1532+
if (!propertySchema.enum) {
1533+
throw new Error(`There was no 'enum' property on ${propertyName}.`);
1534+
}
1535+
expect(propertySchema.enum).to.have.length(1, `for property ${propertyName}.enum`);
1536+
expect(propertySchema.enum).to.include(-1, `for property ${propertyName}.enum`);
1537+
},
15291538
dateValue: (propertyName, propertySchema) => {
15301539
expect(propertySchema.type).to.eq('string', `for property ${propertyName}.type`);
15311540
expect(propertySchema.nullable).to.eq(undefined, `for property ${propertyName}.nullable`);

0 commit comments

Comments
 (0)