diff --git a/registry/models.go b/registry/models.go new file mode 100644 index 00000000..06346058 --- /dev/null +++ b/registry/models.go @@ -0,0 +1,93 @@ +package registry + +import "time" + +// Kind classifies a registry entry. +type Kind string + +const ( + KindFunction Kind = "function" + KindPipeline Kind = "pipeline" + KindComponent Kind = "component" +) + +// Purity indicates whether a function has side effects. +type Purity string + +const ( + PurityPure Purity = "pure" + PurityImpure Purity = "impure" +) + +// Algebraic classifies a type. +type Algebraic string + +const ( + AlgebraicProduct Algebraic = "product" + AlgebraicSum Algebraic = "sum" +) + +// Function represents an entry in the functions table. +// Covers kind: function, pipeline, and component. +type Function struct { + ID string `json:"id"` + Name string `json:"name"` + Kind Kind `json:"kind"` + Lang string `json:"lang"` + Domain string `json:"domain"` + Version string `json:"version"` + Purity Purity `json:"purity"` + Signature string `json:"signature"` + Description string `json:"description"` + Tags []string `json:"tags"` + UsesFunctions []string `json:"uses_functions"` + UsesTypes []string `json:"uses_types"` + Returns []string `json:"returns"` + ReturnsOptional bool `json:"returns_optional"` + ErrorType string `json:"error_type"` + Imports []string `json:"imports"` + Example string `json:"example"` + Tested bool `json:"tested"` + Tests []string `json:"tests"` + TestFilePath string `json:"test_file_path"` + FilePath string `json:"file_path"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + + // Component-only fields (kind: component) + Props []PropDef `json:"props,omitempty"` + Emits []string `json:"emits,omitempty"` + HasState *bool `json:"has_state,omitempty"` + Framework string `json:"framework,omitempty"` + Variant []string `json:"variant,omitempty"` +} + +// PropDef describes a component prop. +type PropDef struct { + Name string `json:"name"` + Type string `json:"type"` + Required bool `json:"required"` + Description string `json:"description"` +} + +// Type represents an entry in the types table. +type Type struct { + ID string `json:"id"` + Name string `json:"name"` + Lang string `json:"lang"` + Domain string `json:"domain"` + Version string `json:"version"` + Algebraic Algebraic `json:"algebraic"` + Definition string `json:"definition"` + Description string `json:"description"` + Tags []string `json:"tags"` + UsesTypes []string `json:"uses_types"` + FilePath string `json:"file_path"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +// GenerateID builds the canonical ID: {name}_{lang}_{domain} +func GenerateID(name, lang, domain string) string { + return name + "_" + lang + "_" + domain +}