|
670 | 670 | const has = Function.call.bind(Set.prototype.has);
|
671 | 671 | const test = Function.call.bind(RegExp.prototype.test);
|
672 | 672 |
|
673 |
| - const { |
674 |
| - getOptions, |
675 |
| - types: { kV8Option }, |
676 |
| - envSettings: { kAllowedInEnvironment } |
677 |
| - } = internalBinding('options'); |
678 |
| - const { options, aliases } = getOptions(); |
679 |
| - |
680 |
| - const allowedV8EnvironmentFlags = []; |
681 |
| - const allowedNodeEnvironmentFlags = []; |
682 |
| - for (const [name, info] of options) { |
683 |
| - if (info.envVarSettings === kAllowedInEnvironment) { |
684 |
| - if (info.type === kV8Option) { |
685 |
| - allowedV8EnvironmentFlags.push(name); |
686 |
| - } else { |
687 |
| - allowedNodeEnvironmentFlags.push(name); |
| 673 | + const get = () => { |
| 674 | + const { |
| 675 | + getOptions, |
| 676 | + types: { kV8Option }, |
| 677 | + envSettings: { kAllowedInEnvironment } |
| 678 | + } = internalBinding('options'); |
| 679 | + const { options, aliases } = getOptions(); |
| 680 | + |
| 681 | + const allowedV8EnvironmentFlags = []; |
| 682 | + const allowedNodeEnvironmentFlags = []; |
| 683 | + for (const [name, info] of options) { |
| 684 | + if (info.envVarSettings === kAllowedInEnvironment) { |
| 685 | + if (info.type === kV8Option) { |
| 686 | + allowedV8EnvironmentFlags.push(name); |
| 687 | + } else { |
| 688 | + allowedNodeEnvironmentFlags.push(name); |
| 689 | + } |
688 | 690 | }
|
689 | 691 | }
|
690 |
| - } |
691 | 692 |
|
692 |
| - for (const [ from, expansion ] of aliases) { |
693 |
| - let isAccepted = true; |
694 |
| - for (const to of expansion) { |
695 |
| - if (!to.startsWith('-')) continue; |
696 |
| - const recursiveExpansion = aliases.get(to); |
697 |
| - if (recursiveExpansion) { |
698 |
| - expansion.push(...recursiveExpansion); |
699 |
| - continue; |
| 693 | + for (const [ from, expansion ] of aliases) { |
| 694 | + let isAccepted = true; |
| 695 | + for (const to of expansion) { |
| 696 | + if (!to.startsWith('-')) continue; |
| 697 | + const recursiveExpansion = aliases.get(to); |
| 698 | + if (recursiveExpansion) { |
| 699 | + expansion.push(...recursiveExpansion); |
| 700 | + continue; |
| 701 | + } |
| 702 | + isAccepted = options.get(to).envVarSettings === kAllowedInEnvironment; |
| 703 | + if (!isAccepted) break; |
| 704 | + } |
| 705 | + if (isAccepted) { |
| 706 | + let canonical = from; |
| 707 | + if (canonical.endsWith('=')) |
| 708 | + canonical = canonical.substr(0, canonical.length - 1); |
| 709 | + if (canonical.endsWith(' <arg>')) |
| 710 | + canonical = canonical.substr(0, canonical.length - 4); |
| 711 | + allowedNodeEnvironmentFlags.push(canonical); |
700 | 712 | }
|
701 |
| - isAccepted = options.get(to).envVarSettings === kAllowedInEnvironment; |
702 |
| - if (!isAccepted) break; |
703 |
| - } |
704 |
| - if (isAccepted) { |
705 |
| - let canonical = from; |
706 |
| - if (canonical.endsWith('=')) |
707 |
| - canonical = canonical.substr(0, canonical.length - 1); |
708 |
| - if (canonical.endsWith(' <arg>')) |
709 |
| - canonical = canonical.substr(0, canonical.length - 4); |
710 |
| - allowedNodeEnvironmentFlags.push(canonical); |
711 | 713 | }
|
712 |
| - } |
713 | 714 |
|
714 |
| - const trimLeadingDashes = (flag) => replace(flag, leadingDashesRegex, ''); |
715 |
| - |
716 |
| - // Save these for comparison against flags provided to |
717 |
| - // process.allowedNodeEnvironmentFlags.has() which lack leading dashes. |
718 |
| - // Avoid interference w/ user code by flattening `Set.prototype` into |
719 |
| - // each object. |
720 |
| - const [nodeFlags, v8Flags] = [ |
721 |
| - allowedNodeEnvironmentFlags, allowedV8EnvironmentFlags |
722 |
| - ].map((flags) => Object.defineProperties( |
723 |
| - new Set(flags.map(trimLeadingDashes)), |
724 |
| - Object.getOwnPropertyDescriptors(Set.prototype)) |
725 |
| - ); |
726 |
| - |
727 |
| - class NodeEnvironmentFlagsSet extends Set { |
728 |
| - constructor(...args) { |
729 |
| - super(...args); |
730 |
| - |
731 |
| - // the super constructor consumes `add`, but |
732 |
| - // disallow any future adds. |
733 |
| - this.add = () => this; |
734 |
| - } |
| 715 | + const trimLeadingDashes = (flag) => replace(flag, leadingDashesRegex, ''); |
| 716 | + |
| 717 | + // Save these for comparison against flags provided to |
| 718 | + // process.allowedNodeEnvironmentFlags.has() which lack leading dashes. |
| 719 | + // Avoid interference w/ user code by flattening `Set.prototype` into |
| 720 | + // each object. |
| 721 | + const [nodeFlags, v8Flags] = [ |
| 722 | + allowedNodeEnvironmentFlags, allowedV8EnvironmentFlags |
| 723 | + ].map((flags) => Object.defineProperties( |
| 724 | + new Set(flags.map(trimLeadingDashes)), |
| 725 | + Object.getOwnPropertyDescriptors(Set.prototype)) |
| 726 | + ); |
735 | 727 |
|
736 |
| - delete() { |
737 |
| - // noop, `Set` API compatible |
738 |
| - return false; |
739 |
| - } |
| 728 | + class NodeEnvironmentFlagsSet extends Set { |
| 729 | + constructor(...args) { |
| 730 | + super(...args); |
740 | 731 |
|
741 |
| - clear() { |
742 |
| - // noop |
743 |
| - } |
| 732 | + // the super constructor consumes `add`, but |
| 733 | + // disallow any future adds. |
| 734 | + this.add = () => this; |
| 735 | + } |
744 | 736 |
|
745 |
| - has(key) { |
746 |
| - // This will return `true` based on various possible |
747 |
| - // permutations of a flag, including present/missing leading |
748 |
| - // dash(es) and/or underscores-for-dashes in the case of V8-specific |
749 |
| - // flags. Strips any values after `=`, inclusive. |
750 |
| - // TODO(addaleax): It might be more flexible to run the option parser |
751 |
| - // on a dummy option set and see whether it rejects the argument or |
752 |
| - // not. |
753 |
| - if (typeof key === 'string') { |
754 |
| - key = replace(key, trailingValuesRegex, ''); |
755 |
| - if (test(leadingDashesRegex, key)) { |
756 |
| - return has(this, key) || |
757 |
| - has(v8Flags, |
758 |
| - replace( |
| 737 | + delete() { |
| 738 | + // noop, `Set` API compatible |
| 739 | + return false; |
| 740 | + } |
| 741 | + |
| 742 | + clear() { |
| 743 | + // noop |
| 744 | + } |
| 745 | + |
| 746 | + has(key) { |
| 747 | + // This will return `true` based on various possible |
| 748 | + // permutations of a flag, including present/missing leading |
| 749 | + // dash(es) and/or underscores-for-dashes in the case of V8-specific |
| 750 | + // flags. Strips any values after `=`, inclusive. |
| 751 | + // TODO(addaleax): It might be more flexible to run the option parser |
| 752 | + // on a dummy option set and see whether it rejects the argument or |
| 753 | + // not. |
| 754 | + if (typeof key === 'string') { |
| 755 | + key = replace(key, trailingValuesRegex, ''); |
| 756 | + if (test(leadingDashesRegex, key)) { |
| 757 | + return has(this, key) || |
| 758 | + has(v8Flags, |
759 | 759 | replace(
|
760 |
| - key, |
761 |
| - leadingDashesRegex, |
762 |
| - '' |
763 |
| - ), |
764 |
| - replaceDashesRegex, |
765 |
| - '_' |
766 |
| - ) |
767 |
| - ); |
| 760 | + replace( |
| 761 | + key, |
| 762 | + leadingDashesRegex, |
| 763 | + '' |
| 764 | + ), |
| 765 | + replaceDashesRegex, |
| 766 | + '_' |
| 767 | + ) |
| 768 | + ); |
| 769 | + } |
| 770 | + return has(nodeFlags, key) || |
| 771 | + has(v8Flags, replace(key, replaceDashesRegex, '_')); |
768 | 772 | }
|
769 |
| - return has(nodeFlags, key) || |
770 |
| - has(v8Flags, replace(key, replaceDashesRegex, '_')); |
| 773 | + return false; |
771 | 774 | }
|
772 |
| - return false; |
773 | 775 | }
|
774 |
| - } |
775 | 776 |
|
776 |
| - Object.freeze(NodeEnvironmentFlagsSet.prototype.constructor); |
777 |
| - Object.freeze(NodeEnvironmentFlagsSet.prototype); |
| 777 | + Object.freeze(NodeEnvironmentFlagsSet.prototype.constructor); |
| 778 | + Object.freeze(NodeEnvironmentFlagsSet.prototype); |
| 779 | + |
| 780 | + return process.allowedNodeEnvironmentFlags = Object.freeze( |
| 781 | + new NodeEnvironmentFlagsSet( |
| 782 | + allowedNodeEnvironmentFlags.concat(allowedV8EnvironmentFlags) |
| 783 | + )); |
| 784 | + }; |
778 | 785 |
|
779 |
| - process.allowedNodeEnvironmentFlags = Object.freeze( |
780 |
| - new NodeEnvironmentFlagsSet( |
781 |
| - allowedNodeEnvironmentFlags.concat(allowedV8EnvironmentFlags) |
782 |
| - ) |
783 |
| - ); |
| 786 | + Object.defineProperty(process, 'allowedNodeEnvironmentFlags', { |
| 787 | + get, |
| 788 | + set(value) { |
| 789 | + Object.defineProperty(this, 'allowedNodeEnvironmentFlags', { |
| 790 | + value, |
| 791 | + configurable: true, |
| 792 | + enumerable: true, |
| 793 | + writable: true |
| 794 | + }); |
| 795 | + }, |
| 796 | + enumerable: true, |
| 797 | + configurable: true |
| 798 | + }); |
784 | 799 | }
|
785 | 800 |
|
786 | 801 | startup();
|
|
0 commit comments