-- Compiled with roblox-ts v1.2.7 local TS = _G[script] local BuiltInValidators = TS.import(script, script.Parent, "ZirconTypeValidator").BuiltInValidators local ZirconFunction = TS.import(script, script.Parent, "ZirconFunction").ZirconFunction local ZirconEnum = TS.import(script, script.Parent, "ZirconEnum").ZirconEnum local _TypeUtilities = TS.import(script, script.Parent, "TypeUtilities") local ZirconArrayType = _TypeUtilities.ZirconArrayType local ZirconTypeUnion = _TypeUtilities.ZirconTypeUnion local t = TS.import(script, TS.getModule(script, "@rbxts", "t").lib.ts) local isArray = t.array(t.any) local ZirconFunctionBuilder do ZirconFunctionBuilder = setmetatable({}, { __tostring = function() return "ZirconFunctionBuilder" end, }) ZirconFunctionBuilder.__index = ZirconFunctionBuilder function ZirconFunctionBuilder.new(...) local self = setmetatable({}, ZirconFunctionBuilder) return self:constructor(...) or self end function ZirconFunctionBuilder:constructor(name) self.name = name self.validators = {} self.hasVariadic = false end function ZirconFunctionBuilder:GetValidator(argValidator) local validator if type(argValidator) == "string" then validator = BuiltInValidators[argValidator] elseif TS.instanceof(argValidator, ZirconEnum) then validator = argValidator:getValidator() else validator = argValidator end return validator end function ZirconFunctionBuilder:GetUnionableValidator(argValidator) if isArray(argValidator) then return self:GetValidator(ZirconTypeUnion(unpack(argValidator))) else return self:GetValidator(argValidator) end end function ZirconFunctionBuilder:AddArgument(argValidator, description) local validator = self:GetUnionableValidator(argValidator) local _validators = self.validators -- ▼ Array.push ▼ _validators[#_validators + 1] = validator -- ▲ Array.push ▲ return self end function ZirconFunctionBuilder:AddArrayArgument(argValidator, description) local validator = ZirconArrayType(self:GetUnionableValidator(argValidator)) local _validators = self.validators -- ▼ Array.push ▼ _validators[#_validators + 1] = validator -- ▲ Array.push ▲ return self end function ZirconFunctionBuilder:AddVariadicArgument(arg) self.hasVariadic = true local validator = self:GetUnionableValidator(arg) self.varadicValidator = validator return self end function ZirconFunctionBuilder:AddDescription(description) self.description = description return self end function ZirconFunctionBuilder:Bind(fn) return ZirconFunction.new(self.name, fn, { Description = self.description, HasVariadic = self.hasVariadic, VariadicValidator = self.varadicValidator, ArgumentValidators = self.validators, }) end end return { ZirconFunctionBuilder = ZirconFunctionBuilder, }