@@ -50,6 +50,16 @@ exports.update = function update(callback) {
50
50
} ) ;
51
51
} ;
52
52
53
+ function getReplacement ( field , resource , fallback ) {
54
+ if ( ! field )
55
+ return fallback ;
56
+ if ( Array . isArray ( field ) )
57
+ field = field . filter ( function ( f ) { return resource [ f ] } ) [ 0 ] ;
58
+ if ( resource [ field ] != undefined )
59
+ return resource [ field ] ;
60
+ return fallback ;
61
+ }
62
+
53
63
/**
54
64
* Parse the given sources.
55
65
*
@@ -93,17 +103,17 @@ exports.parse = function parse(sources, callback) {
93
103
[
94
104
{
95
105
resource : 'user_agent_parsers'
96
- , replacement : 'family_replacement'
106
+ , replacement : [ 'family_replacement' , 'v1_replacement' , 'v2_replacement' , 'v3_replacement' ]
97
107
, name : 'browser'
98
108
}
99
109
, {
100
110
resource : 'device_parsers'
101
- , replacement : ' device_replacement'
111
+ , replacement : [ [ 'brand_replacement' , ' device_replacement' ] , 'model_replacement' ] //
102
112
, name : 'device'
103
113
}
104
114
, {
105
115
resource : 'os_parsers'
106
- , replacement : 'os_replacement'
116
+ , replacement : [ 'os_replacement' , 'os_v1_replacement' , 'os_v2_replacement' ]
107
117
, name : 'os'
108
118
}
109
119
] . forEach ( function parsing ( details ) {
@@ -120,39 +130,25 @@ exports.parse = function parse(sources, callback) {
120
130
// We need to JSON stringify the data to properly add slashes escape other
121
131
// kinds of crap in the RegularExpression. If we don't do thing we get
122
132
// some illegal token warnings.
133
+ var rflags = resource . regex_flags || '' ;
134
+ if ( rflags ) rflags = ", '" + rflags + "'" ;
123
135
parser = 'parser = Object.create(null);\n' ;
124
- parser += 'parser[0] = new RegExp(' + JSON . stringify ( resource . regex ) + ');\n' ;
136
+ parser += 'parser[0] = new RegExp(' + JSON . stringify ( resource . regex ) + rflags + ');\n' ;
125
137
126
138
// Check if we have replacement for the parsed family name
127
- if ( resource [ details . replacement ] ) {
128
- parser += 'parser[1] = "' + resource [ details . replacement ] . replace ( '"' , '\\"' ) + '";' ;
129
- } else {
130
- parser += 'parser[1] = 0;' ;
131
- }
139
+ parser += 'parser[1] = "' + getReplacement ( details . replacement [ 0 ] , resource , '$1' ) . replace ( '"' , '\\"' ) + '";' ;
132
140
133
141
parser += '\n' ;
134
142
135
- if ( resource . v1_replacement ) {
136
- parser += 'parser[2] = "' + resource . v1_replacement . replace ( '"' , '\\"' ) + '";' ;
137
- } else {
138
- parser += 'parser[2] = 0;' ;
139
- }
143
+ parser += 'parser[2] = "' + getReplacement ( details . replacement [ 1 ] , resource , '$2' ) . replace ( '"' , '\\"' ) + '";' ;
140
144
141
145
parser += '\n' ;
142
146
143
- if ( resource . v2_replacement ) {
144
- parser += 'parser[3] = "' + resource . v2_replacement . replace ( '"' , '\\"' ) + '";' ;
145
- } else {
146
- parser += 'parser[3] = 0;' ;
147
- }
147
+ parser += 'parser[3] = "' + getReplacement ( details . replacement [ 2 ] , resource , '$3' ) . replace ( '"' , '\\"' ) + '";' ;
148
148
149
149
parser += '\n' ;
150
150
151
- if ( resource . v3_replacement ) {
152
- parser += 'parser[4] = "' + resource . v3_replacement . replace ( '"' , '\\"' ) + '";' ;
153
- } else {
154
- parser += 'parser[4] = 0;' ;
155
- }
151
+ parser += 'parser[4] = "' + getReplacement ( details . replacement [ 3 ] , resource , '$4' ) . replace ( '"' , '\\"' ) + '";' ;
156
152
157
153
parser += '\n' ;
158
154
parser += 'exports.' + details . name + '[' + i + '] = parser;' ;
0 commit comments