1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.getUnsupportedTargets = getUnsupportedTargets;
|
7 | exports.default = exports.targetMetadata = void 0;
|
8 |
|
9 | var _data = _interopRequireDefault(require("caniuse-db/fulldata-json/data-2.0.json"));
|
10 |
|
11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
12 |
|
13 | // $FlowFixMe: Flow import error
|
14 | // HACK: modern targets should be determined once at runtime
|
15 | const targetMetadata = {
|
16 | targets: ['chrome', 'firefox', 'opera', 'safari', 'ie', 'edge', 'ios_saf', 'op_mini', 'android', 'bb', 'op_mob', 'and_chr', 'and_ff', 'ie_mob', 'and_uc', 'samsung', 'baidu']
|
17 | };
|
18 | exports.targetMetadata = targetMetadata;
|
19 | const targetNameMappings = {
|
20 | chrome: 'Chrome',
|
21 | firefox: 'Firefox',
|
22 | opera: 'Opera',
|
23 | baidu: 'Baidu',
|
24 | and_qq: 'QQ Browser',
|
25 | safari: 'Safari',
|
26 | android: 'Android Browser',
|
27 | ie: 'IE',
|
28 | edge: 'Edge',
|
29 | ios_saf: 'iOS Safari',
|
30 | op_mini: 'Opera Mini',
|
31 | bb: 'Blackberry Browser',
|
32 | op_mob: 'Opera Mobile',
|
33 | and_chr: 'Android Chrome',
|
34 | and_ff: 'Android Firefox',
|
35 | ie_mob: 'IE Mobile',
|
36 | and_uc: 'Android UC Browser',
|
37 | samsung: 'Samsung Browser'
|
38 | };
|
39 | /**
|
40 | * Take a target's id and return it's full name by using `targetNameMappings`
|
41 | * ex. {target: and_ff, version: 40} => 'Android FireFox 40'
|
42 | */
|
43 |
|
44 | function formatTargetNames(target) {
|
45 | return `${targetNameMappings[target.target]} ${target.version}`;
|
46 | }
|
47 | /**
|
48 | * Check if a browser version is in the range format
|
49 | * ex. 10.0-10.2
|
50 | */
|
51 |
|
52 |
|
53 | function versionIsRange(version) {
|
54 | return version.includes('-');
|
55 | }
|
56 | /**
|
57 | * Parse version from caniuse and compare with parsed version from browserslist.
|
58 | */
|
59 |
|
60 |
|
61 | function compareRanges(targetVersion, statsVersion) {
|
62 | return targetVersion === parseFloat(statsVersion);
|
63 | }
|
64 | /*
|
65 | * Check the CanIUse database to see if targets are supported
|
66 | */
|
67 |
|
68 |
|
69 | function canIUseIsNotSupported(node, {
|
70 | version,
|
71 | target,
|
72 | parsedVersion
|
73 | }) {
|
74 | const {
|
75 | stats
|
76 | } = _data.default.data[node.caniuseId];
|
77 | const targetStats = stats[target];
|
78 | return versionIsRange(version) ? Object.keys(targetStats).some(statsVersion => versionIsRange(statsVersion) && compareRanges(parsedVersion, statsVersion) ? !targetStats[statsVersion].includes('y') : false) : targetStats[version] && !targetStats[version].includes('y');
|
79 | }
|
80 | /**
|
81 | * Return an array of all unsupported targets
|
82 | */
|
83 |
|
84 |
|
85 | function getUnsupportedTargets(node, targets) {
|
86 | return targets.filter(target => canIUseIsNotSupported(node, target)).map(formatTargetNames);
|
87 | }
|
88 | /**
|
89 | * Check if the node has matching object or properties
|
90 | */
|
91 |
|
92 |
|
93 | function isValid(node, eslintNode, targets) {
|
94 | switch (eslintNode.type) {
|
95 | case 'CallExpression':
|
96 | case 'NewExpression':
|
97 | if (!eslintNode.callee) return true;
|
98 | if (eslintNode.callee.name !== node.object) return true;
|
99 | break;
|
100 |
|
101 | case 'MemberExpression':
|
102 | // Pass tests if non-matching object or property
|
103 | if (!eslintNode.object || !eslintNode.property) return true;
|
104 | if (eslintNode.object.name !== node.object) return true; // If the property is missing from the rule, it means that only the
|
105 | // object is required to determine compatibility
|
106 |
|
107 | if (!node.property) break;
|
108 | if (eslintNode.property.name !== node.property) return true;
|
109 | break;
|
110 |
|
111 | default:
|
112 | return true;
|
113 | }
|
114 |
|
115 | return !getUnsupportedTargets(node, targets).length;
|
116 | }
|
117 |
|
118 | const CanIUseProvider = [// new ServiceWorker()
|
119 | {
|
120 | caniuseId: 'serviceworkers',
|
121 | astNodeType: 'NewExpression',
|
122 | object: 'ServiceWorker'
|
123 | }, {
|
124 | caniuseId: 'serviceworkers',
|
125 | astNodeType: 'MemberExpression',
|
126 | object: 'navigator',
|
127 | property: 'serviceWorker'
|
128 | }, // document.querySelector()
|
129 | {
|
130 | caniuseId: 'queryselector',
|
131 | astNodeType: 'MemberExpression',
|
132 | object: 'document',
|
133 | property: 'querySelector'
|
134 | }, // IntersectionObserver
|
135 | {
|
136 | caniuseId: 'intersectionobserver',
|
137 | astNodeType: 'NewExpression',
|
138 | object: 'IntersectionObserver'
|
139 | }, // PaymentRequest
|
140 | {
|
141 | caniuseId: 'payment-request',
|
142 | astNodeType: 'NewExpression',
|
143 | object: 'PaymentRequest'
|
144 | }, // Promises
|
145 | {
|
146 | caniuseId: 'promises',
|
147 | astNodeType: 'NewExpression',
|
148 | object: 'Promise'
|
149 | }, {
|
150 | caniuseId: 'promises',
|
151 | astNodeType: 'MemberExpression',
|
152 | object: 'Promise',
|
153 | property: 'resolve'
|
154 | }, {
|
155 | caniuseId: 'promises',
|
156 | astNodeType: 'MemberExpression',
|
157 | object: 'Promise',
|
158 | property: 'all'
|
159 | }, {
|
160 | caniuseId: 'promises',
|
161 | astNodeType: 'MemberExpression',
|
162 | object: 'Promise',
|
163 | property: 'race'
|
164 | }, {
|
165 | caniuseId: 'promises',
|
166 | astNodeType: 'MemberExpression',
|
167 | object: 'Promise',
|
168 | property: 'reject'
|
169 | }, // fetch
|
170 | {
|
171 | caniuseId: 'fetch',
|
172 | astNodeType: 'CallExpression',
|
173 | object: 'fetch'
|
174 | }, // document.currentScript()
|
175 | {
|
176 | caniuseId: 'document-currentscript',
|
177 | astNodeType: 'MemberExpression',
|
178 | object: 'document',
|
179 | property: 'currentScript'
|
180 | }, // URL
|
181 | {
|
182 | caniuseId: 'url',
|
183 | astNodeType: 'NewExpression',
|
184 | object: 'URL'
|
185 | }, // URLSearchParams
|
186 | {
|
187 | caniuseId: 'urlsearchparams',
|
188 | astNodeType: 'NewExpression',
|
189 | object: 'URLSearchParams'
|
190 | }, // performance.now()
|
191 | {
|
192 | caniuseId: 'high-resolution-time',
|
193 | astNodeType: 'MemberExpression',
|
194 | object: 'performance',
|
195 | property: 'now'
|
196 | }, {
|
197 | caniuseId: 'typedarrays',
|
198 | astNodeType: 'NewExpression',
|
199 | object: 'TypedArray'
|
200 | }, {
|
201 | caniuseId: 'typedarrays',
|
202 | astNodeType: 'NewExpression',
|
203 | object: 'Int8Array'
|
204 | }, {
|
205 | caniuseId: 'typedarrays',
|
206 | astNodeType: 'NewExpression',
|
207 | object: 'Uint8Array'
|
208 | }, {
|
209 | caniuseId: 'typedarrays',
|
210 | astNodeType: 'NewExpression',
|
211 | object: 'Uint8ClampedArray'
|
212 | }, {
|
213 | caniuseId: 'typedarrays',
|
214 | astNodeType: 'NewExpression',
|
215 | object: 'Int16Array'
|
216 | }, {
|
217 | caniuseId: 'typedarrays',
|
218 | astNodeType: 'NewExpression',
|
219 | object: 'Uint16Array'
|
220 | }, {
|
221 | caniuseId: 'typedarrays',
|
222 | astNodeType: 'NewExpression',
|
223 | object: 'Int32Array'
|
224 | }, {
|
225 | caniuseId: 'typedarrays',
|
226 | astNodeType: 'NewExpression',
|
227 | object: 'Uint32Array'
|
228 | }, {
|
229 | caniuseId: 'typedarrays',
|
230 | astNodeType: 'NewExpression',
|
231 | object: 'Float32Array'
|
232 | }, {
|
233 | caniuseId: 'typedarrays',
|
234 | astNodeType: 'NewExpression',
|
235 | object: 'Float64Array'
|
236 | }].map(rule => Object.assign({}, rule, {
|
237 | isValid,
|
238 | getUnsupportedTargets,
|
239 | id: rule.property ? `${rule.object}.${rule.property}` : rule.object,
|
240 | protoChainId: rule.property ? `${rule.object}.${rule.property}` : rule.object,
|
241 | protoChain: rule.property ? [rule.object, rule.property] : [rule.object]
|
242 | }));
|
243 | var _default = CanIUseProvider;
|
244 | exports.default = _default;
|
245 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvQ2FuSVVzZVByb3ZpZGVyLmpzIl0sIm5hbWVzIjpbInRhcmdldE1ldGFkYXRhIiwidGFyZ2V0cyIsInRhcmdldE5hbWVNYXBwaW5ncyIsImNocm9tZSIsImZpcmVmb3giLCJvcGVyYSIsImJhaWR1IiwiYW5kX3FxIiwic2FmYXJpIiwiYW5kcm9pZCIsImllIiwiZWRnZSIsImlvc19zYWYiLCJvcF9taW5pIiwiYmIiLCJvcF9tb2IiLCJhbmRfY2hyIiwiYW5kX2ZmIiwiaWVfbW9iIiwiYW5kX3VjIiwic2Ftc3VuZyIsImZvcm1hdFRhcmdldE5hbWVzIiwidGFyZ2V0IiwidmVyc2lvbiIsInZlcnNpb25Jc1JhbmdlIiwiaW5jbHVkZXMiLCJjb21wYXJlUmFuZ2VzIiwidGFyZ2V0VmVyc2lvbiIsInN0YXRzVmVyc2lvbiIsInBhcnNlRmxvYXQiLCJjYW5JVXNlSXNOb3RTdXBwb3J0ZWQiLCJub2RlIiwicGFyc2VkVmVyc2lvbiIsInN0YXRzIiwiY2FuaXVzZVJlY29yZHMiLCJkYXRhIiwiY2FuaXVzZUlkIiwidGFyZ2V0U3RhdHMiLCJPYmplY3QiLCJrZXlzIiwic29tZSIsImdldFVuc3VwcG9ydGVkVGFyZ2V0cyIsImZpbHRlciIsIm1hcCIsImlzVmFsaWQiLCJlc2xpbnROb2RlIiwidHlwZSIsImNhbGxlZSIsIm5hbWUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsImxlbmd0aCIsIkNhbklVc2VQcm92aWRlciIsImFzdE5vZGVUeXBlIiwicnVsZSIsImFzc2lnbiIsImlkIiwicHJvdG9DaGFpbklkIiwicHJvdG9DaGFpbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQTs7OztBQURBO0FBbUJBO0FBQ08sTUFBTUEsY0FBOEIsR0FBRztBQUM1Q0MsRUFBQUEsT0FBTyxFQUFFLENBQ1AsUUFETyxFQUVQLFNBRk8sRUFHUCxPQUhPLEVBSVAsUUFKTyxFQUtQLElBTE8sRUFNUCxNQU5PLEVBT1AsU0FQTyxFQVFQLFNBUk8sRUFTUCxT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R0FDVCxHQUFFSSxJQUFJLENBQUNMLE1BQU8sSUFBR0ssSUFBSSxDQUFDSixRQUFTLEVBRHRCLEdBRVZJLElBQUksQ0FBQ0wsTUFOYTtBQU90QlMsRUFBQUEsVUFBVSxFQUFFSixJQUFJLENBQUNKLFFBQUwsR0FBZ0IsQ0FBQ0ksSUFBSSxDQUFDTCxNQUFOLEVBQWNLLElBQUksQ0FBQ0osUUFBbkIsQ0FBaEIsR0FBK0MsQ0FBQ0ksSUFBSSxDQUFDTCxNQUFOO0FBUHJDLENBQXhCLENBakptQyxDQUFyQztlQTRKZUcsZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyAkRmxvd0ZpeE1lOiBGbG93IGltcG9ydCBlcnJvclxuaW1wb3J0IGNhbml1c2VSZWNvcmRzIGZyb20gJ2Nhbml1c2UtZGIvZnVsbGRhdGEtanNvbi9kYXRhLTIuMC5qc29uJztcbmltcG9ydCB0eXBlIHsgTm9kZSwgRVNMaW50Tm9kZSwgVGFyZ2V0cywgVGFyZ2V0IH0gZnJvbSAnLi4vTGludFR5cGVzJztcblxudHlwZSBUYXJnZXRNZXRhZGF0YSA9IHtcbiAgLy8gVGhlIGxpc3Qgb2YgdGFyZ2V0cyBzdXBwb3J0ZWQgYnkgdGhlIHByb3ZpZGVyXG4gIHRhcmdldHM6IFRhcmdldHNcbn07XG5cbnR5cGUgQ2FuSVVzZVN0YXRzID0ge1xuICBbYnJvd3Nlcjogc3RyaW5nXToge1xuICAgIFt2ZXJzaW9uOiBzdHJpbmddOiBzdHJpbmdcbiAgfVxufTtcblxudHlwZSBDYW5JVXNlUmVjb3JkcyA9IHtcbiAgZGF0YTogQ2FuSVVzZVN0YXRzXG59O1xuXG4vLyBIQUNLOiBtb2Rlcm4gdGFyZ2V0cyBzaG91bGQgYmUgZGV0ZXJtaW5lZCBvbmNlIGF0IHJ1bnRpbWVcbmV4cG9ydCBjb25zdCB0YXJnZXRNZXRhZGF0YTogVGFyZ2V0TWV0YWRhdGEgPSB7XG4gIHRhcmdldHM6IFtcbiAgICAnY2hyb21lJyxcbiAgICAnZmlyZWZveCcsXG4gICAgJ29wZXJhJyxcbiAgICAnc2FmYXJpJyxcbiAgICAnaWUnLFxuICAgICdlZGdlJyxcbiAgICAnaW9zX3NhZicsXG4gICAgJ29wX21pbmknLFxuICAgICdhbmRyb2lkJyxcbiAgICAnYmInLFxuICAgICdvcF9tb2InLFxuICAgICdhbmRfY2hyJyxcbiAgICAnYW5kX2ZmJyxcbiAgICAnaWVfbW9iJyxcbiAgICAnYW5kX3VjJyxcbiAgICAnc2Ftc3VuZycsXG4gICAgJ2JhaWR1J1xuICBdXG59O1xuXG5jb25zdCB0YXJnZXROYW1lTWFwcGluZ3MgPSB7XG4gIGNocm9tZTogJ0Nocm9tZScsXG4gIGZpcmVmb3g6ICdGaXJlZm94JyxcbiAgb3BlcmE6ICdPcGVyYScsXG4gIGJhaWR1OiAnQmFpZHUnLFxuICBhbmRfcXE6ICdRUSBCcm93c2VyJyxcbiAgc2FmYXJpOiAnU2FmYXJpJyxcbiAgYW5kcm9pZDogJ0FuZHJvaWQgQnJvd3NlcicsXG4gIGllOiAnSUUnLFxuICBlZGdlOiAnRWRnZScsXG4gIGlvc19zYWY6ICdpT1MgU2FmYXJpJyxcbiAgb3BfbWluaTogJ09wZXJhIE1pbmknLFxuICBiYjogJ0JsYWNrYmVycnkgQnJvd3NlcicsXG4gIG9wX21vYjogJ09wZXJhIE1vYmlsZScsXG4gIGFuZF9jaHI6ICdBbmRyb2lkIENocm9tZScsXG4gIGFuZF9mZjogJ0FuZHJvaWQgRmlyZWZveCcsXG4gIGllX21vYjogJ0lFIE1vYmlsZScsXG4gIGFuZF91YzogJ0FuZHJvaWQgVUMgQnJvd3NlcicsXG4gIHNhbXN1bmc6ICdTYW1zdW5nIEJyb3dzZXInXG59O1xuXG4vKipcbiAqIFRha2UgYSB0YXJnZXQncyBpZCBhbmQgcmV0dXJuIGl0J3MgZnVsbCBuYW1lIGJ5IHVzaW5nIGB0YXJnZXROYW1lTWFwcGluZ3NgXG4gKiBleC4ge3RhcmdldDogYW5kX2ZmLCB2ZXJzaW9uOiA0MH0gPT4gJ0FuZHJvaWQgRmlyZUZveCA0MCdcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VGFyZ2V0TmFtZXModGFyZ2V0OiBUYXJnZXQpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dGFyZ2V0TmFtZU1hcHBpbmdzW3RhcmdldC50YXJnZXRdfSAke3RhcmdldC52ZXJzaW9ufWA7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBicm93c2VyIHZlcnNpb24gaXMgaW4gdGhlIHJhbmdlIGZvcm1hdFxuICogZXguIDEwLjAtMTAuMlxuICovXG5mdW5jdGlvbiB2ZXJzaW9uSXNSYW5nZSh2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZlcnNpb24uaW5jbHVkZXMoJy0nKTtcbn1cblxuLyoqXG4gKiBQYXJzZSB2ZXJzaW9uIGZyb20gY2FuaXVzZSBhbmQgY29tcGFyZSB3aXRoIHBhcnNlZCB2ZXJzaW9uIGZyb20gYnJvd3NlcnNsaXN0LlxuICovXG5mdW5jdGlvbiBjb21wYXJlUmFuZ2VzKHRhcmdldFZlcnNpb246IG51bWJlciwgc3RhdHNWZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhcmdldFZlcnNpb24gPT09IHBhcnNlRmxvYXQoc3RhdHNWZXJzaW9uKTtcbn1cblxuLypcbiAqIENoZWNrIHRoZSBDYW5JVXNlIGRhdGFiYXNlIHRvIHNlZSBpZiB0YXJnZXRzIGFyZSBzdXBwb3J0ZWRcbiAqL1xuZnVuY3Rpb24gY2FuSVVzZUlzTm90U3VwcG9ydGVkKFxuICBub2RlOiBOb2RlLFxuICB7IHZlcnNpb24sIHRhcmdldCwgcGFyc2VkVmVyc2lvbiB9OiBUYXJnZXRcbik6IGJvb2xlYW4ge1xuICBjb25zdCB7IHN0YXRzIH0gPSAoY2FuaXVzZVJlY29yZHM6IENhbklVc2VSZWNvcmRzKS5kYXRhW25vZGUuY2FuaXVzZUlkXTtcbiAgY29uc3QgdGFyZ2V0U3RhdHMgPSBzdGF0c1t0YXJnZXRdO1xuICByZXR1cm4gdmVyc2lvbklzUmFuZ2UodmVyc2lvbilcbiAgICA/IE9iamVjdC5rZXlzKHRhcmdldFN0YXRzKS5zb21lKFxuICAgICAgICAoc3RhdHNWZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgICAgICAgdmVyc2lvbklzUmFuZ2Uoc3RhdHNWZXJzaW9uKSAmJlxuICAgICAgICAgIGNvbXBhcmVSYW5nZXMocGFyc2VkVmVyc2lvbiwgc3RhdHNWZXJzaW9uKVxuICAgICAgICAgICAgPyAhdGFyZ2V0U3RhdHNbc3RhdHNWZXJzaW9uXS5pbmNsdWRlcygneScpXG4gICAgICAgICAgICA6IGZhbHNlXG4gICAgICApXG4gICAgOiB0YXJnZXRTdGF0c1t2ZXJzaW9uXSAmJiAhdGFyZ2V0U3RhdHNbdmVyc2lvbl0uaW5jbHVkZXMoJ3knKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHVuc3VwcG9ydGVkIHRhcmdldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc3VwcG9ydGVkVGFyZ2V0cyhcbiAgbm9kZTogTm9kZSxcbiAgdGFyZ2V0czogVGFyZ2V0c1xuKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiB0YXJnZXRzXG4gICAgLmZpbHRlcih0YXJnZXQgPT4gY2FuSVVzZUlzTm90U3VwcG9ydGVkKG5vZGUsIHRhcmdldCkpXG4gICAgLm1hcChmb3JtYXRUYXJnZXROYW1lcyk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIG5vZGUgaGFzIG1hdGNoaW5nIG9iamVjdCBvciBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWQoXG4gIG5vZGU6IE5vZGUsXG4gIGVzbGludE5vZGU6IEVTTGludE5vZGUsXG4gIHRhcmdldHM6IFRhcmdldHNcbik6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGVzbGludE5vZGUudHlwZSkge1xuICAgIGNhc2UgJ0NhbGxFeHByZXNzaW9uJzpcbiAgICBjYXNlICdOZXdFeHByZXNzaW9uJzpcbiAgICAgIGlmICghZXNsaW50Tm9kZS5jYWxsZWUpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGVzbGludE5vZGUuY2FsbGVlLm5hbWUgIT09IG5vZGUub2JqZWN0KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOlxuICAgICAgLy8gUGFzcyB0ZXN0cyBpZiBub24tbWF0Y2hpbmcgb2JqZWN0IG9yIHByb3BlcnR5XG4gICAgICBpZiAoIWVzbGludE5vZGUub2JqZWN0IHx8ICFlc2xpbnROb2RlLnByb3BlcnR5KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChlc2xpbnROb2RlLm9iamVjdC5uYW1lICE9PSBub2RlLm9iamVjdCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gdGhlIHJ1bGUsIGl0IG1lYW5zIHRoYXQgb25seSB0aGVcbiAgICAgIC8vIG9iamVjdCBpcyByZXF1aXJlZCB0byBkZXRlcm1pbmUgY29tcGF0aWJpbGl0eVxuICAgICAgaWYgKCFub2RlLnByb3BlcnR5KSBicmVhaztcblxuICAgICAgaWYgKGVzbGludE5vZGUucHJvcGVydHkubmFtZSAhPT0gbm9kZS5wcm9wZXJ0eSkgcmV0dXJuIHRydWU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gIWdldFVuc3VwcG9ydGVkVGFyZ2V0cyhub2RlLCB0YXJnZXRzKS5sZW5ndGg7XG59XG5cbmNvbnN0IENhbklVc2VQcm92aWRlcjogQXJyYXk8Tm9kZT4gPSBbXG4gIC8vIG5ldyBTZXJ2aWNlV29ya2VyKClcbiAge1xuICAgIGNhbml1c2VJZDogJ3NlcnZpY2V3b3JrZXJzJyxcbiAgICBhc3ROb2RlVHlwZTogJ05ld0V4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1NlcnZpY2VXb3JrZXInXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdzZXJ2aWNld29ya2VycycsXG4gICAgYXN0Tm9kZVR5cGU6ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICduYXZpZ2F0b3InLFxuICAgIHByb3BlcnR5OiAnc2VydmljZVdvcmtlcidcbiAgfSxcbiAgLy8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdxdWVyeXNlbGVjdG9yJyxcbiAgICBhc3ROb2RlVHlwZTogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICBwcm9wZXJ0eTogJ3F1ZXJ5U2VsZWN0b3InXG4gIH0sXG4gIC8vIEludGVyc2VjdGlvbk9ic2VydmVyXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdpbnRlcnNlY3Rpb25vYnNlcnZlcicsXG4gICAgYXN0Tm9kZVR5cGU6ICdOZXdFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdJbnRlcnNlY3Rpb25PYnNlcnZlcidcbiAgfSxcbiAgLy8gUGF5bWVudFJlcXVlc3RcbiAge1xuICAgIGNhbml1c2VJZDogJ3BheW1lbnQtcmVxdWVzdCcsXG4gICAgYXN0Tm9kZVR5cGU6ICdOZXdFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdQYXltZW50UmVxdWVzdCdcbiAgfSxcbiAgLy8gUHJvbWlzZXNcbiAge1xuICAgIGNhbml1c2VJZDogJ3Byb21pc2VzJyxcbiAgICBhc3ROb2RlVHlwZTogJ05ld0V4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1Byb21pc2UnXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdwcm9taXNlcycsXG4gICAgYXN0Tm9kZVR5cGU6ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdQcm9taXNlJyxcbiAgICBwcm9wZXJ0eTogJ3Jlc29sdmUnXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdwcm9taXNlcycsXG4gICAgYXN0Tm9kZVR5cGU6ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdQcm9taXNlJyxcbiAgICBwcm9wZXJ0eTogJ2FsbCdcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogJ3Byb21pc2VzJyxcbiAgICBhc3ROb2RlVHlwZTogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1Byb21pc2UnLFxuICAgIHByb3BlcnR5OiAncmFjZSdcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogJ3Byb21pc2VzJyxcbiAgICBhc3ROb2RlVHlwZTogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1Byb21pc2UnLFxuICAgIHByb3BlcnR5OiAncmVqZWN0J1xuICB9LFxuICAvLyBmZXRjaFxuICB7XG4gICAgY2FuaXVzZUlkOiAnZmV0Y2gnLFxuICAgIGFzdE5vZGVUeXBlOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ2ZldGNoJ1xuICB9LFxuICAvLyBkb2N1bWVudC5jdXJyZW50U2NyaXB0KClcbiAge1xuICAgIGNhbml1c2VJZDogJ2RvY3VtZW50LWN1cnJlbnRzY3JpcHQnLFxuICAgIGFzdE5vZGVUeXBlOiAnTWVtYmVyRXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgIHByb3BlcnR5OiAnY3VycmVudFNjcmlwdCdcbiAgfSxcbiAgLy8gVVJMXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICd1cmwnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnVVJMJ1xuICB9LFxuICAvLyBVUkxTZWFyY2hQYXJhbXNcbiAge1xuICAgIGNhbml1c2VJZDogJ3VybHNlYXJjaHBhcmFtcycsXG4gICAgYXN0Tm9kZVR5cGU6ICdOZXdFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdVUkxTZWFyY2hQYXJhbXMnXG4gIH0sXG4gIC8vIHBlcmZvcm1hbmNlLm5vdygpXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICdoaWdoLXJlc29sdXRpb24tdGltZScsXG4gICAgYXN0Tm9kZVR5cGU6ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdwZXJmb3JtYW5jZScsXG4gICAgcHJvcGVydHk6ICdub3cnXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6ICd0eXBlZGFycmF5cycsXG4gICAgYXN0Tm9kZVR5cGU6ICdOZXdFeHByZXNzaW9uJyxcbiAgICBvYmplY3Q6ICdUeXBlZEFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnSW50OEFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnVWludDhBcnJheSdcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogJ3R5cGVkYXJyYXlzJyxcbiAgICBhc3ROb2RlVHlwZTogJ05ld0V4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1VpbnQ4Q2xhbXBlZEFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnSW50MTZBcnJheSdcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogJ3R5cGVkYXJyYXlzJyxcbiAgICBhc3ROb2RlVHlwZTogJ05ld0V4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1VpbnQxNkFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnSW50MzJBcnJheSdcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogJ3R5cGVkYXJyYXlzJyxcbiAgICBhc3ROb2RlVHlwZTogJ05ld0V4cHJlc3Npb24nLFxuICAgIG9iamVjdDogJ1VpbnQzMkFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnRmxvYXQzMkFycmF5J1xuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiAndHlwZWRhcnJheXMnLFxuICAgIGFzdE5vZGVUeXBlOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgb2JqZWN0OiAnRmxvYXQ2NEFycmF5J1xuICB9XG5dLm1hcChydWxlID0+XG4gIE9iamVjdC5hc3NpZ24oe30sIHJ1bGUsIHtcbiAgICBpc1ZhbGlkLFxuICAgIGdldFVuc3VwcG9ydGVkVGFyZ2V0cyxcbiAgICBpZDogcnVsZS5wcm9wZXJ0eSA/IGAke3J1bGUub2JqZWN0fS4ke3J1bGUucHJvcGVydHl9YCA6IHJ1bGUub2JqZWN0LFxuICAgIHByb3RvQ2hhaW5JZDogcnVsZS5wcm9wZXJ0eVxuICAgICAgPyBgJHtydWxlLm9iamVjdH0uJHtydWxlLnByb3BlcnR5fWBcbiAgICAgIDogcnVsZS5vYmplY3QsXG4gICAgcHJvdG9DaGFpbjogcnVsZS5wcm9wZXJ0eSA/IFtydWxlLm9iamVjdCwgcnVsZS5wcm9wZXJ0eV0gOiBbcnVsZS5vYmplY3RdXG4gIH0pXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5JVXNlUHJvdmlkZXI7XG4iXX0= |
\ | No newline at end of file |