Socket
Socket
Sign inDemoInstall

webpack

Package Overview
Dependencies
77
Maintainers
2
Versions
834
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 5.72.1 to 5.73.0

16

lib/config/defaults.js

@@ -193,3 +193,4 @@ /*

css: options.experiments.css,
futureDefaults
futureDefaults,
isNode: targetProperties && targetProperties.node === true
});

@@ -455,2 +456,3 @@

* @param {boolean} options.futureDefaults is future defaults enabled
* @param {boolean} options.isNode is node target platform
* @returns {void}

@@ -460,3 +462,3 @@ */

parserOptions,
{ futureDefaults }
{ futureDefaults, isNode }
) => {

@@ -476,2 +478,6 @@ D(parserOptions, "unknownContextRequest", ".");

D(parserOptions, "importMeta", true);
D(parserOptions, "dynamicImportMode", "lazy");
D(parserOptions, "dynamicImportPrefetch", false);
D(parserOptions, "dynamicImportPreload", false);
D(parserOptions, "createRequire", isNode);
if (futureDefaults) D(parserOptions, "exportsPresence", "error");

@@ -488,2 +494,3 @@ };

* @param {boolean} options.futureDefaults is future defaults enabled
* @param {boolean} options.isNode is node target platform
* @returns {void}

@@ -493,3 +500,3 @@ */

