6
6
7
7
const {
8
8
ArrayPrototypeEvery,
9
+ ArrayPrototypeIncludes,
9
10
ArrayPrototypeMap,
10
11
ArrayPrototypePush,
11
12
ArrayPrototypeSplice,
12
13
BigUint64Array,
13
14
Float64Array,
14
15
NumberMAX_SAFE_INTEGER,
15
- ObjectDefineProperty,
16
16
ObjectFreeze,
17
17
ReflectApply,
18
18
RegExpPrototypeTest,
19
- SafeSet,
19
+ SafeArrayIterator,
20
+ Set,
20
21
StringPrototypeEndsWith,
21
22
StringPrototypeReplace,
22
23
StringPrototypeSlice,
23
24
StringPrototypeStartsWith,
25
+ Symbol,
26
+ SymbolIterator,
24
27
Uint32Array,
25
28
} = primordials ;
26
29
@@ -41,6 +44,8 @@ const {
41
44
} = require ( 'internal/validators' ) ;
42
45
const constants = internalBinding ( 'constants' ) . os . signals ;
43
46
47
+ const kSet = Symbol ( 'internal set' ) ;
48
+
44
49
function assert ( x , msg ) {
45
50
if ( ! x ) throw new ERR_ASSERTION ( msg || 'assertion error' ) ;
46
51
}
@@ -293,18 +298,18 @@ function buildAllowedFlags() {
293
298
294
299
// Save these for comparison against flags provided to
295
300
// process.allowedNodeEnvironmentFlags.has() which lack leading dashes.
296
- const nodeFlags = new SafeSet ( ArrayPrototypeMap ( allowedNodeEnvironmentFlags ,
297
- trimLeadingDashes ) ) ;
298
-
299
- class NodeEnvironmentFlagsSet extends SafeSet {
300
- constructor ( ... args ) {
301
- super ( ... args ) ;
302
-
303
- // The super constructor consumes `add`, but
304
- // disallow any future adds.
305
- ObjectDefineProperty ( this , ' add' , {
306
- value : ( ) => this
307
- } ) ;
301
+ const nodeFlags = ArrayPrototypeMap ( allowedNodeEnvironmentFlags ,
302
+ trimLeadingDashes ) ;
303
+
304
+ class NodeEnvironmentFlagsSet extends Set {
305
+ constructor ( iterable ) {
306
+ super ( ) ;
307
+ this [ kSet ] = new Set ( new SafeArrayIterator ( iterable ) ) ;
308
+ }
309
+
310
+ add ( ) {
311
+ // No-op, `Set` API compatible
312
+ return this ;
308
313
}
309
314
310
315
delete ( ) {
@@ -313,7 +318,7 @@ function buildAllowedFlags() {
313
318
}
314
319
315
320
clear ( ) {
316
- // No-op
321
+ // No-op, `Set` API compatible
317
322
}
318
323
319
324
has ( key ) {
@@ -328,13 +333,32 @@ function buildAllowedFlags() {
328
333
key = StringPrototypeReplace ( key , replaceUnderscoresRegex , '-' ) ;
329
334
if ( RegExpPrototypeTest ( leadingDashesRegex , key ) ) {
330
335
key = StringPrototypeReplace ( key , trailingValuesRegex , '' ) ;
331
- return super . has ( key ) ;
336
+ return this [ kSet ] . has ( key ) ;
332
337
}
333
- return nodeFlags . has ( key ) ;
338
+ return ArrayPrototypeIncludes ( nodeFlags , key ) ;
334
339
}
335
340
return false ;
336
341
}
342
+
343
+ entries ( ) {
344
+ return this [ kSet ] . entries ( ) ;
345
+ }
346
+
347
+ forEach ( callback , thisArg = undefined ) {
348
+ this [ kSet ] . forEach ( ( v ) => ReflectApply ( callback , thisArg , [ v , v , this ] ) ) ;
349
+ }
350
+
351
+ get size ( ) {
352
+ return this [ kSet ] . size ;
353
+ }
354
+
355
+ values ( ) {
356
+ return this [ kSet ] . values ( ) ;
357
+ }
337
358
}
359
+ NodeEnvironmentFlagsSet . prototype . keys =
360
+ NodeEnvironmentFlagsSet . prototype [ SymbolIterator ] =
361
+ NodeEnvironmentFlagsSet . prototype . values ;
338
362
339
363
ObjectFreeze ( NodeEnvironmentFlagsSet . prototype . constructor ) ;
340
364
ObjectFreeze ( NodeEnvironmentFlagsSet . prototype ) ;
0 commit comments