Class: Dependabot::NpmAndYarn::YarnErrorHandler
- Inherits:
-
Object
- Object
- Dependabot::NpmAndYarn::YarnErrorHandler
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb
Instance Method Summary collapse
- #create_error(handler, message, error, params) ⇒ Object
- #find_usage_error(error_message) ⇒ Object
- #handle_error(error, params) ⇒ Object
-
#handle_group_patterns(error, usage_error_message, params) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity.
-
#handle_package_not_found(error_message, yarn_lock) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity.
- #handle_yarn_error(error, params) ⇒ Object
-
#initialize(dependencies:, dependency_files:) ⇒ YarnErrorHandler
constructor
A new instance of YarnErrorHandler.
- #package_missing(error_message) ⇒ Object
- #pattern_in_message(patterns, message) ⇒ Object
- #raise_resolvability_error(error_message, yarn_lock) ⇒ Object
- #sanitize_package_name(package_name) ⇒ Object
Constructor Details
#initialize(dependencies:, dependency_files:) ⇒ YarnErrorHandler
Returns a new instance of YarnErrorHandler.
724 725 726 727 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 724 def initialize(dependencies:, dependency_files:) @dependencies = dependencies @dependency_files = dependency_files end |
Instance Method Details
#create_error(handler, message, error, params) ⇒ Object
833 834 835 836 837 838 839 840 841 842 843 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 833 def create_error(handler, , error, params) handler.call( , error, { dependencies: dependencies, dependency_files: dependency_files, **params } ) end |
#find_usage_error(error_message) ⇒ Object
741 742 743 744 745 746 747 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 741 def find_usage_error() start_index = .rindex(YARN_USAGE_ERROR_TEXT) return nil unless start_index error_details = [start_index..-1] error_details&.strip end |
#handle_error(error, params) ⇒ Object
751 752 753 754 755 756 757 758 759 760 761 762 763 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 751 def handle_error(error, params) = error. # Extract the usage error message from the raw error message = find_usage_error() || "" # Check if the error message contains any group patterns and raise the corresponding error class handle_group_patterns(error, , params) # Check if defined yarn error codes contained in the error message # and raise the corresponding error class handle_yarn_error(error, params) end |
#handle_group_patterns(error, usage_error_message, params) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity
803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 803 def handle_group_patterns(error, , params) # rubocop:disable Metrics/PerceivedComplexity = error..gsub(/\e\[\d+(;\d+)*m/, "") VALIDATION_GROUP_PATTERNS.each do |group| patterns = group[:patterns] matchfn = group[:matchfn] handler = group[:handler] in_usage = group[:in_usage] || false next unless (patterns || matchfn) && handler = .empty? ? : if in_usage && (patterns, ) raise create_error(handler, , error, params) elsif !in_usage && (patterns, ) raise create_error(handler, , error, params) end raise create_error(handler, , error, params) if matchfn&.call(, ) end end |
#handle_package_not_found(error_message, yarn_lock) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 880 def handle_package_not_found(, yarn_lock) # rubocop:disable Metrics/PerceivedComplexity # There are 2 different package not found error messages package_not_found = .include?(PACKAGE_NOT_FOUND) package_not_found2 = .match?(PACKAGE_NOT_FOUND2) # If non of the patterns are found, return an empty hash return {} unless package_not_found || package_not_found2 sanitized_name = T.let(nil, T.nilable(String)) if package_not_found package_name = .match(PACKAGE_NOT_FOUND_PACKAGE_NAME_REGEX) &.named_captures &.[](PACKAGE_NOT_FOUND_PACKAGE_NAME_CAPTURE) &.split(PACKAGE_NOT_FOUND_PACKAGE_NAME_CAPTURE_SPLIT_REGEX) &.first end if package_not_found2 package_name = .match(PACKAGE_NOT_FOUND2_PACKAGE_NAME_REGEX) &.named_captures &.[](PACKAGE_NOT_FOUND2_PACKAGE_NAME_CAPTURE) end raise_resolvability_error(, yarn_lock) unless package_name sanitized_name = sanitize_package_name(package_name) if package_name = .gsub(package_name, sanitized_name) if package_name && sanitized_name { sanitized_name: sanitized_name, sanitized_message: } end |
#handle_yarn_error(error, params) ⇒ Object
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 767 def handle_yarn_error(error, params) ## Clean error message from ANSI escape codes = error..gsub(/\e\[\d+(;\d+)*m/, "") matches = .scan(YARN_CODE_REGEX) return if matches.empty? # Go through each match backwards in the error message and raise the corresponding error class matches.reverse_each do |match| code = match[0] next unless code yarn_error = YARN_ERROR_CODES[code] next unless yarn_error.is_a?(Hash) = yarn_error[:message] handler = yarn_error[:handler] next unless handler = if "[#{code}]: #{}, Detail: #{}" else "[#{code}]: #{}" end raise create_error(handler, , error, params) end end |
#package_missing(error_message) ⇒ Object
916 917 918 919 920 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 916 def package_missing() names = dependencies.map(&:name) package_missing = names.any? { |name| .include?("find package \"#{name}") } !!.match(PACKAGE_MISSING_REGEX) || package_missing end |
#pattern_in_message(patterns, message) ⇒ Object
865 866 867 868 869 870 871 872 873 874 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 865 def (patterns, ) patterns.each do |pattern| if pattern.is_a?(String) return true if .include?(pattern) elsif pattern.is_a?(Regexp) return true if .gsub(/\e\[[\d;]*[A-Za-z]/, "").match?(pattern) end end false end |
#raise_resolvability_error(error_message, yarn_lock) ⇒ Object
852 853 854 855 856 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 852 def raise_resolvability_error(, yarn_lock) dependency_names = dependencies.map(&:name).join(", ") msg = "Error whilst updating #{dependency_names} in #{yarn_lock.path}:\n#{}" raise Dependabot::DependencyFileNotResolvable, msg end |
#sanitize_package_name(package_name) ⇒ Object
923 924 925 926 927 |
# File 'lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb', line 923 def sanitize_package_name(package_name) return package_name.gsub("%2f", "/").gsub("%2F", "/") if package_name nil end |