| '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; |