fix(bun): support extra generated model fields

This commit is contained in:
Hermes Agent
2026-07-09 05:50:33 +02:00
parent 7805d9b6f0
commit 47b77763cb
7 changed files with 359 additions and 2 deletions
+20 -2
View File
@@ -1,6 +1,7 @@
package main
import (
stdjson "encoding/json"
"fmt"
"os"
"strings"
@@ -54,6 +55,7 @@ var (
convertFlattenSchema bool
convertNullableTypes string
convertContinueOnError bool
convertExtraFields string
)
var convertCmd = &cobra.Command{
@@ -179,6 +181,7 @@ func init() {
convertCmd.Flags().BoolVar(&convertFlattenSchema, "flatten-schema", false, "Flatten schema.table names to schema_table (useful for databases like SQLite that do not support schemas)")
convertCmd.Flags().StringVar(&convertNullableTypes, "types", "", "Nullable type package for code-gen writers (bun/gorm): 'baselib' (default, Go pointer types), 'stdlib' (database/sql), or 'sqltypes'")
convertCmd.Flags().BoolVar(&convertContinueOnError, "continue-on-error", false, "Prepend \\set ON_ERROR_STOP off to generated SQL so psql continues past errors (pgsql output only)")
convertCmd.Flags().StringVar(&convertExtraFields, "extra-fields", "", "JSON array of extra Bun model fields to inject (bun output only); fields support target_table, name, type, bun_tag, json_tag, comment")
err := convertCmd.MarkFlagRequired("from")
if err != nil {
@@ -245,7 +248,7 @@ func runConvert(cmd *cobra.Command, args []string) error {
fmt.Fprintf(os.Stderr, " Schema: %s\n", convertSchemaFilter)
}
if err := writeDatabase(db, convertTargetType, convertTargetPath, convertPackageName, convertSchemaFilter, convertFlattenSchema, convertNullableTypes, convertContinueOnError); err != nil {
if err := writeDatabase(db, convertTargetType, convertTargetPath, convertPackageName, convertSchemaFilter, convertFlattenSchema, convertNullableTypes, convertContinueOnError, convertExtraFields); err != nil {
return fmt.Errorf("failed to write target: %w", err)
}
@@ -385,10 +388,25 @@ func readDatabaseForConvert(dbType, filePath, connString string) (*models.Databa
return db, nil
}
func writeDatabase(db *models.Database, dbType, outputPath, packageName, schemaFilter string, flattenSchema bool, nullableTypes string, continueOnError bool) error {
func writeDatabase(db *models.Database, dbType, outputPath, packageName, schemaFilter string, flattenSchema bool, nullableTypes string, continueOnError bool, extraFields string) error {
var writer writers.Writer
writerOpts := newWriterOptions(outputPath, packageName, flattenSchema, nullableTypes, continueOnError)
if extraFields != "" {
if strings.ToLower(dbType) != "bun" {
return fmt.Errorf("--extra-fields is only supported for Bun output")
}
var parsed []wbun.ExtraFieldConfig
if err := stdjson.Unmarshal([]byte(extraFields), &parsed); err != nil {
return fmt.Errorf("invalid --extra-fields JSON: %w", err)
}
if len(parsed) == 0 {
return fmt.Errorf("--extra-fields must contain at least one field")
}
writerOpts.Metadata = map[string]interface{}{
"extra_fields": extraFields,
}
}
switch strings.ToLower(dbType) {
case "dbml":