/// /// /// /// /// import { ExtractInstanceType, ExtractInstanceTypeName, UiInstances } from "./instances"; export type FieldVariableData = ["udim2", FieldVariableData, FieldVariableData, FieldVariableData, FieldVariableData] | ["udim", FieldVariableData, FieldVariableData] | ["enum", string] | ["vector2", FieldVariableData, FieldVariableData] | ["color3", FieldVariableData, FieldVariableData, FieldVariableData] | ["variable", string] | ["if", FieldVariableData, FieldVariableData, FieldVariableData] | ["eq", FieldVariableData, FieldVariableData] | ["number", number] | ["string", string] | ["boolean", boolean] | ["undefined"] | ["instance", InstanceData] | ["ai", string]; export type FieldData = ["signal", FieldVariableData] | ["field", FieldVariableData] | ["component", FieldVariableData]; type FieldVariableMetadata = [T] extends [ { _datatype: [infer K, unknown, ...infer V]; } ] ? [ K, ...{ [k in keyof V]: FieldVariableMetadata; } ] : [T] extends [EnumItem] ? ["enum", T["Name"]] : [T] extends [ { _variable: infer N; } ] ? ["variable", N] : [T] extends [ { _if: [infer V, infer T, infer F]; } ] ? ["if", FieldVariableMetadata, FieldVariableMetadata, FieldVariableMetadata] : [T] extends [ { _eq: [infer Lhs, infer Rhs]; } ] ? ["eq", FieldVariableMetadata, FieldVariableMetadata] : [T] extends [ { _ai: infer P; } ] ? ["ai", P] : [T] extends [number] ? ["number", T] : [T] extends [string] ? ["string", T] : [T] extends [boolean] ? ["boolean", T] : [T] extends [undefined] ? ["undefined"] : [T] extends [Instance] ? ["instance", InstanceMetadata] : never; type FieldMetadata = T[K] extends RBXScriptSignal ? ["signal", FieldVariableMetadata] : K extends keyof ExtractInstanceType ? ["field", FieldVariableMetadata] : ["component", FieldVariableMetadata]; export type InstanceData = [keyof UiInstances, Record]; export type InstanceMetadata = [ ExtractInstanceTypeName, { [k in keyof T]: k extends keyof ExtractInstanceType ? ExtractInstanceType[k] extends T[k] ? undefined : FieldMetadata : FieldMetadata; } ]; export {};