--[[ 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