diff --git a/openapi/openapi-generator/client-generator.sh b/openapi/openapi-generator/client-generator.sh index aba976f..3bbbaad 100755 --- a/openapi/openapi-generator/client-generator.sh +++ b/openapi/openapi-generator/client-generator.sh @@ -83,6 +83,12 @@ kubeclient::generator::generate_client() { CLEANUP_DIRS_STRING="${CLEANUP_DIRS[@]}" echo "--- Running generator inside container..." + + local additional_args=() + if test -d "templates/${CLIENT_LANGUAGE}"; then + OPENAPI_TEMPLATE_DIR=$(realpath "templates/${CLIENT_LANGUAGE}") + additional_args+=("-v" "${OPENAPI_TEMPLATE_DIR}:/template") + fi docker run --rm --security-opt="label=disable" -u $(id -u) \ -e CLEANUP_DIRS="${CLEANUP_DIRS_STRING}" \ -e KUBERNETES_BRANCH="${KUBERNETES_BRANCH}" \ @@ -103,6 +109,7 @@ kubeclient::generator::generate_client() { -e REPOSITORY="${REPOSITORY}" \ -e USE_SINGLE_PARAMETER="${USE_SINGLE_PARAMETER:-}" \ -v "${output_dir}:/output_dir" \ + "${additional_args[@]}" \ "${image_name}" "/output_dir" echo "---Done." diff --git a/openapi/templates/typescript/model/model.mustache b/openapi/templates/typescript/model/model.mustache new file mode 100644 index 0000000..bdb54da --- /dev/null +++ b/openapi/templates/typescript/model/model.mustache @@ -0,0 +1,117 @@ +{{! Modified copy from https://github.com/OpenAPITools/openapi-generator/blob/dfbe985db36e91acaa039358bb71f082dc9dd6c7/modules/openapi-generator/src/main/resources/typescript/model/model.mustache}} +{{>licenseInfo}} +{{#models}} +{{#model}} +{{#tsImports}} +import { {{classname}} } from '{{filename}}{{importFileExtension}}'; +{{/tsImports}} +import { HttpFile } from '../http/http{{importFileExtension}}'; + +{{#description}} +/** +* {{{.}}} +*/ +{{/description}} +{{^isEnum}} +{{#oneOf}} +{{#-first}}{{>model/modelOneOf}}{{/-first}} +{{/oneOf}} +{{^oneOf}} +export class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{ +{{#vars}} +{{#description}} + /** + * {{{.}}} + */ +{{/description}} + '{{name}}'{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}} | null{{/isNullable}}; +{{/vars}} + + {{#discriminator}} + static {{#parent}}override {{/parent}}readonly discriminator: string | undefined = "{{discriminatorName}}"; + {{/discriminator}} + {{^discriminator}} + static {{#parent}}override {{/parent}}readonly discriminator: string | undefined = undefined; + {{/discriminator}} + {{#hasDiscriminatorWithNonEmptyMapping}} + + static {{#parent}}override {{/parent}}readonly mapping: {[index: string]: string} | undefined = { + {{#discriminator.mappedModels}} + "{{mappingName}}": "{{modelName}}", + {{/discriminator.mappedModels}} + }; + {{/hasDiscriminatorWithNonEmptyMapping}} + {{^hasDiscriminatorWithNonEmptyMapping}} + + static {{#parent}}override {{/parent}}readonly mapping: {[index: string]: string} | undefined = undefined; + {{/hasDiscriminatorWithNonEmptyMapping}} + + {{^isArray}} + static {{#parent}}override {{/parent}}readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [ + {{#vars}} + { + "name": "{{name}}", + "baseName": "{{baseName}}", + "type": "{{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}", + "format": "{{dataFormat}}" + }{{^-last}}, + {{/-last}} + {{/vars}} + ]; + + static {{#parent}}override {{/parent}}getAttributeTypeMap() { + {{#parent}} + return super.getAttributeTypeMap().concat({{classname}}.attributeTypeMap); + {{/parent}} + {{^parent}} + return {{classname}}.attributeTypeMap; + {{/parent}} + } + {{/isArray}} + + public constructor() { + {{#parent}} + super(); + {{/parent}} + {{#allVars}} + {{#discriminatorValue}} + this.{{name}} = "{{discriminatorValue}}"; + {{/discriminatorValue}} + {{/allVars}} + {{#discriminatorName}} + this.{{discriminatorName}} = "{{classname}}"; + {{/discriminatorName}} + } + + {{#modelJson}} + public static OPENAPI_SCHEMA = {{{.}}} + {{/modelJson}} +} +{{#hasEnums}} + +{{#vars}} +{{#isEnum}} +export enum {{classname}}{{enumName}} { + {{#allowableValues}} + {{#enumVars}} + {{name}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} + {{/allowableValues}} +} +{{/isEnum}} +{{/vars}} + +{{/hasEnums}} +{{/oneOf}} +{{/isEnum}} +{{#isEnum}} +export enum {{classname}} { + {{#allowableValues}} + {{#enumVars}} + {{name}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} + {{/allowableValues}} +} +{{/isEnum}} +{{/model}} +{{/models}} diff --git a/openapi/typescript.xml b/openapi/typescript.xml index e3ebc1b..f4b4643 100644 --- a/openapi/typescript.xml +++ b/openapi/typescript.xml @@ -26,6 +26,7 @@ IntOrString=../../types,V1MicroTime=../../types ${generator.output.path} + /template true true