33const {
44 ArrayFrom,
55 ArrayIsArray,
6+ ArrayPrototypePop,
7+ ArrayPrototypePush,
8+ ArrayPrototypeSlice,
9+ ArrayPrototypeSort,
610 Error,
7- Map,
811 ObjectCreate,
912 ObjectDefineProperties,
1013 ObjectDefineProperty,
@@ -13,8 +16,14 @@ const {
1316 ObjectGetPrototypeOf,
1417 ObjectSetPrototypeOf,
1518 Promise,
19+ ReflectApply,
1620 ReflectConstruct,
17- Set,
21+ RegExpPrototypeTest,
22+ SafeMap,
23+ SafeSet,
24+ StringPrototypeReplace,
25+ StringPrototypeToLowerCase,
26+ StringPrototypeToUpperCase,
1827 Symbol,
1928 SymbolFor,
2029} = primordials ;
@@ -40,12 +49,12 @@ const { isNativeError } = internalBinding('types');
4049
4150const noCrypto = ! process . versions . openssl ;
4251
43- const experimentalWarnings = new Set ( ) ;
52+ const experimentalWarnings = new SafeSet ( ) ;
4453
4554const colorRegExp = / \u001b \[ \d \d ? m / g; // eslint-disable-line no-control-regex
4655
4756function removeColors ( str ) {
48- return str . replace ( colorRegExp , '' ) ;
57+ return StringPrototypeReplace ( str , colorRegExp , '' ) ;
4958}
5059
5160function isError ( e ) {
@@ -57,7 +66,7 @@ function isError(e) {
5766
5867// Keep a list of deprecation codes that have been warned on so we only warn on
5968// each one once.
60- const codesWarned = new Set ( ) ;
69+ const codesWarned = new SafeSet ( ) ;
6170
6271// Mark that a method should not be used.
6372// Returns a modified function which warns once by default.
@@ -86,7 +95,7 @@ function deprecate(fn, msg, code) {
8695 if ( new . target ) {
8796 return ReflectConstruct ( fn , args , new . target ) ;
8897 }
89- return fn . apply ( this , args ) ;
98+ return ReflectApply ( fn , this , args ) ;
9099 }
91100
92101 // The wrapper will keep the same prototype as fn to maintain prototype chain
@@ -132,12 +141,13 @@ function slowCases(enc) {
132141 case 4 :
133142 if ( enc === 'UTF8' ) return 'utf8' ;
134143 if ( enc === 'ucs2' || enc === 'UCS2' ) return 'utf16le' ;
135- enc = `${ enc } ` . toLowerCase ( ) ;
144+ enc = StringPrototypeToLowerCase ( `${ enc } ` ) ;
136145 if ( enc === 'utf8' ) return 'utf8' ;
137146 if ( enc === 'ucs2' ) return 'utf16le' ;
138147 break ;
139148 case 3 :
140- if ( enc === 'hex' || enc === 'HEX' || `${ enc } ` . toLowerCase ( ) === 'hex' )
149+ if ( enc === 'hex' || enc === 'HEX' ||
150+ StringPrototypeToLowerCase ( `${ enc } ` ) === 'hex' )
141151 return 'hex' ;
142152 break ;
143153 case 5 :
@@ -146,7 +156,7 @@ function slowCases(enc) {
146156 if ( enc === 'UTF-8' ) return 'utf8' ;
147157 if ( enc === 'ASCII' ) return 'ascii' ;
148158 if ( enc === 'UCS-2' ) return 'utf16le' ;
149- enc = `${ enc } ` . toLowerCase ( ) ;
159+ enc = StringPrototypeToLowerCase ( `${ enc } ` ) ;
150160 if ( enc === 'utf-8' ) return 'utf8' ;
151161 if ( enc === 'ascii' ) return 'ascii' ;
152162 if ( enc === 'ucs-2' ) return 'utf16le' ;
@@ -156,18 +166,18 @@ function slowCases(enc) {
156166 if ( enc === 'latin1' || enc === 'binary' ) return 'latin1' ;
157167 if ( enc === 'BASE64' ) return 'base64' ;
158168 if ( enc === 'LATIN1' || enc === 'BINARY' ) return 'latin1' ;
159- enc = `${ enc } ` . toLowerCase ( ) ;
169+ enc = StringPrototypeToLowerCase ( `${ enc } ` ) ;
160170 if ( enc === 'base64' ) return 'base64' ;
161171 if ( enc === 'latin1' || enc === 'binary' ) return 'latin1' ;
162172 break ;
163173 case 7 :
164174 if ( enc === 'utf16le' || enc === 'UTF16LE' ||
165- `${ enc } ` . toLowerCase ( ) === 'utf16le' )
175+ StringPrototypeToLowerCase ( `${ enc } ` ) === 'utf16le' )
166176 return 'utf16le' ;
167177 break ;
168178 case 8 :
169179 if ( enc === 'utf-16le' || enc === 'UTF-16LE' ||
170- `${ enc } ` . toLowerCase ( ) === 'utf-16le' )
180+ StringPrototypeToLowerCase ( `${ enc } ` ) === 'utf-16le' )
171181 return 'utf16le' ;
172182 break ;
173183 default :
@@ -184,25 +194,25 @@ function emitExperimentalWarning(feature) {
184194}
185195
186196function filterDuplicateStrings ( items , low ) {
187- const map = new Map ( ) ;
197+ const map = new SafeMap ( ) ;
188198 for ( let i = 0 ; i < items . length ; i ++ ) {
189199 const item = items [ i ] ;
190- const key = item . toLowerCase ( ) ;
200+ const key = StringPrototypeToLowerCase ( item ) ;
191201 if ( low ) {
192202 map . set ( key , key ) ;
193203 } else {
194204 map . set ( key , item ) ;
195205 }
196206 }
197- return ArrayFrom ( map . values ( ) ) . sort ( ) ;
207+ return ArrayPrototypeSort ( ArrayFrom ( map . values ( ) ) ) ;
198208}
199209
200210function cachedResult ( fn ) {
201211 let result ;
202212 return ( ) => {
203213 if ( result === undefined )
204214 result = fn ( ) ;
205- return result . slice ( ) ;
215+ return ArrayPrototypeSlice ( result ) ;
206216 } ;
207217}
208218
@@ -244,7 +254,7 @@ function convertToValidSignal(signal) {
244254 return signal ;
245255
246256 if ( typeof signal === 'string' ) {
247- const signalName = signals [ signal . toUpperCase ( ) ] ;
257+ const signalName = signals [ StringPrototypeToUpperCase ( signal ) ] ;
248258 if ( signalName ) return signalName ;
249259 }
250260
@@ -294,7 +304,7 @@ function promisify(original) {
294304
295305 function fn ( ...args ) {
296306 return new Promise ( ( resolve , reject ) => {
297- original . call ( this , ... args , ( err , ...values ) => {
307+ ArrayPrototypePush ( args , ( err , ...values ) => {
298308 if ( err ) {
299309 return reject ( err ) ;
300310 }
@@ -307,6 +317,7 @@ function promisify(original) {
307317 resolve ( values [ 0 ] ) ;
308318 }
309319 } ) ;
320+ ReflectApply ( original , this , args ) ;
310321 } ) ;
311322 }
312323
@@ -343,7 +354,7 @@ function join(output, separator) {
343354function spliceOne ( list , index ) {
344355 for ( ; index + 1 < list . length ; index ++ )
345356 list [ index ] = list [ index + 1 ] ;
346- list . pop ( ) ;
357+ ArrayPrototypePop ( list ) ;
347358}
348359
349360const kNodeModulesRE = / ^ ( .* ) [ \\ / ] n o d e _ m o d u l e s [ \\ / ] / ;
@@ -376,9 +387,9 @@ function isInsideNodeModules() {
376387 const filename = frame . getFileName ( ) ;
377388 // If a filename does not start with / or contain \,
378389 // it's likely from Node.js core.
379- if ( ! / ^ \/ | \\ / . test ( filename ) )
390+ if ( ! RegExpPrototypeTest ( / ^ \/ | \\ / , filename ) )
380391 continue ;
381- return kNodeModulesRE . test ( filename ) ;
392+ return RegExpPrototypeTest ( kNodeModulesRE , filename ) ;
382393 }
383394 }
384395 return false ;
@@ -389,7 +400,7 @@ function once(callback) {
389400 return function ( ...args ) {
390401 if ( called ) return ;
391402 called = true ;
392- callback . apply ( this , args ) ;
403+ ReflectApply ( callback , this , args ) ;
393404 } ;
394405}
395406
0 commit comments