mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-23 22:25:26 +00:00
Fix Ref reification (#462)
* Update ApiValue type to use new value format * Use new value format for Ref reification
This commit is contained in:
@@ -70,7 +70,7 @@ function reifyInner(instanceMap, virtualInstances, id, parentInstance, unapplied
|
|||||||
for propertyName, virtualValue in pairs(virtualInstance.Properties) do
|
for propertyName, virtualValue in pairs(virtualInstance.Properties) do
|
||||||
-- Because refs may refer to instances that we haven't constructed yet,
|
-- Because refs may refer to instances that we haven't constructed yet,
|
||||||
-- we defer applying any ref properties until all instances are created.
|
-- we defer applying any ref properties until all instances are created.
|
||||||
if virtualValue.Type == "Ref" then
|
if next(virtualValue) == "Ref" then
|
||||||
table.insert(deferredRefs, {
|
table.insert(deferredRefs, {
|
||||||
id = id,
|
id = id,
|
||||||
instance = instance,
|
instance = instance,
|
||||||
@@ -136,23 +136,23 @@ function applyDeferredRefs(instanceMap, deferredRefs, unappliedPatch)
|
|||||||
end
|
end
|
||||||
|
|
||||||
for _, entry in ipairs(deferredRefs) do
|
for _, entry in ipairs(deferredRefs) do
|
||||||
local virtualValue = entry.virtualValue
|
local _, refId = next(entry.virtualValue)
|
||||||
|
|
||||||
if virtualValue.Value == nil then
|
if refId == nil then
|
||||||
continue
|
continue
|
||||||
end
|
end
|
||||||
|
|
||||||
local targetInstance = instanceMap.fromIds[virtualValue.Value]
|
local targetInstance = instanceMap.fromIds[refId]
|
||||||
if targetInstance == nil then
|
if targetInstance == nil then
|
||||||
markFailed(entry.id, entry.propertyName, virtualValue)
|
markFailed(entry.id, entry.propertyName, entry.virtualValue)
|
||||||
continue
|
continue
|
||||||
end
|
end
|
||||||
|
|
||||||
local ok = setProperty(entry.instance, entry.propertyName, targetInstance)
|
local ok = setProperty(entry.instance, entry.propertyName, targetInstance)
|
||||||
if not ok then
|
if not ok then
|
||||||
markFailed(entry.id, entry.propertyName, virtualValue)
|
markFailed(entry.id, entry.propertyName, entry.virtualValue)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return reify
|
return reify
|
||||||
|
|||||||
@@ -5,10 +5,7 @@ local strict = require(script.Parent.strict)
|
|||||||
|
|
||||||
local RbxId = t.string
|
local RbxId = t.string
|
||||||
|
|
||||||
local ApiValue = t.interface({
|
local ApiValue = t.keys(t.string)
|
||||||
Type = t.string,
|
|
||||||
Value = t.optional(t.any),
|
|
||||||
})
|
|
||||||
|
|
||||||
local ApiInstanceMetadata = t.interface({
|
local ApiInstanceMetadata = t.interface({
|
||||||
ignoreUnknownInstances = t.optional(t.boolean),
|
ignoreUnknownInstances = t.optional(t.boolean),
|
||||||
@@ -96,4 +93,4 @@ return strict("Types", {
|
|||||||
VirtualInstance = ApiInstance,
|
VirtualInstance = ApiInstance,
|
||||||
VirtualMetadata = ApiInstanceMetadata,
|
VirtualMetadata = ApiInstanceMetadata,
|
||||||
VirtualValue = ApiValue,
|
VirtualValue = ApiValue,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user