@api-buddy/types
Version:
Shared types for API Buddy
1 lines • 2.78 kB
Source Map (JSON)
{"version":3,"sources":["../src/types.ts"],"names":["z"],"mappings":";;;;;AAWa,IAAA,eAAA,GAAkBA,MAAE,IAAK,CAAA;AAAA,EACpC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAC","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\nexport type FieldType =\n | 'String'\n | 'Number'\n | 'Boolean'\n | 'Date'\n | 'JSON'\n | 'ID'\n | 'Relation';\n\nexport const fieldTypeSchema = z.enum([\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'JSON',\n 'ID',\n 'Relation',\n]);\n\nexport interface BaseFieldDefinition {\n type: FieldType;\n required?: boolean;\n unique?: boolean;\n default?: any;\n isArray?: boolean;\n validators?: Array<(value: any) => string | null>;\n description?: string;\n}\n\nexport interface StringFieldDefinition extends BaseFieldDefinition {\n type: 'String';\n enum?: string[];\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: 'email' | 'uri' | 'uuid' | 'date-time' | 'date' | 'time' | string;\n}\n\nexport interface NumberFieldDefinition extends BaseFieldDefinition {\n type: 'Number';\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: boolean;\n exclusiveMaximum?: boolean;\n multipleOf?: number;\n}\n\nexport interface BooleanFieldDefinition extends BaseFieldDefinition {\n type: 'Boolean';\n}\n\nexport interface DateFieldDefinition extends BaseFieldDefinition {\n type: 'Date';\n}\n\nexport interface JsonFieldDefinition extends BaseFieldDefinition {\n type: 'JSON';\n}\n\nexport interface IDFieldDefinition extends BaseFieldDefinition {\n type: 'ID';\n autoIncrement?: boolean;\n autoGenerate?: boolean;\n}\n\nexport interface RelationFieldDefinition extends BaseFieldDefinition {\n type: 'Relation';\n relation: {\n model: string;\n type: 'hasOne' | 'hasMany' | 'belongsTo' | 'manyToMany';\n foreignKey?: string;\n through?: string;\n };\n}\n\nexport type FieldDefinition =\n | StringFieldDefinition\n | NumberFieldDefinition\n | BooleanFieldDefinition\n | DateFieldDefinition\n | JsonFieldDefinition\n | IDFieldDefinition\n | RelationFieldDefinition;\n\nexport interface ModelDefinition {\n fields: Record<string, FieldDefinition>;\n timestamps?: boolean;\n softDelete?: boolean;\n tableName?: string;\n indexes?: Array<{\n fields: string | string[];\n unique?: boolean;\n name?: string;\n }>;\n}\n\nexport interface Schema {\n models: Record<string, ModelDefinition>;\n enums?: Record<string, string[]>;\n config?: {\n database?: {\n provider?: 'postgresql' | 'mysql' | 'sqlite' | 'mongodb';\n url?: string;\n ssl?: boolean;\n };\n auth?: {\n enabled?: boolean;\n providers?: ('credentials' | 'github' | 'google')[];\n };\n };\n}\n"]}