Merge tag 'v4.32.0' into next

4.32.0
This commit is contained in:
Tobias Koppers 2019-05-20 14:46:31 +02:00
commit abc825d58f
52 changed files with 640 additions and 324 deletions

View File

@ -90,7 +90,7 @@ or packaging just about any resource or asset.
### Get Started ### Get Started
Check out webpack's quick [**Get Started**](https://webpack.js.org/get-started/) guide and the [other guides](https://webpack.js.org/guides/). Check out webpack's quick [**Get Started**](https://webpack.js.org/guides/getting-started) guide and the [other guides](https://webpack.js.org/guides/).
### Browser Compatibility ### Browser Compatibility

View File

@ -90,8 +90,10 @@ jobs:
pool: pool:
vmImage: ubuntu-16.04 vmImage: ubuntu-16.04
strategy: strategy:
maxParallel: 3 maxParallel: 4
matrix: matrix:
node-12:
node_version: ^12.2.0
node-10: node-10:
node_version: ^10.10.0 node_version: ^10.10.0
node-8: node-8:
@ -137,8 +139,10 @@ jobs:
pool: pool:
vmImage: "macOS 10.13" vmImage: "macOS 10.13"
strategy: strategy:
maxParallel: 3 maxParallel: 4
matrix: matrix:
node-12:
node_version: ^12.2.0
node-10: node-10:
node_version: ^10.10.0 node_version: ^10.10.0
node-8: node-8:
@ -184,8 +188,10 @@ jobs:
pool: pool:
vmImage: vs2017-win2016 vmImage: vs2017-win2016
strategy: strategy:
maxParallel: 3 maxParallel: 4
matrix: matrix:
node-12:
node_version: ^12.2.0
node-10: node-10:
node_version: ^10.10.0 node_version: ^10.10.0
node-8: node-8:

View File

@ -80,7 +80,7 @@ if (!cli.installed) {
)}".` )}".`
); );
let question = `Do you want to install 'webpack-cli' (yes/no): `; const question = `Do you want to install 'webpack-cli' (yes/no): `;
const questionInterface = readLine.createInterface({ const questionInterface = readLine.createInterface({
input: process.stdin, input: process.stdin,

View File

@ -592,7 +592,15 @@ class Chunk {
}; };
if (includeDirectChildren) { if (includeDirectChildren) {
addChildIdsByOrdersToMap(this); const chunks = new Set();
for (const chunkGroup of this.groupsIterable) {
for (const chunk of chunkGroup.chunks) {
chunks.add(chunk);
}
}
for (const chunk of chunks) {
addChildIdsByOrdersToMap(chunk);
}
} }
for (const chunk of this.getAllAsyncChunks()) { for (const chunk of this.getAllAsyncChunks()) {

View File

@ -1943,6 +1943,9 @@ class JavascriptParser {
case "RestElement": case "RestElement":
this.enterRestElement(pattern, onIdent); this.enterRestElement(pattern, onIdent);
break; break;
case "Property":
this.enterPattern(pattern.value, onIdent);
break;
} }
} }
@ -1957,7 +1960,7 @@ class JavascriptParser {
propIndex++ propIndex++
) { ) {
const prop = pattern.properties[propIndex]; const prop = pattern.properties[propIndex];
this.enterPattern(prop.value, onIdent); this.enterPattern(prop, onIdent);
} }
} }

View File

@ -107,9 +107,10 @@ class NodeStuffPlugin {
setModuleConstant(expressionName, () => value); setModuleConstant(expressionName, () => value);
const context = compiler.context; const context = compiler.context;
if (localOptions.__filename) {
if (localOptions.__filename === "mock") { if (localOptions.__filename === "mock") {
setConstant("__filename", "/index.js"); setConstant("__filename", "/index.js");
} else if (localOptions.__filename) { } else {
setModuleConstant("__filename", module => setModuleConstant("__filename", module =>
path.relative(context, module.resource) path.relative(context, module.resource)
); );
@ -120,13 +121,15 @@ class NodeStuffPlugin {
if (!parser.state.module) return; if (!parser.state.module) return;
const resource = parser.state.module.resource; const resource = parser.state.module.resource;
const i = resource.indexOf("?"); const i = resource.indexOf("?");
return evaluateToString(i < 0 ? resource : resource.substr(0, i))( return evaluateToString(
expr i < 0 ? resource : resource.substr(0, i)
); )(expr);
}); });
}
if (localOptions.__dirname) {
if (localOptions.__dirname === "mock") { if (localOptions.__dirname === "mock") {
setConstant("__dirname", "/"); setConstant("__dirname", "/");
} else if (localOptions.__dirname) { } else {
setModuleConstant("__dirname", module => setModuleConstant("__dirname", module =>
path.relative(context, module.context) path.relative(context, module.context)
); );
@ -137,6 +140,7 @@ class NodeStuffPlugin {
if (!parser.state.module) return; if (!parser.state.module) return;
return evaluateToString(parser.state.module.context)(expr); return evaluateToString(parser.state.module.context)(expr);
}); });
}
parser.hooks.expression parser.hooks.expression
.for("require.main") .for("require.main")
.tap( .tap(

View File

@ -303,6 +303,7 @@ class NormalModule extends Module {
rootContext: options.context, rootContext: options.context,
webpack: true, webpack: true,
sourceMap: !!this.useSourceMap, sourceMap: !!this.useSourceMap,
mode: options.mode || "production",
_module: this, _module: this,
_compilation: compilation, _compilation: compilation,
_compiler: compilation.compiler, _compiler: compilation.compiler,

View File

@ -25,7 +25,6 @@ const RuntimePlugin = require("./RuntimePlugin");
const APIPlugin = require("./APIPlugin"); const APIPlugin = require("./APIPlugin");
const CompatibilityPlugin = require("./CompatibilityPlugin"); const CompatibilityPlugin = require("./CompatibilityPlugin");
const ConstPlugin = require("./ConstPlugin"); const ConstPlugin = require("./ConstPlugin");
const NodeStuffPlugin = require("./NodeStuffPlugin");
const TemplatedPathPlugin = require("./TemplatedPathPlugin"); const TemplatedPathPlugin = require("./TemplatedPathPlugin");
const UseStrictPlugin = require("./UseStrictPlugin"); const UseStrictPlugin = require("./UseStrictPlugin");
@ -302,7 +301,10 @@ class WebpackOptionsApply extends OptionsApply {
} }
new CommonJsPlugin(options.module).apply(compiler); new CommonJsPlugin(options.module).apply(compiler);
new LoaderPlugin().apply(compiler); new LoaderPlugin().apply(compiler);
if (options.node !== false) {
const NodeStuffPlugin = require("./NodeStuffPlugin");
new NodeStuffPlugin(options.node).apply(compiler); new NodeStuffPlugin(options.node).apply(compiler);
}
new APIPlugin().apply(compiler); new APIPlugin().apply(compiler);
new ConstPlugin().apply(compiler); new ConstPlugin().apply(compiler);
new UseStrictPlugin().apply(compiler); new UseStrictPlugin().apply(compiler);

View File

@ -26,6 +26,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
/** @typedef {"missing"|"unused"|"empty-star"|"reexport-non-harmony-default"|"reexport-named-default"|"reexport-namespace-object"|"reexport-non-harmony-default-strict"|"reexport-fake-namespace-object"|"rexport-non-harmony-undefined"|"normal-reexport"|"dynamic-reexport"} ExportModeType */ /** @typedef {"missing"|"unused"|"empty-star"|"reexport-non-harmony-default"|"reexport-named-default"|"reexport-namespace-object"|"reexport-non-harmony-default-strict"|"reexport-fake-namespace-object"|"rexport-non-harmony-undefined"|"normal-reexport"|"dynamic-reexport"} ExportModeType */
const idSymbol = Symbol("HarmonyExportImportedSpecifierDependency.id");
/** @type {Map<string, string>} */ /** @type {Map<string, string>} */
const EMPTY_MAP = new Map(); const EMPTY_MAP = new Map();
@ -86,6 +88,23 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
return "harmony export imported specifier"; return "harmony export imported specifier";
} }
/**
* @param {ModuleGraph} moduleGraph the module graph
* @returns {string} the imported id
*/
getId(moduleGraph) {
return moduleGraph.getMeta(this)[idSymbol] || this.id;
}
/**
* @param {ModuleGraph} moduleGraph the module graph
* @param {string} id the imported id
* @returns {void}
*/
setId(moduleGraph, id) {
moduleGraph.getMeta(this)[idSymbol] = id;
}
/** /**
* @param {ModuleGraph} moduleGraph the module graph * @param {ModuleGraph} moduleGraph the module graph
* @param {boolean=} ignoreUnused ignore the fact that exports are unused * @param {boolean=} ignoreUnused ignore the fact that exports are unused
@ -93,7 +112,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
*/ */
getMode(moduleGraph, ignoreUnused) { getMode(moduleGraph, ignoreUnused) {
const name = this.name; const name = this.name;
const id = this.id; const id = this.getId(moduleGraph);
const parentModule = moduleGraph.getParentModule(this); const parentModule = moduleGraph.getParentModule(this);
const importedModule = moduleGraph.getModule(this); const importedModule = moduleGraph.getModule(this);
@ -438,15 +457,17 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
return; return;
} }
const id = this.getId(moduleGraph);
if (!importedModule.buildMeta || !importedModule.buildMeta.exportsType) { if (!importedModule.buildMeta || !importedModule.buildMeta.exportsType) {
// It's not an harmony module // It's not an harmony module
if ( if (
moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule && moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule &&
this.id !== "default" id !== "default"
) { ) {
// In strict harmony modules we only support the default export // In strict harmony modules we only support the default export
const exportName = this.id const exportName = id
? `the named export '${this.id}'` ? `the named export '${id}'`
: "the namespace object"; : "the namespace object";
return [ return [
@ -459,21 +480,21 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
return; return;
} }
if (!this.id) { if (!id) {
return; return;
} }
if (moduleGraph.isExportProvided(importedModule, this.id) !== false) { if (moduleGraph.isExportProvided(importedModule, id) !== false) {
// It's provided or we are not sure // It's provided or we are not sure
return; return;
} }
// We are sure that it's not provided // We are sure that it's not provided
const idIsNotNameMessage = const idIsNotNameMessage =
this.id !== this.name ? ` (reexported as '${this.name}')` : ""; id !== this.name ? ` (reexported as '${this.name}')` : "";
const errorMessage = `"export '${ const errorMessage = `"export '${id}'${idIsNotNameMessage} was not found in '${
this.id this.userRequest
}'${idIsNotNameMessage} was not found in '${this.userRequest}'`; }'`;
return [new HarmonyLinkingError(errorMessage)]; return [new HarmonyLinkingError(errorMessage)];
} }

View File

@ -143,8 +143,9 @@ class SideEffectsFlagPlugin {
)) { )) {
const dep = connection.dependency; const dep = connection.dependency;
if ( if (
dep instanceof HarmonyImportSpecifierDependency && dep instanceof HarmonyExportImportedSpecifierDependency ||
!dep.namespaceObjectAsContext (dep instanceof HarmonyImportSpecifierDependency &&
!dep.namespaceObjectAsContext)
) { ) {
const mapping = map.get(dep.id); const mapping = map.get(dep.id);
if (mapping) { if (mapping) {

View File

@ -97,6 +97,17 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
"];" "];"
]) ])
: "", : "",
withDefer && withPrefetch
? Template.asString([
"var deferredPrefetch = [",
prefetchChunks && prefetchChunks.length > 0
? Template.indent(
prefetchChunks.map(c => JSON.stringify(c)).join(",\n")
)
: "// no initial prefetched chunks",
"];"
])
: "",
"", "",
withLoading withLoading
? Template.asString([ ? Template.asString([
@ -174,12 +185,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
]), ]),
"}" "}"
]), ]),
"}", "}"
prefetchChunks && prefetchChunks.length > 0
? prefetchChunks
.map(c => `prefetchChunk(${JSON.stringify(c)});`)
.join("\n")
: ""
]) ])
: "// no prefetching", : "// no prefetching",
"", "",
@ -329,6 +335,17 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
"}" "}"
]), ]),
"}", "}",
withPrefetch
? Template.asString([
"if(deferredModules.length === 0) {",
Template.indent([
"// chunk prefetching for javascript",
"deferredPrefetch.forEach(prefetchChunk);",
"deferredPrefetch.length = 0;"
]),
"}"
])
: "// no prefetch",
"return result;" "return result;"
]), ]),
"}", "}",
@ -338,7 +355,21 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
]), ]),
"};" "};"
]) ])
: "// no deferred startup", : withPrefetch && prefetchChunks && prefetchChunks.length > 0
? Template.asString([
"// prefetching after startup",
`var startup = ${RuntimeGlobals.startup};`,
`${RuntimeGlobals.startup} = function() {`,
Template.indent([
"var result = startup();",
Template.asString(
prefetchChunks.map(c => `prefetchChunk(${JSON.stringify(c)});`)
),
"return result;"
]),
"};"
])
: "// no deferred startup or startup prefetching",
"", "",
withDefer || withLoading withDefer || withLoading
? Template.asString([ ? Template.asString([
@ -378,7 +409,13 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
withPrefetch withPrefetch
? Template.asString([ ? Template.asString([
"// chunk prefetching for javascript", "// chunk prefetching for javascript",
"if(prefetchChunks) prefetchChunks.forEach(prefetchChunk);" "if(prefetchChunks) {",
Template.indent([
withDefer
? "deferredPrefetch.push.apply(deferredPrefetch, prefetchChunks);"
: "prefetchChunks.forEach(prefetchChunk);"
]),
"}"
]) ])
: "", : "",
"while(resolves.length) {", "while(resolves.length) {",

View File

@ -65,6 +65,13 @@ class JsonpTemplatePlugin {
} }
return false; return false;
}; };
const needPrefetchingCode = chunk => {
const allPrefetchChunks = chunk.getChildIdsByOrdersMap(
compilation.chunkGraph,
true
).prefetch;
return allPrefetchChunks && Object.keys(allPrefetchChunks).length;
};
const { const {
jsonpScript, jsonpScript,
@ -101,6 +108,8 @@ class JsonpTemplatePlugin {
"}" "}"
]) ])
: "", : "",
"// create error before stack unwound to get useful stacktrace later",
"var error = new Error();",
"onScriptComplete = function (event) {", "onScriptComplete = function (event) {",
Template.indent([ Template.indent([
"// avoid mem leaks in IE.", "// avoid mem leaks in IE.",
@ -111,7 +120,7 @@ class JsonpTemplatePlugin {
Template.indent([ Template.indent([
"var errorType = event && (event.type === 'load' ? 'missing' : event.type);", "var errorType = event && (event.type === 'load' ? 'missing' : event.type);",
"var realSrc = event && event.target && event.target.src;", "var realSrc = event && event.target && event.target.src;",
"var error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');", "error.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';",
"error.type = errorType;", "error.type = errorType;",
"error.request = realSrc;", "error.request = realSrc;",
"reportError(error);" "reportError(error);"
@ -234,9 +243,10 @@ class JsonpTemplatePlugin {
compilation.hooks.additionalTreeRuntimeRequirements.tap( compilation.hooks.additionalTreeRuntimeRequirements.tap(
"JsonpTemplatePlugin", "JsonpTemplatePlugin",
(chunk, set) => { (chunk, set) => {
if (needEntryDeferringCode(chunk)) { const withDefer = needEntryDeferringCode(chunk);
if (withDefer || needPrefetchingCode(chunk)) {
set.add(RuntimeGlobals.startup); set.add(RuntimeGlobals.startup);
set.add(RuntimeGlobals.startupNoDefault); if (withDefer) set.add(RuntimeGlobals.startupNoDefault);
handler(chunk, set); handler(chunk, set);
} }
} }

View File

@ -492,6 +492,31 @@ rules:
*You don't have to change it for this PR, just make sure to follow this hint the next time you submit a PR.* *You don't have to change it for this PR, just make sure to follow this hint the next time you submit a PR.*
# skip CLA for dependabot
- filters:
open: true
pull_request:
author: "^dependabot\\[bot\\]$"
status:
context: "licence/cla"
state: "pending"
actions:
status:
context: "licence/cla"
description: "Contributor License Agreement is not needed for this user."
state: "success"
# merge dependabot PRs automatically
- filters:
open: true
pull_request:
author: "^dependabot\\[bot\\]$"
mergeable_state: clean
merged: false
label: "PR: CI-ok"
actions:
merge: true
# add "Send a PR" label when somebody with write permission say it # add "Send a PR" label when somebody with write permission say it
- filters: - filters:
open: true open: true

View File

@ -647,6 +647,22 @@ describe("JavascriptParser", () => {
}); });
}); });
}); });
it("should collect definitions from identifiers introduced in object patterns", () => {
let definitions;
const parser = new JavascriptParser();
parser.hooks.statement.tap("JavascriptParserTest", expr => {
definitions = parser.scope.definitions;
return true;
});
parser.parse("const { a, ...rest } = { a: 1, b: 2 };");
expect(definitions.has("a")).toBe(true);
expect(definitions.has("rest")).toBe(true);
});
}); });
describe("optional catch binding support", () => { describe("optional catch binding support", () => {

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
import value, { exception } from "./module"; import value, { exception } from "./module";
it("should have a TDZ for exported const values", function() { it("should have a TDZ for exported const values", () => {
expect((typeof exception)).toBe("object"); expect(typeof exception).toBe("object");
expect(exception).toBeInstanceOf(Error); expect(exception).toBeInstanceOf(Error);
expect(exception.message).toMatch(/ is not defined$/); expect(exception.message).toMatch(
/ is not defined$|^Cannot access '.+?' before initialization$/
);
expect(value).toBe("value"); expect(value).toBe("value");
}); });

View File

@ -0,0 +1 @@
export { B } from "./h1.js";

View File

@ -0,0 +1,2 @@
export { A } from "./ha.js";
export { B } from "./hb.js";

View File

@ -0,0 +1 @@
export const A = "A";

View File

@ -0,0 +1 @@
export const B = "B";

View File

@ -2,7 +2,7 @@ var path = require("path");
var webpack = require("../../../../"); var webpack = require("../../../../");
module.exports = { module.exports = {
entry: ["./a", "./b", "./_d", "./_e", "./f", "./g.abc"], entry: ["./a", "./b", "./_d", "./_e", "./f", "./g.abc", "./h"],
resolve: { resolve: {
extensions: [".js", ".jsx"] extensions: [".js", ".jsx"]
}, },
@ -19,9 +19,16 @@ module.exports = {
options: { options: {
test: 1 test: 1
} }
},
{
test: /0-create-dll.h/,
sideEffects: false
} }
] ]
}, },
optimization: {
sideEffects: true
},
plugins: [ plugins: [
new webpack.DllPlugin({ new webpack.DllPlugin({
path: path.resolve( path: path.resolve(

View File

@ -1,6 +1,7 @@
import d from "dll/d"; import d from "dll/d";
import { x1, y2 } from "./e"; import { x1, y2 } from "./e";
import { x2, y1 } from "dll/e"; import { x2, y1 } from "dll/e";
import { B } from "dll/h";
it("should load a module from dll", function() { it("should load a module from dll", function() {
expect(require("dll/a")).toBe("a"); expect(require("dll/a")).toBe("a");
@ -11,10 +12,12 @@ it("should load a module of non-default type without extension from dll", functi
}); });
it("should load an async module from dll", function(done) { it("should load an async module from dll", function(done) {
require("dll/b")().then(function(c) { require("dll/b")()
.then(function(c) {
expect(c).toEqual(nsObj({ default: "c" })); expect(c).toEqual(nsObj({ default: "c" }));
done(); done();
}).catch(done); })
.catch(done);
}); });
it("should load an harmony module from dll (default export)", function() { it("should load an harmony module from dll (default export)", function() {
@ -33,7 +36,9 @@ it("should load a module with loader applied", function() {
}); });
it("should give modules the correct ids", function() { it("should give modules the correct ids", function() {
expect(Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))).toEqual([ expect(
Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))
).toEqual([
"./index.js", "./index.js",
"dll-reference ../0-create-dll/dll.js", "dll-reference ../0-create-dll/dll.js",
"dll/a.js", "dll/a.js",
@ -44,5 +49,10 @@ it("should give modules the correct ids", function() {
"dll/e2.js", "dll/e2.js",
"dll/f.jsx", "dll/f.jsx",
"dll/g.abc.js", "dll/g.abc.js",
"dll/h.js"
]); ]);
}); });
it("should not crash on side-effect-free modules", function() {
expect(B).toBe("B");
});

View File

@ -1,6 +1,8 @@
import d from "../0-create-dll/d"; import d from "../0-create-dll/d";
import { x1, y2 } from "./e"; import { x1, y2 } from "./e";
import { x2, y1 } from "../0-create-dll/e"; import { x2, y1 } from "../0-create-dll/e";
import { B } from "../0-create-dll/h";
import { A } from "../0-create-dll/h1";
it("should load a module from dll", function() { it("should load a module from dll", function() {
expect(require("../0-create-dll/a")).toBe("a"); expect(require("../0-create-dll/a")).toBe("a");
@ -11,10 +13,12 @@ it("should load a module of non-default type without extension from dll", functi
}); });
it("should load an async module from dll", function(done) { it("should load an async module from dll", function(done) {
require("../0-create-dll/b")().then(function(c) { require("../0-create-dll/b")()
.then(function(c) {
expect(c).toEqual(nsObj({ default: "c" })); expect(c).toEqual(nsObj({ default: "c" }));
done(); done();
}).catch(done); })
.catch(done);
}); });
it("should load an harmony module from dll (default export)", function() { it("should load an harmony module from dll (default export)", function() {
@ -33,7 +37,9 @@ it("should load a module with loader applied", function() {
}); });
it("should give modules the correct ids", function() { it("should give modules the correct ids", function() {
expect(Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))).toEqual([ expect(
Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))
).toEqual([
"../0-create-dll/a.js", "../0-create-dll/a.js",
"../0-create-dll/b.js", "../0-create-dll/b.js",
"../0-create-dll/d.js", "../0-create-dll/d.js",
@ -42,7 +48,17 @@ it("should give modules the correct ids", function() {
"../0-create-dll/e2.js", "../0-create-dll/e2.js",
"../0-create-dll/f.jsx", "../0-create-dll/f.jsx",
"../0-create-dll/g.abc.js", "../0-create-dll/g.abc.js",
"../0-create-dll/h.js",
"../0-create-dll/hb.js",
"./index.js", "./index.js",
"dll-reference ../0-create-dll/dll.js", "dll-reference ../0-create-dll/dll.js",
]); ]);
}); });
it("should not crash on side-effect-free modules", function() {
expect(B).toBe("B");
});
it("should be able to reference side-effect-free reexport-only module", function() {
expect(A).toBe("A");
});

View File

@ -0,0 +1,3 @@
it("provides mode to loaders when the option is omitted", function() {
expect(require("./a")).toBe("production");
});

View File

@ -0,0 +1,3 @@
module.exports = function(source) {
return `module.exports = "${this.mode}";`;
};

View File

@ -0,0 +1,10 @@
module.exports = {
module: {
rules: [
{
test: /a\.js$/,
use: "./loader"
}
]
}
};

View File

@ -0,0 +1,3 @@
it("provides mode to loaders when the option is 'development'", function() {
expect(require("./a")).toBe("development");
});

View File

@ -0,0 +1,3 @@
module.exports = function(source) {
return `module.exports = "${this.mode}";`;
};

View File

@ -0,0 +1,11 @@
module.exports = {
mode: "development",
module: {
rules: [
{
test: /a\.js$/,
use: "./loader"
}
]
}
};

View File

View File

@ -0,0 +1,3 @@
it("provides mode to loaders when the option is 'none'", function() {
expect(require("./a")).toBe("none");
});

View File

@ -0,0 +1,3 @@
module.exports = function(source) {
return `module.exports = "${this.mode}";`;
};

View File

@ -0,0 +1,11 @@
module.exports = {
mode: "none",
module: {
rules: [
{
test: /a\.js$/,
use: "./loader"
}
]
}
};

View File

@ -0,0 +1,3 @@
it("provides mode to loaders when the option is 'production'", function() {
expect(require("./a")).toBe("production");
});

View File

@ -0,0 +1,3 @@
module.exports = function(source) {
return `module.exports = "${this.mode}";`;
};

View File

@ -0,0 +1,11 @@
module.exports = {
mode: "production",
module: {
rules: [
{
test: /a\.js$/,
use: "./loader"
}
]
}
};

View File

@ -0,0 +1,9 @@
it("should not evaluate __dirname or __filename when set to false", function(done) {
if (typeof __dirname !== "undefined") {
done.fail();
}
if (typeof __filename !== "undefined") {
done.fail();
}
done();
});

View File

@ -0,0 +1,6 @@
module.exports = {
moduleScope: function(scope) {
delete scope.__dirname;
delete scope.__filename;
}
};

View File

@ -0,0 +1,7 @@
module.exports = {
target: "web",
node: {
__filename: false,
__dirname: false
}
};

View File

@ -0,0 +1,9 @@
it("should not evaluate __dirname or __filename when node option is false", function(done) {
if (typeof __dirname !== "undefined") {
done.fail();
}
if (typeof __filename !== "undefined") {
done.fail();
}
done();
});

View File

@ -0,0 +1,6 @@
module.exports = {
moduleScope: function(scope) {
delete scope.__dirname;
delete scope.__filename;
}
};

View File

@ -0,0 +1,4 @@
module.exports = {
target: "web",
node: false
};

View File

@ -1,23 +1,9 @@
// This config need to be set on initial evaluation to be effective
let oldNonce;
let oldPublicPath;
beforeEach(done => {
oldNonce = __webpack_nonce__;
oldPublicPath = __webpack_public_path__;
done();
});
afterEach(done => {
__webpack_nonce__ = oldNonce;
__webpack_public_path__ = oldPublicPath;
done();
});
it("should prefetch and preload child chunks on chunk load", () => {
__webpack_nonce__ = "nonce"; __webpack_nonce__ = "nonce";
__webpack_public_path__ = "https://example.com/public/path/"; __webpack_public_path__ = "https://example.com/public/path/";
it("should prefetch and preload child chunks on chunk load", () => {
let link, script; let link, script;
expect(document.head._children).toHaveLength(1); expect(document.head._children).toHaveLength(1);
@ -26,7 +12,7 @@ it("should prefetch and preload child chunks on chunk load", () => {
link = document.head._children[0]; link = document.head._children[0];
expect(link._type).toBe("link"); expect(link._type).toBe("link");
expect(link.rel).toBe("prefetch"); expect(link.rel).toBe("prefetch");
expect(link.href).toMatch(/chunk1\.js$/); expect(link.href).toBe("https://example.com/public/path/chunk1.js");
const promise = import(/* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1"); const promise = import(/* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1");
@ -35,7 +21,7 @@ it("should prefetch and preload child chunks on chunk load", () => {
// Test normal script loading // Test normal script loading
script = document.head._children[1]; script = document.head._children[1];
expect(script._type).toBe("script"); expect(script._type).toBe("script");
expect(script.src).toMatch(/chunk1\.js$/); expect(script.src).toBe("https://example.com/public/path/chunk1.js");
expect(script.getAttribute("nonce")).toBe("nonce") expect(script.getAttribute("nonce")).toBe("nonce")
expect(script.crossOrigin).toBe("anonymous"); expect(script.crossOrigin).toBe("anonymous");
expect(script.onload).toBeTypeOf("function"); expect(script.onload).toBeTypeOf("function");
@ -45,7 +31,7 @@ it("should prefetch and preload child chunks on chunk load", () => {
expect(link._type).toBe("link"); expect(link._type).toBe("link");
expect(link.rel).toBe("preload"); expect(link.rel).toBe("preload");
expect(link.as).toBe("script"); expect(link.as).toBe("script");
expect(link.href).toMatch(/chunk1-b\.js$/); expect(link.href).toBe("https://example.com/public/path/chunk1-b.js");
expect(link.charset).toBe("utf-8"); expect(link.charset).toBe("utf-8");
expect(link.getAttribute("nonce")).toBe("nonce"); expect(link.getAttribute("nonce")).toBe("nonce");
expect(link.crossOrigin).toBe("anonymous"); expect(link.crossOrigin).toBe("anonymous");
@ -62,13 +48,13 @@ it("should prefetch and preload child chunks on chunk load", () => {
link = document.head._children[3]; link = document.head._children[3];
expect(link._type).toBe("link"); expect(link._type).toBe("link");
expect(link.rel).toBe("prefetch"); expect(link.rel).toBe("prefetch");
expect(link.href).toMatch(/chunk1-c\.js$/); expect(link.href).toBe("https://example.com/public/path/chunk1-c.js");
expect(link.crossOrigin).toBe("anonymous"); expect(link.crossOrigin).toBe("anonymous");
link = document.head._children[4]; link = document.head._children[4];
expect(link._type).toBe("link"); expect(link._type).toBe("link");
expect(link.rel).toBe("prefetch"); expect(link.rel).toBe("prefetch");
expect(link.href).toMatch(/chunk1-a\.js$/); expect(link.href).toBe("https://example.com/public/path/chunk1-a.js");
expect(link.crossOrigin).toBe("anonymous"); expect(link.crossOrigin).toBe("anonymous");
const promise2 = import(/* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1"); const promise2 = import(/* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1");
@ -83,7 +69,7 @@ it("should prefetch and preload child chunks on chunk load", () => {
// Test normal script loading // Test normal script loading
script = document.head._children[5]; script = document.head._children[5];
expect(script._type).toBe("script"); expect(script._type).toBe("script");
expect(script.src).toMatch(/chunk2\.js$/); expect(script.src).toBe("https://example.com/public/path/chunk2.js");
expect(script.getAttribute("nonce")).toBe("nonce") expect(script.getAttribute("nonce")).toBe("nonce")
expect(script.crossOrigin).toBe("anonymous"); expect(script.crossOrigin).toBe("anonymous");
expect(script.onload).toBeTypeOf("function"); expect(script.onload).toBeTypeOf("function");

View File

@ -0,0 +1,15 @@
import "./public-path";
it("should prefetch correctly", () => {
expect(document.head._children).toHaveLength(1);
// Test prefetch from entry chunk
const link = document.head._children[0];
expect(link._type).toBe("link");
expect(link.rel).toBe("prefetch");
expect(link.href).toBe("https://example.com/public/path/chunk1.js");
if (Math.random() < -1) {
import(/* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1");
}
});

View File

@ -0,0 +1 @@
__webpack_public_path__ = "https://example.com/public/path/";

View File

@ -0,0 +1,5 @@
module.exports = {
findBundle: function(i, options) {
return ["main.js", "runtime~main.js", "separate-public-path_js.js"];
}
};

View File

@ -0,0 +1,25 @@
module.exports = {
target: "web",
output: {
filename: "[name].js",
chunkFilename: "[name].js",
crossOriginLoading: "anonymous"
},
performance: {
hints: false
},
optimization: {
minimize: false,
chunkIds: "named",
splitChunks: {
cacheGroups: {
separate: {
enforce: true,
chunks: "all",
test: /public-path/
}
}
},
runtimeChunk: true
}
};

108
yarn.lock
View File

@ -98,12 +98,12 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/runtime@7.0.0": "@babel/runtime@^7.0.0":
version "7.0.0" version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d"
integrity sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA== integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==
dependencies: dependencies:
regenerator-runtime "^0.12.0" regenerator-runtime "^0.13.2"
"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.0": "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.0":
version "7.4.0" version "7.4.0"
@ -373,9 +373,9 @@
integrity sha512-MeatbbUsZ80BEsKPXby6pUZjUM9ZuHIpWElN0siopih3fvnlpX2O9L6D5+dzDIb36lf9tM/8U4PVdLQ+L4qr4A== integrity sha512-MeatbbUsZ80BEsKPXby6pUZjUM9ZuHIpWElN0siopih3fvnlpX2O9L6D5+dzDIb36lf9tM/8U4PVdLQ+L4qr4A==
"@types/node@^10.12.21": "@types/node@^10.12.21":
version "10.14.4" version "10.14.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.4.tgz#1c586b991457cbb58fef51bc4e0cfcfa347714b5" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.7.tgz#1854f0a9aa8d2cd6818d607b3d091346c6730362"
integrity sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg== integrity sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A==
"@types/prettier@^1.16.1": "@types/prettier@^1.16.1":
version "1.16.1" version "1.16.1"
@ -1333,15 +1333,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: cosmiconfig@^5.0.7, cosmiconfig@^5.2.0:
version "5.1.0" version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.1.0.tgz#6c5c35e97f37f985061cdf653f114784231185cf" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q== integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
dependencies: dependencies:
import-fresh "^2.0.0" import-fresh "^2.0.0"
is-directory "^0.3.1" is-directory "^0.3.1"
js-yaml "^3.9.0" js-yaml "^3.13.1"
lodash.get "^4.4.2"
parse-json "^4.0.0" parse-json "^4.0.0"
coveralls@^3.0.2: coveralls@^3.0.2:
@ -1717,9 +1716,9 @@ escodegen@^1.9.1:
source-map "~0.6.1" source-map "~0.6.1"
eslint-config-prettier@^4.0.0: eslint-config-prettier@^4.0.0:
version "4.2.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.2.0.tgz#70b946b629cd0e3e98233fd9ecde4cb9778de96c" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0"
integrity sha512-y0uWc/FRfrHhpPZCYflWC8aE0KRJRY04rdZVfl8cL3sEZmOYyaBdhdlQPjKZBnuRMyLVK+JUZr7HaZFClQiH4w== integrity sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA==
dependencies: dependencies:
get-stdin "^6.0.0" get-stdin "^6.0.0"
@ -3017,9 +3016,9 @@ jest-jasmine2@^24.5.0:
throat "^4.0.0" throat "^4.0.0"
jest-junit@^6.2.1: jest-junit@^6.2.1:
version "6.3.0" version "6.4.0"
resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-6.3.0.tgz#99e64ebc54eddcb21238f0cc49f5820c89a8c785" resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-6.4.0.tgz#23e15c979fa6338afde46f2d2ac2a6b7e8cf0d9e"
integrity sha512-3PH9UkpaomX6CUzqjlnk0m4yBCW/eroxV6v61OM6LkCQFO848P3YUhfIzu8ypZSBKB3vvCbB4WaLTKT0BrIf8A== integrity sha512-GXEZA5WBeUich94BARoEUccJumhCgCerg7mXDFLxWwI2P7wL3Z7sGWk+53x343YdBLjiMR9aD/gYMVKO+0pE4Q==
dependencies: dependencies:
jest-validate "^24.0.0" jest-validate "^24.0.0"
mkdirp "^0.5.1" mkdirp "^0.5.1"
@ -3243,7 +3242,7 @@ js-stringify@^1.0.1:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.13.0, js-yaml@^3.9.0: js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.13.0:
version "3.13.0" version "3.13.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e"
integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==
@ -3251,6 +3250,14 @@ js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.13.0,
argparse "^1.0.7" argparse "^1.0.7"
esprima "^4.0.0" esprima "^4.0.0"
js-yaml@^3.13.1:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
jsbn@~0.1.0: jsbn@~0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@ -3475,13 +3482,13 @@ levn@^0.3.0, levn@~0.3.0:
type-check "~0.3.2" type-check "~0.3.2"
lint-staged@^8.0.4: lint-staged@^8.0.4:
version "8.1.5" version "8.1.7"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.7.tgz#a8988bc83bdffa97d04adb09dbc0b1f3a58fa6fc"
integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA== integrity sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA==
dependencies: dependencies:
chalk "^2.3.1" chalk "^2.3.1"
commander "^2.14.1" commander "^2.14.1"
cosmiconfig "^5.0.2" cosmiconfig "^5.2.0"
debug "^3.1.0" debug "^3.1.0"
dedent "^0.7.0" dedent "^0.7.0"
del "^3.0.0" del "^3.0.0"
@ -3503,7 +3510,7 @@ lint-staged@^8.0.4:
staged-git-files "1.1.2" staged-git-files "1.1.2"
string-argv "^0.0.2" string-argv "^0.0.2"
stringify-object "^3.2.2" stringify-object "^3.2.2"
yup "^0.26.10" yup "^0.27.0"
listr-silent-renderer@^1.1.1: listr-silent-renderer@^1.1.1:
version "1.1.1" version "1.1.1"
@ -3581,17 +3588,12 @@ locate-path@^3.0.0:
p-locate "^3.0.0" p-locate "^3.0.0"
path-exists "^3.0.0" path-exists "^3.0.0"
lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
lodash.sortby@^4.7.0: lodash.sortby@^4.7.0:
version "4.7.0" version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4: lodash@^4.17.11, lodash@^4.17.4:
version "4.17.11" version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
@ -3778,9 +3780,9 @@ mime@^1.4.1:
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.0.3: mime@^2.0.3:
version "2.4.0" version "2.4.3"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe"
integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==
mimic-fn@^1.0.0: mimic-fn@^1.0.0:
version "1.2.0" version "1.2.0"
@ -3904,9 +3906,9 @@ natural-compare@^1.4.0:
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
neo-async@^2.5.0, neo-async@^2.6.0: neo-async@^2.5.0, neo-async@^2.6.0:
version "2.6.0" version "2.6.1"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
next-tick@1: next-tick@1:
version "1.0.0" version "1.0.0"
@ -4684,10 +4686,10 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-runtime@^0.12.0: regenerator-runtime@^0.13.2:
version "0.12.1" version "0.13.2"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
regex-not@^1.0.0, regex-not@^1.0.2: regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2" version "1.0.2"
@ -5350,10 +5352,10 @@ symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
synchronous-promise@^2.0.5: synchronous-promise@^2.0.6:
version "2.0.6" version "2.0.7"
resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.6.tgz#de76e0ea2b3558c1e673942e47e714a930fa64aa" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3"
integrity sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g== integrity sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A==
table@^5.2.3: table@^5.2.3:
version "5.2.3" version "5.2.3"
@ -5957,14 +5959,14 @@ yargs@~3.10.0:
decamelize "^1.0.0" decamelize "^1.0.0"
window-size "0.1.0" window-size "0.1.0"
yup@^0.26.10: yup@^0.27.0:
version "0.26.10" version "0.27.0"
resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1" resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7"
integrity sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw== integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==
dependencies: dependencies:
"@babel/runtime" "7.0.0" "@babel/runtime" "^7.0.0"
fn-name "~2.0.1" fn-name "~2.0.1"
lodash "^4.17.10" lodash "^4.17.11"
property-expr "^1.5.0" property-expr "^1.5.0"
synchronous-promise "^2.0.5" synchronous-promise "^2.0.6"
toposort "^2.0.2" toposort "^2.0.2"