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
+ /template
true
true