-- Compiled with roblox-ts v1.2.7 local TS = _G[script] local LogLevel = TS.import(script, TS.getModule(script, "@rbxts", "log").out).LogLevel local ZirconFunctionBuilder = TS.import(script, script.Parent, "ZirconFunctionBuilder").ZirconFunctionBuilder local ZirconNamespace = TS.import(script, script.Parent, "ZirconNamespace").ZirconNamespace local ZirconNamespaceBuilder do ZirconNamespaceBuilder = setmetatable({}, { __tostring = function() return "ZirconNamespaceBuilder" end, }) ZirconNamespaceBuilder.__index = ZirconNamespaceBuilder function ZirconNamespaceBuilder.new(...) local self = setmetatable({}, ZirconNamespaceBuilder) return self:constructor(...) or self end function ZirconNamespaceBuilder:constructor(name) self.name = name self.functions = {} end function ZirconNamespaceBuilder:AddFunction(func) local _functions = self.functions local _arg0 = function(f) return f:GetName() == func:GetName() end -- ▼ ReadonlyArray.find ▼ local _result = nil for _i, _v in ipairs(_functions) do if _arg0(_v, _i - 1, _functions) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local existingFn = _result if existingFn then warn("Duplicate function: '" .. func:GetName() .. "' in namespace '" .. self.name .. "'") else local _functions_1 = self.functions -- ▼ Array.push ▼ _functions_1[#_functions_1 + 1] = func -- ▲ Array.push ▲ end return self end function ZirconNamespaceBuilder:AddHelpFunction(callback, functionName, functionDescription) if callback == nil then callback = function(name, args, desc) local _promise = TS.Promise.new(function(resolve) resolve(TS.import(script, script.Parent.Parent, "Services", "LogService")) end) local _arg0 = function(_param) local ZirconLogService = _param.ZirconLogService ZirconLogService.WriteStructured({ Template = desc ~= nil and "function {Name} {Args}: '{Description}'" or "function {Name} {Args}", Name = name, Args = args, Description = desc, Timestamp = DateTime.now():ToIsoDate(), Level = LogLevel.Information, SourceContext = self.name .. ("." .. functionName), }) end _promise:andThen(_arg0) end end if functionName == nil then functionName = "help" end if functionDescription == nil then functionDescription = "Lists all members in this namespace" end local _functions = self.functions local _arg0 = ZirconFunctionBuilder.new(functionName):AddArgument("string?"):AddDescription(functionDescription):Bind(function(_, memberName) local _result if memberName ~= nil then local _functions_1 = self.functions local _arg0_1 = function(f) local _exp = string.lower(f:GetName()) local _arg0_2 = string.lower(memberName) return (string.find(_exp, _arg0_2, 1, true)) ~= nil end -- ▼ ReadonlyArray.find ▼ local _result_1 = nil for _i, _v in ipairs(_functions_1) do if _arg0_1(_v, _i - 1, _functions_1) == true then _result_1 = _v break end end -- ▲ ReadonlyArray.find ▲ _result = _result_1 else _result = nil end local matchingMember = _result if matchingMember then local args = matchingMember:GetArgumentTypes() local varType = matchingMember:GetVariadicType() if varType ~= nil then local _arg0_1 = "..." .. varType -- ▼ Array.push ▼ args[#args + 1] = _arg0_1 -- ▲ Array.push ▲ end callback(matchingMember:GetName(), args, matchingMember:GetDescription()) else local _functions_1 = self.functions local _arg0_1 = function(f) local args = f:GetArgumentTypes() local varType = f:GetVariadicType() if varType ~= nil then local _arg0_2 = "..." .. varType -- ▼ Array.push ▼ args[#args + 1] = _arg0_2 -- ▲ Array.push ▲ end return { f:GetName(), args, f:GetDescription() } end -- ▼ ReadonlyArray.map ▼ local _newValue = table.create(#_functions_1) for _k, _v in ipairs(_functions_1) do _newValue[_k] = _arg0_1(_v, _k - 1, _functions_1) end -- ▲ ReadonlyArray.map ▲ local _arg0_2 = function(arg) return callback(unpack(arg)) end -- ▼ ReadonlyArray.forEach ▼ for _k, _v in ipairs(_newValue) do _arg0_2(_v, _k - 1, _newValue) end -- ▲ ReadonlyArray.forEach ▲ end end) -- ▼ Array.push ▼ _functions[#_functions + 1] = _arg0 -- ▲ Array.push ▲ return self end function ZirconNamespaceBuilder:Build() return ZirconNamespace.new(self.name, self.functions) end end return { ZirconNamespaceBuilder = ZirconNamespaceBuilder, }