diff --git a/src/swagger-2.ts b/src/swagger-2.ts index b93bc1368..1139882d3 100644 --- a/src/swagger-2.ts +++ b/src/swagger-2.ts @@ -94,11 +94,17 @@ function parse(spec: Swagger2, options: Swagger2Options = {}): string { const [refName] = getRef(items.$ref); return `${getType(items, refName)}[]`; } + if (items && items.type) { + // if an array, keep nesting + if (items.type === 'array') { + return `${getType(items, nestedName)}[]`; + } + // else if primitive, return type if (TYPES[items.type]) { return `${TYPES[items.type]}[]`; } - // If this is an array of items, let’s add it to the stack for later + // otherwise if this is an array of nested types, return that interface for later queue.push([nextInterface, items]); return `${nextInterface}[]`; } diff --git a/tests/swagger-2.test.ts b/tests/swagger-2.test.ts index 7b9916755..53e2f9ebf 100644 --- a/tests/swagger-2.test.ts +++ b/tests/swagger-2.test.ts @@ -197,6 +197,33 @@ describe('Swagger 2 spec', () => { expect(swaggerToTS(swagger)).toBe(ts); }); + it('handles arrays of arrays of arrays', () => { + const swagger: Swagger2 = { + definitions: { + Resource: { + properties: { + environments: { + type: 'array', + items: { + type: 'array', + items: { type: 'array', items: { type: 'string' } }, + }, + }, + }, + type: 'object', + }, + }, + }; + + const ts = format(` + export interface Resource { + environments?: string[][][]; + } + `); + + expect(swaggerToTS(swagger)).toBe(ts); + }); + it('handles allOf', () => { const swagger: Swagger2 = { definitions: {