webpack 5.14.0 → 5.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/bin/webpack.js +0 -0
- package/hot/lazy-compilation-node.js +38 -0
- package/hot/lazy-compilation-web.js +74 -0
- package/lib/AutomaticPrefetchPlugin.js +14 -7
- package/lib/CacheFacade.js +1 -0
- package/lib/ChunkGraph.js +132 -19
- package/lib/CodeGenerationResults.js +43 -8
- package/lib/Compilation.js +253 -149
- package/lib/Compiler.js +7 -2
- package/lib/ContextModule.js +2 -2
- package/lib/Dependency.js +1 -7
- package/lib/ExportsInfo.js +23 -5
- package/lib/ExternalModuleFactoryPlugin.js +46 -3
- package/lib/FileSystemInfo.js +192 -137
- package/lib/HotModuleReplacementPlugin.js +76 -29
- package/lib/IgnoreErrorModuleFactory.js +39 -0
- package/lib/Module.js +2 -3
- package/lib/NormalModuleFactory.js +27 -8
- package/lib/Template.js +32 -23
- package/lib/WebpackIsIncludedPlugin.js +85 -0
- package/lib/WebpackOptionsApply.js +27 -5
- package/lib/cache/PackFileCacheStrategy.js +5 -1
- package/lib/config/defaults.js +18 -18
- package/lib/config/normalization.js +44 -9
- package/lib/debug/ProfilingPlugin.js +20 -1
- package/lib/dependencies/AMDDefineDependency.js +1 -1
- package/lib/dependencies/AMDPlugin.js +6 -7
- package/lib/dependencies/CommonJsImportsParserPlugin.js +43 -1
- package/lib/dependencies/CommonJsPlugin.js +1 -6
- package/lib/dependencies/ContextDependencyHelpers.js +3 -2
- package/lib/dependencies/ExportsInfoDependency.js +0 -20
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +1 -2
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +0 -29
- package/lib/dependencies/HarmonyImportDependency.js +0 -41
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +2 -3
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +2 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +2 -2
- package/lib/dependencies/ImportPlugin.js +1 -6
- package/lib/dependencies/JsonExportsDependency.js +0 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +0 -1
- package/lib/dependencies/NullDependency.js +0 -8
- package/lib/dependencies/ProvidedDependency.js +0 -1
- package/lib/dependencies/StaticExportsDependency.js +0 -12
- package/lib/dependencies/SystemPlugin.js +0 -4
- package/lib/dependencies/URLDependency.js +45 -3
- package/lib/dependencies/URLPlugin.js +33 -7
- package/lib/dependencies/WebpackIsIncludedDependency.js +80 -0
- package/lib/hmr/LazyCompilationPlugin.js +348 -0
- package/lib/hmr/lazyCompilationBackend.js +86 -0
- package/lib/javascript/JavascriptModulesPlugin.js +4 -3
- package/lib/javascript/JavascriptParser.js +20 -5
- package/lib/library/AssignLibraryPlugin.js +13 -4
- package/lib/library/EnableLibraryPlugin.js +12 -0
- package/lib/optimize/ConcatenatedModule.js +0 -12
- package/lib/optimize/InnerGraph.js +32 -0
- package/lib/optimize/SplitChunksPlugin.js +4 -1
- package/lib/serialization/ObjectMiddleware.js +7 -5
- package/lib/sharing/ProvideSharedModule.js +1 -1
- package/lib/sharing/ShareRuntimeModule.js +2 -2
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -0
- package/lib/util/MapHelpers.js +22 -0
- package/lib/util/binarySearchBounds.js +86 -0
- package/lib/util/createHash.js +13 -7
- package/lib/util/internalSerializables.js +2 -0
- package/lib/util/processAsyncTree.js +61 -0
- package/lib/util/runtime.js +12 -1
- package/package.json +3 -3
- package/schemas/WebpackOptions.json +330 -140
- package/schemas/plugins/container/ContainerPlugin.json +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -1
- package/types.d.ts +320 -121
@@ -7,12 +7,13 @@
|
|
7
7
|
|
8
8
|
const util = require("util");
|
9
9
|
const ExternalModule = require("./ExternalModule");
|
10
|
-
const { resolveByProperty } = require("./util/cleverMerge");
|
10
|
+
const { resolveByProperty, cachedSetProperty } = require("./util/cleverMerge");
|
11
11
|
|
12
12
|
/** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
|
13
13
|
/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
|
14
14
|
|
15
15
|
const UNSPECIFIED_EXTERNAL_TYPE_REGEXP = /^[a-z0-9]+ /;
|
16
|
+
const EMPTY_RESOLVE_OPTIONS = {};
|
16
17
|
|
17
18
|
// TODO webpack 6 remove this
|
18
19
|
const callDeprecatedExternals = util.deprecate(
|
@@ -171,14 +172,56 @@ class ExternalModuleFactoryPlugin {
|
|
171
172
|
cb
|
172
173
|
);
|
173
174
|
} else {
|
174
|
-
externals(
|
175
|
+
const promise = externals(
|
175
176
|
{
|
176
177
|
context,
|
177
178
|
request: dependency.request,
|
178
|
-
contextInfo
|
179
|
+
contextInfo,
|
180
|
+
getResolve: options => (context, request, callback) => {
|
181
|
+
const dependencyType = dependency.category || "";
|
182
|
+
const resolveContext = {
|
183
|
+
fileDependencies: data.fileDependencies,
|
184
|
+
missingDependencies: data.missingDependencies,
|
185
|
+
contextDependencies: data.contextDependencies
|
186
|
+
};
|
187
|
+
let resolver = normalModuleFactory.getResolver(
|
188
|
+
"normal",
|
189
|
+
dependencyType
|
190
|
+
? cachedSetProperty(
|
191
|
+
data.resolveOptions || EMPTY_RESOLVE_OPTIONS,
|
192
|
+
"dependencyType",
|
193
|
+
dependencyType
|
194
|
+
)
|
195
|
+
: data.resolveOptions
|
196
|
+
);
|
197
|
+
if (options) resolver = resolver.withOptions(options);
|
198
|
+
if (callback) {
|
199
|
+
resolver.resolve(
|
200
|
+
{},
|
201
|
+
context,
|
202
|
+
request,
|
203
|
+
resolveContext,
|
204
|
+
callback
|
205
|
+
);
|
206
|
+
} else {
|
207
|
+
return new Promise((resolve, reject) => {
|
208
|
+
resolver.resolve(
|
209
|
+
{},
|
210
|
+
context,
|
211
|
+
request,
|
212
|
+
resolveContext,
|
213
|
+
(err, result) => {
|
214
|
+
if (err) reject(err);
|
215
|
+
else resolve(result);
|
216
|
+
}
|
217
|
+
);
|
218
|
+
});
|
219
|
+
}
|
220
|
+
}
|
179
221
|
},
|
180
222
|
cb
|
181
223
|
);
|
224
|
+
if (promise && promise.then) promise.then(r => cb(null, r), cb);
|
182
225
|
}
|
183
226
|
return;
|
184
227
|
} else if (typeof externals === "object") {
|
package/lib/FileSystemInfo.js
CHANGED
@@ -11,6 +11,7 @@ const AsyncQueue = require("./util/AsyncQueue");
|
|
11
11
|
const createHash = require("./util/createHash");
|
12
12
|
const { join, dirname, relative } = require("./util/fs");
|
13
13
|
const makeSerializable = require("./util/makeSerializable");
|
14
|
+
const processAsyncTree = require("./util/processAsyncTree");
|
14
15
|
|
15
16
|
/** @typedef {import("./WebpackError")} WebpackError */
|
16
17
|
/** @typedef {import("./logging/Logger").Logger} Logger */
|
@@ -18,26 +19,19 @@ const makeSerializable = require("./util/makeSerializable");
|
|
18
19
|
|
19
20
|
const supportsEsm = +process.versions.modules >= 83;
|
20
21
|
|
21
|
-
const resolveContext = createResolver({
|
22
|
-
resolveToContext: true,
|
23
|
-
exportsFields: []
|
24
|
-
});
|
25
|
-
const resolve = createResolver({
|
26
|
-
extensions: [".js", ".json", ".node"],
|
27
|
-
conditionNames: ["require"]
|
28
|
-
});
|
29
|
-
|
30
22
|
let FS_ACCURACY = 2000;
|
31
23
|
|
32
24
|
const EMPTY_SET = new Set();
|
33
25
|
|
34
|
-
const
|
35
|
-
const
|
36
|
-
const
|
37
|
-
const
|
38
|
-
const
|
39
|
-
const
|
40
|
-
const
|
26
|
+
const RBDT_RESOLVE_CJS = 0;
|
27
|
+
const RBDT_RESOLVE_ESM = 1;
|
28
|
+
const RBDT_RESOLVE_DIRECTORY = 2;
|
29
|
+
const RBDT_RESOLVE_CJS_FILE = 3;
|
30
|
+
const RBDT_RESOLVE_ESM_FILE = 4;
|
31
|
+
const RBDT_DIRECTORY = 5;
|
32
|
+
const RBDT_FILE = 6;
|
33
|
+
const RBDT_DIRECTORY_DEPENDENCIES = 7;
|
34
|
+
const RBDT_FILE_DEPENDENCIES = 8;
|
41
35
|
|
42
36
|
const INVALID = Symbol("invalid");
|
43
37
|
|
@@ -1056,6 +1050,26 @@ class FileSystemInfo {
|
|
1056
1050
|
this.contextHashQueue.add(path, callback);
|
1057
1051
|
}
|
1058
1052
|
|
1053
|
+
_createBuildDependenciesResolvers() {
|
1054
|
+
const resolveContext = createResolver({
|
1055
|
+
resolveToContext: true,
|
1056
|
+
exportsFields: [],
|
1057
|
+
fileSystem: this.fs
|
1058
|
+
});
|
1059
|
+
const resolveCjs = createResolver({
|
1060
|
+
extensions: [".js", ".json", ".node"],
|
1061
|
+
conditionNames: ["require", "node"],
|
1062
|
+
fileSystem: this.fs
|
1063
|
+
});
|
1064
|
+
const resolveEsm = createResolver({
|
1065
|
+
extensions: [".js", ".json", ".node"],
|
1066
|
+
fullySpecified: true,
|
1067
|
+
conditionNames: ["import", "node"],
|
1068
|
+
fileSystem: this.fs
|
1069
|
+
});
|
1070
|
+
return { resolveContext, resolveEsm, resolveCjs };
|
1071
|
+
}
|
1072
|
+
|
1059
1073
|
/**
|
1060
1074
|
* @param {string} context context directory
|
1061
1075
|
* @param {Iterable<string>} deps dependencies
|
@@ -1063,11 +1077,21 @@ class FileSystemInfo {
|
|
1063
1077
|
* @returns {void}
|
1064
1078
|
*/
|
1065
1079
|
resolveBuildDependencies(context, deps, callback) {
|
1080
|
+
const {
|
1081
|
+
resolveContext,
|
1082
|
+
resolveEsm,
|
1083
|
+
resolveCjs
|
1084
|
+
} = this._createBuildDependenciesResolvers();
|
1085
|
+
|
1066
1086
|
/** @type {Set<string>} */
|
1067
1087
|
const files = new Set();
|
1068
1088
|
/** @type {Set<string>} */
|
1089
|
+
const fileSymlinks = new Set();
|
1090
|
+
/** @type {Set<string>} */
|
1069
1091
|
const directories = new Set();
|
1070
1092
|
/** @type {Set<string>} */
|
1093
|
+
const directorySymlinks = new Set();
|
1094
|
+
/** @type {Set<string>} */
|
1071
1095
|
const missing = new Set();
|
1072
1096
|
/** @type {Set<string>} */
|
1073
1097
|
const resolveFiles = new Set();
|
@@ -1077,83 +1101,99 @@ class FileSystemInfo {
|
|
1077
1101
|
const resolveMissing = new Set();
|
1078
1102
|
/** @type {Map<string, string>} */
|
1079
1103
|
const resolveResults = new Map();
|
1080
|
-
|
1081
|
-
const
|
1082
|
-
|
1104
|
+
const invalidResolveResults = new Set();
|
1105
|
+
const resolverContext = {
|
1106
|
+
fileDependencies: resolveFiles,
|
1107
|
+
contextDependencies: resolveDirectories,
|
1108
|
+
missingDependencies: resolveMissing
|
1109
|
+
};
|
1110
|
+
processAsyncTree(
|
1111
|
+
Array.from(deps, dep => ({
|
1112
|
+
type: RBDT_RESOLVE_CJS,
|
1113
|
+
context,
|
1114
|
+
path: dep,
|
1115
|
+
expected: undefined
|
1116
|
+
})),
|
1117
|
+
20,
|
1118
|
+
({ type, context, path, expected }, push, callback) => {
|
1083
1119
|
const resolveDirectory = path => {
|
1084
1120
|
const key = `d\n${context}\n${path}`;
|
1085
1121
|
if (resolveResults.has(key)) {
|
1086
1122
|
return callback();
|
1087
1123
|
}
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1124
|
+
resolveResults.set(key, undefined);
|
1125
|
+
resolveContext(context, path, resolverContext, (err, result) => {
|
1126
|
+
if (err) {
|
1127
|
+
invalidResolveResults.add(key);
|
1128
|
+
if (
|
1129
|
+
err.code === "ENOENT" ||
|
1130
|
+
err.code === "UNDECLARED_DEPENDENCY"
|
1131
|
+
) {
|
1132
|
+
return callback();
|
1133
|
+
}
|
1134
|
+
err.message += `\nwhile resolving '${path}' in ${context} to a directory`;
|
1135
|
+
return callback(err);
|
1136
|
+
}
|
1137
|
+
resolveResults.set(key, result);
|
1138
|
+
push({
|
1139
|
+
type: RBDT_DIRECTORY,
|
1140
|
+
context: undefined,
|
1141
|
+
path: result,
|
1142
|
+
expected: undefined
|
1143
|
+
});
|
1144
|
+
callback();
|
1145
|
+
});
|
1146
|
+
};
|
1147
|
+
const resolveFile = (path, symbol, resolve) => {
|
1148
|
+
const key = `${symbol}\n${context}\n${path}`;
|
1149
|
+
if (resolveResults.has(key)) {
|
1150
|
+
return callback();
|
1151
|
+
}
|
1152
|
+
resolveResults.set(key, undefined);
|
1153
|
+
resolve(context, path, resolverContext, (err, result) => {
|
1154
|
+
if (expected) {
|
1155
|
+
if (result === expected) {
|
1156
|
+
resolveResults.set(key, result);
|
1157
|
+
} else {
|
1158
|
+
invalidResolveResults.add(key);
|
1159
|
+
this.logger.debug(
|
1160
|
+
`Resolving '${path}' in ${context} for build dependencies doesn't lead to expected result '${expected}', but to '${result}' instead. Resolving dependencies are ignored for this path.`
|
1161
|
+
);
|
1162
|
+
}
|
1163
|
+
} else {
|
1097
1164
|
if (err) {
|
1165
|
+
invalidResolveResults.add(key);
|
1098
1166
|
if (
|
1099
1167
|
err.code === "ENOENT" ||
|
1100
1168
|
err.code === "UNDECLARED_DEPENDENCY"
|
1101
1169
|
) {
|
1102
1170
|
return callback();
|
1103
1171
|
}
|
1104
|
-
err.message += `\nwhile resolving '${path}' in ${context}
|
1172
|
+
err.message += `\nwhile resolving '${path}' in ${context} as file`;
|
1105
1173
|
return callback(err);
|
1106
1174
|
}
|
1107
1175
|
resolveResults.set(key, result);
|
1108
|
-
|
1109
|
-
type:
|
1110
|
-
|
1176
|
+
push({
|
1177
|
+
type: RBDT_FILE,
|
1178
|
+
context: undefined,
|
1179
|
+
path: result,
|
1180
|
+
expected: undefined
|
1111
1181
|
});
|
1112
|
-
callback();
|
1113
1182
|
}
|
1114
|
-
|
1115
|
-
|
1116
|
-
const resolveFile = path => {
|
1117
|
-
const key = `f\n${context}\n${path}`;
|
1118
|
-
if (resolveResults.has(key)) {
|
1119
|
-
return callback();
|
1120
|
-
}
|
1121
|
-
resolve(
|
1122
|
-
context,
|
1123
|
-
path,
|
1124
|
-
{
|
1125
|
-
fileDependencies: resolveFiles,
|
1126
|
-
contextDependencies: resolveDirectories,
|
1127
|
-
missingDependencies: resolveMissing
|
1128
|
-
},
|
1129
|
-
(err, result) => {
|
1130
|
-
if (expected) {
|
1131
|
-
if (result === expected) {
|
1132
|
-
resolveResults.set(key, result);
|
1133
|
-
}
|
1134
|
-
} else {
|
1135
|
-
if (err) {
|
1136
|
-
if (
|
1137
|
-
err.code === "ENOENT" ||
|
1138
|
-
err.code === "UNDECLARED_DEPENDENCY"
|
1139
|
-
) {
|
1140
|
-
return callback();
|
1141
|
-
}
|
1142
|
-
err.message += `\nwhile resolving '${path}' in ${context} as file`;
|
1143
|
-
return callback(err);
|
1144
|
-
}
|
1145
|
-
resolveResults.set(key, result);
|
1146
|
-
queue.push({
|
1147
|
-
type: RBDT_FILE,
|
1148
|
-
path: result
|
1149
|
-
});
|
1150
|
-
}
|
1151
|
-
callback();
|
1152
|
-
}
|
1153
|
-
);
|
1183
|
+
callback();
|
1184
|
+
});
|
1154
1185
|
};
|
1155
1186
|
switch (type) {
|
1156
|
-
case
|
1187
|
+
case RBDT_RESOLVE_CJS: {
|
1188
|
+
const isDirectory = /[\\/]$/.test(path);
|
1189
|
+
if (isDirectory) {
|
1190
|
+
resolveDirectory(path.slice(0, path.length - 1));
|
1191
|
+
} else {
|
1192
|
+
resolveFile(path, "f", resolveCjs);
|
1193
|
+
}
|
1194
|
+
break;
|
1195
|
+
}
|
1196
|
+
case RBDT_RESOLVE_ESM: {
|
1157
1197
|
const isDirectory = /[\\/]$/.test(path);
|
1158
1198
|
if (isDirectory) {
|
1159
1199
|
resolveDirectory(path.slice(0, path.length - 1));
|
@@ -1166,8 +1206,12 @@ class FileSystemInfo {
|
|
1166
1206
|
resolveDirectory(path);
|
1167
1207
|
break;
|
1168
1208
|
}
|
1169
|
-
case
|
1170
|
-
resolveFile(path);
|
1209
|
+
case RBDT_RESOLVE_CJS_FILE: {
|
1210
|
+
resolveFile(path, "f", resolveCjs);
|
1211
|
+
break;
|
1212
|
+
}
|
1213
|
+
case RBDT_RESOLVE_ESM_FILE: {
|
1214
|
+
resolveFile(path, "e", resolveEsm);
|
1171
1215
|
break;
|
1172
1216
|
}
|
1173
1217
|
case RBDT_FILE: {
|
@@ -1175,19 +1219,22 @@ class FileSystemInfo {
|
|
1175
1219
|
callback();
|
1176
1220
|
break;
|
1177
1221
|
}
|
1222
|
+
files.add(path);
|
1178
1223
|
this.fs.realpath(path, (err, _realPath) => {
|
1179
1224
|
if (err) return callback(err);
|
1180
1225
|
const realPath = /** @type {string} */ (_realPath);
|
1181
1226
|
if (realPath !== path) {
|
1227
|
+
fileSymlinks.add(path);
|
1182
1228
|
resolveFiles.add(path);
|
1183
|
-
|
1184
|
-
if (!files.has(realPath)) {
|
1229
|
+
if (files.has(realPath)) return callback();
|
1185
1230
|
files.add(realPath);
|
1186
|
-
queue.push({
|
1187
|
-
type: RBDT_FILE_DEPENDENCIES,
|
1188
|
-
path: realPath
|
1189
|
-
});
|
1190
1231
|
}
|
1232
|
+
push({
|
1233
|
+
type: RBDT_FILE_DEPENDENCIES,
|
1234
|
+
context: undefined,
|
1235
|
+
path: realPath,
|
1236
|
+
expected: undefined
|
1237
|
+
});
|
1191
1238
|
callback();
|
1192
1239
|
});
|
1193
1240
|
break;
|
@@ -1197,19 +1244,22 @@ class FileSystemInfo {
|
|
1197
1244
|
callback();
|
1198
1245
|
break;
|
1199
1246
|
}
|
1247
|
+
directories.add(path);
|
1200
1248
|
this.fs.realpath(path, (err, _realPath) => {
|
1201
1249
|
if (err) return callback(err);
|
1202
1250
|
const realPath = /** @type {string} */ (_realPath);
|
1203
1251
|
if (realPath !== path) {
|
1252
|
+
directorySymlinks.add(path);
|
1204
1253
|
resolveFiles.add(path);
|
1205
|
-
|
1206
|
-
if (!directories.has(realPath)) {
|
1254
|
+
if (directories.has(realPath)) return callback();
|
1207
1255
|
directories.add(realPath);
|
1208
|
-
queue.push({
|
1209
|
-
type: RBDT_DIRECTORY_DEPENDENCIES,
|
1210
|
-
path: realPath
|
1211
|
-
});
|
1212
1256
|
}
|
1257
|
+
push({
|
1258
|
+
type: RBDT_DIRECTORY_DEPENDENCIES,
|
1259
|
+
context: undefined,
|
1260
|
+
path: realPath,
|
1261
|
+
expected: undefined
|
1262
|
+
});
|
1213
1263
|
callback();
|
1214
1264
|
});
|
1215
1265
|
break;
|
@@ -1227,30 +1277,33 @@ class FileSystemInfo {
|
|
1227
1277
|
children: for (const child of module.children) {
|
1228
1278
|
let childPath = child.filename;
|
1229
1279
|
if (childPath) {
|
1230
|
-
|
1280
|
+
push({
|
1231
1281
|
type: RBDT_FILE,
|
1232
|
-
|
1282
|
+
context: undefined,
|
1283
|
+
path: childPath,
|
1284
|
+
expected: undefined
|
1233
1285
|
});
|
1234
|
-
if (childPath.endsWith(".js"))
|
1235
|
-
childPath = childPath.slice(0, -3);
|
1236
1286
|
const context = dirname(this.fs, path);
|
1237
1287
|
for (const modulePath of module.paths) {
|
1238
1288
|
if (childPath.startsWith(modulePath)) {
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1289
|
+
let request = childPath.slice(modulePath.length + 1);
|
1290
|
+
if (request.endsWith(".js"))
|
1291
|
+
request = request.slice(0, -3);
|
1292
|
+
push({
|
1293
|
+
type: RBDT_RESOLVE_CJS_FILE,
|
1242
1294
|
context,
|
1243
1295
|
path: request,
|
1244
|
-
expected:
|
1296
|
+
expected: child.filename
|
1245
1297
|
});
|
1246
1298
|
continue children;
|
1247
1299
|
}
|
1248
1300
|
}
|
1249
1301
|
let request = relative(this.fs, context, childPath);
|
1302
|
+
if (request.endsWith(".js")) request = request.slice(0, -3);
|
1250
1303
|
request = request.replace(/\\/g, "/");
|
1251
1304
|
if (!request.startsWith("../")) request = `./${request}`;
|
1252
|
-
|
1253
|
-
type:
|
1305
|
+
push({
|
1306
|
+
type: RBDT_RESOLVE_CJS_FILE,
|
1254
1307
|
context,
|
1255
1308
|
path: request,
|
1256
1309
|
expected: child.filename
|
@@ -1294,10 +1347,11 @@ class FileSystemInfo {
|
|
1294
1347
|
// e.g. import.meta
|
1295
1348
|
continue;
|
1296
1349
|
}
|
1297
|
-
|
1298
|
-
type:
|
1350
|
+
push({
|
1351
|
+
type: RBDT_RESOLVE_ESM_FILE,
|
1299
1352
|
context,
|
1300
|
-
path: dependency
|
1353
|
+
path: dependency,
|
1354
|
+
expected: undefined
|
1301
1355
|
});
|
1302
1356
|
} catch (e) {
|
1303
1357
|
this.logger.warn(
|
@@ -1340,9 +1394,11 @@ class FileSystemInfo {
|
|
1340
1394
|
resolveMissing.add(packageJson);
|
1341
1395
|
const parent = dirname(this.fs, packagePath);
|
1342
1396
|
if (parent !== packagePath) {
|
1343
|
-
|
1397
|
+
push({
|
1344
1398
|
type: RBDT_DIRECTORY_DEPENDENCIES,
|
1345
|
-
|
1399
|
+
context: undefined,
|
1400
|
+
path: parent,
|
1401
|
+
expected: undefined
|
1346
1402
|
});
|
1347
1403
|
}
|
1348
1404
|
callback();
|
@@ -1360,10 +1416,11 @@ class FileSystemInfo {
|
|
1360
1416
|
const depsObject = packageData.dependencies;
|
1361
1417
|
if (typeof depsObject === "object" && depsObject) {
|
1362
1418
|
for (const dep of Object.keys(depsObject)) {
|
1363
|
-
|
1419
|
+
push({
|
1364
1420
|
type: RBDT_RESOLVE_DIRECTORY,
|
1365
1421
|
context: packagePath,
|
1366
|
-
path: dep
|
1422
|
+
path: dep,
|
1423
|
+
expected: undefined
|
1367
1424
|
});
|
1368
1425
|
}
|
1369
1426
|
}
|
@@ -1373,38 +1430,24 @@ class FileSystemInfo {
|
|
1373
1430
|
}
|
1374
1431
|
}
|
1375
1432
|
},
|
1376
|
-
|
1433
|
+
err => {
|
1434
|
+
if (err) return callback(err);
|
1435
|
+
for (const l of fileSymlinks) files.delete(l);
|
1436
|
+
for (const l of directorySymlinks) directories.delete(l);
|
1437
|
+
for (const k of invalidResolveResults) resolveResults.delete(k);
|
1438
|
+
callback(null, {
|
1439
|
+
files,
|
1440
|
+
directories,
|
1441
|
+
missing,
|
1442
|
+
resolveResults,
|
1443
|
+
resolveDependencies: {
|
1444
|
+
files: resolveFiles,
|
1445
|
+
directories: resolveDirectories,
|
1446
|
+
missing: resolveMissing
|
1447
|
+
}
|
1448
|
+
});
|
1449
|
+
}
|
1377
1450
|
);
|
1378
|
-
queue.drain = () => {
|
1379
|
-
callback(null, {
|
1380
|
-
files,
|
1381
|
-
directories,
|
1382
|
-
missing,
|
1383
|
-
resolveResults,
|
1384
|
-
resolveDependencies: {
|
1385
|
-
files: resolveFiles,
|
1386
|
-
directories: resolveDirectories,
|
1387
|
-
missing: resolveMissing
|
1388
|
-
}
|
1389
|
-
});
|
1390
|
-
};
|
1391
|
-
queue.error = err => {
|
1392
|
-
callback(err);
|
1393
|
-
callback = () => {};
|
1394
|
-
};
|
1395
|
-
let jobQueued = false;
|
1396
|
-
for (const dep of deps) {
|
1397
|
-
queue.push({
|
1398
|
-
type: RBDT_RESOLVE,
|
1399
|
-
context,
|
1400
|
-
path: dep
|
1401
|
-
});
|
1402
|
-
jobQueued = true;
|
1403
|
-
}
|
1404
|
-
if (!jobQueued) {
|
1405
|
-
// queue won't call drain when no jobs are queue
|
1406
|
-
queue.drain();
|
1407
|
-
}
|
1408
1451
|
}
|
1409
1452
|
|
1410
1453
|
/**
|
@@ -1413,6 +1456,11 @@ class FileSystemInfo {
|
|
1413
1456
|
* @returns {void}
|
1414
1457
|
*/
|
1415
1458
|
checkResolveResultsValid(resolveResults, callback) {
|
1459
|
+
const {
|
1460
|
+
resolveCjs,
|
1461
|
+
resolveEsm,
|
1462
|
+
resolveContext
|
1463
|
+
} = this._createBuildDependenciesResolvers();
|
1416
1464
|
asyncLib.eachLimit(
|
1417
1465
|
resolveResults,
|
1418
1466
|
20,
|
@@ -1427,7 +1475,14 @@ class FileSystemInfo {
|
|
1427
1475
|
});
|
1428
1476
|
break;
|
1429
1477
|
case "f":
|
1430
|
-
|
1478
|
+
resolveCjs(context, path, {}, (err, result) => {
|
1479
|
+
if (err) return callback(err);
|
1480
|
+
if (result !== expectedResult) return callback(INVALID);
|
1481
|
+
callback();
|
1482
|
+
});
|
1483
|
+
break;
|
1484
|
+
case "e":
|
1485
|
+
resolveEsm(context, path, {}, (err, result) => {
|
1431
1486
|
if (err) return callback(err);
|
1432
1487
|
if (result !== expectedResult) return callback(INVALID);
|
1433
1488
|
callback();
|