module,
{ cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults }
{ cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults, isNode }
) => {

@@ -513,3 +520,4 @@ if (cache) {

applyJavascriptParserOptionsDefaults(module.parser.javascript, {
futureDefaults
futureDefaults,
isNode
});

@@ -516,0 +524,0 @@

@@ -8,5 +8,8 @@ /*

const { fileURLToPath } = require("url");
const CommentCompilationWarning = require("../CommentCompilationWarning");
const RuntimeGlobals = require("../RuntimeGlobals");
const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
const WebpackError = require("../WebpackError");
const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
const {

@@ -30,4 +33,8 @@ evaluateToIdentifier,

/** @typedef {import("estree").CallExpression} CallExpressionNode */
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
const createRequireSpecifierTag = Symbol("createRequire");
const createdRequireIdentifierTag = Symbol("createRequire()");
class CommonJsImportsParserPlugin {

@@ -44,3 +51,10 @@ /**

// metadata //
const getContext = () => {
if (parser.currentTagData) {
const { context } = parser.currentTagData;
return context;
}
};
//#region metadata
const tapRequireExpression = (expression, getMembers) => {

@@ -50,3 +64,3 @@ parser.hooks.typeof

.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
toConstantDependency(parser, JSON.stringify("function"))

@@ -56,31 +70,45 @@ );

.for(expression)
.tap("CommonJsPlugin", evaluateToString("function"));
.tap("CommonJsImportsParserPlugin", evaluateToString("function"));
parser.hooks.evaluateIdentifier
.for(expression)
.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
evaluateToIdentifier(expression, "require", getMembers, true)
);
};
const tapRequireExpressionTag = tag => {
parser.hooks.typeof
.for(tag)
.tap(
"CommonJsImportsParserPlugin",
toConstantDependency(parser, JSON.stringify("function"))
);
parser.hooks.evaluateTypeof
.for(tag)
.tap("CommonJsImportsParserPlugin", evaluateToString("function"));
};
tapRequireExpression("require", () => []);
tapRequireExpression("require.resolve", () => ["resolve"]);
tapRequireExpression("require.resolveWeak", () => ["resolveWeak"]);
//#endregion
// Weird stuff //
parser.hooks.assign.for("require").tap("CommonJsPlugin", expr => {
// to not leak to global "require", we need to define a local require here.
const dep = new ConstDependency("var require;", 0);
dep.loc = expr.loc;
parser.state.module.addPresentationalDependency(dep);
return true;
});
parser.hooks.assign
.for("require")
.tap("CommonJsImportsParserPlugin", expr => {
// to not leak to global "require", we need to define a local require here.
const dep = new ConstDependency("var require;", 0);
dep.loc = expr.loc;
parser.state.module.addPresentationalDependency(dep);
return true;
});
// Unsupported //
//#region Unsupported
parser.hooks.expression
.for("require.main.require")
.for("require.main")
.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
expressionIsUnsupported(
parser,
"require.main.require is not supported by webpack."
"require.main is not supported by webpack."
)

@@ -91,3 +119,3 @@ );

.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
expressionIsUnsupported(

@@ -101,3 +129,3 @@ parser,

.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
expressionIsUnsupported(

@@ -111,3 +139,3 @@ parser,

.tap(
"CommonJsPlugin",
"CommonJsImportsParserPlugin",
expressionIsUnsupported(

@@ -118,6 +146,6 @@ parser,

);
//#endregion
// renaming //
parser.hooks.canRename.for("require").tap("CommonJsPlugin", () => true);
parser.hooks.rename.for("require").tap("CommonJsPlugin", expr => {
//#region Renaming
const defineUndefined = expr => {
// To avoid "not defined" error, replace the value with undefined

@@ -128,44 +156,62 @@ const dep = new ConstDependency("undefined", expr.range);

return false;
});
};
parser.hooks.canRename
.for("require")
.tap("CommonJsImportsParserPlugin", () => true);
parser.hooks.rename
.for("require")
.tap("CommonJsImportsParserPlugin", defineUndefined);
//#endregion
// inspection //
//#region Inspection
const requireCache = toConstantDependency(
parser,
RuntimeGlobals.moduleCache,
[
RuntimeGlobals.moduleCache,
RuntimeGlobals.moduleId,
RuntimeGlobals.moduleLoaded
]
);
parser.hooks.expression
.for("require.cache")
.tap(
"CommonJsImportsParserPlugin",
toConstantDependency(parser, RuntimeGlobals.moduleCache, [
RuntimeGlobals.moduleCache,
RuntimeGlobals.moduleId,
RuntimeGlobals.moduleLoaded
])
.tap("CommonJsImportsParserPlugin", requireCache);
//#endregion
//#region Require as expression
const requireAsExpressionHandler = expr => {
const dep = new CommonJsRequireContextDependency(
{
request: options.unknownContextRequest,
recursive: options.unknownContextRecursive,
regExp: options.unknownContextRegExp,
mode: "sync"
},
expr.range,
undefined,
parser.scope.inShorthand,
getContext()
);
// require as expression //
dep.critical =
options.unknownContextCritical &&
"require function is used in a way in which dependencies cannot be statically extracted";
dep.loc = expr.loc;
dep.optional = !!parser.scope.inTry;
parser.state.current.addDependency(dep);
return true;
};
parser.hooks.expression
.for("require")
.tap("CommonJsImportsParserPlugin", expr => {
const dep = new CommonJsRequireContextDependency(
{
request: options.unknownContextRequest,
recursive: options.unknownContextRecursive,
regExp: options.unknownContextRegExp,
mode: "sync"
},
expr.range,
undefined,
parser.scope.inShorthand
);
dep.critical =
options.unknownContextCritical &&
"require function is used in a way in which dependencies cannot be statically extracted";
dep.loc = expr.loc;
dep.optional = !!parser.scope.inTry;
parser.state.current.addDependency(dep);
return true;
});
.tap("CommonJsImportsParserPlugin", requireAsExpressionHandler);
//#endregion
// require //
//#region Require
const processRequireItem = (expr, param) => {
if (param.isString()) {
const dep = new CommonJsRequireDependency(param.string, param.range);
const dep = new CommonJsRequireDependency(
param.string,
param.range,
getContext()
);
dep.loc = expr.loc;

@@ -187,3 +233,5 @@ dep.optional = !!parser.scope.inTry;

},
parser
parser,
undefined,
getContext()
);

@@ -282,4 +330,5 @@ if (!dep) return;

.tap("CommonJsImportsParserPlugin", createRequireHandler(true));
//#endregion
// require with property access //
//#region Require with property access
const chainHandler = (expr, calleeMembers, callExpr, members) => {

@@ -331,4 +380,5 @@ if (callExpr.arguments.length !== 1) return;

.tap("CommonJsImportsParserPlugin", callChainHandler);
//#endregion
// require.resolve //
//#region Require.resolve
const processResolve = (expr, weak) => {

@@ -361,3 +411,7 @@ if (expr.arguments.length !== 1) return;

if (param.isString()) {
const dep = new RequireResolveDependency(param.string, param.range);
const dep = new RequireResolveDependency(
param.string,
param.range,
getContext()
);
dep.loc = expr.loc;

@@ -381,3 +435,4 @@ dep.optional = !!parser.scope.inTry;

},
parser
parser,
getContext()
);

@@ -393,3 +448,3 @@ if (!dep) return;

.for("require.resolve")
.tap("RequireResolveDependencyParserPlugin", expr => {
.tap("CommonJsImportsParserPlugin", expr => {
return processResolve(expr, false);

@@ -399,7 +454,233 @@ });

.for("require.resolveWeak")
.tap("RequireResolveDependencyParserPlugin", expr => {
.tap("CommonJsImportsParserPlugin", expr => {
return processResolve(expr, true);
});
//#endregion
//#region Create require
if (!options.createRequire) return;
let moduleName;
let specifierName;
if (options.createRequire === true) {
moduleName = "module";
specifierName = "createRequire";
} else {
const match = /^(.*) from (.*)$/.exec(options.createRequire);
if (match) {
[, specifierName, moduleName] = match;
}
if (!specifierName || !moduleName) {
const err = new WebpackError(
`Parsing javascript parser option "createRequire" failed, got ${JSON.stringify(
options.createRequire
)}`
);
err.details =
'Expected string in format "createRequire from module", where "createRequire" is specifier name and "module" name of the module';
throw err;
}
}
tapRequireExpressionTag(createdRequireIdentifierTag);
tapRequireExpressionTag(createRequireSpecifierTag);
parser.hooks.evaluateCallExpression
.for(createRequireSpecifierTag)
.tap("CommonJsImportsParserPlugin", expr => {
const context = parseCreateRequireArguments(expr);
if (context === undefined) return;
const ident = parser.evaluatedVariable({
tag: createdRequireIdentifierTag,
data: { context },
next: undefined
});
return new BasicEvaluatedExpression()
.setIdentifier(ident, ident, () => [])
.setSideEffects(false)
.setRange(expr.range);
});
parser.hooks.unhandledExpressionMemberChain
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", (expr, members) => {
return expressionIsUnsupported(
parser,
`createRequire().${members.join(".")} is not supported by webpack.`
)(expr);
});
parser.hooks.canRename
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", () => true);
parser.hooks.canRename
.for(createRequireSpecifierTag)
.tap("CommonJsImportsParserPlugin", () => true);
parser.hooks.rename
.for(createRequireSpecifierTag)
.tap("CommonJsImportsParserPlugin", defineUndefined);
parser.hooks.expression
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", requireAsExpressionHandler);
parser.hooks.call
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", createRequireHandler(false));
/**
* @param {CallExpressionNode} expr call expression
* @returns {string} context
*/
const parseCreateRequireArguments = expr => {
const args = expr.arguments;
if (args.length !== 1) {
const err = new WebpackError(
"module.createRequire supports only one argument."
);
err.loc = expr.loc;
parser.state.module.addWarning(err);
return;
}
const arg = args[0];
const evaluated = parser.evaluateExpression(arg);
if (!evaluated.isString()) {
const err = new WebpackError(
"module.createRequire failed parsing argument."
);
err.loc = arg.loc;
parser.state.module.addWarning(err);
return;
}
const ctx = evaluated.string.startsWith("file://")
? fileURLToPath(evaluated.string)
: evaluated.string;
// argument always should be a filename
return ctx.slice(0, ctx.lastIndexOf(ctx.startsWith("/") ? "/" : "\\"));
};
parser.hooks.import.tap(
{
name: "CommonJsImportsParserPlugin",
stage: -10
},
(statement, source) => {
if (
source !== moduleName ||
statement.specifiers.length !== 1 ||
statement.specifiers[0].type !== "ImportSpecifier" ||
statement.specifiers[0].imported.type !== "Identifier" ||
statement.specifiers[0].imported.name !== specifierName
)
return;
// clear for 'import { createRequire as x } from "module"'
// if any other specifier was used import module
const clearDep = new ConstDependency(
parser.isAsiPosition(statement.range[0]) ? ";" : "",
statement.range
);
clearDep.loc = statement.loc;
parser.state.module.addPresentationalDependency(clearDep);
parser.unsetAsiPosition(statement.range[1]);
return true;
}
);
parser.hooks.importSpecifier.tap(
{
name: "CommonJsImportsParserPlugin",
stage: -10
},
(statement, source, id, name) => {
if (source !== moduleName || id !== specifierName) return;
parser.tagVariable(name, createRequireSpecifierTag);
return true;
}
);
parser.hooks.preDeclarator.tap(
"CommonJsImportsParserPlugin",
declarator => {
if (
declarator.id.type !== "Identifier" ||
!declarator.init ||
declarator.init.type !== "CallExpression" ||
declarator.init.callee.type !== "Identifier"
)
return;
const variableInfo = parser.getVariableInfo(
declarator.init.callee.name
);
if (
variableInfo &&
variableInfo.tagInfo &&
variableInfo.tagInfo.tag === createRequireSpecifierTag
) {
const context = parseCreateRequireArguments(declarator.init);
if (context === undefined) return;
parser.tagVariable(declarator.id.name, createdRequireIdentifierTag, {
name: declarator.id.name,
context
});
return true;
}
}
);
parser.hooks.memberChainOfCallMemberChain
.for(createRequireSpecifierTag)
.tap(
"CommonJsImportsParserPlugin",
(expr, calleeMembers, callExpr, members) => {
if (
calleeMembers.length !== 0 ||
members.length !== 1 ||
members[0] !== "cache"
)
return;
// createRequire().cache
const context = parseCreateRequireArguments(callExpr);
if (context === undefined) return;
return requireCache(expr);
}
);
parser.hooks.callMemberChainOfCallMemberChain
.for(createRequireSpecifierTag)
.tap(
"CommonJsImportsParserPlugin",
(expr, calleeMembers, innerCallExpression, members) => {
if (
calleeMembers.length !== 0 ||
members.length !== 1 ||
members[0] !== "resolve"
)
return;
// createRequire().resolve()
return processResolve(expr, false);
}
);
parser.hooks.expressionMemberChain
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", (expr, members) => {
// require.cache
if (members.length === 1 && members[0] === "cache") {
return requireCache(expr);
}
});
parser.hooks.callMemberChain
.for(createdRequireIdentifierTag)
.tap("CommonJsImportsParserPlugin", (expr, members) => {
// require.resolve()
if (members.length === 1 && members[0] === "resolve") {
return processResolve(expr, false);
}
});
parser.hooks.call
.for(createRequireSpecifierTag)
.tap("CommonJsImportsParserPlugin", expr => {
const clearDep = new ConstDependency(
"/* createRequire() */ undefined",
expr.range
);
clearDep.loc = expr.loc;
parser.state.module.addPresentationalDependency(clearDep);
return true;
});
//#endregion
}
}
module.exports = CommonJsImportsParserPlugin;

