/// <inheritdoc />
        public string GenerateCode(OutputPropertyType property)
        {
            var codeBuilder = new StringBuilder();

            codeBuilder.Append(_generator.GenerateName(property));

            if (_generator.ShouldBeUsedTypingInPropertyDefinition(property))
            {
                codeBuilder.Append($": {_generator.GeneratePropertyType(property)}");
            }

            codeBuilder.Append($" = {_generator.GenerateDefaultValue(property)};");

            return(codeBuilder.ToString());
        }
        /// <inheritdoc />
        public virtual string GenerateDefaultValue(OutputPropertyType property)
        {
            if (IsNullableType(property))
            {
                return("null");
            }

            return(property.OutputType switch
            {
                Number => "0",
                String => "''",
                Date => "new Date()",
                Enum => GenerateDefaultEnumValue(property),
                Boolean => "true",
                _ => throw new NotImplementedException($"{property?.OutputType?.GetType()?.ToString() ?? property.PropertyMetadata.ToString()} default value is unknown")
            });
 /// <inheritdoc />
 public virtual string GenerateName(OutputPropertyType property) => _options.PropertiesNamingStrategy.Resolve(property.PropertyName);