@@ -67,8 +67,10 @@ const jsonSetMapReplacer = (k, v) => {
67
67
return v ;
68
68
} ;
69
69
70
- const uid = ( s , l = 8 ) =>
71
- createHash ( 'sha256' ) . update ( s ) . digest ( 'hex' ) . slice ( 0 , l ) ;
70
+ const uidint32 = ( s ) => {
71
+ const h = createHash ( 'sha256' ) . update ( s ) . digest ( 'hex' ) . slice ( 0 , 8 ) ;
72
+ return parseInt ( h , 16 ) & 0x7FFFFFFF ;
73
+ } ;
72
74
73
75
/******************************************************************************/
74
76
@@ -342,7 +344,7 @@ function loadAllSourceScriptlets() {
342
344
343
345
const globalPatchedScriptletsSet = new Set ( ) ;
344
346
345
- function addScriptingAPIResources ( id , entry , prop , fname ) {
347
+ function addScriptingAPIResources ( id , entry , prop , fid ) {
346
348
if ( entry [ prop ] === undefined ) { return ; }
347
349
for ( const hn of entry [ prop ] ) {
348
350
let details = scriptingDetails . get ( id ) ;
@@ -353,15 +355,20 @@ function addScriptingAPIResources(id, entry, prop, fname) {
353
355
} ;
354
356
scriptingDetails . set ( id , details ) ;
355
357
}
356
- let fnames = details [ prop ] . get ( hn ) ;
357
- if ( fnames === undefined ) {
358
- fnames = new Set ( ) ;
359
- details [ prop ] . set ( hn , fnames ) ;
358
+ let fids = details [ prop ] . get ( hn ) ;
359
+ if ( fids === undefined ) {
360
+ fids = new Set ( ) ;
361
+ details [ prop ] . set ( hn , fids ) ;
360
362
}
361
- fnames . add ( fname ) ;
363
+ fids . add ( fid ) ;
362
364
}
363
365
}
364
366
367
+ const toCSSFileId = s => uidint32 ( s ) & ~ 0b1 ;
368
+ const toJSFileId = s => uidint32 ( s ) | 0b1 ;
369
+ const fileNameFromId = id => id . toString ( 16 ) . padStart ( 8 , '0' ) ;
370
+
371
+
365
372
/******************************************************************************/
366
373
367
374
async function processCosmeticFilters ( assetDetails , mapin ) {
@@ -395,7 +402,7 @@ async function processCosmeticFilters(assetDetails, mapin) {
395
402
const cssContentMap = new Map ( ) ;
396
403
for ( const entry of optimized ) {
397
404
// ends-with 0 = css resource
398
- const id = parseInt ( uid ( entry . selector ) , 16 ) ;
405
+ const id = uidint32 ( entry . selector ) ;
399
406
let details = cssContentMap . get ( id ) ;
400
407
if ( details === undefined ) {
401
408
details = { a : entry . selector } ;
@@ -477,9 +484,10 @@ async function processCosmeticFilters(assetDetails, mapin) {
477
484
`${ JSON . stringify ( hostnamesMap , jsonReplacer ) } `
478
485
) ;
479
486
// ends-with 0 = css resource
480
- const fname = uid ( patchedScriptlet ) + '0' ;
481
- if ( globalPatchedScriptletsSet . has ( fname ) === false ) {
482
- globalPatchedScriptletsSet . add ( fname ) ;
487
+ const fid = toCSSFileId ( patchedScriptlet ) ;
488
+ if ( globalPatchedScriptletsSet . has ( fid ) === false ) {
489
+ globalPatchedScriptletsSet . add ( fid ) ;
490
+ const fname = fileNameFromId ( fid ) ;
483
491
writeFile ( `${ scriptletDir } /${ fname . slice ( 0 , 1 ) } /${ fname . slice ( 1 ) } .js` , patchedScriptlet , { } ) ;
484
492
generatedFiles . push ( fname ) ;
485
493
}
@@ -488,13 +496,13 @@ async function processCosmeticFilters(assetDetails, mapin) {
488
496
assetDetails . id ,
489
497
{ matches : entry [ 1 ] . y } ,
490
498
'matches' ,
491
- fname
499
+ fid
492
500
) ;
493
501
addScriptingAPIResources (
494
502
assetDetails . id ,
495
503
{ excludeMatches : entry [ 1 ] . n } ,
496
504
'excludeMatches' ,
497
- fname
505
+ fid
498
506
) ;
499
507
}
500
508
}
@@ -622,12 +630,12 @@ async function processScriptletFilters(assetDetails, mapin) {
622
630
623
631
for ( const [ token , argsDetails ] of scriptletDetails ) {
624
632
const argsMap = Array . from ( argsDetails ) . map ( entry => [
625
- parseInt ( uid ( entry [ 0 ] ) , 16 ) ,
633
+ uidint32 ( entry [ 0 ] ) ,
626
634
{ a : entry [ 1 ] . a , n : entry [ 1 ] . n }
627
635
] ) ;
628
636
const hostnamesMap = new Map ( ) ;
629
637
for ( const [ argsHash , details ] of argsDetails ) {
630
- toHostnamesMap ( details . y , parseInt ( uid ( argsHash ) , 16 ) , hostnamesMap ) ;
638
+ toHostnamesMap ( details . y , uidint32 ( argsHash ) , hostnamesMap ) ;
631
639
}
632
640
const patchedScriptlet = originalScriptletMap . get ( token )
633
641
. replace (
@@ -638,9 +646,10 @@ async function processScriptletFilters(assetDetails, mapin) {
638
646
`${ JSON . stringify ( hostnamesMap , jsonReplacer ) } `
639
647
) ;
640
648
// ends-with 1 = scriptlet resource
641
- const fname = uid ( patchedScriptlet ) + '1' ;
642
- if ( globalPatchedScriptletsSet . has ( fname ) === false ) {
643
- globalPatchedScriptletsSet . add ( fname ) ;
649
+ const fid = toJSFileId ( patchedScriptlet ) ;
650
+ if ( globalPatchedScriptletsSet . has ( fid ) === false ) {
651
+ globalPatchedScriptletsSet . add ( fid ) ;
652
+ const fname = fileNameFromId ( fid ) ;
644
653
writeFile ( `${ scriptletDir } /${ fname . slice ( 0 , 1 ) } /${ fname . slice ( 1 ) } .js` , patchedScriptlet , { } ) ;
645
654
generatedFiles . push ( fname ) ;
646
655
}
@@ -649,13 +658,13 @@ async function processScriptletFilters(assetDetails, mapin) {
649
658
assetDetails . id ,
650
659
{ matches : details . y } ,
651
660
'matches' ,
652
- fname
661
+ fid
653
662
) ;
654
663
addScriptingAPIResources (
655
664
assetDetails . id ,
656
665
{ excludeMatches : details . n } ,
657
666
'excludeMatches' ,
658
- fname
667
+ fid
659
668
) ;
660
669
}
661
670
}
0 commit comments