@rbxts/app-forge 0.7.2-alpha.26 → 0.7.2-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/hooks/usePx.luau +1 -1
- package/out/renderManager.d.ts +13 -6
- package/out/renderManager.luau +86 -27
- package/package.json +1 -1
package/out/hooks/usePx.luau
CHANGED
|
@@ -77,7 +77,7 @@ local function usePx(target, baseResolution, minScale)
|
|
|
77
77
|
if baseResolution then
|
|
78
78
|
BASE_RESOLUTION(baseResolution)
|
|
79
79
|
end
|
|
80
|
-
if minScale ~=
|
|
80
|
+
if minScale ~= 0 and minScale == minScale and minScale then
|
|
81
81
|
MIN_SCALE(minScale)
|
|
82
82
|
end
|
|
83
83
|
if target then
|
package/out/renderManager.d.ts
CHANGED
|
@@ -13,13 +13,20 @@ export default class Renders extends Rules {
|
|
|
13
13
|
* Decides render strategy based on props.
|
|
14
14
|
*/
|
|
15
15
|
protected renderMount(this: AppForge, props: Types.Props.Main): Vide.Node;
|
|
16
|
+
/**
|
|
17
|
+
* Render multiple apps by name, avoiding duplicates.
|
|
18
|
+
*/
|
|
16
19
|
private renderNames;
|
|
20
|
+
/**
|
|
21
|
+
* Render children of a parent app recursively
|
|
22
|
+
*/
|
|
23
|
+
private renderChildren;
|
|
17
24
|
private collectByGroup;
|
|
18
25
|
private normalizeGroups;
|
|
19
|
-
protected renderApp(this: AppForge, props: Types.Props.Main): Vide.Node;
|
|
20
|
-
protected renderApps(this: AppForge, props: Types.Props.Main):
|
|
21
|
-
protected renderGroup(this: AppForge, props: Types.Props.Main):
|
|
22
|
-
protected renderGroupByName(this: AppForge, props: Types.Props.Main):
|
|
23
|
-
protected renderGroupByNames(this: AppForge, props: Types.Props.Main):
|
|
24
|
-
protected renderAll(this: AppForge, props: Types.Props.Main):
|
|
26
|
+
protected renderApp(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Vide.Node;
|
|
27
|
+
protected renderApps(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Instance[];
|
|
28
|
+
protected renderGroup(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Instance[];
|
|
29
|
+
protected renderGroupByName(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Instance[];
|
|
30
|
+
protected renderGroupByNames(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Instance[];
|
|
31
|
+
protected renderAll(this: AppForge, props: Types.Props.Main, renderedSet?: Set<AppNames>): Instance[];
|
|
25
32
|
}
|
package/out/renderManager.luau
CHANGED
|
@@ -58,6 +58,8 @@ do
|
|
|
58
58
|
else
|
|
59
59
|
forge.debug:logTag("px", "global", "Skipped duplicate px initialization")
|
|
60
60
|
end
|
|
61
|
+
-- Track rendered apps for this render pass
|
|
62
|
+
local renderedSet = {}
|
|
61
63
|
if render then
|
|
62
64
|
local _condition = render.name
|
|
63
65
|
if _condition ~= "" and _condition then
|
|
@@ -65,32 +67,32 @@ do
|
|
|
65
67
|
end
|
|
66
68
|
if _condition ~= "" and _condition then
|
|
67
69
|
forge.debug:logTag("render", "global", "Rendering group by name", render)
|
|
68
|
-
return
|
|
70
|
+
return self:renderGroupByName(props, renderedSet)
|
|
69
71
|
end
|
|
70
72
|
local _value = render.names and render.group
|
|
71
73
|
if _value ~= "" and _value then
|
|
72
74
|
forge.debug:logTag("render", "global", "Rendering group by names", render)
|
|
73
|
-
return
|
|
75
|
+
return self:renderGroupByNames(props, renderedSet)
|
|
74
76
|
end
|
|
75
77
|
local _value_1 = render.name
|
|
76
78
|
if _value_1 ~= "" and _value_1 then
|
|
77
79
|
forge.debug:logTag("render", render.name, "Rendering single app")
|
|
78
|
-
return
|
|
80
|
+
return self:renderApp(props, renderedSet)
|
|
79
81
|
end
|
|
80
82
|
if render.names then
|
|
81
83
|
forge.debug:logTag("render", "global", "Rendering multiple apps", render.names)
|
|
82
|
-
return
|
|
84
|
+
return self:renderApps(props, renderedSet)
|
|
83
85
|
end
|
|
84
86
|
local _value_2 = render.group
|
|
85
87
|
if _value_2 ~= "" and _value_2 then
|
|
86
88
|
forge.debug:logTag("render", "global", "Rendering group", render.group)
|
|
87
|
-
return
|
|
89
|
+
return self:renderGroup(props, renderedSet)
|
|
88
90
|
end
|
|
89
91
|
end
|
|
90
92
|
forge.debug:logTag("render", "global", "Rendering all apps")
|
|
91
|
-
return self:renderAll(props)
|
|
93
|
+
return self:renderAll(props, renderedSet)
|
|
92
94
|
end
|
|
93
|
-
function Renders:renderNames(props, names, forge, context, details)
|
|
95
|
+
function Renders:renderNames(props, names, forge, context, renderedSet, details)
|
|
94
96
|
if not names then
|
|
95
97
|
local _logger = forge.logger
|
|
96
98
|
local _exp = `Renderer resolved 0 apps ({context})`
|
|
@@ -99,24 +101,58 @@ do
|
|
|
99
101
|
_condition = props.render
|
|
100
102
|
end
|
|
101
103
|
_logger:log("WARN", _exp, _condition)
|
|
102
|
-
return
|
|
104
|
+
return {}
|
|
103
105
|
end
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
local rendered = {}
|
|
107
|
+
for _, name in names do
|
|
108
|
+
if renderedSet[name] ~= nil then
|
|
109
|
+
continue
|
|
110
|
+
end
|
|
111
|
+
renderedSet[name] = true
|
|
107
112
|
local _forge = forge
|
|
108
113
|
local _object = table.clone(props)
|
|
109
114
|
setmetatable(_object, nil)
|
|
110
115
|
_object.render = {
|
|
111
116
|
name = name,
|
|
112
117
|
}
|
|
113
|
-
|
|
118
|
+
local appRender = _forge:renderApp(_object, renderedSet)
|
|
119
|
+
table.insert(rendered, appRender)
|
|
120
|
+
self:renderChildren(props, name, forge, renderedSet, rendered)
|
|
114
121
|
end
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
return rendered
|
|
123
|
+
end
|
|
124
|
+
function Renders:renderChildren(props, parentName, forge, renderedSet, accumulated)
|
|
125
|
+
-- ▼ ReadonlyMap.forEach ▼
|
|
126
|
+
local _callback = function(app, childName)
|
|
127
|
+
local _result = app.rules
|
|
128
|
+
if _result ~= nil then
|
|
129
|
+
_result = _result.parent
|
|
130
|
+
end
|
|
131
|
+
local _condition = _result == parentName
|
|
132
|
+
if _condition then
|
|
133
|
+
local _renderedSet = renderedSet
|
|
134
|
+
local _childName = childName
|
|
135
|
+
_condition = not (_renderedSet[_childName] ~= nil)
|
|
136
|
+
end
|
|
137
|
+
if _condition then
|
|
138
|
+
local _renderedSet = renderedSet
|
|
139
|
+
local _childName = childName
|
|
140
|
+
_renderedSet[_childName] = true
|
|
141
|
+
local _forge = forge
|
|
142
|
+
local _object = table.clone(props)
|
|
143
|
+
setmetatable(_object, nil)
|
|
144
|
+
_object.render = {
|
|
145
|
+
name = childName,
|
|
146
|
+
}
|
|
147
|
+
local childRender = _forge:renderApp(_object, renderedSet)
|
|
148
|
+
table.insert(accumulated, childRender)
|
|
149
|
+
self:renderChildren(props, childName, forge, renderedSet, accumulated)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
for _k, _v in AppRegistry do
|
|
153
|
+
_callback(_v, _k, AppRegistry)
|
|
117
154
|
end
|
|
118
|
-
-- ▲
|
|
119
|
-
return _newValue
|
|
155
|
+
-- ▲ ReadonlyMap.forEach ▲
|
|
120
156
|
end
|
|
121
157
|
function Renders:collectByGroup(groups, filter)
|
|
122
158
|
local result = {}
|
|
@@ -154,7 +190,7 @@ do
|
|
|
154
190
|
end
|
|
155
191
|
return _result
|
|
156
192
|
end
|
|
157
|
-
function Renders:renderApp(props)
|
|
193
|
+
function Renders:renderApp(props, renderedSet)
|
|
158
194
|
local _name = props.render
|
|
159
195
|
if _name ~= nil then
|
|
160
196
|
_name = _name.name
|
|
@@ -170,6 +206,9 @@ do
|
|
|
170
206
|
self.debug:time("render", name)
|
|
171
207
|
if not (self.loaded[name] ~= nil) then
|
|
172
208
|
local render = appClass.constructor.new(props, name):render()
|
|
209
|
+
if not render then
|
|
210
|
+
error(`App "{name}" returned undefined from render()`, 2)
|
|
211
|
+
end
|
|
173
212
|
apply(render)({
|
|
174
213
|
Name = "Render",
|
|
175
214
|
})
|
|
@@ -190,11 +229,19 @@ do
|
|
|
190
229
|
else
|
|
191
230
|
self.debug:logTag("render", name, "Reusing existing render instance")
|
|
192
231
|
end
|
|
232
|
+
-- mark as rendered
|
|
233
|
+
local _result = renderedSet
|
|
234
|
+
if _result ~= nil then
|
|
235
|
+
_result[name] = true
|
|
236
|
+
end
|
|
193
237
|
self:renderRules(name, props)
|
|
194
238
|
self.debug:timeEnd("render", name)
|
|
195
239
|
return self.loaded[name].container
|
|
196
240
|
end
|
|
197
|
-
function Renders:renderApps(props)
|
|
241
|
+
function Renders:renderApps(props, renderedSet)
|
|
242
|
+
if renderedSet == nil then
|
|
243
|
+
renderedSet = {}
|
|
244
|
+
end
|
|
198
245
|
local _names = props.render
|
|
199
246
|
if _names ~= nil then
|
|
200
247
|
_names = _names.names
|
|
@@ -203,9 +250,12 @@ do
|
|
|
203
250
|
if not names then
|
|
204
251
|
error("renderApps requires app names", 2)
|
|
205
252
|
end
|
|
206
|
-
return self:renderNames(props, names, self, "renderApps", names)
|
|
253
|
+
return self:renderNames(props, names, self, "renderApps", renderedSet, names)
|
|
207
254
|
end
|
|
208
|
-
function Renders:renderGroup(props)
|
|
255
|
+
function Renders:renderGroup(props, renderedSet)
|
|
256
|
+
if renderedSet == nil then
|
|
257
|
+
renderedSet = {}
|
|
258
|
+
end
|
|
209
259
|
local _group = props.render
|
|
210
260
|
if _group ~= nil then
|
|
211
261
|
_group = _group.group
|
|
@@ -215,9 +265,12 @@ do
|
|
|
215
265
|
error("renderGroup requires a group", 2)
|
|
216
266
|
end
|
|
217
267
|
local groups = self:normalizeGroups(group)
|
|
218
|
-
return self:renderNames(props, self:collectByGroup(groups), self, "renderGroup", group)
|
|
268
|
+
return self:renderNames(props, self:collectByGroup(groups), self, "renderGroup", renderedSet, group)
|
|
219
269
|
end
|
|
220
|
-
function Renders:renderGroupByName(props)
|
|
270
|
+
function Renders:renderGroupByName(props, renderedSet)
|
|
271
|
+
if renderedSet == nil then
|
|
272
|
+
renderedSet = {}
|
|
273
|
+
end
|
|
221
274
|
local _binding = props.render or {}
|
|
222
275
|
local group = _binding.group
|
|
223
276
|
local name = _binding.name
|
|
@@ -227,12 +280,15 @@ do
|
|
|
227
280
|
local groups = self:normalizeGroups(group)
|
|
228
281
|
return self:renderNames(props, self:collectByGroup(groups, function(n)
|
|
229
282
|
return n == name
|
|
230
|
-
end), self, "renderGroupByName", {
|
|
283
|
+
end), self, "renderGroupByName", renderedSet, {
|
|
231
284
|
group = group,
|
|
232
285
|
name = name,
|
|
233
286
|
})
|
|
234
287
|
end
|
|
235
|
-
function Renders:renderGroupByNames(props)
|
|
288
|
+
function Renders:renderGroupByNames(props, renderedSet)
|
|
289
|
+
if renderedSet == nil then
|
|
290
|
+
renderedSet = {}
|
|
291
|
+
end
|
|
236
292
|
local _binding = props.render or {}
|
|
237
293
|
local group = _binding.group
|
|
238
294
|
local names = _binding.names
|
|
@@ -243,12 +299,15 @@ do
|
|
|
243
299
|
return self:renderNames(props, self:collectByGroup(groups, function(n)
|
|
244
300
|
local _n = n
|
|
245
301
|
return table.find(names, _n) ~= nil
|
|
246
|
-
end), self, "renderGroupByNames", {
|
|
302
|
+
end), self, "renderGroupByNames", renderedSet, {
|
|
247
303
|
group = group,
|
|
248
304
|
names = names,
|
|
249
305
|
})
|
|
250
306
|
end
|
|
251
|
-
function Renders:renderAll(props)
|
|
307
|
+
function Renders:renderAll(props, renderedSet)
|
|
308
|
+
if renderedSet == nil then
|
|
309
|
+
renderedSet = {}
|
|
310
|
+
end
|
|
252
311
|
local names = {}
|
|
253
312
|
-- ▼ ReadonlyMap.forEach ▼
|
|
254
313
|
local _callback = function(_, name)
|
|
@@ -260,7 +319,7 @@ do
|
|
|
260
319
|
_callback(_v, _k, AppRegistry)
|
|
261
320
|
end
|
|
262
321
|
-- ▲ ReadonlyMap.forEach ▲
|
|
263
|
-
return self:renderNames(props, names, self, "renderAll")
|
|
322
|
+
return self:renderNames(props, names, self, "renderAll", renderedSet)
|
|
264
323
|
end
|
|
265
324
|
end
|
|
266
325
|
return {
|