You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.9 KiB
106 lines
2.9 KiB
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
|
|
"use strict"; |
|
|
|
const DependenciesBlock = require("./DependenciesBlock"); |
|
const makeSerializable = require("./util/makeSerializable"); |
|
|
|
/** @typedef {import("./ChunkGraph")} ChunkGraph */ |
|
/** @typedef {import("./ChunkGroup")} ChunkGroup */ |
|
/** @typedef {import("./ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */ |
|
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */ |
|
/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */ |
|
/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */ |
|
/** @typedef {import("./Module")} Module */ |
|
/** @typedef {import("./util/Hash")} Hash */ |
|
|
|
class AsyncDependenciesBlock extends DependenciesBlock { |
|
/** |
|
* @param {ChunkGroupOptions & { entryOptions?: EntryOptions }} groupOptions options for the group |
|
* @param {DependencyLocation=} loc the line of code |
|
* @param {string=} request the request |
|
*/ |
|
constructor(groupOptions, loc, request) { |
|
super(); |
|
if (typeof groupOptions === "string") { |
|
groupOptions = { name: groupOptions }; |
|
} else if (!groupOptions) { |
|
groupOptions = { name: undefined }; |
|
} |
|
this.groupOptions = groupOptions; |
|
this.loc = loc; |
|
this.request = request; |
|
this._stringifiedGroupOptions = undefined; |
|
} |
|
|
|
/** |
|
* @returns {string} The name of the chunk |
|
*/ |
|
get chunkName() { |
|
return this.groupOptions.name; |
|
} |
|
|
|
/** |
|
* @param {string} value The new chunk name |
|
* @returns {void} |
|
*/ |
|
set chunkName(value) { |
|
if (this.groupOptions.name !== value) { |
|
this.groupOptions.name = value; |
|
this._stringifiedGroupOptions = undefined; |
|
} |
|
} |
|
|
|
/** |
|
* @param {Hash} hash the hash used to track dependencies |
|
* @param {UpdateHashContext} context context |
|
* @returns {void} |
|
*/ |
|
updateHash(hash, context) { |
|
const { chunkGraph } = context; |
|
if (this._stringifiedGroupOptions === undefined) { |
|
this._stringifiedGroupOptions = JSON.stringify(this.groupOptions); |
|
} |
|
const chunkGroup = chunkGraph.getBlockChunkGroup(this); |
|
hash.update( |
|
`${this._stringifiedGroupOptions}${chunkGroup ? chunkGroup.id : ""}` |
|
); |
|
super.updateHash(hash, context); |
|
} |
|
|
|
serialize(context) { |
|
const { write } = context; |
|
write(this.groupOptions); |
|
write(this.loc); |
|
write(this.request); |
|
super.serialize(context); |
|
} |
|
|
|
deserialize(context) { |
|
const { read } = context; |
|
this.groupOptions = read(); |
|
this.loc = read(); |
|
this.request = read(); |
|
super.deserialize(context); |
|
} |
|
} |
|
|
|
makeSerializable(AsyncDependenciesBlock, "webpack/lib/AsyncDependenciesBlock"); |
|
|
|
Object.defineProperty(AsyncDependenciesBlock.prototype, "module", { |
|
get() { |
|
throw new Error( |
|
"module property was removed from AsyncDependenciesBlock (it's not needed)" |
|
); |
|
}, |
|
set() { |
|
throw new Error( |
|
"module property was removed from AsyncDependenciesBlock (it's not needed)" |
|
); |
|
} |
|
}); |
|
|
|
module.exports = AsyncDependenciesBlock;
|
|
|