File tree Expand file tree Collapse file tree 3 files changed +75
-1
lines changed
packages/openapi-generator Expand file tree Collapse file tree 3 files changed +75
-1
lines changed Original file line number Diff line number Diff line change @@ -459,7 +459,14 @@ function parseFunctionBody(
459459 return errorLeft ( 'Function body is undefined' ) ;
460460 }
461461 if ( func . body . type === 'BlockStatement' ) {
462- return errorLeft ( 'BlockStatement arrow functions are not yet supported' ) ;
462+ const returnStmt = func . body . stmts . find ( ( s ) => s . type === 'ReturnStatement' ) ;
463+ if ( ! returnStmt || returnStmt . type !== 'ReturnStatement' ) {
464+ return errorLeft ( 'BlockStatement must contain a return statement' ) ;
465+ }
466+ if ( ! returnStmt . argument ) {
467+ return errorLeft ( 'Return statement must have an argument' ) ;
468+ }
469+ return parseCodecInitializer ( project , source , returnStmt . argument ) ;
463470 }
464471 return parseCodecInitializer ( project , source , func . body ) ;
465472}
Original file line number Diff line number Diff line change @@ -411,3 +411,46 @@ testCase(
411411 } ,
412412 [ ] ,
413413) ;
414+
415+ testCase (
416+ 'simple api spec with block statement arrow functions' ,
417+ 'test/sample-types/apiSpecWithBlockArrow.ts' ,
418+ {
419+ openapi : '3.0.3' ,
420+ info : {
421+ title : 'simple api spec with block statement arrow functions' ,
422+ version : '1.0.0' ,
423+ description : 'simple api spec with block statement arrow functions' ,
424+ } ,
425+ paths : {
426+ '/test' : {
427+ get : {
428+ parameters : [ ] ,
429+ responses : {
430+ 200 : {
431+ description : 'OK' ,
432+ content : {
433+ 'application/json' : {
434+ schema : {
435+ type : 'object' ,
436+ properties : {
437+ hasLargeNumberOfAddresses : {
438+ nullable : true ,
439+ type : 'boolean' ,
440+ } ,
441+ } ,
442+ required : [ 'hasLargeNumberOfAddresses' ] ,
443+ } ,
444+ } ,
445+ } ,
446+ } ,
447+ } ,
448+ } ,
449+ } ,
450+ } ,
451+ components : {
452+ schemas : { } ,
453+ } ,
454+ } ,
455+ [ ] ,
456+ ) ;
Original file line number Diff line number Diff line change 1+ import * as h from '@api-ts/io-ts-http' ;
2+ import * as t from 'io-ts' ;
3+ import { BooleanFromString , fromNullable } from 'io-ts-types' ;
4+
5+ const BooleanFromNullableWithFallback = ( ) => {
6+ return fromNullable ( t . union ( [ BooleanFromString , t . boolean ] ) , false ) ;
7+ } ;
8+
9+ export const TEST_ROUTE = h . httpRoute ( {
10+ path : '/test' ,
11+ method : 'GET' ,
12+ request : h . httpRequest ( { } ) ,
13+ response : {
14+ 200 : t . type ( {
15+ hasLargeNumberOfAddresses : BooleanFromNullableWithFallback ( ) ,
16+ } ) ,
17+ } ,
18+ } ) ;
19+
20+ export const apiSpec = h . apiSpec ( {
21+ 'api.test' : {
22+ get : TEST_ROUTE ,
23+ } ,
24+ } ) ;
You can’t perform that action at this time.
0 commit comments