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