webpack 5.93.0 → 5.95.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.
- package/README.md +8 -5
- package/bin/webpack.js +6 -7
- package/hot/log.js +1 -2
- package/hot/only-dev-server.js +1 -1
- package/hot/poll.js +1 -1
- package/hot/signal.js +1 -1
- package/lib/APIPlugin.js +4 -3
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +12 -6
- package/lib/Cache.js +8 -10
- package/lib/CacheFacade.js +3 -3
- package/lib/CaseSensitiveModulesWarning.js +5 -7
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +58 -36
- package/lib/ChunkGroup.js +2 -3
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +10 -11
- package/lib/CodeGenerationResults.js +6 -5
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/Compilation.js +223 -191
- package/lib/Compiler.js +81 -82
- package/lib/ConcatenationScope.js +3 -6
- package/lib/ConditionalInitFragment.js +6 -7
- package/lib/ConstPlugin.js +7 -15
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +33 -20
- package/lib/ContextModuleFactory.js +89 -44
- package/lib/ContextReplacementPlugin.js +10 -9
- package/lib/DefinePlugin.js +75 -68
- package/lib/DelegatedModule.js +7 -3
- package/lib/DelegatedModuleFactoryPlugin.js +36 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +0 -1
- package/lib/Dependency.js +10 -14
- package/lib/DllEntryPlugin.js +4 -2
- package/lib/DllModuleFactory.js +1 -0
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +30 -15
- package/lib/EntryPlugin.js +1 -3
- package/lib/EnvironmentPlugin.js +6 -2
- package/lib/ErrorHelpers.js +11 -12
- package/lib/EvalDevToolModulePlugin.js +10 -12
- package/lib/EvalSourceMapDevToolPlugin.js +15 -13
- package/lib/ExportsInfo.js +185 -120
- package/lib/ExternalModule.js +41 -15
- package/lib/ExternalModuleFactoryPlugin.js +23 -10
- package/lib/FileSystemInfo.js +791 -422
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
- package/lib/FlagDependencyExportsPlugin.js +12 -11
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +2 -5
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +8 -10
- package/lib/HotModuleReplacementPlugin.js +78 -64
- package/lib/IgnoreErrorModuleFactory.js +3 -3
- package/lib/IgnorePlugin.js +1 -3
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +2 -3
- package/lib/LibManifestPlugin.js +4 -3
- package/lib/MainTemplate.js +72 -19
- package/lib/Module.js +25 -9
- package/lib/ModuleBuildError.js +4 -11
- package/lib/ModuleDependencyError.js +5 -5
- package/lib/ModuleDependencyWarning.js +5 -5
- package/lib/ModuleError.js +1 -5
- package/lib/ModuleFilenameHelpers.js +29 -46
- package/lib/ModuleGraph.js +7 -6
- package/lib/ModuleGraphConnection.js +6 -6
- package/lib/ModuleInfoHeaderPlugin.js +82 -30
- package/lib/ModuleParseError.js +8 -9
- package/lib/ModuleRestoreError.js +1 -1
- package/lib/ModuleStoreError.js +1 -1
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +21 -22
- package/lib/ModuleWarning.js +1 -5
- package/lib/MultiCompiler.js +24 -26
- package/lib/MultiStats.js +73 -31
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +130 -69
- package/lib/NormalModuleFactory.js +53 -49
- package/lib/OptimizationStages.js +3 -3
- package/lib/ProgressPlugin.js +9 -9
- package/lib/ProvidePlugin.js +4 -4
- package/lib/RuntimeGlobals.js +71 -70
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +24 -12
- package/lib/RuntimeTemplate.js +40 -44
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolPlugin.js +42 -34
- package/lib/Stats.js +5 -11
- package/lib/Template.js +18 -24
- package/lib/TemplatedPathPlugin.js +21 -13
- package/lib/WarnDeprecatedOptionPlugin.js +0 -1
- package/lib/WatchIgnorePlugin.js +26 -9
- package/lib/Watching.js +10 -5
- package/lib/WebpackOptionsApply.js +84 -62
- package/lib/asset/AssetGenerator.js +107 -42
- package/lib/asset/AssetModulesPlugin.js +29 -23
- package/lib/asset/AssetSourceGenerator.js +2 -7
- package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
- package/lib/buildChunkGraph.js +93 -81
- package/lib/cache/IdleFileCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
- package/lib/cache/PackFileCacheStrategy.js +51 -50
- package/lib/cache/ResolverCachePlugin.js +6 -6
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +148 -104
- package/lib/config/browserslistTargetHandler.js +16 -13
- package/lib/config/defaults.js +32 -28
- package/lib/config/normalization.js +335 -344
- package/lib/config/target.js +42 -52
- package/lib/container/ContainerEntryModule.js +2 -2
- package/lib/container/ContainerPlugin.js +1 -1
- package/lib/container/RemoteRuntimeModule.js +11 -8
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +26 -24
- package/lib/css/CssGenerator.js +9 -4
- package/lib/css/CssLoadingRuntimeModule.js +10 -10
- package/lib/css/CssModulesPlugin.js +127 -47
- package/lib/css/CssParser.js +20 -18
- package/lib/css/walkCssTokens.js +80 -95
- package/lib/debug/ProfilingPlugin.js +19 -20
- package/lib/dependencies/AMDDefineDependency.js +1 -1
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
- package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
- package/lib/dependencies/CommonJsExportsDependency.js +0 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
- package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
- package/lib/dependencies/ConstDependency.js +1 -1
- package/lib/dependencies/ContextDependency.js +7 -2
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +35 -8
- package/lib/dependencies/CriticalDependencyWarning.js +1 -1
- package/lib/dependencies/CssExportDependency.js +7 -7
- package/lib/dependencies/CssImportDependency.js +0 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
- package/lib/dependencies/CssUrlDependency.js +4 -5
- package/lib/dependencies/DynamicExports.js +5 -5
- package/lib/dependencies/ExportsInfoDependency.js +1 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
- package/lib/dependencies/HarmonyExports.js +2 -2
- package/lib/dependencies/HarmonyImportDependency.js +2 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
- package/lib/dependencies/ImportDependency.js +1 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
- package/lib/dependencies/ImportMetaPlugin.js +11 -13
- package/lib/dependencies/ImportParserPlugin.js +39 -44
- package/lib/dependencies/JsonExportsDependency.js +22 -18
- package/lib/dependencies/LoaderPlugin.js +47 -36
- package/lib/dependencies/LocalModule.js +1 -1
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
- package/lib/dependencies/ProvidedDependency.js +1 -1
- package/lib/dependencies/PureExpressionDependency.js +6 -6
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
- package/lib/dependencies/SystemPlugin.js +1 -1
- package/lib/dependencies/URLDependency.js +3 -3
- package/lib/dependencies/URLPlugin.js +66 -12
- package/lib/dependencies/WorkerPlugin.js +25 -24
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
- package/lib/hmr/LazyCompilationPlugin.js +27 -12
- package/lib/hmr/lazyCompilationBackend.js +64 -40
- package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +5 -1
- package/lib/ids/IdHelpers.js +29 -39
- package/lib/ids/SyncModuleIdsPlugin.js +7 -2
- package/lib/index.js +1 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
- package/lib/javascript/BasicEvaluatedExpression.js +4 -19
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
- package/lib/javascript/JavascriptGenerator.js +23 -7
- package/lib/javascript/JavascriptModulesPlugin.js +133 -86
- package/lib/javascript/JavascriptParser.js +179 -200
- package/lib/javascript/JavascriptParserHelpers.js +20 -21
- package/lib/javascript/StartupHelpers.js +41 -13
- package/lib/json/JsonGenerator.js +7 -13
- package/lib/json/JsonModulesPlugin.js +1 -4
- package/lib/json/JsonParser.js +5 -3
- package/lib/library/AmdLibraryPlugin.js +12 -16
- package/lib/library/AssignLibraryPlugin.js +8 -10
- package/lib/library/EnableLibraryPlugin.js +15 -14
- package/lib/library/JsonpLibraryPlugin.js +2 -1
- package/lib/library/ModernModuleLibraryPlugin.js +8 -6
- package/lib/library/ModuleLibraryPlugin.js +2 -1
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +66 -92
- package/lib/logging/Logger.js +32 -4
- package/lib/logging/createConsoleLogger.js +12 -13
- package/lib/logging/runtime.js +7 -8
- package/lib/logging/truncateArgs.js +5 -8
- package/lib/node/NodeWatchFileSystem.js +3 -18
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/nodeConsole.js +22 -22
- package/lib/optimize/AggressiveMergingPlugin.js +2 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
- package/lib/optimize/ConcatenatedModule.js +81 -51
- package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
- package/lib/optimize/InnerGraph.js +17 -17
- package/lib/optimize/InnerGraphPlugin.js +8 -7
- package/lib/optimize/LimitChunkCountPlugin.js +2 -3
- package/lib/optimize/MangleExportsPlugin.js +1 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
- package/lib/optimize/MinMaxSizeWarning.js +1 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
- package/lib/optimize/RealContentHashPlugin.js +7 -10
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
- package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
- package/lib/optimize/SplitChunksPlugin.js +34 -30
- package/lib/performance/SizeLimitsPlugin.js +2 -2
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
- package/lib/rules/BasicEffectRulePlugin.js +3 -1
- package/lib/rules/BasicMatcherRulePlugin.js +3 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
- package/lib/rules/RuleSetCompiler.js +41 -22
- package/lib/rules/UseEffectRulePlugin.js +36 -32
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
- package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
- package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +241 -126
- package/lib/serialization/BinaryMiddleware.js +44 -28
- package/lib/serialization/DateObjectSerializer.js +1 -0
- package/lib/serialization/ErrorObjectSerializer.js +2 -0
- package/lib/serialization/FileMiddleware.js +154 -106
- package/lib/serialization/MapObjectSerializer.js +2 -1
- package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
- package/lib/serialization/ObjectMiddleware.js +52 -56
- package/lib/serialization/PlainObjectSerializer.js +32 -6
- package/lib/serialization/RegExpObjectSerializer.js +1 -0
- package/lib/serialization/Serializer.js +4 -5
- package/lib/serialization/SerializerMiddleware.js +6 -6
- package/lib/serialization/SetObjectSerializer.js +2 -1
- package/lib/sharing/ConsumeSharedPlugin.js +116 -97
- package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedPlugin.js +2 -2
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +15 -27
- package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
- package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
- package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
- package/lib/stats/StatsFactory.js +127 -56
- package/lib/stats/StatsPrinter.js +75 -44
- package/lib/util/ArrayHelpers.js +8 -4
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +31 -12
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +13 -0
- package/lib/util/MapHelpers.js +1 -3
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/Queue.js +1 -1
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +4 -3
- package/lib/util/StackedCacheMap.js +4 -6
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +0 -5
- package/lib/util/TupleQueue.js +1 -1
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +7 -7
- package/lib/util/WeakTupleMap.js +19 -21
- package/lib/util/binarySearchBounds.js +5 -12
- package/lib/util/chainedImports.js +1 -1
- package/lib/util/cleverMerge.js +21 -19
- package/lib/util/comparators.js +57 -52
- package/lib/util/compileBooleanMatcher.js +3 -6
- package/lib/util/conventions.js +8 -11
- package/lib/util/createHash.js +9 -6
- package/lib/util/deprecation.js +22 -12
- package/lib/util/deterministicGrouping.js +19 -26
- package/lib/util/findGraphRoots.js +2 -2
- package/lib/util/fs.js +32 -32
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +7 -7
- package/lib/util/hash/xxhash64.js +2 -2
- package/lib/util/identifier.js +81 -59
- package/lib/util/memoize.js +8 -10
- package/lib/util/mergeScope.js +6 -9
- package/lib/util/nonNumericOnlyHash.js +2 -2
- package/lib/util/numberHash.js +1 -6
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/propertyAccess.js +2 -5
- package/lib/util/propertyName.js +1 -3
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +109 -113
- package/lib/util/semver.js +29 -27
- package/lib/util/serialization.js +16 -1
- package/lib/util/smartGrouping.js +5 -5
- package/lib/util/source.js +1 -1
- package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
- package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +18 -17
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +5 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
- package/types.d.ts +681 -355
@@ -159,11 +159,9 @@ class VariableInfo {
|
|
159
159
|
* Helper function for joining two ranges into a single range. This is useful
|
160
160
|
* when working with AST nodes, as it allows you to combine the ranges of child nodes
|
161
161
|
* to create the range of the _parent node_.
|
162
|
-
*
|
163
162
|
* @param {[number, number]} startRange start range to join
|
164
163
|
* @param {[number, number]} endRange end range to join
|
165
164
|
* @returns {[number, number]} joined range
|
166
|
-
*
|
167
165
|
* @example
|
168
166
|
* ```js
|
169
167
|
* const startRange = [0, 5];
|
@@ -171,7 +169,6 @@ class VariableInfo {
|
|
171
169
|
* const joinedRange = joinRanges(startRange, endRange);
|
172
170
|
* console.log(joinedRange); // [0, 15]
|
173
171
|
* ```
|
174
|
-
*
|
175
172
|
*/
|
176
173
|
const joinRanges = (startRange, endRange) => {
|
177
174
|
if (!endRange) return startRange;
|
@@ -182,7 +179,6 @@ const joinRanges = (startRange, endRange) => {
|
|
182
179
|
/**
|
183
180
|
* Helper function used to generate a string representation of a
|
184
181
|
* [member expression](https://github.com/estree/estree/blob/master/es5.md#memberexpression).
|
185
|
-
*
|
186
182
|
* @param {string} object object to name
|
187
183
|
* @param {string[]} membersReversed reversed list of members
|
188
184
|
* @returns {string} member expression as a string
|
@@ -193,12 +189,11 @@ const joinRanges = (startRange, endRange) => {
|
|
193
189
|
*
|
194
190
|
* console.log(name); // "myObject.property1.property2.property3"
|
195
191
|
* ```
|
196
|
-
*
|
197
192
|
*/
|
198
193
|
const objectAndMembersToName = (object, membersReversed) => {
|
199
194
|
let name = object;
|
200
195
|
for (let i = membersReversed.length - 1; i >= 0; i--) {
|
201
|
-
name = name
|
196
|
+
name = `${name}.${membersReversed[i]}`;
|
202
197
|
}
|
203
198
|
return name;
|
204
199
|
};
|
@@ -209,8 +204,7 @@ const objectAndMembersToName = (object, membersReversed) => {
|
|
209
204
|
* [ThisExpressions](https://github.com/estree/estree/blob/master/es5.md#identifier), and
|
210
205
|
* [MetaProperties](https://github.com/estree/estree/blob/master/es2015.md#metaproperty) which is
|
211
206
|
* specifically for handling the `new.target` meta property.
|
212
|
-
*
|
213
|
-
* @param {Expression | Super} expression expression
|
207
|
+
* @param {Expression | SpreadElement | Super} expression expression
|
214
208
|
* @returns {string | "this" | undefined} name or variable info
|
215
209
|
*/
|
216
210
|
const getRootName = expression => {
|
@@ -254,7 +248,7 @@ class JavascriptParser extends Parser {
|
|
254
248
|
this.hooks = Object.freeze({
|
255
249
|
/** @type {HookMap<SyncBailHook<[UnaryExpression], BasicEvaluatedExpression | undefined | null>>} */
|
256
250
|
evaluateTypeof: new HookMap(() => new SyncBailHook(["expression"])),
|
257
|
-
/** @type {HookMap<SyncBailHook<[Expression], BasicEvaluatedExpression | undefined | null>>} */
|
251
|
+
/** @type {HookMap<SyncBailHook<[Expression | SpreadElement], BasicEvaluatedExpression | undefined | null>>} */
|
258
252
|
evaluate: new HookMap(() => new SyncBailHook(["expression"])),
|
259
253
|
/** @type {HookMap<SyncBailHook<[Identifier | ThisExpression | MemberExpression | MetaProperty], BasicEvaluatedExpression | undefined | null>>} */
|
260
254
|
evaluateIdentifier: new HookMap(() => new SyncBailHook(["expression"])),
|
@@ -504,7 +498,7 @@ class JavascriptParser extends Parser {
|
|
504
498
|
)
|
505
499
|
return;
|
506
500
|
|
507
|
-
let regExp
|
501
|
+
let regExp;
|
508
502
|
const arg1 = expr.arguments[0];
|
509
503
|
|
510
504
|
if (arg1) {
|
@@ -518,11 +512,15 @@ class JavascriptParser extends Parser {
|
|
518
512
|
|
519
513
|
if (!regExp) return;
|
520
514
|
} else {
|
521
|
-
return
|
522
|
-
|
523
|
-
|
515
|
+
return (
|
516
|
+
new BasicEvaluatedExpression()
|
517
|
+
// eslint-disable-next-line prefer-regex-literals
|
518
|
+
.setRegExp(new RegExp(""))
|
519
|
+
.setRange(/** @type {Range} */ (expr.range))
|
520
|
+
);
|
524
521
|
}
|
525
522
|
|
523
|
+
let flags;
|
526
524
|
const arg2 = expr.arguments[1];
|
527
525
|
|
528
526
|
if (arg2) {
|
@@ -669,7 +667,6 @@ class JavascriptParser extends Parser {
|
|
669
667
|
|
670
668
|
/**
|
671
669
|
* Evaluates a binary expression if and only if it is a const operation (e.g. 1 + 2, "a" + "b", etc.).
|
672
|
-
*
|
673
670
|
* @template T
|
674
671
|
* @param {(leftOperand: T, rightOperand: T) => boolean | number | bigint | string} operandHandler the handler for the operation (e.g. (a, b) => a + b)
|
675
672
|
* @returns {BasicEvaluatedExpression | undefined} the evaluated expression
|
@@ -695,7 +692,6 @@ class JavascriptParser extends Parser {
|
|
695
692
|
/**
|
696
693
|
* Helper function to determine if two booleans are always different. This is used in `handleStrictEqualityComparison`
|
697
694
|
* to determine if an expressions boolean or nullish conversion is equal or not.
|
698
|
-
*
|
699
695
|
* @param {boolean} a first boolean to compare
|
700
696
|
* @param {boolean} b second boolean to compare
|
701
697
|
* @returns {boolean} true if the two booleans are always different, false otherwise
|
@@ -984,7 +980,7 @@ class JavascriptParser extends Parser {
|
|
984
980
|
res.setWrapped(
|
985
981
|
left.prefix,
|
986
982
|
new BasicEvaluatedExpression()
|
987
|
-
.setString(right.number
|
983
|
+
.setString(String(right.number))
|
988
984
|
.setRange(/** @type {Range} */ (right.range)),
|
989
985
|
left.wrappedInnerExpressions
|
990
986
|
);
|
@@ -1013,25 +1009,23 @@ class JavascriptParser extends Parser {
|
|
1013
1009
|
)
|
1014
1010
|
);
|
1015
1011
|
}
|
1012
|
+
} else if (right.isString()) {
|
1013
|
+
// left + "right"
|
1014
|
+
// => ([null] + left + "right")
|
1015
|
+
res.setWrapped(null, right, [left]);
|
1016
|
+
} else if (right.isWrapped()) {
|
1017
|
+
// left + (prefix + inner + "postfix")
|
1018
|
+
// => ([null] + left + prefix + inner + "postfix")
|
1019
|
+
res.setWrapped(
|
1020
|
+
null,
|
1021
|
+
right.postfix,
|
1022
|
+
right.wrappedInnerExpressions &&
|
1023
|
+
(right.prefix ? [left, right.prefix] : [left]).concat(
|
1024
|
+
right.wrappedInnerExpressions
|
1025
|
+
)
|
1026
|
+
);
|
1016
1027
|
} else {
|
1017
|
-
|
1018
|
-
// left + "right"
|
1019
|
-
// => ([null] + left + "right")
|
1020
|
-
res.setWrapped(null, right, [left]);
|
1021
|
-
} else if (right.isWrapped()) {
|
1022
|
-
// left + (prefix + inner + "postfix")
|
1023
|
-
// => ([null] + left + prefix + inner + "postfix")
|
1024
|
-
res.setWrapped(
|
1025
|
-
null,
|
1026
|
-
right.postfix,
|
1027
|
-
right.wrappedInnerExpressions &&
|
1028
|
-
(right.prefix ? [left, right.prefix] : [left]).concat(
|
1029
|
-
right.wrappedInnerExpressions
|
1030
|
-
)
|
1031
|
-
);
|
1032
|
-
} else {
|
1033
|
-
return;
|
1034
|
-
}
|
1028
|
+
return;
|
1035
1029
|
}
|
1036
1030
|
if (left.couldHaveSideEffects() || right.couldHaveSideEffects())
|
1037
1031
|
res.setSideEffects();
|
@@ -1082,7 +1076,6 @@ class JavascriptParser extends Parser {
|
|
1082
1076
|
|
1083
1077
|
/**
|
1084
1078
|
* Evaluates a UnaryExpression if and only if it is a basic const operator (e.g. +a, -a, ~a).
|
1085
|
-
*
|
1086
1079
|
* @template T
|
1087
1080
|
* @param {(operand: T) => boolean | number | bigint | string} operandHandler handler for the operand
|
1088
1081
|
* @returns {BasicEvaluatedExpression | undefined} evaluated expression
|
@@ -1197,16 +1190,19 @@ class JavascriptParser extends Parser {
|
|
1197
1190
|
} else if (expr.operator === "~") {
|
1198
1191
|
return handleConstOperation(v => ~v);
|
1199
1192
|
} else if (expr.operator === "+") {
|
1193
|
+
// eslint-disable-next-line no-implicit-coercion
|
1200
1194
|
return handleConstOperation(v => +v);
|
1201
1195
|
} else if (expr.operator === "-") {
|
1202
1196
|
return handleConstOperation(v => -v);
|
1203
1197
|
}
|
1204
1198
|
});
|
1205
|
-
this.hooks.evaluateTypeof
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1199
|
+
this.hooks.evaluateTypeof
|
1200
|
+
.for("undefined")
|
1201
|
+
.tap("JavascriptParser", expr =>
|
1202
|
+
new BasicEvaluatedExpression()
|
1203
|
+
.setString("undefined")
|
1204
|
+
.setRange(/** @type {Range} */ (expr.range))
|
1205
|
+
);
|
1210
1206
|
this.hooks.evaluate.for("Identifier").tap("JavascriptParser", expr => {
|
1211
1207
|
if (/** @type {Identifier} */ (expr).name === "undefined") {
|
1212
1208
|
return new BasicEvaluatedExpression()
|
@@ -1216,14 +1212,14 @@ class JavascriptParser extends Parser {
|
|
1216
1212
|
});
|
1217
1213
|
/**
|
1218
1214
|
* @param {string} exprType expression type name
|
1219
|
-
* @param {function(Expression): GetInfoResult | undefined} getInfo get info
|
1215
|
+
* @param {function(Expression | SpreadElement): GetInfoResult | undefined} getInfo get info
|
1220
1216
|
* @returns {void}
|
1221
1217
|
*/
|
1222
1218
|
const tapEvaluateWithVariableInfo = (exprType, getInfo) => {
|
1223
1219
|
/** @type {Expression | undefined} */
|
1224
|
-
let cachedExpression
|
1220
|
+
let cachedExpression;
|
1225
1221
|
/** @type {GetInfoResult | undefined} */
|
1226
|
-
let cachedInfo
|
1222
|
+
let cachedInfo;
|
1227
1223
|
this.hooks.evaluate.for(exprType).tap("JavascriptParser", expr => {
|
1228
1224
|
const expression = /** @type {MemberExpression} */ (expr);
|
1229
1225
|
|
@@ -1375,8 +1371,8 @@ class JavascriptParser extends Parser {
|
|
1375
1371
|
if (expr.arguments.length !== 2) return;
|
1376
1372
|
if (expr.arguments[0].type === "SpreadElement") return;
|
1377
1373
|
if (expr.arguments[1].type === "SpreadElement") return;
|
1378
|
-
|
1379
|
-
|
1374
|
+
const arg1 = this.evaluateExpression(expr.arguments[0]);
|
1375
|
+
const arg2 = this.evaluateExpression(expr.arguments[1]);
|
1380
1376
|
if (!arg1.isString() && !arg1.isRegExp()) return;
|
1381
1377
|
const arg1Value = /** @type {string | RegExp} */ (
|
1382
1378
|
arg1.regExp || arg1.string
|
@@ -1390,14 +1386,14 @@ class JavascriptParser extends Parser {
|
|
1390
1386
|
.setSideEffects(param.couldHaveSideEffects())
|
1391
1387
|
.setRange(/** @type {Range} */ (expr.range));
|
1392
1388
|
});
|
1393
|
-
["substr", "substring", "slice"]
|
1389
|
+
for (const fn of ["substr", "substring", "slice"]) {
|
1394
1390
|
this.hooks.evaluateCallExpressionMember
|
1395
1391
|
.for(fn)
|
1396
1392
|
.tap("JavascriptParser", (expr, param) => {
|
1397
1393
|
if (!param.isString()) return;
|
1398
1394
|
let arg1;
|
1399
|
-
let result
|
1400
|
-
|
1395
|
+
let result;
|
1396
|
+
const str = /** @type {string} */ (param.string);
|
1401
1397
|
switch (expr.arguments.length) {
|
1402
1398
|
case 1:
|
1403
1399
|
if (expr.arguments[0].type === "SpreadElement") return;
|
@@ -1430,7 +1426,7 @@ class JavascriptParser extends Parser {
|
|
1430
1426
|
.setSideEffects(param.couldHaveSideEffects())
|
1431
1427
|
.setRange(/** @type {Range} */ (expr.range));
|
1432
1428
|
});
|
1433
|
-
}
|
1429
|
+
}
|
1434
1430
|
|
1435
1431
|
/**
|
1436
1432
|
* @param {"cooked" | "raw"} kind kind of values to get
|
@@ -1538,7 +1534,7 @@ class JavascriptParser extends Parser {
|
|
1538
1534
|
/** @type {string} */
|
1539
1535
|
const value = argExpr.isString()
|
1540
1536
|
? /** @type {string} */ (argExpr.string)
|
1541
|
-
:
|
1537
|
+
: String(/** @type {number} */ (argExpr.number));
|
1542
1538
|
|
1543
1539
|
/** @type {string} */
|
1544
1540
|
const newString = value + (stringSuffix ? stringSuffix.string : "");
|
@@ -1572,18 +1568,17 @@ class JavascriptParser extends Parser {
|
|
1572
1568
|
return new BasicEvaluatedExpression()
|
1573
1569
|
.setWrapped(param.prefix, postfix, inner)
|
1574
1570
|
.setRange(/** @type {Range} */ (expr.range));
|
1575
|
-
} else {
|
1576
|
-
const newString =
|
1577
|
-
/** @type {string} */ (param.string) +
|
1578
|
-
(stringSuffix ? stringSuffix.string : "");
|
1579
|
-
return new BasicEvaluatedExpression()
|
1580
|
-
.setString(newString)
|
1581
|
-
.setSideEffects(
|
1582
|
-
(stringSuffix && stringSuffix.couldHaveSideEffects()) ||
|
1583
|
-
param.couldHaveSideEffects()
|
1584
|
-
)
|
1585
|
-
.setRange(/** @type {Range} */ (expr.range));
|
1586
1571
|
}
|
1572
|
+
const newString =
|
1573
|
+
/** @type {string} */ (param.string) +
|
1574
|
+
(stringSuffix ? stringSuffix.string : "");
|
1575
|
+
return new BasicEvaluatedExpression()
|
1576
|
+
.setString(newString)
|
1577
|
+
.setSideEffects(
|
1578
|
+
(stringSuffix && stringSuffix.couldHaveSideEffects()) ||
|
1579
|
+
param.couldHaveSideEffects()
|
1580
|
+
)
|
1581
|
+
.setRange(/** @type {Range} */ (expr.range));
|
1587
1582
|
});
|
1588
1583
|
this.hooks.evaluateCallExpressionMember
|
1589
1584
|
.for("split")
|
@@ -1649,13 +1644,12 @@ class JavascriptParser extends Parser {
|
|
1649
1644
|
.tap("JavascriptParser", _expr => {
|
1650
1645
|
const expr = /** @type {ArrayExpression} */ (_expr);
|
1651
1646
|
|
1652
|
-
const items = expr.elements.map(
|
1653
|
-
|
1647
|
+
const items = expr.elements.map(
|
1648
|
+
element =>
|
1654
1649
|
element !== null &&
|
1655
1650
|
element.type !== "SpreadElement" &&
|
1656
1651
|
this.evaluateExpression(element)
|
1657
|
-
|
1658
|
-
});
|
1652
|
+
);
|
1659
1653
|
if (!items.every(Boolean)) return;
|
1660
1654
|
return new BasicEvaluatedExpression()
|
1661
1655
|
.setItems(/** @type {BasicEvaluatedExpression[]} */ (items))
|
@@ -1712,7 +1706,7 @@ class JavascriptParser extends Parser {
|
|
1712
1706
|
* @returns {Set<DestructuringAssignmentProperty> | undefined} destructured identifiers
|
1713
1707
|
*/
|
1714
1708
|
destructuringAssignmentPropertiesFor(node) {
|
1715
|
-
if (!this.destructuringAssignmentProperties) return
|
1709
|
+
if (!this.destructuringAssignmentProperties) return;
|
1716
1710
|
return this.destructuringAssignmentProperties.get(node);
|
1717
1711
|
}
|
1718
1712
|
|
@@ -1732,10 +1726,11 @@ class JavascriptParser extends Parser {
|
|
1732
1726
|
* @returns {void}
|
1733
1727
|
*/
|
1734
1728
|
walkClass(classy) {
|
1735
|
-
if (
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1729
|
+
if (
|
1730
|
+
classy.superClass &&
|
1731
|
+
!this.hooks.classExtendsExpression.call(classy.superClass, classy)
|
1732
|
+
) {
|
1733
|
+
this.walkExpression(classy.superClass);
|
1739
1734
|
}
|
1740
1735
|
if (classy.body && classy.body.type === "ClassBody") {
|
1741
1736
|
const scopeParams = [];
|
@@ -1776,7 +1771,6 @@ class JavascriptParser extends Parser {
|
|
1776
1771
|
|
1777
1772
|
/**
|
1778
1773
|
* Pre walking iterates the scope for variable declarations
|
1779
|
-
*
|
1780
1774
|
* @param {(Statement | ModuleDeclaration)[]} statements statements
|
1781
1775
|
*/
|
1782
1776
|
preWalkStatements(statements) {
|
@@ -1788,7 +1782,6 @@ class JavascriptParser extends Parser {
|
|
1788
1782
|
|
1789
1783
|
/**
|
1790
1784
|
* Block pre walking iterates the scope for block variable declarations
|
1791
|
-
*
|
1792
1785
|
* @param {(Statement | ModuleDeclaration)[]} statements statements
|
1793
1786
|
*/
|
1794
1787
|
blockPreWalkStatements(statements) {
|
@@ -1800,7 +1793,6 @@ class JavascriptParser extends Parser {
|
|
1800
1793
|
|
1801
1794
|
/**
|
1802
1795
|
* Walking iterates the statements and expressions and processes them
|
1803
|
-
*
|
1804
1796
|
* @param {(Statement | ModuleDeclaration)[]} statements statements
|
1805
1797
|
*/
|
1806
1798
|
walkStatements(statements) {
|
@@ -1812,7 +1804,6 @@ class JavascriptParser extends Parser {
|
|
1812
1804
|
|
1813
1805
|
/**
|
1814
1806
|
* Walking iterates the statements and expressions and processes them
|
1815
|
-
*
|
1816
1807
|
* @param {Statement | ModuleDeclaration} statement statement
|
1817
1808
|
*/
|
1818
1809
|
preWalkStatement(statement) {
|
@@ -1974,7 +1965,6 @@ class JavascriptParser extends Parser {
|
|
1974
1965
|
* Walks a statements that is nested within a parent statement
|
1975
1966
|
* and can potentially be a non-block statement.
|
1976
1967
|
* This enforces the nested statement to never be in ASI position.
|
1977
|
-
*
|
1978
1968
|
* @param {Statement} statement the nested statement
|
1979
1969
|
*/
|
1980
1970
|
walkNestedStatement(statement) {
|
@@ -2031,12 +2021,10 @@ class JavascriptParser extends Parser {
|
|
2031
2021
|
if (statement.alternate) {
|
2032
2022
|
this.walkNestedStatement(statement.alternate);
|
2033
2023
|
}
|
2034
|
-
} else {
|
2035
|
-
|
2036
|
-
|
2037
|
-
|
2038
|
-
this.walkNestedStatement(statement.alternate);
|
2039
|
-
}
|
2024
|
+
} else if (result) {
|
2025
|
+
this.walkNestedStatement(statement.consequent);
|
2026
|
+
} else if (statement.alternate) {
|
2027
|
+
this.walkNestedStatement(statement.alternate);
|
2040
2028
|
}
|
2041
2029
|
}
|
2042
2030
|
|
@@ -2168,10 +2156,8 @@ class JavascriptParser extends Parser {
|
|
2168
2156
|
* @param {ForStatement} statement for statement
|
2169
2157
|
*/
|
2170
2158
|
preWalkForStatement(statement) {
|
2171
|
-
if (statement.init) {
|
2172
|
-
|
2173
|
-
this.preWalkStatement(statement.init);
|
2174
|
-
}
|
2159
|
+
if (statement.init && statement.init.type === "VariableDeclaration") {
|
2160
|
+
this.preWalkStatement(statement.init);
|
2175
2161
|
}
|
2176
2162
|
this.preWalkStatement(statement.body);
|
2177
2163
|
}
|
@@ -2438,19 +2424,18 @@ class JavascriptParser extends Parser {
|
|
2438
2424
|
} else {
|
2439
2425
|
this.hooks.export.call(statement);
|
2440
2426
|
}
|
2441
|
-
if (
|
2442
|
-
|
2443
|
-
|
2444
|
-
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
}
|
2427
|
+
if (
|
2428
|
+
statement.declaration &&
|
2429
|
+
!this.hooks.exportDeclaration.call(statement, statement.declaration)
|
2430
|
+
) {
|
2431
|
+
const prev = this.prevStatement;
|
2432
|
+
this.preWalkStatement(statement.declaration);
|
2433
|
+
this.prevStatement = prev;
|
2434
|
+
this.blockPreWalkStatement(statement.declaration);
|
2435
|
+
let index = 0;
|
2436
|
+
this.enterDeclaration(statement.declaration, def => {
|
2437
|
+
this.hooks.exportSpecifier.call(statement, def, def, index++);
|
2438
|
+
});
|
2454
2439
|
}
|
2455
2440
|
if (statement.specifiers) {
|
2456
2441
|
for (
|
@@ -3111,11 +3096,13 @@ class JavascriptParser extends Parser {
|
|
3111
3096
|
currentStatement.expression === expression)
|
3112
3097
|
) {
|
3113
3098
|
const old = /** @type {StatementPathItem} */ (this.statementPath.pop());
|
3099
|
+
const prev = this.prevStatement;
|
3114
3100
|
for (const expr of expression.expressions) {
|
3115
3101
|
this.statementPath.push(expr);
|
3116
3102
|
this.walkExpression(expr);
|
3117
|
-
this.statementPath.pop();
|
3103
|
+
this.prevStatement = this.statementPath.pop();
|
3118
3104
|
}
|
3105
|
+
this.prevStatement = prev;
|
3119
3106
|
this.statementPath.push(old);
|
3120
3107
|
} else {
|
3121
3108
|
this.walkExpressions(expression.expressions);
|
@@ -3176,10 +3163,8 @@ class JavascriptParser extends Parser {
|
|
3176
3163
|
const result = this.hooks.expressionLogicalOperator.call(expression);
|
3177
3164
|
if (result === undefined) {
|
3178
3165
|
this.walkLeftRightExpression(expression);
|
3179
|
-
} else {
|
3180
|
-
|
3181
|
-
this.walkExpression(expression.right);
|
3182
|
-
}
|
3166
|
+
} else if (result) {
|
3167
|
+
this.walkExpression(expression.right);
|
3183
3168
|
}
|
3184
3169
|
}
|
3185
3170
|
|
@@ -3189,31 +3174,30 @@ class JavascriptParser extends Parser {
|
|
3189
3174
|
walkAssignmentExpression(expression) {
|
3190
3175
|
if (expression.left.type === "Identifier") {
|
3191
3176
|
const renameIdentifier = this.getRenameIdentifier(expression.right);
|
3192
|
-
if (
|
3177
|
+
if (
|
3178
|
+
renameIdentifier &&
|
3179
|
+
this.callHooksForInfo(
|
3180
|
+
this.hooks.canRename,
|
3181
|
+
renameIdentifier,
|
3182
|
+
expression.right
|
3183
|
+
)
|
3184
|
+
) {
|
3185
|
+
// renaming "a = b;"
|
3193
3186
|
if (
|
3194
|
-
this.callHooksForInfo(
|
3195
|
-
this.hooks.
|
3187
|
+
!this.callHooksForInfo(
|
3188
|
+
this.hooks.rename,
|
3196
3189
|
renameIdentifier,
|
3197
3190
|
expression.right
|
3198
3191
|
)
|
3199
3192
|
) {
|
3200
|
-
|
3201
|
-
|
3202
|
-
|
3203
|
-
this.
|
3204
|
-
renameIdentifier
|
3205
|
-
|
3206
|
-
)
|
3207
|
-
) {
|
3208
|
-
this.setVariable(
|
3209
|
-
expression.left.name,
|
3210
|
-
typeof renameIdentifier === "string"
|
3211
|
-
? this.getVariableInfo(renameIdentifier)
|
3212
|
-
: renameIdentifier
|
3213
|
-
);
|
3214
|
-
}
|
3215
|
-
return;
|
3193
|
+
this.setVariable(
|
3194
|
+
expression.left.name,
|
3195
|
+
typeof renameIdentifier === "string"
|
3196
|
+
? this.getVariableInfo(renameIdentifier)
|
3197
|
+
: renameIdentifier
|
3198
|
+
);
|
3216
3199
|
}
|
3200
|
+
return;
|
3217
3201
|
}
|
3218
3202
|
this.walkExpression(expression.right);
|
3219
3203
|
this.enterPattern(expression.left, (name, decl) => {
|
@@ -3236,17 +3220,16 @@ class JavascriptParser extends Parser {
|
|
3236
3220
|
expression.left,
|
3237
3221
|
ALLOWED_MEMBER_TYPES_EXPRESSION
|
3238
3222
|
);
|
3239
|
-
if (
|
3240
|
-
|
3241
|
-
|
3242
|
-
|
3243
|
-
|
3244
|
-
|
3245
|
-
|
3246
|
-
|
3247
|
-
|
3248
|
-
|
3249
|
-
}
|
3223
|
+
if (
|
3224
|
+
exprName &&
|
3225
|
+
this.callHooksForInfo(
|
3226
|
+
this.hooks.assignMemberChain,
|
3227
|
+
exprName.rootInfo,
|
3228
|
+
expression,
|
3229
|
+
exprName.getMembers()
|
3230
|
+
)
|
3231
|
+
) {
|
3232
|
+
return;
|
3250
3233
|
}
|
3251
3234
|
this.walkExpression(expression.right);
|
3252
3235
|
this.walkExpression(expression.left);
|
@@ -3267,12 +3250,10 @@ class JavascriptParser extends Parser {
|
|
3267
3250
|
if (expression.alternate) {
|
3268
3251
|
this.walkExpression(expression.alternate);
|
3269
3252
|
}
|
3270
|
-
} else {
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3274
|
-
this.walkExpression(expression.alternate);
|
3275
|
-
}
|
3253
|
+
} else if (result) {
|
3254
|
+
this.walkExpression(expression.consequent);
|
3255
|
+
} else if (expression.alternate) {
|
3256
|
+
this.walkExpression(expression.alternate);
|
3276
3257
|
}
|
3277
3258
|
}
|
3278
3259
|
|
@@ -3361,26 +3342,18 @@ class JavascriptParser extends Parser {
|
|
3361
3342
|
const renameIdentifier = this.getRenameIdentifier(
|
3362
3343
|
/** @type {Expression} */ (argOrThis)
|
3363
3344
|
);
|
3364
|
-
if (
|
3365
|
-
|
3366
|
-
|
3367
|
-
|
3368
|
-
|
3369
|
-
|
3370
|
-
|
3371
|
-
)
|
3372
|
-
|
3373
|
-
|
3374
|
-
|
3375
|
-
|
3376
|
-
argOrThis
|
3377
|
-
)
|
3378
|
-
) {
|
3379
|
-
return typeof renameIdentifier === "string"
|
3380
|
-
? /** @type {string} */ (this.getVariableInfo(renameIdentifier))
|
3381
|
-
: renameIdentifier;
|
3382
|
-
}
|
3383
|
-
}
|
3345
|
+
if (
|
3346
|
+
renameIdentifier &&
|
3347
|
+
this.callHooksForInfo(
|
3348
|
+
this.hooks.canRename,
|
3349
|
+
renameIdentifier,
|
3350
|
+
argOrThis
|
3351
|
+
) &&
|
3352
|
+
!this.callHooksForInfo(this.hooks.rename, renameIdentifier, argOrThis)
|
3353
|
+
) {
|
3354
|
+
return typeof renameIdentifier === "string"
|
3355
|
+
? /** @type {string} */ (this.getVariableInfo(renameIdentifier))
|
3356
|
+
: renameIdentifier;
|
3384
3357
|
}
|
3385
3358
|
this.walkExpression(argOrThis);
|
3386
3359
|
};
|
@@ -3429,7 +3402,7 @@ class JavascriptParser extends Parser {
|
|
3429
3402
|
* @param {ImportExpression} expression import expression
|
3430
3403
|
*/
|
3431
3404
|
walkImportExpression(expression) {
|
3432
|
-
|
3405
|
+
const result = this.hooks.importCall.call(expression);
|
3433
3406
|
if (result === true) return;
|
3434
3407
|
|
3435
3408
|
this.walkExpression(expression.source);
|
@@ -3439,9 +3412,8 @@ class JavascriptParser extends Parser {
|
|
3439
3412
|
* @param {CallExpression} expression expression
|
3440
3413
|
*/
|
3441
3414
|
walkCallExpression(expression) {
|
3442
|
-
const isSimpleFunction = fn =>
|
3443
|
-
|
3444
|
-
};
|
3415
|
+
const isSimpleFunction = fn =>
|
3416
|
+
fn.params.every(p => p.type === "Identifier");
|
3445
3417
|
if (
|
3446
3418
|
expression.callee.type === "MemberExpression" &&
|
3447
3419
|
expression.callee.object.type.endsWith("FunctionExpression") &&
|
@@ -3656,6 +3628,7 @@ class JavascriptParser extends Parser {
|
|
3656
3628
|
walkMetaProperty(metaProperty) {
|
3657
3629
|
this.hooks.expression.for(getRootName(metaProperty)).call(metaProperty);
|
3658
3630
|
}
|
3631
|
+
|
3659
3632
|
/**
|
3660
3633
|
* @template T
|
3661
3634
|
* @template R
|
@@ -4060,7 +4033,7 @@ class JavascriptParser extends Parser {
|
|
4060
4033
|
}
|
4061
4034
|
|
4062
4035
|
/**
|
4063
|
-
* @param {
|
4036
|
+
* @param {Expression | SpreadElement} expression expression node
|
4064
4037
|
* @returns {BasicEvaluatedExpression} evaluation result
|
4065
4038
|
*/
|
4066
4039
|
evaluateExpression(expression) {
|
@@ -4073,8 +4046,8 @@ class JavascriptParser extends Parser {
|
|
4073
4046
|
return result;
|
4074
4047
|
}
|
4075
4048
|
}
|
4076
|
-
} catch (
|
4077
|
-
console.warn(
|
4049
|
+
} catch (err) {
|
4050
|
+
console.warn(err);
|
4078
4051
|
// ignore error
|
4079
4052
|
}
|
4080
4053
|
return new BasicEvaluatedExpression()
|
@@ -4097,10 +4070,10 @@ class JavascriptParser extends Parser {
|
|
4097
4070
|
}
|
4098
4071
|
break;
|
4099
4072
|
case "Literal":
|
4100
|
-
return expression.value
|
4073
|
+
return String(expression.value);
|
4101
4074
|
}
|
4102
4075
|
throw new Error(
|
4103
|
-
expression.type
|
4076
|
+
`${expression.type} is not supported as parameter for require`
|
4104
4077
|
);
|
4105
4078
|
}
|
4106
4079
|
|
@@ -4131,14 +4104,13 @@ class JavascriptParser extends Parser {
|
|
4131
4104
|
code: true,
|
4132
4105
|
conditional: false
|
4133
4106
|
};
|
4134
|
-
} else {
|
4135
|
-
return {
|
4136
|
-
range: [left.range[0], right.range[1]],
|
4137
|
-
value: left.value + right.value,
|
4138
|
-
code: false,
|
4139
|
-
conditional: false
|
4140
|
-
};
|
4141
4107
|
}
|
4108
|
+
return {
|
4109
|
+
range: [left.range[0], right.range[1]],
|
4110
|
+
value: left.value + right.value,
|
4111
|
+
code: false,
|
4112
|
+
conditional: false
|
4113
|
+
};
|
4142
4114
|
}
|
4143
4115
|
break;
|
4144
4116
|
case "ConditionalExpression": {
|
@@ -4169,7 +4141,7 @@ class JavascriptParser extends Parser {
|
|
4169
4141
|
case "Literal":
|
4170
4142
|
return {
|
4171
4143
|
range: expression.range,
|
4172
|
-
value: expression.value
|
4144
|
+
value: String(expression.value),
|
4173
4145
|
code: false,
|
4174
4146
|
conditional: false
|
4175
4147
|
};
|
@@ -4256,7 +4228,7 @@ class JavascriptParser extends Parser {
|
|
4256
4228
|
* @returns {BasicEvaluatedExpression} evaluation result
|
4257
4229
|
*/
|
4258
4230
|
evaluate(source) {
|
4259
|
-
const ast = JavascriptParser._parse(
|
4231
|
+
const ast = JavascriptParser._parse(`(${source})`, {
|
4260
4232
|
sourceType: this.sourceType,
|
4261
4233
|
locations: false
|
4262
4234
|
});
|
@@ -4409,7 +4381,7 @@ class JavascriptParser extends Parser {
|
|
4409
4381
|
const comments = /** @type {Comment[]} */ (this.comments);
|
4410
4382
|
let idx = binarySearchBounds.ge(comments, rangeStart, compare);
|
4411
4383
|
/** @type {Comment[]} */
|
4412
|
-
|
4384
|
+
const commentsInRange = [];
|
4413
4385
|
while (
|
4414
4386
|
comments[idx] &&
|
4415
4387
|
/** @type {Range} */ (comments[idx].range)[1] <= rangeEnd
|
@@ -4444,6 +4416,14 @@ class JavascriptParser extends Parser {
|
|
4444
4416
|
);
|
4445
4417
|
}
|
4446
4418
|
|
4419
|
+
/**
|
4420
|
+
* @param {number} pos source code position
|
4421
|
+
* @returns {void}
|
4422
|
+
*/
|
4423
|
+
setAsiPosition(pos) {
|
4424
|
+
/** @type {Set<number>} */ (this.semicolons).add(pos);
|
4425
|
+
}
|
4426
|
+
|
4447
4427
|
/**
|
4448
4428
|
* @param {number} pos source code position
|
4449
4429
|
* @returns {void}
|
@@ -4551,9 +4531,8 @@ class JavascriptParser extends Parser {
|
|
4551
4531
|
const value = this.scope.definitions.get(name);
|
4552
4532
|
if (value === undefined) {
|
4553
4533
|
return name;
|
4554
|
-
} else {
|
4555
|
-
return value;
|
4556
4534
|
}
|
4535
|
+
return value;
|
4557
4536
|
}
|
4558
4537
|
|
4559
4538
|
/**
|
@@ -4593,9 +4572,9 @@ class JavascriptParser extends Parser {
|
|
4593
4572
|
if (comments.length === 0) {
|
4594
4573
|
return EMPTY_COMMENT_OPTIONS;
|
4595
4574
|
}
|
4596
|
-
|
4575
|
+
const options = {};
|
4597
4576
|
/** @type {unknown[]} */
|
4598
|
-
|
4577
|
+
const errors = [];
|
4599
4578
|
for (const comment of comments) {
|
4600
4579
|
const { value } = comment;
|
4601
4580
|
if (value && webpackCommentRegExp.test(value)) {
|
@@ -4608,14 +4587,16 @@ class JavascriptParser extends Parser {
|
|
4608
4587
|
)
|
4609
4588
|
)) {
|
4610
4589
|
if (typeof val === "object" && val !== null) {
|
4611
|
-
|
4612
|
-
|
4590
|
+
val =
|
4591
|
+
val.constructor.name === "RegExp"
|
4592
|
+
? new RegExp(val)
|
4593
|
+
: JSON.parse(JSON.stringify(val));
|
4613
4594
|
}
|
4614
4595
|
options[key] = val;
|
4615
4596
|
}
|
4616
|
-
} catch (
|
4617
|
-
const newErr = new Error(String(
|
4618
|
-
newErr.stack = String(
|
4597
|
+
} catch (err) {
|
4598
|
+
const newErr = new Error(String(err.message));
|
4599
|
+
newErr.stack = String(err.stack);
|
4619
4600
|
Object.assign(newErr, { comment });
|
4620
4601
|
errors.push(newErr);
|
4621
4602
|
}
|
@@ -4665,9 +4646,9 @@ class JavascriptParser extends Parser {
|
|
4665
4646
|
let name;
|
4666
4647
|
if (info instanceof VariableInfo) {
|
4667
4648
|
name = info.freeName;
|
4668
|
-
if (typeof name !== "string") return
|
4649
|
+
if (typeof name !== "string") return;
|
4669
4650
|
} else if (typeof info !== "string") {
|
4670
|
-
return
|
4651
|
+
return;
|
4671
4652
|
} else {
|
4672
4653
|
name = info;
|
4673
4654
|
}
|
@@ -4687,8 +4668,7 @@ class JavascriptParser extends Parser {
|
|
4687
4668
|
this.extractMemberExpressionChain(expression);
|
4688
4669
|
switch (object.type) {
|
4689
4670
|
case "CallExpression": {
|
4690
|
-
if ((allowedTypes & ALLOWED_MEMBER_TYPES_CALL_EXPRESSION) === 0)
|
4691
|
-
return undefined;
|
4671
|
+
if ((allowedTypes & ALLOWED_MEMBER_TYPES_CALL_EXPRESSION) === 0) return;
|
4692
4672
|
let callee = object.callee;
|
4693
4673
|
let rootMembers = EMPTY_ARRAY;
|
4694
4674
|
if (callee.type === "MemberExpression") {
|
@@ -4696,9 +4676,9 @@ class JavascriptParser extends Parser {
|
|
4696
4676
|
this.extractMemberExpressionChain(callee));
|
4697
4677
|
}
|
4698
4678
|
const rootName = getRootName(callee);
|
4699
|
-
if (!rootName) return
|
4679
|
+
if (!rootName) return;
|
4700
4680
|
const result = this.getFreeInfoFromVariable(rootName);
|
4701
|
-
if (!result) return
|
4681
|
+
if (!result) return;
|
4702
4682
|
const { info: rootInfo, name: resolvedRoot } = result;
|
4703
4683
|
const calleeName = objectAndMembersToName(resolvedRoot, rootMembers);
|
4704
4684
|
return {
|
@@ -4716,13 +4696,12 @@ class JavascriptParser extends Parser {
|
|
4716
4696
|
case "Identifier":
|
4717
4697
|
case "MetaProperty":
|
4718
4698
|
case "ThisExpression": {
|
4719
|
-
if ((allowedTypes & ALLOWED_MEMBER_TYPES_EXPRESSION) === 0)
|
4720
|
-
return undefined;
|
4699
|
+
if ((allowedTypes & ALLOWED_MEMBER_TYPES_EXPRESSION) === 0) return;
|
4721
4700
|
const rootName = getRootName(object);
|
4722
|
-
if (!rootName) return
|
4701
|
+
if (!rootName) return;
|
4723
4702
|
|
4724
4703
|
const result = this.getFreeInfoFromVariable(rootName);
|
4725
|
-
if (!result) return
|
4704
|
+
if (!result) return;
|
4726
4705
|
const { info: rootInfo, name: resolvedRoot } = result;
|
4727
4706
|
return {
|
4728
4707
|
type: "expression",
|
@@ -4768,8 +4747,8 @@ class JavascriptParser extends Parser {
|
|
4768
4747
|
let threw = false;
|
4769
4748
|
try {
|
4770
4749
|
ast = /** @type {AnyNode} */ (parser.parse(code, parserOptions));
|
4771
|
-
} catch (
|
4772
|
-
error =
|
4750
|
+
} catch (err) {
|
4751
|
+
error = err;
|
4773
4752
|
threw = true;
|
4774
4753
|
}
|
4775
4754
|
|
@@ -4784,7 +4763,7 @@ class JavascriptParser extends Parser {
|
|
4784
4763
|
try {
|
4785
4764
|
ast = /** @type {AnyNode} */ (parser.parse(code, parserOptions));
|
4786
4765
|
threw = false;
|
4787
|
-
} catch (
|
4766
|
+
} catch (_err) {
|
4788
4767
|
// we use the error from first parse try
|
4789
4768
|
// so nothing to do here
|
4790
4769
|
}
|