@@ -106,10 +106,10 @@ private predicate isBrowserifyDependencyMap(ObjectExpr deps) {
106
106
* or their name must contain the substring "webpack_require"
107
107
* or "webpack_module_template_argument".
108
108
*/
109
- private predicate isWebpackModule ( FunctionExpr m ) {
109
+ private predicate isWebpackModule ( Function m ) {
110
110
forex ( Parameter parm | parm = m .getAParameter ( ) |
111
111
exists ( string name | name = parm .getName ( ) |
112
- name .regexpMatch ( "module|exports|.*webpack_require.*|.*webpack_module_template_argument.*" )
112
+ name .regexpMatch ( "module|exports|.*webpack_require.*|.*webpack_module_template_argument.*|.*unused_webpack_module.* " )
113
113
)
114
114
)
115
115
}
@@ -161,6 +161,23 @@ predicate isWebpackBundle(ArrayExpr ae) {
161
161
)
162
162
}
163
163
164
+ /**
165
+ * Holds if `object` looks like a Webpack bundle of form:
166
+ * ```javascript
167
+ * var __webpack_modules__ = ({
168
+ * "file1": ((module, __webpack__exports__, __webpack_require__) => ...)
169
+ * ...
170
+ * })
171
+ * ```
172
+ */
173
+ predicate isWebpackNamedBundle ( ObjectExpr object ) {
174
+ isWebpackModule ( object .getAProperty ( ) .getInit ( ) .getUnderlyingValue ( ) ) and
175
+ exists ( VarDef def |
176
+ def .getSource ( ) .( Expr ) .getUnderlyingValue ( ) = object and
177
+ def .getTarget ( ) .( VarRef ) .getName ( ) = "__webpack_modules__"
178
+ )
179
+ }
180
+
164
181
/**
165
182
* Holds if `tl` is a collection of concatenated files by [atpackager](https://github.com/ariatemplates/atpackager).
166
183
*/
@@ -233,7 +250,8 @@ predicate isDirectiveBundle(TopLevel tl) { exists(BundleDirective d | d.getTopLe
233
250
predicate isBundle ( TopLevel tl ) {
234
251
exists ( Expr e | e .getTopLevel ( ) = tl |
235
252
isBrowserifyBundle ( e ) or
236
- isWebpackBundle ( e )
253
+ isWebpackBundle ( e ) or
254
+ isWebpackNamedBundle ( e )
237
255
)
238
256
or
239
257
isMultiPartBundle ( tl )
0 commit comments