rollbar 2.26.2 → 2.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -10
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/Gruntfile.js +51 -71
- package/README.md +2 -4
- package/bower.json +1 -3
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +5699 -5052
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +1 -1
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +5704 -5062
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +1 -1
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +5693 -5052
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +1 -1
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +5704 -5063
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +1 -1
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/index.d.ts +270 -231
- package/karma.conf.js +16 -34
- package/package.json +21 -17
- package/prettier.config.js +7 -0
- package/src/api.js +21 -10
- package/src/apiUtility.js +12 -8
- package/src/browser/core.js +103 -65
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/rollbar.js +1 -1
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -354
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +16 -14
- package/src/browser/transport/xhr.js +29 -13
- package/src/browser/transport.js +82 -25
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +71 -39
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +22 -13
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +133 -55
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +92 -28
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +89 -52
- package/test/api.test.js +31 -29
- package/test/apiUtility.test.js +43 -44
- package/test/browser.core.test.js +141 -131
- package/test/browser.domUtility.test.js +52 -35
- package/test/browser.predicates.test.js +13 -13
- package/test/browser.rollbar.test.js +597 -503
- package/test/browser.telemetry.test.js +76 -0
- package/test/browser.transforms.test.js +146 -128
- package/test/browser.transport.test.js +54 -46
- package/test/browser.url.test.js +12 -11
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/notifier.test.js +90 -78
- package/test/predicates.test.js +260 -214
- package/test/queue.test.js +230 -214
- package/test/rateLimiter.test.js +50 -42
- package/test/react-native.rollbar.test.js +149 -115
- package/test/react-native.transforms.test.js +21 -23
- package/test/react-native.transport.test.js +23 -11
- package/test/server.lambda.test.js +70 -53
- package/test/server.locals.test.js +437 -210
- package/test/server.parser.test.js +32 -26
- package/test/server.predicates.test.js +45 -43
- package/test/server.rollbar.test.js +311 -259
- package/test/server.telemetry.test.js +208 -83
- package/test/server.transforms.test.js +455 -361
- package/test/server.transport.test.js +144 -76
- package/test/telemetry.test.js +46 -37
- package/test/transforms.test.js +68 -66
- package/test/truncation.test.js +55 -53
- package/test/utility.test.js +266 -222
- package/webpack.config.js +46 -43
- package/.gitmodules +0 -3
- package/browserstack.browsers.js +0 -153
- package/browserstack.browsers.json +0 -4384
package/webpack.config.js
CHANGED
|
@@ -8,18 +8,17 @@ var outputPath = path.resolve(__dirname, 'dist');
|
|
|
8
8
|
|
|
9
9
|
var defaultsPlugin = new webpack.DefinePlugin(defaults);
|
|
10
10
|
var uglifyPlugin = new TerserPlugin({
|
|
11
|
-
|
|
12
|
-
parallel: true
|
|
11
|
+
parallel: true,
|
|
13
12
|
});
|
|
14
13
|
|
|
15
14
|
var snippetConfig = {
|
|
16
15
|
name: 'snippet',
|
|
17
16
|
entry: {
|
|
18
|
-
'rollbar.snippet': './src/browser/bundles/rollbar.snippet.js'
|
|
17
|
+
'rollbar.snippet': './src/browser/bundles/rollbar.snippet.js',
|
|
19
18
|
},
|
|
20
19
|
output: {
|
|
21
20
|
path: outputPath,
|
|
22
|
-
filename: '[name].js'
|
|
21
|
+
filename: '[name].js',
|
|
23
22
|
},
|
|
24
23
|
plugins: [defaultsPlugin],
|
|
25
24
|
module: {
|
|
@@ -31,26 +30,26 @@ var snippetConfig = {
|
|
|
31
30
|
exclude: [/node_modules/, /vendor/],
|
|
32
31
|
options: {
|
|
33
32
|
failOnError: true,
|
|
34
|
-
configFile: path.resolve(__dirname, '.eslintrc')
|
|
35
|
-
}
|
|
33
|
+
configFile: path.resolve(__dirname, '.eslintrc'),
|
|
34
|
+
},
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
37
|
test: /\.js$/,
|
|
39
38
|
loader: 'strict-loader',
|
|
40
|
-
exclude: [/node_modules/, /vendor/]
|
|
41
|
-
}
|
|
39
|
+
exclude: [/node_modules/, /vendor/],
|
|
40
|
+
},
|
|
42
41
|
],
|
|
43
|
-
}
|
|
42
|
+
},
|
|
44
43
|
};
|
|
45
44
|
|
|
46
45
|
var pluginConfig = {
|
|
47
46
|
name: 'plugins',
|
|
48
47
|
entry: {
|
|
49
|
-
|
|
48
|
+
jquery: './src/browser/plugins/jquery.js',
|
|
50
49
|
},
|
|
51
50
|
output: {
|
|
52
51
|
path: outputPath + '/plugins/',
|
|
53
|
-
filename: '[name].min.js'
|
|
52
|
+
filename: '[name].min.js',
|
|
54
53
|
},
|
|
55
54
|
plugins: [defaultsPlugin],
|
|
56
55
|
module: {
|
|
@@ -62,24 +61,24 @@ var pluginConfig = {
|
|
|
62
61
|
exclude: [/node_modules/, /vendor/],
|
|
63
62
|
options: {
|
|
64
63
|
failOnError: true,
|
|
65
|
-
configFile: path.resolve(__dirname, '.eslintrc')
|
|
66
|
-
}
|
|
64
|
+
configFile: path.resolve(__dirname, '.eslintrc'),
|
|
65
|
+
},
|
|
67
66
|
},
|
|
68
67
|
{
|
|
69
68
|
test: /\.js$/,
|
|
70
69
|
loader: 'strict-loader',
|
|
71
|
-
exclude: [/node_modules/, /vendor/]
|
|
72
|
-
}
|
|
70
|
+
exclude: [/node_modules/, /vendor/],
|
|
71
|
+
},
|
|
73
72
|
],
|
|
74
|
-
}
|
|
73
|
+
},
|
|
75
74
|
};
|
|
76
75
|
|
|
77
76
|
var vanillaConfigBase = {
|
|
78
77
|
entry: {
|
|
79
|
-
|
|
78
|
+
rollbar: './src/browser/bundles/rollbar.js',
|
|
80
79
|
},
|
|
81
80
|
output: {
|
|
82
|
-
path: outputPath
|
|
81
|
+
path: outputPath,
|
|
83
82
|
},
|
|
84
83
|
plugins: [defaultsPlugin],
|
|
85
84
|
devtool: 'hidden-source-map',
|
|
@@ -92,27 +91,27 @@ var vanillaConfigBase = {
|
|
|
92
91
|
exclude: [/node_modules/, /vendor/],
|
|
93
92
|
options: {
|
|
94
93
|
failOnError: true,
|
|
95
|
-
configFile: path.resolve(__dirname, '.eslintrc')
|
|
96
|
-
}
|
|
94
|
+
configFile: path.resolve(__dirname, '.eslintrc'),
|
|
95
|
+
},
|
|
97
96
|
},
|
|
98
97
|
{
|
|
99
98
|
test: /\.js$/,
|
|
100
99
|
loader: 'strict-loader',
|
|
101
|
-
exclude: [/node_modules/, /vendor/]
|
|
102
|
-
}
|
|
100
|
+
exclude: [/node_modules/, /vendor/],
|
|
101
|
+
},
|
|
103
102
|
],
|
|
104
|
-
}
|
|
103
|
+
},
|
|
105
104
|
};
|
|
106
105
|
|
|
107
106
|
var UMDConfigBase = {
|
|
108
107
|
entry: {
|
|
109
|
-
'rollbar.umd': ['./src/browser/bundles/rollbar.js']
|
|
108
|
+
'rollbar.umd': ['./src/browser/bundles/rollbar.js'],
|
|
110
109
|
},
|
|
111
110
|
output: {
|
|
112
111
|
path: outputPath,
|
|
113
112
|
library: 'rollbar',
|
|
114
113
|
libraryTarget: 'umd',
|
|
115
|
-
globalObject: 'this'
|
|
114
|
+
globalObject: 'this',
|
|
116
115
|
},
|
|
117
116
|
devtool: 'source-map',
|
|
118
117
|
module: {
|
|
@@ -124,39 +123,38 @@ var UMDConfigBase = {
|
|
|
124
123
|
exclude: [/node_modules/, /vendor/],
|
|
125
124
|
options: {
|
|
126
125
|
failOnError: true,
|
|
127
|
-
configFile: path.resolve(__dirname, '.eslintrc')
|
|
128
|
-
}
|
|
126
|
+
configFile: path.resolve(__dirname, '.eslintrc'),
|
|
127
|
+
},
|
|
129
128
|
},
|
|
130
129
|
{
|
|
131
130
|
test: /\.js$/,
|
|
132
131
|
loader: 'strict-loader',
|
|
133
|
-
exclude: [/node_modules/, /vendor/]
|
|
134
|
-
}
|
|
132
|
+
exclude: [/node_modules/, /vendor/],
|
|
133
|
+
},
|
|
135
134
|
],
|
|
136
|
-
}
|
|
135
|
+
},
|
|
137
136
|
};
|
|
138
137
|
|
|
139
138
|
var noConflictConfigBase = extend({}, UMDConfigBase);
|
|
140
139
|
noConflictConfigBase.entry = {
|
|
141
|
-
'rollbar.noconflict.umd': ['./src/browser/bundles/rollbar.noconflict.js']
|
|
140
|
+
'rollbar.noconflict.umd': ['./src/browser/bundles/rollbar.noconflict.js'],
|
|
142
141
|
};
|
|
143
142
|
|
|
144
143
|
var namedAMDConfigBase = extend({}, UMDConfigBase);
|
|
145
144
|
namedAMDConfigBase.entry = {
|
|
146
|
-
'rollbar.named-amd': namedAMDConfigBase.entry['rollbar.umd']
|
|
145
|
+
'rollbar.named-amd': namedAMDConfigBase.entry['rollbar.umd'],
|
|
147
146
|
};
|
|
148
147
|
namedAMDConfigBase.output = extend({}, namedAMDConfigBase.output);
|
|
149
148
|
namedAMDConfigBase.output.library = 'rollbar';
|
|
150
149
|
namedAMDConfigBase.output.libraryTarget = 'amd';
|
|
151
150
|
|
|
152
|
-
|
|
153
151
|
var config = [snippetConfig, pluginConfig];
|
|
154
152
|
|
|
155
153
|
function optimizationConfig(minimizer) {
|
|
156
154
|
return {
|
|
157
155
|
minimize: minimizer ? true : false,
|
|
158
|
-
minimizer: minimizer ? [minimizer] : []
|
|
159
|
-
}
|
|
156
|
+
minimizer: minimizer ? [minimizer] : [],
|
|
157
|
+
};
|
|
160
158
|
}
|
|
161
159
|
|
|
162
160
|
function addVanillaToConfig(webpackConfig, filename, extraPlugins, minimizer) {
|
|
@@ -169,7 +167,7 @@ function addVanillaToConfig(webpackConfig, filename, extraPlugins, minimizer) {
|
|
|
169
167
|
|
|
170
168
|
vanillaConfig.optimization = optimizationConfig(minimizer);
|
|
171
169
|
|
|
172
|
-
vanillaConfig.output = extend({filename: filename}, vanillaConfig.output);
|
|
170
|
+
vanillaConfig.output = extend({ filename: filename }, vanillaConfig.output);
|
|
173
171
|
|
|
174
172
|
webpackConfig.push(vanillaConfig);
|
|
175
173
|
}
|
|
@@ -183,13 +181,17 @@ function addUMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
|
|
|
183
181
|
|
|
184
182
|
UMDConfig.optimization = optimizationConfig(minimizer);
|
|
185
183
|
|
|
186
|
-
UMDConfig.output = extend({filename: filename}, UMDConfig.output);
|
|
184
|
+
UMDConfig.output = extend({ filename: filename }, UMDConfig.output);
|
|
187
185
|
|
|
188
186
|
webpackConfig.push(UMDConfig);
|
|
189
187
|
}
|
|
190
188
|
|
|
191
|
-
|
|
192
|
-
|
|
189
|
+
function addNoConflictToConfig(
|
|
190
|
+
webpackConfig,
|
|
191
|
+
filename,
|
|
192
|
+
extraPlugins,
|
|
193
|
+
minimizer,
|
|
194
|
+
) {
|
|
193
195
|
var basePlugins = [defaultsPlugin];
|
|
194
196
|
var noConflictConfig = extend({}, noConflictConfigBase);
|
|
195
197
|
|
|
@@ -198,12 +200,14 @@ function addNoConflictToConfig(webpackConfig, filename, extraPlugins, minimizer)
|
|
|
198
200
|
|
|
199
201
|
noConflictConfig.optimization = optimizationConfig(minimizer);
|
|
200
202
|
|
|
201
|
-
noConflictConfig.output = extend(
|
|
203
|
+
noConflictConfig.output = extend(
|
|
204
|
+
{ filename: filename },
|
|
205
|
+
noConflictConfig.output,
|
|
206
|
+
);
|
|
202
207
|
|
|
203
208
|
webpackConfig.push(noConflictConfig);
|
|
204
209
|
}
|
|
205
210
|
|
|
206
|
-
|
|
207
211
|
function addNamedAMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
|
|
208
212
|
var basePlugins = [defaultsPlugin];
|
|
209
213
|
var AMDConfig = extend({}, namedAMDConfigBase);
|
|
@@ -213,12 +217,11 @@ function addNamedAMDToConfig(webpackConfig, filename, extraPlugins, minimizer) {
|
|
|
213
217
|
|
|
214
218
|
AMDConfig.optimization = optimizationConfig(minimizer);
|
|
215
219
|
|
|
216
|
-
AMDConfig.output = extend({filename: filename}, AMDConfig.output);
|
|
220
|
+
AMDConfig.output = extend({ filename: filename }, AMDConfig.output);
|
|
217
221
|
|
|
218
222
|
webpackConfig.push(AMDConfig);
|
|
219
223
|
}
|
|
220
224
|
|
|
221
|
-
|
|
222
225
|
function generateBuildConfig(name, plugins, minimizer) {
|
|
223
226
|
addVanillaToConfig(config, name, plugins, minimizer);
|
|
224
227
|
addUMDToConfig(config, name, plugins, minimizer);
|
package/.gitmodules
DELETED
package/browserstack.browsers.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
var request = require('request');
|
|
2
|
-
|
|
3
|
-
var BROWSERSTACK_BROWSERS_ENDPOINT = 'https://www.browserstack.com/automate/browsers.json'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function annotate(browserList) {
|
|
7
|
-
return browserList.map(function(browser) {
|
|
8
|
-
browser.base = 'BrowserStack';
|
|
9
|
-
browser._alias = 'bs_' + browser.browser;
|
|
10
|
-
browser._version = parseFloat(browser.browser_version || '0');
|
|
11
|
-
browser._id = [
|
|
12
|
-
browser.browser,
|
|
13
|
-
browser.browser_version,
|
|
14
|
-
browser.device,
|
|
15
|
-
browser.os,
|
|
16
|
-
browser.os_version
|
|
17
|
-
].join('-').replace(/\s/g, '_');
|
|
18
|
-
|
|
19
|
-
return browser;
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
function versionAliases(browserList) {
|
|
25
|
-
var ret = [];
|
|
26
|
-
browserList.forEach(function(browser) {
|
|
27
|
-
if (browser._version) {
|
|
28
|
-
var copy = simpleCopy(browser);
|
|
29
|
-
copy._alias = 'bs_' + browser.browser + '_' + browser._version;
|
|
30
|
-
ret.push(copy);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return ret;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var browsers = [];
|
|
38
|
-
var sortedByBrowser = {};
|
|
39
|
-
try {
|
|
40
|
-
loadBrowsers(require('./browserstack.browsers.json'));
|
|
41
|
-
} catch (e) {
|
|
42
|
-
console.error('Could not read ./browserstack.browsers.json. Ignoring.', e); // eslint-disable-line no-console
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
function simpleCopy(obj) {
|
|
47
|
-
return JSON.parse(JSON.stringify(obj));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
function loadBrowsers(browserListFromBrowserStack) {
|
|
52
|
-
browsers = annotate(browserListFromBrowserStack);
|
|
53
|
-
browsers = browsers.concat(versionAliases(browsers));
|
|
54
|
-
|
|
55
|
-
sortedByBrowser = {};
|
|
56
|
-
|
|
57
|
-
browsers.forEach(function(browser) {
|
|
58
|
-
var browserList = sortedByBrowser[browser._alias] = sortedByBrowser[browser._alias] || [];
|
|
59
|
-
browserList.push(browser);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Sort all of the browsers by browser, _version
|
|
63
|
-
for (var browser in sortedByBrowser) {
|
|
64
|
-
var browserList = sortedByBrowser[browser];
|
|
65
|
-
var numBrowsers = browserList.length;
|
|
66
|
-
browserList.sort(function(a, b) {
|
|
67
|
-
return a._version - b._version;
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// Store a reference in the global browsers array to the oldest, previous and latest of
|
|
71
|
-
// each browser.
|
|
72
|
-
if (numBrowsers > 0) {
|
|
73
|
-
var browserName = browser;
|
|
74
|
-
var oldest = simpleCopy(browserList[0]);
|
|
75
|
-
var latest = simpleCopy(browserList[browserList.length - 1]);
|
|
76
|
-
var previous;
|
|
77
|
-
|
|
78
|
-
oldest._alias = browserName + '_oldest';
|
|
79
|
-
latest._alias = browserName + '_latest';
|
|
80
|
-
|
|
81
|
-
browsers.push(oldest);
|
|
82
|
-
browsers.push(latest);
|
|
83
|
-
|
|
84
|
-
if (numBrowsers > 1) {
|
|
85
|
-
previous = simpleCopy(browserList[browserList.length - 2]);
|
|
86
|
-
previous._alias = browserName + '_previous';
|
|
87
|
-
browsers.push(previous);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
function download(username, accessKey, callback) {
|
|
95
|
-
var auth = 'Basic ' + new Buffer(username + ':' + accessKey).toString('base64');
|
|
96
|
-
var req = {
|
|
97
|
-
url: BROWSERSTACK_BROWSERS_ENDPOINT,
|
|
98
|
-
headers: {
|
|
99
|
-
Authorization: auth
|
|
100
|
-
},
|
|
101
|
-
json: true
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
request.get(req, function(err, resp, body) {
|
|
105
|
-
if (err || resp.statusCode != 200) {
|
|
106
|
-
return callback(err || new Error('Received non 200 response from BrowserStack: ' + resp.statusCode));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Save the downloaded browsers in memory
|
|
110
|
-
loadBrowsers(body);
|
|
111
|
-
|
|
112
|
-
// TODO: Fix? fs is not defined here.
|
|
113
|
-
// fs.writeFile('./browserstack.browsers.json', JSON.stringify(body, null, ' '), callback);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Returns an array of Objects that match the requested filters.
|
|
120
|
-
* If no arguments are provided, an empty array is returned.
|
|
121
|
-
*
|
|
122
|
-
* E.g.
|
|
123
|
-
*
|
|
124
|
-
* filter('bs_latest') - Will return the latest browser Objects for each browser.
|
|
125
|
-
* filter('bs_latest', 'bs_previous') - Will return the latest and previous browser Objects for each browser.
|
|
126
|
-
* filter('bs_ie_latest', 'bs_oldest') - Will return the latest IE browser and all of the oldest browsers.
|
|
127
|
-
* filter('bs_all') - Will return the all of the browser Objects.
|
|
128
|
-
*
|
|
129
|
-
* @returns {Array}
|
|
130
|
-
*/
|
|
131
|
-
function filter() {
|
|
132
|
-
var ret = [];
|
|
133
|
-
var labels = Array.prototype.slice.call(arguments);
|
|
134
|
-
|
|
135
|
-
labels.forEach(function(label) {
|
|
136
|
-
browsers.forEach(function(browser) {
|
|
137
|
-
if (label === 'bs_all') {
|
|
138
|
-
ret.push(browser);
|
|
139
|
-
} else if (browser._alias.match(new RegExp(label.slice(2) + '$'))) {
|
|
140
|
-
ret.push(browser);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
return ret;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
module.exports = {
|
|
150
|
-
_browsers: browsers,
|
|
151
|
-
download: download,
|
|
152
|
-
filter: filter,
|
|
153
|
-
};
|