Added Drizzle ORM support
This commit is contained in:
64
pkg/writers/drizzle/templates.go
Normal file
64
pkg/writers/drizzle/templates.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package drizzle
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
// schemaTemplate defines the template for generating Drizzle schemas
|
||||
const schemaTemplate = `// Code generated by relspecgo. DO NOT EDIT.
|
||||
{{range .Imports}}{{.}}
|
||||
{{end}}
|
||||
{{if .Enums}}
|
||||
// Enums
|
||||
{{range .Enums}}export const {{.VarName}} = pgEnum('{{.Name}}', [{{.ValuesStr}}]);
|
||||
export type {{.Name}} = {{.TypeUnion}};
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{range .Tables}}// Table: {{.TableName}}{{if .Comment}} - {{.Comment}}{{end}}
|
||||
export interface {{.TypeName}} {
|
||||
{{- range $i, $col := .Columns}}
|
||||
{{$col.FieldName}}: {{$col.TypeScriptType}};{{if $col.Comment}} // {{$col.Comment}}{{end}}
|
||||
{{- end}}
|
||||
}
|
||||
|
||||
export const {{.Name}} = pgTable('{{.TableName}}', {
|
||||
{{- range $i, $col := .Columns}}
|
||||
{{$col.FieldName}}: {{$col.DrizzleChain}},{{if $col.Comment}} // {{$col.Comment}}{{end}}
|
||||
{{- end}}
|
||||
}{{if .Indexes}}{{if .IndexColumnFields}}, ({ {{range $i, $field := .IndexColumnFields}}{{if $i}}, {{end}}{{$field}}{{end}} }) => [{{else}}, (table) => [{{end}}
|
||||
{{- range $i, $idx := .Indexes}}
|
||||
{{$idx.Definition}},
|
||||
{{- end}}
|
||||
]{{end}});
|
||||
|
||||
export type New{{.TypeName}} = typeof {{.Name}}.$inferInsert;
|
||||
{{end}}`
|
||||
|
||||
// Templates holds the parsed templates
|
||||
type Templates struct {
|
||||
schemaTmpl *template.Template
|
||||
}
|
||||
|
||||
// NewTemplates creates and parses the templates
|
||||
func NewTemplates() (*Templates, error) {
|
||||
schemaTmpl, err := template.New("schema").Parse(schemaTemplate)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Templates{
|
||||
schemaTmpl: schemaTmpl,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GenerateCode executes the template with the given data
|
||||
func (t *Templates) GenerateCode(data *TemplateData) (string, error) {
|
||||
var buf bytes.Buffer
|
||||
err := t.schemaTmpl.Execute(&buf, data)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return buf.String(), nil
|
||||
}
|
||||
Reference in New Issue
Block a user