63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
'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;
|