@@ -51,6 +51,8 @@ const {
51
51
overrides : pkgOverrides
52
52
} = rootPackageJson
53
53
54
+ const SOCKET_INTEROP = '_socketInterop'
55
+
54
56
const builtinAliases = builtinModules . reduce ( ( o , n ) => {
55
57
o [ n ] = `node:${ n } `
56
58
return o
@@ -63,6 +65,20 @@ const customResolver = nodeResolve({
63
65
preferBuiltins : true
64
66
} )
65
67
68
+ const requireAssignmentsRegExp =
69
+ / (?< = \s * = \s * ) r e q u i r e \( [ " ' ] .+ ?[ " ' ] \) (? = ; ? \r ? \n ) / g
70
+ const checkRequireAssignmentRegExp = new RegExp (
71
+ requireAssignmentsRegExp . source ,
72
+ ''
73
+ )
74
+ const checkSocketInteropUseRegExp = new RegExp ( `\\b${ SOCKET_INTEROP } \\b` )
75
+ const danglingRequiresRegExp = / ^ \s * r e q u i r e \( [ " ' ] .+ ?[ " ' ] \) ; ? \r ? \n / gm
76
+ const firstUseStrictRegExp = / ' u s e s t r i c t ' ; ? /
77
+ const oraSpinnersAssignmentsRegExp = / (?< = o r a [ ^ . ] + \. s p i n n e r s \s * = \s * ) [ $ \w ] + / g
78
+ const requireUrlAssignmentRegExp =
79
+ / (?< = v a r + ) [ $ \w ] + (? = * = * r e q u i r e \( ' n o d e : u r l ' \) ) /
80
+ const splitUrlRequiresRegExp = / r e q u i r e \( ' u ' \+ ' r l ' \) / g
81
+
66
82
function isAncestorsExternal ( id , depStats ) {
67
83
let currNmIndex = id . indexOf ( SLASH_NODE_MODULES_SLASH )
68
84
while ( currNmIndex !== - 1 ) {
@@ -154,12 +170,9 @@ export default function baseConfig(extendConfig = {}) {
154
170
LATEST
155
171
return false
156
172
}
157
- const parentNodeModulesIndex = parentId . lastIndexOf (
158
- SLASH_NODE_MODULES_SLASH
159
- )
160
- if ( parentNodeModulesIndex !== - 1 ) {
161
- const parentNameStart =
162
- parentNodeModulesIndex + SLASH_NODE_MODULES_SLASH . length
173
+ const parentNmIndex = parentId . lastIndexOf ( SLASH_NODE_MODULES_SLASH )
174
+ if ( parentNmIndex !== - 1 ) {
175
+ const parentNameStart = parentNmIndex + SLASH_NODE_MODULES_SLASH . length
163
176
const parentNameEnd = getPackageNameEnd ( parentId , parentNameStart )
164
177
const {
165
178
version,
@@ -216,30 +229,26 @@ export default function baseConfig(extendConfig = {}) {
216
229
preventAssignment : false ,
217
230
values : builtinAliases
218
231
} ) ,
219
- // Convert `require('u' + 'rl')` into something like `require$$2$3`.
232
+ // Try to convert `require('u' + 'rl')` into something like `require$$2$3`.
220
233
socketModifyPlugin ( {
221
- find : / r e q u i r e \( ' u ' \+ ' r l ' \) / g ,
234
+ find : splitUrlRequiresRegExp ,
222
235
replace ( match ) {
223
- return (
224
- / (?< = v a r + ) [ $ \w ] + (? = * = * r e q u i r e \( ' n o d e : u r l ' \) ) / . exec (
225
- this . input
226
- ) ?. [ 0 ] ?? match
227
- )
236
+ return requireUrlAssignmentRegExp . exec ( this . input ) ?. [ 0 ] ?? match
228
237
}
229
238
} ) ,
230
- // Remove bare require calls, e.g. require calls not associated with an
231
- // import binding:
239
+ // Remove dangling require calls, e.g. require calls not associated with
240
+ // an import binding:
232
241
// require('node:util')
233
242
// require('graceful-fs')
234
243
socketModifyPlugin ( {
235
- find : / ^ \s * r e q u i r e \( [ " ' ] . + ? [ " ' ] \) ; ? \r ? \n / gm ,
244
+ find : danglingRequiresRegExp ,
236
245
replace : ''
237
246
} ) ,
238
247
// Fix incorrectly set "spinners" binding caused by a transpilation bug
239
248
// https://github.com/sindresorhus/ora/blob/v8.1.1/index.js#L424
240
249
// export {default as spinners} from 'cli-spinners'
241
250
socketModifyPlugin ( {
242
- find : / (?< = o r a [ ^ . ] + \. s p i n n e r s \s * = \s * ) [ $ \w ] + / g ,
251
+ find : oraSpinnersAssignmentsRegExp ,
243
252
replace ( match ) {
244
253
return (
245
254
new RegExp ( `(?<=${ escapeRegExp ( match ) } \\s*=\\s*)[$\\w]+` ) . exec (
@@ -248,26 +257,28 @@ export default function baseConfig(extendConfig = {}) {
248
257
)
249
258
}
250
259
} ) ,
260
+ // Wrap require calls with SOCKET_INTEROP helper.
261
+ socketModifyPlugin ( {
262
+ find : requireAssignmentsRegExp ,
263
+ replace : match => `${ SOCKET_INTEROP } (${ match } )`
264
+ } ) ,
251
265
// Add CJS interop helper for "default" only exports.
252
266
socketModifyPlugin ( {
253
- find : / ' u s e s t r i c t ' ; ? / ,
254
- replace : match => ` ${ match } \n
255
- function _interop(e) {
256
- let d
257
- if (e) {
258
- let c = 0
259
- for (const k in e) {
260
- d = c++ === 0 && k === 'default' ? e[k] : void 0
261
- if (!d) break
262
- }
267
+ find : firstUseStrictRegExp ,
268
+ replace ( match ) {
269
+ return checkRequireAssignmentRegExp . test ( this . input ) ||
270
+ checkSocketInteropUseRegExp . test ( this . input )
271
+ ? ` ${ match } \n
272
+ function ${ SOCKET_INTEROP } (e) {
273
+ let c = 0
274
+ for (const k in e ?? {}) {
275
+ c = c === 0 && k === 'default' ? 1 : 0
276
+ if (!c) break
263
277
}
264
- return d ?? e
278
+ return c ? e.default : e
265
279
}`
266
- } ) ,
267
- // Wrap require calls with "_interop" helper.
268
- socketModifyPlugin ( {
269
- find : / (?< = \s * = \s * ) r e q u i r e \( [ " ' ] .+ ?[ " ' ] \) (? = ; ? \r ? \n ) / g,
270
- replace : match => `_interop(${ match } )`
280
+ : match
281
+ }
271
282
} ) ,
272
283
commonjs ( {
273
284
extensions : [ '.cjs' , '.js' , '.ts' , `.ts${ ROLLUP_ENTRY_SUFFIX } ` ] ,
0 commit comments