123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const RuntimeGlobals = require("../RuntimeGlobals");
- const makeSerializable = require("../util/makeSerializable");
- const NullDependency = require("./NullDependency");
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
- /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
- /** @typedef {import("../Dependency")} Dependency */
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
- class AMDRequireDependency extends NullDependency {
- /**
- * @param {Range} outerRange outer range
- * @param {Range} arrayRange array range
- * @param {Range | null} functionRange function range
- * @param {Range | null} errorCallbackRange error callback range
- */
- constructor(outerRange, arrayRange, functionRange, errorCallbackRange) {
- super();
- this.outerRange = outerRange;
- this.arrayRange = arrayRange;
- this.functionRange = functionRange;
- this.errorCallbackRange = errorCallbackRange;
- this.functionBindThis = false;
- this.errorCallbackBindThis = false;
- }
- get category() {
- return "amd";
- }
- /**
- * @param {ObjectSerializerContext} context context
- */
- serialize(context) {
- const { write } = context;
- write(this.outerRange);
- write(this.arrayRange);
- write(this.functionRange);
- write(this.errorCallbackRange);
- write(this.functionBindThis);
- write(this.errorCallbackBindThis);
- super.serialize(context);
- }
- /**
- * @param {ObjectDeserializerContext} context context
- */
- deserialize(context) {
- const { read } = context;
- this.outerRange = read();
- this.arrayRange = read();
- this.functionRange = read();
- this.errorCallbackRange = read();
- this.functionBindThis = read();
- this.errorCallbackBindThis = read();
- super.deserialize(context);
- }
- }
- makeSerializable(
- AMDRequireDependency,
- "webpack/lib/dependencies/AMDRequireDependency"
- );
- AMDRequireDependency.Template = class AMDRequireDependencyTemplate extends (
- NullDependency.Template
- ) {
- /**
- * @param {Dependency} dependency the dependency for which the template should be applied
- * @param {ReplaceSource} source the current replace source which can be modified
- * @param {DependencyTemplateContext} templateContext the context object
- * @returns {void}
- */
- apply(
- dependency,
- source,
- { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements }
- ) {
- const dep = /** @type {AMDRequireDependency} */ (dependency);
- const depBlock = /** @type {AsyncDependenciesBlock} */ (
- moduleGraph.getParentBlock(dep)
- );
- const promise = runtimeTemplate.blockPromise({
- chunkGraph,
- block: depBlock,
- message: "AMD require",
- runtimeRequirements
- });
- // has array range but no function range
- if (dep.arrayRange && !dep.functionRange) {
- const startBlock = `${promise}.then(function() {`;
- const endBlock = `;})['catch'](${RuntimeGlobals.uncaughtErrorHandler})`;
- runtimeRequirements.add(RuntimeGlobals.uncaughtErrorHandler);
- source.replace(dep.outerRange[0], dep.arrayRange[0] - 1, startBlock);
- source.replace(dep.arrayRange[1], dep.outerRange[1] - 1, endBlock);
- return;
- }
- // has function range but no array range
- if (dep.functionRange && !dep.arrayRange) {
- const startBlock = `${promise}.then((`;
- const endBlock = `).bind(exports, ${RuntimeGlobals.require}, exports, module))['catch'](${RuntimeGlobals.uncaughtErrorHandler})`;
- runtimeRequirements.add(RuntimeGlobals.uncaughtErrorHandler);
- source.replace(dep.outerRange[0], dep.functionRange[0] - 1, startBlock);
- source.replace(dep.functionRange[1], dep.outerRange[1] - 1, endBlock);
- return;
- }
- // has array range, function range, and errorCallbackRange
- if (dep.arrayRange && dep.functionRange && dep.errorCallbackRange) {
- const startBlock = `${promise}.then(function() { `;
- const errorRangeBlock = `}${
- dep.functionBindThis ? ".bind(this)" : ""
- })['catch'](`;
- const endBlock = `${dep.errorCallbackBindThis ? ".bind(this)" : ""})`;
- source.replace(dep.outerRange[0], dep.arrayRange[0] - 1, startBlock);
- source.insert(dep.arrayRange[0], "var __WEBPACK_AMD_REQUIRE_ARRAY__ = ");
- source.replace(dep.arrayRange[1], dep.functionRange[0] - 1, "; (");
- source.insert(
- dep.functionRange[1],
- ").apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);"
- );
- source.replace(
- dep.functionRange[1],
- dep.errorCallbackRange[0] - 1,
- errorRangeBlock
- );
- source.replace(
- dep.errorCallbackRange[1],
- dep.outerRange[1] - 1,
- endBlock
- );
- return;
- }
- // has array range, function range, but no errorCallbackRange
- if (dep.arrayRange && dep.functionRange) {
- const startBlock = `${promise}.then(function() { `;
- const endBlock = `}${
- dep.functionBindThis ? ".bind(this)" : ""
- })['catch'](${RuntimeGlobals.uncaughtErrorHandler})`;
- runtimeRequirements.add(RuntimeGlobals.uncaughtErrorHandler);
- source.replace(dep.outerRange[0], dep.arrayRange[0] - 1, startBlock);
- source.insert(dep.arrayRange[0], "var __WEBPACK_AMD_REQUIRE_ARRAY__ = ");
- source.replace(dep.arrayRange[1], dep.functionRange[0] - 1, "; (");
- source.insert(
- dep.functionRange[1],
- ").apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);"
- );
- source.replace(dep.functionRange[1], dep.outerRange[1] - 1, endBlock);
- }
- }
- };
- module.exports = AMDRequireDependency;
|