From 41b91da8a30ea0ad4159dd71b6f31d304d9bfa43 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:02:37 -0400 Subject: [PATCH 01/12] feat: set webpack mode to development if missing --- index.ts | 5 +++++ test/unit/index.spec.js | 32 +++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/index.ts b/index.ts index 6b04b0b..093a73c 100644 --- a/index.ts +++ b/index.ts @@ -21,6 +21,7 @@ const getDefaultWebpackOptions = (): webpack.Configuration => { debug('load default options') return { + mode: 'development', module: { rules: [ { @@ -151,6 +152,10 @@ const preprocessor: WebpackPreprocessor = (options: PreprocessorOptions = {}): F webpackOptions.devtool = 'inline-source-map' } + if (!('mode' in webpackOptions)) { + webpackOptions.mode = 'development' + } + debug(`input: ${filePath}`) debug(`output: ${outputPath}`) diff --git a/test/unit/index.spec.js b/test/unit/index.spec.js index cf5a532..2cb6ac0 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.js @@ -143,17 +143,35 @@ describe('webpack preprocessor', function () { }) }) - it('enables inline source maps', function () { - return this.run().then(() => { - expect(webpack.lastCall.args[0].devtool).to.equal('inline-source-map') + describe('devtool', function () { + it('enables inline source maps', function () { + return this.run().then(() => { + expect(webpack.lastCall.args[0].devtool).to.equal('inline-source-map') + }) + }) + + it('does not enable inline source maps when devtool is false', function () { + const options = { webpackOptions: { devtool: false } } + + return this.run(options).then(() => { + expect(webpack.lastCall.args[0].devtool).to.be.false + }) }) }) - it('does not enable inline source maps when devtool is false', function () { - const options = { webpackOptions: { devtool: false } } + describe('mode', function () { + it('sets mode to development by default', function () { + return this.run().then(() => { + expect(webpack.lastCall.args[0].mode).to.equal('development') + }) + }) - return this.run(options).then(() => { - expect(webpack.lastCall.args[0].devtool).to.be.false + it('follows user mode if present', function () { + const options = { webpackOptions: { mode: 'production' } } + + return this.run(options).then(() => { + expect(webpack.lastCall.args[0].mode).to.equal('production') + }) }) }) From f2dc6250339bed3073775a4ae4fef1efa4898ef2 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:04:17 -0400 Subject: [PATCH 02/12] update e2e snapshot --- __snapshots__/compilation.spec.js | 121 +++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 2 deletions(-) diff --git a/__snapshots__/compilation.spec.js b/__snapshots__/compilation.spec.js index 7554a75..f4b68a3 100644 --- a/__snapshots__/compilation.spec.js +++ b/__snapshots__/compilation.spec.js @@ -1,4 +1,121 @@ exports['webpack preprocessor - e2e correctly preprocesses the file 1'] = ` -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t){it("is a test",(function(){expect(1).to.equal(1),expect(2).to.equal(2),expect(Math.min.apply(Math,[3,4])).to.equal(3)}))}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vdGVzdC9fdGVzdC1vdXRwdXQvZXhhbXBsZV9zcGVjLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiaXQiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiTWF0aCIsIm1pbiJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxPQUFPLE1BR3ZCLEdBRkExQixFQUFvQmtCLEVBQUVPLEdBQ3RCWCxPQUFPQyxlQUFlVSxFQUFJLFVBQVcsQ0FBRVQsWUFBWSxFQUFNSyxNQUFPQSxJQUN0RCxFQUFQRSxHQUE0QixpQkFBVEYsRUFBbUIsSUFBSSxJQUFJTSxLQUFPTixFQUFPckIsRUFBb0JVLEVBQUVlLEVBQUlFLEVBQUssU0FBU0EsR0FBTyxPQUFPTixFQUFNTSxJQUFRQyxLQUFLLEtBQU1ELElBQzlJLE9BQU9GLEdBSVJ6QixFQUFvQjZCLEVBQUksU0FBUzFCLEdBQ2hDLElBQUlTLEVBQVNULEdBQVVBLEVBQU9xQixXQUM3QixXQUF3QixPQUFPckIsRUFBZ0IsU0FDL0MsV0FBOEIsT0FBT0EsR0FFdEMsT0FEQUgsRUFBb0JVLEVBQUVFLEVBQVEsSUFBS0EsR0FDNUJBLEdBSVJaLEVBQW9CYSxFQUFJLFNBQVNpQixFQUFRQyxHQUFZLE9BQU9qQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt1QixFQUFRQyxJQUd6Ry9CLEVBQW9Ca0MsRUFBSSxHQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksRyxnRENsRnJEQyxHQUFHLGFBQWEsV0FFZEMsT0FEZ0IsR0FDTkMsR0FBR0MsTUFBTSxHQUNuQkYsT0FGbUIsR0FFVEMsR0FBR0MsTUFBTSxHQUNuQkYsT0FBT0csS0FBS0MsSUFBTCxNQUFBRCxLQUFZLENBQUMsRUFBRyxLQUFLRixHQUFHQyxNQUFNIiwiZmlsZSI6Im91dHB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIml0KCdpcyBhIHRlc3QnLCAoKSA9PiB7XG4gIGNvbnN0IFthLCBiXSA9IFsxLCAyXVxuICBleHBlY3QoYSkudG8uZXF1YWwoMSlcbiAgZXhwZWN0KGIpLnRvLmVxdWFsKDIpXG4gIGV4cGVjdChNYXRoLm1pbiguLi5bMywgNF0pKS50by5lcXVhbCgzKVxufSlcbiJdLCJzb3VyY2VSb290IjoiIn0= +/******/ (function(modules) { // webpackBootstrap +/******/ \t// The module cache +/******/ \tvar installedModules = {}; +/******/ +/******/ \t// The require function +/******/ \tfunction __webpack_require__(moduleId) { +/******/ +/******/ \t\t// Check if module is in cache +/******/ \t\tif(installedModules[moduleId]) { +/******/ \t\t\treturn installedModules[moduleId].exports; +/******/ \t\t} +/******/ \t\t// Create a new module (and put it into the cache) +/******/ \t\tvar module = installedModules[moduleId] = { +/******/ \t\t\ti: moduleId, +/******/ \t\t\tl: false, +/******/ \t\t\texports: {} +/******/ \t\t}; +/******/ +/******/ \t\t// Execute the module function +/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ \t\t// Flag the module as loaded +/******/ \t\tmodule.l = true; +/******/ +/******/ \t\t// Return the exports of the module +/******/ \t\treturn module.exports; +/******/ \t} +/******/ +/******/ +/******/ \t// expose the modules object (__webpack_modules__) +/******/ \t__webpack_require__.m = modules; +/******/ +/******/ \t// expose the module cache +/******/ \t__webpack_require__.c = installedModules; +/******/ +/******/ \t// define getter function for harmony exports +/******/ \t__webpack_require__.d = function(exports, name, getter) { +/******/ \t\tif(!__webpack_require__.o(exports, name)) { +/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ \t\t} +/******/ \t}; +/******/ +/******/ \t// define __esModule on exports +/******/ \t__webpack_require__.r = function(exports) { +/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ \t\t} +/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true }); +/******/ \t}; +/******/ +/******/ \t// create a fake namespace object +/******/ \t// mode & 1: value is a module id, require it +/******/ \t// mode & 2: merge all properties of value into the ns +/******/ \t// mode & 4: return value when already ns object +/******/ \t// mode & 8|1: behave like require +/******/ \t__webpack_require__.t = function(value, mode) { +/******/ \t\tif(mode & 1) value = __webpack_require__(value); +/******/ \t\tif(mode & 8) return value; +/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ \t\tvar ns = Object.create(null); +/******/ \t\t__webpack_require__.r(ns); +/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ \t\treturn ns; +/******/ \t}; +/******/ +/******/ \t// getDefaultExport function for compatibility with non-harmony modules +/******/ \t__webpack_require__.n = function(module) { +/******/ \t\tvar getter = module && module.__esModule ? +/******/ \t\t\tfunction getDefault() { return module['default']; } : +/******/ \t\t\tfunction getModuleExports() { return module; }; +/******/ \t\t__webpack_require__.d(getter, 'a', getter); +/******/ \t\treturn getter; +/******/ \t}; +/******/ +/******/ \t// Object.prototype.hasOwnProperty.call +/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ \t// __webpack_public_path__ +/******/ \t__webpack_require__.p = ""; +/******/ +/******/ +/******/ \t// Load entry module and return exports +/******/ \treturn __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./test/_test-output/example_spec.js": +/*!*******************************************!*\\ + !*** ./test/_test-output/example_spec.js ***! + \\*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +it('is a test', function () { + var a = 1, + b = 2; + expect(a).to.equal(1); + expect(b).to.equal(2); + expect(Math.min.apply(Math, [3, 4])).to.equal(3); +}); + +/***/ }), + +/***/ 0: +/*!*************************************************!*\\ + !*** multi ./test/_test-output/example_spec.js ***! + \\*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! /Users/gleb/git/cypress-webpack-preprocessor/test/_test-output/example_spec.js */"./test/_test-output/example_spec.js"); + + +/***/ }) + +/******/ }); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vdGVzdC9fdGVzdC1vdXRwdXQvZXhhbXBsZV9zcGVjLmpzIl0sIm5hbWVzIjpbIml0IiwiYSIsImIiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiTWF0aCIsIm1pbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBQSxFQUFFLENBQUMsV0FBRCxFQUFjLFlBQU07QUFBQSxNQUNiQyxDQURhLEdBQ0osQ0FESTtBQUFBLE1BQ1ZDLENBRFUsR0FDRCxDQURDO0FBRXBCQyxRQUFNLENBQUNGLENBQUQsQ0FBTixDQUFVRyxFQUFWLENBQWFDLEtBQWIsQ0FBbUIsQ0FBbkI7QUFDQUYsUUFBTSxDQUFDRCxDQUFELENBQU4sQ0FBVUUsRUFBVixDQUFhQyxLQUFiLENBQW1CLENBQW5CO0FBQ0FGLFFBQU0sQ0FBQ0csSUFBSSxDQUFDQyxHQUFMLE9BQUFELElBQUksRUFBUSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQVIsQ0FBTCxDQUFOLENBQTRCRixFQUE1QixDQUErQkMsS0FBL0IsQ0FBcUMsQ0FBckM7QUFDRCxDQUxDLENBQUYsQyIsImZpbGUiOiJvdXRwdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJpdCgnaXMgYSB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBbYSwgYl0gPSBbMSwgMl1cbiAgZXhwZWN0KGEpLnRvLmVxdWFsKDEpXG4gIGV4cGVjdChiKS50by5lcXVhbCgyKVxuICBleHBlY3QoTWF0aC5taW4oLi4uWzMsIDRdKSkudG8uZXF1YWwoMylcbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9 ` From cc4bf3f59291e7232f7cab158750e2f775c28bf9 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:06:13 -0400 Subject: [PATCH 03/12] update readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c83809..f110444 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ Object of webpack options. Just `require` in the options from your `webpack.conf ```javascript { + mode: 'development', module: { rules: [ { @@ -92,7 +93,7 @@ Object of webpack options. Just `require` in the options from your `webpack.conf } ``` -Source maps are always enabled unless explicitly disabled by specifying `devtool: false`. +Source maps are always enabled unless explicitly disabled by specifying `devtool: false`. Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. ### use babelrc From f832fe6d0bb7303b65eb1abb89c601bdf553f7fb Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:13:54 -0400 Subject: [PATCH 04/12] Revert "update e2e snapshot" This reverts commit f2dc6250339bed3073775a4ae4fef1efa4898ef2. --- __snapshots__/compilation.spec.js | 121 +----------------------------- 1 file changed, 2 insertions(+), 119 deletions(-) diff --git a/__snapshots__/compilation.spec.js b/__snapshots__/compilation.spec.js index f4b68a3..7554a75 100644 --- a/__snapshots__/compilation.spec.js +++ b/__snapshots__/compilation.spec.js @@ -1,121 +1,4 @@ exports['webpack preprocessor - e2e correctly preprocesses the file 1'] = ` -/******/ (function(modules) { // webpackBootstrap -/******/ \t// The module cache -/******/ \tvar installedModules = {}; -/******/ -/******/ \t// The require function -/******/ \tfunction __webpack_require__(moduleId) { -/******/ -/******/ \t\t// Check if module is in cache -/******/ \t\tif(installedModules[moduleId]) { -/******/ \t\t\treturn installedModules[moduleId].exports; -/******/ \t\t} -/******/ \t\t// Create a new module (and put it into the cache) -/******/ \t\tvar module = installedModules[moduleId] = { -/******/ \t\t\ti: moduleId, -/******/ \t\t\tl: false, -/******/ \t\t\texports: {} -/******/ \t\t}; -/******/ -/******/ \t\t// Execute the module function -/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ \t\t// Flag the module as loaded -/******/ \t\tmodule.l = true; -/******/ -/******/ \t\t// Return the exports of the module -/******/ \t\treturn module.exports; -/******/ \t} -/******/ -/******/ -/******/ \t// expose the modules object (__webpack_modules__) -/******/ \t__webpack_require__.m = modules; -/******/ -/******/ \t// expose the module cache -/******/ \t__webpack_require__.c = installedModules; -/******/ -/******/ \t// define getter function for harmony exports -/******/ \t__webpack_require__.d = function(exports, name, getter) { -/******/ \t\tif(!__webpack_require__.o(exports, name)) { -/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ \t\t} -/******/ \t}; -/******/ -/******/ \t// define __esModule on exports -/******/ \t__webpack_require__.r = function(exports) { -/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ \t\t} -/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true }); -/******/ \t}; -/******/ -/******/ \t// create a fake namespace object -/******/ \t// mode & 1: value is a module id, require it -/******/ \t// mode & 2: merge all properties of value into the ns -/******/ \t// mode & 4: return value when already ns object -/******/ \t// mode & 8|1: behave like require -/******/ \t__webpack_require__.t = function(value, mode) { -/******/ \t\tif(mode & 1) value = __webpack_require__(value); -/******/ \t\tif(mode & 8) return value; -/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ \t\tvar ns = Object.create(null); -/******/ \t\t__webpack_require__.r(ns); -/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ \t\treturn ns; -/******/ \t}; -/******/ -/******/ \t// getDefaultExport function for compatibility with non-harmony modules -/******/ \t__webpack_require__.n = function(module) { -/******/ \t\tvar getter = module && module.__esModule ? -/******/ \t\t\tfunction getDefault() { return module['default']; } : -/******/ \t\t\tfunction getModuleExports() { return module; }; -/******/ \t\t__webpack_require__.d(getter, 'a', getter); -/******/ \t\treturn getter; -/******/ \t}; -/******/ -/******/ \t// Object.prototype.hasOwnProperty.call -/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ \t// __webpack_public_path__ -/******/ \t__webpack_require__.p = ""; -/******/ -/******/ -/******/ \t// Load entry module and return exports -/******/ \treturn __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./test/_test-output/example_spec.js": -/*!*******************************************!*\\ - !*** ./test/_test-output/example_spec.js ***! - \\*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -it('is a test', function () { - var a = 1, - b = 2; - expect(a).to.equal(1); - expect(b).to.equal(2); - expect(Math.min.apply(Math, [3, 4])).to.equal(3); -}); - -/***/ }), - -/***/ 0: -/*!*************************************************!*\\ - !*** multi ./test/_test-output/example_spec.js ***! - \\*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! /Users/gleb/git/cypress-webpack-preprocessor/test/_test-output/example_spec.js */"./test/_test-output/example_spec.js"); - - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vdGVzdC9fdGVzdC1vdXRwdXQvZXhhbXBsZV9zcGVjLmpzIl0sIm5hbWVzIjpbIml0IiwiYSIsImIiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiTWF0aCIsIm1pbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBQSxFQUFFLENBQUMsV0FBRCxFQUFjLFlBQU07QUFBQSxNQUNiQyxDQURhLEdBQ0osQ0FESTtBQUFBLE1BQ1ZDLENBRFUsR0FDRCxDQURDO0FBRXBCQyxRQUFNLENBQUNGLENBQUQsQ0FBTixDQUFVRyxFQUFWLENBQWFDLEtBQWIsQ0FBbUIsQ0FBbkI7QUFDQUYsUUFBTSxDQUFDRCxDQUFELENBQU4sQ0FBVUUsRUFBVixDQUFhQyxLQUFiLENBQW1CLENBQW5CO0FBQ0FGLFFBQU0sQ0FBQ0csSUFBSSxDQUFDQyxHQUFMLE9BQUFELElBQUksRUFBUSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQVIsQ0FBTCxDQUFOLENBQTRCRixFQUE1QixDQUErQkMsS0FBL0IsQ0FBcUMsQ0FBckM7QUFDRCxDQUxDLENBQUYsQyIsImZpbGUiOiJvdXRwdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJpdCgnaXMgYSB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBbYSwgYl0gPSBbMSwgMl1cbiAgZXhwZWN0KGEpLnRvLmVxdWFsKDEpXG4gIGV4cGVjdChiKS50by5lcXVhbCgyKVxuICBleHBlY3QoTWF0aC5taW4oLi4uWzMsIDRdKSkudG8uZXF1YWwoMylcbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9 +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t){it("is a test",(function(){expect(1).to.equal(1),expect(2).to.equal(2),expect(Math.min.apply(Math,[3,4])).to.equal(3)}))}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vdGVzdC9fdGVzdC1vdXRwdXQvZXhhbXBsZV9zcGVjLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiaXQiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiTWF0aCIsIm1pbiJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxPQUFPLE1BR3ZCLEdBRkExQixFQUFvQmtCLEVBQUVPLEdBQ3RCWCxPQUFPQyxlQUFlVSxFQUFJLFVBQVcsQ0FBRVQsWUFBWSxFQUFNSyxNQUFPQSxJQUN0RCxFQUFQRSxHQUE0QixpQkFBVEYsRUFBbUIsSUFBSSxJQUFJTSxLQUFPTixFQUFPckIsRUFBb0JVLEVBQUVlLEVBQUlFLEVBQUssU0FBU0EsR0FBTyxPQUFPTixFQUFNTSxJQUFRQyxLQUFLLEtBQU1ELElBQzlJLE9BQU9GLEdBSVJ6QixFQUFvQjZCLEVBQUksU0FBUzFCLEdBQ2hDLElBQUlTLEVBQVNULEdBQVVBLEVBQU9xQixXQUM3QixXQUF3QixPQUFPckIsRUFBZ0IsU0FDL0MsV0FBOEIsT0FBT0EsR0FFdEMsT0FEQUgsRUFBb0JVLEVBQUVFLEVBQVEsSUFBS0EsR0FDNUJBLEdBSVJaLEVBQW9CYSxFQUFJLFNBQVNpQixFQUFRQyxHQUFZLE9BQU9qQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt1QixFQUFRQyxJQUd6Ry9CLEVBQW9Ca0MsRUFBSSxHQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksRyxnRENsRnJEQyxHQUFHLGFBQWEsV0FFZEMsT0FEZ0IsR0FDTkMsR0FBR0MsTUFBTSxHQUNuQkYsT0FGbUIsR0FFVEMsR0FBR0MsTUFBTSxHQUNuQkYsT0FBT0csS0FBS0MsSUFBTCxNQUFBRCxLQUFZLENBQUMsRUFBRyxLQUFLRixHQUFHQyxNQUFNIiwiZmlsZSI6Im91dHB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIml0KCdpcyBhIHRlc3QnLCAoKSA9PiB7XG4gIGNvbnN0IFthLCBiXSA9IFsxLCAyXVxuICBleHBlY3QoYSkudG8uZXF1YWwoMSlcbiAgZXhwZWN0KGIpLnRvLmVxdWFsKDIpXG4gIGV4cGVjdChNYXRoLm1pbiguLi5bMywgNF0pKS50by5lcXVhbCgzKVxufSlcbiJdLCJzb3VyY2VSb290IjoiIn0= ` From cfc5354f943dc7b2e53efaba5f23dff24a002957 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:27:51 -0400 Subject: [PATCH 05/12] update test --- README.md | 4 +++- cypress/plugins/index.js | 7 ++----- index.ts | 2 ++ test/e2e/compilation.spec.js | 7 ++++++- test/e2e/e2e.spec.js | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f110444..4785754 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,9 @@ Object of webpack options. Just `require` in the options from your `webpack.conf } ``` -Source maps are always enabled unless explicitly disabled by specifying `devtool: false`. Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. +Source maps are always enabled unless explicitly disabled by specifying `devtool: false`. + +Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. You can set `mode` to "development, "production" or "none". ### use babelrc diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index a63028e..feed122 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -12,14 +12,11 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) -const webpack = require('../../') - -// const webpackOptions = require('@packages/runner/webpack.config.ts').default +const webpackPreprocessor = require('../../') /** * @type {Cypress.PluginConfig} */ module.exports = (on) => { - // on('file:preprocessor', webpack({ webpackOptions })) - on('file:preprocessor', webpack({ })) + on('file:preprocessor', webpackPreprocessor()) } diff --git a/index.ts b/index.ts index 093a73c..f8273a6 100644 --- a/index.ts +++ b/index.ts @@ -149,10 +149,12 @@ const preprocessor: WebpackPreprocessor = (options: PreprocessorOptions = {}): F }) if (webpackOptions.devtool !== false) { + debug('setting devtool to inline-source-map') webpackOptions.devtool = 'inline-source-map' } if (!('mode' in webpackOptions)) { + debug('setting webpack mode to development') webpackOptions.mode = 'development' } diff --git a/test/e2e/compilation.spec.js b/test/e2e/compilation.spec.js index 0733682..e1aaa8f 100644 --- a/test/e2e/compilation.spec.js +++ b/test/e2e/compilation.spec.js @@ -43,7 +43,12 @@ describe('webpack preprocessor - e2e', () => { }) it('correctly preprocesses the file', () => { - return preprocessor()(file).then(() => { + const options = preprocessor.defaultOptions + + // our snapshot is minified + options.webpackOptions.mode = 'production' + + return preprocessor(options)(file).then(() => { snapshot(fs.readFileSync(outputPath).toString()) }) }) diff --git a/test/e2e/e2e.spec.js b/test/e2e/e2e.spec.js index 10a2875..3725f5f 100644 --- a/test/e2e/e2e.spec.js +++ b/test/e2e/e2e.spec.js @@ -4,7 +4,7 @@ const glob = require('fast-glob') describe('can test', async () => { // runs every test in cypress/tests/e2e as its own test - // the comment above the test will determince the assertion on the results + // the comment above the test will determine the assertion on the results glob.sync(path.join(__dirname, '../../cypress/tests/e2e/**/*')) .map((v) => { const filename = path.relative(process.cwd(), v) From 1ededb0b94ac3dac4ea4540a70b544cd22b69d4e Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:56:36 -0400 Subject: [PATCH 06/12] Update README.md Co-authored-by: Ben Kucera <14625260+Bkucera@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4785754..b746de3 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Object of webpack options. Just `require` in the options from your `webpack.conf } ``` -Source maps are always enabled unless explicitly disabled by specifying `devtool: false`. +Source maps are always enabled unless explicitly disabled by specifying `devtool: false` or `mode: "production"`. Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. You can set `mode` to "development, "production" or "none". From f2a56ff331f3acb4067a876315c5725745ffa584 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Thu, 14 May 2020 15:56:54 -0400 Subject: [PATCH 07/12] Update README.md Co-authored-by: Ben Kucera <14625260+Bkucera@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b746de3..fe09329 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ Object of webpack options. Just `require` in the options from your `webpack.conf Source maps are always enabled unless explicitly disabled by specifying `devtool: false` or `mode: "production"`. -Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. You can set `mode` to "development, "production" or "none". +Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. You can set `mode` to "development", "production" or "none". ### use babelrc From 70088222b48e496458191ec7a7a7ca39b112ba73 Mon Sep 17 00:00:00 2001 From: Brian Mann Date: Mon, 18 May 2020 04:37:03 -0400 Subject: [PATCH 08/12] remove stubbable require, its not needed --- index.ts | 6 ++---- stubbable-require.ts | 5 ----- test/unit/index.spec.js | 17 ----------------- 3 files changed, 2 insertions(+), 26 deletions(-) delete mode 100644 stubbable-require.ts diff --git a/index.ts b/index.ts index f8273a6..562cf5f 100644 --- a/index.ts +++ b/index.ts @@ -8,8 +8,6 @@ const path = require('path') const debug = require('debug')('cypress:webpack') const debugStats = require('debug')('cypress:webpack:stats') -const stubbableRequire = require('./stubbable-require') - type FilePath = string // bundle promises from input spec filename to output bundled file paths @@ -29,9 +27,9 @@ const getDefaultWebpackOptions = (): webpack.Configuration => { exclude: [/node_modules/], use: [ { - loader: stubbableRequire.resolve('babel-loader'), + loader: 'babel-loader', options: { - presets: [stubbableRequire.resolve('@babel/preset-env')], + presets: ['@babel/preset-env'], }, }, ], diff --git a/stubbable-require.ts b/stubbable-require.ts deleted file mode 100644 index 7a2ebe0..0000000 --- a/stubbable-require.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = { - resolve (dependency: string) { - return require.resolve(dependency) - }, -} diff --git a/test/unit/index.spec.js b/test/unit/index.spec.js index 2cb6ac0..253c0f7 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.js @@ -273,23 +273,6 @@ describe('webpack preprocessor', function () { expect(webpack.lastCall.args[0].module).to.equal(options.webpackOptions.module) }) }) - - it('requires babel dependencies when default options are used', function () { - sinon.spy(stubbableRequire, 'resolve') - - return this.run().then(() => { - expect(stubbableRequire.resolve).to.be.calledWith('babel-loader') - expect(stubbableRequire.resolve).to.be.calledWith('@babel/preset-env') - }) - }) - - it('does not requires babel dependencies when user options are non-default', function () { - sinon.spy(stubbableRequire, 'resolve') - const options = { webpackOptions: { module: { rules: [] } } } - - return this.run(options).then(() => { - expect(stubbableRequire.resolve).not.to.be.calledWith('babel-loader') - expect(stubbableRequire.resolve).not.to.be.calledWith('@babel/preset-env') }) }) }) From 8f5e00bdaf60fedd0512ef3b1f33a1ceb4ee19f9 Mon Sep 17 00:00:00 2001 From: Brian Mann Date: Mon, 18 May 2020 04:37:32 -0400 Subject: [PATCH 09/12] update npm -> yarn, fix chokidar watch script to run tests, update readme contributing docs --- README.md | 12 ++++++++++++ package.json | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fe09329..3bbc576 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,18 @@ DEBUG=cypress:webpack:stats Use the [version of Node that matches Cypress](https://github.com/cypress-io/cypress/blob/develop/.node-version). +Build the typescript files: + +```shell +yarn build +``` + +Watch the typescript files and rebuild on file change: + +```shell +yarn build --watch +``` + Run all tests once: ```shell diff --git a/package.json b/package.json index 72f4549..d0ffb26 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,12 @@ "secure": "nsp check", "semantic-release": "semantic-release", "size": "npm pack --dry", - "pretest": "npm run lint && npm run build", - "test": "npm run test-unit && npm run test-e2e", + "pretest": "yarn lint && yarn build", + "test": "yarn test-unit && yarn test-e2e", "test-debug": "node --inspect --debug-brk ./node_modules/.bin/_mocha", "test-e2e": "mocha test/e2e/*.spec.js", "test-unit": "mocha test/unit/*.spec.js", - "test-watch": "chokidar '*.js' 'test/unit/*.js' -c 'npm run test-unit'", + "test-watch": "yarn test-unit & chokidar '*.js' 'test/unit/*.js' -c 'yarn test-unit'", "types": "tsc --noEmit" }, "husky": { From 752ae97fbc10736273ab7b2252a299b6bffe8f71 Mon Sep 17 00:00:00 2001 From: Brian Mann Date: Mon, 18 May 2020 04:38:59 -0400 Subject: [PATCH 10/12] cleanup assertions with sinon-chai --- test/unit/index.spec.js | 46 +++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/test/unit/index.spec.js b/test/unit/index.spec.js index 253c0f7..2d9096e 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.js @@ -107,7 +107,9 @@ describe('webpack preprocessor', function () { it('specifies the entry file', function () { return this.run().then(() => { - expect(webpack.lastCall.args[0].entry).to.eql([this.file.filePath]) + expect(webpack).to.be.calledWithMatch({ + entry: [this.file.filePath], + }) }) }) @@ -115,19 +117,23 @@ describe('webpack preprocessor', function () { return this.run({ additionalEntries: ['entry-1.js', 'entry-2.js'], }).then(() => { - expect(webpack.lastCall.args[0].entry).to.eql([ - this.file.filePath, - 'entry-1.js', - 'entry-2.js', - ]) + expect(webpack).to.be.calledWithMatch({ + entry: [ + this.file.filePath, + 'entry-1.js', + 'entry-2.js', + ], + }) }) }) it('specifies output path and filename', function () { return this.run().then(() => { - expect(webpack.lastCall.args[0].output).to.eql({ - path: 'output', - filename: 'output.js', + expect(webpack).to.be.calledWithMatch({ + output: { + path: 'output', + filename: 'output.js', + }, }) }) }) @@ -146,7 +152,9 @@ describe('webpack preprocessor', function () { describe('devtool', function () { it('enables inline source maps', function () { return this.run().then(() => { - expect(webpack.lastCall.args[0].devtool).to.equal('inline-source-map') + expect(webpack).to.be.calledWithMatch({ + devtool: 'inline-source-map', + }) }) }) @@ -154,7 +162,11 @@ describe('webpack preprocessor', function () { const options = { webpackOptions: { devtool: false } } return this.run(options).then(() => { - expect(webpack.lastCall.args[0].devtool).to.be.false + expect(webpack).to.be.calledWithMatch({ + devtool: false, + }) + }) + }) }) }) }) @@ -162,7 +174,9 @@ describe('webpack preprocessor', function () { describe('mode', function () { it('sets mode to development by default', function () { return this.run().then(() => { - expect(webpack.lastCall.args[0].mode).to.equal('development') + expect(webpack).to.be.calledWithMatch({ + mode: 'development', + }) }) }) @@ -196,7 +210,7 @@ describe('webpack preprocessor', function () { const options = { watchOptions: { poll: true } } return this.run(options).then(() => { - expect(this.compilerApi.watch.lastCall.args[0]).to.eql({ + expect(this.compilerApi.watch).to.be.calledWith({ poll: true, }) }) @@ -270,9 +284,9 @@ describe('webpack preprocessor', function () { const options = { webpackOptions: { module: { rules: [] } } } return this.run(options).then(() => { - expect(webpack.lastCall.args[0].module).to.equal(options.webpackOptions.module) - }) - }) + expect(webpack).to.be.calledWithMatch({ + module: options.webpackOptions.module, + }) }) }) }) From 7a0d804fd5ad5dea3f957aef77365108bf60828c Mon Sep 17 00:00:00 2001 From: Brian Mann Date: Mon, 18 May 2020 04:39:47 -0400 Subject: [PATCH 11/12] cleanup / DRY up code with lodash, update readme and add test to verify devtool is always set unless false --- README.md | 2 +- index.ts | 48 ++++++++++++++++++++++------------------- package.json | 3 ++- test/unit/index.spec.js | 12 ++++++++++- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 3bbc576..12e9d49 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Object of webpack options. Just `require` in the options from your `webpack.conf } ``` -Source maps are always enabled unless explicitly disabled by specifying `devtool: false` or `mode: "production"`. +Source maps are **always enabled** unless explicitly disabled by specifying `devtool: false`. Webpack [mode](https://webpack.js.org/configuration/mode/) is set to `development` if not present. You can set `mode` to "development", "production" or "none". diff --git a/index.ts b/index.ts index 562cf5f..5d08447 100644 --- a/index.ts +++ b/index.ts @@ -1,7 +1,7 @@ -import * as webpack from 'webpack' import * as Promise from 'bluebird' import * as events from 'events' - +import * as _ from 'lodash' +import * as webpack from 'webpack' import { createDeferred } from './deferred' const path = require('path') @@ -122,14 +122,8 @@ const preprocessor: WebpackPreprocessor = (options: PreprocessorOptions = {}): F return bundles[filePath] } - // user can override the default options - let webpackOptions: webpack.Configuration = options.webpackOptions || getDefaultWebpackOptions() - const watchOptions = options.watchOptions || {} + const defaultWebpackOptions = getDefaultWebpackOptions() - debug('webpackOptions: %o', webpackOptions) - debug('watchOptions: %o', watchOptions) - - const entry = [filePath].concat(options.additionalEntries || []) // we're provided a default output path that lives alongside Cypress's // app data files so we don't have to worry about where to put the bundled // file on disk @@ -137,25 +131,36 @@ const preprocessor: WebpackPreprocessor = (options: PreprocessorOptions = {}): F ? file.outputPath : `${file.outputPath}.js` - // we need to set entry and output - webpackOptions = Object.assign(webpackOptions, { + const entry = [filePath].concat(options.additionalEntries || []) + + const watchOptions = options.watchOptions || {} + + // user can override the default options + const webpackOptions: webpack.Configuration = _ + .chain(options.webpackOptions) + .defaultTo(defaultWebpackOptions) + .defaults({ + mode: defaultWebpackOptions.mode, + }) + .assign({ + // we need to set entry and output entry, output: { path: path.dirname(outputPath), filename: path.basename(outputPath), }, }) + .tap((opts) => { + if (opts.devtool !== false) { + debug('setting devtool to inline-source-map') - if (webpackOptions.devtool !== false) { - debug('setting devtool to inline-source-map') - webpackOptions.devtool = 'inline-source-map' - } - - if (!('mode' in webpackOptions)) { - debug('setting webpack mode to development') - webpackOptions.mode = 'development' - } + opts.devtool = 'inline-source-map' + } + }) + .value() as any + debug('webpackOptions: %o', webpackOptions) + debug('watchOptions: %o', watchOptions) debug(`input: ${filePath}`) debug(`output: ${outputPath}`) @@ -282,8 +287,7 @@ const preprocessor: WebpackPreprocessor = (options: PreprocessorOptions = {}): F } } -// provide a clone of the default options, lazy-loading them -// so they aren't required unless the user utilizes them +// provide a clone of the default options Object.defineProperty(preprocessor, 'defaultOptions', { get () { debug('get default options') diff --git a/package.json b/package.json index d0ffb26..3ecff7e 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ }, "dependencies": { "bluebird": "3.7.1", - "debug": "4.1.1" + "debug": "4.1.1", + "lodash": "4.17.15" }, "devDependencies": { "@babel/core": "^7.0.1", diff --git a/test/unit/index.spec.js b/test/unit/index.spec.js index 2d9096e..d7e6eac 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.js @@ -167,6 +167,14 @@ describe('webpack preprocessor', function () { }) }) }) + + it('always sets devtool even when mode is "production"', function () { + const options = { webpackOptions: { mode: 'production' } } + + return this.run(options).then(() => { + expect(webpack).to.be.calledWithMatch({ + devtool: 'inline-source-map', + }) }) }) }) @@ -184,7 +192,9 @@ describe('webpack preprocessor', function () { const options = { webpackOptions: { mode: 'production' } } return this.run(options).then(() => { - expect(webpack.lastCall.args[0].mode).to.equal('production') + expect(webpack).to.be.calledWithMatch({ + mode: 'production', + }) }) }) }) From 4a887f5a92f4116e6b11a9f33cdde87686e2df63 Mon Sep 17 00:00:00 2001 From: Brian Mann Date: Mon, 18 May 2020 04:42:16 -0400 Subject: [PATCH 12/12] remove old reference --- test/unit/index.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/index.spec.js b/test/unit/index.spec.js index d7e6eac..6c0d967 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.js @@ -17,7 +17,6 @@ mockery.enable({ mockery.registerMock('webpack', webpack) const preprocessor = require('../../dist/index') -const stubbableRequire = require('../../dist/stubbable-require') describe('webpack preprocessor', function () { beforeEach(function () {