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