@@ -15,7 +15,7 @@ const BROWSER_MAPPING = {
1515 op_mini : null ,
1616} ;
1717
18- let p = { } ;
18+ let p = new Map ( ) ;
1919for ( let prop in prefixes ) {
2020 let browserMap = { } ;
2121 for ( let b of prefixes [ prop ] . browsers ) {
@@ -43,17 +43,31 @@ for (let prop in prefixes) {
4343 }
4444 }
4545 }
46- p [ prop ] = browserMap ;
46+ // p[prop] = browserMap;
47+ let s = JSON . stringify ( browserMap ) ;
48+ let found = false ;
49+ for ( let [ key , val ] of p ) {
50+ if ( JSON . stringify ( val ) === s ) {
51+ key . push ( prop ) ;
52+ found = true ;
53+ break ;
54+ }
55+ }
56+ if ( ! found ) {
57+ p . set ( [ prop ] , browserMap ) ;
58+ }
4759}
4860
61+ console . log ( p )
62+
4963let prefixMapping = {
5064 webkit : 'WebKit' ,
5165 moz : 'Moz' ,
5266 ms : 'Ms' ,
5367 o : 'O'
5468} ;
5569
56- let enumify = ( f ) => f . replace ( / ^ @ / , 'At' ) . replace ( / ^ : : / , 'PseudoElement' ) . replace ( / ^ : / , 'PseudoClass' ) . replace ( / ( ^ | - ) ( [ a - z ] ) / g, ( _ , a , x ) => x . toUpperCase ( ) )
70+ let enumify = ( f ) => f . replace ( / ^ @ ( [ a - z ] ) / , ( _ , x ) => 'At' + x . toUpperCase ( ) ) . replace ( / ^ : : ( [ a - z ] ) / , ( _ , x ) => 'PseudoElement' + x . toUpperCase ( ) ) . replace ( / ^ : ( [ a - z ] ) / , ( _ , x ) => 'PseudoClass' + x . toUpperCase ( ) ) . replace ( / ( ^ | - ) ( [ a - z ] ) / g, ( _ , a , x ) => x . toUpperCase ( ) )
5771
5872let s = `// This file is autogenerated by build-prefixes.js. DO NOT EDIT!
5973
@@ -66,15 +80,15 @@ pub struct Browsers {
6680}
6781
6882pub enum Feature {
69- ${ Object . keys ( p ) . map ( enumify ) . sort ( ) . join ( ',\n ' ) }
83+ ${ [ ... p . keys ( ) ] . flat ( ) . map ( enumify ) . sort ( ) . join ( ',\n ' ) }
7084}
7185
7286impl Feature {
7387 pub fn prefixes_for(&self, browsers: Browsers) -> VendorPrefix {
7488 let mut prefixes = VendorPrefix::None;
7589 match self {
76- ${ Object . entries ( p ) . map ( ( [ name , versions ] ) => {
77- return `Feature::${ enumify ( name ) } => {
90+ ${ [ ... p ] . map ( ( [ features , versions ] ) => {
91+ return `${ features . map ( name => ` Feature::${ enumify ( name ) } ` ) . join ( ' |\n ' ) } => {
7892 ${ Object . entries ( versions ) . map ( ( [ name , prefixes ] ) => {
7993 return `if let Some(version) = browsers.${ name } {
8094 ${ Object . entries ( prefixes ) . map ( ( [ prefix , [ min , max ] ] ) => {
0 commit comments