@@ -13,4 +13,4 @@ /*

class CommonJsRequireContextDependency extends ContextDependency {
constructor(options, range, valueRange, inShorthand) {
super(options);
constructor(options, range, valueRange, inShorthand, context) {
super(options, context);

@@ -17,0 +17,0 @@ this.range = range;

@@ -13,5 +13,6 @@ /*

class CommonJsRequireDependency extends ModuleDependency {
constructor(request, range) {
constructor(request, range, context) {
super(request);
this.range = range;
this._context = context;
}

@@ -18,0 +19,0 @@

@@ -29,4 +29,5 @@ /*

* @param {ContextDependencyOptions} options options for the context module
* @param {string=} context request context
*/
constructor(options) {
constructor(options, context) {
super();

@@ -54,4 +55,12 @@

this.replaces = undefined;
this._requestContext = context;
}
/**
* @returns {string | undefined} a request context
*/
getContext() {
return this._requestContext;
}
get category() {

@@ -73,3 +82,5 @@ return "commonjs";

return (
`context${this.options.request} ${this.options.recursive} ` +
`context${this._requestContext || ""}|ctx request${
this.options.request
} ${this.options.recursive} ` +
`${regExpToString(this.options.regExp)} ${regExpToString(

@@ -118,2 +129,3 @@ this.options.include

write(this.request);
write(this._requestContext);
write(this.range);

@@ -135,2 +147,3 @@ write(this.valueRange);

this.request = read();
this._requestContext = read();
this.range = read();

@@ -137,0 +150,0 @@ this.valueRange = read();

@@ -42,3 +42,3 @@ /*

/** @typedef {{ new(options: ContextDependencyOptions, range: [number, number], valueRange: [number, number]): ContextDependency }} ContextDependencyConstructor */
/** @typedef {{ new(options: ContextDependencyOptions, range: [number, number], valueRange: [number, number], ...args: any[]): ContextDependency }} ContextDependencyConstructor */

@@ -53,5 +53,15 @@ /**

* @param {JavascriptParser} parser the parser
* @param {...any} depArgs depArgs
* @returns {ContextDependency} the created Dependency
*/
exports.create = (Dep, range, param, expr, options, contextOptions, parser) => {
exports.create = (
Dep,
range,
param,
expr,
options,
contextOptions,
parser,
...depArgs
) => {
if (param.isTemplateString()) {

@@ -102,3 +112,4 @@ let prefixRaw = param.quasis[0].string;

range,
valueRange
valueRange,
...depArgs
);

@@ -186,3 +197,4 @@ dep.loc = expr.loc;

range,
valueRange
valueRange,
...depArgs
);

@@ -225,3 +237,4 @@ dep.loc = expr.loc;

range,
param.range
param.range,
...depArgs
);

@@ -228,0 +241,0 @@ dep.loc = expr.loc;

@@ -52,16 +52,2 @@ /*

/**
* @returns {string | undefined} a request context
*/
getContext() {
return this._context;
}
/**
* @returns {string | null} an identifier to merge equal requests
*/
getResourceIdentifier() {
return `context${this._context || ""}|${super.getResourceIdentifier()}`;
}
get category() {

@@ -90,3 +76,2 @@ return this._category;

write(this._category);
write(this._context);
write(this.referencedExports);

@@ -100,3 +85,2 @@ super.serialize(context);

this._category = read();
this._context = read();
this.referencedExports = read();

@@ -103,0 +87,0 @@ super.deserialize(context);

@@ -106,3 +106,3 @@ /*

if (typeof value === "boolean") {
source.replace(dep.range[0], dep.range[1] - 1, `${value}`);
source.replace(dep.range[0], dep.range[1] - 1, ` ${value}`);
} else {

@@ -109,0 +109,0 @@ const usedName = exportsInfo.getUsedName(ids, runtime);

@@ -17,2 +17,3 @@ /*

/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
/** @typedef {import("../ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */

@@ -22,2 +23,5 @@ /** @typedef {import("../ContextModule").ContextMode} ContextMode */

class ImportParserPlugin {
/**
* @param {JavascriptParserOptions} options options
*/
constructor(options) {

@@ -33,3 +37,3 @@ this.options = options;

/** @type {ContextMode} */
let mode = "lazy";
let mode = this.options.dynamicImportMode;
let include = null;

@@ -42,2 +46,13 @@ let exclude = null;

const { dynamicImportPreload, dynamicImportPrefetch } = this.options;
if (dynamicImportPreload !== undefined && dynamicImportPreload !== false)
groupOptions.preloadOrder =
dynamicImportPreload === true ? 0 : dynamicImportPreload;
if (
dynamicImportPrefetch !== undefined &&
dynamicImportPrefetch !== false
)
groupOptions.prefetchOrder =
dynamicImportPrefetch === true ? 0 : dynamicImportPrefetch;
const { options: importOptions, errors: commentErrors } =

@@ -182,12 +197,18 @@ parser.parseCommentOptions(expr.range);

if (
mode !== "lazy" &&
mode !== "lazy-once" &&
mode !== "eager" &&
mode !== "weak"
) {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackMode\` expected 'lazy', 'lazy-once', 'eager' or 'weak', but received: ${mode}.`,
expr.loc
)
);
mode = "lazy";
}
if (param.isString()) {
if (mode !== "lazy" && mode !== "eager" && mode !== "weak") {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackMode\` expected 'lazy', 'eager' or 'weak', but received: ${mode}.`,
expr.loc
)
);
}
if (mode === "eager") {

@@ -223,17 +244,2 @@ const dep = new ImportEagerDependency(

} else {
if (
mode !== "lazy" &&
mode !== "lazy-once" &&
mode !== "eager" &&
mode !== "weak"
) {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackMode\` expected 'lazy', 'lazy-once', 'eager' or 'weak', but received: ${mode}.`,
expr.loc
)
);
mode = "lazy";
}
if (mode === "weak") {

@@ -240,0 +246,0 @@ mode = "async-weak";

@@ -16,2 +16,3 @@ /*

/** @typedef {import("../ModuleGraph")} ModuleGraph */
/** @typedef {import("../json/JsonData")} JsonData */
/** @typedef {import("../util/Hash")} Hash */

@@ -22,9 +23,11 @@

if (Array.isArray(data)) {
return data.map((item, idx) => {
return {
name: `${idx}`,
canMangle: true,
exports: getExportsFromData(item)
};
});
return data.length < 100
? data.map((item, idx) => {
return {
name: `${idx}`,
canMangle: true,
exports: getExportsFromData(item)
};
})
: undefined;
} else {

@@ -47,8 +50,7 @@ const exports = [];

/**
* @param {(string | ExportSpec)[]} exports json exports
* @param {JsonData=} data json data
*/
constructor(exports) {
constructor(data) {
super();
this.exports = exports;
this._hashUpdate = undefined;
this.data = data;
}

@@ -67,3 +69,3 @@

return {
exports: this.exports,
exports: getExportsFromData(this.data && this.data.get()),
dependencies: undefined

@@ -80,8 +82,3 @@ };

updateHash(hash, context) {
if (this._hashUpdate === undefined) {
this._hashUpdate = this.exports
? JSON.stringify(this.exports)
: "undefined";
}
hash.update(this._hashUpdate);
this.data.updateHash(hash);
}

@@ -91,3 +88,3 @@

const { write } = context;
write(this.exports);
write(this.data);
super.serialize(context);

@@ -98,3 +95,3 @@ }

const { read } = context;
this.exports = read();
this.data = read();
super.deserialize(context);

@@ -110,2 +107,1 @@ }

module.exports = JsonExportsDependency;
module.exports.getExportsFromData = getExportsFromData;

@@ -29,9 +29,17 @@ /*

this.assertions = undefined;
this._context = undefined;
}
/**
* @returns {string | undefined} a request context
*/
getContext() {
return this._context;
}
/**
* @returns {string | null} an identifier to merge equal requests
*/
getResourceIdentifier() {
let str = `module${this.request}`;
let str = `context${this._context || ""}|module${this.request}`;
if (this.assertions !== undefined) {

@@ -67,2 +75,3 @@ str += JSON.stringify(this.assertions);

write(this.userRequest);
write(this._context);
write(this.range);

@@ -76,2 +85,3 @@ super.serialize(context);

this.userRequest = read();
this._context = read();
this.range = read();

@@ -78,0 +88,0 @@ super.deserialize(context);

@@ -13,4 +13,4 @@ /*

class RequireResolveContextDependency extends ContextDependency {
constructor(options, range, valueRange) {
super(options);
constructor(options, range, valueRange, context) {
super(options, context);

@@ -17,0 +17,0 @@ this.range = range;

@@ -18,6 +18,7 @@ /*

class RequireResolveDependency extends ModuleDependency {
constructor(request, range) {
constructor(request, range, context) {
super(request);
this.range = range;
this._context = context;
}

@@ -24,0 +25,0 @@

@@ -8,2 +8,4 @@ /*

const { pathToFileURL } = require("url");
const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
const { approve } = require("../javascript/JavascriptParserHelpers");

@@ -15,2 +17,3 @@ const InnerGraph = require("../optimize/InnerGraph");

/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../NormalModule")} NormalModule */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */

@@ -33,2 +36,9 @@

/**
* @param {NormalModule} module module
* @returns {URL} file url
*/
const getUrl = module => {
return pathToFileURL(module.resource);
};
/**
* @param {JavascriptParser} parser parser

@@ -73,2 +83,13 @@ * @param {object} parserOptions options

parser.hooks.canRename.for("URL").tap("URLPlugin", approve);
parser.hooks.evaluateNewExpression
.for("URL")
.tap("URLPlugin", expr => {
const request = getUrlRequest(expr);
if (!request) return;
const url = new URL(request, getUrl(parser.state.module));
return new BasicEvaluatedExpression()
.setString(url.toString())
.setRange(expr.range);
});
parser.hooks.new.for("URL").tap("URLPlugin", _expr => {

@@ -75,0 +96,0 @@ const expr = /** @type {NewExpressionNode} */ (_expr);

@@ -31,2 +31,3 @@ /*

/** @typedef {import("./Compilation").EntryOptions} EntryOptions */
/** @typedef {import("./Compilation").PathData} PathData */
/** @typedef {import("./Compiler").AssetEmittedInfo} AssetEmittedInfo */

@@ -33,0 +34,0 @@ /** @typedef {import("./MultiStats")} MultiStats */

@@ -27,2 +27,10 @@ /*

}
updateHash(hash) {
if (this._buffer === undefined && this._data !== undefined) {
this._buffer = Buffer.from(JSON.stringify(this._data));
}
if (this._buffer) return hash.update(this._buffer);
}
}

@@ -29,0 +37,0 @@

@@ -44,4 +44,4 @@ /*

: parseFn(source[0] === "\ufeff" ? source.slice(1) : source);
state.module.buildInfo.jsonData = new JsonData(data);
const jsonData = new JsonData(data);
state.module.buildInfo.jsonData = jsonData;
state.module.buildInfo.strict = true;

@@ -51,5 +51,3 @@ state.module.buildMeta.exportsType = "default";

typeof data === "object" ? "redirect-warn" : false;
state.module.addDependency(
new JsonExportsDependency(JsonExportsDependency.getExportsFromData(data))
);
state.module.addDependency(new JsonExportsDependency(jsonData));
return state;

@@ -56,0 +54,0 @@ }

@@ -67,3 +67,3 @@ /*

"global",
"The global namespace object is Node.js feature and doesn't present in browser."
"The global namespace object is a Node.js feature and isn't available in browsers."
)

@@ -70,0 +70,0 @@ );

@@ -23,8 +23,9 @@ /*

return Template.asString([
'var webpackThen = typeof Symbol === "function" ? Symbol("webpack then") : "__webpack_then__";',
'var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";',
'var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__";',
'var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";',
`var completeQueue = ${runtimeTemplate.basicFunction("queue", [
"if(queue) {",
`var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
"if(queue && !queue.d) {",
Template.indent([
"queue.d = 1;",
`queue.forEach(${runtimeTemplate.expressionFunction(

@@ -41,10 +42,2 @@ "fn.r--",

])}`,
`var completeFunction = ${runtimeTemplate.expressionFunction(
"!--fn.r && fn()",
"fn"
)};`,
`var queueFunction = ${runtimeTemplate.expressionFunction(
"queue ? queue.push(fn) : completeFunction(fn)",
"queue, fn"
)};`,
`var wrapDeps = ${runtimeTemplate.returningFunction(

@@ -54,19 +47,18 @@ `deps.map(${runtimeTemplate.basicFunction("dep", [

Template.indent([
"if(dep[webpackThen]) return dep;",
"if(dep[webpackQueues]) return dep;",
"if(dep.then) {",
Template.indent([
"var queue = [];",
"queue.d = 0;",
`dep.then(${runtimeTemplate.basicFunction("r", [
"obj[webpackExports] = r;",
"completeQueue(queue);",
"queue = 0;"
"resolveQueue(queue);"
])}, ${runtimeTemplate.basicFunction("e", [
"obj[webpackError] = e;",
"completeQueue(queue);",
"queue = 0;"
"resolveQueue(queue);"
])});`,
"var obj = {};",
`obj[webpackThen] = ${runtimeTemplate.expressionFunction(
"queueFunction(queue, fn), dep['catch'](reject)",
"fn, reject"
`obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
`fn(queue)`,
"fn"
)};`,

@@ -79,6 +71,3 @@ "return obj;"

"var ret = {};",
`ret[webpackThen] = ${runtimeTemplate.expressionFunction(
"completeFunction(fn)",
"fn"
)};`,
`ret[webpackQueues] = ${runtimeTemplate.emptyFunction()};`,
"ret[webpackExports] = dep;",

@@ -90,3 +79,6 @@ "return ret;"

`${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
"var queue = hasAwait && [];",
"var queue;",
"hasAwait && ((queue = []).d = 1);",
"if(queue) queue.moduleId = module.id;",
"var depQueues = new Set();",
"var exports = module.exports;",

@@ -96,36 +88,12 @@ "var currentDeps;",

"var reject;",
"var isEvaluating = true;",
"var nested = false;",
`var whenAll = ${runtimeTemplate.basicFunction(
"deps, onResolve, onReject",
[
"if (nested) return;",
"nested = true;",
"onResolve.r += deps.length;",
`deps.map(${runtimeTemplate.expressionFunction(
"dep[webpackThen](onResolve, onReject)",
"dep, i"
)});`,
"nested = false;"
]
)};`,
`var promise = new Promise(${runtimeTemplate.basicFunction(
"resolve, rej",
[
"reject = rej;",
`outerResolve = ${runtimeTemplate.expressionFunction(
"resolve(exports), completeQueue(queue), queue = 0"
)};`
]
["reject = rej;", "outerResolve = resolve;"]
)});`,
"promise[webpackExports] = exports;",
`promise[webpackThen] = ${runtimeTemplate.basicFunction(
"fn, rejectFn",
[
"if (isEvaluating) { return completeFunction(fn); }",
"if (currentDeps) whenAll(currentDeps, fn, rejectFn);",
"queueFunction(queue, fn);",
"promise['catch'](rejectFn);"
]
`promise[webpackQueues] = ${runtimeTemplate.expressionFunction(
`queue && fn(queue), depQueues.forEach(fn), promise["catch"](${runtimeTemplate.emptyFunction()})`,
"fn"
)};`,
"promise.moduleId = module.id;",
"module.exports = promise;",

@@ -142,9 +110,17 @@ `body(${runtimeTemplate.basicFunction("deps", [

`var promise = new Promise(${runtimeTemplate.basicFunction(
"resolve, reject",
"resolve",
[
`fn = ${runtimeTemplate.expressionFunction(
"resolve(getResult)"
"resolve(getResult)",
""
)};`,
"fn.r = 0;",
"whenAll(currentDeps, fn, reject);"
`var fnQueue = ${runtimeTemplate.expressionFunction(
"q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))",
"q"
)};`,
`currentDeps.map(${runtimeTemplate.expressionFunction(
"dep[webpackQueues](fnQueue)",
"dep"
)});`
]

@@ -154,6 +130,6 @@ )});`,

])}, ${runtimeTemplate.expressionFunction(
"err && reject(promise[webpackError] = err), outerResolve()",
"(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)",
"err"
)});`,
"isEvaluating = false;"
"queue && (queue.d = 0);"
])};`

@@ -160,0 +136,0 @@ ]);

@@ -132,4 +132,3 @@ /*

} else if (!descriptionFileData.version) {
details =
"No version in description file (usually package.json). Add version to description file, or manually specify version in shared config.";
details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
} else {

@@ -136,0 +135,0 @@ version = descriptionFileData.version;

{
"name": "webpack",
"version": "5.72.1",
"version": "5.73.0",
"author": "Tobias Koppers @sokra",

@@ -5,0 +5,0 @@ "description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc