diff --git a/.esmrc b/.esmrc new file mode 100644 index 00000000..80fbb1fd --- /dev/null +++ b/.esmrc @@ -0,0 +1,3 @@ +{ + esm: "js" +} diff --git a/package.json b/package.json index 5d5e4b9f..e276a096 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "license": "BSD-3-Clause", "dependencies": { "@babel/standalone": "7.0.0-beta.32", + "@std/esm": "^0.21.1", "acorn": "5.2.1", "babylon": "7.0.0-beta.32", "benchmark": "^2.1.4", @@ -45,6 +46,7 @@ "esprima": "4.0.0", "jshint": "2.9.5", "lebab": "2.7.7", + "lodash-es": "^4.17.5", "prepack": "0.2.11", "prettier": "1.8.2", "source-map": "0.6.1", diff --git a/src/std-esm-benchmark.js b/src/std-esm-benchmark.js new file mode 100644 index 00000000..4d9c9ee1 --- /dev/null +++ b/src/std-esm-benchmark.js @@ -0,0 +1,27 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var esmRequire = (function() { + try { + return __non_webpack_require__("@std/esm")(__non_webpack_module__); + } catch (e) {} + + try { + return module.require("@std/esm")(module); + } catch (e) {} +})(); + +module.exports = { + name: "@std/esm" +}; + +if (typeof esmRequire === "function") { + module.exports.fn = function() { + for (var key in esmRequire.cache) { + delete esmRequire.cache[key]; + } + + return esmRequire("lodash-es"); + }; +} diff --git a/src/std-esm-benchmark.test.js b/src/std-esm-benchmark.test.js new file mode 100644 index 00000000..a529856a --- /dev/null +++ b/src/std-esm-benchmark.test.js @@ -0,0 +1,7 @@ +// Copyright 2017 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const esmBenchmark = require("./std-esm-benchmark"); + +it("std-esm-benchmark runs to completion", () => void esmBenchmark.fn()); diff --git a/src/suite.js b/src/suite.js index c3505803..9dfd6b36 100644 --- a/src/suite.js +++ b/src/suite.js @@ -30,11 +30,14 @@ const suite = new Benchmark.Suite(); require("./prepack-benchmark"), require("./prettier-benchmark"), require("./source-map-benchmark"), + require("./std-esm-benchmark"), require("./typescript-benchmark"), require("./uglify-es-benchmark"), require("./uglify-js-benchmark") ].forEach(options => { - suite.add(Object.assign({}, options, defaultOptions)); + if (options.fn) { + suite.add(Object.assign({}, options, defaultOptions)); + } }); module.exports = suite; diff --git a/webpack.config.js b/webpack.config.js index a20fe8b2..5d066fda 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -27,6 +27,9 @@ module.exports = [ banner: "// Required for JavaScript engine shells.\n" + "var global = this;\n" + + "if (typeof module !== 'undefined') {\n" + + " __non_webpack_module__ = module;\n" + + "}\n" + "if (typeof console === 'undefined') {\n" + " console = {log: print};\n" + "}",