Skip to content

Commit

Permalink
fix(es/helpers): Use .mjs extension in helper imports (#4979)
Browse files Browse the repository at this point in the history
  • Loading branch information
devongovett committed Jun 16, 2022
1 parent 7ffcc88 commit 9484cf8
Show file tree
Hide file tree
Showing 41 changed files with 267 additions and 189 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/cargo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ env:
DIFF: 0
# https://github.com/swc-project/swc/pull/3742
RUST_MIN_STACK: 4194304
CI: 1

jobs:
check-license:
Expand Down Expand Up @@ -375,6 +376,12 @@ jobs:
run: |
jest -v && mocha --version
- name: Configure helpers
shell: bash
run: |
(cd packages/swc-helpers && yarn && yarn build)
yarn add --dev ./packages/swc-helpers
- name: Configure execution cache
shell: bash
run: |
Expand Down
134 changes: 96 additions & 38 deletions crates/swc/tests/exec.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
use std::{
env,
fs::{create_dir_all, rename},
path::{Component, Path, PathBuf},
sync::Arc,
};

use anyhow::{bail, Context, Error};
use once_cell::sync::Lazy;
use swc::{
config::{Config, JsMinifyOptions, JscConfig, ModuleConfig, Options, SourceMapsConfig},
try_with_handler, BoolOrDataConfig, Compiler, HandlerOpts,
Expand Down Expand Up @@ -42,6 +44,57 @@ where
{
}

fn init_helpers() -> Arc<PathBuf> {
static BUILD_HELPERS: Lazy<Arc<PathBuf>> = Lazy::new(|| {
let project_root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap())
.parent()
.unwrap()
.parent()
.unwrap()
.to_path_buf();

let helper_dir = project_root.join("packages").join("swc-helpers");

if env::var("CI").as_deref() == Ok("1") {
return Arc::new(helper_dir);
}

{
let mut cmd = std::process::Command::new("yarn");
cmd.current_dir(&helper_dir).arg("upgrade").arg("@swc/core");
let status = cmd.status().expect("failed to update swc core");
assert!(status.success());
}

{
let mut cmd = std::process::Command::new("yarn");
cmd.current_dir(&helper_dir).arg("build");
let status = cmd.status().expect("failed to compile helper package");
assert!(status.success());
}
{
let mut cmd = std::process::Command::new("yarn");
cmd.current_dir(&helper_dir).arg("link");
let status = cmd.status().expect("failed to link helper package");
assert!(status.success());
}
{
let mut cmd = std::process::Command::new("yarn");
cmd.current_dir(&project_root)
.arg("link")
.arg("@swc/helpers");
let status = cmd
.status()
.expect("failed to link helper package from root");
assert!(status.success());
}

Arc::new(helper_dir)
});

BUILD_HELPERS.clone()
}

fn create_matrix(entry: &Path) -> Vec<Options> {
[
EsVersion::Es2022,
Expand Down Expand Up @@ -74,56 +127,61 @@ fn create_matrix(entry: &Path) -> Vec<Options> {
})
.matrix_bool()
.matrix_bool()
.matrix_bool()
.into_iter()
.map(|(((target, syntax), minify), source_map)| {
// Actual
Options {
config: Config {
jsc: JscConfig {
syntax: Some(syntax),
transform: None.into(),
external_helpers: false.into(),
target: Some(target),
minify: if minify {
Some(JsMinifyOptions {
compress: BoolOrDataConfig::from_bool(true),
mangle: BoolOrDataConfig::from_bool(true),
format: Default::default(),
ecma: Default::default(),
keep_classnames: Default::default(),
keep_fnames: Default::default(),
module: Default::default(),
safari10: Default::default(),
toplevel: Default::default(),
source_map: Default::default(),
output_path: Default::default(),
inline_sources_content: Default::default(),
emit_source_map_columns: Default::default(),
})
} else {
None
.map(
|((((target, syntax), minify), external_helpers), source_map)| {
// Actual
Options {
config: Config {
jsc: JscConfig {
syntax: Some(syntax),
transform: None.into(),
external_helpers: external_helpers.into(),
target: Some(target),
minify: if minify {
Some(JsMinifyOptions {
compress: BoolOrDataConfig::from_bool(true),
mangle: BoolOrDataConfig::from_bool(true),
format: Default::default(),
ecma: Default::default(),
keep_classnames: Default::default(),
keep_fnames: Default::default(),
module: Default::default(),
safari10: Default::default(),
toplevel: Default::default(),
source_map: Default::default(),
output_path: Default::default(),
inline_sources_content: Default::default(),
emit_source_map_columns: Default::default(),
})
} else {
None
},
..Default::default()
},
module: Some(ModuleConfig::CommonJs(Default::default())),
minify: minify.into(),
..Default::default()
},
module: Some(ModuleConfig::CommonJs(Default::default())),
minify: minify.into(),
source_maps: if source_map {
Some(SourceMapsConfig::Str("inline".into()))
} else {
None
},
..Default::default()
},
source_maps: if source_map {
Some(SourceMapsConfig::Str("inline".into()))
} else {
None
},
..Default::default()
}
})
}
},
)
.collect::<Vec<_>>()
}

#[testing::fixture("tests/exec/**/exec.js")]
#[testing::fixture("tests/exec/**/exec.mjs")]
#[testing::fixture("tests/exec/**/exec.ts")]
fn run_fixture_test(entry: PathBuf) {
let _ = init_helpers();

let _guard = testing::init();

let matrix = create_matrix(&entry);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"use strict";
var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
var _interop_require_wildcard = require("../../../../../../../../../packages/swc-helpers/src/_interop_require_wildcard.mjs").default;
(async function() {
const { displayA } = await Promise.resolve().then(function() {
return _interop_require_wildcard(require("../packages/a/src/index"));
Expand Down
2 changes: 1 addition & 1 deletion crates/swc/tests/fixture/issues-2xxx/2050/output/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"use strict";
var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
var _interop_require_default = require("../../../../../../../packages/swc-helpers/src/_interop_require_default.mjs").default;
var _a = _interop_require_default(require("./subfolder/A"));
console.log(_a.default);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"use strict";
var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
var _interop_require_default = require("../../../../../../../../packages/swc-helpers/src/_interop_require_default.mjs").default;
var _handlebars = _interop_require_default(require("handlebars"));
console.log(_handlebars.default);
4 changes: 2 additions & 2 deletions packages/swc-helpers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
"main": "lib/index.js",
"sideEffects": false,
"scripts": {
"build": "swc -V && swc src -d lib",
"prepublishOnly": "swc src -d lib"
"build": "swc -V && bash ./scripts/build.sh",
"prepublishOnly": "bash ./scripts/build.sh"
},
"repository": {
"type": "git",
Expand Down
13 changes: 13 additions & 0 deletions packages/swc-helpers/scripts/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#/usr/bin/env bash
set -eux

npx swc src -d lib
ls -alR ./lib

# fsync

if [[ "$OSTYPE" == 'darwin'* ]]; then
sed -i '' 's/.mjs/.js/g' ./lib/*.js
else
sed -i 's/.mjs/.js/g' ./lib/*.js
fi
2 changes: 1 addition & 1 deletion packages/swc-helpers/scripts/generator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ for src in $lines; do
if [ $name = "throw" ]; then
name='_throw';
fi
echo "export { default as $name } from './$src';"
echo "export { default as $name } from './$src.mjs';"
done
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_array_without_holes.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import _arrayLikeToArray from './_array_like_to_array';
import _arrayLikeToArray from './_array_like_to_array.mjs';

export default function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_async_generator.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import AwaitValue from './_await_value';
import AwaitValue from './_await_value.mjs';

export default function AsyncGenerator(gen) {
var front, back;
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_await_async_generator.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import AwaitValue from './_await_value';
import AwaitValue from './_await_value.mjs';

export default function _awaitAsyncGenerator(value) {
return new AwaitValue(value);
Expand Down
4 changes: 2 additions & 2 deletions packages/swc-helpers/src/_class_private_field_destructure.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import classExtractFieldDescriptor from './_class_extract_field_descriptor';
import classApplyDescriptorDestructureSet from './_class_apply_descriptor_destructure';
import classExtractFieldDescriptor from './_class_extract_field_descriptor.mjs';
import classApplyDescriptorDestructureSet from './_class_apply_descriptor_destructure.mjs';

export default function _classPrivateFieldDestructureSet(receiver, privateMap) {
var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
Expand Down
4 changes: 2 additions & 2 deletions packages/swc-helpers/src/_class_private_field_get.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import classExtractFieldDescriptor from './_class_extract_field_descriptor';
import classApplyDescriptorGet from './_class_apply_descriptor_get';
import classExtractFieldDescriptor from './_class_extract_field_descriptor.mjs';
import classApplyDescriptorGet from './_class_apply_descriptor_get.mjs';

export default function _classPrivateFieldGet(receiver, privateMap) {
var descriptor = classExtractFieldDescriptor(receiver, privateMap, "get");
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_class_private_field_init.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import _checkPrivateRedeclaration from "./_check_private_redeclaration";
import _checkPrivateRedeclaration from "./_check_private_redeclaration.mjs";

export default function _classPrivateFieldInit(obj, privateMap, value) {
_checkPrivateRedeclaration(obj, privateMap);
Expand Down
4 changes: 2 additions & 2 deletions packages/swc-helpers/src/_class_private_field_set.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import classExtractFieldDescriptor from './_class_extract_field_descriptor';
import classApplyDescriptorSet from './_class_apply_descriptor_set';
import classExtractFieldDescriptor from './_class_extract_field_descriptor.mjs';
import classApplyDescriptorSet from './_class_apply_descriptor_set.mjs';

export default function _classPrivateFieldSet(receiver, privateMap, value) {
var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
Expand Down
4 changes: 2 additions & 2 deletions packages/swc-helpers/src/_class_private_field_update.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import classExtractFieldDescriptor from "./_class_extract_field_descriptor";
import classApplyDescriptorUpdate from "./_class_apply_descriptor_update";
import classExtractFieldDescriptor from "./_class_extract_field_descriptor.mjs";
import classApplyDescriptorUpdate from "./_class_apply_descriptor_update.mjs";

export default function _classPrivateFieldUpdate(receiver, privateMap) {
var descriptor = classExtractFieldDescriptor(receiver, privateMap, "update");
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_class_private_method_init.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import _checkPrivateRedeclaration from "./_check_private_redeclaration";
import _checkPrivateRedeclaration from "./_check_private_redeclaration.mjs";

export default function _classPrivateMethodInit(obj, privateSet) {
_checkPrivateRedeclaration(obj, privateSet);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import classCheckPrivateStaticAccess from './_class_check_private_static_access';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access';
import classApplyDescriptorDestructureSet from './_class_apply_descriptor_destructure';
import classCheckPrivateStaticAccess from './_class_check_private_static_access.mjs';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access.mjs';
import classApplyDescriptorDestructureSet from './_class_apply_descriptor_destructure.mjs';

export default function _classStaticPrivateFieldDestructureSet(receiver, classConstructor, descriptor) {
classCheckPrivateStaticAccess(receiver, classConstructor);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import classCheckPrivateStaticAccess from './_class_check_private_static_access';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access';
import classApplyDescriptorGet from './_class_apply_descriptor_get';
import classCheckPrivateStaticAccess from './_class_check_private_static_access.mjs';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access.mjs';
import classApplyDescriptorGet from './_class_apply_descriptor_get.mjs';

export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
classCheckPrivateStaticAccess(receiver, classConstructor);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import classCheckPrivateStaticAccess from './_class_check_private_static_access';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access';
import classApplyDescriptorSet from './_class_apply_descriptor_set';
import classCheckPrivateStaticAccess from './_class_check_private_static_access.mjs';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access.mjs';
import classApplyDescriptorSet from './_class_apply_descriptor_set.mjs';

export default function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
classCheckPrivateStaticAccess(receiver, classConstructor);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import classCheckPrivateStaticAccess from './_class_check_private_static_access';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access';
import classApplyDescriptorUpdate from './_class_apply_descriptor_update';
import classCheckPrivateStaticAccess from './_class_check_private_static_access.mjs';
import classCheckPrivateStaticFieldDescriptor from './_class_check_private_static_access.mjs';
import classApplyDescriptorUpdate from './_class_apply_descriptor_update.mjs';

export default function _classStaticPrivateFieldUpdate(receiver, classConstructor, descriptor) {
classCheckPrivateStaticAccess(receiver, classConstructor);
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_construct.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import _setPrototypeOf from "./_set_prototype_of";
import _setPrototypeOf from "./_set_prototype_of.mjs";

function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
Expand Down
6 changes: 3 additions & 3 deletions packages/swc-helpers/src/_create_super.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import _isNativeReflectConstruct from "./_is_native_reflect_construct";
import _getPrototypeOf from "./_get_prototype_of";
import _possibleConstructorReturn from './_possible_constructor_return';
import _isNativeReflectConstruct from "./_is_native_reflect_construct.mjs";
import _getPrototypeOf from "./_get_prototype_of.mjs";
import _possibleConstructorReturn from './_possible_constructor_return.mjs';

export default function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
Expand Down
4 changes: 2 additions & 2 deletions packages/swc-helpers/src/_decorate.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import toArray from './_to_array';
import toPropertyKey from './_to_property_key';
import toArray from './_to_array.mjs';
import toPropertyKey from './_to_property_key.mjs';

export default function _decorate(decorators, factory, superClass) {
var r = factory(function initialize(O) {
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_get.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import superPropBase from './_super_prop_base';
import superPropBase from './_super_prop_base.mjs';

function get(target, property, receiver) {
if (typeof Reflect !== "undefined" && Reflect.get) {
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_inherits.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import setPrototypeOf from './_set_prototype_of';
import setPrototypeOf from './_set_prototype_of.mjs';

export default function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_object_spread.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import defineProperty from './_define_property';
import defineProperty from './_define_property.mjs';

export default function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
Expand Down
2 changes: 1 addition & 1 deletion packages/swc-helpers/src/_object_without_properties.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import objectWithoutPropertiesLoose from './_object_without_properties_loose';
import objectWithoutPropertiesLoose from './_object_without_properties_loose.mjs';

export default function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
Expand Down

1 comment on commit 9484cf8

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 9484cf8 Previous: cb30ba2 Ratio
es/full/minify/libraries/antd 1624448968 ns/iter (± 7947026) 1655511989 ns/iter (± 24062066) 0.98
es/full/minify/libraries/d3 402647417 ns/iter (± 8652671) 431069187 ns/iter (± 11539538) 0.93
es/full/minify/libraries/echarts 1589467094 ns/iter (± 20206989) 1661887120 ns/iter (± 23065145) 0.96
es/full/minify/libraries/jquery 88090435 ns/iter (± 1291455) 101493536 ns/iter (± 8241726) 0.87
es/full/minify/libraries/lodash 115743643 ns/iter (± 1566376) 137868492 ns/iter (± 6196097) 0.84
es/full/minify/libraries/moment 51139080 ns/iter (± 2014246) 56827452 ns/iter (± 1981060) 0.90
es/full/minify/libraries/react 17232931 ns/iter (± 188536) 17212638 ns/iter (± 415655) 1.00
es/full/minify/libraries/terser 595255087 ns/iter (± 6133319) 617477773 ns/iter (± 10661538) 0.96
es/full/minify/libraries/three 538980394 ns/iter (± 2183453) 551238374 ns/iter (± 15642080) 0.98
es/full/minify/libraries/typescript 3432126864 ns/iter (± 43137317) 3485358620 ns/iter (± 44560113) 0.98
es/full/minify/libraries/victory 742087901 ns/iter (± 25651757) 721414568 ns/iter (± 15308612) 1.03
es/full/minify/libraries/vue 145344069 ns/iter (± 9570264) 133919720 ns/iter (± 6046272) 1.09
es/full/codegen/es3 31762 ns/iter (± 267) 31081 ns/iter (± 586) 1.02
es/full/codegen/es5 31741 ns/iter (± 362) 31232 ns/iter (± 594) 1.02
es/full/codegen/es2015 31712 ns/iter (± 598) 31156 ns/iter (± 968) 1.02
es/full/codegen/es2016 31730 ns/iter (± 934) 31147 ns/iter (± 1071) 1.02
es/full/codegen/es2017 31684 ns/iter (± 797) 30950 ns/iter (± 1361) 1.02
es/full/codegen/es2018 31676 ns/iter (± 973) 30977 ns/iter (± 1260) 1.02
es/full/codegen/es2019 31661 ns/iter (± 237) 31479 ns/iter (± 1780) 1.01
es/full/codegen/es2020 31664 ns/iter (± 373) 31625 ns/iter (± 511) 1.00
es/full/all/es3 188403413 ns/iter (± 5897523) 184145196 ns/iter (± 4236340) 1.02
es/full/all/es5 176221633 ns/iter (± 5132567) 172616552 ns/iter (± 3530685) 1.02
es/full/all/es2015 142090219 ns/iter (± 3053906) 139973589 ns/iter (± 2724357) 1.02
es/full/all/es2016 140830270 ns/iter (± 3987663) 138897525 ns/iter (± 2536120) 1.01
es/full/all/es2017 140733023 ns/iter (± 4147642) 138557783 ns/iter (± 2893128) 1.02
es/full/all/es2018 140936244 ns/iter (± 5879315) 137336396 ns/iter (± 2715720) 1.03
es/full/all/es2019 139106706 ns/iter (± 3710195) 136009995 ns/iter (± 3872274) 1.02
es/full/all/es2020 127676537 ns/iter (± 5027033) 131584352 ns/iter (± 2808420) 0.97
es/full/parser 703521 ns/iter (± 28443) 711265 ns/iter (± 17425) 0.99
es/full/base/fixer 29604 ns/iter (± 815) 29298 ns/iter (± 924) 1.01
es/full/base/resolver_and_hygiene 86847 ns/iter (± 3892) 87231 ns/iter (± 2999) 1.00
serialization of ast node 210 ns/iter (± 2) 208 ns/iter (± 4) 1.01
serialization of serde 228 ns/iter (± 3) 225 ns/iter (± 6) 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.