source: frontend/node_modules/core-js-compat/targets-parser.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.7 KB
RevLine 
[9af201e]1'use strict';
2const browserslist = require('browserslist');
3const { compare, has } = require('./helpers');
4const external = require('./external');
5
6const aliases = new Map([
7 ['and_chr', 'chrome-android'],
8 ['and_ff', 'firefox-android'],
9 ['ie_mob', 'ie'],
10 ['ios_saf', 'ios'],
11 ['oculus', 'quest'],
12 ['op_mob', 'opera-android'],
13 // TODO: Remove from `core-js@4`
14 ['opera_mobile', 'opera-android'],
15 ['react', 'react-native'],
16 ['reactnative', 'react-native'],
17]);
18
19const validTargets = new Set([
20 'android',
21 'bun',
22 'chrome',
23 'chrome-android',
24 'deno',
25 'edge',
26 'electron',
27 'firefox',
28 'firefox-android',
29 'hermes',
30 'ie',
31 'ios',
32 'node',
33 'opera',
34 'opera-android',
35 'phantom',
36 'quest',
37 'react-native',
38 'rhino',
39 'safari',
40 'samsung',
41]);
42
43const toLowerKeys = function (object) {
44 return Object.entries(object).reduce((accumulator, [key, value]) => {
45 accumulator[key.toLowerCase()] = value;
46 return accumulator;
47 }, {});
48};
49
50module.exports = function (targets) {
51 const { browsers, esmodules, node, ...rest } = (typeof targets != 'object' || Array.isArray(targets))
52 ? { browsers: targets } : toLowerKeys(targets);
53
54 const list = Object.entries(rest);
55
56 const normalizedESModules = esmodules === 'intersect' ? 'intersect' : !!esmodules;
57
58 if (browsers && normalizedESModules !== true) {
59 if (typeof browsers == 'string' || Array.isArray(browsers)) {
60 list.push(...browserslist(browsers).map(it => it.split(' ')));
61 } else {
62 list.push(...Object.entries(browsers));
63 }
64 }
65
66 if (normalizedESModules === true) {
67 list.push(...Object.entries(external.modules));
68 }
69
70 if (node) {
71 list.push(['node', node === 'current' ? process.versions.node : node]);
72 }
73
74 const normalized = list.map(([engine, version]) => {
75 if (has(browserslist.aliases, engine)) {
76 engine = browserslist.aliases[engine];
77 }
78 if (aliases.has(engine)) {
79 engine = aliases.get(engine);
80 }
81 return [engine, String(version)];
82 }).filter(([engine]) => {
83 return validTargets.has(engine);
84 }).sort(([a], [b]) => {
85 return a < b ? -1 : a > b ? 1 : 0;
86 });
87
88 const reduced = new Map();
89
90 for (const [engine, version] of normalized) {
91 if (!reduced.has(engine) || compare(version, '<=', reduced.get(engine))) {
92 reduced.set(engine, version);
93 }
94 }
95
96 if (normalizedESModules === 'intersect') {
97 const modulesData = external.modules;
98 for (const [engine, version] of reduced) {
99 if (has(modulesData, engine)) {
100 if (compare(modulesData[engine], '>', version)) {
101 reduced.set(engine, modulesData[engine]);
102 }
103 } else {
104 reduced.delete(engine);
105 }
106 }
107 }
108
109 return reduced;
110};
Note: See TracBrowser for help on using the repository browser.