diff --git a/lib/FileSystemInfo.js b/lib/FileSystemInfo.js index 2f96cc10c..b65ab0bba 100644 --- a/lib/FileSystemInfo.js +++ b/lib/FileSystemInfo.js @@ -84,6 +84,136 @@ class FileSystemInfo { this.contextTimestampQueue.add(path, callback); } + createSnapshot(startTime, files, directories, missing, options, callback) { + const fileTimestamps = new Map(); + const contextTimestamps = new Map(); + const missingTimestamps = new Map(); + let jobs = 1; + const jobDone = () => { + if (--jobs === 0) { + callback(null, { + startTime, + fileTimestamps, + contextTimestamps, + missingTimestamps + }); + } + }; + for (const path of files) { + const cache = this._fileTimestamps.get(path); + if (cache !== undefined) { + fileTimestamps.set(path, cache); + } else { + jobs++; + this.fileTimestampQueue.add(path, (err, entry) => { + if (err) { + fileTimestamps.set(path, "error"); + } else { + fileTimestamps.set(path, entry); + } + jobDone(); + }); + } + } + for (const path of directories) { + contextTimestamps.set(path, "error"); + // TODO: getContextTimestamp is not implemented yet + } + for (const path of missing) { + const cache = this._fileTimestamps.get(path); + if (cache !== undefined) { + missingTimestamps.set(path, cache); + } else { + jobs++; + this.fileTimestampQueue.add(path, (err, entry) => { + if (err) { + missingTimestamps.set(path, "error"); + } else { + missingTimestamps.set(path, entry); + } + jobDone(); + }); + } + } + jobDone(); + } + + checkSnapshotValid(snapshot, callback) { + const { + startTime, + fileTimestamps, + contextTimestamps, + missingTimestamps + } = snapshot; + let jobs = 1; + const jobDone = () => { + if (--jobs === 0) { + callback(null, true); + } + }; + const invalid = () => { + if (jobs > 0) { + jobs = NaN; + callback(null, false); + } + }; + const checkExistance = (current, snap) => { + if (snap === "error") { + return current && current.safeTime <= startTime; + } + return !current === !snap; + }; + const checkFile = (current, snap) => { + if (snap === "error") { + return current && current.safeTime <= startTime; + } + if (!current !== !snap) return false; + if (current && current.timestamp) { + return current.timestamp === snap.timestamp; + } + return !current; + }; + for (const [path, ts] of fileTimestamps) { + const cache = this._fileTimestamps.get(path); + if (cache !== undefined) { + if (!checkFile(cache, ts)) { + invalid(); + } + } else { + jobs++; + this.fileTimestampQueue.add(path, (err, entry) => { + if (!checkFile(entry, ts)) { + invalid(); + } else { + jobDone(); + } + }); + } + } + if (contextTimestamps.size > 0) { + // TODO: getContextTimestamp is not implemented yet + invalid(); + } + for (const [path, ts] of missingTimestamps) { + const cache = this._fileTimestamps.get(path); + if (cache !== undefined) { + if (!checkExistance(cache, ts)) { + invalid(); + } + } else { + jobs++; + this.fileTimestampQueue.add(path, (err, entry) => { + if (!checkExistance(entry, ts)) { + invalid(); + } else { + jobDone(); + } + }); + } + } + jobDone(); + } + // TODO getFileHash(path, callback) _readFileTimestamp(path, callback) { @@ -101,7 +231,7 @@ class FileSystemInfo { const mtime = +stat.mtime || Infinity; const ts = { safeTime: mtime + FS_ACCURACY, - timestamp: mtime + timestamp: stat.isFile() ? mtime : undefined }; this._fileTimestamps.set(path, ts); diff --git a/lib/WatchIgnorePlugin.js b/lib/WatchIgnorePlugin.js index b73fc46e9..b295590c5 100644 --- a/lib/WatchIgnorePlugin.js +++ b/lib/WatchIgnorePlugin.js @@ -34,15 +34,7 @@ class IgnoringWatchFileSystem { missing, startTime, options, - ( - err, - filesModified, - dirsModified, - missingModified, - fileTimestamps, - dirTimestamps, - removedFiles - ) => { + (err, fileTimestamps, dirTimestamps, removedFiles) => { if (err) return callback(err); for (const path of ignoredFiles) { fileTimestamps.set(path, 1); @@ -52,15 +44,7 @@ class IgnoringWatchFileSystem { dirTimestamps.set(path, 1); } - callback( - err, - filesModified, - dirsModified, - missingModified, - fileTimestamps, - dirTimestamps, - removedFiles - ); + callback(err, fileTimestamps, dirTimestamps, removedFiles); }, callbackUndelayed ); @@ -68,15 +52,15 @@ class IgnoringWatchFileSystem { return { close: () => watcher.close(), pause: () => watcher.pause(), - getContextTimestamps: () => { - const dirTimestamps = watcher.getContextTimestamps(); + getContextInfoEntries: () => { + const dirTimestamps = watcher.getContextInfoEntries(); for (const path of ignoredDirs) { dirTimestamps.set(path, 1); } return dirTimestamps; }, - getFileTimestamps: () => { - const fileTimestamps = watcher.getFileTimestamps(); + getFileTimeInfoEntries: () => { + const fileTimestamps = watcher.getFileTimeInfoEntries(); for (const path of ignoredFiles) { fileTimestamps.set(path, 1); } diff --git a/lib/Watching.js b/lib/Watching.js index 235c3eb56..826535c4c 100644 --- a/lib/Watching.js +++ b/lib/Watching.js @@ -19,15 +19,6 @@ const Stats = require("./Stats"); * @param {T=} result */ -// TODO refactor watchpack to report timestamps in the correct format -const toFileSystemInfoEntryMap = timestamps => { - const map = new Map(); - for (const [key, ts] of timestamps) { - map.set(key, ts ? { safeTime: ts } : null); - } - return map; -}; - class Watching { /** * @param {Compiler} compiler the compiler @@ -164,24 +155,14 @@ class Watching { missing, this.startTime, this.watchOptions, - ( - err, - filesModified, - contextModified, - missingModified, - fileTimestamps, - contextTimestamps, - removedFiles - ) => { + (err, fileTimeInfoEntries, contextTimeInfoEntries, removedFiles) => { this.pausedWatcher = this.watcher; this.watcher = null; if (err) { return this.handler(err); } - this.compiler.fileTimestamps = toFileSystemInfoEntryMap(fileTimestamps); - this.compiler.contextTimestamps = toFileSystemInfoEntryMap( - contextTimestamps - ); + this.compiler.fileTimestamps = fileTimeInfoEntries; + this.compiler.contextTimestamps = contextTimeInfoEntries; this.compiler.removedFiles = removedFiles; this._invalidate(); }, @@ -200,12 +181,8 @@ class Watching { this.callbacks.push(callback); } if (this.watcher) { - this.compiler.fileTimestamps = toFileSystemInfoEntryMap( - this.watcher.getFileTimestamps() - ); - this.compiler.contextTimestamps = toFileSystemInfoEntryMap( - this.watcher.getContextTimestamps() - ); + this.compiler.fileTimestamps = this.watcher.getFileTimeInfoEntries(); + this.compiler.contextTimestamps = this.watcher.getContextTimeInfoEntries(); } this._invalidate(); } diff --git a/lib/cache/ResolverCachePlugin.js b/lib/cache/ResolverCachePlugin.js index e43cb1ee8..7cccbe07c 100644 --- a/lib/cache/ResolverCachePlugin.js +++ b/lib/cache/ResolverCachePlugin.js @@ -5,14 +5,10 @@ "use strict"; -const asyncLib = require("neo-async"); - /** @typedef {import("enhanced-resolve/lib/Resolver")} Resolver */ /** @typedef {import("../Compiler")} Compiler */ /** @typedef {import("../FileSystemInfo")} FileSystemInfo */ -const INVALID = {}; - const requestToString = request => { let str = ""; for (const key in request) { @@ -76,69 +72,37 @@ class ResolverCachePlugin { propagate("fileDependencies"); propagate("contextDependencies"); if (err) return callback(err); - const fileDependencies = new Set(newResolveContext.fileDependencies); - if (newResolveContext.missing) { - for (const missing of newResolveContext.missing) { - fileDependencies.add(missing); - } - } - const contextDependencies = new Set( - newResolveContext.contextDependencies - ); + const fileDependencies = newResolveContext.fileDependencies; + const contextDependencies = newResolveContext.contextDependencies; + const missingDependencies = newResolveContext.missing; // TODO remove this when enhanced-resolve supports fileDependencies if (result && result.path) { fileDependencies.add(result.path); } - const fileTimestamps = new Map(); - const contextTimestamps = new Map(); - const store = () => { - cache.store( - identifier, - null, - { - result, - resolveTime, - fileTimestamps, - contextTimestamps - }, - restoreErr => { - if (restoreErr) return callback(restoreErr); - if (result) return callback(null, result); - callback(); - } - ); - }; - asyncLib.parallel( - [ - asyncLib.each.bind( - asyncLib, - fileDependencies, - (dep, callback) => { - fileSystemInfo.getFileTimestamp(dep, (err, entry) => { - if (err) { - fileTimestamps.set(dep, "error"); - } else { - fileTimestamps.set(dep, entry && entry.timestamp); - } - callback(); - }); - } - ), - asyncLib.each.bind( - asyncLib, - contextDependencies, - (dep, callback) => { - fileSystemInfo.getContextTimestamp(dep, (err, entry) => { - contextTimestamps.set(dep, "error"); - // TODO: getContextTimestamp is not implemented yet - callback(); - }); - } - ) - ], - err => { + fileSystemInfo.createSnapshot( + resolveTime, + fileDependencies, + contextDependencies, + missingDependencies, + null, + (err, snapshot) => { if (err) return callback(err); - store(); + cache.store( + identifier, + null, + { + result, + missing: newResolveContext.missing, + fileDependencies: newResolveContext.fileDependencies, + contextDependencies: newResolveContext.contextDependencies, + snapshot + }, + storeErr => { + if (storeErr) return callback(storeErr); + if (result) return callback(null, result); + callback(); + } + ); } ); } @@ -167,73 +131,14 @@ class ResolverCachePlugin { const identifier = `/resolve/${type}${requestToString( request )}`; - cache.get(identifier, null, (err, cacheEntry) => { + const processCacheResult = (err, cacheEntry) => { if (err) return callback(err); if (cacheEntry) { - const { - result, - resolveTime, - fileTimestamps, - contextTimestamps - } = cacheEntry; - asyncLib.parallel( - [ - asyncLib.each.bind( - asyncLib, - fileTimestamps, - ([dep, ts], callback) => { - fileSystemInfo.getFileTimestamp( - dep, - (err, entry) => { - if (err) return callback(err); - if (ts === "error") { - return callback( - !entry || entry.safeTime > resolveTime - ? INVALID - : null - ); - } - if (!entry !== !ts) return callback(INVALID); - if (entry && entry.timestamp) { - return callback( - entry.timestamp !== ts ? INVALID : null - ); - } - callback(); - } - ); - } - ), - asyncLib.each.bind( - asyncLib, - contextTimestamps, - ([dep, ts], callback) => { - fileSystemInfo.getContextTimestamp( - dep, - (err, entry) => { - if (err) return callback(err); - if (ts === "error") { - return callback( - !entry || entry.safeTime > resolveTime - ? INVALID - : null - ); - } - if (!entry !== !ts) return callback(INVALID); - if (entry && entry.timestamp) { - return callback( - entry.timestamp !== ts ? INVALID : null - ); - } - callback(); - } - ); - } - ) - ], - err => { - if (err) { + fileSystemInfo.checkSnapshotValid( + cacheEntry.snapshot, + (err, valid) => { + if (err || !valid) { return doRealResolve( identifier, type, @@ -243,7 +148,22 @@ class ResolverCachePlugin { callback ); } - callback(null, result); + if (resolveContext.missing) { + for (const item of cacheEntry.missing) { + resolveContext.missing.add(item); + } + } + if (resolveContext.fileDependencies) { + for (const item of cacheEntry.fileDependencies) { + resolveContext.fileDependencies.add(item); + } + } + if (resolveContext.contextDependencies) { + for (const item of cacheEntry.contextDependencies) { + resolveContext.contextDependencies.add(item); + } + } + callback(null, cacheEntry.result); } ); } else { @@ -256,7 +176,8 @@ class ResolverCachePlugin { callback ); } - }); + }; + cache.get(identifier, null, processCacheResult); } ); } diff --git a/lib/node/NodeWatchFileSystem.js b/lib/node/NodeWatchFileSystem.js index 37adf17b4..05b7d1d3b 100644 --- a/lib/node/NodeWatchFileSystem.js +++ b/lib/node/NodeWatchFileSystem.js @@ -6,7 +6,6 @@ "use strict"; const Watchpack = require("watchpack"); -const objectToMap = require("../util/objectToMap"); class NodeWatchFileSystem { constructor(inputFileSystem) { @@ -48,24 +47,16 @@ class NodeWatchFileSystem { const cachedFiles = files; const cachedDirs = dirs; this.watcher.once("aggregated", (changes, removals) => { - changes = changes.concat(removals); if (this.inputFileSystem && this.inputFileSystem.purge) { - this.inputFileSystem.purge(changes); + for (const item of changes) { + this.inputFileSystem.purge(item); + } + for (const item of removals) { + this.inputFileSystem.purge(item); + } } - const times = objectToMap(this.watcher.getTimes()); - files = new Set(files); - dirs = new Set(dirs); - missing = new Set(missing); - removals = new Set(removals.filter(file => files.has(file))); - callback( - null, - changes.filter(file => files.has(file)).sort(), - changes.filter(file => dirs.has(file)).sort(), - changes.filter(file => missing.has(file)).sort(), - times, - times, - removals - ); + const times = this.watcher.getTimeInfoEntries(); + callback(null, times, times, removals); }); this.watcher.watch(cachedFiles.concat(missing), cachedDirs, startTime); @@ -85,16 +76,16 @@ class NodeWatchFileSystem { this.watcher.pause(); } }, - getFileTimestamps: () => { + getFileTimeInfoEntries: () => { if (this.watcher) { - return objectToMap(this.watcher.getTimes()); + return this.watcher.getTimeInfoEntries(); } else { return new Map(); } }, - getContextTimestamps: () => { + getContextInfoEntries: () => { if (this.watcher) { - return objectToMap(this.watcher.getTimes()); + return this.watcher.getTimeInfoEntries(); } else { return new Map(); } diff --git a/package.json b/package.json index 38714fc85..8897100e1 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "schema-utils": "^0.4.4", "tapable": "^1.1.0", "terser-webpack-plugin": "^1.2.1", - "watchpack": "^1.5.0", + "watchpack": "2.0.0-beta.2", "webpack-sources": "^1.3.0" }, "devDependencies": { diff --git a/test/TestCases.template.js b/test/TestCases.template.js index f1e32e6d6..d3454e6c8 100644 --- a/test/TestCases.template.js +++ b/test/TestCases.template.js @@ -181,12 +181,16 @@ const describeCases = config => { rimraf(cacheDirectory, done); }); if (config.cache) { - it(`${testName} should pre-compile to fill disk cache`, done => { - const compiler = webpack(options, err => { + it(`${testName} should pre-compile to fill disk cache (1st)`, done => { + webpack(options, err => { if (err) return done(err); - compiler.close(() => { - done(); - }); + done(); + }); + }); + it(`${testName} should pre-compile to fill disk cache (2nd)`, done => { + webpack(options, err => { + if (err) return done(err); + done(); }); }); } diff --git a/yarn.lock b/yarn.lock index c85794c17..58c811dff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -550,11 +550,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= - async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" @@ -839,11 +834,6 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= - bluebird@^3.5.0, bluebird@^3.5.x: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -878,7 +868,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.0, braces@^2.3.1: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -1081,25 +1071,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" - integrity sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.0" - optionalDependencies: - fsevents "^1.1.2" - chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -2555,14 +2526,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.2.tgz#4f598f0f69b273188ef4a62ca4e9e08ace314bbf" - integrity sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ== - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.9.0" - fsevents@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" @@ -2658,14 +2621,6 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3094,13 +3049,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3211,7 +3159,7 @@ is-extglob@^1.0.0: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -3247,13 +3195,6 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" @@ -4697,7 +4638,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -4828,7 +4769,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.0, needle@^2.2.1: +needle@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q== @@ -4891,22 +4832,6 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-pre-gyp@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" - integrity sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA= - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.0" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.1.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -5249,11 +5174,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5946,7 +5866,7 @@ raw-loader@~0.5.0, raw-loader@~0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc@^1.1.7, rc@^1.2.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6003,7 +5923,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -6016,16 +5936,6 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - realpath-native@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" @@ -6458,11 +6368,6 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -7212,11 +7117,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.5.tgz#02cab9ecebe95bbec6d5fc2566325725ab6d1a73" - integrity sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww== - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -7327,12 +7227,11 @@ watch@~0.18.0: exec-sh "^0.2.0" minimist "^1.2.0" -watchpack@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack@2.0.0-beta.2: + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0-beta.2.tgz#357ed627767dd16ed80500f49c5d4029b49248cb" + integrity sha512-dzFk3sOzcuIC9s+6Qek6Y0cQmk+N8VvUSY1BtB9wCEpfbcUFOQS7tlD1wRnwq2gv+orBYB/td4hO59Z4lg6ELQ== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0"