2013/Libraries/Fusion/Utility/cleanup.luau

55 lines
1.2 KiB
Plaintext

--!strict
--[[
Cleans up the tasks passed in as the arguments.
A task can be any of the following:
- an Instance - will be destroyed
- an RBXScriptConnection - will be disconnected
- a function - will be run
- a table with a `Destroy` or `destroy` function - will be called
- an array - `cleanup` will be called on each item
]]
local typeof = require "../../../Modules/Polyfill/typeof"
local function cleanupOne(task: any)
local taskType = typeof(task)
-- case 1: Instance
if taskType == "Instance" then
task:Destroy()
-- case 2: RBXScriptConnection
elseif taskType == "RBXScriptConnection" then
task:disconnect()
-- case 3: callback
elseif taskType == "function" then
task()
elseif taskType == "table" then
-- case 4: destroy() function
if type(task.destroy) == "function" then
task:destroy()
-- case 5: Destroy() function
elseif type(task.Destroy) == "function" then
task:Destroy()
-- case 6: array of tasks
elseif task[1] ~= nil then
for _, subtask in ipairs(task) do
cleanupOne(subtask)
end
end
end
end
local function cleanup(...: any)
for index = 1, select("#", ...) do
cleanupOne(select(index, ...))
end
end
return cleanup