A small language to describe DTOs and sync them between languages.
Warning
Very early prototype, many and all things subject to change as well as many feature gaps
Given the following file demo.bt
prod User {
age Int,
name "$name" Str,
email Str?,
hobbies []?Str,
dateOfBirth Date,
Status,
UserData,
}
sumstr Status {
Active,
Disabled,
Pending "pending activation",
}
sum UserData {
AdminData,
CustomerData,
}
prod AdminData {
accessLevel Int,
}
prod CustomerData {
attributes Object,
}
Generates the following TypeScript code
exportinterfaceUser{age: number;$name: string;email?: string;hobbies?: string[];dateOfBirth: string;status: Status;userData: UserData;}exporttypeStatus="Active"|"Disabled"|"pending activation";exporttypeUserData=|{adminData: AdminData}|{customerData: CustomerData};exportinterfaceAdminData{accessLevel: number;}exportinterfaceCustomerData{attributes: Record<string,unknown>;}and the following Go code
package demo
import (
"time"
)
typeUserstruct {
Ageint`json:"age"`Namestring`json:"$name"`Email*string`json:"email,omitEmpty"`Hobbies*[]string`json:"hobbies,omitEmpty"`DateOfBirth time.Time`json:"dateOfBirth"`StatusStatus`json:"status"`UserDataUserData`json:"userData"`
}
typeStatusstringconstStatus_ActiveStatus="Active"constStatus_DisabledStatus="Disabled"constStatus_PendingStatus="pending activation"typeUserDatastruct {
AdminData*AdminData`json:"adminData,omitEmpty"`CustomerData*CustomerData`json:"customerData,omitEmpty"`
}
typeAdminDatastruct {
AccessLevelint`json:"accessLevel"`
}
typeCustomerDatastruct {
Attributesmap[string]any`json:"attributes"`
}- Use
runesinstead ofbytes - Split ast and codegen input. Tokens should be part of the AST so that it can contain sugar and locations so it can be used for formatting.
- Add support for doc comments
- Add type checking
- Add LSP support
- Add support for more languages
go install github.com/brahms116/between/cmd/bt@latestbt --input ./demo.bt --output ./result.go && gofmt -w ./result.goor
bt --input ./demo.bt --output ./result.ts && prettier --write ./result.ts