@@ -247,64 +247,66 @@ describeWithEnvironment('ScriptDuplication', function() {
247247 } ;
248248
249249 const results = Object . fromEntries (
250- Trace . Extras . ScriptDuplication . computeScriptDuplication ( scriptsData ) . entries ( ) . map ( ( [ key , value ] ) => {
251- return [ key , value . map ( v => ( { scriptId : v . script . scriptId as string , resourceSize : v . resourceSize } ) ) ] ;
250+ [ ...Trace . Extras . ScriptDuplication . computeScriptDuplication ( scriptsData ) . entries ( ) ] . map ( ( [ key , data ] ) => {
251+ return [
252+ key , data . duplicates . map ( v => ( { scriptId : v . script . scriptId as string , resourceSize : v . attributedSize } ) )
253+ ] ;
252254 } ) ) ;
253255 assert . deepEqual ( results , {
254256 'coursehero:///Control/assets/js/vendor/ng/select/select.js' : [
255257 { scriptId : '1.coursehero-bundle-1' , resourceSize : 48513 } ,
256258 { scriptId : '1.coursehero-bundle-2' , resourceSize : 48513 }
257259 ] ,
260+ 'coursehero:///js/src/search/results/store/filter-store.ts' : [
261+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 12717 } ,
262+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 12650 }
263+ ] ,
258264 'coursehero:///Control/assets/js/vendor/ng/select/angular-sanitize.js' : [
259265 { scriptId : '1.coursehero-bundle-1' , resourceSize : 9135 } ,
260266 { scriptId : '1.coursehero-bundle-2' , resourceSize : 9135 }
261267 ] ,
262- 'node_modules/@babel/runtime/helpers/inherits.js' : [
263- { scriptId : '1.coursehero-bundle-1' , resourceSize : 528 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 528 }
268+ 'coursehero:///js/src/common/component/school-search.tsx' : [
269+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 5840 } ,
270+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 5316 }
264271 ] ,
265- 'node_modules/@babel/runtime/helpers/typeof.js' : [
266- { scriptId : '1.coursehero-bundle-1' , resourceSize : 992 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 992 }
272+ 'coursehero:///js/src/search/results/view/filter/autocomplete-filter.tsx' : [
273+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 3823 } ,
274+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 3812 }
275+ ] ,
276+ 'coursehero:///js/src/common/component/search/abstract-taxonomy-search.tsx' : [
277+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 3103 } ,
278+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 3098 }
279+ ] ,
280+ 'coursehero:///js/src/search/results/view/filter/autocomplete-filter-with-icon.tsx' : [
281+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 2696 } ,
282+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 2693 }
267283 ] ,
268284 'coursehero:///js/src/utils/service/amplitude-service.ts' : [
269285 { scriptId : '1.coursehero-bundle-1' , resourceSize : 1348 } ,
270286 { scriptId : '1.coursehero-bundle-2' , resourceSize : 1325 }
271287 ] ,
272- 'coursehero:///js/src/utils/service/gsa-inmeta-tags.ts' : [
273- { scriptId : '1.coursehero-bundle-1' , resourceSize : 591 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 563 }
288+ 'coursehero:///js/src/search/results/view/filter/autocomplete-list.tsx' : [
289+ { scriptId : '1.coursehero-bundle-2' , resourceSize : 1143 } ,
290+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 1134 }
291+ ] ,
292+ 'node_modules/@babel/runtime/helpers/typeof.js' : [
293+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 992 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 992 }
274294 ] ,
275295 'coursehero:///js/src/search/results/store/filter-actions.ts' : [
276296 { scriptId : '1.coursehero-bundle-2' , resourceSize : 956 } , { scriptId : '1.coursehero-bundle-1' , resourceSize : 946 }
277297 ] ,
278298 'coursehero:///js/src/search/results/store/item/resource-types.ts' : [
279299 { scriptId : '1.coursehero-bundle-1' , resourceSize : 783 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 775 }
280300 ] ,
281- 'coursehero:///js/src/search/results/store/filter-store.ts' : [
282- { scriptId : '1.coursehero-bundle-1' , resourceSize : 12717 } ,
283- { scriptId : '1.coursehero-bundle-2' , resourceSize : 12650 }
284- ] ,
285- 'coursehero:///js/src/search/results/view/filter/autocomplete-list.tsx' : [
286- { scriptId : '1.coursehero-bundle-2' , resourceSize : 1143 } ,
287- { scriptId : '1.coursehero-bundle-1' , resourceSize : 1134 }
288- ] ,
289- 'coursehero:///js/src/search/results/view/filter/autocomplete-filter.tsx' : [
290- { scriptId : '1.coursehero-bundle-1' , resourceSize : 3823 } ,
291- { scriptId : '1.coursehero-bundle-2' , resourceSize : 3812 }
301+ 'coursehero:///js/src/utils/service/gsa-inmeta-tags.ts' : [
302+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 591 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 563 }
292303 ] ,
293- 'coursehero:///js/src/search/results/view/filter/autocomplete-filter-with-icon.tsx' : [
294- { scriptId : '1.coursehero-bundle-1' , resourceSize : 2696 } ,
295- { scriptId : '1.coursehero-bundle-2' , resourceSize : 2693 }
304+ 'node_modules/@babel/runtime/helpers/inherits.js' : [
305+ { scriptId : '1.coursehero-bundle-1' , resourceSize : 528 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 528 }
296306 ] ,
297307 'coursehero:///js/src/search/results/service/api/filter-api-service.ts' : [
298308 { scriptId : '1.coursehero-bundle-1' , resourceSize : 554 } , { scriptId : '1.coursehero-bundle-2' , resourceSize : 534 }
299309 ] ,
300- 'coursehero:///js/src/common/component/school-search.tsx' : [
301- { scriptId : '1.coursehero-bundle-2' , resourceSize : 5840 } ,
302- { scriptId : '1.coursehero-bundle-1' , resourceSize : 5316 }
303- ] ,
304- 'coursehero:///js/src/common/component/search/abstract-taxonomy-search.tsx' : [
305- { scriptId : '1.coursehero-bundle-1' , resourceSize : 3103 } ,
306- { scriptId : '1.coursehero-bundle-2' , resourceSize : 3098 }
307- ] ,
308310 'coursehero:///js/src/common/component/search/course-search.tsx' : [
309311 { scriptId : '1.coursehero-bundle-2' , resourceSize : 545 } , { scriptId : '1.coursehero-bundle-1' , resourceSize : 544 }
310312 ]
@@ -313,28 +315,46 @@ describeWithEnvironment('ScriptDuplication', function() {
313315 } ) ;
314316
315317 describe ( 'normalizeDuplication' , ( ) => {
318+ function makeDuplication ( entries : Array < { source : string , resourceSize : number } > ) :
319+ Trace . Extras . ScriptDuplication . ScriptDuplication {
320+ const duplication = new Map ( ) ;
321+
322+ for ( const { source, resourceSize} of entries ) {
323+ const data = duplication . get ( source ) ?? { estimatedWastedBytes : 0 , duplicates : [ ] } ;
324+ duplication . set ( source , data ) ;
325+ data . duplicates . push ( { resourceSize} ) ;
326+ }
327+
328+ return duplication ;
329+ }
330+
316331 it ( 'removes entries with just one value' , ( ) => {
317- const duplication = new Map ( [ [ '1' , [ { resourceSize : 100 } ] ] ] ) as Trace . Extras . ScriptDuplication . ScriptDuplication ;
332+ const duplication = makeDuplication ( [ { source : '1' , resourceSize : 100 } ] ) ;
318333 Trace . Extras . ScriptDuplication . normalizeDuplication ( duplication ) ;
319334 const results = Object . fromEntries ( duplication ) ;
320335 assert . deepEqual ( results , { } ) ;
321336 } ) ;
322337
323338 it ( 'sorts entries based on resource size' , ( ) => {
324- const duplication = new Map ( [
325- [ '1' , [ { resourceSize : 250 } , { resourceSize : 200 } ] ] ,
326- [ '2' , [ { resourceSize : 200 } , { resourceSize : 250 } ] ] ,
327- ] ) as Trace . Extras . ScriptDuplication . ScriptDuplication ;
339+ const duplication = makeDuplication ( [
340+ { source : '1' , resourceSize : 250 } ,
341+ { source : '1' , resourceSize : 200 } ,
342+ { source : '2' , resourceSize : 200 } ,
343+ { source : '2' , resourceSize : 250 } ,
344+ ] ) ;
328345 Trace . Extras . ScriptDuplication . normalizeDuplication ( duplication ) ;
329346 const results = Object . fromEntries ( duplication ) ;
330347 assert . deepEqual ( results , { } ) ;
331348 } ) ;
332349
333350 it ( 'removes duplication if size is much smaller than the largest' , ( ) => {
334- const duplication = new Map ( [
335- [ '1' , [ { resourceSize : 200 } , { resourceSize : 1 } , { resourceSize : 250 } ] ] ,
336- [ '2' , [ { resourceSize : 250 } , { resourceSize : 1 } ] ] ,
337- ] ) as Trace . Extras . ScriptDuplication . ScriptDuplication ;
351+ const duplication = makeDuplication ( [
352+ { source : '1' , resourceSize : 200 } ,
353+ { source : '1' , resourceSize : 1 } ,
354+ { source : '1' , resourceSize : 250 } ,
355+ { source : '2' , resourceSize : 250 } ,
356+ { source : '2' , resourceSize : 1 } ,
357+ ] ) ;
338358 Trace . Extras . ScriptDuplication . normalizeDuplication ( duplication ) ;
339359 const results = Object . fromEntries ( duplication ) ;
340360 assert . deepEqual ( results , { } ) ;
0 commit comments