From 86a56f149fb0a5d1afd04d0328bcf43adf83ca24 Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Wed, 11 Dec 2019 10:48:09 +0100 Subject: [PATCH] - Added schema generation --- package.json | 2 +- src/templates/javascript/model.hbs | 4 +- .../javascript/partials/exportEnum.hbs | 4 ++ .../javascript/partials/exportGeneric.hbs | 11 ++++ .../{exportEnums.hbs => exportInterface.hbs} | 4 ++ src/templates/javascript/partials/schema.hbs | 11 ++++ .../javascript/partials/schemaArray.hbs | 17 ++++++ .../javascript/partials/schemaDictionary.hbs | 17 ++++++ .../javascript/partials/schemaEnum.hbs | 12 ++++ .../javascript/partials/schemaGeneric.hbs | 56 +++++++++++++++++++ .../javascript/partials/schemaInterface.hbs | 14 +++++ .../typescript/partials/schemaEnum.hbs | 7 +-- src/utils/writeClient.ts | 4 +- 13 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 src/templates/javascript/partials/exportGeneric.hbs rename src/templates/javascript/partials/{exportEnums.hbs => exportInterface.hbs} (84%) create mode 100644 src/templates/javascript/partials/schema.hbs create mode 100644 src/templates/javascript/partials/schemaArray.hbs create mode 100644 src/templates/javascript/partials/schemaDictionary.hbs create mode 100644 src/templates/javascript/partials/schemaEnum.hbs create mode 100644 src/templates/javascript/partials/schemaGeneric.hbs create mode 100644 src/templates/javascript/partials/schemaInterface.hbs diff --git a/package.json b/package.json index 66c31d94..34ccc702 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openapi-typescript-codegen", - "version": "0.1.0", + "version": "0.1.1", "description": "NodeJS library that generates Typescript or Javascript clients based on the OpenAPI specification.", "author": "Ferdi Koomen", "homepage": "https://github.com/ferdikoomen/openapi-typescript-codegen", diff --git a/src/templates/javascript/model.hbs b/src/templates/javascript/model.hbs index a21f6461..529403db 100644 --- a/src/templates/javascript/model.hbs +++ b/src/templates/javascript/model.hbs @@ -9,7 +9,9 @@ import { {{{this}}} } from '../models/{{{this}}}'; {{/if}} {{#equals export 'interface'}} -{{>exportEnums}} +{{>exportInterface}} {{else equals export 'enum'}} {{>exportEnum}} +{{else}} +{{>exportGeneric}} {{/equals}} diff --git a/src/templates/javascript/partials/exportEnum.hbs b/src/templates/javascript/partials/exportEnum.hbs index 682a3317..4dcf4702 100644 --- a/src/templates/javascript/partials/exportEnum.hbs +++ b/src/templates/javascript/partials/exportEnum.hbs @@ -6,8 +6,12 @@ export let {{{name}}}; (function ({{{name}}}) { + {{#if enum}} {{#each enum}} {{{../name}}}.{{{name}}} = {{{value}}}; {{/each}} + {{/if}} + {{{name}}}.schema = {{>schema}}; + })({{{name}}} || ({{{name}}} = {})); diff --git a/src/templates/javascript/partials/exportGeneric.hbs b/src/templates/javascript/partials/exportGeneric.hbs new file mode 100644 index 00000000..da58a4ea --- /dev/null +++ b/src/templates/javascript/partials/exportGeneric.hbs @@ -0,0 +1,11 @@ +{{#if description}} +/** + * {{{description}}} + */ +{{/if}} +export let {{{name}}}; +(function ({{{name}}}) { + + {{{name}}}.schema = {{>schema}}; + +})({{{name}}} || ({{{name}}} = {})); diff --git a/src/templates/javascript/partials/exportEnums.hbs b/src/templates/javascript/partials/exportInterface.hbs similarity index 84% rename from src/templates/javascript/partials/exportEnums.hbs rename to src/templates/javascript/partials/exportInterface.hbs index ecc7f557..295ab02b 100644 --- a/src/templates/javascript/partials/exportEnums.hbs +++ b/src/templates/javascript/partials/exportInterface.hbs @@ -6,6 +6,7 @@ export let {{{name}}}; (function ({{{name}}}) { + {{#if enums}} {{#each enums}} {{#if description}} /** @@ -19,4 +20,7 @@ export let {{{name}}}; }; {{/each}} + {{/if}} + {{{name}}}.schema = {{>schema}}; + })({{{name}}} || ({{{name}}} = {})); diff --git a/src/templates/javascript/partials/schema.hbs b/src/templates/javascript/partials/schema.hbs new file mode 100644 index 00000000..68194de6 --- /dev/null +++ b/src/templates/javascript/partials/schema.hbs @@ -0,0 +1,11 @@ +{{#equals export 'interface'}} +{{>schemaInterface}} +{{else equals export 'enum'}} +{{>schemaEnum}} +{{else equals export 'array'}} +{{>schemaArray}} +{{else equals export 'dictionary'}} +{{>schemaDictionary}} +{{else}} +{{>schemaGeneric}} +{{/equals}} diff --git a/src/templates/javascript/partials/schemaArray.hbs b/src/templates/javascript/partials/schemaArray.hbs new file mode 100644 index 00000000..f8127b9c --- /dev/null +++ b/src/templates/javascript/partials/schemaArray.hbs @@ -0,0 +1,17 @@ +{ + type: 'Array', +{{#if link~}} + item: {{>schema link}}, +{{else}} + item: '{{{base}}}', +{{/if}} +{{#if isReadOnly~}} + isReadOnly: {{{isReadOnly}}}, +{{/if}} +{{#if isRequired~}} + isRequired: {{{isRequired}}}, +{{/if}} +{{#if isNullable~}} + isNullable: {{{isNullable}}}, +{{/if}} +} diff --git a/src/templates/javascript/partials/schemaDictionary.hbs b/src/templates/javascript/partials/schemaDictionary.hbs new file mode 100644 index 00000000..9735207f --- /dev/null +++ b/src/templates/javascript/partials/schemaDictionary.hbs @@ -0,0 +1,17 @@ +{ + type: 'Dictionary', +{{#if link~}} + item: {{>schema link}}, +{{else}} + item: '{{{base}}}', +{{/if}} +{{#if isReadOnly~}} + isReadOnly: {{{isReadOnly}}}, +{{/if}} +{{#if isRequired~}} + isRequired: {{{isRequired}}}, +{{/if}} +{{#if isNullable~}} + isNullable: {{{isNullable}}}, +{{/if}} +} diff --git a/src/templates/javascript/partials/schemaEnum.hbs b/src/templates/javascript/partials/schemaEnum.hbs new file mode 100644 index 00000000..9a4e7ac3 --- /dev/null +++ b/src/templates/javascript/partials/schemaEnum.hbs @@ -0,0 +1,12 @@ +{ + type: 'Enum', +{{#if isReadOnly~}} + isReadOnly: {{{isReadOnly}}}, +{{/if}} +{{#if isRequired~}} + isRequired: {{{isRequired}}}, +{{/if}} +{{#if isNullable~}} + isNullable: {{{isNullable}}}, +{{/if}} +} diff --git a/src/templates/javascript/partials/schemaGeneric.hbs b/src/templates/javascript/partials/schemaGeneric.hbs new file mode 100644 index 00000000..dd2a60dd --- /dev/null +++ b/src/templates/javascript/partials/schemaGeneric.hbs @@ -0,0 +1,56 @@ +{ +{{#if type~}} + type: '{{{base}}}', +{{/if}} +{{#if isReadOnly~}} + isReadOnly: {{{isReadOnly}}}, +{{/if}} +{{#if isRequired~}} + isRequired: {{{isRequired}}}, +{{/if}} +{{#if isNullable~}} + isNullable: {{{isNullable}}}, +{{/if}} +{{#if format~}} + format: '{{{format}}}', +{{/if}} +{{#if maximum~}} + maximum: {{{maximum}}}, +{{/if}} +{{#if exclusiveMaximum~}} + exclusiveMaximum: {{{exclusiveMaximum}}}, +{{/if}} +{{#if minimum~}} + minimum: {{{minimum}}}, +{{/if}} +{{#if exclusiveMinimum~}} + exclusiveMinimum: {{{exclusiveMinimum}}}, +{{/if}} +{{#if multipleOf~}} + multipleOf: {{{multipleOf}}}, +{{/if}} +{{#if maxLength~}} + maxLength: {{{maxLength}}}, +{{/if}} +{{#if minLength~}} + minLength: {{{minLength}}}, +{{/if}} +{{#if pattern~}} + pattern: '{{{pattern}}}', +{{/if}} +{{#if maxItems~}} + maxItems: {{{maxItems}}}, +{{/if}} +{{#if minItems~}} + minItems: {{{minItems}}}, +{{/if}} +{{#if uniqueItems~}} + uniqueItems: {{{uniqueItems}}}, +{{/if}} +{{#if maxProperties~}} + maxProperties: {{{maxProperties}}}, +{{/if}} +{{#if minProperties~}} + minProperties: {{{minProperties}}}, +{{/if}} +} diff --git a/src/templates/javascript/partials/schemaInterface.hbs b/src/templates/javascript/partials/schemaInterface.hbs new file mode 100644 index 00000000..9e93369b --- /dev/null +++ b/src/templates/javascript/partials/schemaInterface.hbs @@ -0,0 +1,14 @@ +{ +{{#each properties}} + {{{name}}}: {{>schema}}, +{{/each}} +{{#if isReadOnly~}} + isReadOnly: {{{isReadOnly}}}, +{{/if}} +{{#if isRequired~}} + isRequired: {{{isRequired}}}, +{{/if}} +{{#if isNullable~}} + isNullable: {{{isNullable}}}, +{{/if}} +} diff --git a/src/templates/typescript/partials/schemaEnum.hbs b/src/templates/typescript/partials/schemaEnum.hbs index 9304b253..9a4e7ac3 100644 --- a/src/templates/typescript/partials/schemaEnum.hbs +++ b/src/templates/typescript/partials/schemaEnum.hbs @@ -1,10 +1,5 @@ { - type: 'enum', - enums: [ - {{#each enum}} - {{{value}}}, - {{/each}} - ], + type: 'Enum', {{#if isReadOnly~}} isReadOnly: {{{isReadOnly}}}, {{/if}} diff --git a/src/utils/writeClient.ts b/src/utils/writeClient.ts index f239fd52..65a3dfc5 100644 --- a/src/utils/writeClient.ts +++ b/src/utils/writeClient.ts @@ -54,8 +54,8 @@ export function writeClient(client: Client, language: Language, httpClient: Http }); // Filter unused models and services. - client.models = getFilteredModels(client.models, language); - client.services = getFilteredServices(client.services, language); + // client.models = getFilteredModels(client.models, language); + // client.services = getFilteredServices(client.services, language); // Write the client files try {