///
///
///
///
///
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 {};