add gs
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
--[[
|
||||
Attempts to get the default value of a given property on a Roblox instance.
|
||||
|
||||
This is used by the reconciler in cases where a prop was previously set on a
|
||||
primitive component, but is no longer present in a component's new props.
|
||||
|
||||
Eventually, Roblox might provide a nicer API to query the default property
|
||||
of an object without constructing an instance of it.
|
||||
]]
|
||||
|
||||
local Symbol = require(script.Parent.Symbol)
|
||||
|
||||
local Nil = Symbol.named("Nil")
|
||||
local _cachedPropertyValues = {}
|
||||
|
||||
local function getDefaultPropertyValue(className, propertyName)
|
||||
local classCache = _cachedPropertyValues[className]
|
||||
|
||||
if classCache then
|
||||
local propValue = classCache[propertyName]
|
||||
|
||||
-- We have to use a marker here, because Lua doesn't distinguish
|
||||
-- between 'nil' and 'not in a table'
|
||||
if propValue == Nil then
|
||||
return true, nil
|
||||
end
|
||||
|
||||
if propValue ~= nil then
|
||||
return true, propValue
|
||||
end
|
||||
else
|
||||
classCache = {}
|
||||
_cachedPropertyValues[className] = classCache
|
||||
end
|
||||
|
||||
local created = Instance.new(className)
|
||||
local ok, defaultValue = pcall(function()
|
||||
return created[propertyName]
|
||||
end)
|
||||
|
||||
created:Destroy()
|
||||
|
||||
if ok then
|
||||
if defaultValue == nil then
|
||||
classCache[propertyName] = Nil
|
||||
else
|
||||
classCache[propertyName] = defaultValue
|
||||
end
|
||||
end
|
||||
|
||||
return ok, defaultValue
|
||||
end
|
||||
|
||||
return getDefaultPropertyValue
|
||||
Reference in New Issue
Block a user