mirror of https://github.com/webpack/webpack.git
Update watching system to report more timing info to webpack
Add snapshotting feature to FileSystemInfo for better performance
This commit is contained in:
parent
e7922011d6
commit
4492c30ac4
|
@ -84,6 +84,136 @@ class FileSystemInfo {
|
||||||
this.contextTimestampQueue.add(path, callback);
|
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)
|
// TODO getFileHash(path, callback)
|
||||||
|
|
||||||
_readFileTimestamp(path, callback) {
|
_readFileTimestamp(path, callback) {
|
||||||
|
@ -101,7 +231,7 @@ class FileSystemInfo {
|
||||||
const mtime = +stat.mtime || Infinity;
|
const mtime = +stat.mtime || Infinity;
|
||||||
const ts = {
|
const ts = {
|
||||||
safeTime: mtime + FS_ACCURACY,
|
safeTime: mtime + FS_ACCURACY,
|
||||||
timestamp: mtime
|
timestamp: stat.isFile() ? mtime : undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
this._fileTimestamps.set(path, ts);
|
this._fileTimestamps.set(path, ts);
|
||||||
|
|
|
@ -34,15 +34,7 @@ class IgnoringWatchFileSystem {
|
||||||
missing,
|
missing,
|
||||||
startTime,
|
startTime,
|
||||||
options,
|
options,
|
||||||
(
|
(err, fileTimestamps, dirTimestamps, removedFiles) => {
|
||||||
err,
|
|
||||||
filesModified,
|
|
||||||
dirsModified,
|
|
||||||
missingModified,
|
|
||||||
fileTimestamps,
|
|
||||||
dirTimestamps,
|
|
||||||
removedFiles
|
|
||||||
) => {
|
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
for (const path of ignoredFiles) {
|
for (const path of ignoredFiles) {
|
||||||
fileTimestamps.set(path, 1);
|
fileTimestamps.set(path, 1);
|
||||||
|
@ -52,15 +44,7 @@ class IgnoringWatchFileSystem {
|
||||||
dirTimestamps.set(path, 1);
|
dirTimestamps.set(path, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(
|
callback(err, fileTimestamps, dirTimestamps, removedFiles);
|
||||||
err,
|
|
||||||
filesModified,
|
|
||||||
dirsModified,
|
|
||||||
missingModified,
|
|
||||||
fileTimestamps,
|
|
||||||
dirTimestamps,
|
|
||||||
removedFiles
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
callbackUndelayed
|
callbackUndelayed
|
||||||
);
|
);
|
||||||
|
@ -68,15 +52,15 @@ class IgnoringWatchFileSystem {
|
||||||
return {
|
return {
|
||||||
close: () => watcher.close(),
|
close: () => watcher.close(),
|
||||||
pause: () => watcher.pause(),
|
pause: () => watcher.pause(),
|
||||||
getContextTimestamps: () => {
|
getContextInfoEntries: () => {
|
||||||
const dirTimestamps = watcher.getContextTimestamps();
|
const dirTimestamps = watcher.getContextInfoEntries();
|
||||||
for (const path of ignoredDirs) {
|
for (const path of ignoredDirs) {
|
||||||
dirTimestamps.set(path, 1);
|
dirTimestamps.set(path, 1);
|
||||||
}
|
}
|
||||||
return dirTimestamps;
|
return dirTimestamps;
|
||||||
},
|
},
|
||||||
getFileTimestamps: () => {
|
getFileTimeInfoEntries: () => {
|
||||||
const fileTimestamps = watcher.getFileTimestamps();
|
const fileTimestamps = watcher.getFileTimeInfoEntries();
|
||||||
for (const path of ignoredFiles) {
|
for (const path of ignoredFiles) {
|
||||||
fileTimestamps.set(path, 1);
|
fileTimestamps.set(path, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,6 @@ const Stats = require("./Stats");
|
||||||
* @param {T=} result
|
* @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 {
|
class Watching {
|
||||||
/**
|
/**
|
||||||
* @param {Compiler} compiler the compiler
|
* @param {Compiler} compiler the compiler
|
||||||
|
@ -164,24 +155,14 @@ class Watching {
|
||||||
missing,
|
missing,
|
||||||
this.startTime,
|
this.startTime,
|
||||||
this.watchOptions,
|
this.watchOptions,
|
||||||
(
|
(err, fileTimeInfoEntries, contextTimeInfoEntries, removedFiles) => {
|
||||||
err,
|
|
||||||
filesModified,
|
|
||||||
contextModified,
|
|
||||||
missingModified,
|
|
||||||
fileTimestamps,
|
|
||||||
contextTimestamps,
|
|
||||||
removedFiles
|
|
||||||
) => {
|
|
||||||
this.pausedWatcher = this.watcher;
|
this.pausedWatcher = this.watcher;
|
||||||
this.watcher = null;
|
this.watcher = null;
|
||||||
if (err) {
|
if (err) {
|
||||||
return this.handler(err);
|
return this.handler(err);
|
||||||
}
|
}
|
||||||
this.compiler.fileTimestamps = toFileSystemInfoEntryMap(fileTimestamps);
|
this.compiler.fileTimestamps = fileTimeInfoEntries;
|
||||||
this.compiler.contextTimestamps = toFileSystemInfoEntryMap(
|
this.compiler.contextTimestamps = contextTimeInfoEntries;
|
||||||
contextTimestamps
|
|
||||||
);
|
|
||||||
this.compiler.removedFiles = removedFiles;
|
this.compiler.removedFiles = removedFiles;
|
||||||
this._invalidate();
|
this._invalidate();
|
||||||
},
|
},
|
||||||
|
@ -200,12 +181,8 @@ class Watching {
|
||||||
this.callbacks.push(callback);
|
this.callbacks.push(callback);
|
||||||
}
|
}
|
||||||
if (this.watcher) {
|
if (this.watcher) {
|
||||||
this.compiler.fileTimestamps = toFileSystemInfoEntryMap(
|
this.compiler.fileTimestamps = this.watcher.getFileTimeInfoEntries();
|
||||||
this.watcher.getFileTimestamps()
|
this.compiler.contextTimestamps = this.watcher.getContextTimeInfoEntries();
|
||||||
);
|
|
||||||
this.compiler.contextTimestamps = toFileSystemInfoEntryMap(
|
|
||||||
this.watcher.getContextTimestamps()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
this._invalidate();
|
this._invalidate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,10 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const asyncLib = require("neo-async");
|
|
||||||
|
|
||||||
/** @typedef {import("enhanced-resolve/lib/Resolver")} Resolver */
|
/** @typedef {import("enhanced-resolve/lib/Resolver")} Resolver */
|
||||||
/** @typedef {import("../Compiler")} Compiler */
|
/** @typedef {import("../Compiler")} Compiler */
|
||||||
/** @typedef {import("../FileSystemInfo")} FileSystemInfo */
|
/** @typedef {import("../FileSystemInfo")} FileSystemInfo */
|
||||||
|
|
||||||
const INVALID = {};
|
|
||||||
|
|
||||||
const requestToString = request => {
|
const requestToString = request => {
|
||||||
let str = "";
|
let str = "";
|
||||||
for (const key in request) {
|
for (const key in request) {
|
||||||
|
@ -76,69 +72,37 @@ class ResolverCachePlugin {
|
||||||
propagate("fileDependencies");
|
propagate("fileDependencies");
|
||||||
propagate("contextDependencies");
|
propagate("contextDependencies");
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
const fileDependencies = new Set(newResolveContext.fileDependencies);
|
const fileDependencies = newResolveContext.fileDependencies;
|
||||||
if (newResolveContext.missing) {
|
const contextDependencies = newResolveContext.contextDependencies;
|
||||||
for (const missing of newResolveContext.missing) {
|
const missingDependencies = newResolveContext.missing;
|
||||||
fileDependencies.add(missing);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const contextDependencies = new Set(
|
|
||||||
newResolveContext.contextDependencies
|
|
||||||
);
|
|
||||||
// TODO remove this when enhanced-resolve supports fileDependencies
|
// TODO remove this when enhanced-resolve supports fileDependencies
|
||||||
if (result && result.path) {
|
if (result && result.path) {
|
||||||
fileDependencies.add(result.path);
|
fileDependencies.add(result.path);
|
||||||
}
|
}
|
||||||
const fileTimestamps = new Map();
|
fileSystemInfo.createSnapshot(
|
||||||
const contextTimestamps = new Map();
|
resolveTime,
|
||||||
const store = () => {
|
fileDependencies,
|
||||||
|
contextDependencies,
|
||||||
|
missingDependencies,
|
||||||
|
null,
|
||||||
|
(err, snapshot) => {
|
||||||
|
if (err) return callback(err);
|
||||||
cache.store(
|
cache.store(
|
||||||
identifier,
|
identifier,
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
result,
|
result,
|
||||||
resolveTime,
|
missing: newResolveContext.missing,
|
||||||
fileTimestamps,
|
fileDependencies: newResolveContext.fileDependencies,
|
||||||
contextTimestamps
|
contextDependencies: newResolveContext.contextDependencies,
|
||||||
|
snapshot
|
||||||
},
|
},
|
||||||
restoreErr => {
|
storeErr => {
|
||||||
if (restoreErr) return callback(restoreErr);
|
if (storeErr) return callback(storeErr);
|
||||||
if (result) return callback(null, result);
|
if (result) return callback(null, result);
|
||||||
callback();
|
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 => {
|
|
||||||
if (err) return callback(err);
|
|
||||||
store();
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -167,73 +131,14 @@ class ResolverCachePlugin {
|
||||||
const identifier = `/resolve/${type}${requestToString(
|
const identifier = `/resolve/${type}${requestToString(
|
||||||
request
|
request
|
||||||
)}`;
|
)}`;
|
||||||
cache.get(identifier, null, (err, cacheEntry) => {
|
const processCacheResult = (err, cacheEntry) => {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
|
|
||||||
if (cacheEntry) {
|
if (cacheEntry) {
|
||||||
const {
|
fileSystemInfo.checkSnapshotValid(
|
||||||
result,
|
cacheEntry.snapshot,
|
||||||
resolveTime,
|
(err, valid) => {
|
||||||
fileTimestamps,
|
if (err || !valid) {
|
||||||
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) {
|
|
||||||
return doRealResolve(
|
return doRealResolve(
|
||||||
identifier,
|
identifier,
|
||||||
type,
|
type,
|
||||||
|
@ -243,7 +148,22 @@ class ResolverCachePlugin {
|
||||||
callback
|
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 {
|
} else {
|
||||||
|
@ -256,7 +176,8 @@ class ResolverCachePlugin {
|
||||||
callback
|
callback
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
cache.get(identifier, null, processCacheResult);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const Watchpack = require("watchpack");
|
const Watchpack = require("watchpack");
|
||||||
const objectToMap = require("../util/objectToMap");
|
|
||||||
|
|
||||||
class NodeWatchFileSystem {
|
class NodeWatchFileSystem {
|
||||||
constructor(inputFileSystem) {
|
constructor(inputFileSystem) {
|
||||||
|
@ -48,24 +47,16 @@ class NodeWatchFileSystem {
|
||||||
const cachedFiles = files;
|
const cachedFiles = files;
|
||||||
const cachedDirs = dirs;
|
const cachedDirs = dirs;
|
||||||
this.watcher.once("aggregated", (changes, removals) => {
|
this.watcher.once("aggregated", (changes, removals) => {
|
||||||
changes = changes.concat(removals);
|
|
||||||
if (this.inputFileSystem && this.inputFileSystem.purge) {
|
if (this.inputFileSystem && this.inputFileSystem.purge) {
|
||||||
this.inputFileSystem.purge(changes);
|
for (const item of changes) {
|
||||||
|
this.inputFileSystem.purge(item);
|
||||||
}
|
}
|
||||||
const times = objectToMap(this.watcher.getTimes());
|
for (const item of removals) {
|
||||||
files = new Set(files);
|
this.inputFileSystem.purge(item);
|
||||||
dirs = new Set(dirs);
|
}
|
||||||
missing = new Set(missing);
|
}
|
||||||
removals = new Set(removals.filter(file => files.has(file)));
|
const times = this.watcher.getTimeInfoEntries();
|
||||||
callback(
|
callback(null, times, times, removals);
|
||||||
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
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.watcher.watch(cachedFiles.concat(missing), cachedDirs, startTime);
|
this.watcher.watch(cachedFiles.concat(missing), cachedDirs, startTime);
|
||||||
|
@ -85,16 +76,16 @@ class NodeWatchFileSystem {
|
||||||
this.watcher.pause();
|
this.watcher.pause();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getFileTimestamps: () => {
|
getFileTimeInfoEntries: () => {
|
||||||
if (this.watcher) {
|
if (this.watcher) {
|
||||||
return objectToMap(this.watcher.getTimes());
|
return this.watcher.getTimeInfoEntries();
|
||||||
} else {
|
} else {
|
||||||
return new Map();
|
return new Map();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getContextTimestamps: () => {
|
getContextInfoEntries: () => {
|
||||||
if (this.watcher) {
|
if (this.watcher) {
|
||||||
return objectToMap(this.watcher.getTimes());
|
return this.watcher.getTimeInfoEntries();
|
||||||
} else {
|
} else {
|
||||||
return new Map();
|
return new Map();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
"schema-utils": "^0.4.4",
|
"schema-utils": "^0.4.4",
|
||||||
"tapable": "^1.1.0",
|
"tapable": "^1.1.0",
|
||||||
"terser-webpack-plugin": "^1.2.1",
|
"terser-webpack-plugin": "^1.2.1",
|
||||||
"watchpack": "^1.5.0",
|
"watchpack": "2.0.0-beta.2",
|
||||||
"webpack-sources": "^1.3.0"
|
"webpack-sources": "^1.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -181,13 +181,17 @@ const describeCases = config => {
|
||||||
rimraf(cacheDirectory, done);
|
rimraf(cacheDirectory, done);
|
||||||
});
|
});
|
||||||
if (config.cache) {
|
if (config.cache) {
|
||||||
it(`${testName} should pre-compile to fill disk cache`, done => {
|
it(`${testName} should pre-compile to fill disk cache (1st)`, done => {
|
||||||
const compiler = webpack(options, err => {
|
webpack(options, err => {
|
||||||
if (err) return done(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();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
it(
|
it(
|
||||||
|
|
121
yarn.lock
121
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"
|
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
||||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
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:
|
async-limiter@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
|
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"
|
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
|
||||||
integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
|
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:
|
bluebird@^3.5.0, bluebird@^3.5.x:
|
||||||
version "3.5.1"
|
version "3.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||||
|
@ -878,7 +868,7 @@ braces@^1.8.2:
|
||||||
preserve "^0.2.0"
|
preserve "^0.2.0"
|
||||||
repeat-element "^1.1.2"
|
repeat-element "^1.1.2"
|
||||||
|
|
||||||
braces@^2.3.0, braces@^2.3.1:
|
braces@^2.3.1:
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
|
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
|
||||||
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
|
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"
|
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||||
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
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:
|
chownr@^1.0.1, chownr@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
|
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"
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
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:
|
fsevents@^1.2.3:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
|
||||||
|
@ -2658,14 +2621,6 @@ glob-parent@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-glob "^2.0.0"
|
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:
|
glob@^5.0.15:
|
||||||
version "5.0.15"
|
version "5.0.15"
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
|
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"
|
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||||
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
|
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:
|
is-buffer@^1.1.5:
|
||||||
version "1.1.6"
|
version "1.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
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"
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
|
||||||
integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
|
integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
|
||||||
|
|
||||||
is-extglob@^2.1.0, is-extglob@^2.1.1:
|
is-extglob@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
||||||
|
@ -3247,13 +3195,6 @@ is-glob@^2.0.0, is-glob@^2.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-extglob "^1.0.0"
|
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:
|
is-glob@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
|
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"
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||||
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
|
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"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
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"
|
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||||
|
|
||||||
needle@^2.2.0, needle@^2.2.1:
|
needle@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
|
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d"
|
||||||
integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==
|
integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==
|
||||||
|
@ -4891,22 +4832,6 @@ node-pre-gyp@^0.10.0:
|
||||||
semver "^5.3.0"
|
semver "^5.3.0"
|
||||||
tar "^4"
|
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:
|
nopt@3.x:
|
||||||
version "3.0.6"
|
version "3.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
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"
|
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
||||||
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
|
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:
|
path-exists@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
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"
|
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
|
||||||
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
|
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
|
||||||
|
|
||||||
rc@^1.1.7, rc@^1.2.7:
|
rc@^1.2.7:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
|
||||||
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
|
||||||
|
@ -6003,7 +5923,7 @@ read-pkg@^4.0.1:
|
||||||
parse-json "^4.0.0"
|
parse-json "^4.0.0"
|
||||||
pify "^3.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"
|
version "2.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||||
|
@ -6016,16 +5936,6 @@ read-pkg@^4.0.1:
|
||||||
string_decoder "~1.1.1"
|
string_decoder "~1.1.1"
|
||||||
util-deprecate "~1.0.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:
|
realpath-native@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633"
|
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"
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
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:
|
set-value@^0.4.3:
|
||||||
version "0.4.3"
|
version "0.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
|
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"
|
has-value "^0.3.1"
|
||||||
isobject "^3.0.0"
|
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:
|
uri-js@^4.2.2:
|
||||||
version "4.2.2"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
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"
|
exec-sh "^0.2.0"
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
watchpack@^1.5.0:
|
watchpack@2.0.0-beta.2:
|
||||||
version "1.6.0"
|
version "2.0.0-beta.2"
|
||||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
|
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0-beta.2.tgz#357ed627767dd16ed80500f49c5d4029b49248cb"
|
||||||
integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
|
integrity sha512-dzFk3sOzcuIC9s+6Qek6Y0cQmk+N8VvUSY1BtB9wCEpfbcUFOQS7tlD1wRnwq2gv+orBYB/td4hO59Z4lg6ELQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
chokidar "^2.0.2"
|
|
||||||
graceful-fs "^4.1.2"
|
graceful-fs "^4.1.2"
|
||||||
neo-async "^2.5.0"
|
neo-async "^2.5.0"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue