Skip to content

Commit 706cde0

Browse files
committed
call swc only when required
1 parent 489ae03 commit 706cde0

File tree

4 files changed

+56
-25
lines changed

4 files changed

+56
-25
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
const version = '4.0.0-alpha.0';
22

33
/* eslint-disable prefer-template -- for better formatting */
4-
export default '/**\n' +
5-
' * core-js ' + version + '\n' +
6-
' * © 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.\n' +
7-
' * license: https://github.com/zloirock/core-js/blob/v' + version + '/LICENSE\n' +
8-
' * source: https://github.com/zloirock/core-js\n' +
9-
' */';
4+
export const banner '/**\n' +
5+
' * core-js ' + version + '\n' +
6+
' * © 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.\n' +
7+
' * license: https://github.com/zloirock/core-js/blob/v' + version + '/LICENSE\n' +
8+
' * source: https://github.com/zloirock/core-js\n' +
9+
' */';
1010
/* eslint-enable prefer-template -- for better formatting */

packages/core-js-builder/index.mjs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { styleText } from 'node:util';
66
import { build } from 'rolldown';
77
import { transform } from '@swc/core';
88
import compat from '@core-js/compat/compat.js';
9-
import banner from './config.mjs';
9+
import { banner } from './config.mjs';
1010

1111
function normalizeSummary(unit = {}) {
1212
let size, modules;
@@ -81,15 +81,22 @@ export default async function ({
8181
await rm(tempFile, { force: true });
8282
}
8383

84+
const swcOptions = {};
85+
8486
// rolldown helpers / wrappers contain es2015 syntax
85-
const swcOptions = {
87+
let syntax = ['arrow-functions', 'shorthand-properties'];
88+
89+
if (targets) {
90+
syntax = compat({ targets, modules: syntax, __external: true }).list;
91+
}
92+
93+
const swcTransforms = syntax.map(it => `transform-${ it }`);
94+
95+
if (swcTransforms.length) Object.assign(swcOptions, {
8696
env: {
87-
include: [
88-
'transform-arrow-functions',
89-
'transform-shorthand-properties',
90-
],
97+
include: swcTransforms,
9198
},
92-
};
99+
});
93100

94101
if (minify) Object.assign(swcOptions, {
95102
minify: true,
@@ -120,9 +127,11 @@ export default async function ({
120127
},
121128
});
122129

123-
code = (await transform(code, swcOptions)).code;
130+
if (swcTransforms.length || minify) {
131+
code = (await transform(code, swcOptions)).code;
132+
}
124133

125-
// swc considers output code as a module and drops 'use strict`
134+
// swc and rolldown considers output code as a module and drops 'use strict'
126135
code = `!function () { 'use strict'; ${ code } }();\n`;
127136
} else {
128137
code = importModules(list, format);

packages/core-js-compat/compat.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
const { compare, filterOutStabilizedProposals, intersection } = require('./helpers');
33
const data = require('./data');
4+
const externalData = require('./external');
45
const entries = require('./entries');
56
const getModulesListForTargetVersion = require('./get-modules-list-for-target-version');
67
const allModules = require('./modules');
@@ -32,15 +33,15 @@ function normalizeModules(option) {
3233
return new Set(Array.isArray(option) ? option.flatMap(getModules) : getModules(option));
3334
}
3435

35-
function checkModule(name, targets) {
36+
function checkModule(name, targets, external) {
3637
const result = {
3738
required: !targets,
3839
targets: {},
3940
};
4041

4142
if (!targets) return result;
4243

43-
const requirements = data[name];
44+
const requirements = (external ? externalData : data)[name];
4445

4546
for (const [engine, version] of targets) {
4647
if (!hasOwn(requirements, engine) || compare(version, '<', requirements[engine])) {
@@ -58,28 +59,31 @@ module.exports = function ({
5859
targets = null,
5960
version = null,
6061
inverse = false,
62+
__external = false,
6163
} = {}) {
62-
inverse = !!inverse;
63-
6464
const parsedTargets = targets ? targetsParser(targets) : null;
6565

6666
const result = {
6767
list: [],
6868
targets: {},
6969
};
7070

71-
exclude = normalizeModules(exclude);
71+
if (!__external) {
72+
inverse = !!inverse;
73+
74+
exclude = normalizeModules(exclude);
7275

73-
modules = modules ? [...normalizeModules(modules)] : actual;
76+
modules = modules ? [...normalizeModules(modules)] : actual;
7477

75-
if (exclude.size) modules = modules.filter(it => !exclude.has(it));
78+
if (exclude.size) modules = modules.filter(it => !exclude.has(it));
7679

77-
modules = intersection(modules, version ? getModulesListForTargetVersion(version) : allModules);
80+
modules = intersection(modules, version ? getModulesListForTargetVersion(version) : allModules);
7881

79-
if (!inverse) modules = filterOutStabilizedProposals(modules);
82+
if (!inverse) modules = filterOutStabilizedProposals(modules);
83+
}
8084

8185
for (const key of modules) {
82-
const check = checkModule(key, parsedTargets);
86+
const check = checkModule(key, parsedTargets, __external);
8387

8488
if (check.required ^ inverse) {
8589
result.list.push(key);

packages/core-js-compat/src/external.mjs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,22 @@ export default {
88
node: '13.2',
99
safari: '10.1',
1010
},
11+
'arrow-functions': {
12+
chrome: '45',
13+
edge: '12',
14+
firefox: '22',
15+
hermes: '0.7',
16+
'react-native': '0.70',
17+
rhino: '1.7.13',
18+
safari: '10',
19+
},
20+
'shorthand-properties': {
21+
chrome: '43',
22+
edge: '12',
23+
firefox: '33',
24+
hermes: '0.7',
25+
'react-native': '0.70',
26+
rhino: '1.7.14',
27+
safari: '9',
28+
},
1129
};

0 commit comments

Comments
 (0)