diff --git a/lib/EvalSourceMapDevToolModuleTemplatePlugin.js b/lib/EvalSourceMapDevToolModuleTemplatePlugin.js index ac22c68976e..73659fcf4d7 100644 --- a/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +++ b/lib/EvalSourceMapDevToolModuleTemplatePlugin.js @@ -6,6 +6,7 @@ const { RawSource } = require("webpack-sources"); const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); +const { absolutify } = require("./util/identifier"); const cache = new WeakMap(); @@ -60,7 +61,11 @@ class EvalSourceMapDevToolModuleTemplatePlugin { obj[key] = sourceMap[key]; return obj; }, {}); + const context = this.compilation.compiler.options.context; const modules = sourceMap.sources.map(source => { + if (source.startsWith("webpack://")) { + source = absolutify(context, source.slice(10)); + } const module = self.compilation.findModule(source); return module || source; }); diff --git a/lib/SourceMapDevToolPlugin.js b/lib/SourceMapDevToolPlugin.js index 8a59bcb1eee..3018eb2551f 100644 --- a/lib/SourceMapDevToolPlugin.js +++ b/lib/SourceMapDevToolPlugin.js @@ -9,6 +9,7 @@ const { ConcatSource, RawSource } = require("webpack-sources"); const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin"); const createHash = require("./util/createHash"); +const { absolutify } = require("./util/identifier"); const validateOptions = require("schema-utils"); const schema = require("../schemas/plugins/SourceMapDevToolPlugin.json"); @@ -68,16 +69,24 @@ const getTaskForFile = (file, asset, chunk, options, compilation) => { sourceMap = asset.map(options); source = asset.source(); } - if (sourceMap) { - return { - chunk, - file, - asset, - source, - sourceMap, - modules: undefined - }; - } + if (!sourceMap || typeof source !== "string") return; + const context = compilation.options.context; + const modules = sourceMap.sources.map(source => { + if (source.startsWith("webpack://")) { + source = absolutify(context, source.slice(10)); + } + const module = compilation.findModule(source); + return module || source; + }); + + return { + chunk, + file, + asset, + source, + sourceMap, + modules + }; }; class SourceMapDevToolPlugin { @@ -212,10 +221,7 @@ class SourceMapDevToolPlugin { ); if (task) { - const modules = task.sourceMap.sources.map(source => { - const module = compilation.findModule(source); - return module || source; - }); + const modules = task.modules; for (let idx = 0; idx < modules.length; idx++) { const module = modules[idx]; @@ -234,8 +240,6 @@ class SourceMapDevToolPlugin { } } - task.modules = modules; - tasks.push(task); } }); diff --git a/lib/util/identifier.js b/lib/util/identifier.js index 88a7b0f4abc..0c573e8430f 100644 --- a/lib/util/identifier.js +++ b/lib/util/identifier.js @@ -1,6 +1,17 @@ "use strict"; const path = require("path"); +/** + * @param {string} context context for relative path + * @param {string} relativePath path + * @returns {string} absolute path + */ +const requestToAbsolute = (context, relativePath) => { + if (relativePath.startsWith("./") || relativePath.startsWith("../")) + return path.join(context, relativePath); + return relativePath; +}; + /** * @typedef {Object} MakeRelativePathsCache * @property {Map>=} relativePaths @@ -100,3 +111,17 @@ exports.contextify = (context, request) => { }) .join("!"); }; + +/** + * @param {string} context absolute context path + * @param {string} request any request string + * @returns {string} a new request string using absolute paths when possible + */ +const _absolutify = (context, request) => { + return request + .split("!") + .map(r => requestToAbsolute(context, r)) + .join("!"); +}; + +exports.absolutify = _absolutify; diff --git a/package.json b/package.json index ac28a4cc2dc..99397202950 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,12 @@ "webpack-sources": "^1.4.1" }, "devDependencies": { + "@babel/core": "^7.7.2", "@types/node": "^10.12.21", "@types/tapable": "^1.0.1", "@types/webpack-sources": "^0.1.4", "@yarnpkg/lockfile": "^1.1.0", + "babel-loader": "^8.0.6", "benchmark": "^2.1.1", "bundle-loader": "~0.5.0", "coffee-loader": "^0.9.0", diff --git a/test/StatsTestCases.test.js b/test/StatsTestCases.test.js index 84e0802cfae..a210e6fafbb 100644 --- a/test/StatsTestCases.test.js +++ b/test/StatsTestCases.test.js @@ -59,6 +59,17 @@ describe("StatsTestCases", () => { if (fs.existsSync(path.join(base, testName, "webpack.config.js"))) { options = require(path.join(base, testName, "webpack.config.js")); } + let testConfig = {}; + try { + // try to load a test file + testConfig = Object.assign( + testConfig, + require(path.join(base, testName, "test.config.js")) + ); + } catch (e) { + // ignored + } + (Array.isArray(options) ? options : [options]).forEach(options => { if (!options.context) options.context = path.join(base, testName); if (!options.output) options.output = options.output || {}; @@ -152,6 +163,7 @@ describe("StatsTestCases", () => { .replace(/(\w)\\(\w)/g, "$1/$2") .replace(/ dependencies:Xms/g, ""); expect(actual).toMatchSnapshot(); + if (testConfig.validate) testConfig.validate(stats, stderr.toString()); done(); }); }); diff --git a/test/__snapshots__/StatsTestCases.test.js.snap b/test/__snapshots__/StatsTestCases.test.js.snap index e7750e4bc27..2a5e1c10943 100644 --- a/test/__snapshots__/StatsTestCases.test.js.snap +++ b/test/__snapshots__/StatsTestCases.test.js.snap @@ -692,6 +692,62 @@ exports[`StatsTestCases should print correct stats for concat-and-sideeffects 1` ModuleConcatenation bailout: Module is not in any chunk" `; +exports[`StatsTestCases should print correct stats for context-independence 1`] = ` +"Hash: 05b3bf99e7372023e97905b3bf99e7372023e979db9f3b8e4ef7c772a36ddb9f3b8e4ef7c772a36d +Child + Hash: 05b3bf99e7372023e979 + Time: Xms + Built at: Thu Jan 01 1970 00:00:00 GMT + Asset Size Chunks Chunk Names + 1-4dcf1f7bb7b9da3c54c7.js 424 bytes 1 [emitted] [immutable] + 1-4dcf1f7bb7b9da3c54c7.js.map 336 bytes 1 [emitted] [dev] + main-95e076639e5472415472.js 8.32 KiB 0 [emitted] [immutable] main + main-95e076639e5472415472.js.map 8.32 KiB 0 [emitted] [dev] main + Entrypoint main = main-95e076639e5472415472.js main-95e076639e5472415472.js.map + [0] ./a/index.js 40 bytes {0} [built] + [1] ./a/chunk.js + 1 modules 66 bytes {1} [built] + | ./a/chunk.js 47 bytes [built] + | ./a/module.js 19 bytes [built] +Child + Hash: 05b3bf99e7372023e979 + Time: Xms + Built at: Thu Jan 01 1970 00:00:00 GMT + Asset Size Chunks Chunk Names + 1-4dcf1f7bb7b9da3c54c7.js 424 bytes 1 [emitted] [immutable] + 1-4dcf1f7bb7b9da3c54c7.js.map 336 bytes 1 [emitted] [dev] + main-95e076639e5472415472.js 8.32 KiB 0 [emitted] [immutable] main + main-95e076639e5472415472.js.map 8.32 KiB 0 [emitted] [dev] main + Entrypoint main = main-95e076639e5472415472.js main-95e076639e5472415472.js.map + [0] ./b/index.js 40 bytes {0} [built] + [1] ./b/chunk.js + 1 modules 66 bytes {1} [built] + | ./b/chunk.js 47 bytes [built] + | ./b/module.js 19 bytes [built] +Child + Hash: db9f3b8e4ef7c772a36d + Time: Xms + Built at: Thu Jan 01 1970 00:00:00 GMT + Asset Size Chunks Chunk Names + 1-4dcf1f7bb7b9da3c54c7.js 940 bytes 1 [emitted] [immutable] + main-95e076639e5472415472.js 8.66 KiB 0 [emitted] [immutable] main + Entrypoint main = main-95e076639e5472415472.js + [0] ./a/index.js 40 bytes {0} [built] + [1] ./a/chunk.js + 1 modules 66 bytes {1} [built] + | ./a/chunk.js 47 bytes [built] + | ./a/module.js 19 bytes [built] +Child + Hash: db9f3b8e4ef7c772a36d + Time: Xms + Built at: Thu Jan 01 1970 00:00:00 GMT + Asset Size Chunks Chunk Names + 1-4dcf1f7bb7b9da3c54c7.js 940 bytes 1 [emitted] [immutable] + main-95e076639e5472415472.js 8.66 KiB 0 [emitted] [immutable] main + Entrypoint main = main-95e076639e5472415472.js + [0] ./b/index.js 40 bytes {0} [built] + [1] ./b/chunk.js + 1 modules 66 bytes {1} [built] + | ./b/chunk.js 47 bytes [built] + | ./b/module.js 19 bytes [built]" +`; + exports[`StatsTestCases should print correct stats for define-plugin 1`] = ` "Hash: 97d5f15cb3086ba8eb8878ce8186fd9442bfeb83c3284590614d84a86804 Child diff --git a/test/configCases/source-map/relative-source-maps-by-loader/index.js b/test/configCases/source-map/relative-source-maps-by-loader/index.js new file mode 100644 index 00000000000..ca4da99d19d --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/index.js @@ -0,0 +1,19 @@ +it("should run", () => { + require("./loader-source-root!"); + require("./loader-source-root-slash!"); + require("./loader-source-root-source-slash!"); + require("./loader-source-root-2-slash!"); + require("./loader-no-source-root!"); + require("./loader-pre-relative!"); +}); + +it("should generate the correct SourceMap", function() { + var fs = require("fs"); + var source = JSON.parse(fs.readFileSync(__filename + ".map", "utf-8")); + expect(source.sources).toContain("webpack:///./folder/test1.txt"); + expect(source.sources).toContain("webpack:///./folder/test2.txt"); + expect(source.sources).toContain("webpack:///./folder/test3.txt"); + expect(source.sources).toContain("webpack:///./folder/test4.txt"); + expect(source.sources).toContain("webpack:///./folder/test5.txt"); + expect(source.sources).toContain("webpack:///./folder/test6.txt"); +}); diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-no-source-root.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-no-source-root.js new file mode 100644 index 00000000000..e30048a3e41 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-no-source-root.js @@ -0,0 +1,10 @@ +const path = require("path"); +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sources: [path.join(__dirname, "folder", "test5.txt")], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-pre-relative.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-pre-relative.js new file mode 100644 index 00000000000..6fe9431cedb --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-pre-relative.js @@ -0,0 +1,9 @@ +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sources: ["webpack://./folder/test6.txt"], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-2-slash.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-2-slash.js new file mode 100644 index 00000000000..e5c552d40f9 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-2-slash.js @@ -0,0 +1,11 @@ +const path = require("path"); +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sourceRoot: path.join(__dirname, "folder") + "/", + sources: ["/test4.txt"], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-slash.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-slash.js new file mode 100644 index 00000000000..0641ad6d563 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-slash.js @@ -0,0 +1,11 @@ +const path = require("path"); +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sourceRoot: path.join(__dirname, "folder") + "/", + sources: ["test3.txt"], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-source-slash.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-source-slash.js new file mode 100644 index 00000000000..dbb0e20bb53 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root-source-slash.js @@ -0,0 +1,11 @@ +const path = require("path"); +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sourceRoot: path.join(__dirname, "folder"), + sources: ["/test2.txt"], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root.js b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root.js new file mode 100644 index 00000000000..a46ea3ff546 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/loader-source-root.js @@ -0,0 +1,11 @@ +const path = require("path"); +module.exports = function() { + this.callback(null, "module.exports = 'ok';", { + version: 3, + file: "/should/be/removed", + sourceRoot: path.join(__dirname, "folder"), + sources: ["test1.txt"], + sourcesContent: ["Test"], + mappings: "AAAA" + }); +}; diff --git a/test/configCases/source-map/relative-source-maps-by-loader/webpack.config.js b/test/configCases/source-map/relative-source-maps-by-loader/webpack.config.js new file mode 100644 index 00000000000..628f31af6f3 --- /dev/null +++ b/test/configCases/source-map/relative-source-maps-by-loader/webpack.config.js @@ -0,0 +1,8 @@ +module.exports = { + mode: "development", + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map" +}; diff --git a/test/statsCases/context-independence/a/chunk.js b/test/statsCases/context-independence/a/chunk.js new file mode 100644 index 00000000000..a1aa81e2f5b --- /dev/null +++ b/test/statsCases/context-independence/a/chunk.js @@ -0,0 +1,2 @@ +import test from "./module"; +console.log(test); diff --git a/test/statsCases/context-independence/a/index.js b/test/statsCases/context-independence/a/index.js new file mode 100644 index 00000000000..8881119dd17 --- /dev/null +++ b/test/statsCases/context-independence/a/index.js @@ -0,0 +1,2 @@ +console.log("test"); +import("./chunk"); diff --git a/test/statsCases/context-independence/a/module.js b/test/statsCases/context-independence/a/module.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/statsCases/context-independence/a/module.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/statsCases/context-independence/b/chunk.js b/test/statsCases/context-independence/b/chunk.js new file mode 100644 index 00000000000..a1aa81e2f5b --- /dev/null +++ b/test/statsCases/context-independence/b/chunk.js @@ -0,0 +1,2 @@ +import test from "./module"; +console.log(test); diff --git a/test/statsCases/context-independence/b/index.js b/test/statsCases/context-independence/b/index.js new file mode 100644 index 00000000000..8881119dd17 --- /dev/null +++ b/test/statsCases/context-independence/b/index.js @@ -0,0 +1,2 @@ +console.log("test"); +import("./chunk"); diff --git a/test/statsCases/context-independence/b/module.js b/test/statsCases/context-independence/b/module.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/statsCases/context-independence/b/module.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/statsCases/context-independence/test.config.js b/test/statsCases/context-independence/test.config.js new file mode 100644 index 00000000000..8f90594425f --- /dev/null +++ b/test/statsCases/context-independence/test.config.js @@ -0,0 +1,10 @@ +module.exports = { + validate(stats) { + const a = stats.stats[0].compilation.hash; + const b = stats.stats[1].compilation.hash; + expect(a).toBe(b); + const c = stats.stats[2].compilation.hash; + const d = stats.stats[3].compilation.hash; + expect(c).toBe(d); + } +}; diff --git a/test/statsCases/context-independence/webpack.config.js b/test/statsCases/context-independence/webpack.config.js new file mode 100644 index 00000000000..a4d2c6a2121 --- /dev/null +++ b/test/statsCases/context-independence/webpack.config.js @@ -0,0 +1,55 @@ +const path = require("path"); + +const base = { + mode: "production", + devtool: "source-map", + entry: "./index", + module: { + rules: [ + { + test: /chunk/, + loader: "babel-loader", + options: {} + } + ] + } +}; + +const base2 = Object.assign({}, base, { devtool: "eval-source-map" }); + +module.exports = [ + Object.assign({}, base, { + context: path.resolve(__dirname, "a"), + output: { + path: path.resolve(__dirname, "../../js/stats/context-independence/a"), + filename: "[name]-[chunkhash].js" + } + }), + Object.assign({}, base, { + context: path.resolve(__dirname, "b"), + output: { + path: path.resolve(__dirname, "../../js/stats/context-independence/b"), + filename: "[name]-[chunkhash].js" + } + }), + Object.assign({}, base2, { + context: path.resolve(__dirname, "a"), + output: { + path: path.resolve( + __dirname, + "../../js/stats/context-independence/eval-a" + ), + filename: "[name]-[chunkhash].js" + } + }), + Object.assign({}, base2, { + context: path.resolve(__dirname, "b"), + output: { + path: path.resolve( + __dirname, + "../../js/stats/context-independence/eval-b" + ), + filename: "[name]-[chunkhash].js" + } + }) +]; diff --git a/yarn.lock b/yarn.lock index ac5802e8ec0..9c7b9217688 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/core@^7.1.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.0.tgz#248fd6874b7d755010bfe61f557461d4f446d9e9" @@ -29,6 +36,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.7.2": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.7" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.7" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.0.0", "@babel/generator@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" @@ -40,6 +67,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.7.4", "@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== + dependencies: + "@babel/types" "^7.7.4" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -49,6 +86,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== + dependencies: + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -56,6 +102,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" @@ -68,6 +121,13 @@ dependencies: "@babel/types" "^7.4.0" +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + "@babel/helpers@^7.4.0": version "7.4.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be" @@ -77,6 +137,15 @@ "@babel/traverse" "^7.4.0" "@babel/types" "^7.4.0" +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -91,6 +160,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== +"@babel/parser@^7.7.4", "@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== + "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -114,6 +188,15 @@ "@babel/parser" "^7.4.0" "@babel/types" "^7.4.0" +"@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" @@ -129,6 +212,21 @@ globals "^11.1.0" lodash "^4.17.11" +"@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" @@ -138,6 +236,15 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -942,6 +1049,16 @@ babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + babel-plugin-istanbul@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" @@ -1588,6 +1705,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -2549,7 +2673,7 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" -find-cache-dir@^2.1.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -4201,7 +4325,7 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==