schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'use strict';
 
const semver = require('semver');
const flags = require('./flags.json');
const getDescriptors = require('object.getownpropertydescriptors');
 
const replaceUnderscoresRegex = /_/g;
const leadingDashesRegex = /^--?/;
const trailingValuesRegex = /=.*$/;
 
const replace = Function.call.bind(String.prototype.replace);
const has = Function.call.bind(Set.prototype.has);
const test = Function.call.bind(RegExp.prototype.test);
 
const [allowedNodeEnvironmentFlags, detectedSemverRange] = Object.keys(
  flags
).reduce(
  (acc, range) =>
    acc ||
    (semver.satisfies(process.version, range) ? [flags[range], range] : acc),
  null
);
 
const trimLeadingDashes = flag => replace(flag, leadingDashesRegex, '');
 
class NodeEnvironmentFlagsSet extends Set {
  constructor(...args) {
    super(...args);
 
    this.add = () => this;
  }
 
  delete() {
    return false;
  }
 
  clear() {}
 
  has(key) {
    if (typeof key === 'string') {
      key = replace(key, replaceUnderscoresRegex, '-');
      if (test(leadingDashesRegex, key)) {
        key = replace(key, trailingValuesRegex, '');
        return has(this, key);
      }
      return has(nodeFlags, key);
    }
    return false;
  }
}
const nodeFlags = Object.defineProperties(
  new Set(allowedNodeEnvironmentFlags.map(trimLeadingDashes)),
  getDescriptors(Set.prototype)
);
 
Object.freeze(NodeEnvironmentFlagsSet.prototype.constructor);
Object.freeze(NodeEnvironmentFlagsSet.prototype);
 
exports.allowedNodeEnvironmentFlags = Object.freeze(
  new NodeEnvironmentFlagsSet(allowedNodeEnvironmentFlags)
);
exports.detectedSemverRange = detectedSemverRange;