1
1
import type {
2
2
AttrNamespace ,
3
3
Bounds ,
4
+ CapturedArguments ,
4
5
Cursor ,
5
6
CursorStackSymbol ,
6
7
ElementBuilder ,
@@ -12,6 +13,7 @@ import type {
12
13
Maybe ,
13
14
ModifierInstance ,
14
15
Nullable ,
16
+ Reference ,
15
17
SimpleComment ,
16
18
SimpleDocumentFragment ,
17
19
SimpleElement ,
@@ -20,6 +22,7 @@ import type {
20
22
UpdatableBlock ,
21
23
} from '@glimmer/interfaces' ;
22
24
import { destroy , registerDestructor } from '@glimmer/destroyable' ;
25
+ import { createConstRef } from '@glimmer/reference' ;
23
26
import { assert , expect , Stack } from '@glimmer/util' ;
24
27
25
28
import type { DynamicAttribute } from './attributes/dynamic' ;
@@ -100,7 +103,6 @@ export class NewElementBuilder implements ElementBuilder {
100
103
101
104
constructor ( env : Environment , parentNode : SimpleElement , nextSibling : Nullable < SimpleNode > ) {
102
105
this . pushElement ( parentNode , nextSibling ) ;
103
-
104
106
this . env = env ;
105
107
this . dom = env . getAppendOperations ( ) ;
106
108
this . updateOperations = env . getDOM ( ) ;
@@ -214,15 +216,31 @@ export class NewElementBuilder implements ElementBuilder {
214
216
element : SimpleElement ,
215
217
guid : string ,
216
218
insertBefore : Maybe < SimpleNode >
217
- ) : Nullable < RemoteLiveBlock > {
218
- return this . __pushRemoteElement ( element , guid , insertBefore ) ;
219
+ ) : RemoteLiveBlock {
220
+ const block = this . __pushRemoteElement ( element , guid , insertBefore ) ;
221
+ if ( this . env . debugRenderTree ) {
222
+ const namedArgs : Record < string , Reference > = { } ;
223
+ if ( insertBefore !== undefined ) {
224
+ namedArgs [ 'insertBefore' ] = createConstRef ( insertBefore , false ) ;
225
+ }
226
+ this . env . debugRenderTree . create ( block , {
227
+ type : 'keyword' ,
228
+ name : 'in-element' ,
229
+ args : {
230
+ named : namedArgs ,
231
+ positional : [ createConstRef ( element , false ) ] ,
232
+ } as CapturedArguments ,
233
+ instance : null ,
234
+ } ) ;
235
+ }
236
+ return block ;
219
237
}
220
238
221
239
__pushRemoteElement (
222
240
element : SimpleElement ,
223
241
_guid : string ,
224
242
insertBefore : Maybe < SimpleNode >
225
- ) : Nullable < RemoteLiveBlock > {
243
+ ) : RemoteLiveBlock {
226
244
this . pushElement ( element , insertBefore ) ;
227
245
228
246
if ( insertBefore === undefined ) {
@@ -236,12 +254,20 @@ export class NewElementBuilder implements ElementBuilder {
236
254
return this . pushLiveBlock ( block , true ) ;
237
255
}
238
256
239
- popRemoteElement ( ) {
240
- this . popBlock ( ) ;
257
+ popRemoteElement ( ) : void {
258
+ const block = this . popBlock ( ) ;
241
259
this . popElement ( ) ;
260
+ const parentElement = this . element ;
261
+ if ( this . env . debugRenderTree ) {
262
+ this . env . debugRenderTree ?. didRender ( block , {
263
+ parentElement : ( ) => parentElement ,
264
+ firstNode : ( ) => block . firstNode ( ) ,
265
+ lastNode : ( ) => block . lastNode ( ) ,
266
+ } ) ;
267
+ }
242
268
}
243
269
244
- protected pushElement ( element : SimpleElement , nextSibling : Maybe < SimpleNode > = null ) {
270
+ protected pushElement ( element : SimpleElement , nextSibling : Maybe < SimpleNode > = null ) : void {
245
271
this [ CURSOR_STACK ] . push ( new CursorImpl ( element , nextSibling ) ) ;
246
272
}
247
273
@@ -268,7 +294,7 @@ export class NewElementBuilder implements ElementBuilder {
268
294
return element ;
269
295
}
270
296
271
- willCloseElement ( ) {
297
+ willCloseElement ( ) : void {
272
298
this . block ( ) . closeElement ( ) ;
273
299
}
274
300
0 commit comments