diff --git a/src/client/interfaces/Model.d.ts b/src/client/interfaces/Model.d.ts index 34846d8e..ccd1b908 100644 --- a/src/client/interfaces/Model.d.ts +++ b/src/client/interfaces/Model.d.ts @@ -11,7 +11,6 @@ export interface Model extends Schema { description: string | null; default?: string; imports: string[]; - extends: string[]; enum: Enum[]; enums: Model[]; properties: Model[]; diff --git a/src/index.ts b/src/index.ts index cc20b3c8..c098715c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ export enum HttpClient { NODE = 'node', } -export interface Options { +export type Options = { input: string | Record; output: string; httpClient?: HttpClient; @@ -24,7 +24,7 @@ export interface Options { exportModels?: boolean; exportSchemas?: boolean; write?: boolean; -} +}; /** * Generate the OpenAPI client. This method will read the OpenAPI specification and based on the diff --git a/src/openApi/v2/parser/getModel.ts b/src/openApi/v2/parser/getModel.ts index e56bc290..f04a4819 100644 --- a/src/openApi/v2/parser/getModel.ts +++ b/src/openApi/v2/parser/getModel.ts @@ -5,20 +5,21 @@ import { extendEnum } from './extendEnum'; import { getComment } from './getComment'; import { getEnum } from './getEnum'; import { getEnumFromDescription } from './getEnumFromDescription'; +import { getModelComposition } from './getModelComposition'; import { getModelProperties } from './getModelProperties'; import { getPattern } from './getPattern'; import { getType } from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { const model: Model = { - name: name, + name, export: 'interface', type: 'any', base: 'any', template: null, link: null, description: getComment(definition.description), - isDefinition: isDefinition, + isDefinition, isReadOnly: definition.readOnly === true, isNullable: definition['x-nullable'] === true, isRequired: false, @@ -37,7 +38,6 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti minProperties: definition.minProperties, pattern: getPattern(definition.pattern), imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -118,42 +118,30 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } } - if (definition.type === 'object' || definition.allOf) { + if (definition.allOf?.length) { + const composition = getModelComposition(openApi, definition.allOf, 'all-of', getModel); + model.export = composition.type; + model.imports.push(...composition.imports); + model.enums.push(...composition.enums); + model.properties.push(...composition.properties); + return model; + } + + if (definition.type === 'object') { model.export = 'interface'; model.type = 'any'; model.base = 'any'; - if (definition.allOf?.length) { - definition.allOf.forEach(parent => { - if (parent.$ref) { - const parentRef = getType(parent.$ref); - model.extends.push(parentRef.base); - model.imports.push(parentRef.base); - } - if (parent.type === 'object' && parent.properties) { - const properties = getModelProperties(openApi, parent, getModel); - properties.forEach(property => { - model.properties.push(property); - model.imports.push(...property.imports); - if (property.export === 'enum') { - model.enums.push(property); - } - }); - } - }); - } - if (definition.properties) { const properties = getModelProperties(openApi, definition, getModel); properties.forEach(property => { - model.properties.push(property); model.imports.push(...property.imports); + model.properties.push(property); if (property.export === 'enum') { model.enums.push(property); } }); } - return model; } diff --git a/src/openApi/v2/parser/getModelProperties.ts b/src/openApi/v2/parser/getModelProperties.ts index cdf784fd..387f33bf 100644 --- a/src/openApi/v2/parser/getModelProperties.ts +++ b/src/openApi/v2/parser/getModelProperties.ts @@ -45,7 +45,6 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, minProperties: property.minProperties, pattern: getPattern(property.pattern), imports: model.imports, - extends: [], enum: [], enums: [], properties: [], @@ -79,7 +78,6 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, minProperties: property.minProperties, pattern: getPattern(property.pattern), imports: model.imports, - extends: model.extends, enum: model.enum, enums: model.enums, properties: model.properties, diff --git a/src/openApi/v2/parser/getOperationParameter.ts b/src/openApi/v2/parser/getOperationParameter.ts index 3475d179..61444a24 100644 --- a/src/openApi/v2/parser/getOperationParameter.ts +++ b/src/openApi/v2/parser/getOperationParameter.ts @@ -39,7 +39,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame uniqueItems: parameter.uniqueItems, pattern: getPattern(parameter.pattern), imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -121,7 +120,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = model.template; operationParameter.link = model.link; operationParameter.imports.push(...model.imports); - operationParameter.extends.push(...model.extends); operationParameter.enum.push(...model.enum); operationParameter.enums.push(...model.enums); operationParameter.properties.push(...model.properties); diff --git a/src/openApi/v2/parser/getOperationResponse.ts b/src/openApi/v2/parser/getOperationResponse.ts index d25ef09e..0325f379 100644 --- a/src/openApi/v2/parser/getOperationResponse.ts +++ b/src/openApi/v2/parser/getOperationResponse.ts @@ -22,7 +22,6 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -80,7 +79,6 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse operationResponse.minProperties = model.minProperties; operationResponse.pattern = getPattern(model.pattern); operationResponse.imports.push(...model.imports); - operationResponse.extends.push(...model.extends); operationResponse.enum.push(...model.enum); operationResponse.enums.push(...model.enums); operationResponse.properties.push(...model.properties); diff --git a/src/openApi/v2/parser/getOperationResults.ts b/src/openApi/v2/parser/getOperationResults.ts index 871c553e..03f54b02 100644 --- a/src/openApi/v2/parser/getOperationResults.ts +++ b/src/openApi/v2/parser/getOperationResults.ts @@ -34,7 +34,6 @@ export function getOperationResults(operationResponses: OperationResponse[]): Op isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/src/openApi/v3/parser/getModel.ts b/src/openApi/v3/parser/getModel.ts index 5c3a22aa..2981c69a 100644 --- a/src/openApi/v3/parser/getModel.ts +++ b/src/openApi/v3/parser/getModel.ts @@ -5,6 +5,7 @@ import { extendEnum } from './extendEnum'; import { getComment } from './getComment'; import { getEnum } from './getEnum'; import { getEnumFromDescription } from './getEnumFromDescription'; +import { getModelComposition } from './getModelComposition'; import { getModelDefault } from './getModelDefault'; import { getModelProperties } from './getModelProperties'; import { getPattern } from './getPattern'; @@ -12,14 +13,14 @@ import { getType } from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { const model: Model = { - name: name, + name, export: 'interface', type: 'any', base: 'any', template: null, link: null, description: getComment(definition.description), - isDefinition: isDefinition, + isDefinition, isReadOnly: definition.readOnly === true, isNullable: definition.nullable === true, isRequired: false, @@ -38,7 +39,6 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti minProperties: definition.minProperties, pattern: getPattern(definition.pattern), imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -103,7 +103,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } } - if (definition.type === 'object' && definition.additionalProperties && typeof definition.additionalProperties === 'object') { + if (definition.type === 'object' && typeof definition.additionalProperties === 'object') { if (definition.additionalProperties.$ref) { const additionalProperties = getType(definition.additionalProperties.$ref); model.export = 'dictionary'; @@ -125,26 +125,31 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti return model; } } - // TODO: - // Add correct support for oneOf - // https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/ - if (definition.oneOf?.length || definition.anyOf?.length || definition.allOf?.length) { - let types: OpenApiSchema[] = []; - if (definition.oneOf?.length) { - model.export = 'one-of'; - types = definition.oneOf; - } else if (definition.anyOf?.length) { - model.export = 'any-of'; - types = definition.anyOf; - } else if (definition.allOf?.length) { - model.export = 'all-of'; - types = definition.allOf; - } - const compositionTypes = types.map(model => getModel(openApi, model)); - model.properties = compositionTypes; - model.imports.push(...compositionTypes.reduce((acc: string[], type) => acc.concat(type.imports), [])); - model.enums.push(...compositionTypes.reduce((acc: Model[], type) => acc.concat(type.enums), [])); + if (definition.oneOf?.length) { + const composition = getModelComposition(openApi, definition.oneOf, 'one-of', getModel); + model.export = composition.type; + model.imports.push(...composition.imports); + model.enums.push(...composition.enums); + model.properties.push(...composition.properties); + return model; + } + + if (definition.anyOf?.length) { + const composition = getModelComposition(openApi, definition.anyOf, 'any-of', getModel); + model.export = composition.type; + model.imports.push(...composition.imports); + model.enums.push(...composition.enums); + model.properties.push(...composition.properties); + return model; + } + + if (definition.allOf?.length) { + const composition = getModelComposition(openApi, definition.allOf, 'all-of', getModel); + model.export = composition.type; + model.imports.push(...composition.imports); + model.enums.push(...composition.enums); + model.properties.push(...composition.properties); return model; } @@ -152,15 +157,18 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti model.export = 'interface'; model.type = 'any'; model.base = 'any'; - model.default = getModelDefault(definition, model); - const properties = getModelProperties(openApi, definition, getModel); - properties.forEach(property => { - model.properties.push(property); - model.imports.push(...property.imports); - if (property.export === 'enum') { - model.enums.push(property); - } - }); + + if (definition.properties) { + model.default = getModelDefault(definition, model); + const properties = getModelProperties(openApi, definition, getModel); + properties.forEach(property => { + model.imports.push(...property.imports); + model.properties.push(property); + if (property.export === 'enum') { + model.enums.push(property); + } + }); + } return model; } diff --git a/src/openApi/v3/parser/getModelProperties.ts b/src/openApi/v3/parser/getModelProperties.ts index a1f93eca..03618e44 100644 --- a/src/openApi/v3/parser/getModelProperties.ts +++ b/src/openApi/v3/parser/getModelProperties.ts @@ -45,7 +45,6 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, minProperties: property.minProperties, pattern: getPattern(property.pattern), imports: model.imports, - extends: [], enum: [], enums: [], properties: [], @@ -79,7 +78,6 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema, minProperties: property.minProperties, pattern: getPattern(property.pattern), imports: model.imports, - extends: model.extends, enum: model.enum, enums: model.enums, properties: model.properties, diff --git a/src/openApi/v3/parser/getOperationParameter.ts b/src/openApi/v3/parser/getOperationParameter.ts index d9660571..956cf35d 100644 --- a/src/openApi/v3/parser/getOperationParameter.ts +++ b/src/openApi/v3/parser/getOperationParameter.ts @@ -24,7 +24,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame isRequired: parameter.required === true, isNullable: parameter.nullable === true, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -76,7 +75,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.pattern = getPattern(model.pattern); operationParameter.default = model.default; operationParameter.imports.push(...model.imports); - operationParameter.extends.push(...model.extends); operationParameter.enum.push(...model.enum); operationParameter.enums.push(...model.enums); operationParameter.properties.push(...model.properties); diff --git a/src/openApi/v3/parser/getOperationRequestBody.ts b/src/openApi/v3/parser/getOperationRequestBody.ts index 114f1c6f..e1b418c3 100644 --- a/src/openApi/v3/parser/getOperationRequestBody.ts +++ b/src/openApi/v3/parser/getOperationRequestBody.ts @@ -24,7 +24,6 @@ export function getOperationRequestBody(openApi: OpenApi, parameter: OpenApiRequ isRequired: parameter.required === true, isNullable: parameter.nullable === true, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -66,7 +65,6 @@ export function getOperationRequestBody(openApi: OpenApi, parameter: OpenApiRequ requestBody.minProperties = model.minProperties; requestBody.pattern = getPattern(model.pattern); requestBody.imports.push(...model.imports); - requestBody.extends.push(...model.extends); requestBody.enum.push(...model.enum); requestBody.enums.push(...model.enums); requestBody.properties.push(...model.properties); diff --git a/src/openApi/v3/parser/getOperationResponse.ts b/src/openApi/v3/parser/getOperationResponse.ts index 9fd78f7a..4e57a47b 100644 --- a/src/openApi/v3/parser/getOperationResponse.ts +++ b/src/openApi/v3/parser/getOperationResponse.ts @@ -23,7 +23,6 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -79,7 +78,6 @@ export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse operationResponse.minProperties = model.minProperties; operationResponse.pattern = getPattern(model.pattern); operationResponse.imports.push(...model.imports); - operationResponse.extends.push(...model.extends); operationResponse.enum.push(...model.enum); operationResponse.enums.push(...model.enums); operationResponse.properties.push(...model.properties); diff --git a/src/openApi/v3/parser/getOperationResults.ts b/src/openApi/v3/parser/getOperationResults.ts index 871c553e..03f54b02 100644 --- a/src/openApi/v3/parser/getOperationResults.ts +++ b/src/openApi/v3/parser/getOperationResults.ts @@ -34,7 +34,6 @@ export function getOperationResults(operationResponses: OperationResponse[]): Op isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/src/templates/core/ApiRequestOptions.hbs b/src/templates/core/ApiRequestOptions.hbs index 37719a2e..dc33aac8 100644 --- a/src/templates/core/ApiRequestOptions.hbs +++ b/src/templates/core/ApiRequestOptions.hbs @@ -1,6 +1,6 @@ {{>header}} -export interface ApiRequestOptions { +export type ApiRequestOptions = { readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly path: string; readonly cookies?: Record; diff --git a/src/templates/core/ApiResult.hbs b/src/templates/core/ApiResult.hbs index 1a9f8533..b5c3c959 100644 --- a/src/templates/core/ApiResult.hbs +++ b/src/templates/core/ApiResult.hbs @@ -1,6 +1,6 @@ {{>header}} -export interface ApiResult { +export type ApiResult = { readonly url: string; readonly ok: boolean; readonly status: number; diff --git a/src/templates/core/OpenAPI.hbs b/src/templates/core/OpenAPI.hbs index 6e7361e0..270f0bfc 100644 --- a/src/templates/core/OpenAPI.hbs +++ b/src/templates/core/OpenAPI.hbs @@ -3,7 +3,7 @@ type Resolver = () => Promise; type Headers = Record; -interface Config { +type Config = { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; diff --git a/src/templates/exportSchema.hbs b/src/templates/exportSchema.hbs index 7e0899a9..9f4013ff 100644 --- a/src/templates/exportSchema.hbs +++ b/src/templates/exportSchema.hbs @@ -1,10 +1,3 @@ {{>header}} -{{#if extends}} - -{{#each extends}} -import { ${{{this}}} } from './${{{this}}}'; -{{/each}} -{{/if}} - export const ${{{name}}} = {{>schema}}; diff --git a/src/templates/partials/exportInterface.hbs b/src/templates/partials/exportInterface.hbs index e045e1e5..1ac430f8 100644 --- a/src/templates/partials/exportInterface.hbs +++ b/src/templates/partials/exportInterface.hbs @@ -3,7 +3,7 @@ * {{{description}}} */ {{/if}} -export interface {{{name}}}{{>extends}} { +export type {{{name}}} = { {{#each properties}} {{#if description}} /** diff --git a/src/templates/partials/extends.hbs b/src/templates/partials/extends.hbs deleted file mode 100644 index 5e083972..00000000 --- a/src/templates/partials/extends.hbs +++ /dev/null @@ -1 +0,0 @@ -{{#if extends}} extends {{#each extends}}{{{this}}}{{#unless @last}}, {{/unless}}{{/each}}{{/if}} diff --git a/src/templates/partials/parameters.hbs b/src/templates/partials/parameters.hbs index 98377752..a245ab4d 100644 --- a/src/templates/partials/parameters.hbs +++ b/src/templates/partials/parameters.hbs @@ -1,16 +1,16 @@ {{#if parameters}} -{{#if @root.useOptions}} +{{#if @root.useOptions~}} { {{#each parameters}} {{{name}}}{{#if default}} = {{{default}}}{{/if}}, {{/each}} }: { {{#each parameters}} -/** {{{description}}} */ +/** {{{description}}} **/ {{{name}}}{{>isRequired}}: {{>type}}, {{/each}} } -{{else}} +{{~else}} {{#each parameters}} {{{name}}}{{>isRequired}}: {{>type}}{{#if default}} = {{{default}}}{{/if}}, diff --git a/src/templates/partials/schemaInterface.hbs b/src/templates/partials/schemaInterface.hbs index 037cc7f1..88460880 100644 --- a/src/templates/partials/schemaInterface.hbs +++ b/src/templates/partials/schemaInterface.hbs @@ -1,10 +1,5 @@ { properties: { -{{#if extends}} - {{#each extends}} - ...${{{this}}}.properties, - {{/each}} -{{/if}} {{#if properties}} {{#each properties}} {{{name}}}: {{>schema}}, diff --git a/src/utils/getModelNames.spec.ts b/src/utils/getModelNames.spec.ts index c97d97d6..a5a17d4b 100644 --- a/src/utils/getModelNames.spec.ts +++ b/src/utils/getModelNames.spec.ts @@ -16,7 +16,6 @@ describe('getModelNames', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -34,7 +33,6 @@ describe('getModelNames', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -52,7 +50,6 @@ describe('getModelNames', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/src/utils/registerHandlebarTemplates.ts b/src/utils/registerHandlebarTemplates.ts index a4f46849..febe94f1 100644 --- a/src/utils/registerHandlebarTemplates.ts +++ b/src/utils/registerHandlebarTemplates.ts @@ -42,7 +42,6 @@ import partialBase from '../templates/partials/base.hbs'; import partialExportEnum from '../templates/partials/exportEnum.hbs'; import partialExportInterface from '../templates/partials/exportInterface.hbs'; import partialExportType from '../templates/partials/exportType.hbs'; -import partialExtends from '../templates/partials/extends.hbs'; import partialHeader from '../templates/partials/header.hbs'; import partialIsNullable from '../templates/partials/isNullable.hbs'; import partialIsReadOnly from '../templates/partials/isReadOnly.hbs'; @@ -111,7 +110,6 @@ export function registerHandlebarTemplates(): Templates { Handlebars.registerPartial('exportEnum', Handlebars.template(partialExportEnum)); Handlebars.registerPartial('exportInterface', Handlebars.template(partialExportInterface)); Handlebars.registerPartial('exportType', Handlebars.template(partialExportType)); - Handlebars.registerPartial('extends', Handlebars.template(partialExtends)); Handlebars.registerPartial('header', Handlebars.template(partialHeader)); Handlebars.registerPartial('isNullable', Handlebars.template(partialIsNullable)); Handlebars.registerPartial('isReadOnly', Handlebars.template(partialIsReadOnly)); diff --git a/src/utils/sortModelsByName.spec.ts b/src/utils/sortModelsByName.spec.ts index 8365024e..ab57a7d9 100644 --- a/src/utils/sortModelsByName.spec.ts +++ b/src/utils/sortModelsByName.spec.ts @@ -16,7 +16,6 @@ describe('sortModelsByName', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -34,7 +33,6 @@ describe('sortModelsByName', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], @@ -52,7 +50,6 @@ describe('sortModelsByName', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/src/utils/writeClientModels.spec.ts b/src/utils/writeClientModels.spec.ts index bb6035a0..5ddc0080 100644 --- a/src/utils/writeClientModels.spec.ts +++ b/src/utils/writeClientModels.spec.ts @@ -22,7 +22,6 @@ describe('writeClientModels', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/src/utils/writeClientSchemas.spec.ts b/src/utils/writeClientSchemas.spec.ts index 77c12808..85dad846 100644 --- a/src/utils/writeClientSchemas.spec.ts +++ b/src/utils/writeClientSchemas.spec.ts @@ -22,7 +22,6 @@ describe('writeClientSchemas', () => { isRequired: false, isNullable: false, imports: [], - extends: [], enum: [], enums: [], properties: [], diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index 90507fb4..767a2a7b 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -27,7 +27,7 @@ exports[`v2 should generate: ./test/generated/v2/core/ApiRequestOptions.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiRequestOptions { +export type ApiRequestOptions = { readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly path: string; readonly cookies?: Record; @@ -44,7 +44,7 @@ exports[`v2 should generate: ./test/generated/v2/core/ApiResult.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiResult { +export type ApiResult = { readonly url: string; readonly ok: boolean; readonly status: number; @@ -60,7 +60,7 @@ exports[`v2 should generate: ./test/generated/v2/core/OpenAPI.ts 1`] = ` type Resolver = () => Promise; type Headers = Record; -interface Config { +type Config = { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; @@ -618,7 +618,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelLink.ts 1`] = ` /** * This is a model that can have a template?? */ -export interface ModelLink { +export type ModelLink = { id?: string; } " @@ -634,11 +634,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtends extends ModelWithString { - propExtendsA?: string; - propExtendsB?: ModelWithString; -} -" +export type ModelThatExtends = (ModelWithString & { + propExtendsA?: string, + propExtendsB?: ModelWithString, +});" `; exports[`v2 should generate: ./test/generated/v2/models/ModelThatExtendsExtends.ts 1`] = ` @@ -652,11 +651,10 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that extends another model */ -export interface ModelThatExtendsExtends extends ModelWithString, ModelThatExtends { - propExtendsC?: string; - propExtendsD?: ModelWithString; -} -" +export type ModelThatExtendsExtends = (ModelWithString & ModelThatExtends & { + propExtendsC?: string, + propExtendsD?: ModelWithString, +});" `; exports[`v2 should generate: ./test/generated/v2/models/ModelWithArray.ts 1`] = ` @@ -669,7 +667,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property containing an array */ -export interface ModelWithArray { +export type ModelWithArray = { prop?: Array; propWithFile?: Array; propWithNumber?: Array; @@ -685,7 +683,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithBoolean.ts 1`] /** * This is a model with one boolean property */ -export interface ModelWithBoolean { +export type ModelWithBoolean = { /** * This is a simple boolean property */ @@ -702,7 +700,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithCircularReferen /** * This is a model with one property containing a circular reference */ -export interface ModelWithCircularReference { +export type ModelWithCircularReference = { prop?: ModelWithCircularReference; } " @@ -716,7 +714,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithDictionary.ts 1 /** * This is a model with one property containing a dictionary */ -export interface ModelWithDictionary { +export type ModelWithDictionary = { prop?: Record; } " @@ -732,7 +730,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated imports */ -export interface ModelWithDuplicateImports { +export type ModelWithDuplicateImports = { propA?: ModelWithString; propB?: ModelWithString; propC?: ModelWithString; @@ -750,7 +748,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated properties */ -export interface ModelWithDuplicateProperties { +export type ModelWithDuplicateProperties = { prop?: ModelWithString; } " @@ -764,7 +762,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithEnum.ts 1`] = ` /** * This is a model with one enum */ -export interface ModelWithEnum { +export type ModelWithEnum = { /** * This is a simple enum with strings */ @@ -811,7 +809,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithEnumFromDescrip /** * This is a model with one enum */ -export interface ModelWithEnumFromDescription { +export type ModelWithEnumFromDescription = { /** * Success=1,Warning=2,Error=3 */ @@ -842,7 +840,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithInteger.ts 1`] /** * This is a model with one number property */ -export interface ModelWithInteger { +export type ModelWithInteger = { /** * This is a simple number property */ @@ -862,7 +860,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that can have a template?? */ -export interface ModelWithLink { +export type ModelWithLink = { prop?: ModelLink; } " @@ -876,7 +874,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNestedEnums.ts /** * This is a model with nested enums */ -export interface ModelWithNestedEnums { +export type ModelWithNestedEnums = { dictionaryWithEnum?: Record; dictionaryWithEnumFromDescription?: Record; arrayWithEnum?: Array<'Success' | 'Warning' | 'Error'>; @@ -893,7 +891,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNestedPropertie /** * This is a model with one nested property */ -export interface ModelWithNestedProperties { +export type ModelWithNestedProperties = { readonly first: { readonly second: { readonly third: string, @@ -911,7 +909,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithNullableString. /** * This is a model with one string property */ -export interface ModelWithNullableString { +export type ModelWithNullableString = { /** * This is a simple string property */ @@ -932,7 +930,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithOrderedProperti /** * This is a model with ordered properties */ -export interface ModelWithOrderedProperties { +export type ModelWithOrderedProperties = { zebra?: string; apple?: string; hawaii?: string; @@ -948,7 +946,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithPattern.ts 1`] /** * This is a model that contains a some patterns */ -export interface ModelWithPattern { +export type ModelWithPattern = { key: string; name: string; readonly enabled?: boolean; @@ -969,7 +967,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one nested property */ -export interface ModelWithProperties { +export type ModelWithProperties = { required: string; readonly requiredAndReadOnly: string; string?: string; @@ -992,7 +990,7 @@ import type { ModelWithProperties } from './ModelWithProperties'; /** * This is a model with one property containing a reference */ -export interface ModelWithReference { +export type ModelWithReference = { prop?: ModelWithProperties; } " @@ -1006,7 +1004,7 @@ exports[`v2 should generate: ./test/generated/v2/models/ModelWithString.ts 1`] = /** * This is a model with one string property */ -export interface ModelWithString { +export type ModelWithString = { /** * This is a simple string property */ @@ -1101,7 +1099,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithArray = { type: 'array', contains: { @@ -1117,7 +1114,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithBooleans.ts 1 "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithBooleans = { type: 'array', contains: { @@ -1130,7 +1126,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithNumbers.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithNumbers = { type: 'array', contains: { @@ -1143,7 +1138,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithProperties = { type: 'array', contains: { @@ -1163,7 +1157,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithReferences.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithReferences = { type: 'array', contains: { @@ -1176,7 +1169,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ArrayWithStrings.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithStrings = { type: 'array', contains: { @@ -1189,7 +1181,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$Date.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $Date = { type: 'string', };" @@ -1199,7 +1190,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithArray.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithArray = { type: 'dictionary', contains: { @@ -1215,7 +1205,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithDictiona "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithDictionary = { type: 'dictionary', contains: { @@ -1231,7 +1220,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithProperti "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithProperties = { type: 'dictionary', contains: { @@ -1251,7 +1239,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithReferenc "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithReference = { type: 'dictionary', contains: { @@ -1264,7 +1251,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$DictionaryWithString.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithString = { type: 'dictionary', contains: { @@ -1277,7 +1263,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumFromDescription.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumFromDescription = { type: 'Enum', };" @@ -1287,7 +1272,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithExtensions.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithExtensions = { type: 'Enum', };" @@ -1297,7 +1281,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithNumbers.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithNumbers = { type: 'Enum', };" @@ -1307,7 +1290,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$EnumWithStrings.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithStrings = { type: 'Enum', };" @@ -1317,7 +1299,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelLink.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelLink = { properties: { id: { @@ -1331,19 +1312,20 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelThatExtends.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; - export const $ModelThatExtends = { - properties: { - ...$ModelWithString.properties, - propExtendsA: { - type: 'string', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + properties: { + propExtendsA: { + type: 'string', + }, + propExtendsB: { + type: 'ModelWithString', + }, }, - propExtendsB: { - type: 'ModelWithString', - }, - }, + }], };" `; @@ -1351,21 +1333,22 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelThatExtendsExtend "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - -import { $ModelWithString } from './$ModelWithString'; -import { $ModelThatExtends } from './$ModelThatExtends'; - export const $ModelThatExtendsExtends = { - properties: { - ...$ModelWithString.properties, - ...$ModelThatExtends.properties, - propExtendsC: { - type: 'string', + type: 'all-of', + contains: [{ + type: 'ModelWithString', + }, { + type: 'ModelThatExtends', + }, { + properties: { + propExtendsC: { + type: 'string', + }, + propExtendsD: { + type: 'ModelWithString', + }, }, - propExtendsD: { - type: 'ModelWithString', - }, - }, + }], };" `; @@ -1373,7 +1356,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithArray = { properties: { prop: { @@ -1402,7 +1384,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithBoolean.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithBoolean = { properties: { prop: { @@ -1416,7 +1397,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithCircularRefer "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithCircularReference = { properties: { prop: { @@ -1430,7 +1410,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDictionary.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDictionary = { properties: { prop: { @@ -1447,7 +1426,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDuplicateImpo "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateImports = { properties: { propA: { @@ -1467,7 +1445,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithDuplicateProp "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateProperties = { properties: { prop: { @@ -1481,7 +1458,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithEnum.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnum = { properties: { test: { @@ -1498,7 +1474,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithEnumFromDescr "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnumFromDescription = { properties: { test: { @@ -1512,7 +1487,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithInteger.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithInteger = { properties: { prop: { @@ -1526,7 +1500,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithLink.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithLink = { properties: { prop: { @@ -1540,7 +1513,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNestedEnums.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedEnums = { properties: { dictionaryWithEnum: { @@ -1575,7 +1547,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNestedPropert "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedProperties = { properties: { first: { @@ -1603,7 +1574,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithNullableStrin "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNullableString = { properties: { nullableProp: { @@ -1623,7 +1593,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithOrderedProper "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithOrderedProperties = { properties: { zebra: { @@ -1643,7 +1612,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithPattern.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithPattern = { properties: { key: { @@ -1682,7 +1650,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithProperties = { properties: { required: { @@ -1722,7 +1689,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithReference.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithReference = { properties: { prop: { @@ -1736,7 +1702,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$ModelWithString.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithString = { properties: { prop: { @@ -1750,7 +1715,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$MultilineComment.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $MultilineComment = { type: 'number', };" @@ -1760,7 +1724,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleBoolean.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleBoolean = { type: 'boolean', };" @@ -1770,7 +1733,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleFile.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleFile = { type: 'File', };" @@ -1780,7 +1742,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleInteger.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleInteger = { type: 'number', };" @@ -1790,7 +1751,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleReference.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleReference = { type: 'ModelWithString', };" @@ -1800,7 +1760,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleString.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleString = { type: 'string', };" @@ -1810,7 +1769,6 @@ exports[`v2 should generate: ./test/generated/v2/schemas/$SimpleStringWithPatter "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleStringWithPattern = { type: 'string', maxLength: 64, @@ -2371,7 +2329,7 @@ exports[`v3 should generate: ./test/generated/v3/core/ApiRequestOptions.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiRequestOptions { +export type ApiRequestOptions = { readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; readonly path: string; readonly cookies?: Record; @@ -2388,7 +2346,7 @@ exports[`v3 should generate: ./test/generated/v3/core/ApiResult.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export interface ApiResult { +export type ApiResult = { readonly url: string; readonly ok: boolean; readonly status: number; @@ -2404,7 +2362,7 @@ exports[`v3 should generate: ./test/generated/v3/core/OpenAPI.ts 1`] = ` type Resolver = () => Promise; type Headers = Record; -interface Config { +type Config = { BASE: string; VERSION: string; WITH_CREDENTIALS: boolean; @@ -2837,7 +2795,7 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'all of' relationship */ -export interface CompositionWithAllOfAndNullable { +export type CompositionWithAllOfAndNullable = { propA?: ({ boolean?: boolean, } & ModelWithEnum & ModelWithArray & ModelWithDictionary) | null; @@ -2858,7 +2816,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property with a 'any of' relationship */ -export interface CompositionWithAnyOf { +export type CompositionWithAnyOf = { propA?: (ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary); } " @@ -2876,7 +2834,7 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'any of' relationship */ -export interface CompositionWithAnyOfAndNullable { +export type CompositionWithAnyOfAndNullable = { propA?: ({ boolean?: boolean, } | ModelWithEnum | ModelWithArray | ModelWithDictionary) | null; @@ -2892,7 +2850,7 @@ exports[`v3 should generate: ./test/generated/v3/models/CompositionWithAnyOfAnon /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ -export interface CompositionWithAnyOfAnonymous { +export type CompositionWithAnyOfAnonymous = { propA?: ({ propA?: any, } | string | number); @@ -2913,7 +2871,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property with a 'one of' relationship */ -export interface CompositionWithOneOf { +export type CompositionWithOneOf = { propA?: (ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary); } " @@ -2931,7 +2889,7 @@ import type { ModelWithEnum } from './ModelWithEnum'; /** * This is a model with one property with a 'one of' relationship */ -export interface CompositionWithOneOfAndNullable { +export type CompositionWithOneOfAndNullable = { propA?: ({ boolean?: boolean, } | ModelWithEnum | ModelWithArray | ModelWithDictionary) | null; @@ -2947,7 +2905,7 @@ exports[`v3 should generate: ./test/generated/v3/models/CompositionWithOneOfAnon /** * This is a model with one property with a 'one of' relationship where the options are not $ref */ -export interface CompositionWithOneOfAnonymous { +export type CompositionWithOneOfAnonymous = { propA?: ({ propA?: any, } | string | number); @@ -3094,7 +3052,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelLink.ts 1`] = ` /** * This is a model that can have a template?? */ -export interface ModelLink { +export type ModelLink = { id?: string; } " @@ -3143,7 +3101,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one property containing an array */ -export interface ModelWithArray { +export type ModelWithArray = { prop?: Array; propWithFile?: Array; propWithNumber?: Array; @@ -3159,7 +3117,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithBoolean.ts 1`] /** * This is a model with one boolean property */ -export interface ModelWithBoolean { +export type ModelWithBoolean = { /** * This is a simple boolean property */ @@ -3176,7 +3134,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithCircularReferen /** * This is a model with one property containing a circular reference */ -export interface ModelWithCircularReference { +export type ModelWithCircularReference = { prop?: ModelWithCircularReference; } " @@ -3190,7 +3148,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithDictionary.ts 1 /** * This is a model with one property containing a dictionary */ -export interface ModelWithDictionary { +export type ModelWithDictionary = { prop?: Record; } " @@ -3206,7 +3164,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated imports */ -export interface ModelWithDuplicateImports { +export type ModelWithDuplicateImports = { propA?: ModelWithString; propB?: ModelWithString; propC?: ModelWithString; @@ -3224,7 +3182,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with duplicated properties */ -export interface ModelWithDuplicateProperties { +export type ModelWithDuplicateProperties = { prop?: ModelWithString; } " @@ -3238,7 +3196,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithEnum.ts 1`] = ` /** * This is a model with one enum */ -export interface ModelWithEnum { +export type ModelWithEnum = { /** * This is a simple enum with strings */ @@ -3285,7 +3243,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithEnumFromDescrip /** * This is a model with one enum */ -export interface ModelWithEnumFromDescription { +export type ModelWithEnumFromDescription = { /** * Success=1,Warning=2,Error=3 */ @@ -3316,7 +3274,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithInteger.ts 1`] /** * This is a model with one number property */ -export interface ModelWithInteger { +export type ModelWithInteger = { /** * This is a simple number property */ @@ -3336,7 +3294,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model that can have a template?? */ -export interface ModelWithLink { +export type ModelWithLink = { prop?: ModelLink; } " @@ -3350,7 +3308,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithNestedEnums.ts /** * This is a model with nested enums */ -export interface ModelWithNestedEnums { +export type ModelWithNestedEnums = { dictionaryWithEnum?: Record; dictionaryWithEnumFromDescription?: Record; arrayWithEnum?: Array<'Success' | 'Warning' | 'Error'>; @@ -3367,7 +3325,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithNestedPropertie /** * This is a model with one nested property */ -export interface ModelWithNestedProperties { +export type ModelWithNestedProperties = { readonly first: { readonly second: { readonly third: string | null, @@ -3385,7 +3343,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithOrderedProperti /** * This is a model with ordered properties */ -export interface ModelWithOrderedProperties { +export type ModelWithOrderedProperties = { zebra?: string; apple?: string; hawaii?: string; @@ -3401,7 +3359,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithPattern.ts 1`] /** * This is a model that contains a some patterns */ -export interface ModelWithPattern { +export type ModelWithPattern = { key: string; name: string; readonly enabled?: boolean; @@ -3422,7 +3380,7 @@ import type { ModelWithString } from './ModelWithString'; /** * This is a model with one nested property */ -export interface ModelWithProperties { +export type ModelWithProperties = { required: string; readonly requiredAndReadOnly: string; requiredAndNullable: string | null; @@ -3446,7 +3404,7 @@ import type { ModelWithProperties } from './ModelWithProperties'; /** * This is a model with one property containing a reference */ -export interface ModelWithReference { +export type ModelWithReference = { prop?: ModelWithProperties; } " @@ -3460,7 +3418,7 @@ exports[`v3 should generate: ./test/generated/v3/models/ModelWithString.ts 1`] = /** * This is a model with one string property */ -export interface ModelWithString { +export type ModelWithString = { /** * This is a simple string property */ @@ -3555,7 +3513,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithArray = { type: 'array', contains: { @@ -3571,7 +3528,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithBooleans.ts 1 "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithBooleans = { type: 'array', contains: { @@ -3584,7 +3540,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithNumbers.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithNumbers = { type: 'array', contains: { @@ -3597,7 +3552,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithProperties = { type: 'array', contains: { @@ -3617,7 +3571,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithReferences.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithReferences = { type: 'array', contains: { @@ -3630,7 +3583,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithStrings.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ArrayWithStrings = { type: 'array', contains: { @@ -3643,7 +3595,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAllOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAllOfAndNullable = { properties: { propA: { @@ -3671,7 +3622,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOf.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOf = { properties: { propA: { @@ -3694,7 +3644,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOfAndNullable = { properties: { propA: { @@ -3722,7 +3671,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithAnyOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithAnyOfAnonymous = { properties: { propA: { @@ -3748,7 +3696,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOf.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOf = { properties: { propA: { @@ -3771,7 +3718,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOfAndNullable = { properties: { propA: { @@ -3799,7 +3745,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$CompositionWithOneOfAn "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $CompositionWithOneOfAnonymous = { properties: { propA: { @@ -3825,7 +3770,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithArray.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithArray = { type: 'dictionary', contains: { @@ -3841,7 +3785,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithDictiona "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithDictionary = { type: 'dictionary', contains: { @@ -3857,7 +3800,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithProperti "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithProperties = { type: 'dictionary', contains: { @@ -3877,7 +3819,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithReferenc "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithReference = { type: 'dictionary', contains: { @@ -3890,7 +3831,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$DictionaryWithString.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $DictionaryWithString = { type: 'dictionary', contains: { @@ -3903,7 +3843,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumFromDescription.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumFromDescription = { type: 'Enum', };" @@ -3913,7 +3852,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithExtensions.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithExtensions = { type: 'Enum', };" @@ -3923,7 +3861,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithNumbers.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithNumbers = { type: 'Enum', };" @@ -3933,7 +3870,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$EnumWithStrings.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $EnumWithStrings = { type: 'Enum', };" @@ -3943,7 +3879,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelLink.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelLink = { properties: { id: { @@ -3957,7 +3892,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelThatExtends.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelThatExtends = { type: 'all-of', contains: [{ @@ -3979,7 +3913,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelThatExtendsExtend "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelThatExtendsExtends = { type: 'all-of', contains: [{ @@ -4003,7 +3936,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithArray.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithArray = { properties: { prop: { @@ -4032,7 +3964,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithBoolean.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithBoolean = { properties: { prop: { @@ -4046,7 +3977,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithCircularRefer "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithCircularReference = { properties: { prop: { @@ -4060,7 +3990,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDictionary.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDictionary = { properties: { prop: { @@ -4077,7 +4006,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDuplicateImpo "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateImports = { properties: { propA: { @@ -4097,7 +4025,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithDuplicateProp "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithDuplicateProperties = { properties: { prop: { @@ -4111,7 +4038,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithEnum.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnum = { properties: { test: { @@ -4128,7 +4054,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithEnumFromDescr "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithEnumFromDescription = { properties: { test: { @@ -4142,7 +4067,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithInteger.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithInteger = { properties: { prop: { @@ -4156,7 +4080,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithLink.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithLink = { properties: { prop: { @@ -4170,7 +4093,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithNestedEnums.t "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedEnums = { properties: { dictionaryWithEnum: { @@ -4205,7 +4127,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithNestedPropert "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithNestedProperties = { properties: { first: { @@ -4236,7 +4157,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithOrderedProper "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithOrderedProperties = { properties: { zebra: { @@ -4256,7 +4176,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithPattern.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithPattern = { properties: { key: { @@ -4295,7 +4214,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithProperties.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithProperties = { properties: { required: { @@ -4340,7 +4258,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithReference.ts "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithReference = { properties: { prop: { @@ -4354,7 +4271,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$ModelWithString.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $ModelWithString = { properties: { prop: { @@ -4368,7 +4284,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$MultilineComment.ts 1` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $MultilineComment = { type: 'number', };" @@ -4378,7 +4293,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleBoolean.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleBoolean = { type: 'boolean', };" @@ -4388,7 +4302,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleFile.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleFile = { type: 'File', };" @@ -4398,7 +4311,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleInteger.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleInteger = { type: 'number', };" @@ -4408,7 +4320,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleReference.ts 1`] "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleReference = { type: 'ModelWithString', };" @@ -4418,7 +4329,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleString.ts 1`] = "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleString = { type: 'string', };" @@ -4428,7 +4338,6 @@ exports[`v3 should generate: ./test/generated/v3/schemas/$SimpleStringWithPatter "/* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ - export const $SimpleStringWithPattern = { type: 'string', isNullable: true, @@ -5062,13 +4971,13 @@ import { OpenAPI } from '../core/OpenAPI'; export class TypesService { /** + * @param parameterObject This is an object parameter * @param parameterArray This is an array parameter * @param parameterDictionary This is a dictionary parameter * @param parameterEnum This is an enum parameter * @param parameterNumber This is a number parameter * @param parameterString This is a string parameter * @param parameterBoolean This is a boolean parameter - * @param parameterObject This is an object parameter * @param id This is a number parameter * @result number Response is a simple number * @result string Response is a simple string @@ -5077,26 +4986,26 @@ export class TypesService { * @throws ApiError */ public static async types( + parameterObject: any, parameterArray: Array | null, parameterDictionary: any, parameterEnum: 'Success' | 'Warning' | 'Error' | null, parameterNumber: number = 123, parameterString: string | null = 'default', parameterBoolean: boolean | null = true, - parameterObject: any = null, id?: number, ): Promise { const result = await __request({ method: 'GET', path: \`/api/v\${OpenAPI.VERSION}/types\`, query: { + 'parameterObject': parameterObject, 'parameterArray': parameterArray, 'parameterDictionary': parameterDictionary, 'parameterEnum': parameterEnum, 'parameterNumber': parameterNumber, 'parameterString': parameterString, 'parameterBoolean': parameterBoolean, - 'parameterObject': parameterObject, }, }); return result.body; diff --git a/test/index.js b/test/index.js index 115c033c..7c88334b 100644 --- a/test/index.js +++ b/test/index.js @@ -7,8 +7,8 @@ async function generateV2() { input: './test/spec/v2.json', output: './test/generated/v2/', httpClient: OpenAPI.HttpClient.FETCH, - useOptions: true, - useUnionTypes: true, + useOptions: false, + useUnionTypes: false, exportCore: true, exportSchemas: true, exportModels: true, @@ -21,8 +21,8 @@ async function generateV3() { input: './test/spec/v3.json', output: './test/generated/v3/', httpClient: OpenAPI.HttpClient.FETCH, - useOptions: true, - useUnionTypes: true, + useOptions: false, + useUnionTypes: false, exportCore: true, exportSchemas: true, exportModels: true, diff --git a/types/index.d.ts b/types/index.d.ts index 3a1e774f..e1829b2d 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -4,7 +4,7 @@ export declare enum HttpClient { NODE = 'node', } -export interface Options { +export type Options = { input: string | Record; output: string; httpClient?: HttpClient; @@ -15,6 +15,6 @@ export interface Options { exportModels?: boolean; exportSchemas?: boolean; write?: boolean; -} +}; export declare function generate(options: Options): Promise;