@@ -66,6 +66,92 @@ var setCover = function (nets) {
66
66
return pages ;
67
67
} ;
68
68
69
+ var setCoverStatic = function ( nets ) {
70
+ var res = [ ] ;
71
+ var nPages = [ ] ;
72
+ var js = [ ] ;
73
+ var nettoUrl = { } ;
74
+ var origNets = nets . slice ( ) ;
75
+
76
+ class JSNet {
77
+ constructor ( net ) {
78
+ if ( net . length == 0 ) {
79
+ this . jss = [ ] ;
80
+ this . url = "" ;
81
+ return ;
82
+ }
83
+ var mainUrl = net [ 0 ] . response . url ;
84
+ this . jss = net
85
+ . filter ( ( n ) => n . type . indexOf ( "script" ) != - 1 )
86
+ . filter ( ( n ) => n . initiator . url == mainUrl )
87
+ . map ( ( n ) => n . url . split ( "?" ) [ 0 ] ) ;
88
+ this . url = net . length > 0 ? net [ 0 ] . documentURL : "" ;
89
+ this . orignet = net ;
90
+ }
91
+ }
92
+
93
+ nets = nets . map ( ( n ) => new JSNet ( n ) ) ;
94
+ var unionstatic = [ ] ;
95
+ for ( var net of nets ) {
96
+ if ( net . jss && net . jss . length == 0 ) continue ;
97
+ unionstatic = unionstatic . concat ( net . jss ) ;
98
+ }
99
+ unionstatic = [ ...new Set ( unionstatic ) ] ;
100
+
101
+ var largestUncovered = function ( nets , union ) {
102
+ var largest = nets [ 0 ] ,
103
+ largestLen = 0 ,
104
+ largestUrl = "" ,
105
+ largestNet = nets [ 0 ] ;
106
+ for ( var net of nets ) {
107
+ var uncovered = net . jss . filter ( ( n ) => union . includes ( n ) ) ;
108
+ if ( uncovered . length > largestLen ) {
109
+ largest = uncovered ;
110
+ largestLen = uncovered . length ;
111
+ largestUrl = net . url ;
112
+ largestNet = net ;
113
+ }
114
+ }
115
+ // program.verbose && console.log(`Picking next: ${largestUrl}`);
116
+ return [ largest , largestUrl , largestNet ] ;
117
+ } ;
118
+
119
+ var unioncp = unionstatic . slice ( ) ;
120
+ while ( js . length < unioncp . length ) {
121
+ var [ net , u , jsnet ] = largestUncovered ( nets , unionstatic ) ;
122
+ // program.verbose && console.log(`largest uncovered: ${net.length}`);
123
+ for ( var n of net ) {
124
+ if ( js . indexOf ( n ) == - 1 ) js . push ( n ) ;
125
+ }
126
+ nPages . push ( jsnet ) ;
127
+ res . push ( u ) ;
128
+ unionstatic = unionstatic . filter ( ( n ) => ! net . includes ( n ) ) ;
129
+ // program.verbose &&
130
+ // console.log(`js: ${js.length}, union: ${unionstatic.length}`);
131
+ // remove net from nets
132
+ var netindex = nets . indexOf ( jsnet ) ;
133
+ netindex != - 1 && nets . splice ( netindex , 1 ) ;
134
+ }
135
+
136
+ // get all JS files from origNet and check against origUnion
137
+ var jssetcover = [ ] ;
138
+ for ( var p of nPages ) {
139
+ var net = p . orignet ;
140
+ var jss = net
141
+ . filter ( ( n ) => n . type . indexOf ( "script" ) != - 1 )
142
+ . map ( ( n ) => n . url . split ( "?" ) [ 0 ] ) ;
143
+ for ( var js of jss ) {
144
+ if ( ! jssetcover . includes ( js ) ) jssetcover . push ( js ) ;
145
+ }
146
+ }
147
+ // var rempages = _pagesleft(origNets, jssetcover);
148
+ // console.log(
149
+ // `npages: ${nPages.length} jssetcover: ${jssetcover.length} union: ${union.length} rempages: ${rempages}`
150
+ // );
151
+ return res ;
152
+ } ;
153
+
69
154
module . exports = {
70
155
setCover,
156
+ setCoverStatic,
71
157
} ;
0 commit comments