Skip to content

class transformer discriminators  #96

@lsarrazi

Description

@lsarrazi

Hi! 👋

Firstly, thanks for your work on this project! 🙂

Today I used patch-package to patch class-validator-jsonschema@3.1.1 for the project I'm working on.

I wanted class transformer discriminators in my documentation.

Here is the diff that solved my problem:

diff --git a/node_modules/class-validator-jsonschema/build/defaultConverters.js b/node_modules/class-validator-jsonschema/build/defaultConverters.js
index 09dc4b7..0569977 100644
--- a/node_modules/class-validator-jsonschema/build/defaultConverters.js
+++ b/node_modules/class-validator-jsonschema/build/defaultConverters.js
@@ -19,6 +19,36 @@ exports.defaultConverters = {
             const childType = typeMeta
                 ? typeMeta.typeFunction()
                 : getPropType(meta.target.prototype, meta.propertyName);
+
+            const { options: { discriminator } } = typeMeta;
+
+            if (discriminator)
+            {
+                const { subTypes } = discriminator;
+
+                const discriminatorType = {
+                    oneOf: subTypes.map(({value, name}) => targetToSchema(value, options)),
+                    discriminator: {
+                        propertyName: discriminator.property, 
+                        mapping: subTypes.reduce((acc, {value, name}) => {
+                            if (!value || !name)
+                                return acc;
+
+                            const ref = targetToSchema(value, options).$ref;
+
+                            if (!ref)
+                                return acc;
+
+                            acc[name] = ref;
+
+                            return acc;
+                        }, {})
+                    }
+                }
+
+                return discriminatorType;
+            }
+
             return targetToSchema(childType, options);
         }
     },

This issue body was partially generated by patch-package.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions