private convertElement()

in src/models/xsdSchemaConverter.ts [107:173]


    private convertElement(jObject: JObject): SchemaNode {
        const name = jObject.getAttribute("name");
        const originalType = jObject.getAttribute("type");
        const isPrimitive = this.isPrimitiveType(originalType);

        let type: string;
        let $ref: string;

        if (isPrimitive) {
            type = originalType;
            $ref = undefined;
        }
        else {
            type = "object";
            $ref = originalType?.split(":").pop();
        }

        const definition: SchemaObjectContract = {
            type: type,
            properties: undefined,
            $ref: $ref,
            rawSchema: jObject.toXml().trim(),
            rawSchemaFormat: "xml"
        };

        jObject.children.forEach(child => {
            switch (child.name) {
                case "simpleType": {
                    definition.properties = definition.properties || {};
                    const simpleTypeNode = this.convertSimpleType(child);
                    definition.properties[simpleTypeNode.name] = simpleTypeNode.definition;
                    break;
                }

                case "complexType": {
                    const complexTypeNode = this.convertComplexType(child);
                    if (complexTypeNode.name) {
                        definition.properties = definition.properties || {};
                        definition.properties[complexTypeNode.name] = complexTypeNode.definition;
                    }
                    else {
                        Object.assign(definition, complexTypeNode.definition);
                    }

                    break;
                }

                case "element": {
                    const elementNode = this.convertElement(child);
                    definition.properties = definition.properties || {};
                    definition.properties[elementNode.name] = elementNode.definition;
                    break;
                }

                default:
                    console.warn(`Element "${child.name}" by XSD schema converter.`);
                    break;
            }
        });

        const resultNode: SchemaNode = {
            name: name,
            definition: definition
        };

        return resultNode;
    }