source: frontend/node_modules/webpack/lib/runtime/AsyncModuleRuntimeModule.js@ 9af201e

Last change on this file since 9af201e was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 6.4 KB
Line 
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3*/
4
5"use strict";
6
7const RuntimeGlobals = require("../RuntimeGlobals");
8const Template = require("../Template");
9const HelperRuntimeModule = require("./HelperRuntimeModule");
10
11/** @typedef {import("../Compilation")} Compilation */
12
13class AsyncModuleRuntimeModule extends HelperRuntimeModule {
14 /**
15 * @param {boolean=} deferInterop if defer import is used.
16 */
17 constructor(deferInterop = false) {
18 super("async module");
19 /** @type {boolean} */
20 this._deferInterop = deferInterop;
21 }
22
23 /**
24 * Generates runtime code for this runtime module.
25 * @returns {string | null} runtime code
26 */
27 generate() {
28 const compilation = /** @type {Compilation} */ (this.compilation);
29 const { runtimeTemplate } = compilation;
30 const fn = RuntimeGlobals.asyncModule;
31 const defer = this._deferInterop;
32 return Template.asString([
33 'var hasSymbol = typeof Symbol === "function";',
34 'var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";',
35 `var webpackExports = ${
36 defer ? `${RuntimeGlobals.asyncModuleExportSymbol}= ` : ""
37 }hasSymbol ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
38 'var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";',
39 defer
40 ? Template.asString([
41 `var webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = hasSymbol ? Symbol("webpack done") : "__webpack_done__";`,
42 `var webpackDefer = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol} = hasSymbol ? Symbol("webpack defer") : "__webpack_defer__";`,
43 `${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies} = ${runtimeTemplate.basicFunction(
44 "asyncDeps",
45 [
46 Template.indent([
47 "var hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {",
48 Template.indent([
49 "var cache = __webpack_module_cache__[id];",
50 "return !cache || cache[webpackDone] === false;"
51 ]),
52 "});",
53 "if (hasUnresolvedAsyncSubgraph) {",
54 Template.indent([
55 "return ({ then(onFulfilled, onRejected) { return Promise.all(asyncDeps.map(__webpack_require__)).then(onFulfilled, onRejected) } })"
56 ]),
57 "}"
58 ])
59 ]
60 )}`
61 ])
62 : "",
63 `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
64 "if(queue && queue.d < 1) {",
65 Template.indent([
66 "queue.d = 1;",
67 `queue.forEach(${runtimeTemplate.expressionFunction(
68 "fn.r--",
69 "fn"
70 )});`,
71 `queue.forEach(${runtimeTemplate.expressionFunction(
72 "fn.r-- ? fn.r++ : fn()",
73 "fn"
74 )});`
75 ]),
76 "}"
77 ])}`,
78 `var wrapDeps = ${runtimeTemplate.returningFunction(
79 `deps.map(${runtimeTemplate.basicFunction("dep", [
80 'if(dep !== null && typeof dep === "object") {',
81 Template.indent([
82 defer
83 ? Template.asString([
84 "if(!dep[webpackQueues] && dep[webpackDefer]) {",
85 Template.indent([
86 `var asyncDeps = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(dep[webpackDefer]);`,
87 "if (asyncDeps) {",
88 Template.indent([
89 "var d = dep;",
90 "dep = {",
91 Template.indent([
92 "then(onFulfilled, onRejected) {",
93 Template.indent([
94 `asyncDeps.then(${runtimeTemplate.returningFunction(
95 "onFulfilled(d)"
96 )}, onRejected);`
97 ]),
98 "}"
99 ]),
100 "};"
101 ]),
102 "} else return dep;"
103 ]),
104 "}"
105 ])
106 : "",
107 "if(dep[webpackQueues]) return dep;",
108 "if(dep.then) {",
109 Template.indent([
110 "var queue = [];",
111 "queue.d = 0;",
112 `dep.then(${runtimeTemplate.basicFunction("r", [
113 "obj[webpackExports] = r;",
114 "resolveQueue(queue);"
115 ])}, ${runtimeTemplate.basicFunction("e", [
116 "obj[webpackError] = e;",
117 "resolveQueue(queue);"
118 ])});`,
119 "var obj = {};",
120 defer ? "obj[webpackDefer] = false;" : "",
121 `obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
122 "fn(queue)",
123 "fn"
124 )};`,
125 "return obj;"
126 ]),
127 "}"
128 ]),
129 "}",
130 "var ret = {};",
131 `ret[webpackQueues] = ${runtimeTemplate.emptyFunction()};`,
132 "ret[webpackExports] = dep;",
133 "return ret;"
134 ])})`,
135 "deps"
136 )};`,
137 `${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
138 "var queue;",
139 "hasAwait && ((queue = []).d = -1);",
140 "var depQueues = new Set();",
141 "var exports = module.exports;",
142 "var currentDeps;",
143 "var outerResolve;",
144 "var reject;",
145 `var promise = new Promise(${runtimeTemplate.basicFunction(
146 "resolve, rej",
147 ["reject = rej;", "outerResolve = resolve;"]
148 )});`,
149 "promise[webpackExports] = exports;",
150 `promise[webpackQueues] = ${runtimeTemplate.expressionFunction(
151 `queue && fn(queue), depQueues.forEach(fn), promise["catch"](${runtimeTemplate.emptyFunction()})`,
152 "fn"
153 )};`,
154 "module.exports = promise;",
155 `var handle = ${runtimeTemplate.basicFunction("deps", [
156 "currentDeps = wrapDeps(deps);",
157 "var fn;",
158 `var getResult = ${runtimeTemplate.returningFunction(
159 `currentDeps.map(${runtimeTemplate.basicFunction("d", [
160 defer ? "if(d[webpackDefer]) return d;" : "",
161 "if(d[webpackError]) throw d[webpackError];",
162 "return d[webpackExports];"
163 ])})`
164 )}`,
165 `var promise = new Promise(${runtimeTemplate.basicFunction(
166 "resolve",
167 [
168 `fn = ${runtimeTemplate.expressionFunction(
169 "resolve(getResult)",
170 ""
171 )};`,
172 "fn.r = 0;",
173 `var fnQueue = ${runtimeTemplate.expressionFunction(
174 "q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))",
175 "q"
176 )};`,
177 `currentDeps.map(${runtimeTemplate.expressionFunction(
178 `${
179 defer ? "dep[webpackDefer]||" : ""
180 }dep[webpackQueues](fnQueue)`,
181 "dep"
182 )});`
183 ]
184 )});`,
185 "return fn.r ? promise : getResult();"
186 ])}`,
187 `var done = ${runtimeTemplate.expressionFunction(
188 `(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)${
189 defer ? ", promise[webpackDone] = true" : ""
190 }`,
191 "err"
192 )}`,
193 "body(handle, done);",
194 "queue && queue.d < 0 && (queue.d = 0);"
195 ])};`
196 ]);
197 }
198}
199
200module.exports = AsyncModuleRuntimeModule;
Note: See TracBrowser for help on using the repository browser.