Skip to content

Commit

Permalink
support context in Dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
vankop committed Mar 25, 2022
1 parent 86a8bd9 commit 483e053
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 10 deletions.
3 changes: 2 additions & 1 deletion lib/Compilation.js
Expand Up @@ -1436,7 +1436,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
* @returns {void}
*/
_processModuleDependencies(module, callback) {
/** @type {Array<{factory: ModuleFactory, dependencies: Dependency[], originModule: Module|null}>} */
/** @type {Array<{factory: ModuleFactory, dependencies: Dependency[], context: string|undefined, originModule: Module|null}>} */
const sortedDependencies = [];

/** @type {DependenciesBlock} */
Expand Down Expand Up @@ -1668,6 +1668,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
sortedDependencies.push({
factory: factoryCacheKey2,
dependencies: list,
context: dep.context,
originModule: module
});
}
Expand Down
10 changes: 3 additions & 7 deletions lib/ContextModuleFactory.js
Expand Up @@ -292,7 +292,6 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
} = options;
if (!regExp || !resource) return callback(null, []);

let severalContexts = false;
const addDirectoryChecked = (ctx, directory, visited, callback) => {
fs.realpath(directory, (err, realPath) => {
if (err) return callback(err);
Expand Down Expand Up @@ -359,15 +358,13 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
alternatives = alternatives
.filter(obj => regExp.test(obj.request))
.map(obj => {
const request = severalContexts
? join(fs, obj.context, obj.request)
: obj.request;
const dep = new ContextElementDependency(
request + resourceQuery + resourceFragment,
`${obj.request}${resourceQuery}${resourceFragment}`,
obj.request,
typePrefix,
category,
referencedExports
referencedExports,
obj.context
);
dep.optional = true;
return dep;
Expand Down Expand Up @@ -414,7 +411,6 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
if (typeof resource === "string") {
visitResource(resource, callback);
} else {
severalContexts = true;
asyncLib.map(resource, visitResource, (err, result) => {
if (err) return callback(err);

Expand Down
7 changes: 7 additions & 0 deletions lib/Dependency.js
Expand Up @@ -182,6 +182,13 @@ class Dependency {
this._loc = undefined;
}

/**
* @returns {string | undefined} a request context
*/
get context() {
return undefined;
}

/**
* @returns {string | null} an identifier to merge equal requests
*/
Expand Down
24 changes: 23 additions & 1 deletion lib/dependencies/ContextElementDependency.js
Expand Up @@ -14,11 +14,27 @@ const ModuleDependency = require("./ModuleDependency");
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */

class ContextElementDependency extends ModuleDependency {
constructor(request, userRequest, typePrefix, category, referencedExports) {
/**
* @param {string} request request
* @param {string|undefined} userRequest user request
* @param {string} typePrefix type prefix
* @param {string} category category
* @param {string[][]=} referencedExports referenced exports
* @param {string=} context context
*/
constructor(
request,
userRequest,
typePrefix,
category,
referencedExports,
context
) {
super(request);
this.referencedExports = referencedExports;
this._typePrefix = typePrefix;
this._category = category;
this._context = context || undefined;

if (userRequest) {
this.userRequest = userRequest;
Expand All @@ -33,6 +49,10 @@ class ContextElementDependency extends ModuleDependency {
return "context element";
}

get context() {
return this._context;
}

get category() {
return this._category;
}
Expand All @@ -56,6 +76,7 @@ class ContextElementDependency extends ModuleDependency {
const { write } = context;
write(this._typePrefix);
write(this._category);
write(this._context);
write(this.referencedExports);
super.serialize(context);
}
Expand All @@ -64,6 +85,7 @@ class ContextElementDependency extends ModuleDependency {
const { read } = context;
this._typePrefix = read();
this._category = read();
this._context = read();
this.referencedExports = read();
super.deserialize(context);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/dependencies/ModuleDependency.js
Expand Up @@ -32,7 +32,7 @@ class ModuleDependency extends Dependency {
* @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) {
str += JSON.stringify(this.assertions);
}
Expand Down

0 comments on commit 483e053

Please sign in to comment.