var hasSymbol = typeof Symbol === "function";
var rspackQueues = hasSymbol ? Symbol("rspack queues") : "__rspack_queues";
var rspackExports = <%- ASYNC_MODULE_EXPORT_SYMBOL %> = hasSymbol ? Symbol("rspack exports") : "<%- EXPORTS %>";
var rspackError = hasSymbol ? Symbol("rspack error") : "__rspack_error";
var rspackDone = hasSymbol ? Symbol("rspack done") : "__rspack_done";
var rspackDefer = <%- MAKE_DEFERRED_NAMESPACE_OBJECT_SYMBOL %> = hasSymbol ? Symbol("rspack defer") : "__rspack_defer";
var resolveQueue = <%- basicFunction("queue") %> {
if (queue && queue.d < 1) {
queue.d = 1;
queue.forEach(<%- expressionFunction("fn.r--", "fn") %>);
queue.forEach(<%- expressionFunction("fn.r-- ? fn.r++ : fn()", "fn") %>);
}
}
var wrapDeps = <%- basicFunction("deps") %> {
return deps.map(<%- basicFunction("dep") %> {
if (dep !== null && typeof dep === "object") {
if(!dep[rspackQueues] && dep[rspackDefer]) {
var asyncDeps = dep[rspackDefer];
var hasUnresolvedAsyncSubgraph = asyncDeps.some(<%- basicFunction("id") %> {
var cache = <%- _module_cache %>[id];
return !cache || cache[rspackDone] === false;
});
if (hasUnresolvedAsyncSubgraph) {
var d = dep;
dep = {
then(callback) {
Promise.all(asyncDeps.map(<%- REQUIRE %>)).then(<%- returningFunction("callback(d)", "") %>)
}
};
} else return dep;
}
if (dep[rspackQueues]) return dep;
if (dep.then) {
var queue = [];
queue.d = 0;
dep.then(<%- basicFunction("r") %> {
obj[rspackExports] = r;
resolveQueue(queue);
},<%- basicFunction("e") %> {
obj[rspackError] = e;
resolveQueue(queue);
});
var obj = {};
obj[rspackDefer] = false;
obj[rspackQueues] = <%- expressionFunction("fn(queue)", "fn") %>;
return obj;
}
}
var ret = {};
ret[rspackQueues] = <%- emptyFunction() %>;
ret[rspackExports] = dep;
return ret;
});
};
<%- ASYNC_MODULE %> = <%- basicFunction("module, body, hasAwait") %> {
var queue;
hasAwait && ((queue = []).d = -1);
var depQueues = new Set();
var exports = module.exports;
var currentDeps;
var outerResolve;
var reject;
var promise = new Promise(<%- basicFunction("resolve, rej") %> {
reject = rej;
outerResolve = resolve;
});
promise[rspackExports] = exports;
promise[rspackQueues] = <%- basicFunction("fn") %> { queue && fn(queue), depQueues.forEach(fn), promise["catch"](<%- emptyFunction() %>); };
module.exports = promise;
var handle = <%- basicFunction("deps") %> {
currentDeps = wrapDeps(deps);
var fn;
var getResult = <%- basicFunction("") %> {
return currentDeps.map(<%- basicFunction("d") %> {
if(d[rspackDefer]) return d;
if (d[rspackError]) throw d[rspackError];
return d[rspackExports];
});
}
var promise = new Promise(<%- basicFunction("resolve") %> {
fn = <%- expressionFunction("resolve(getResult)", "") %>;
fn.r = 0;
var fnQueue = <%- expressionFunction("q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))", "q") %>;
currentDeps.map(<%- expressionFunction("dep[rspackDefer] || dep[rspackQueues](fnQueue)", "dep") %>);
});
return fn.r ? promise : getResult();
};
var done = <%- expressionFunction("(err ? reject(promise[rspackError] = err) : outerResolve(exports)), resolveQueue(queue), promise[rspackDone] = true", "err") %>;
body(handle, done);
queue && queue.d < 0 && (queue.d = 0);
};