summaryrefslogtreecommitdiffstats
path: root/node_modules/webpack/lib/dependencies/DependencyReference.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/dependencies/DependencyReference.js')
-rw-r--r--node_modules/webpack/lib/dependencies/DependencyReference.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/DependencyReference.js b/node_modules/webpack/lib/dependencies/DependencyReference.js
new file mode 100644
index 0000000..a8f6afa
--- /dev/null
+++ b/node_modules/webpack/lib/dependencies/DependencyReference.js
@@ -0,0 +1,64 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Florent Cailhol @ooflorent
+*/
+"use strict";
+
+/** @typedef {import("../Module")} Module */
+
+class DependencyReference {
+ // TODO webpack 5: module must be dynamic, you must pass a function returning a module
+ // This is needed to remove the hack in ConcatenatedModule
+ // The problem is that the `module` in Dependency could be replaced i. e. because of Scope Hoisting
+ /**
+ *
+ * @param {Module} module the referenced module
+ * @param {string[] | boolean} importedNames imported named from the module
+ * @param {boolean=} weak if this is a weak reference
+ * @param {number} order the order information or NaN if don't care
+ */
+ constructor(module, importedNames, weak = false, order = NaN) {
+ // TODO webpack 5: make it a getter
+ this.module = module;
+ // true: full object
+ // false: only sideeffects/no export
+ // array of strings: the exports with this names
+ this.importedNames = importedNames;
+ this.weak = !!weak;
+ this.order = order;
+ }
+
+ /**
+ * @param {DependencyReference[]} array an array (will be modified)
+ * @returns {DependencyReference[]} the array again
+ */
+ static sort(array) {
+ /** @type {WeakMap<DependencyReference, number>} */
+ const originalOrder = new WeakMap();
+ let i = 0;
+ for (const ref of array) {
+ originalOrder.set(ref, i++);
+ }
+ return array.sort((a, b) => {
+ const aOrder = a.order;
+ const bOrder = b.order;
+ if (isNaN(aOrder)) {
+ if (!isNaN(bOrder)) {
+ return 1;
+ }
+ } else {
+ if (isNaN(bOrder)) {
+ return -1;
+ }
+ if (aOrder !== bOrder) {
+ return aOrder - bOrder;
+ }
+ }
+ const aOrg = originalOrder.get(a);
+ const bOrg = originalOrder.get(b);
+ return aOrg - bOrg;
+ });
+ }
+}
+
+module.exports = DependencyReference;