Skip to content

Commit 83d8011

Browse files
committed
Do not return assets that have already been rendered.
1 parent bc49fe8 commit 83d8011

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

models/CBWIREController.cfc

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,22 @@ component singleton {
9292

9393
// Return assets from components
9494
if ( local.httpRequestState.assets.count() ) {
95-
local.componentsResult[ "assets" ] = local.httpRequestState.assets;
95+
var alreadyLoadedAssets = payload.components.reduce( function( _agg, _comp ) {
96+
if ( _comp.snapshot.memo.keyExists( "assets" ) ) {
97+
_comp.snapshot.memo.assets.each( function( _asset ) {
98+
_agg.append( _asset );
99+
} );
100+
}
101+
return _agg;
102+
}, [] );
103+
104+
local.componentsResult[ "assets" ] = local.httpRequestState.assets.filter( function( key, value ) {
105+
return !arrayFindNoCase( alreadyLoadedAssets, key );
106+
} );
107+
108+
if ( !local.componentsResult[ "assets" ].count() ) {
109+
local.componentsResult[ "assets" ] = [];
110+
}
96111
}
97112

98113
// Set the response headers to prevent caching

models/Component.cfc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,8 +1135,8 @@ component output="true" {
11351135
} ).each( function( key, value, result ) {
11361136
// Extract the counter from the tag name
11371137
local.counter = key.replaceNoCase( "assets", "" );
1138-
// Create assets tag id based on compile time id and counter
1139-
local.assetsTagId = variables._compileTimeKey & "-" & local.counter;
1138+
// Create assets tag id based on hash of assets
1139+
local.assetsTagId = hash( value );
11401140
// Track the assets tag
11411141
variables._assets[ local.assetsTagId ] = value;
11421142
local.requestAssets = variables._CBWIREController.getRequestAssets();

test-harness/tests/specs/CBWIRESpec.cfc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,11 +497,29 @@ component extends="coldbox.system.testing.BaseTestCase" {
497497
updates = {}
498498
);
499499
var result = cbwireController.handleRequest( payload, event );
500+
expect( isStruct( result.assets ) );
500501
expect( result.assets.count() ).toBe( 1 );
501502
var keys = result.assets.keyArray();
502503
expect( result.assets[ keys.first() ] ).toInclude( "tailwind.min.css" );
503504
} );
504505

506+
it( "it should NOT return assets if they were already rendered", function() {
507+
var payload = incomingRequest(
508+
memo = {
509+
"name": "test.should_track_cbwire_assets_in_http_response",
510+
"id": "Z1Ruz1tGMPXSfw7osBW2",
511+
"children": [],
512+
"assets": [ "FC8550AF548BA7D81CAA8C2333141FDA" ]
513+
},
514+
data = {},
515+
calls = [],
516+
updates = {}
517+
);
518+
var result = cbwireController.handleRequest( payload, event );
519+
expect( isArray( result.assets ) ).toBeTrue();
520+
expect( result.assets.len() ).toBe( 0 );
521+
} );
522+
505523
it( "should support $refresh action", function() {
506524
var payload = incomingRequest(
507525
memo = {

test-harness/wires/test/should_not_render_cbwire_assets_tags.cfm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212

1313
<cbwire:assets>
1414
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css">
15-
</cbwire:script>
15+
</cbwire:assets>

0 commit comments

Comments
 (0)