|
33 | 33 | from .shared import get_emscripten_temp_dir, exe_suffix, is_c_symbol |
34 | 34 | from .utils import WINDOWS |
35 | 35 | from .settings import settings, default_setting |
| 36 | +from .feature_matrix import UNSUPPORTED |
36 | 37 |
|
37 | 38 | logger = logging.getLogger('building') |
38 | 39 |
|
@@ -509,14 +510,33 @@ def add_to_path(dirname): |
509 | 510 | return closure_cmd, env |
510 | 511 |
|
511 | 512 |
|
| 513 | +def version_split(v): |
| 514 | + v = str(v) |
| 515 | + assert len(v) == 6 |
| 516 | + rev = int(v[4:6]) |
| 517 | + minor = int(v[2:4]) |
| 518 | + major = int(v[0:2]) |
| 519 | + return f'{major}.{minor}.{rev}' |
| 520 | + |
| 521 | + |
512 | 522 | @ToolchainProfiler.profile() |
513 | | -def closure_transpile(filename): |
514 | | - user_args = [] |
515 | | - closure_cmd, env = get_closure_compiler_and_env(user_args) |
516 | | - closure_cmd += ['--language_out', 'ES5'] |
517 | | - closure_cmd += ['--compilation_level', 'SIMPLE_OPTIMIZATIONS'] |
518 | | - closure_cmd += ['--formatting', 'PRETTY_PRINT'] |
519 | | - return run_closure_cmd(closure_cmd, filename, env) |
| 523 | +def transpile(filename): |
| 524 | + config = {'targets': {}} |
| 525 | + if settings.MIN_CHROME_VERSION != UNSUPPORTED: |
| 526 | + config['targets']['chrome'] = str(settings.MIN_CHROME_VERSION) |
| 527 | + if settings.MIN_FIREFOX_VERSION != UNSUPPORTED: |
| 528 | + config['targets']['firefox'] = str(settings.MIN_FIREFOX_VERSION) |
| 529 | + if settings.MIN_SAFARI_VERSION != UNSUPPORTED: |
| 530 | + config['targets']['safari'] = version_split(settings.MIN_SAFARI_VERSION) |
| 531 | + if settings.MIN_NODE_VERSION != UNSUPPORTED: |
| 532 | + config['targets']['node'] = version_split(settings.MIN_NODE_VERSION) |
| 533 | + config_json = json.dumps(config, indent=2) |
| 534 | + outfile = shared.get_temp_files().get('babel.js').name |
| 535 | + config_file = shared.get_temp_files().get('babel_config.json').name |
| 536 | + utils.write_file(config_file, config_json) |
| 537 | + cmd = shared.get_npm_cmd('babel') + [filename, '-o', outfile, '--presets', '@babel/preset-env', '--config-file', config_file] |
| 538 | + check_call(cmd, cwd=path_from_root()) |
| 539 | + return outfile |
520 | 540 |
|
521 | 541 |
|
522 | 542 | @ToolchainProfiler.profile() |
@@ -581,13 +601,8 @@ def closure_compiler(filename, advanced=True, extra_closure_args=None): |
581 | 601 | args = ['--compilation_level', 'ADVANCED_OPTIMIZATIONS' if advanced else 'SIMPLE_OPTIMIZATIONS'] |
582 | 602 | # Keep in sync with ecmaVersion in tools/acorn-optimizer.mjs |
583 | 603 | args += ['--language_in', 'ECMASCRIPT_2021'] |
584 | | - # Tell closure not to do any transpiling or inject any polyfills. |
585 | | - # At some point we may want to look into using this as way to convert to ES5 but |
586 | | - # babel is perhaps a better tool for that. |
587 | | - if settings.TRANSPILE_TO_ES5: |
588 | | - args += ['--language_out', 'ES5'] |
589 | | - else: |
590 | | - args += ['--language_out', 'NO_TRANSPILE'] |
| 604 | + # We do transpilation using babel |
| 605 | + args += ['--language_out', 'NO_TRANSPILE'] |
591 | 606 | # Tell closure never to inject the 'use strict' directive. |
592 | 607 | args += ['--emit_use_strict=false'] |
593 | 608 |
|
|
0 commit comments