From 02eb303bf7d16f8f59c62dfdfb8b2897b4bdc07d Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Fri, 27 Sep 2024 20:31:31 +0300 Subject: [PATCH 01/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=20python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\200 11 - Anagram difference.py" | 13 ++++++++ ...4\320\265\321\200 7 - Array Deep Count.py" | 6 ++++ ...20\274\320\265\321\200 6 - Build Tower.py" | 11 +++++++ ...1\200 4 - Convert string to camel case.py" | 12 +++++++ ...\320\265\321\200 1 - Duplicate Encoder.py" | 12 +++++++ ...65\321\200 2 - Find the missing letter.py" | 6 ++++ ...65\321\200 20 - Fun with trees max sum.py" | 14 ++++++++ ...\200 21 - Linked Lists - Sorted Insert.py" | 23 +++++++++++++ ...65\321\200 3 - Moving Zeros To The End.py" | 9 ++++++ ...\265\321\200 8 - So Many Permutations!.py" | 7 ++++ ...4 - Product of consecutive Fib numbers.py" | 32 +++++++++++++++++++ ...\320\265\321\200 18 - Simple Pig Latin.py" | 15 +++++++++ ...276\320\274\320\265\321\200 16 - Snail.py" | 30 +++++++++++++++++ ...\274\320\265\321\200 5 - Sum of Digits.py" | 8 +++++ ...\320\265\321\200 10 - Sum of Intervals.py" | 13 ++++++++ ...\274\320\265\321\200 12 - Sum of Pairs.py" | 6 ++++ ...0\265\321\200 22 - Tic-Tac-Toe Checker.py" | 20 ++++++++++++ ...320\265\321\200 13 - Valid Parentheses.py" | 12 +++++++ ...\265\321\200 15 - Where my anagrams at.py" | 15 +++++++++ 19 files changed, 264 insertions(+) create mode 100644 "codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" create mode 100644 "codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" create mode 100644 "codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" create mode 100644 "codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" create mode 100644 "codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" create mode 100644 "codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" create mode 100644 "codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" create mode 100644 "codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" create mode 100644 "codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" create mode 100644 "codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" create mode 100644 "codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" create mode 100644 "codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" create mode 100644 "codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" create mode 100644 "codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" create mode 100644 "codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" create mode 100644 "codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" create mode 100644 "codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" create mode 100644 "codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" create mode 100644 "codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" diff --git "a/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" "b/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" new file mode 100644 index 000000000..5103ecf71 --- /dev/null +++ "b/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" @@ -0,0 +1,13 @@ +def anagram_difference(w1, w2): + if type(w1) == str: + w1 = list(w1) + if type(w2) == str: + w2 = list(w2) + ln_w1 = len(w1) + ln_w2 = len(w2) + len_anagram = 0 + for i in w1: + if i in w2: + len_anagram += 1 + w2.remove(i) + return ln_w1 - len_anagram + ln_w2 - len_anagram \ No newline at end of file diff --git "a/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" "b/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" new file mode 100644 index 000000000..4ea317d0f --- /dev/null +++ "b/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" @@ -0,0 +1,6 @@ +def deep_count(a): + answer = len(a) + for i in a: + if type(i) == list: + answer += deep_count(i) + return answer \ No newline at end of file diff --git "a/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" "b/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" new file mode 100644 index 000000000..42d85c7be --- /dev/null +++ "b/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" @@ -0,0 +1,11 @@ +def tower_builder(n_floors): + answer = [] + mx = 1 + 2 * (n_floors - 1) + for i in range(n_floors): + if i == 0: + count_star = 1 + else: + count_star = 1 + 2 * i + count_space = (mx - count_star) // 2 + answer.append(' ' * count_space + '*' * count_star + ' ' * count_space) + return answer \ No newline at end of file diff --git "a/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" "b/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" new file mode 100644 index 000000000..a66a299dc --- /dev/null +++ "b/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" @@ -0,0 +1,12 @@ +def to_camel_case(text): + answer = '' + k = False + for i in range(len(text)): + if text[i] == '_' or text[i] == '-': + k = True + elif k: + answer += text[i].upper() + k = False + else: + answer += text[i] + return answer diff --git "a/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" "b/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" new file mode 100644 index 000000000..02a487ec7 --- /dev/null +++ "b/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" @@ -0,0 +1,12 @@ +def duplicate_encode(word): + word_lower = word.lower() + count_letter = {} + answer = '' + for i in word_lower: + if i not in count_letter: + count_letter[i] = word_lower.count(i) + if count_letter[i] > 1: + answer += ')' + else: + answer += '(' + return answer \ No newline at end of file diff --git "a/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" "b/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" new file mode 100644 index 000000000..0177b539e --- /dev/null +++ "b/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" @@ -0,0 +1,6 @@ +def find_missing_letter(chars): + print(ord('a')) + print(ord('b')) + for i in range(len(chars) - 1): + if ord(chars[i + 1]) - ord(chars[i]) != 1: + return chr(ord(chars[i]) + 1) \ No newline at end of file diff --git "a/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" "b/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" new file mode 100644 index 000000000..0295a66ee --- /dev/null +++ "b/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" @@ -0,0 +1,14 @@ +from preloaded import TreeNode + +def max_sum(root: TreeNode): + answer = 0 + if root is None: + return answer + answer += root.value + left_root = max_sum(root.left) + right_root = max_sum(root.right) + if left_root == 0 and right_root != 0: + return answer + right_root + elif right_root == 0 and left_root != 0: + return answer + left_root + return answer + max(left_root, right_root) \ No newline at end of file diff --git "a/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" "b/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" new file mode 100644 index 000000000..48a34d985 --- /dev/null +++ "b/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" @@ -0,0 +1,23 @@ +""" For your information: +class Node(object): + def __init__(self, data): + self.data = data + self.next = None +""" + +def sorted_insert(head, data): + x = head + print(data) + print(head) + if not head: + return Node(data) + while True: + print(head.data) + if head.data > data: + head.data, data = data, head.data + print(head.data, data) + if head.next is None: + head.next = Node(data) + break + head = head.next + return x \ No newline at end of file diff --git "a/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" "b/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" new file mode 100644 index 000000000..7893747d9 --- /dev/null +++ "b/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" @@ -0,0 +1,9 @@ +def move_zeros(lst): + arr_no_zero = [] + arr_zero = [] + for i in lst: + if i == 0: + arr_zero.append(i) + else: + arr_no_zero.append(i) + return arr_no_zero + arr_zero \ No newline at end of file diff --git "a/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" "b/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" new file mode 100644 index 000000000..8a5e01d57 --- /dev/null +++ "b/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" @@ -0,0 +1,7 @@ +import itertools +def permutations(s): + answer = [] + a = itertools.permutations(s) + for i in a: + answer.append(''.join(i)) + return list(set(answer)) diff --git "a/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" "b/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" new file mode 100644 index 000000000..a3c17620d --- /dev/null +++ "b/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" @@ -0,0 +1,32 @@ +from math import sqrt + + +def fib_number(n): + if n > 0: + n += 1 + a = 0 + b = 1 + if n < 0: + print("Incorrect input") + elif n == 0: + return a + elif n == 1: + return b + else: + for i in range(2, n): + c = a + b + a = b + b = c + return b + + +def product_fib(_prod): + print(_prod) + k = 0 + while True: + if fib_number(k) * fib_number(k + 1) == _prod: + return [fib_number(k), fib_number(k + 1), True] + elif fib_number(k) * fib_number(k + 1) > _prod: + return [fib_number(k), fib_number(k + 1), False] + else: + k += 1 \ No newline at end of file diff --git "a/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" "b/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" new file mode 100644 index 000000000..9bdfff59b --- /dev/null +++ "b/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" @@ -0,0 +1,15 @@ +def pig_it(text): + arr_letter = [chr(i) for i in range(97, 123)] + x = '' + answer = '' + for i in range(len(text)): + if text[i].lower() in arr_letter: + x += text[i] + if i == len(text) - 1: + answer += x[1:] + x[0] + 'ay' + else: + if text[i].lower() not in arr_letter and x: + answer += x[1:] + x[0] + 'ay' + x = '' + answer += text[i] + return answer diff --git "a/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" "b/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" new file mode 100644 index 000000000..37153fdd6 --- /dev/null +++ "b/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" @@ -0,0 +1,30 @@ +def snail(snail_map): + print(snail_map) + if snail_map == [[]]: + return [] + answer = [] + x_mn, y_mn = 0, 0 + x_mx, y_mx = len(snail_map) - 1, len(snail_map) - 1 + y_now, x_now = 0, 0 + while True: + answer.append(snail_map[y_now][x_now]) + y_mn += 1 + while x_now < x_mx: + x_now += 1 + answer.append(snail_map[y_now][x_now]) + x_mx -= 1 + while y_now < y_mx: + y_now += 1 + answer.append(snail_map[y_now][x_now]) + y_mx -= 1 + while x_now > x_mn: + x_now -= 1 + answer.append(snail_map[y_now][x_now]) + x_mn += 1 + while y_now > y_mn: + y_now -= 1 + answer.append(snail_map[y_now][x_now]) + if x_mn > x_mx or y_mn > y_mx: + break + x_now += 1 + return answer \ No newline at end of file diff --git "a/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" "b/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" new file mode 100644 index 000000000..e293b8f52 --- /dev/null +++ "b/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" @@ -0,0 +1,8 @@ +def digital_root(n): + answer = 0 + while n > 0: + answer += n % 10 + n //= 10 + if answer // 10 != 0: + answer = digital_root(answer) + return answer diff --git "a/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" "b/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" new file mode 100644 index 000000000..87c093ed2 --- /dev/null +++ "b/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" @@ -0,0 +1,13 @@ +def sum_of_intervals(intervals): + sum_intervals = 0 + intervals = sorted(intervals, key=lambda x: x[0]) + interval_arr = [] + for i in intervals: + if not interval_arr or interval_arr[-1][1] < i[0]: + interval_arr.append([i[0], i[1]]) + else: + if interval_arr[-1][1] < i[1]: + interval_arr[-1][1] = i[1] + for i in interval_arr: + sum_intervals += i[1] - i[0] + return sum_intervals \ No newline at end of file diff --git "a/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" "b/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" new file mode 100644 index 000000000..626a3292b --- /dev/null +++ "b/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" @@ -0,0 +1,6 @@ +def sum_pairs(ints, s): + answer = {} + for i in ints: + if s - i in answer: + return [s - i, i] + answer[i] = True \ No newline at end of file diff --git "a/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" "b/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" new file mode 100644 index 000000000..911eae074 --- /dev/null +++ "b/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" @@ -0,0 +1,20 @@ +def is_solved(board): + if board[0][0] == board[0][1] == board[0][2] and board[0][0] != 0: + return board[0][0] + if board[1][0] == board[1][1] == board[1][2] and board[1][0] != 0: + return board[1][0] + if board[2][0] == board[2][1] == board[2][2] and board[2][0] != 0: + return board[2][0] + if board[0][0] == board[1][0] == board[2][0] and board[0][0] != 0: + return board[0][0] + if board[0][1] == board[1][1] == board[2][1] and board[0][1] != 0: + return board[0][1] + if board[0][2] == board[1][2] == board[2][2] and board[0][2] != 0: + return board[0][2] + if board[0][0] == board[1][1] == board[2][2] and board[0][0] != 0: + return board[0][0] + if board[0][2] == board[1][1] == board[2][0] and board[0][2] != 0: + return board[0][2] + if 0 in board[0] or 0 in board[1] or 0 in board[2]: + return -1 + return 0 \ No newline at end of file diff --git "a/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" "b/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" new file mode 100644 index 000000000..4d3db0b48 --- /dev/null +++ "b/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" @@ -0,0 +1,12 @@ +def valid_parentheses(string): + count_open_brackets = 0 + for i in string: + if i == '(': + count_open_brackets += 1 + elif i == ')': + if count_open_brackets == 0: + return False + count_open_brackets -= 1 + if count_open_brackets == 0: + return True + return False \ No newline at end of file diff --git "a/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" "b/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" new file mode 100644 index 000000000..539c7306c --- /dev/null +++ "b/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" @@ -0,0 +1,15 @@ +def anagram_difference(w1, w2): + if type(w1) == str: + w1 = list(w1) + if type(w2) == str: + w2 = list(w2) + ln_w1 = len(w1) + ln_w2 = len(w2) + len_anagram = 0 + for i in w1: + if i in w2: + len_anagram += 1 + w2.remove(i) + if len_anagram == ln_w1 and len_anagram == ln_w2: + return True + return False \ No newline at end of file From 7703368dfe99726c635e3ee127232ccf2b0110ce Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Mon, 30 Sep 2024 08:36:04 +0300 Subject: [PATCH 02/18] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Adding Big Numbers/AddingBigNumber.js | 16 ++++++++++++++ .../Flatten a Nested Map/FlattenANestedMap.js | 13 ++++++++++++ codewars/Merge two arrays/MergeTwoArrays.js | 21 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 codewars/Adding Big Numbers/AddingBigNumber.js create mode 100644 codewars/Flatten a Nested Map/FlattenANestedMap.js create mode 100644 codewars/Merge two arrays/MergeTwoArrays.js diff --git a/codewars/Adding Big Numbers/AddingBigNumber.js b/codewars/Adding Big Numbers/AddingBigNumber.js new file mode 100644 index 000000000..b0d2f87d6 --- /dev/null +++ b/codewars/Adding Big Numbers/AddingBigNumber.js @@ -0,0 +1,16 @@ +function add(a, b) { + let total = ''; + let base = 0; + let i = a.length - 1; + let j = b.length - 1; + while (i >= 0 || j >= 0 || base > 0) { + const num1 = i >= 0 ? parseInt(a[i], 10) : 0; + const num2 = j >= 0 ? parseInt(b[j], 10) : 0; + const sum = num1 + num2 + base; + base = Math.floor(sum / 10); + total += (sum % 10).toString(); + i--; + j--; + } + return total.split('').reverse().join(''); +} \ No newline at end of file diff --git a/codewars/Flatten a Nested Map/FlattenANestedMap.js b/codewars/Flatten a Nested Map/FlattenANestedMap.js new file mode 100644 index 000000000..1757a08c0 --- /dev/null +++ b/codewars/Flatten a Nested Map/FlattenANestedMap.js @@ -0,0 +1,13 @@ +function flattenMap(object) { + function iter(part, keys) { + Object.keys(part).forEach(function (k) { + if (part[k] !== null && !Array.isArray(part[k]) && typeof part[k] === 'object') { + return iter(part[k], keys.concat(k)); + } + flat[keys.concat(k).join('/')] = part[k]; + }); + } + var flat = {}; + iter(object, []); + return flat; +} \ No newline at end of file diff --git a/codewars/Merge two arrays/MergeTwoArrays.js b/codewars/Merge two arrays/MergeTwoArrays.js new file mode 100644 index 000000000..fd7c0e757 --- /dev/null +++ b/codewars/Merge two arrays/MergeTwoArrays.js @@ -0,0 +1,21 @@ +function mergeArrays(a, b) { + console.log(a, b); + console.log(a.length, b.length); + let i = 0; + let answer = []; + while (i < a.length && i < b.length) { + answer.push(a[i]); + answer.push(b[i]); + i++; + } + while (i < a.length) { + answer.push(a[i]); + i++; + } + while (i < b.length) { + answer.push(b[i]) + i++; + } + console.log(answer); + return answer; + } \ No newline at end of file From 9c8195b6dfff804b7d31636463146489803d9ef7 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Mon, 30 Sep 2024 09:10:56 +0300 Subject: [PATCH 03/18] lab1 --- rpgsaga/saga/src/index.js | 34 ++++++++++++++++++++++++++++++++++ rpgsaga/saga/src/index.ts | 1 - 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 rpgsaga/saga/src/index.js delete mode 100644 rpgsaga/saga/src/index.ts diff --git a/rpgsaga/saga/src/index.js b/rpgsaga/saga/src/index.js new file mode 100644 index 000000000..d45c51fd1 --- /dev/null +++ b/rpgsaga/saga/src/index.js @@ -0,0 +1,34 @@ +function formula(x, a) { + return Math.pow(a, (Math.pow(x, 2) - 1)) - Math.log10(Math.pow(x, 2) - 1) + Math.pow((Math.pow(x, 2) - 1), (1/3)) +} +function taskA (a, xstart, xend, xstep) { + const y = []; + for (let i = xstart; i <= xend; i += xstep) { + y.push(formula(i, a)); + } + return y +} +function taskB (a, arr) { + const y = []; + for (let i = 0; i < arr.length; i++) { + y.push(formula(arr[i], a)) + } + return y +} + +const a = 1.6; +console.log("Задача А"); +let xstart = 1.2; +let xend = 3.7; +let xstep = 0.5; +let yTaskA = taskA(a, xstart, xend, xstep); +for (let i = 0; i < yTaskA.length; i++) { + console.log(`y = ${yTaskA[i]}`) +} + +console.log("Задача B"); +let arr = [1.28, 1.36, 2.47, 3.68, 4.56]; +let yTaskB = taskB(a, arr); +for (let i = 0; i < yTaskB.length; i++) { + console.log(`y = ${yTaskB[i]}`) +} diff --git a/rpgsaga/saga/src/index.ts b/rpgsaga/saga/src/index.ts deleted file mode 100644 index 7bc4a71de..000000000 --- a/rpgsaga/saga/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello world'); From 736e50523e60b98e1ea717b219738c81c3a045d1 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Tue, 1 Oct 2024 10:17:41 +0300 Subject: [PATCH 04/18] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20for?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpgsaga/saga/src/index.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rpgsaga/saga/src/index.js b/rpgsaga/saga/src/index.js index d45c51fd1..1317e8198 100644 --- a/rpgsaga/saga/src/index.js +++ b/rpgsaga/saga/src/index.js @@ -10,8 +10,8 @@ function taskA (a, xstart, xend, xstep) { } function taskB (a, arr) { const y = []; - for (let i = 0; i < arr.length; i++) { - y.push(formula(arr[i], a)) + for (i of arr) { + y.push(formula(i, a)) } return y } @@ -22,13 +22,13 @@ let xstart = 1.2; let xend = 3.7; let xstep = 0.5; let yTaskA = taskA(a, xstart, xend, xstep); -for (let i = 0; i < yTaskA.length; i++) { - console.log(`y = ${yTaskA[i]}`) +for (i of yTaskA) { + console.log(`y = ${i}`) } console.log("Задача B"); let arr = [1.28, 1.36, 2.47, 3.68, 4.56]; let yTaskB = taskB(a, arr); -for (let i = 0; i < yTaskB.length; i++) { - console.log(`y = ${yTaskB[i]}`) +for (i of yTaskB) { + console.log(`y = ${i}`) } From a3c0f2263d2f5f248fadeaeb6e163121ca666d09 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Sat, 9 Nov 2024 00:36:19 +0300 Subject: [PATCH 05/18] Add class and superclass --- rpgsaga/saga/.eslintrc.js | 130 - rpgsaga/saga/eslint.config.mjs | 157 + rpgsaga/saga/package.json | 31 +- rpgsaga/saga/src/Lab1/formuls.ts | 19 + rpgsaga/saga/src/Lab1/output_lab1.ts | 19 + rpgsaga/saga/src/Lab2/Person_Class.ts | 56 + .../saga/src/Lab2/Volleyball_player_Class.ts | 63 + rpgsaga/saga/src/Lab2/output_lab2.ts | 9 + rpgsaga/saga/src/index.js | 34 - rpgsaga/saga/tests/TaskAB.spec.ts | 12 + .../tests/Volleyball_player_Class.spec.ts | 54 + rpgsaga/saga/tests/example.spec.ts | 12 +- rpgsaga/saga/tests/formul.spec.ts | 36 + rpgsaga/saga/tsconfig.json | 8 +- rpgsaga/saga/yarn.lock | 3661 +++++++++++++++++ 15 files changed, 4114 insertions(+), 187 deletions(-) delete mode 100644 rpgsaga/saga/.eslintrc.js create mode 100644 rpgsaga/saga/eslint.config.mjs create mode 100644 rpgsaga/saga/src/Lab1/formuls.ts create mode 100644 rpgsaga/saga/src/Lab1/output_lab1.ts create mode 100644 rpgsaga/saga/src/Lab2/Person_Class.ts create mode 100644 rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts create mode 100644 rpgsaga/saga/src/Lab2/output_lab2.ts delete mode 100644 rpgsaga/saga/src/index.js create mode 100644 rpgsaga/saga/tests/TaskAB.spec.ts create mode 100644 rpgsaga/saga/tests/Volleyball_player_Class.spec.ts create mode 100644 rpgsaga/saga/tests/formul.spec.ts create mode 100644 rpgsaga/saga/yarn.lock diff --git a/rpgsaga/saga/.eslintrc.js b/rpgsaga/saga/.eslintrc.js deleted file mode 100644 index 6b2fbc16b..000000000 --- a/rpgsaga/saga/.eslintrc.js +++ /dev/null @@ -1,130 +0,0 @@ -module.exports = { - env: { - browser: true, - es2021: true, - }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/errors', - 'plugin:import/warnings', - 'plugin:import/typescript', - 'plugin:prettier/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 12, - sourceType: 'module', - }, - plugins: ['@typescript-eslint', 'prettier', 'import'], - ignorePatterns: ['.eslintrc.js', 'react-app-env.d.ts'], - rules: { - 'no-param-reassign': ['error'], - 'prettier/prettier': ['error', { endOfLine: 'auto' }], - 'linebreak-style': 0, - 'arrow-body-style': [ - 'error', - 'as-needed', - { - requireReturnForObjectLiteral: false, - }, - ], - curly: ['error', 'all'], - 'no-implicit-coercion': ['error'], - 'spaced-comment': ['error', 'always'], - eqeqeq: ['error', 'always'], - 'prefer-template': 'error', - 'no-useless-concat': 'error', - 'prefer-destructuring': [ - 'error', - { - VariableDeclarator: { - array: false, - object: true, - }, - AssignmentExpression: { - array: false, - object: true, - }, - }, - { - enforceForRenamedProperties: false, - }, - ], - 'import/extensions': [ - 'error', - 'ignorePackages', - { - ts: 'never', - tsx: 'never', - }, - ], - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - 'import/order': [ - 'error', - { - 'newlines-between': 'always', - groups: ['builtin', 'external', 'parent', 'sibling', 'index'], - pathGroups: [ - { - pattern: 'src/**', - group: 'parent', - position: 'after', - }, - ], - }, - ], - 'import/newline-after-import': 'error', - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/ban-types': ['error'], - '@typescript-eslint/no-shadow': ['error'], - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: ['camelCase'], - }, - { - selector: ['enumMember', 'variable'], - format: ['camelCase', 'PascalCase', 'UPPER_CASE'], - }, - { - selector: 'parameter', - format: ['camelCase'], - leadingUnderscore: 'allow', - modifiers: ['unused'], - }, - { - selector: 'objectLiteralProperty', - filter: { - // Regular expression for BEM classnames - // Source: https://medium.com/takeaway-tech/the-search-for-a-regex-to-match-hyphenated-bem-css-class-names-5f8b66cc2bd9 - regex: '^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$', - match: true, - }, - format: null, - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: 'typeProperty', - format: ['snake_case', 'camelCase'], - }, - ], - }, - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - moduleDirectory: ['node_modules', '.'], - }, - }, - }, -}; diff --git a/rpgsaga/saga/eslint.config.mjs b/rpgsaga/saga/eslint.config.mjs new file mode 100644 index 000000000..5e7a9c75c --- /dev/null +++ b/rpgsaga/saga/eslint.config.mjs @@ -0,0 +1,157 @@ +import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import prettier from "eslint-plugin-prettier"; +import _import from "eslint-plugin-import"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: ["**/.eslintrc.js", "**/react-app-env.d.ts"], +}, ...fixupConfigRules(compat.extends( + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript", + "plugin:prettier/recommended", +)), { + plugins: { + "@typescript-eslint": fixupPluginRules(typescriptEslint), + prettier: fixupPluginRules(prettier), + import: fixupPluginRules(_import), + }, + + languageOptions: { + globals: { + ...globals.browser, + }, + + parser: tsParser, + ecmaVersion: 12, + sourceType: "module", + + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + + settings: { + "import/resolver": { + node: { + extensions: [".js", ".jsx", ".ts", ".tsx"], + moduleDirectory: ["node_modules", "."], + }, + }, + }, + + rules: { + "no-param-reassign": ["error"], + + "prettier/prettier": ["error", { + endOfLine: "auto", + }], + + "linebreak-style": 0, + + "arrow-body-style": ["error", "as-needed", { + requireReturnForObjectLiteral: false, + }], + + curly: ["error", "all"], + "no-implicit-coercion": ["error"], + "spaced-comment": ["error", "always"], + eqeqeq: ["error", "always"], + "prefer-template": "error", + "no-useless-concat": "error", + + "prefer-destructuring": ["error", { + VariableDeclarator: { + array: false, + object: true, + }, + + AssignmentExpression: { + array: false, + object: true, + }, + }, { + enforceForRenamedProperties: false, + }], + + "import/extensions": ["error", "ignorePackages", { + ts: "never", + tsx: "never", + }], + + "import/no-extraneous-dependencies": ["error", { + devDependencies: true, + }], + + "import/order": ["error", { + "newlines-between": "always", + groups: ["builtin", "external", "parent", "sibling", "index"], + + pathGroups: [{ + pattern: "src/**", + group: "parent", + position: "after", + }], + }], + + "import/newline-after-import": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-empty-object-type": ["error"], + "@typescript-eslint/no-unsafe-function-type": ["error"], + "@typescript-eslint/no-wrapper-object-types": ["error"], + "@typescript-eslint/no-shadow": ["error"], + + "@typescript-eslint/naming-convention": ["error", { + selector: "default", + format: ["camelCase"], + }, { + selector: ["memberLike"], + modifiers: ["private"], + format: ["camelCase"], + leadingUnderscore: "allow", + }, { + selector: ["enumMember", "variable"], + format: ["camelCase", "PascalCase", "UPPER_CASE"], + }, { + selector: "parameter", + format: ["camelCase"], + leadingUnderscore: "allow", + modifiers: ["unused"], + }, { + selector: "objectLiteralProperty", + + filter: { + regex: "^[a-z]([a-z0-9-]+)?(__([a-z0-9]+-?)+)?(--([a-z0-9]+-?)+){0,2}$", + match: true, + }, + + format: null, + }, { + selector: "typeLike", + format: ["PascalCase"], + }, { + selector: "typeProperty", + format: ["snake_case", "camelCase"], + }], + }, +}]; \ No newline at end of file diff --git a/rpgsaga/saga/package.json b/rpgsaga/saga/package.json index 1bb32af56..48455ab0e 100644 --- a/rpgsaga/saga/package.json +++ b/rpgsaga/saga/package.json @@ -6,26 +6,27 @@ "scripts": { "dev": "ts-node --script-mode src/index.ts", "test": "jest", - "lint": "eslint src --ext .js --ext .jsx --ext .ts --ext .tsx", - "lint:fix": "npm run lint -- --fix" + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"", + "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" }, "author": "", "license": "ISC", "dependencies": {}, "devDependencies": { - "@types/jest": "^27.0.3", - "@types/node": "^16.11.0", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^7.28.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-prettier": "^3.4.0", - "jest": "^27.2.5", - "prettier": "^2.4.1", - "ts-node": "^10.3.0", - "typescript": "^4.4.4", - "ts-jest": "^27.1.2" + "@eslint/compat": "^1.2.0", + "@types/jest": "^29.5.13", + "@types/node": "^22.7.4", + "@typescript-eslint/eslint-plugin": "^8.8.0", + "@typescript-eslint/parser": "^8.8.0", + "eslint": "^9.12.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "jest": "^29.7.0", + "prettier": "^3.3.3", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" }, "jest": { "preset": "ts-jest" diff --git a/rpgsaga/saga/src/Lab1/formuls.ts b/rpgsaga/saga/src/Lab1/formuls.ts new file mode 100644 index 000000000..06624f907 --- /dev/null +++ b/rpgsaga/saga/src/Lab1/formuls.ts @@ -0,0 +1,19 @@ +export function formula(x: number, a: number = 1.6): number { + return Math.pow(a, (Math.pow(x, 2) - 1)) - Math.log10(Math.pow(x, 2) - 1) + Math.pow((Math.pow(x, 2) - 1), (1/3)); +} + +export function taskA(a: number, xstart: number, xend: number, xstep: number): number[] { + const y: number[] = []; + for (let i = xstart; i <= xend; i += xstep) { + y.push(formula(i, a)); + } + return y; +} + +export function taskB(a: number, arr: number[]): number[] { + const y: number[] = []; + for (let i of arr) { + y.push(formula(i, a)); + } + return y; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab1/output_lab1.ts b/rpgsaga/saga/src/Lab1/output_lab1.ts new file mode 100644 index 000000000..10224f217 --- /dev/null +++ b/rpgsaga/saga/src/Lab1/output_lab1.ts @@ -0,0 +1,19 @@ +import { formula, taskA, taskB } from "./formuls"; + +const a: number = 1.6; +console.log("Задача А"); +let xstart: number = 1.2; +let xend: number = 3.7; +let xstep: number = 0.5; +let yTaskA: number[] = taskA(a, xstart, xend, xstep); +for (let i of yTaskA) { + console.log(`y = ${i}`); +} + +console.log("Задача B"); +let arr: number[] = [1.28, 1.36, 2.47, 3.68, 4.56]; +let yTaskB: number[] = taskB(a, arr); +for (let i of yTaskB) { + console.log(`y = ${i}`); +} +console.log(formula(4.56)) \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab2/Person_Class.ts b/rpgsaga/saga/src/Lab2/Person_Class.ts new file mode 100644 index 000000000..9119d5816 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/Person_Class.ts @@ -0,0 +1,56 @@ +export abstract class Person { + private _name: String; + private _age: number; + private _gender: String; + private _height: number; + private _weight: number; + constructor( + name: String, + age: number, + gender: String, + height: number, + weight: number + ) { + this._name = name; + this.age = age; + this.gender = gender; + this._height = height; + this._weight = weight; + } + + public set age(value: number) { + if (value < 0 || value > 110) { + throw new Error(`Incorrect age`); + } else { + this._age = value; + } + } + + public set gender(value: String) { + if (value == "m" || value == "man" || value == "w" || value == "woman") { + this._gender = value; + } else { + throw new Error(`Incorrect gender`); + } + } + + public get name(): String { + return this._name; + } + + public get age(): number { + return this._age; + } + + public get gender(): String { + return this._gender; + } + + public get height(): number { + return this._height; + } + + public get weight(): number { + return this._weight; + } +} diff --git a/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts b/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts new file mode 100644 index 000000000..67c5cdbe1 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts @@ -0,0 +1,63 @@ +import { Person } from "./Person_Class"; + +export class Volleyball_Player extends Person{ + private _position: String; + private _place_jumping: number; + private _running_jumping: number; + private _team: String; + constructor( + name: String, + age: number, + gender: String, + height: number, + weight: number, + position: String, + place_jumping: number, + running_jumping: number, + team: String + ) { + super(name, age, gender, height, weight) + this._position = position; + this.place_jumping = place_jumping; + this.running_jumping = running_jumping; + this._team = team; + } + + public set place_jumping(value: number) { + if (value > this.height) { + this._place_jumping = value; + } else { + throw new Error(`Incorrect place_jumping`) + } + } + + public set running_jumping(value: number) { + if (value > this.height) { + this._running_jumping = value; + } else { + throw new Error(`Incorrect running_jumping`) + } + } + + public get position(): String { + return this._position; + } + + public get running_jumping(): number { + return this._running_jumping; + } + + public get place_jumping(): number { + return this._place_jumping; + } + + public get team(): String { + return this._team; + } + + public view_player_parameters(): String { + return `Player ${this.name}:\n + Takeoff from a standing jump: ${this._place_jumping - this.height}\n + Takeoff on a running jump: ${this._running_jumping - this.height}` + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab2/output_lab2.ts b/rpgsaga/saga/src/Lab2/output_lab2.ts new file mode 100644 index 000000000..e58a7e581 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/output_lab2.ts @@ -0,0 +1,9 @@ +import { Volleyball_Player } from "./Volleyball_player_Class"; + +const human_1 = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); +const humsn_2 = new Volleyball_Player("Maria", 17, "woman", 170, 55, "Libero", 210, 240, 'ISUCT'); +console.log(human_1.view_player_parameters()); +console.log(humsn_2.view_player_parameters()); +humsn_2.place_jumping = 220; +humsn_2.running_jumping = 250; +console.log(humsn_2.view_player_parameters()); \ No newline at end of file diff --git a/rpgsaga/saga/src/index.js b/rpgsaga/saga/src/index.js deleted file mode 100644 index 1317e8198..000000000 --- a/rpgsaga/saga/src/index.js +++ /dev/null @@ -1,34 +0,0 @@ -function formula(x, a) { - return Math.pow(a, (Math.pow(x, 2) - 1)) - Math.log10(Math.pow(x, 2) - 1) + Math.pow((Math.pow(x, 2) - 1), (1/3)) -} -function taskA (a, xstart, xend, xstep) { - const y = []; - for (let i = xstart; i <= xend; i += xstep) { - y.push(formula(i, a)); - } - return y -} -function taskB (a, arr) { - const y = []; - for (i of arr) { - y.push(formula(i, a)) - } - return y -} - -const a = 1.6; -console.log("Задача А"); -let xstart = 1.2; -let xend = 3.7; -let xstep = 0.5; -let yTaskA = taskA(a, xstart, xend, xstep); -for (i of yTaskA) { - console.log(`y = ${i}`) -} - -console.log("Задача B"); -let arr = [1.28, 1.36, 2.47, 3.68, 4.56]; -let yTaskB = taskB(a, arr); -for (i of yTaskB) { - console.log(`y = ${i}`) -} diff --git a/rpgsaga/saga/tests/TaskAB.spec.ts b/rpgsaga/saga/tests/TaskAB.spec.ts new file mode 100644 index 000000000..d3871721c --- /dev/null +++ b/rpgsaga/saga/tests/TaskAB.spec.ts @@ -0,0 +1,12 @@ +import { taskA, taskB } from "../src/Lab1/formuls"; + +describe('Tests of task A and task B', () => { + it('Func "taskA" return correct lenght', () => { + const y = taskA(1.6, 1.2, 3.7, 0.5); + expect(y).toHaveLength(6); + }); + it('Func "taskB" return correct lenght', () => { + const y = taskB(1.6, [1.28, 1.36, 2.47, 3.68, 4.56]); + expect(y).toHaveLength(5); + }) +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts b/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts new file mode 100644 index 000000000..d23c9ef00 --- /dev/null +++ b/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts @@ -0,0 +1,54 @@ +import { Volleyball_Player } from "../src/Lab2/Volleyball_player_Class"; + +describe("Volleyball_Player constructor tests", () => { + let person: Volleyball_Player; + beforeEach(() => { + person = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); + }); + it("Should create a person with correct properties", () => { + expect(person.name).toBe("Ivan"); + expect(person.age).toBe(19); + expect(person.gender).toBe("m"); + expect(person.height).toBe(181); + expect(person.weight).toBe(70); + expect(person.position).toBe("Setter"); + expect(person.place_jumping).toBe(295); + expect(person.running_jumping).toBe(320); + expect(person.team).toBe("ISUCT"); + }) + it ("Should throw Error if person's age < 0 or > 110", () => { + expect(() => { + person['age'] = -1; + }).toThrow(`Incorrect age`); + expect(() => { + person['age'] = 1000; + }).toThrow(`Incorrect age`); + }); + it ("Should throw Error if person's gender != 'm', 'w', 'man' or 'woman'", () => { + expect(() => { + person['gender'] = "human"; + }).toThrow(`Incorrect gender`); + }); + it ("Should throw Error if person's place_jumping < height", () => { + expect(() => { + person['place_jumping'] = 169; + }).toThrow(`Incorrect place_jumping`); + }); + it ("Should throw Error if person's running_jumping < height", () => { + expect(() => { + person['running_jumping'] = 179; + }).toThrow(`Incorrect running_jumping`); + }); +}); + +describe("Volleyball_Player methods tests", () => { + let person: Volleyball_Player; + beforeEach(() => { + person = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); + }); + it('Should return the correct info about person', () => { + expect(person.view_player_parameters()).toBe(`Player ${person.name}:\n + Takeoff from a standing jump: ${person.place_jumping - person.height}\n + Takeoff on a running jump: ${person.running_jumping - person.height}`) + }); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/example.spec.ts b/rpgsaga/saga/tests/example.spec.ts index e884fd1c4..117097b4b 100644 --- a/rpgsaga/saga/tests/example.spec.ts +++ b/rpgsaga/saga/tests/example.spec.ts @@ -1,7 +1,7 @@ describe('Example', () => { - it('should return 5 as result of 2 and 3 sum', () => { - const a: number = 3; - const b: number = 2; - expect(a + b).toEqual(5); - }) -}); \ No newline at end of file + it('should return 5 as result of 2 and 3 sum', () => { + const a = 3; + const b = 2; + expect(a + b).toEqual(5); + }); +}); diff --git a/rpgsaga/saga/tests/formul.spec.ts b/rpgsaga/saga/tests/formul.spec.ts new file mode 100644 index 000000000..004b9456a --- /dev/null +++ b/rpgsaga/saga/tests/formul.spec.ts @@ -0,0 +1,36 @@ +import { formula } from "../src/Lab1/formuls"; + +describe('Test of func formul', () => { + it('Func "formul" return undefind if x = 0', () => { + let y: number = formula(0); + expect(y).toBeNaN() + }); + it('Func "formul" return undefind if x = 1', () => { + let y: number = formula(1); + expect(y).toBeDefined() + }); + it('Func "formul" return undefind if x = -1', () => { + let y: number = formula(-1); + expect(y).toBeDefined() + }); + it('Func "formul" return undefind if x = 0.5', () => { + let y: number = formula(0.5); + expect(y).toBeNaN() + }); + it('Func "formul" return undefind if x = -0.5', () => { + let y: number = formula(-0.5); + expect(y).toBeNaN() + }); + it('Func "formul" return if x = 1.2', () => { + let y = formula(1.2); + expect(y).toBeCloseTo(2.346) + }); + it('Func "formul" return undefind if x = 2.47', () => { + let y = formula(2.47); + expect(y).toBeCloseTo(12.008) + }); + it('Func "formul" return undefind if x = 4.56', () => { + let y = formula(4.56); + expect(y).toBeCloseTo(10972.99) + }); +}) \ No newline at end of file diff --git a/rpgsaga/saga/tsconfig.json b/rpgsaga/saga/tsconfig.json index 5a0ab7fe9..44b594c6d 100644 --- a/rpgsaga/saga/tsconfig.json +++ b/rpgsaga/saga/tsconfig.json @@ -1,5 +1,9 @@ { "compilerOptions": { - "types": ["jest", "node"] - } + "types": ["jest", "node"], + "target": "ES5", + "module": "CommonJS", + "outDir": "out", + "sourceMap": true + } } \ No newline at end of file diff --git a/rpgsaga/saga/yarn.lock b/rpgsaga/saga/yarn.lock new file mode 100644 index 000000000..dded998ee --- /dev/null +++ b/rpgsaga/saga/yarn.lock @@ -0,0 +1,3661 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" + integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== + dependencies: + "@babel/highlight" "^7.25.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.7.tgz#b8479fe0018ef0ac87b6b7a5c6916fcd67ae2c9c" + integrity sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.7.tgz#1b3d144157575daf132a3bc80b2b18e6e3ca6ece" + integrity sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.25.7" + "@babel/generator" "^7.25.7" + "@babel/helper-compilation-targets" "^7.25.7" + "@babel/helper-module-transforms" "^7.25.7" + "@babel/helpers" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/template" "^7.25.7" + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.25.7", "@babel/generator@^7.7.2": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" + integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== + dependencies: + "@babel/types" "^7.25.7" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4" + integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A== + dependencies: + "@babel/compat-data" "^7.25.7" + "@babel/helper-validator-option" "^7.25.7" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472" + integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw== + dependencies: + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" + +"@babel/helper-module-transforms@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a" + integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ== + dependencies: + "@babel/helper-module-imports" "^7.25.7" + "@babel/helper-simple-access" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" + "@babel/traverse" "^7.25.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c" + integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw== + +"@babel/helper-simple-access@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0" + integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ== + dependencies: + "@babel/traverse" "^7.25.7" + "@babel/types" "^7.25.7" + +"@babel/helper-string-parser@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" + integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== + +"@babel/helper-validator-identifier@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" + integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== + +"@babel/helper-validator-option@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729" + integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ== + +"@babel/helpers@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2" + integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA== + dependencies: + "@babel/template" "^7.25.7" + "@babel/types" "^7.25.7" + +"@babel/highlight@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" + integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== + dependencies: + "@babel/helper-validator-identifier" "^7.25.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.7.tgz#99b927720f4ddbfeb8cd195a363ed4532f87c590" + integrity sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw== + dependencies: + "@babel/types" "^7.25.7" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f" + integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.7" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165" + integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b" + integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.7" + +"@babel/template@^7.25.7", "@babel/template@^7.3.3": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" + integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== + dependencies: + "@babel/code-frame" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/types" "^7.25.7" + +"@babel/traverse@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" + integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== + dependencies: + "@babel/code-frame" "^7.25.7" + "@babel/generator" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/template" "^7.25.7" + "@babel/types" "^7.25.7" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.7", "@babel/types@^7.3.3": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.7.tgz#1b7725c1d3a59f328cb700ce704c46371e6eef9b" + integrity sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ== + dependencies: + "@babel/helper-string-parser" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== + +"@eslint/compat@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.2.0.tgz#8d36b8c0e1e9e91068a1df8938977a9e4535d83c" + integrity sha512-CkPWddN7J9JPrQedEr2X7AjK9y1jaMJtxZ4A/+jTMFA2+n5BWhcKHW/EbJyARqg2zzQfgtWUtVmG3hrG6+nGpg== + +"@eslint/config-array@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" + integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== + dependencies: + "@eslint/object-schema" "^2.1.4" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.6.0.tgz#9930b5ba24c406d67a1760e94cdbac616a6eb674" + integrity sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg== + +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" + integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.12.0": + version "9.12.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.12.0.tgz#69ca3ca9fab9a808ec6d67b8f6edb156cbac91e1" + integrity sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA== + +"@eslint/object-schema@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" + integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== + +"@eslint/plugin-kit@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz#8712dccae365d24e9eeecb7b346f85e750ba343d" + integrity sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig== + dependencies: + levn "^0.4.1" + +"@humanfs/core@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.0.tgz#08db7a8c73bb07673d9ebd925f2dad746411fcec" + integrity sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw== + +"@humanfs/node@^0.16.5": + version "0.16.5" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.5.tgz#a9febb7e7ad2aff65890fdc630938f8d20aa84ba" + integrity sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg== + dependencies: + "@humanfs/core" "^0.19.0" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0", "@humanwhocodes/retry@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.13": + version "29.5.13" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.13.tgz#8bc571659f401e6a719a7bf0dbcb8b78c71a8adc" + integrity sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@*", "@types/node@^22.7.4": + version "22.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" + integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + dependencies: + undici-types "~6.19.2" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz#b2b02a5447cdc885950eb256b3b8a97b92031bd3" + integrity sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.8.0" + "@typescript-eslint/type-utils" "8.8.0" + "@typescript-eslint/utils" "8.8.0" + "@typescript-eslint/visitor-keys" "8.8.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.8.0.tgz#ee4397c70230c4eee030456924c0fba480072f5e" + integrity sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg== + dependencies: + "@typescript-eslint/scope-manager" "8.8.0" + "@typescript-eslint/types" "8.8.0" + "@typescript-eslint/typescript-estree" "8.8.0" + "@typescript-eslint/visitor-keys" "8.8.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz#30b23a6ae5708bd7882e40675ef2f1b2beac741f" + integrity sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg== + dependencies: + "@typescript-eslint/types" "8.8.0" + "@typescript-eslint/visitor-keys" "8.8.0" + +"@typescript-eslint/type-utils@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz#a0ca1c8a90d94b101176a169d7a0958187408d33" + integrity sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q== + dependencies: + "@typescript-eslint/typescript-estree" "8.8.0" + "@typescript-eslint/utils" "8.8.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.8.0.tgz#08ea5df6c01984d456056434641491fbf7a1bf43" + integrity sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw== + +"@typescript-eslint/typescript-estree@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz#072eaab97fdb63513fabfe1cf271812affe779e3" + integrity sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw== + dependencies: + "@typescript-eslint/types" "8.8.0" + "@typescript-eslint/visitor-keys" "8.8.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.8.0.tgz#bd8607e3a68c461b69169c7a5824637dc9e8b3f1" + integrity sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.8.0" + "@typescript-eslint/types" "8.8.0" + "@typescript-eslint/typescript-estree" "8.8.0" + +"@typescript-eslint/visitor-keys@8.8.0": + version "8.8.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz#f93965abd38c82a1a1f5574290a50d02daf1cd2e" + integrity sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g== + dependencies: + "@typescript-eslint/types" "8.8.0" + eslint-visitor-keys "^3.4.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.12.0, acorn@^8.4.1: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0: + version "4.24.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" + integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== + dependencies: + caniuse-lite "^1.0.30001663" + electron-to-chromium "^1.5.28" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" + +bs-logger@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001663: + version "1.0.30001667" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz#99fc5ea0d9c6e96897a104a8352604378377f949" + integrity sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" + integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.28: + version "1.5.32" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz#4a05ee78e29e240aabaf73a67ce9fe73f52e1bc7" + integrity sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.31.0: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-prettier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.9.1" + +eslint-scope@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.1.0.tgz#70214a174d4cbffbc3e8a26911d8bf51b9ae9d30" + integrity sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz#1f785cc5e81eb7534523d85922248232077d2f8c" + integrity sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg== + +eslint@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.12.0.tgz#54fcba2876c90528396da0fa44b6446329031e86" + integrity sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.11.0" + "@eslint/config-array" "^0.18.0" + "@eslint/core" "^0.6.0" + "@eslint/eslintrc" "^3.1.0" + "@eslint/js" "9.12.0" + "@eslint/plugin-kit" "^0.2.0" + "@humanfs/node" "^0.16.5" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.3.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.1.0" + eslint-visitor-keys "^4.1.0" + espree "^10.2.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + text-table "^0.2.0" + +espree@^10.0.1, espree@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.2.0.tgz#f4bcead9e05b0615c968e85f83816bc386a45df6" + integrity sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g== + dependencies: + acorn "^8.12.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1, make-error@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0, picocolors@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +regexp.prototype.flags@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.20.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88" + integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +ts-jest@^29.2.5: + version "29.2.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== + dependencies: + bs-logger "^0.2.6" + ejs "^3.1.10" + fast-json-stable-stringify "^2.1.0" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" + +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typescript@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +update-browserslist-db@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From bd398737b8a259bc37bc305eccba65d84b3d2c2e Mon Sep 17 00:00:00 2001 From: Lysov Dmitrii Date: Sat, 9 Nov 2024 18:07:23 +0300 Subject: [PATCH 06/18] Codewars --- .../Adding Big Numbers/AddingBigNumber.js | 16 ++++++++++ ...20\265\321\200 11 - Anagram difference.py" | 13 ++++++++ ...4\320\265\321\200 7 - Array Deep Count.py" | 6 ++++ ...20\274\320\265\321\200 6 - Build Tower.py" | 11 +++++++ ...1\200 4 - Convert string to camel case.py" | 12 +++++++ ...\320\265\321\200 1 - Duplicate Encoder.py" | 12 +++++++ ...65\321\200 2 - Find the missing letter.py" | 6 ++++ .../Flatten a Nested Map/FlattenANestedMap.js | 13 ++++++++ ...65\321\200 20 - Fun with trees max sum.py" | 14 ++++++++ ...\200 21 - Linked Lists - Sorted Insert.py" | 23 +++++++++++++ codewars/Merge two arrays/MergeTwoArrays.js | 21 ++++++++++++ ...65\321\200 3 - Moving Zeros To The End.py" | 9 ++++++ ...\265\321\200 8 - So Many Permutations!.py" | 7 ++++ ...4 - Product of consecutive Fib numbers.py" | 32 +++++++++++++++++++ ...\320\265\321\200 18 - Simple Pig Latin.py" | 15 +++++++++ ...276\320\274\320\265\321\200 16 - Snail.py" | 30 +++++++++++++++++ ...\274\320\265\321\200 5 - Sum of Digits.py" | 8 +++++ ...\320\265\321\200 10 - Sum of Intervals.py" | 13 ++++++++ ...\274\320\265\321\200 12 - Sum of Pairs.py" | 6 ++++ ...0\265\321\200 22 - Tic-Tac-Toe Checker.py" | 20 ++++++++++++ ...320\265\321\200 13 - Valid Parentheses.py" | 12 +++++++ ...\265\321\200 15 - Where my anagrams at.py" | 15 +++++++++ 22 files changed, 314 insertions(+) create mode 100644 codewars/Adding Big Numbers/AddingBigNumber.js create mode 100644 "codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" create mode 100644 "codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" create mode 100644 "codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" create mode 100644 "codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" create mode 100644 "codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" create mode 100644 "codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" create mode 100644 codewars/Flatten a Nested Map/FlattenANestedMap.js create mode 100644 "codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" create mode 100644 "codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" create mode 100644 codewars/Merge two arrays/MergeTwoArrays.js create mode 100644 "codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" create mode 100644 "codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" create mode 100644 "codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" create mode 100644 "codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" create mode 100644 "codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" create mode 100644 "codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" create mode 100644 "codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" create mode 100644 "codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" create mode 100644 "codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" create mode 100644 "codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" create mode 100644 "codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" diff --git a/codewars/Adding Big Numbers/AddingBigNumber.js b/codewars/Adding Big Numbers/AddingBigNumber.js new file mode 100644 index 000000000..b0d2f87d6 --- /dev/null +++ b/codewars/Adding Big Numbers/AddingBigNumber.js @@ -0,0 +1,16 @@ +function add(a, b) { + let total = ''; + let base = 0; + let i = a.length - 1; + let j = b.length - 1; + while (i >= 0 || j >= 0 || base > 0) { + const num1 = i >= 0 ? parseInt(a[i], 10) : 0; + const num2 = j >= 0 ? parseInt(b[j], 10) : 0; + const sum = num1 + num2 + base; + base = Math.floor(sum / 10); + total += (sum % 10).toString(); + i--; + j--; + } + return total.split('').reverse().join(''); +} \ No newline at end of file diff --git "a/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" "b/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" new file mode 100644 index 000000000..5103ecf71 --- /dev/null +++ "b/codewars/Anagram difference/\320\235\320\276\320\274\320\265\321\200 11 - Anagram difference.py" @@ -0,0 +1,13 @@ +def anagram_difference(w1, w2): + if type(w1) == str: + w1 = list(w1) + if type(w2) == str: + w2 = list(w2) + ln_w1 = len(w1) + ln_w2 = len(w2) + len_anagram = 0 + for i in w1: + if i in w2: + len_anagram += 1 + w2.remove(i) + return ln_w1 - len_anagram + ln_w2 - len_anagram \ No newline at end of file diff --git "a/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" "b/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" new file mode 100644 index 000000000..4ea317d0f --- /dev/null +++ "b/codewars/Array Deep Count/\320\235\320\276\320\274\320\265\321\200 7 - Array Deep Count.py" @@ -0,0 +1,6 @@ +def deep_count(a): + answer = len(a) + for i in a: + if type(i) == list: + answer += deep_count(i) + return answer \ No newline at end of file diff --git "a/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" "b/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" new file mode 100644 index 000000000..42d85c7be --- /dev/null +++ "b/codewars/Build Tower/\320\235\320\276\320\274\320\265\321\200 6 - Build Tower.py" @@ -0,0 +1,11 @@ +def tower_builder(n_floors): + answer = [] + mx = 1 + 2 * (n_floors - 1) + for i in range(n_floors): + if i == 0: + count_star = 1 + else: + count_star = 1 + 2 * i + count_space = (mx - count_star) // 2 + answer.append(' ' * count_space + '*' * count_star + ' ' * count_space) + return answer \ No newline at end of file diff --git "a/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" "b/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" new file mode 100644 index 000000000..a66a299dc --- /dev/null +++ "b/codewars/Convert string to camel case/\320\235\320\276\320\274\320\265\321\200 4 - Convert string to camel case.py" @@ -0,0 +1,12 @@ +def to_camel_case(text): + answer = '' + k = False + for i in range(len(text)): + if text[i] == '_' or text[i] == '-': + k = True + elif k: + answer += text[i].upper() + k = False + else: + answer += text[i] + return answer diff --git "a/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" "b/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" new file mode 100644 index 000000000..02a487ec7 --- /dev/null +++ "b/codewars/Duplicate Encoder/\320\235\320\276\320\274\320\265\321\200 1 - Duplicate Encoder.py" @@ -0,0 +1,12 @@ +def duplicate_encode(word): + word_lower = word.lower() + count_letter = {} + answer = '' + for i in word_lower: + if i not in count_letter: + count_letter[i] = word_lower.count(i) + if count_letter[i] > 1: + answer += ')' + else: + answer += '(' + return answer \ No newline at end of file diff --git "a/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" "b/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" new file mode 100644 index 000000000..0177b539e --- /dev/null +++ "b/codewars/Find the missing letter/\320\235\320\276\320\274\320\265\321\200 2 - Find the missing letter.py" @@ -0,0 +1,6 @@ +def find_missing_letter(chars): + print(ord('a')) + print(ord('b')) + for i in range(len(chars) - 1): + if ord(chars[i + 1]) - ord(chars[i]) != 1: + return chr(ord(chars[i]) + 1) \ No newline at end of file diff --git a/codewars/Flatten a Nested Map/FlattenANestedMap.js b/codewars/Flatten a Nested Map/FlattenANestedMap.js new file mode 100644 index 000000000..1757a08c0 --- /dev/null +++ b/codewars/Flatten a Nested Map/FlattenANestedMap.js @@ -0,0 +1,13 @@ +function flattenMap(object) { + function iter(part, keys) { + Object.keys(part).forEach(function (k) { + if (part[k] !== null && !Array.isArray(part[k]) && typeof part[k] === 'object') { + return iter(part[k], keys.concat(k)); + } + flat[keys.concat(k).join('/')] = part[k]; + }); + } + var flat = {}; + iter(object, []); + return flat; +} \ No newline at end of file diff --git "a/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" "b/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" new file mode 100644 index 000000000..0295a66ee --- /dev/null +++ "b/codewars/Fun with tree - max sum/\320\235\320\276\320\274\320\265\321\200 20 - Fun with trees max sum.py" @@ -0,0 +1,14 @@ +from preloaded import TreeNode + +def max_sum(root: TreeNode): + answer = 0 + if root is None: + return answer + answer += root.value + left_root = max_sum(root.left) + right_root = max_sum(root.right) + if left_root == 0 and right_root != 0: + return answer + right_root + elif right_root == 0 and left_root != 0: + return answer + left_root + return answer + max(left_root, right_root) \ No newline at end of file diff --git "a/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" "b/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" new file mode 100644 index 000000000..48a34d985 --- /dev/null +++ "b/codewars/Linked Lists - Sorted Insert/\320\235\320\276\320\274\320\265\321\200 21 - Linked Lists - Sorted Insert.py" @@ -0,0 +1,23 @@ +""" For your information: +class Node(object): + def __init__(self, data): + self.data = data + self.next = None +""" + +def sorted_insert(head, data): + x = head + print(data) + print(head) + if not head: + return Node(data) + while True: + print(head.data) + if head.data > data: + head.data, data = data, head.data + print(head.data, data) + if head.next is None: + head.next = Node(data) + break + head = head.next + return x \ No newline at end of file diff --git a/codewars/Merge two arrays/MergeTwoArrays.js b/codewars/Merge two arrays/MergeTwoArrays.js new file mode 100644 index 000000000..fd7c0e757 --- /dev/null +++ b/codewars/Merge two arrays/MergeTwoArrays.js @@ -0,0 +1,21 @@ +function mergeArrays(a, b) { + console.log(a, b); + console.log(a.length, b.length); + let i = 0; + let answer = []; + while (i < a.length && i < b.length) { + answer.push(a[i]); + answer.push(b[i]); + i++; + } + while (i < a.length) { + answer.push(a[i]); + i++; + } + while (i < b.length) { + answer.push(b[i]) + i++; + } + console.log(answer); + return answer; + } \ No newline at end of file diff --git "a/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" "b/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" new file mode 100644 index 000000000..7893747d9 --- /dev/null +++ "b/codewars/Moving Zeros To The End/\320\235\320\276\320\274\320\265\321\200 3 - Moving Zeros To The End.py" @@ -0,0 +1,9 @@ +def move_zeros(lst): + arr_no_zero = [] + arr_zero = [] + for i in lst: + if i == 0: + arr_zero.append(i) + else: + arr_no_zero.append(i) + return arr_no_zero + arr_zero \ No newline at end of file diff --git "a/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" "b/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" new file mode 100644 index 000000000..8a5e01d57 --- /dev/null +++ "b/codewars/Permutations/\320\235\320\276\320\274\320\265\321\200 8 - So Many Permutations!.py" @@ -0,0 +1,7 @@ +import itertools +def permutations(s): + answer = [] + a = itertools.permutations(s) + for i in a: + answer.append(''.join(i)) + return list(set(answer)) diff --git "a/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" "b/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" new file mode 100644 index 000000000..a3c17620d --- /dev/null +++ "b/codewars/Product of consecutive Fib numbers/\320\235\320\276\320\274\320\265\321\200 14 - Product of consecutive Fib numbers.py" @@ -0,0 +1,32 @@ +from math import sqrt + + +def fib_number(n): + if n > 0: + n += 1 + a = 0 + b = 1 + if n < 0: + print("Incorrect input") + elif n == 0: + return a + elif n == 1: + return b + else: + for i in range(2, n): + c = a + b + a = b + b = c + return b + + +def product_fib(_prod): + print(_prod) + k = 0 + while True: + if fib_number(k) * fib_number(k + 1) == _prod: + return [fib_number(k), fib_number(k + 1), True] + elif fib_number(k) * fib_number(k + 1) > _prod: + return [fib_number(k), fib_number(k + 1), False] + else: + k += 1 \ No newline at end of file diff --git "a/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" "b/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" new file mode 100644 index 000000000..9bdfff59b --- /dev/null +++ "b/codewars/Simple Pig Latin/\320\235\320\276\320\274\320\265\321\200 18 - Simple Pig Latin.py" @@ -0,0 +1,15 @@ +def pig_it(text): + arr_letter = [chr(i) for i in range(97, 123)] + x = '' + answer = '' + for i in range(len(text)): + if text[i].lower() in arr_letter: + x += text[i] + if i == len(text) - 1: + answer += x[1:] + x[0] + 'ay' + else: + if text[i].lower() not in arr_letter and x: + answer += x[1:] + x[0] + 'ay' + x = '' + answer += text[i] + return answer diff --git "a/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" "b/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" new file mode 100644 index 000000000..37153fdd6 --- /dev/null +++ "b/codewars/Snail/\320\235\320\276\320\274\320\265\321\200 16 - Snail.py" @@ -0,0 +1,30 @@ +def snail(snail_map): + print(snail_map) + if snail_map == [[]]: + return [] + answer = [] + x_mn, y_mn = 0, 0 + x_mx, y_mx = len(snail_map) - 1, len(snail_map) - 1 + y_now, x_now = 0, 0 + while True: + answer.append(snail_map[y_now][x_now]) + y_mn += 1 + while x_now < x_mx: + x_now += 1 + answer.append(snail_map[y_now][x_now]) + x_mx -= 1 + while y_now < y_mx: + y_now += 1 + answer.append(snail_map[y_now][x_now]) + y_mx -= 1 + while x_now > x_mn: + x_now -= 1 + answer.append(snail_map[y_now][x_now]) + x_mn += 1 + while y_now > y_mn: + y_now -= 1 + answer.append(snail_map[y_now][x_now]) + if x_mn > x_mx or y_mn > y_mx: + break + x_now += 1 + return answer \ No newline at end of file diff --git "a/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" "b/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" new file mode 100644 index 000000000..e293b8f52 --- /dev/null +++ "b/codewars/Sum of Digits - Digital Root/\320\235\320\276\320\274\320\265\321\200 5 - Sum of Digits.py" @@ -0,0 +1,8 @@ +def digital_root(n): + answer = 0 + while n > 0: + answer += n % 10 + n //= 10 + if answer // 10 != 0: + answer = digital_root(answer) + return answer diff --git "a/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" "b/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" new file mode 100644 index 000000000..87c093ed2 --- /dev/null +++ "b/codewars/Sum of Intervals/\320\235\320\276\320\274\320\265\321\200 10 - Sum of Intervals.py" @@ -0,0 +1,13 @@ +def sum_of_intervals(intervals): + sum_intervals = 0 + intervals = sorted(intervals, key=lambda x: x[0]) + interval_arr = [] + for i in intervals: + if not interval_arr or interval_arr[-1][1] < i[0]: + interval_arr.append([i[0], i[1]]) + else: + if interval_arr[-1][1] < i[1]: + interval_arr[-1][1] = i[1] + for i in interval_arr: + sum_intervals += i[1] - i[0] + return sum_intervals \ No newline at end of file diff --git "a/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" "b/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" new file mode 100644 index 000000000..626a3292b --- /dev/null +++ "b/codewars/Sum of pairs/\320\235\320\276\320\274\320\265\321\200 12 - Sum of Pairs.py" @@ -0,0 +1,6 @@ +def sum_pairs(ints, s): + answer = {} + for i in ints: + if s - i in answer: + return [s - i, i] + answer[i] = True \ No newline at end of file diff --git "a/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" "b/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" new file mode 100644 index 000000000..911eae074 --- /dev/null +++ "b/codewars/Tic-Tac-Toe Checker/\320\235\320\276\320\274\320\265\321\200 22 - Tic-Tac-Toe Checker.py" @@ -0,0 +1,20 @@ +def is_solved(board): + if board[0][0] == board[0][1] == board[0][2] and board[0][0] != 0: + return board[0][0] + if board[1][0] == board[1][1] == board[1][2] and board[1][0] != 0: + return board[1][0] + if board[2][0] == board[2][1] == board[2][2] and board[2][0] != 0: + return board[2][0] + if board[0][0] == board[1][0] == board[2][0] and board[0][0] != 0: + return board[0][0] + if board[0][1] == board[1][1] == board[2][1] and board[0][1] != 0: + return board[0][1] + if board[0][2] == board[1][2] == board[2][2] and board[0][2] != 0: + return board[0][2] + if board[0][0] == board[1][1] == board[2][2] and board[0][0] != 0: + return board[0][0] + if board[0][2] == board[1][1] == board[2][0] and board[0][2] != 0: + return board[0][2] + if 0 in board[0] or 0 in board[1] or 0 in board[2]: + return -1 + return 0 \ No newline at end of file diff --git "a/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" "b/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" new file mode 100644 index 000000000..4d3db0b48 --- /dev/null +++ "b/codewars/Valid Parentheses/\320\235\320\276\320\274\320\265\321\200 13 - Valid Parentheses.py" @@ -0,0 +1,12 @@ +def valid_parentheses(string): + count_open_brackets = 0 + for i in string: + if i == '(': + count_open_brackets += 1 + elif i == ')': + if count_open_brackets == 0: + return False + count_open_brackets -= 1 + if count_open_brackets == 0: + return True + return False \ No newline at end of file diff --git "a/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" "b/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" new file mode 100644 index 000000000..539c7306c --- /dev/null +++ "b/codewars/Where my anagrams at/\320\235\320\276\320\274\320\265\321\200 15 - Where my anagrams at.py" @@ -0,0 +1,15 @@ +def anagram_difference(w1, w2): + if type(w1) == str: + w1 = list(w1) + if type(w2) == str: + w2 = list(w2) + ln_w1 = len(w1) + ln_w2 = len(w2) + len_anagram = 0 + for i in w1: + if i in w2: + len_anagram += 1 + w2.remove(i) + if len_anagram == ln_w1 and len_anagram == ln_w2: + return True + return False \ No newline at end of file From c0cc5f6f4c1fd6aca542eafaefc6ff6829f4aa5d Mon Sep 17 00:00:00 2001 From: Lysov Dmitrii Date: Sat, 9 Nov 2024 18:08:48 +0300 Subject: [PATCH 07/18] lab1 + lab2 + superclass --- rpgsaga/saga/src/Lab1/formuls.ts | 19 ++++++ rpgsaga/saga/src/Lab1/output_lab1.ts | 19 ++++++ rpgsaga/saga/src/Lab2/Person_Class.ts | 56 +++++++++++++++++ .../saga/src/Lab2/Volleyball_player_Class.ts | 63 +++++++++++++++++++ rpgsaga/saga/src/Lab2/output_lab2.ts | 9 +++ rpgsaga/saga/src/index.ts | 1 - rpgsaga/saga/tests/TaskAB.spec.ts | 12 ++++ .../tests/Volleyball_player_Class.spec.ts | 54 ++++++++++++++++ rpgsaga/saga/tests/example.spec.ts | 2 +- rpgsaga/saga/tests/formul.spec.ts | 36 +++++++++++ 10 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 rpgsaga/saga/src/Lab1/formuls.ts create mode 100644 rpgsaga/saga/src/Lab1/output_lab1.ts create mode 100644 rpgsaga/saga/src/Lab2/Person_Class.ts create mode 100644 rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts create mode 100644 rpgsaga/saga/src/Lab2/output_lab2.ts delete mode 100644 rpgsaga/saga/src/index.ts create mode 100644 rpgsaga/saga/tests/TaskAB.spec.ts create mode 100644 rpgsaga/saga/tests/Volleyball_player_Class.spec.ts create mode 100644 rpgsaga/saga/tests/formul.spec.ts diff --git a/rpgsaga/saga/src/Lab1/formuls.ts b/rpgsaga/saga/src/Lab1/formuls.ts new file mode 100644 index 000000000..06624f907 --- /dev/null +++ b/rpgsaga/saga/src/Lab1/formuls.ts @@ -0,0 +1,19 @@ +export function formula(x: number, a: number = 1.6): number { + return Math.pow(a, (Math.pow(x, 2) - 1)) - Math.log10(Math.pow(x, 2) - 1) + Math.pow((Math.pow(x, 2) - 1), (1/3)); +} + +export function taskA(a: number, xstart: number, xend: number, xstep: number): number[] { + const y: number[] = []; + for (let i = xstart; i <= xend; i += xstep) { + y.push(formula(i, a)); + } + return y; +} + +export function taskB(a: number, arr: number[]): number[] { + const y: number[] = []; + for (let i of arr) { + y.push(formula(i, a)); + } + return y; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab1/output_lab1.ts b/rpgsaga/saga/src/Lab1/output_lab1.ts new file mode 100644 index 000000000..10224f217 --- /dev/null +++ b/rpgsaga/saga/src/Lab1/output_lab1.ts @@ -0,0 +1,19 @@ +import { formula, taskA, taskB } from "./formuls"; + +const a: number = 1.6; +console.log("Задача А"); +let xstart: number = 1.2; +let xend: number = 3.7; +let xstep: number = 0.5; +let yTaskA: number[] = taskA(a, xstart, xend, xstep); +for (let i of yTaskA) { + console.log(`y = ${i}`); +} + +console.log("Задача B"); +let arr: number[] = [1.28, 1.36, 2.47, 3.68, 4.56]; +let yTaskB: number[] = taskB(a, arr); +for (let i of yTaskB) { + console.log(`y = ${i}`); +} +console.log(formula(4.56)) \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab2/Person_Class.ts b/rpgsaga/saga/src/Lab2/Person_Class.ts new file mode 100644 index 000000000..9119d5816 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/Person_Class.ts @@ -0,0 +1,56 @@ +export abstract class Person { + private _name: String; + private _age: number; + private _gender: String; + private _height: number; + private _weight: number; + constructor( + name: String, + age: number, + gender: String, + height: number, + weight: number + ) { + this._name = name; + this.age = age; + this.gender = gender; + this._height = height; + this._weight = weight; + } + + public set age(value: number) { + if (value < 0 || value > 110) { + throw new Error(`Incorrect age`); + } else { + this._age = value; + } + } + + public set gender(value: String) { + if (value == "m" || value == "man" || value == "w" || value == "woman") { + this._gender = value; + } else { + throw new Error(`Incorrect gender`); + } + } + + public get name(): String { + return this._name; + } + + public get age(): number { + return this._age; + } + + public get gender(): String { + return this._gender; + } + + public get height(): number { + return this._height; + } + + public get weight(): number { + return this._weight; + } +} diff --git a/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts b/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts new file mode 100644 index 000000000..67c5cdbe1 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/Volleyball_player_Class.ts @@ -0,0 +1,63 @@ +import { Person } from "./Person_Class"; + +export class Volleyball_Player extends Person{ + private _position: String; + private _place_jumping: number; + private _running_jumping: number; + private _team: String; + constructor( + name: String, + age: number, + gender: String, + height: number, + weight: number, + position: String, + place_jumping: number, + running_jumping: number, + team: String + ) { + super(name, age, gender, height, weight) + this._position = position; + this.place_jumping = place_jumping; + this.running_jumping = running_jumping; + this._team = team; + } + + public set place_jumping(value: number) { + if (value > this.height) { + this._place_jumping = value; + } else { + throw new Error(`Incorrect place_jumping`) + } + } + + public set running_jumping(value: number) { + if (value > this.height) { + this._running_jumping = value; + } else { + throw new Error(`Incorrect running_jumping`) + } + } + + public get position(): String { + return this._position; + } + + public get running_jumping(): number { + return this._running_jumping; + } + + public get place_jumping(): number { + return this._place_jumping; + } + + public get team(): String { + return this._team; + } + + public view_player_parameters(): String { + return `Player ${this.name}:\n + Takeoff from a standing jump: ${this._place_jumping - this.height}\n + Takeoff on a running jump: ${this._running_jumping - this.height}` + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/Lab2/output_lab2.ts b/rpgsaga/saga/src/Lab2/output_lab2.ts new file mode 100644 index 000000000..e58a7e581 --- /dev/null +++ b/rpgsaga/saga/src/Lab2/output_lab2.ts @@ -0,0 +1,9 @@ +import { Volleyball_Player } from "./Volleyball_player_Class"; + +const human_1 = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); +const humsn_2 = new Volleyball_Player("Maria", 17, "woman", 170, 55, "Libero", 210, 240, 'ISUCT'); +console.log(human_1.view_player_parameters()); +console.log(humsn_2.view_player_parameters()); +humsn_2.place_jumping = 220; +humsn_2.running_jumping = 250; +console.log(humsn_2.view_player_parameters()); \ No newline at end of file diff --git a/rpgsaga/saga/src/index.ts b/rpgsaga/saga/src/index.ts deleted file mode 100644 index 7bc4a71de..000000000 --- a/rpgsaga/saga/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello world'); diff --git a/rpgsaga/saga/tests/TaskAB.spec.ts b/rpgsaga/saga/tests/TaskAB.spec.ts new file mode 100644 index 000000000..d3871721c --- /dev/null +++ b/rpgsaga/saga/tests/TaskAB.spec.ts @@ -0,0 +1,12 @@ +import { taskA, taskB } from "../src/Lab1/formuls"; + +describe('Tests of task A and task B', () => { + it('Func "taskA" return correct lenght', () => { + const y = taskA(1.6, 1.2, 3.7, 0.5); + expect(y).toHaveLength(6); + }); + it('Func "taskB" return correct lenght', () => { + const y = taskB(1.6, [1.28, 1.36, 2.47, 3.68, 4.56]); + expect(y).toHaveLength(5); + }) +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts b/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts new file mode 100644 index 000000000..d23c9ef00 --- /dev/null +++ b/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts @@ -0,0 +1,54 @@ +import { Volleyball_Player } from "../src/Lab2/Volleyball_player_Class"; + +describe("Volleyball_Player constructor tests", () => { + let person: Volleyball_Player; + beforeEach(() => { + person = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); + }); + it("Should create a person with correct properties", () => { + expect(person.name).toBe("Ivan"); + expect(person.age).toBe(19); + expect(person.gender).toBe("m"); + expect(person.height).toBe(181); + expect(person.weight).toBe(70); + expect(person.position).toBe("Setter"); + expect(person.place_jumping).toBe(295); + expect(person.running_jumping).toBe(320); + expect(person.team).toBe("ISUCT"); + }) + it ("Should throw Error if person's age < 0 or > 110", () => { + expect(() => { + person['age'] = -1; + }).toThrow(`Incorrect age`); + expect(() => { + person['age'] = 1000; + }).toThrow(`Incorrect age`); + }); + it ("Should throw Error if person's gender != 'm', 'w', 'man' or 'woman'", () => { + expect(() => { + person['gender'] = "human"; + }).toThrow(`Incorrect gender`); + }); + it ("Should throw Error if person's place_jumping < height", () => { + expect(() => { + person['place_jumping'] = 169; + }).toThrow(`Incorrect place_jumping`); + }); + it ("Should throw Error if person's running_jumping < height", () => { + expect(() => { + person['running_jumping'] = 179; + }).toThrow(`Incorrect running_jumping`); + }); +}); + +describe("Volleyball_Player methods tests", () => { + let person: Volleyball_Player; + beforeEach(() => { + person = new Volleyball_Player("Ivan", 19, 'm', 181, 70, "Setter", 295, 320, "ISUCT"); + }); + it('Should return the correct info about person', () => { + expect(person.view_player_parameters()).toBe(`Player ${person.name}:\n + Takeoff from a standing jump: ${person.place_jumping - person.height}\n + Takeoff on a running jump: ${person.running_jumping - person.height}`) + }); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/example.spec.ts b/rpgsaga/saga/tests/example.spec.ts index a86cfde79..117097b4b 100644 --- a/rpgsaga/saga/tests/example.spec.ts +++ b/rpgsaga/saga/tests/example.spec.ts @@ -4,4 +4,4 @@ describe('Example', () => { const b = 2; expect(a + b).toEqual(5); }); -}); +}); diff --git a/rpgsaga/saga/tests/formul.spec.ts b/rpgsaga/saga/tests/formul.spec.ts new file mode 100644 index 000000000..004b9456a --- /dev/null +++ b/rpgsaga/saga/tests/formul.spec.ts @@ -0,0 +1,36 @@ +import { formula } from "../src/Lab1/formuls"; + +describe('Test of func formul', () => { + it('Func "formul" return undefind if x = 0', () => { + let y: number = formula(0); + expect(y).toBeNaN() + }); + it('Func "formul" return undefind if x = 1', () => { + let y: number = formula(1); + expect(y).toBeDefined() + }); + it('Func "formul" return undefind if x = -1', () => { + let y: number = formula(-1); + expect(y).toBeDefined() + }); + it('Func "formul" return undefind if x = 0.5', () => { + let y: number = formula(0.5); + expect(y).toBeNaN() + }); + it('Func "formul" return undefind if x = -0.5', () => { + let y: number = formula(-0.5); + expect(y).toBeNaN() + }); + it('Func "formul" return if x = 1.2', () => { + let y = formula(1.2); + expect(y).toBeCloseTo(2.346) + }); + it('Func "formul" return undefind if x = 2.47', () => { + let y = formula(2.47); + expect(y).toBeCloseTo(12.008) + }); + it('Func "formul" return undefind if x = 4.56', () => { + let y = formula(4.56); + expect(y).toBeCloseTo(10972.99) + }); +}) \ No newline at end of file From dde2cc6c7956125614cc0f9e88853abff46e79bd Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Thu, 14 Nov 2024 16:04:56 +0300 Subject: [PATCH 08/18] Start rpgsaga --- rpgsaga/saga/src/lab3/Class_players/Archer.ts | 37 +++++++++++++ .../saga/src/lab3/Class_players/Class_hit.ts | 30 +++++++++++ rpgsaga/saga/src/lab3/Class_players/Mage.ts | 12 +++++ rpgsaga/saga/src/lab3/Class_players/Player.ts | 48 +++++++++++++++++ .../saga/src/lab3/Class_players/Warrior.ts | 40 ++++++++++++++ .../saga/src/lab3/Utils/ability_activation.ts | 13 +++++ rpgsaga/saga/src/lab3/Utils/random_v_arr.ts | 7 +++ rpgsaga/saga/src/lab3/Utils/random_weapon.ts | 7 +++ rpgsaga/saga/src/lab3/Weapon.ts | 20 +++++++ rpgsaga/saga/src/lab3/output_lab3.ts | 54 +++++++++++++++++++ rpgsaga/saga/src/lab3/test.ts | 0 11 files changed, 268 insertions(+) create mode 100644 rpgsaga/saga/src/lab3/Class_players/Archer.ts create mode 100644 rpgsaga/saga/src/lab3/Class_players/Class_hit.ts create mode 100644 rpgsaga/saga/src/lab3/Class_players/Mage.ts create mode 100644 rpgsaga/saga/src/lab3/Class_players/Player.ts create mode 100644 rpgsaga/saga/src/lab3/Class_players/Warrior.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/ability_activation.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/random_v_arr.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/random_weapon.ts create mode 100644 rpgsaga/saga/src/lab3/Weapon.ts create mode 100644 rpgsaga/saga/src/lab3/output_lab3.ts create mode 100644 rpgsaga/saga/src/lab3/test.ts diff --git a/rpgsaga/saga/src/lab3/Class_players/Archer.ts b/rpgsaga/saga/src/lab3/Class_players/Archer.ts new file mode 100644 index 000000000..e390b35e9 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Archer.ts @@ -0,0 +1,37 @@ +import { Player } from "./Player"; +import { Weapon } from "../Weapon"; +import { ability_activation } from "../Utils/ability_activation"; +import { Hit } from "./Class_hit"; + +export class Archer extends Player{ + private _magic_resistance: number; + constructor( + name: String, + weapon: Weapon, + health: number, + magic_armor: number + ) { + super(name, "Archer", weapon, health) + this._magic_resistance = magic_armor; + } + + public get magic_resistance(): number { + return this._magic_resistance; + } + + public attack(): Hit { + const hit = new Hit(this.weapon.damage, 'p', ability_activation(60)); + return hit; + } + + public taking_damage(hit: Hit) { + if (hit.control == true) { + this.stuuned_states = true; + } + if (hit.type_damage == "m") { + this.health = this.health - (Math.floor(hit.damage * ((100 - this._magic_resistance) / 100))) ; + } else if (hit.type_damage == "p"){ + this.health = this.health - hit.damage; + } + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Class_hit.ts b/rpgsaga/saga/src/lab3/Class_players/Class_hit.ts new file mode 100644 index 000000000..997ec6165 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Class_hit.ts @@ -0,0 +1,30 @@ +export class Hit{ + private _damage: number; + private _type_damage: string; + private _control: boolean; + constructor ( + damage: number, + type_damage: string, + control: boolean, + ) { + this._damage = damage; + this._type_damage = type_damage; + this._control = control; + }; + + public set damage(value: number) { + this._damage = value + } + + public get damage(): number { + return this._damage; + } + + public get type_damage(): string { + return this._type_damage; + } + + public get control(): boolean { + return this._control; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Mage.ts b/rpgsaga/saga/src/lab3/Class_players/Mage.ts new file mode 100644 index 000000000..77b5df593 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Mage.ts @@ -0,0 +1,12 @@ +import { Player } from "./Player"; +import { Weapon } from "../Weapon"; + +export class Mage extends Player{ + constructor( + name: String, + weapon: Weapon, + health: number, + ) { + super(name, "Mage", weapon, health) + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Player.ts b/rpgsaga/saga/src/lab3/Class_players/Player.ts new file mode 100644 index 000000000..8b25f5ff1 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Player.ts @@ -0,0 +1,48 @@ +import { Weapon } from "../Weapon"; + +export abstract class Player{ + private _name: String; + private _role: String; + private _weapon: Weapon; + private _health: number; + private _stuuned_states: boolean = false; + constructor( + name: String, + role: String, + weapon: Weapon, + health: number + ) { + this._name = name; + this._role = role; + this._weapon = weapon; + this._health = health; + } + + public set health(hp: number) { + this._health = hp; + } + + public set stuuned_states(state: boolean) { + this._stuuned_states = state; + } + + public get name(): String { + return this._name; + } + + public get role(): String { + return this._role; + } + + public get weapon(): Weapon { + return this._weapon; + } + + public get health(): number { + return this._health; + } + + public get stuuned_states(): boolean { + return this._stuuned_states; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Warrior.ts b/rpgsaga/saga/src/lab3/Class_players/Warrior.ts new file mode 100644 index 000000000..f5311b7ef --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Warrior.ts @@ -0,0 +1,40 @@ +import { Player } from "./Player"; +import { Weapon } from "../Weapon"; +import { ability_activation } from "../Utils/ability_activation"; +import { Hit } from "./Class_hit"; + +export class Warrior extends Player{ + private _physical_resistance: number; + constructor( + name: String, + weapon: Weapon, + health: number, + armor: number + ) { + super(name, "Warroir", weapon, health) + this._physical_resistance = armor; + } + + public get physical_resistance(): number { + return this._physical_resistance; + } + + public attack(): Hit { + const hit = new Hit(this.weapon.damage, 'p', false) + if (ability_activation(17) == true) { + hit.damage = Math.floor(hit.damage * 1.3); + } + return hit; + } + + public taking_damage(hit: Hit) { + if (hit.control == true) { + this.stuuned_states = true; + } + if (hit.type_damage == "p") { + this.health = this.health - (Math.floor(hit.damage * ((100 - this._physical_resistance) / 100))) ; + } else if (hit.type_damage == "m"){ + this.health = this.health - hit.damage; + } + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/ability_activation.ts b/rpgsaga/saga/src/lab3/Utils/ability_activation.ts new file mode 100644 index 000000000..908d12a59 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/ability_activation.ts @@ -0,0 +1,13 @@ +import { random_value_array } from "./random_v_arr"; + +export function ability_activation(chance_trigger: number): boolean { + const arr = new Array(100 - chance_trigger).fill(0); + const ones = new Array(chance_trigger).fill(1); + arr.push(...ones); + const fact: number = random_value_array(arr); + if (fact == 1) { + return true; + } else { + return false; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts b/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts new file mode 100644 index 000000000..100ce2b95 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts @@ -0,0 +1,7 @@ +export function random_value_array(arr: T[]): T | undefined { + if (arr.length === 0) { + return undefined; // Если массив пустой, возвращаем undefined + } + const randomIndex = Math.floor(Math.random() * arr.length); + return arr[randomIndex]; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts new file mode 100644 index 000000000..4dcdec0f5 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts @@ -0,0 +1,7 @@ +import { Wepon_damage } from "../output_lab3"; + +export function random_weapon(): string { + const weapons = Object.keys(Wepon_damage).filter(key => isNaN(Number(key))); + const randomIndex = Math.floor(Math.random() * weapons.length); + return weapons[randomIndex]; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Weapon.ts b/rpgsaga/saga/src/lab3/Weapon.ts new file mode 100644 index 000000000..ab2730db2 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Weapon.ts @@ -0,0 +1,20 @@ +import { Wepon_damage } from "./output_lab3"; + +export class Weapon{ + private _name: string; + private _damage: number; + constructor( + name: string, + ) { + this._name = name; + this._damage = Wepon_damage[name]; + } + + public get name(): String { + return this._name + } + + public get damage(): number { + return this._damage + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts new file mode 100644 index 000000000..a345994f0 --- /dev/null +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -0,0 +1,54 @@ +import { Warrior } from "./Class_players/Warrior"; +import { Archer } from "./Class_players/Archer"; +import { Mage } from "./Class_players/Mage"; +import { Weapon } from "./Weapon"; +import { random_value_array } from "./Utils/random_v_arr"; +import { random_weapon } from "./Utils/random_weapon"; +import { Hit } from "./Class_players/Class_hit"; +const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; +export enum Wepon_damage { + "Sword" = 10, + "Bow" = 15, +} +const weapon_1 = new Weapon(random_weapon()) +const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100, 20) +const weapon_2 = new Weapon(random_weapon()) +const pers_2 = new Archer(random_value_array(arr_name), weapon_2, 100, 20) +let k: number = 0 +while (true) { + if (k % 2 == 0) { + let attacker: Warrior = pers_1; + let defending: Archer = pers_2; + if (attacker.stuuned_states == false) { + const hit: Hit = attacker.attack(); + defending.taking_damage(hit) + console.log(`${attacker.name} (${attacker.role}, ${attacker.health} hp) наносит урон ${hit.damage} противнику ${defending.name} (${defending.role}, ${defending.health} hp)`); + } else { + attacker.stuuned_states = false; + console.log(`${attacker.name} (${attacker.role} ${attacker.health} hp) пропускает ход и выходит из оглушения`) + } + if (defending.health <= 0) { + console.log(`${defending.name} (${defending.role}) погибает`) + break + } else { + k++ + } + } else { + let attacker: Archer = pers_2; + let defending: Warrior = pers_1; + if (attacker.stuuned_states == false) { + const hit: Hit = attacker.attack(); + defending.taking_damage(hit) + console.log(`${attacker.name} (${attacker.role}, ${attacker.health} hp) наносит урон ${hit.damage} противнику ${defending.name} (${defending.role}, ${defending.health} hp)`); + } else { + attacker.stuuned_states = false; + console.log(`${attacker.name} (${attacker.role} ${attacker.health} hp) пропускает ход и выходит из оглушения`) + } + if (defending.health <= 0) { + console.log(`${defending.name} (${defending.role}) погибает`) + break + } else { + k++ + } + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/test.ts b/rpgsaga/saga/src/lab3/test.ts new file mode 100644 index 000000000..e69de29bb From a3b141c1599997008bf6df3032c5490bb4cdbf5c Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Tue, 19 Nov 2024 19:14:32 +0300 Subject: [PATCH 09/18] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lab3/{Class_players => }/Class_hit.ts | 0 rpgsaga/saga/src/lab3/Class_players/Archer.ts | 29 +++++------ rpgsaga/saga/src/lab3/Class_players/Mage.ts | 2 +- rpgsaga/saga/src/lab3/Class_players/Player.ts | 44 ++++++++++++++-- .../saga/src/lab3/Class_players/Warrior.ts | 25 ++++----- .../src/lab3/Class_weapon/Classes/Elf_Bow.ts | 7 +++ .../Class_weapon/Classes/Paladin_Shield.ts | 7 +++ rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts | 40 ++++++++++++++ rpgsaga/saga/src/lab3/Weapon.ts | 20 ------- rpgsaga/saga/src/lab3/fight.ts | 38 ++++++++++++++ rpgsaga/saga/src/lab3/output_lab3.ts | 52 +++---------------- 11 files changed, 166 insertions(+), 98 deletions(-) rename rpgsaga/saga/src/lab3/{Class_players => }/Class_hit.ts (100%) create mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts create mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts create mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts delete mode 100644 rpgsaga/saga/src/lab3/Weapon.ts create mode 100644 rpgsaga/saga/src/lab3/fight.ts diff --git a/rpgsaga/saga/src/lab3/Class_players/Class_hit.ts b/rpgsaga/saga/src/lab3/Class_hit.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Class_players/Class_hit.ts rename to rpgsaga/saga/src/lab3/Class_hit.ts diff --git a/rpgsaga/saga/src/lab3/Class_players/Archer.ts b/rpgsaga/saga/src/lab3/Class_players/Archer.ts index e390b35e9..918a9eb7a 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Archer.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Archer.ts @@ -1,26 +1,23 @@ import { Player } from "./Player"; -import { Weapon } from "../Weapon"; +import { Weapon } from "../Class_weapon/Weapon"; import { ability_activation } from "../Utils/ability_activation"; -import { Hit } from "./Class_hit"; +import { Hit } from "../Class_hit"; export class Archer extends Player{ - private _magic_resistance: number; + constructor( name: String, weapon: Weapon, health: number, - magic_armor: number - ) { - super(name, "Archer", weapon, health) - this._magic_resistance = magic_armor; - } - - public get magic_resistance(): number { - return this._magic_resistance; + ){ + super(name, "Archer", weapon, health, 10, 0) } public attack(): Hit { - const hit = new Hit(this.weapon.damage, 'p', ability_activation(60)); + const hit = new Hit(this.weapon.damage, 'p', false); + if (ability_activation(50) == true) { + hit.damage = Math.floor(hit.damage * 1.5); + } return hit; } @@ -28,10 +25,10 @@ export class Archer extends Player{ if (hit.control == true) { this.stuuned_states = true; } - if (hit.type_damage == "m") { - this.health = this.health - (Math.floor(hit.damage * ((100 - this._magic_resistance) / 100))) ; - } else if (hit.type_damage == "p"){ - this.health = this.health - hit.damage; + if (hit.type_damage == "p") { + this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; + } else if (hit.type_damage == "m"){ + this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); } } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Mage.ts b/rpgsaga/saga/src/lab3/Class_players/Mage.ts index 77b5df593..700e49727 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Mage.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Mage.ts @@ -1,5 +1,5 @@ import { Player } from "./Player"; -import { Weapon } from "../Weapon"; +import { Weapon } from "../Class_weapon/Weapon"; export class Mage extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Class_players/Player.ts b/rpgsaga/saga/src/lab3/Class_players/Player.ts index 8b25f5ff1..8c0d336d1 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Player.ts @@ -1,4 +1,5 @@ -import { Weapon } from "../Weapon"; +import { Weapon } from "../Class_weapon/Weapon"; +import { Hit } from "../Class_hit"; export abstract class Player{ private _name: String; @@ -6,16 +7,24 @@ export abstract class Player{ private _weapon: Weapon; private _health: number; private _stuuned_states: boolean = false; + private _physical_resistance: number; + private _magic_resistance: number; + private _ctit_chance: number; + private _crit_damage: number; constructor( name: String, role: String, weapon: Weapon, - health: number + health: number, + physical_resistance: number, + magic_resistance: number ) { this._name = name; this._role = role; this._weapon = weapon; this._health = health; + this._physical_resistance = physical_resistance; + this._magic_resistance = magic_resistance; } public set health(hp: number) { @@ -26,6 +35,14 @@ export abstract class Player{ this._stuuned_states = state; } + public set physical_resistance(value: number) { + this._physical_resistance = value; + } + + public set magic_resistance(value: number) { + this._magic_resistance = value; + } + public get name(): String { return this._name; } @@ -44,5 +61,26 @@ export abstract class Player{ public get stuuned_states(): boolean { return this._stuuned_states; - } + } + + public get physical_resistance(): number { + return this._physical_resistance; + } + + public get magic_resistance(): number { + return this._magic_resistance; + } + + public get crit_chance(): number { + return this._ctit_chance; + } + + public get crit_damage(): number { + return this._crit_damage; + } + + public attack(): Hit { + + const hit = new Hit(this.weapon.damage, this.weapon.type_damage, ) + } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Warrior.ts b/rpgsaga/saga/src/lab3/Class_players/Warrior.ts index f5311b7ef..2c5c48177 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Warrior.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Warrior.ts @@ -1,26 +1,23 @@ import { Player } from "./Player"; -import { Weapon } from "../Weapon"; +import { Weapon } from "../Class_weapon/Weapon"; import { ability_activation } from "../Utils/ability_activation"; -import { Hit } from "./Class_hit"; +import { Hit } from "../Class_hit"; +import { Paladin_Shield } from "../Class_weapon/Classes/Paladin_Shield"; +import { Elf_Bow } from "../Class_weapon/Classes/Elf_Bow"; export class Warrior extends Player{ - private _physical_resistance: number; + private _chance_ability: number = 20; constructor( name: String, weapon: Weapon, health: number, - armor: number - ) { - super(name, "Warroir", weapon, health) - this._physical_resistance = armor; - } - - public get physical_resistance(): number { - return this._physical_resistance; + ){ + super(name, "Warroir", weapon, health, 20, 20); + this.weapon.update_states(this); } public attack(): Hit { - const hit = new Hit(this.weapon.damage, 'p', false) + const hit = new Hit(this.weapon.damage, 'p', ability_activation(20)) if (ability_activation(17) == true) { hit.damage = Math.floor(hit.damage * 1.3); } @@ -32,9 +29,9 @@ export class Warrior extends Player{ this.stuuned_states = true; } if (hit.type_damage == "p") { - this.health = this.health - (Math.floor(hit.damage * ((100 - this._physical_resistance) / 100))) ; + this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; } else if (hit.type_damage == "m"){ - this.health = this.health - hit.damage; + this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); } } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts new file mode 100644 index 000000000..fd667020a --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts @@ -0,0 +1,7 @@ +import { Weapon } from "../Weapon"; +import { Player } from "../../Class_players/Player"; +export class Elf_Bow extends Weapon{ + constructor () { + super("Elf's bow", 40, [0, 1], [0, 1], 'pure') + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts new file mode 100644 index 000000000..84ff38f9a --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts @@ -0,0 +1,7 @@ +import { Weapon } from "../Weapon"; +import { Player } from "../../Class_players/Player"; +export class Paladin_Shield extends Weapon{ + constructor () { + super("Paladin's shield", 10, 'phys', [5, 2], [5, 2]) + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts b/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts new file mode 100644 index 000000000..0371e4387 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts @@ -0,0 +1,40 @@ +import { Wepon_damage } from "../output_lab3"; +import { Player } from "../Class_players/Player"; + +export class Weapon{ + private _name: string; + private _damage: number; + private _type_damage: String; + private _upgrade_ph_resist: [number, number]; + private _upgrade_mg_resist: [number, number]; + constructor( + name: string, + damage: number, + type_damage: String, + upgrade_ph_resist: [number, number], + upgrade_mg_resist: [number, number], + ) { + this._name = name; + this._damage = damage; + this._type_damage = type_damage; + this._upgrade_ph_resist = upgrade_ph_resist; + this._upgrade_mg_resist = upgrade_mg_resist; + } + + public get name(): String { + return this._name; + } + + public get damage(): number { + return this._damage; + } + + public get type_damage(): String { + return this._type_damage; + } + + public update_states(player: Player) { + player.physical_resistance = (player.physical_resistance + this._upgrade_ph_resist[0]) * this._upgrade_ph_resist[1]; + player.magic_resistance = (player.magic_resistance + this._upgrade_mg_resist[0]) * this._upgrade_mg_resist[1]; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Weapon.ts b/rpgsaga/saga/src/lab3/Weapon.ts deleted file mode 100644 index ab2730db2..000000000 --- a/rpgsaga/saga/src/lab3/Weapon.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Wepon_damage } from "./output_lab3"; - -export class Weapon{ - private _name: string; - private _damage: number; - constructor( - name: string, - ) { - this._name = name; - this._damage = Wepon_damage[name]; - } - - public get name(): String { - return this._name - } - - public get damage(): number { - return this._damage - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/fight.ts b/rpgsaga/saga/src/lab3/fight.ts new file mode 100644 index 000000000..463a41ab2 --- /dev/null +++ b/rpgsaga/saga/src/lab3/fight.ts @@ -0,0 +1,38 @@ +import { Player } from "./Class_players/Player"; +import { Warrior } from "./Class_players/Warrior"; +import { Archer } from "./Class_players/Archer"; +import { Mage } from "./Class_players/Mage"; +import { Hit } from "./Class_hit"; +export function fight(pers_1: Partial, pers_2: Partial) { + let k: number = 0; + while (true) { + if (k % 2 == 0) { + if (pers_1.stuuned_states == false) { + const hit: Hit = pers_1.attack(); + pers_2.taking_damage(hit) + console.log(`${pers_1.name} (${pers_1.role}, ${pers_1.health} hp) наносит урон ${hit.damage} противнику ${pers_2.name} (${pers_2.role}, ${pers_2.health} hp)`); + } else { + pers_1.stuuned_states = false; + console.log(`${pers_1.name} (${pers_1.role} ${pers_1.health} hp) пропускает ход и выходит из оглушения`) + } + if (pers_2.health <= 0) { + console.log(`${pers_2.name} (${pers_2.role}) погибает`) + break + } + } else if (k % 2 == 1) { + if (pers_2.stuuned_states == false) { + const hit: Hit = pers_2.attack(); + pers_1.taking_damage(hit) + console.log(`${pers_2.name} (${pers_2.role}, ${pers_2.health} hp) наносит урон ${hit.damage} противнику ${pers_1.name} (${pers_1.role}, ${pers_1.health} hp)`); + } else { + pers_2.stuuned_states = false; + console.log(`${pers_2.name} (${pers_2.role} ${pers_2.health} hp) пропускает ход и выходит из оглушения`) + } + if (pers_1.health <= 0) { + console.log(`${pers_1.name} (${pers_1.role}) погибает`) + break + } + } + k++; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index a345994f0..ae392a814 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,54 +1,18 @@ import { Warrior } from "./Class_players/Warrior"; import { Archer } from "./Class_players/Archer"; import { Mage } from "./Class_players/Mage"; -import { Weapon } from "./Weapon"; +import { Weapon } from "./Class_weapon/Weapon"; import { random_value_array } from "./Utils/random_v_arr"; import { random_weapon } from "./Utils/random_weapon"; -import { Hit } from "./Class_players/Class_hit"; +import { fight } from "./fight"; +import { Paladin_Shield } from "./Class_weapon/Classes/Paladin_Shield"; const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; export enum Wepon_damage { "Sword" = 10, "Bow" = 15, } -const weapon_1 = new Weapon(random_weapon()) -const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100, 20) -const weapon_2 = new Weapon(random_weapon()) -const pers_2 = new Archer(random_value_array(arr_name), weapon_2, 100, 20) -let k: number = 0 -while (true) { - if (k % 2 == 0) { - let attacker: Warrior = pers_1; - let defending: Archer = pers_2; - if (attacker.stuuned_states == false) { - const hit: Hit = attacker.attack(); - defending.taking_damage(hit) - console.log(`${attacker.name} (${attacker.role}, ${attacker.health} hp) наносит урон ${hit.damage} противнику ${defending.name} (${defending.role}, ${defending.health} hp)`); - } else { - attacker.stuuned_states = false; - console.log(`${attacker.name} (${attacker.role} ${attacker.health} hp) пропускает ход и выходит из оглушения`) - } - if (defending.health <= 0) { - console.log(`${defending.name} (${defending.role}) погибает`) - break - } else { - k++ - } - } else { - let attacker: Archer = pers_2; - let defending: Warrior = pers_1; - if (attacker.stuuned_states == false) { - const hit: Hit = attacker.attack(); - defending.taking_damage(hit) - console.log(`${attacker.name} (${attacker.role}, ${attacker.health} hp) наносит урон ${hit.damage} противнику ${defending.name} (${defending.role}, ${defending.health} hp)`); - } else { - attacker.stuuned_states = false; - console.log(`${attacker.name} (${attacker.role} ${attacker.health} hp) пропускает ход и выходит из оглушения`) - } - if (defending.health <= 0) { - console.log(`${defending.name} (${defending.role}) погибает`) - break - } else { - k++ - } - } -} \ No newline at end of file +const weapon_1 = new Paladin_Shield() +const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100) +console.log(pers_1.magic_resistance) +console.log(pers_1.physical_resistance) + From ad275d88ef45c3e66354c47d25baa6005d772550 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Sun, 15 Dec 2024 17:56:34 +0300 Subject: [PATCH 10/18] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20Player=20=D0=B8=20?= =?UTF-8?q?=D0=B8=D0=B4=D0=B5=D1=8E=20=D1=81=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B5=D0=B9=20=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BE=D0=B1=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Abilities/Archer_ability.ts | 8 +++ .../saga/src/lab3/Class_abilities/Ability.ts | 19 ++++++ .../lab3/Class_abilities/activatio_ability.ts | 16 +++++ rpgsaga/saga/src/lab3/Class_hit.ts | 7 ++- rpgsaga/saga/src/lab3/Class_players/Mage.ts | 12 ---- rpgsaga/saga/src/lab3/Class_players/Player.ts | 61 +++++++++++++------ .../Class_players/{ => Players}/Archer.ts | 8 +-- .../src/lab3/Class_players/Players/Mage.ts | 13 ++++ .../src/lab3/Class_players/Players/Warrior.ts | 14 +++++ .../saga/src/lab3/Class_players/Warrior.ts | 37 ----------- .../src/lab3/Class_weapon/Classes/Elf_Bow.ts | 7 --- .../Class_weapon/Classes/Paladin_Shield.ts | 7 --- rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts | 40 ------------ rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts | 57 +++++++++++++++++ .../src/lab3/Class_weapons/Weapons/Elf_Bow.ts | 6 ++ .../Class_weapons/Weapons/Paladin_Shield.ts | 6 ++ ...ility_activation.ts => check_operation.ts} | 2 +- rpgsaga/saga/src/lab3/fight.ts | 38 ------------ rpgsaga/saga/src/lab3/output_lab3.ts | 10 ++- 19 files changed, 196 insertions(+), 172 deletions(-) create mode 100644 rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts create mode 100644 rpgsaga/saga/src/lab3/Class_abilities/Ability.ts create mode 100644 rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_players/Mage.ts rename rpgsaga/saga/src/lab3/Class_players/{ => Players}/Archer.ts (81%) create mode 100644 rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts create mode 100644 rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_players/Warrior.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts create mode 100644 rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts create mode 100644 rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts create mode 100644 rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts rename rpgsaga/saga/src/lab3/Utils/{ability_activation.ts => check_operation.ts} (82%) diff --git a/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts new file mode 100644 index 000000000..a38541dca --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts @@ -0,0 +1,8 @@ +import { Ability } from "../Ability"; +import { Player } from "../../Class_players/Player"; +import { Hit } from "../../Class_hit"; + +export function activation_archer_ability(player: Player, hit: Hit): Hit { + hit.damage = hit.damage * player.crit_damage + return hit +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_abilities/Ability.ts b/rpgsaga/saga/src/lab3/Class_abilities/Ability.ts new file mode 100644 index 000000000..bef600cae --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_abilities/Ability.ts @@ -0,0 +1,19 @@ +export class Ability{ + private _change: number; + private _owner_ability: String; + constructor( + change: number, + owner_ability: string + ) { + this._change = change; + this._owner_ability = owner_ability; + } + + public get change_ability(): number { + return this._change + } + + public get owner_ability(): String { + return this._owner_ability + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts b/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts new file mode 100644 index 000000000..6bc31360b --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts @@ -0,0 +1,16 @@ +import { Ability } from "./Ability"; +import { Player } from "../Class_players/Player"; +import { Hit } from "../Class_hit"; +import { check_operation } from "../Utils/check_operation"; +import { activation_archer_ability } from "./Abilities/Archer_ability"; + +export function activation_ability(ability: Ability, player: Player, hit: Hit) { + if (check_operation(ability.change_ability)) { + if (ability.owner_ability == 'Archer') { + return activation_archer_ability(player, hit); + } + } else { + return hit + } + +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_hit.ts b/rpgsaga/saga/src/lab3/Class_hit.ts index 997ec6165..584d49a06 100644 --- a/rpgsaga/saga/src/lab3/Class_hit.ts +++ b/rpgsaga/saga/src/lab3/Class_hit.ts @@ -1,10 +1,11 @@ export class Hit{ private _damage: number; - private _type_damage: string; + private _type_damage: String; private _control: boolean; + // debuff constructor ( damage: number, - type_damage: string, + type_damage: String, control: boolean, ) { this._damage = damage; @@ -20,7 +21,7 @@ export class Hit{ return this._damage; } - public get type_damage(): string { + public get type_damage(): String { return this._type_damage; } diff --git a/rpgsaga/saga/src/lab3/Class_players/Mage.ts b/rpgsaga/saga/src/lab3/Class_players/Mage.ts deleted file mode 100644 index 700e49727..000000000 --- a/rpgsaga/saga/src/lab3/Class_players/Mage.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Player } from "./Player"; -import { Weapon } from "../Class_weapon/Weapon"; - -export class Mage extends Player{ - constructor( - name: String, - weapon: Weapon, - health: number, - ) { - super(name, "Mage", weapon, health) - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Player.ts b/rpgsaga/saga/src/lab3/Class_players/Player.ts index 8c0d336d1..beb627b87 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Player.ts @@ -1,30 +1,39 @@ -import { Weapon } from "../Class_weapon/Weapon"; +import { Weapon } from "../Class_weapons/Weapon"; import { Hit } from "../Class_hit"; +import { Ability } from "../Class_abilities/Ability"; +import { activation_ability } from "../Class_abilities/activatio_ability"; export abstract class Player{ private _name: String; private _role: String; - private _weapon: Weapon; private _health: number; - private _stuuned_states: boolean = false; + private _damage: number; + private _type_damage: String; private _physical_resistance: number; private _magic_resistance: number; - private _ctit_chance: number; private _crit_damage: number; + private _stuuned_states: boolean = false; + private _ability: Ability; + // status_debuff: new class constructor( name: String, role: String, weapon: Weapon, health: number, physical_resistance: number, - magic_resistance: number + magic_resistance: number, + crit_damage: number, + ability: Ability ) { this._name = name; this._role = role; - this._weapon = weapon; + this._damage = weapon.damage; + this._type_damage = weapon.type_damage this._health = health; - this._physical_resistance = physical_resistance; - this._magic_resistance = magic_resistance; + this._physical_resistance = (physical_resistance + weapon.increase_phys_resist) * weapon.multiplier_phys_resist; + this._magic_resistance = (magic_resistance + weapon.increase_magic_resist) * weapon.multiplier_magic_resist; + this._crit_damage = crit_damage; + this._ability = ability } public set health(hp: number) { @@ -51,14 +60,18 @@ export abstract class Player{ return this._role; } - public get weapon(): Weapon { - return this._weapon; - } - public get health(): number { return this._health; } + public get damage(): number { + return this._damage + } + + public get type_damage(): String { + return this._type_damage + } + public get stuuned_states(): boolean { return this._stuuned_states; } @@ -70,17 +83,31 @@ export abstract class Player{ public get magic_resistance(): number { return this._magic_resistance; } - - public get crit_chance(): number { - return this._ctit_chance; - } public get crit_damage(): number { return this._crit_damage; } + public get ability(): Ability { + return this._ability; + } + public attack(): Hit { + let hit = new Hit(this._damage, this._type_damage, false) + hit = activation_ability(this._ability, this, hit) + return hit + } - const hit = new Hit(this.weapon.damage, this.weapon.type_damage, ) + public taking_damage(hit: Hit) { + if (hit.control) { + this._stuuned_states = true; + } + if (hit.type_damage == 'pure') { + this._health -= hit.damage + } else if (hit.type_damage == "phys") { + this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; + } else if (hit.type_damage == "magic"){ + this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); + } } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Archer.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts similarity index 81% rename from rpgsaga/saga/src/lab3/Class_players/Archer.ts rename to rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts index 918a9eb7a..6627f80e1 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Archer.ts +++ b/rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts @@ -1,7 +1,7 @@ -import { Player } from "./Player"; -import { Weapon } from "../Class_weapon/Weapon"; -import { ability_activation } from "../Utils/ability_activation"; -import { Hit } from "../Class_hit"; +import { Player } from "../Player"; +import { Weapon } from "../../Class_weapons/Weapon"; +import { ability_activation } from "../../Utils/check_operation"; +import { Hit } from "../../Class_hit"; export class Archer extends Player{ diff --git a/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts new file mode 100644 index 000000000..e9d88668f --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts @@ -0,0 +1,13 @@ +import { Player } from "../Player"; +import { Weapon } from "../../Class_weapons/Weapon"; +import { Ability } from "../../Class_abilities/Ability"; + +export class Mage extends Player{ + constructor( + name: String, + weapon: Weapon, + health: number, + ) { + super(name, 'Archer', weapon, health, 5, 5, 50, new Ability(17, 'Archer')); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts new file mode 100644 index 000000000..b09d5fd0c --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts @@ -0,0 +1,14 @@ +import { Player } from "../Player"; +import { Weapon } from "../../Class_weapons/Weapon"; +import { Ability } from "../../Class_abilities/Ability"; + +export class Warrior extends Player{ + private _chance_ability: number = 20; + constructor( + name: String, + weapon: Weapon, + health: number, + ){ + super(name, 'Warrior', weapon, health, 20, 20, 1, new Ability(17, 'Warror')); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Warrior.ts b/rpgsaga/saga/src/lab3/Class_players/Warrior.ts deleted file mode 100644 index 2c5c48177..000000000 --- a/rpgsaga/saga/src/lab3/Class_players/Warrior.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Player } from "./Player"; -import { Weapon } from "../Class_weapon/Weapon"; -import { ability_activation } from "../Utils/ability_activation"; -import { Hit } from "../Class_hit"; -import { Paladin_Shield } from "../Class_weapon/Classes/Paladin_Shield"; -import { Elf_Bow } from "../Class_weapon/Classes/Elf_Bow"; - -export class Warrior extends Player{ - private _chance_ability: number = 20; - constructor( - name: String, - weapon: Weapon, - health: number, - ){ - super(name, "Warroir", weapon, health, 20, 20); - this.weapon.update_states(this); - } - - public attack(): Hit { - const hit = new Hit(this.weapon.damage, 'p', ability_activation(20)) - if (ability_activation(17) == true) { - hit.damage = Math.floor(hit.damage * 1.3); - } - return hit; - } - - public taking_damage(hit: Hit) { - if (hit.control == true) { - this.stuuned_states = true; - } - if (hit.type_damage == "p") { - this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; - } else if (hit.type_damage == "m"){ - this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); - } - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts deleted file mode 100644 index fd667020a..000000000 --- a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Elf_Bow.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Weapon } from "../Weapon"; -import { Player } from "../../Class_players/Player"; -export class Elf_Bow extends Weapon{ - constructor () { - super("Elf's bow", 40, [0, 1], [0, 1], 'pure') - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts deleted file mode 100644 index 84ff38f9a..000000000 --- a/rpgsaga/saga/src/lab3/Class_weapon/Classes/Paladin_Shield.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Weapon } from "../Weapon"; -import { Player } from "../../Class_players/Player"; -export class Paladin_Shield extends Weapon{ - constructor () { - super("Paladin's shield", 10, 'phys', [5, 2], [5, 2]) - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts b/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts deleted file mode 100644 index 0371e4387..000000000 --- a/rpgsaga/saga/src/lab3/Class_weapon/Weapon.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Wepon_damage } from "../output_lab3"; -import { Player } from "../Class_players/Player"; - -export class Weapon{ - private _name: string; - private _damage: number; - private _type_damage: String; - private _upgrade_ph_resist: [number, number]; - private _upgrade_mg_resist: [number, number]; - constructor( - name: string, - damage: number, - type_damage: String, - upgrade_ph_resist: [number, number], - upgrade_mg_resist: [number, number], - ) { - this._name = name; - this._damage = damage; - this._type_damage = type_damage; - this._upgrade_ph_resist = upgrade_ph_resist; - this._upgrade_mg_resist = upgrade_mg_resist; - } - - public get name(): String { - return this._name; - } - - public get damage(): number { - return this._damage; - } - - public get type_damage(): String { - return this._type_damage; - } - - public update_states(player: Player) { - player.physical_resistance = (player.physical_resistance + this._upgrade_ph_resist[0]) * this._upgrade_ph_resist[1]; - player.magic_resistance = (player.magic_resistance + this._upgrade_mg_resist[0]) * this._upgrade_mg_resist[1]; - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts b/rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts new file mode 100644 index 000000000..5314c20d6 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts @@ -0,0 +1,57 @@ +import { Wepon_damage } from "../output_lab3"; +import { Player } from "../Class_players/Player"; + +export class Weapon{ + private _name: string; + private _damage: number; + private _type_damage: String; + private _increase_phys_resist: number; + private _multiplier_phys_resist: number; + private _increase_magic_resist: number; + private _multiplier_magic_resist: number; + constructor( + name: string, + damage: number, + type_damage: String, + increase_phys_resist: number, + multiplier_phys_resist: number, + increase_magic_resist: number, + multiplier_magic_resist: number + ) { + this._name = name; + this._damage = damage; + this._type_damage = type_damage; + this._increase_phys_resist = increase_phys_resist; + this._multiplier_phys_resist = multiplier_phys_resist; + this._increase_magic_resist = increase_magic_resist; + this._multiplier_magic_resist = multiplier_magic_resist; + } + + public get name(): String { + return this._name; + } + + public get damage(): number { + return this._damage; + } + + public get type_damage(): String { + return this._type_damage; + } + + public get increase_phys_resist(): number { + return this._increase_phys_resist; + } + + public get multiplier_phys_resist(): number { + return this._multiplier_phys_resist; + } + + public get increase_magic_resist(): number { + return this._increase_magic_resist; + } + + public get multiplier_magic_resist(): number { + return this._multiplier_magic_resist; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts new file mode 100644 index 000000000..9c45a4acc --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts @@ -0,0 +1,6 @@ +import { Weapon } from "../Weapon"; +export class Elf_Bow extends Weapon{ + constructor () { + super("Elf's bow", 40, 'pure', 0, 1, 0, 1) + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts new file mode 100644 index 000000000..8ebb6ca31 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts @@ -0,0 +1,6 @@ +import { Weapon } from "../Weapon"; +export class Paladin_Shield extends Weapon{ + constructor () { + super("Paladin's shield", 10, 'phys', 5, 2, 5, 2) + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/ability_activation.ts b/rpgsaga/saga/src/lab3/Utils/check_operation.ts similarity index 82% rename from rpgsaga/saga/src/lab3/Utils/ability_activation.ts rename to rpgsaga/saga/src/lab3/Utils/check_operation.ts index 908d12a59..1ad4ce23f 100644 --- a/rpgsaga/saga/src/lab3/Utils/ability_activation.ts +++ b/rpgsaga/saga/src/lab3/Utils/check_operation.ts @@ -1,6 +1,6 @@ import { random_value_array } from "./random_v_arr"; -export function ability_activation(chance_trigger: number): boolean { +export function check_operation(chance_trigger: number): boolean { const arr = new Array(100 - chance_trigger).fill(0); const ones = new Array(chance_trigger).fill(1); arr.push(...ones); diff --git a/rpgsaga/saga/src/lab3/fight.ts b/rpgsaga/saga/src/lab3/fight.ts index 463a41ab2..e69de29bb 100644 --- a/rpgsaga/saga/src/lab3/fight.ts +++ b/rpgsaga/saga/src/lab3/fight.ts @@ -1,38 +0,0 @@ -import { Player } from "./Class_players/Player"; -import { Warrior } from "./Class_players/Warrior"; -import { Archer } from "./Class_players/Archer"; -import { Mage } from "./Class_players/Mage"; -import { Hit } from "./Class_hit"; -export function fight(pers_1: Partial, pers_2: Partial) { - let k: number = 0; - while (true) { - if (k % 2 == 0) { - if (pers_1.stuuned_states == false) { - const hit: Hit = pers_1.attack(); - pers_2.taking_damage(hit) - console.log(`${pers_1.name} (${pers_1.role}, ${pers_1.health} hp) наносит урон ${hit.damage} противнику ${pers_2.name} (${pers_2.role}, ${pers_2.health} hp)`); - } else { - pers_1.stuuned_states = false; - console.log(`${pers_1.name} (${pers_1.role} ${pers_1.health} hp) пропускает ход и выходит из оглушения`) - } - if (pers_2.health <= 0) { - console.log(`${pers_2.name} (${pers_2.role}) погибает`) - break - } - } else if (k % 2 == 1) { - if (pers_2.stuuned_states == false) { - const hit: Hit = pers_2.attack(); - pers_1.taking_damage(hit) - console.log(`${pers_2.name} (${pers_2.role}, ${pers_2.health} hp) наносит урон ${hit.damage} противнику ${pers_1.name} (${pers_1.role}, ${pers_1.health} hp)`); - } else { - pers_2.stuuned_states = false; - console.log(`${pers_2.name} (${pers_2.role} ${pers_2.health} hp) пропускает ход и выходит из оглушения`) - } - if (pers_1.health <= 0) { - console.log(`${pers_1.name} (${pers_1.role}) погибает`) - break - } - } - k++; - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index ae392a814..ad17e0381 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,11 +1,9 @@ -import { Warrior } from "./Class_players/Warrior"; -import { Archer } from "./Class_players/Archer"; -import { Mage } from "./Class_players/Mage"; -import { Weapon } from "./Class_weapon/Weapon"; +import { Warrior } from "./Class_players/Players/Warrior"; +import { Archer } from "./Class_players/Players/Archer"; +import { Weapon } from "./Class_weapons/Weapon"; import { random_value_array } from "./Utils/random_v_arr"; import { random_weapon } from "./Utils/random_weapon"; -import { fight } from "./fight"; -import { Paladin_Shield } from "./Class_weapon/Classes/Paladin_Shield"; +import { Paladin_Shield } from "./Class_weapons/Weapons/Paladin_Shield"; const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; export enum Wepon_damage { "Sword" = 10, From 2ebdcf881b17abd2dedab76d17744fe8de99010f Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Thu, 19 Dec 2024 17:23:25 +0300 Subject: [PATCH 11/18] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=D1=85=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Abilities/Archer_ability.ts | 8 --- .../lab3/Class_abilities/activatio_ability.ts | 16 ------ rpgsaga/saga/src/lab3/Class_hit.ts | 7 ++- .../src/lab3/Class_players/Players/Archer.ts | 34 ------------ .../src/lab3/Class_players/Players/Mage.ts | 13 ----- .../src/lab3/Class_players/Players/Warrior.ts | 14 ----- .../src/lab3/Class_weapons/Weapons/Elf_Bow.ts | 6 --- .../Class_weapons/Weapons/Paladin_Shield.ts | 6 --- .../Abilities/Archer_ability.ts | 7 +++ .../Abilities/Mage_ability.ts | 8 +++ .../Abilities/Staff_Santa_ability.ts | 7 +++ .../Abilities/Warrior_ability.ts | 7 +++ .../Ability.ts | 10 ++-- .../lab3/Classes_abilities/using_abilities.ts | 26 +++++++++ .../saga/src/lab3/Classes_debuff/Debuff.ts | 47 ++++++++++++++++ .../lab3/Classes_debuff/Debuffs/Burning.ts | 8 +++ .../Player.ts | 53 ++++++++++++------- .../lab3/Classes_players/Players/Archer.ts | 15 ++++++ .../src/lab3/Classes_players/Players/Mage.ts | 15 ++++++ .../lab3/Classes_players/Players/Warrior.ts | 15 ++++++ .../Weapon.ts | 13 +++-- .../lab3/Classes_weapons/Weapons/Elf_Bow.ts | 10 ++++ .../Classes_weapons/Weapons/Paladin_Shield.ts | 10 ++++ .../Weapons/Staff_Santa_Claus.ts | 10 ++++ rpgsaga/saga/src/lab3/Utils/list_abilities.ts | 7 +++ .../saga/src/lab3/Utils/list_damage_types.ts | 5 ++ rpgsaga/saga/src/lab3/Utils/list_roles.ts | 5 ++ rpgsaga/saga/src/lab3/Utils/list_weapons.ts | 5 ++ rpgsaga/saga/src/lab3/Utils/random_weapon.ts | 2 +- rpgsaga/saga/src/lab3/output_lab3.ts | 24 ++++----- 30 files changed, 273 insertions(+), 140 deletions(-) delete mode 100644 rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts delete mode 100644 rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts rename rpgsaga/saga/src/lab3/{Class_abilities => Classes_abilities}/Ability.ts (54%) create mode 100644 rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts rename rpgsaga/saga/src/lab3/{Class_players => Classes_players}/Player.ts (66%) create mode 100644 rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts rename rpgsaga/saga/src/lab3/{Class_weapons => Classes_weapons}/Weapon.ts (82%) create mode 100644 rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts create mode 100644 rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/list_abilities.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/list_damage_types.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/list_roles.ts create mode 100644 rpgsaga/saga/src/lab3/Utils/list_weapons.ts diff --git a/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts deleted file mode 100644 index a38541dca..000000000 --- a/rpgsaga/saga/src/lab3/Class_abilities/Abilities/Archer_ability.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Ability } from "../Ability"; -import { Player } from "../../Class_players/Player"; -import { Hit } from "../../Class_hit"; - -export function activation_archer_ability(player: Player, hit: Hit): Hit { - hit.damage = hit.damage * player.crit_damage - return hit -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts b/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts deleted file mode 100644 index 6bc31360b..000000000 --- a/rpgsaga/saga/src/lab3/Class_abilities/activatio_ability.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Ability } from "./Ability"; -import { Player } from "../Class_players/Player"; -import { Hit } from "../Class_hit"; -import { check_operation } from "../Utils/check_operation"; -import { activation_archer_ability } from "./Abilities/Archer_ability"; - -export function activation_ability(ability: Ability, player: Player, hit: Hit) { - if (check_operation(ability.change_ability)) { - if (ability.owner_ability == 'Archer') { - return activation_archer_ability(player, hit); - } - } else { - return hit - } - -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_hit.ts b/rpgsaga/saga/src/lab3/Class_hit.ts index 584d49a06..766c4f3fe 100644 --- a/rpgsaga/saga/src/lab3/Class_hit.ts +++ b/rpgsaga/saga/src/lab3/Class_hit.ts @@ -2,7 +2,6 @@ export class Hit{ private _damage: number; private _type_damage: String; private _control: boolean; - // debuff constructor ( damage: number, type_damage: String, @@ -14,7 +13,11 @@ export class Hit{ }; public set damage(value: number) { - this._damage = value + this._damage = value; + } + + public set control(value: boolean) { + this._control = value; } public get damage(): number { diff --git a/rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts deleted file mode 100644 index 6627f80e1..000000000 --- a/rpgsaga/saga/src/lab3/Class_players/Players/Archer.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Player } from "../Player"; -import { Weapon } from "../../Class_weapons/Weapon"; -import { ability_activation } from "../../Utils/check_operation"; -import { Hit } from "../../Class_hit"; - -export class Archer extends Player{ - - constructor( - name: String, - weapon: Weapon, - health: number, - ){ - super(name, "Archer", weapon, health, 10, 0) - } - - public attack(): Hit { - const hit = new Hit(this.weapon.damage, 'p', false); - if (ability_activation(50) == true) { - hit.damage = Math.floor(hit.damage * 1.5); - } - return hit; - } - - public taking_damage(hit: Hit) { - if (hit.control == true) { - this.stuuned_states = true; - } - if (hit.type_damage == "p") { - this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; - } else if (hit.type_damage == "m"){ - this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); - } - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts deleted file mode 100644 index e9d88668f..000000000 --- a/rpgsaga/saga/src/lab3/Class_players/Players/Mage.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Player } from "../Player"; -import { Weapon } from "../../Class_weapons/Weapon"; -import { Ability } from "../../Class_abilities/Ability"; - -export class Mage extends Player{ - constructor( - name: String, - weapon: Weapon, - health: number, - ) { - super(name, 'Archer', weapon, health, 5, 5, 50, new Ability(17, 'Archer')); - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts deleted file mode 100644 index b09d5fd0c..000000000 --- a/rpgsaga/saga/src/lab3/Class_players/Players/Warrior.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Player } from "../Player"; -import { Weapon } from "../../Class_weapons/Weapon"; -import { Ability } from "../../Class_abilities/Ability"; - -export class Warrior extends Player{ - private _chance_ability: number = 20; - constructor( - name: String, - weapon: Weapon, - health: number, - ){ - super(name, 'Warrior', weapon, health, 20, 20, 1, new Ability(17, 'Warror')); - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts deleted file mode 100644 index 9c45a4acc..000000000 --- a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Elf_Bow.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Weapon } from "../Weapon"; -export class Elf_Bow extends Weapon{ - constructor () { - super("Elf's bow", 40, 'pure', 0, 1, 0, 1) - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts deleted file mode 100644 index 8ebb6ca31..000000000 --- a/rpgsaga/saga/src/lab3/Class_weapons/Weapons/Paladin_Shield.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Weapon } from "../Weapon"; -export class Paladin_Shield extends Weapon{ - constructor () { - super("Paladin's shield", 10, 'phys', 5, 2, 5, 2) - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts new file mode 100644 index 000000000..214e5c207 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts @@ -0,0 +1,7 @@ +import { Player } from "../../Classes_players/Player"; +import { Hit } from "../../Class_hit"; + +export function activation_archer_ability(player: Player, hit: Hit): Hit { + hit.damage = hit.damage * player.crit_damage; + return hit; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts new file mode 100644 index 000000000..f7c36520d --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts @@ -0,0 +1,8 @@ +import { Player } from "../../Classes_players/Player"; +import { Hit } from "../../Class_hit"; +import { Burning } from "../../Classes_debuff/Debuffs/Burning"; + +export function activation_mage_ability(player: Player, hit: Hit): Hit { + player.add_debuff(new Burning()); + return hit; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts new file mode 100644 index 000000000..7774cdb48 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts @@ -0,0 +1,7 @@ +import { Player } from "../../Classes_players/Player"; +import { Hit } from "../../Class_hit"; + +export function activation_staff_santa_ability(player: Player, hit: Hit): Hit { + hit.control = true; + return hit; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts new file mode 100644 index 000000000..9bb8ebcf4 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts @@ -0,0 +1,7 @@ +import { Player } from "../../Classes_players/Player"; +import { Hit } from "../../Class_hit"; + +export function activation_warriro_ability(player: Player, hit: Hit): Hit { + hit.damage = hit.damage + Math.floor((player.physical_resistance + player.magic_resistance) * 0.5); + return hit; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_abilities/Ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Ability.ts similarity index 54% rename from rpgsaga/saga/src/lab3/Class_abilities/Ability.ts rename to rpgsaga/saga/src/lab3/Classes_abilities/Ability.ts index bef600cae..403512a0c 100644 --- a/rpgsaga/saga/src/lab3/Class_abilities/Ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Ability.ts @@ -1,19 +1,19 @@ export class Ability{ private _change: number; - private _owner_ability: String; + private _name_ability: String; constructor( change: number, - owner_ability: string + name_ability: string ) { this._change = change; - this._owner_ability = owner_ability; + this._name_ability = name_ability; } public get change_ability(): number { return this._change } - public get owner_ability(): String { - return this._owner_ability + public get name_ability(): String { + return this._name_ability } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts b/rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts new file mode 100644 index 000000000..ea3c7a938 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts @@ -0,0 +1,26 @@ +import { Ability } from "./Ability"; +import { Player } from "../Classes_players/Player"; +import { Hit } from "../Class_hit"; +import { check_operation } from "../Utils/check_operation"; +import { activation_archer_ability } from "./Abilities/Archer_ability"; +import { activation_mage_ability } from "./Abilities/Mage_ability"; +import { activation_staff_santa_ability } from "./Abilities/Staff_Santa_ability"; +import { activation_warriro_ability } from "./Abilities/Warrior_ability"; +import { ability_names } from "../Utils/list_abilities"; + +export function activation_ability(abilities: (Ability)[], player: Player, hit: Hit) { + for (let ability of abilities) { + if (check_operation(ability.change_ability)) { + if (ability.name_ability == ability_names.archer_ability) { + hit = activation_archer_ability(player, hit); + } else if (ability.name_ability == ability_names.warrior_ability) { + hit = activation_warriro_ability(player, hit); + } else if (ability.name_ability == ability_names.mage_ability) { + hit = activation_mage_ability(player, hit); + } else if (ability.name_ability == ability_names.staff_santa) { + hit = activation_staff_santa_ability(player, hit); + } + } + } + return hit; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts b/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts new file mode 100644 index 000000000..1c67e5250 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts @@ -0,0 +1,47 @@ +import { Hit } from "../Class_hit"; + +export abstract class Debuff{ + private _total_duration: number; + private _duration: number; + private _damage: number; + private _type_damage: String; + private _stunning: boolean; + constructor( + total_duration: number, + duration: number, + damage: number, + type_damage: String, + stunning: boolean + ) { + this._total_duration = total_duration; + this._duration = duration; + this._damage = damage; + this._type_damage = type_damage; + this._stunning = stunning; + } + + public set duration(value: number) { + this._duration = value; + } + + public get total_duration(): number { + return this._total_duration; + } + + public get duration(): number { + return this._duration; + } + + public get damage(): number { + return this._damage + } + + public get type_damage(): String { + return this._type_damage + } + + public activate_debuff(): Hit { + const hit = new Hit(this._damage, this._type_damage, this._stunning); + return hit; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts b/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts new file mode 100644 index 000000000..5a9584079 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts @@ -0,0 +1,8 @@ +import { Debuff } from "../Debuff"; +import { damage_types } from "../../Utils/list_damage_types"; + +export class Burning extends Debuff{ + constructor() { + super(3, 0, 10, damage_types.mag, false); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_players/Player.ts b/rpgsaga/saga/src/lab3/Classes_players/Player.ts similarity index 66% rename from rpgsaga/saga/src/lab3/Class_players/Player.ts rename to rpgsaga/saga/src/lab3/Classes_players/Player.ts index beb627b87..48ac2bb5f 100644 --- a/rpgsaga/saga/src/lab3/Class_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Player.ts @@ -1,20 +1,21 @@ -import { Weapon } from "../Class_weapons/Weapon"; +import { Weapon } from "../Classes_weapons/Weapon"; import { Hit } from "../Class_hit"; -import { Ability } from "../Class_abilities/Ability"; -import { activation_ability } from "../Class_abilities/activatio_ability"; +import { Ability } from "../Classes_abilities/Ability"; +import { activation_ability } from "../Classes_abilities/using_abilities"; +import { Debuff } from "../Classes_debuff/Debuff"; +import { damage_types } from "../Utils/list_damage_types"; export abstract class Player{ private _name: String; private _role: String; + private _weapon: Weapon; private _health: number; - private _damage: number; - private _type_damage: String; private _physical_resistance: number; private _magic_resistance: number; private _crit_damage: number; private _stuuned_states: boolean = false; private _ability: Ability; - // status_debuff: new class + private _debuffs: (Debuff)[] = []; constructor( name: String, role: String, @@ -27,13 +28,12 @@ export abstract class Player{ ) { this._name = name; this._role = role; - this._damage = weapon.damage; - this._type_damage = weapon.type_damage + this._weapon = weapon; this._health = health; this._physical_resistance = (physical_resistance + weapon.increase_phys_resist) * weapon.multiplier_phys_resist; this._magic_resistance = (magic_resistance + weapon.increase_magic_resist) * weapon.multiplier_magic_resist; this._crit_damage = crit_damage; - this._ability = ability + this._ability = ability; } public set health(hp: number) { @@ -52,6 +52,14 @@ export abstract class Player{ this._magic_resistance = value; } + public add_debuff(debuff: Debuff){ + this._debuffs.push(debuff); + } + + public clear_debaffs() { + this._debuffs.length = 0; + } + public get name(): String { return this._name; } @@ -65,11 +73,11 @@ export abstract class Player{ } public get damage(): number { - return this._damage + return this._weapon.damage } public get type_damage(): String { - return this._type_damage + return this._weapon.type_damage } public get stuuned_states(): boolean { @@ -88,13 +96,9 @@ export abstract class Player{ return this._crit_damage; } - public get ability(): Ability { - return this._ability; - } - public attack(): Hit { - let hit = new Hit(this._damage, this._type_damage, false) - hit = activation_ability(this._ability, this, hit) + let hit = new Hit(this._weapon.damage, this._weapon.type_damage, false) + hit = activation_ability([this._ability, this._weapon.ability], this, hit) return hit } @@ -102,12 +106,21 @@ export abstract class Player{ if (hit.control) { this._stuuned_states = true; } - if (hit.type_damage == 'pure') { + if (hit.type_damage == damage_types.pure) { this._health -= hit.damage - } else if (hit.type_damage == "phys") { + } else if (hit.type_damage == damage_types.phys) { this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; - } else if (hit.type_damage == "magic"){ + } else if (hit.type_damage == damage_types.mag){ this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); } } + + public activate_debaffs() { + for (let debuff of this._debuffs) { + if (debuff.duration > 0) { + this.taking_damage(debuff.activate_debuff()); + debuff.duration = debuff.duration - 1; + } + } + } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts new file mode 100644 index 000000000..5364d544e --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts @@ -0,0 +1,15 @@ +import { Player } from "../Player"; +import { Weapon } from "../../Classes_weapons/Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { ability_names } from "../../Utils/list_abilities"; +import { role_names } from "../../Utils/list_roles"; + +export class Archer extends Player{ + constructor( + name: String, + weapon: Weapon, + health: number, + ) { + super(name, role_names.archer, weapon, health, 5, 5, 50, new Ability(17, ability_names.archer_ability)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts new file mode 100644 index 000000000..80043ea1a --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts @@ -0,0 +1,15 @@ +import { Player } from "../Player"; +import { Weapon } from "../../Classes_weapons/Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { ability_names } from "../../Utils/list_abilities"; +import { role_names } from "../../Utils/list_roles"; + +export class Mage extends Player{ + constructor( + name: String, + weapon: Weapon, + health: number, + ) { + super(name, role_names.mage, weapon, health, 10, 10, 1, new Ability(17, ability_names.mage_ability)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts new file mode 100644 index 000000000..d7f9ac7c3 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts @@ -0,0 +1,15 @@ +import { Player } from "../Player"; +import { Weapon } from "../../Classes_weapons/Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { ability_names } from "../../Utils/list_abilities"; +import { role_names } from "../../Utils/list_roles"; + +export class Warrior extends Player{ + constructor( + name: String, + weapon: Weapon, + health: number, + ){ + super(name, role_names.warrior, weapon, health, 20, 20, 1, new Ability(20, ability_names.warrior_ability)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapon.ts similarity index 82% rename from rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts rename to rpgsaga/saga/src/lab3/Classes_weapons/Weapon.ts index 5314c20d6..21747a0da 100644 --- a/rpgsaga/saga/src/lab3/Class_weapons/Weapon.ts +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapon.ts @@ -1,5 +1,5 @@ -import { Wepon_damage } from "../output_lab3"; -import { Player } from "../Class_players/Player"; +import { Player } from "../Classes_players/Player"; +import { Ability } from "../Classes_abilities/Ability"; export class Weapon{ private _name: string; @@ -9,6 +9,7 @@ export class Weapon{ private _multiplier_phys_resist: number; private _increase_magic_resist: number; private _multiplier_magic_resist: number; + private _ability: Ability; constructor( name: string, damage: number, @@ -16,7 +17,8 @@ export class Weapon{ increase_phys_resist: number, multiplier_phys_resist: number, increase_magic_resist: number, - multiplier_magic_resist: number + multiplier_magic_resist: number, + ability: Ability ) { this._name = name; this._damage = damage; @@ -25,6 +27,7 @@ export class Weapon{ this._multiplier_phys_resist = multiplier_phys_resist; this._increase_magic_resist = increase_magic_resist; this._multiplier_magic_resist = multiplier_magic_resist; + this._ability = ability; } public get name(): String { @@ -54,4 +57,8 @@ export class Weapon{ public get multiplier_magic_resist(): number { return this._multiplier_magic_resist; } + + public get ability(): Ability { + return this._ability; + } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts new file mode 100644 index 000000000..23ed42146 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts @@ -0,0 +1,10 @@ +import { Weapon } from "../Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { weapons_names } from "../../Utils/list_weapons"; +import { damage_types } from "../../Utils/list_damage_types"; +import { ability_names } from "../../Utils/list_abilities"; +export class Elf_Bow extends Weapon{ + constructor () { + super(weapons_names.elf_bow, 40, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts new file mode 100644 index 000000000..27821b38a --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts @@ -0,0 +1,10 @@ +import { Weapon } from "../Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { weapons_names } from "../../Utils/list_weapons"; +import { damage_types } from "../../Utils/list_damage_types"; +import { ability_names } from "../../Utils/list_abilities"; +export class Paladin_Shield extends Weapon{ + constructor () { + super(weapons_names.paladin_sheild, 10, damage_types.phys, 5, 2, 5, 2, new Ability(0, ability_names.empty)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts new file mode 100644 index 000000000..c9215041a --- /dev/null +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts @@ -0,0 +1,10 @@ +import { Weapon } from "../Weapon"; +import { Ability } from "../../Classes_abilities/Ability"; +import { weapons_names } from "../../Utils/list_weapons"; +import { damage_types } from "../../Utils/list_damage_types"; +import { ability_names } from "../../Utils/list_abilities"; +export class Staff_Santa_Claus extends Weapon{ + constructor () { + super(weapons_names.staff_santa, 10, damage_types.mag, 5, 2, 5, 2, new Ability(20, ability_names.staff_santa)); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/list_abilities.ts b/rpgsaga/saga/src/lab3/Utils/list_abilities.ts new file mode 100644 index 000000000..1388697b8 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/list_abilities.ts @@ -0,0 +1,7 @@ +export enum ability_names{ + empty = "empty", + archer_ability = "archer_ability", + warrior_ability = "warrior_ability", + mage_ability = "mage_ability", + staff_santa = "staff_santa_ability" +} diff --git a/rpgsaga/saga/src/lab3/Utils/list_damage_types.ts b/rpgsaga/saga/src/lab3/Utils/list_damage_types.ts new file mode 100644 index 000000000..137145533 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/list_damage_types.ts @@ -0,0 +1,5 @@ +export enum damage_types{ + pure = "pure", + phys = "physical", + mag = "magical" +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/list_roles.ts b/rpgsaga/saga/src/lab3/Utils/list_roles.ts new file mode 100644 index 000000000..c00705593 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/list_roles.ts @@ -0,0 +1,5 @@ +export enum role_names{ + archer = "Archer", + warrior = "Warrior", + mage = "Mage" +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/list_weapons.ts b/rpgsaga/saga/src/lab3/Utils/list_weapons.ts new file mode 100644 index 000000000..c54b03592 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/list_weapons.ts @@ -0,0 +1,5 @@ +export enum weapons_names{ + elf_bow = "Elf`s bow", + paladin_sheild = "Paladin`s shield", + staff_santa = "Santa Claus`s staff" +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts index 4dcdec0f5..1749b733c 100644 --- a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts +++ b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts @@ -1,4 +1,4 @@ -import { Wepon_damage } from "../output_lab3"; +import {} from "../output_lab3"; export function random_weapon(): string { const weapons = Object.keys(Wepon_damage).filter(key => isNaN(Number(key))); diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index ad17e0381..5db222d45 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,16 +1,16 @@ -import { Warrior } from "./Class_players/Players/Warrior"; -import { Archer } from "./Class_players/Players/Archer"; -import { Weapon } from "./Class_weapons/Weapon"; +import { Warrior } from "./Classes_players/Players/Warrior"; +import { Archer } from "./Classes_players/Players/Archer"; +import { Mage } from "./Classes_players/Players/Mage"; +import { Weapon } from "./Classes_weapons/Weapon"; import { random_value_array } from "./Utils/random_v_arr"; import { random_weapon } from "./Utils/random_weapon"; -import { Paladin_Shield } from "./Class_weapons/Weapons/Paladin_Shield"; +import { Paladin_Shield } from "./Classes_weapons/Weapons/Paladin_Shield"; +import { Elf_Bow } from "./Classes_weapons/Weapons/Elf_Bow"; +import { Staff_Santa_Claus } from "./Classes_weapons/Weapons/Staff_Santa_Claus"; const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; -export enum Wepon_damage { - "Sword" = 10, - "Bow" = 15, -} -const weapon_1 = new Paladin_Shield() -const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100) -console.log(pers_1.magic_resistance) -console.log(pers_1.physical_resistance) +const weapon_1 = new Staff_Santa_Claus() +const pers_1 = new Mage(random_value_array(arr_name), weapon_1, 100) +console.log(pers_1) +// console.log(pers_1.magic_resistance) +// console.log(pers_1.physical_resistance) From 89991524911cfaac5d2d1cf19e8b30ef24af228c Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Sun, 22 Dec 2024 22:54:55 +0300 Subject: [PATCH 12/18] =?UTF-8?q?=D0=9D=D0=90=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B1=D0=BE=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpgsaga/saga/src/lab3/Class_hit.ts | 11 +++++ .../Abilities/Archer_ability.ts | 4 +- .../Abilities/Mage_ability.ts | 4 +- .../Abilities/Staff_Santa_ability.ts | 2 + .../Abilities/Warrior_ability.ts | 2 + .../saga/src/lab3/Classes_debuff/Debuff.ts | 7 +++ .../lab3/Classes_debuff/Debuffs/Burning.ts | 3 +- .../saga/src/lab3/Classes_players/Player.ts | 42 ++++++++++++------ .../lab3/Classes_players/Players/Archer.ts | 2 +- .../src/lab3/Classes_players/Players/Mage.ts | 2 +- .../lab3/Classes_players/Players/Warrior.ts | 2 +- .../Weapons/Staff_Santa_Claus.ts | 2 +- rpgsaga/saga/src/lab3/Utils/list_abilities.ts | 8 ++-- rpgsaga/saga/src/lab3/Utils/list_debuff.ts | 3 ++ rpgsaga/saga/src/lab3/fight.ts | 43 +++++++++++++++++++ rpgsaga/saga/src/lab3/output_lab3.ts | 13 +++--- 16 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 rpgsaga/saga/src/lab3/Utils/list_debuff.ts diff --git a/rpgsaga/saga/src/lab3/Class_hit.ts b/rpgsaga/saga/src/lab3/Class_hit.ts index 766c4f3fe..2901bed2a 100644 --- a/rpgsaga/saga/src/lab3/Class_hit.ts +++ b/rpgsaga/saga/src/lab3/Class_hit.ts @@ -1,7 +1,10 @@ +import { Debuff } from "./Classes_debuff/Debuff"; + export class Hit{ private _damage: number; private _type_damage: String; private _control: boolean; + private _debuff: Debuff constructor ( damage: number, type_damage: String, @@ -20,6 +23,10 @@ export class Hit{ this._control = value; } + public set debuff(value: Debuff) { + this._debuff = value; + } + public get damage(): number { return this._damage; } @@ -31,4 +38,8 @@ export class Hit{ public get control(): boolean { return this._control; } + + public get debuff(): Debuff { + return this._debuff + } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts index 214e5c207..9756da8ac 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts @@ -1,7 +1,9 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; +import { ability_names } from "../../Utils/list_abilities"; export function activation_archer_ability(player: Player, hit: Hit): Hit { - hit.damage = hit.damage * player.crit_damage; + hit.damage = hit.damage * 1.5; + console.log(`${player.role} активирует способность ${ability_names.archer_ability}`) return hit; } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts index f7c36520d..f8907bb53 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts @@ -1,8 +1,10 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; import { Burning } from "../../Classes_debuff/Debuffs/Burning"; +import { ability_names } from "../../Utils/list_abilities"; export function activation_mage_ability(player: Player, hit: Hit): Hit { - player.add_debuff(new Burning()); + hit.debuff = new Burning(); + console.log(`${player.role} активирует способность ${ability_names.mage_ability}`) return hit; } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts index 7774cdb48..cd97fee37 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts @@ -1,7 +1,9 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; +import { ability_names } from "../../Utils/list_abilities"; export function activation_staff_santa_ability(player: Player, hit: Hit): Hit { hit.control = true; + console.log(`${player.role} активирует способность ${ability_names.staff_santa}`) return hit; } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts index 9bb8ebcf4..48e9b10e3 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts @@ -1,7 +1,9 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; +import { ability_names } from "../../Utils/list_abilities"; export function activation_warriro_ability(player: Player, hit: Hit): Hit { hit.damage = hit.damage + Math.floor((player.physical_resistance + player.magic_resistance) * 0.5); + console.log(`${player.role} активирует способность ${ability_names.warrior_ability}`) return hit; } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts b/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts index 1c67e5250..b571482dd 100644 --- a/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts +++ b/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts @@ -1,18 +1,21 @@ import { Hit } from "../Class_hit"; export abstract class Debuff{ + private _name_debuff: String; private _total_duration: number; private _duration: number; private _damage: number; private _type_damage: String; private _stunning: boolean; constructor( + name_debuff: String, total_duration: number, duration: number, damage: number, type_damage: String, stunning: boolean ) { + this._name_debuff = name_debuff; this._total_duration = total_duration; this._duration = duration; this._damage = damage; @@ -24,6 +27,10 @@ export abstract class Debuff{ this._duration = value; } + public get name_debuff(): String { + return this._name_debuff; + } + public get total_duration(): number { return this._total_duration; } diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts b/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts index 5a9584079..d5d9e5619 100644 --- a/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts +++ b/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts @@ -1,8 +1,9 @@ import { Debuff } from "../Debuff"; import { damage_types } from "../../Utils/list_damage_types"; +import { debuff_names } from "../../Utils/list_debuff"; export class Burning extends Debuff{ constructor() { - super(3, 0, 10, damage_types.mag, false); + super(debuff_names.burning, 3, 3, 15, damage_types.mag, false); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Player.ts b/rpgsaga/saga/src/lab3/Classes_players/Player.ts index 48ac2bb5f..8428a2e54 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Player.ts @@ -12,7 +12,6 @@ export abstract class Player{ private _health: number; private _physical_resistance: number; private _magic_resistance: number; - private _crit_damage: number; private _stuuned_states: boolean = false; private _ability: Ability; private _debuffs: (Debuff)[] = []; @@ -23,7 +22,6 @@ export abstract class Player{ health: number, physical_resistance: number, magic_resistance: number, - crit_damage: number, ability: Ability ) { this._name = name; @@ -32,7 +30,6 @@ export abstract class Player{ this._health = health; this._physical_resistance = (physical_resistance + weapon.increase_phys_resist) * weapon.multiplier_phys_resist; this._magic_resistance = (magic_resistance + weapon.increase_magic_resist) * weapon.multiplier_magic_resist; - this._crit_damage = crit_damage; this._ability = ability; } @@ -92,34 +89,55 @@ export abstract class Player{ return this._magic_resistance; } - public get crit_damage(): number { - return this._crit_damage; + public get debuffs(): (Debuff)[] { + return this._debuffs } public attack(): Hit { - let hit = new Hit(this._weapon.damage, this._weapon.type_damage, false) - hit = activation_ability([this._ability, this._weapon.ability], this, hit) - return hit + let hit = new Hit(this._weapon.damage, this._weapon.type_damage, false); + hit = activation_ability([this._ability, this._weapon.ability], this, hit); + return hit; } public taking_damage(hit: Hit) { + if (typeof hit.debuff !== 'undefined') { + this.add_debuff(hit.debuff); + } + this.activate_debaffs(); + if (hit.control) { + this._stuuned_states = true; + } + if (hit.type_damage == damage_types.pure) { + hit.damage = hit.damage; + } else if (hit.type_damage == damage_types.phys) { + hit.damage = Math.floor(hit.damage * ((100 - this.physical_resistance) / 100)); + } else if (hit.type_damage == damage_types.mag){ + hit.damage = Math.floor(hit.damage * ((100 - this.magic_resistance) / 100)); + } + this._health -= hit.damage; + console.log(`${this.role} (${this._health} HP) получил ${hit.damage} урона`); + } + + public taking_damage_from_debuff(debuff: Debuff, hit: Hit) { if (hit.control) { this._stuuned_states = true; } if (hit.type_damage == damage_types.pure) { - this._health -= hit.damage + hit.damage = hit.damage; } else if (hit.type_damage == damage_types.phys) { - this.health = this.health - (Math.floor(hit.damage * ((100 - this.physical_resistance) / 100))) ; + hit.damage = Math.floor(hit.damage * ((100 - this.physical_resistance) / 100)); } else if (hit.type_damage == damage_types.mag){ - this.health = this.health - (Math.floor(hit.damage * ((100 - this.magic_resistance) / 100))); + hit.damage = Math.floor(hit.damage * ((100 - this.magic_resistance) / 100)); } + this._health -= hit.damage; + console.log(`${this.role} (${this._health} HP) получил ${hit.damage} урона от ${debuff.name_debuff} (до окончания ${debuff.duration} ход(a)))`); } public activate_debaffs() { for (let debuff of this._debuffs) { if (debuff.duration > 0) { - this.taking_damage(debuff.activate_debuff()); debuff.duration = debuff.duration - 1; + this.taking_damage_from_debuff(debuff, debuff.activate_debuff()); } } } diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts index 5364d544e..59bf9201a 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts @@ -10,6 +10,6 @@ export class Archer extends Player{ weapon: Weapon, health: number, ) { - super(name, role_names.archer, weapon, health, 5, 5, 50, new Ability(17, ability_names.archer_ability)); + super(name, role_names.archer, weapon, health, 5, 5, new Ability(17, ability_names.archer_ability)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts index 80043ea1a..a26ab7224 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts @@ -10,6 +10,6 @@ export class Mage extends Player{ weapon: Weapon, health: number, ) { - super(name, role_names.mage, weapon, health, 10, 10, 1, new Ability(17, ability_names.mage_ability)); + super(name, role_names.mage, weapon, health, 10, 10, new Ability(30, ability_names.mage_ability)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts index d7f9ac7c3..75b653496 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts @@ -10,6 +10,6 @@ export class Warrior extends Player{ weapon: Weapon, health: number, ){ - super(name, role_names.warrior, weapon, health, 20, 20, 1, new Ability(20, ability_names.warrior_ability)); + super(name, role_names.warrior, weapon, health, 20, 20, new Ability(20, ability_names.warrior_ability)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts index c9215041a..ef72690d1 100644 --- a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts @@ -5,6 +5,6 @@ import { damage_types } from "../../Utils/list_damage_types"; import { ability_names } from "../../Utils/list_abilities"; export class Staff_Santa_Claus extends Weapon{ constructor () { - super(weapons_names.staff_santa, 10, damage_types.mag, 5, 2, 5, 2, new Ability(20, ability_names.staff_santa)); + super(weapons_names.staff_santa, 20, damage_types.mag, 0, 1, 0, 1, new Ability(20, ability_names.staff_santa)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/list_abilities.ts b/rpgsaga/saga/src/lab3/Utils/list_abilities.ts index 1388697b8..242be0c31 100644 --- a/rpgsaga/saga/src/lab3/Utils/list_abilities.ts +++ b/rpgsaga/saga/src/lab3/Utils/list_abilities.ts @@ -1,7 +1,7 @@ export enum ability_names{ empty = "empty", - archer_ability = "archer_ability", - warrior_ability = "warrior_ability", - mage_ability = "mage_ability", - staff_santa = "staff_santa_ability" + archer_ability = "Уселенная стрела", + warrior_ability = "Разящий удар", + mage_ability = "Поджигание", + staff_santa = "Замораживание" } diff --git a/rpgsaga/saga/src/lab3/Utils/list_debuff.ts b/rpgsaga/saga/src/lab3/Utils/list_debuff.ts new file mode 100644 index 000000000..768804112 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/list_debuff.ts @@ -0,0 +1,3 @@ +export enum debuff_names{ + burning = "Горение" +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/fight.ts b/rpgsaga/saga/src/lab3/fight.ts index e69de29bb..8b96f21a3 100644 --- a/rpgsaga/saga/src/lab3/fight.ts +++ b/rpgsaga/saga/src/lab3/fight.ts @@ -0,0 +1,43 @@ +import { Player } from "./Classes_players/Player"; +import { Hit } from "./Class_hit"; +export function fight(pers_1: Player, pers_2: Player) { + let count: number = 1 + while (true) { + if (count % 2 != 0) { + count = one_hit(count, pers_1, pers_2); + } else { + count = one_hit(count, pers_2, pers_1); + } + if (count == -1) { + break; + } else { + count++; + } + } +} + +export function one_hit(count: number, attacker: Player, defending: Player): number { + console.log(); + console.log(`-------Ход ${count}-------`); + console.log(); + console.log(`${attacker.role} '${attacker.name}' (${attacker.health} HP) атакует ${defending.role} '${defending.name}' (${defending.health} HP)`); + attacker.activate_debaffs(); + if (attacker.health <= 0) { + console.log(`${attacker.role} '${attacker.name}' умер`) + return -1; + } + if (attacker.stuuned_states == false) { + let attack: Hit = attacker.attack(); + console.log(`${attacker.role} '${attacker.name}' наносит ${attack.damage}`) + console.log(); + defending.taking_damage(attack); + if (defending.health <= 0) { + console.log(`${defending.role} '${defending.name}' умер`); + return -1; + } + } else { + attacker.stuuned_states = false; + console.log(`${attacker.role} '${attacker.name}' пропускает ход`) + } + return count; +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index 5db222d45..7eef737f0 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -7,10 +7,13 @@ import { random_weapon } from "./Utils/random_weapon"; import { Paladin_Shield } from "./Classes_weapons/Weapons/Paladin_Shield"; import { Elf_Bow } from "./Classes_weapons/Weapons/Elf_Bow"; import { Staff_Santa_Claus } from "./Classes_weapons/Weapons/Staff_Santa_Claus"; +import { fight } from "./fight"; +import { Player } from "./Classes_players/Player"; const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; -const weapon_1 = new Staff_Santa_Claus() -const pers_1 = new Mage(random_value_array(arr_name), weapon_1, 100) -console.log(pers_1) -// console.log(pers_1.magic_resistance) -// console.log(pers_1.physical_resistance) +const weapon_1 = new Paladin_Shield(); +const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100); +const weapon_2 = new Staff_Santa_Claus(); +const pers_2 = new Mage(random_value_array(arr_name), weapon_2, 100); +fight(pers_1, pers_2); + From 94ce58b834554c018cc3f706c20b0312dacdaf0c Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Sun, 22 Dec 2024 23:37:04 +0300 Subject: [PATCH 13/18] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B4=D0=BE=D0=BC=D0=BD=D0=BE=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B3=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Abilities/Archer_ability.ts | 2 +- .../saga/src/lab3/Classes_players/Player.ts | 4 ++ .../lab3/Classes_weapons/Weapons/Elf_Bow.ts | 2 +- rpgsaga/saga/src/lab3/Utils/random_hero.ts | 7 ++++ rpgsaga/saga/src/lab3/Utils/random_weapon.ts | 7 ++-- rpgsaga/saga/src/lab3/create_player.ts | 41 +++++++++++++++++++ rpgsaga/saga/src/lab3/fight.ts | 3 +- rpgsaga/saga/src/lab3/output_lab3.ts | 19 ++------- 8 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 rpgsaga/saga/src/lab3/Utils/random_hero.ts create mode 100644 rpgsaga/saga/src/lab3/create_player.ts diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts index 9756da8ac..900529eb4 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts +++ b/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts @@ -3,7 +3,7 @@ import { Hit } from "../../Class_hit"; import { ability_names } from "../../Utils/list_abilities"; export function activation_archer_ability(player: Player, hit: Hit): Hit { - hit.damage = hit.damage * 1.5; + hit.damage = Math.floor(hit.damage * 1.5); console.log(`${player.role} активирует способность ${ability_names.archer_ability}`) return hit; } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Player.ts b/rpgsaga/saga/src/lab3/Classes_players/Player.ts index 8428a2e54..cce93cf9e 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Classes_players/Player.ts @@ -77,6 +77,10 @@ export abstract class Player{ return this._weapon.type_damage } + public get name_weapon(): String { + return this._weapon.name; + } + public get stuuned_states(): boolean { return this._stuuned_states; } diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts index 23ed42146..2f0ca6f3d 100644 --- a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts +++ b/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts @@ -5,6 +5,6 @@ import { damage_types } from "../../Utils/list_damage_types"; import { ability_names } from "../../Utils/list_abilities"; export class Elf_Bow extends Weapon{ constructor () { - super(weapons_names.elf_bow, 40, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); + super(weapons_names.elf_bow, 15, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_hero.ts b/rpgsaga/saga/src/lab3/Utils/random_hero.ts new file mode 100644 index 000000000..55503b7b3 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/random_hero.ts @@ -0,0 +1,7 @@ +import { role_names } from "./list_roles"; + +export function random_hero() { + const players = Object.values(role_names).filter(key => isNaN(Number(key))); + const randomIndex = Math.floor(Math.random() * players.length); + return players[randomIndex] +} diff --git a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts index 1749b733c..c785bce00 100644 --- a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts +++ b/rpgsaga/saga/src/lab3/Utils/random_weapon.ts @@ -1,7 +1,8 @@ -import {} from "../output_lab3"; +import { weapons_names } from "./list_weapons"; export function random_weapon(): string { - const weapons = Object.keys(Wepon_damage).filter(key => isNaN(Number(key))); + const weapons = Object.values(weapons_names).filter(key => isNaN(Number(key))); const randomIndex = Math.floor(Math.random() * weapons.length); return weapons[randomIndex]; -} \ No newline at end of file +} + diff --git a/rpgsaga/saga/src/lab3/create_player.ts b/rpgsaga/saga/src/lab3/create_player.ts new file mode 100644 index 000000000..cf6f46a6e --- /dev/null +++ b/rpgsaga/saga/src/lab3/create_player.ts @@ -0,0 +1,41 @@ +import { Weapon } from "./Classes_weapons/Weapon"; +import { Elf_Bow } from "./Classes_weapons/Weapons/Elf_Bow"; +import { Paladin_Shield } from "./Classes_weapons/Weapons/Paladin_Shield"; +import { Staff_Santa_Claus } from "./Classes_weapons/Weapons/Staff_Santa_Claus"; +import { weapons_names } from "./Utils/list_weapons"; +import { random_weapon } from "./Utils/random_weapon"; + + +import { Player } from "./Classes_players/Player"; +import { Archer } from "./Classes_players/Players/Archer"; +import { Warrior } from "./Classes_players/Players/Warrior"; +import { Mage } from "./Classes_players/Players/Mage"; +import { role_names } from "./Utils/list_roles"; +import { random_hero } from "./Utils/random_hero"; + + +import { random_value_array } from "./Utils/random_v_arr"; + +const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; + +export function create_weapon(): Weapon { + const name_weapon: String = random_weapon(); + if (name_weapon == weapons_names.elf_bow) { + return new Elf_Bow(); + } else if (name_weapon == weapons_names.paladin_sheild) { + return new Paladin_Shield(); + } else if (name_weapon == weapons_names.staff_santa) { + return new Staff_Santa_Claus(); + } +} +export function create_player(): Player { + const weapon: Weapon = create_weapon(); + const role_player: String = random_hero(); + if (role_player == role_names.archer) { + return new Archer(random_value_array(arr_name), weapon, 100); + } else if (role_player == role_names.warrior) { + return new Warrior(random_value_array(arr_name), weapon, 100); + } else if (role_player == role_names.mage) { + return new Mage(random_value_array(arr_name), weapon, 100); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/fight.ts b/rpgsaga/saga/src/lab3/fight.ts index 8b96f21a3..b4af52f45 100644 --- a/rpgsaga/saga/src/lab3/fight.ts +++ b/rpgsaga/saga/src/lab3/fight.ts @@ -1,6 +1,7 @@ import { Player } from "./Classes_players/Player"; import { Hit } from "./Class_hit"; export function fight(pers_1: Player, pers_2: Player) { + console.log(`${pers_1.role} '${pers_1.name}' VS ${pers_2.role} '${pers_2.name}'`); let count: number = 1 while (true) { if (count % 2 != 0) { @@ -28,7 +29,7 @@ export function one_hit(count: number, attacker: Player, defending: Player): num } if (attacker.stuuned_states == false) { let attack: Hit = attacker.attack(); - console.log(`${attacker.role} '${attacker.name}' наносит ${attack.damage}`) + console.log(`${attacker.role} '${attacker.name}' наносит ${attack.damage} оружием '${attacker.name_weapon}'`) console.log(); defending.taking_damage(attack); if (defending.health <= 0) { diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index 7eef737f0..8bd2a9683 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,19 +1,6 @@ -import { Warrior } from "./Classes_players/Players/Warrior"; -import { Archer } from "./Classes_players/Players/Archer"; -import { Mage } from "./Classes_players/Players/Mage"; -import { Weapon } from "./Classes_weapons/Weapon"; -import { random_value_array } from "./Utils/random_v_arr"; -import { random_weapon } from "./Utils/random_weapon"; -import { Paladin_Shield } from "./Classes_weapons/Weapons/Paladin_Shield"; -import { Elf_Bow } from "./Classes_weapons/Weapons/Elf_Bow"; -import { Staff_Santa_Claus } from "./Classes_weapons/Weapons/Staff_Santa_Claus"; import { fight } from "./fight"; import { Player } from "./Classes_players/Player"; -const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; -const weapon_1 = new Paladin_Shield(); -const pers_1 = new Warrior(random_value_array(arr_name), weapon_1, 100); -const weapon_2 = new Staff_Santa_Claus(); -const pers_2 = new Mage(random_value_array(arr_name), weapon_2, 100); +import { create_player } from "./create_player"; +const pers_1: Player = create_player(); +const pers_2: Player = create_player(); fight(pers_1, pers_2); - - From 97aaaa1a416dcba799163ed4a2da4fd09d61d899 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Fri, 17 Jan 2025 17:00:20 +0300 Subject: [PATCH 14/18] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=B8=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20Battle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../saga/src/lab3/{ => Clasees}/Class_hit.ts | 0 .../saga/src/lab3/Clasees/Classes_Battle.ts | 87 +++++++++++++++++++ .../Abilities/Archer_ability.ts | 2 +- .../Abilities/Mage_ability.ts | 2 +- .../Abilities/Staff_Santa_ability.ts | 2 +- .../Abilities/Warrior_ability.ts | 2 +- .../Classes_abilities/Ability.ts | 0 .../Classes_abilities/using_abilities.ts | 4 +- .../{ => Clasees}/Classes_debuff/Debuff.ts | 0 .../Classes_debuff/Debuffs/Burning.ts | 4 +- .../{ => Clasees}/Classes_players/Player.ts | 19 +++- .../Classes_players/Players/Archer.ts | 4 +- .../Classes_players/Players/Mage.ts | 4 +- .../Classes_players/Players/Warrior.ts | 4 +- .../{ => Clasees}/Classes_weapons/Weapon.ts | 0 .../Classes_weapons/Weapons/Elf_Bow.ts | 6 +- .../Classes_weapons/Weapons/Paladin_Shield.ts | 6 +- .../Weapons/Staff_Santa_Claus.ts | 6 +- .../{list_abilities.ts => enum_abilities.ts} | 0 ...t_damage_types.ts => enum_damage_types.ts} | 0 rpgsaga/saga/src/lab3/create_player.ts | 18 ++-- rpgsaga/saga/src/lab3/fight.ts | 44 ---------- rpgsaga/saga/src/lab3/output_lab3.ts | 9 +- 23 files changed, 139 insertions(+), 84 deletions(-) rename rpgsaga/saga/src/lab3/{ => Clasees}/Class_hit.ts (100%) create mode 100644 rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/Abilities/Archer_ability.ts (84%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/Abilities/Mage_ability.ts (86%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/Abilities/Staff_Santa_ability.ts (83%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/Abilities/Warrior_ability.ts (86%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/Ability.ts (100%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_abilities/using_abilities.ts (90%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_debuff/Debuff.ts (100%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_debuff/Debuffs/Burning.ts (58%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_players/Player.ts (89%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_players/Players/Archer.ts (76%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_players/Players/Mage.ts (76%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_players/Players/Warrior.ts (77%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_weapons/Weapon.ts (100%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_weapons/Weapons/Elf_Bow.ts (58%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_weapons/Weapons/Paladin_Shield.ts (60%) rename rpgsaga/saga/src/lab3/{ => Clasees}/Classes_weapons/Weapons/Staff_Santa_Claus.ts (60%) rename rpgsaga/saga/src/lab3/Utils/{list_abilities.ts => enum_abilities.ts} (100%) rename rpgsaga/saga/src/lab3/Utils/{list_damage_types.ts => enum_damage_types.ts} (100%) delete mode 100644 rpgsaga/saga/src/lab3/fight.ts diff --git a/rpgsaga/saga/src/lab3/Class_hit.ts b/rpgsaga/saga/src/lab3/Clasees/Class_hit.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Class_hit.ts rename to rpgsaga/saga/src/lab3/Clasees/Class_hit.ts diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts new file mode 100644 index 000000000..8184a7edf --- /dev/null +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts @@ -0,0 +1,87 @@ +import { Player } from "./Classes_players/Player"; +import { Hit } from "./Class_hit"; +import { create_player } from "../create_player"; + +export class battle{ + private _count_players: number; + private _arr_players: (Player)[] = []; + constructor( + count_players: number + ) { + this._count_players = count_players; + for (let i = 0; i < count_players; i++) { + let player: Player = create_player() + console.log(`Игрок номер ${i + 1}: ${player.view_info()}`) + this._arr_players.push(player) + } + } + + public start_game() { + let count: number = 0; + while (this._arr_players.length != 1) { + count++; + console.log(`Раунд номер ${count}`); + let winner: Player[] = []; + for (let i = 0; i < this._count_players; i += 2) { + winner.push(this.fight(this._arr_players[i], this._arr_players[i + 1])) + } + if (this._count_players % 2 != 0) { + winner.push(this._arr_players[-1]) + } + this._arr_players = winner; + this._count_players = this._arr_players.length; + for (let player of this._arr_players) { + player.clear_hero(); + } + + } + console.log(`${this._arr_players[0].role_name()} - единственный выживший`) + } + + public fight(pers_1: Player, pers_2: Player) { + console.log(`${pers_1.role_name()} VS ${pers_2.role_name()}`); + let count: number = 1 + while (true) { + if (count % 2 != 0) { + count = this.one_hit(count, pers_1, pers_2); + } else { + count = this.one_hit(count, pers_2, pers_1); + } + if (count == -1) { + if (pers_1.health <= 0) { + return pers_2; + } else { + return pers_1; + } + } else { + count++; + } + } + } + + private one_hit(count: number, attacker: Player, defending: Player): number { + console.log(); + console.log(`-------Ход ${count}-------`); + console.log(); + attacker.activate_debaffs(); + if (attacker.health <= 0) { + console.log(`${attacker.role} '${attacker.name}' умер`) + return -1; + } + if (attacker.stuuned_states == false) { + console.log(`${attacker.role} '${attacker.name}' (${attacker.health} HP) атакует ${defending.role} '${defending.name}' (${defending.health} HP)`); + let attack: Hit = attacker.attack(); + console.log(`${attacker.role} '${attacker.name}' наносит ${attack.damage} оружием '${attacker.name_weapon}'`) + console.log(); + defending.taking_damage(attack); + if (defending.health <= 0) { + console.log(`${defending.role} '${defending.name}' умер`); + return -1; + } + } else { + attacker.stuuned_states = false; + console.log(`${attacker.role} '${attacker.name}' пропускает ход`) + } + return count; + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts similarity index 84% rename from rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts index 900529eb4..030e7de9e 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Archer_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../Utils/list_abilities"; +import { ability_names } from "../../../Utils/enum_abilities"; export function activation_archer_ability(player: Player, hit: Hit): Hit { hit.damage = Math.floor(hit.damage * 1.5); diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts similarity index 86% rename from rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts index f8907bb53..ee86c0d51 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Mage_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts @@ -1,7 +1,7 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; import { Burning } from "../../Classes_debuff/Debuffs/Burning"; -import { ability_names } from "../../Utils/list_abilities"; +import { ability_names } from "../../../Utils/enum_abilities"; export function activation_mage_ability(player: Player, hit: Hit): Hit { hit.debuff = new Burning(); diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts similarity index 83% rename from rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts index cd97fee37..c9eb013e2 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Staff_Santa_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../Utils/list_abilities"; +import { ability_names } from "../../../Utils/enum_abilities"; export function activation_staff_santa_ability(player: Player, hit: Hit): Hit { hit.control = true; diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts similarity index 86% rename from rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts index 48e9b10e3..14afa9db6 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/Abilities/Warrior_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../Utils/list_abilities"; +import { ability_names } from "../../../Utils/enum_abilities"; export function activation_warriro_ability(player: Player, hit: Hit): Hit { hit.damage = hit.damage + Math.floor((player.physical_resistance + player.magic_resistance) * 0.5); diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/Ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Ability.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Classes_abilities/Ability.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Ability.ts diff --git a/rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts similarity index 90% rename from rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts index ea3c7a938..0afcae511 100644 --- a/rpgsaga/saga/src/lab3/Classes_abilities/using_abilities.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts @@ -1,12 +1,12 @@ import { Ability } from "./Ability"; import { Player } from "../Classes_players/Player"; import { Hit } from "../Class_hit"; -import { check_operation } from "../Utils/check_operation"; +import { check_operation } from "../../Utils/check_operation"; import { activation_archer_ability } from "./Abilities/Archer_ability"; import { activation_mage_ability } from "./Abilities/Mage_ability"; import { activation_staff_santa_ability } from "./Abilities/Staff_Santa_ability"; import { activation_warriro_ability } from "./Abilities/Warrior_ability"; -import { ability_names } from "../Utils/list_abilities"; +import { ability_names } from "../../Utils/enum_abilities"; export function activation_ability(abilities: (Ability)[], player: Player, hit: Hit) { for (let ability of abilities) { diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Classes_debuff/Debuff.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts diff --git a/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts similarity index 58% rename from rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts index d5d9e5619..93c0e62b6 100644 --- a/rpgsaga/saga/src/lab3/Classes_debuff/Debuffs/Burning.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts @@ -1,6 +1,6 @@ import { Debuff } from "../Debuff"; -import { damage_types } from "../../Utils/list_damage_types"; -import { debuff_names } from "../../Utils/list_debuff"; +import { damage_types } from "../../../Utils/enum_damage_types"; +import { debuff_names } from "../../../Utils/list_debuff"; export class Burning extends Debuff{ constructor() { diff --git a/rpgsaga/saga/src/lab3/Classes_players/Player.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts similarity index 89% rename from rpgsaga/saga/src/lab3/Classes_players/Player.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts index cce93cf9e..80e46dac9 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts @@ -3,12 +3,13 @@ import { Hit } from "../Class_hit"; import { Ability } from "../Classes_abilities/Ability"; import { activation_ability } from "../Classes_abilities/using_abilities"; import { Debuff } from "../Classes_debuff/Debuff"; -import { damage_types } from "../Utils/list_damage_types"; +import { damage_types } from "../../Utils/enum_damage_types"; export abstract class Player{ private _name: String; private _role: String; private _weapon: Weapon; + private _mx_health: number; private _health: number; private _physical_resistance: number; private _magic_resistance: number; @@ -27,6 +28,7 @@ export abstract class Player{ this._name = name; this._role = role; this._weapon = weapon; + this._mx_health = health; this._health = health; this._physical_resistance = (physical_resistance + weapon.increase_phys_resist) * weapon.multiplier_phys_resist; this._magic_resistance = (magic_resistance + weapon.increase_magic_resist) * weapon.multiplier_magic_resist; @@ -97,6 +99,10 @@ export abstract class Player{ return this._debuffs } + public role_name(): String { + return `${this._role} '${this._name}'` + } + public attack(): Hit { let hit = new Hit(this._weapon.damage, this._weapon.type_damage, false); hit = activation_ability([this._ability, this._weapon.ability], this, hit); @@ -134,7 +140,7 @@ export abstract class Player{ hit.damage = Math.floor(hit.damage * ((100 - this.magic_resistance) / 100)); } this._health -= hit.damage; - console.log(`${this.role} (${this._health} HP) получил ${hit.damage} урона от ${debuff.name_debuff} (до окончания ${debuff.duration} ход(a)))`); + console.log(`${this.role} (${this._health} HP) получил ${hit.damage} урона от ${debuff.name_debuff} (до окончания ${debuff.duration} ход(a))`); } public activate_debaffs() { @@ -145,4 +151,13 @@ export abstract class Player{ } } } + + public clear_hero() { + this._health = this._mx_health; + this._debuffs = []; + } + + public view_info() { + return `Роль: ${this._role}, имя: '${this._name}', оружие: ${this._weapon.name} (урон: ${this._weapon.damage})` + } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts similarity index 76% rename from rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts index 59bf9201a..b7794f4fd 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Archer.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../Utils/list_abilities"; -import { role_names } from "../../Utils/list_roles"; +import { ability_names } from "../../../Utils/enum_abilities"; +import { role_names } from "../../../Utils/list_roles"; export class Archer extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts similarity index 76% rename from rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts index a26ab7224..6366c495c 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Mage.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../Utils/list_abilities"; -import { role_names } from "../../Utils/list_roles"; +import { ability_names } from "../../../Utils/enum_abilities"; +import { role_names } from "../../../Utils/list_roles"; export class Mage extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts similarity index 77% rename from rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts index 75b653496..132af6f4f 100644 --- a/rpgsaga/saga/src/lab3/Classes_players/Players/Warrior.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../Utils/list_abilities"; -import { role_names } from "../../Utils/list_roles"; +import { ability_names } from "../../../Utils/enum_abilities"; +import { role_names } from "../../../Utils/list_roles"; export class Warrior extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapon.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Classes_weapons/Weapon.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts similarity index 58% rename from rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts index 2f0ca6f3d..92c27c4d1 100644 --- a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Elf_Bow.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts @@ -1,8 +1,8 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../Utils/list_weapons"; -import { damage_types } from "../../Utils/list_damage_types"; -import { ability_names } from "../../Utils/list_abilities"; +import { weapons_names } from "../../../Utils/list_weapons"; +import { damage_types } from "../../../Utils/enum_damage_types"; +import { ability_names } from "../../../Utils/enum_abilities"; export class Elf_Bow extends Weapon{ constructor () { super(weapons_names.elf_bow, 15, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts similarity index 60% rename from rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts index 27821b38a..1a57f5ad5 100644 --- a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Paladin_Shield.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts @@ -1,8 +1,8 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../Utils/list_weapons"; -import { damage_types } from "../../Utils/list_damage_types"; -import { ability_names } from "../../Utils/list_abilities"; +import { weapons_names } from "../../../Utils/list_weapons"; +import { damage_types } from "../../../Utils/enum_damage_types"; +import { ability_names } from "../../../Utils/enum_abilities"; export class Paladin_Shield extends Weapon{ constructor () { super(weapons_names.paladin_sheild, 10, damage_types.phys, 5, 2, 5, 2, new Ability(0, ability_names.empty)); diff --git a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts similarity index 60% rename from rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts rename to rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts index ef72690d1..6ab7e23d7 100644 --- a/rpgsaga/saga/src/lab3/Classes_weapons/Weapons/Staff_Santa_Claus.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts @@ -1,8 +1,8 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../Utils/list_weapons"; -import { damage_types } from "../../Utils/list_damage_types"; -import { ability_names } from "../../Utils/list_abilities"; +import { weapons_names } from "../../../Utils/list_weapons"; +import { damage_types } from "../../../Utils/enum_damage_types"; +import { ability_names } from "../../../Utils/enum_abilities"; export class Staff_Santa_Claus extends Weapon{ constructor () { super(weapons_names.staff_santa, 20, damage_types.mag, 0, 1, 0, 1, new Ability(20, ability_names.staff_santa)); diff --git a/rpgsaga/saga/src/lab3/Utils/list_abilities.ts b/rpgsaga/saga/src/lab3/Utils/enum_abilities.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/list_abilities.ts rename to rpgsaga/saga/src/lab3/Utils/enum_abilities.ts diff --git a/rpgsaga/saga/src/lab3/Utils/list_damage_types.ts b/rpgsaga/saga/src/lab3/Utils/enum_damage_types.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/list_damage_types.ts rename to rpgsaga/saga/src/lab3/Utils/enum_damage_types.ts diff --git a/rpgsaga/saga/src/lab3/create_player.ts b/rpgsaga/saga/src/lab3/create_player.ts index cf6f46a6e..9d34f9dde 100644 --- a/rpgsaga/saga/src/lab3/create_player.ts +++ b/rpgsaga/saga/src/lab3/create_player.ts @@ -1,22 +1,22 @@ -import { Weapon } from "./Classes_weapons/Weapon"; -import { Elf_Bow } from "./Classes_weapons/Weapons/Elf_Bow"; -import { Paladin_Shield } from "./Classes_weapons/Weapons/Paladin_Shield"; -import { Staff_Santa_Claus } from "./Classes_weapons/Weapons/Staff_Santa_Claus"; +import { Weapon } from "./Clasees/Classes_weapons/Weapon"; +import { Elf_Bow } from "./Clasees/Classes_weapons/Weapons/Elf_Bow"; +import { Paladin_Shield } from "./Clasees/Classes_weapons/Weapons/Paladin_Shield"; +import { Staff_Santa_Claus } from "./Clasees/Classes_weapons/Weapons/Staff_Santa_Claus"; import { weapons_names } from "./Utils/list_weapons"; import { random_weapon } from "./Utils/random_weapon"; -import { Player } from "./Classes_players/Player"; -import { Archer } from "./Classes_players/Players/Archer"; -import { Warrior } from "./Classes_players/Players/Warrior"; -import { Mage } from "./Classes_players/Players/Mage"; +import { Player } from "./Clasees/Classes_players/Player"; +import { Archer } from "./Clasees/Classes_players/Players/Archer"; +import { Warrior } from "./Clasees/Classes_players/Players/Warrior"; +import { Mage } from "./Clasees/Classes_players/Players/Mage"; import { role_names } from "./Utils/list_roles"; import { random_hero } from "./Utils/random_hero"; import { random_value_array } from "./Utils/random_v_arr"; -const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey"]; +const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey", ]; export function create_weapon(): Weapon { const name_weapon: String = random_weapon(); diff --git a/rpgsaga/saga/src/lab3/fight.ts b/rpgsaga/saga/src/lab3/fight.ts deleted file mode 100644 index b4af52f45..000000000 --- a/rpgsaga/saga/src/lab3/fight.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Player } from "./Classes_players/Player"; -import { Hit } from "./Class_hit"; -export function fight(pers_1: Player, pers_2: Player) { - console.log(`${pers_1.role} '${pers_1.name}' VS ${pers_2.role} '${pers_2.name}'`); - let count: number = 1 - while (true) { - if (count % 2 != 0) { - count = one_hit(count, pers_1, pers_2); - } else { - count = one_hit(count, pers_2, pers_1); - } - if (count == -1) { - break; - } else { - count++; - } - } -} - -export function one_hit(count: number, attacker: Player, defending: Player): number { - console.log(); - console.log(`-------Ход ${count}-------`); - console.log(); - console.log(`${attacker.role} '${attacker.name}' (${attacker.health} HP) атакует ${defending.role} '${defending.name}' (${defending.health} HP)`); - attacker.activate_debaffs(); - if (attacker.health <= 0) { - console.log(`${attacker.role} '${attacker.name}' умер`) - return -1; - } - if (attacker.stuuned_states == false) { - let attack: Hit = attacker.attack(); - console.log(`${attacker.role} '${attacker.name}' наносит ${attack.damage} оружием '${attacker.name_weapon}'`) - console.log(); - defending.taking_damage(attack); - if (defending.health <= 0) { - console.log(`${defending.role} '${defending.name}' умер`); - return -1; - } - } else { - attacker.stuuned_states = false; - console.log(`${attacker.role} '${attacker.name}' пропускает ход`) - } - return count; -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index 8bd2a9683..2ae2a9f1b 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,6 +1,3 @@ -import { fight } from "./fight"; -import { Player } from "./Classes_players/Player"; -import { create_player } from "./create_player"; -const pers_1: Player = create_player(); -const pers_2: Player = create_player(); -fight(pers_1, pers_2); +import { battle } from "./Clasees/Classes_Battle"; +const battle_1 = new battle(2); +battle_1.start_game(); From 64f5cb6513578655d960243aff181569a656b632 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Fri, 17 Jan 2025 18:08:05 +0300 Subject: [PATCH 15/18] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B8=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../saga/src/lab3/Clasees/Classes_Battle.ts | 17 +++++--- .../Abilities/Archer_ability.ts | 2 +- .../Abilities/Mage_ability.ts | 2 +- .../Abilities/Staff_Santa_ability.ts | 2 +- .../Abilities/Warrior_ability.ts | 2 +- .../Classes_abilities/using_abilities.ts | 2 +- .../src/lab3/Clasees/Classes_debuff/Debuff.ts | 3 +- .../Clasees/Classes_debuff/Debuffs/Burning.ts | 6 +-- .../lab3/Clasees/Classes_players/Player.ts | 2 +- .../Clasees/Classes_players/Players/Archer.ts | 4 +- .../Clasees/Classes_players/Players/Mage.ts | 4 +- .../Classes_players/Players/Warrior.ts | 4 +- .../Classes_weapons/Weapons/Elf_Bow.ts | 8 ++-- .../Classes_weapons/Weapons/Paladin_Shield.ts | 8 ++-- .../Weapons/Staff_Santa_Claus.ts | 8 ++-- .../lab3/{Utils => Enums}/enum_abilities.ts | 2 +- .../{Utils => Enums}/enum_damage_types.ts | 0 .../list_debuff.ts => Enums/enum_debuff.ts} | 0 rpgsaga/saga/src/lab3/Enums/enum_names.ts | 32 +++++++++++++++ .../list_roles.ts => Enums/enum_roles.ts} | 0 .../list_weapons.ts => Enums/enum_weapons.ts} | 0 .../saga/src/lab3/Utils/check_operation.ts | 23 +++++++---- rpgsaga/saga/src/lab3/Utils/create_player.ts | 38 +++++++++++++++++ rpgsaga/saga/src/lab3/Utils/random_v_arr.ts | 7 ---- rpgsaga/saga/src/lab3/create_player.ts | 41 ------------------- .../lab3/{Utils => fun_random}/random_hero.ts | 2 +- .../saga/src/lab3/fun_random/random_name.ts | 7 ++++ .../{Utils => fun_random}/random_weapon.ts | 2 +- rpgsaga/saga/src/lab3/output_lab3.ts | 2 +- 29 files changed, 135 insertions(+), 95 deletions(-) rename rpgsaga/saga/src/lab3/{Utils => Enums}/enum_abilities.ts (76%) rename rpgsaga/saga/src/lab3/{Utils => Enums}/enum_damage_types.ts (100%) rename rpgsaga/saga/src/lab3/{Utils/list_debuff.ts => Enums/enum_debuff.ts} (100%) create mode 100644 rpgsaga/saga/src/lab3/Enums/enum_names.ts rename rpgsaga/saga/src/lab3/{Utils/list_roles.ts => Enums/enum_roles.ts} (100%) rename rpgsaga/saga/src/lab3/{Utils/list_weapons.ts => Enums/enum_weapons.ts} (100%) create mode 100644 rpgsaga/saga/src/lab3/Utils/create_player.ts delete mode 100644 rpgsaga/saga/src/lab3/Utils/random_v_arr.ts delete mode 100644 rpgsaga/saga/src/lab3/create_player.ts rename rpgsaga/saga/src/lab3/{Utils => fun_random}/random_hero.ts (81%) create mode 100644 rpgsaga/saga/src/lab3/fun_random/random_name.ts rename rpgsaga/saga/src/lab3/{Utils => fun_random}/random_weapon.ts (80%) diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts index 8184a7edf..b85c105ef 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts @@ -1,6 +1,6 @@ import { Player } from "./Classes_players/Player"; import { Hit } from "./Class_hit"; -import { create_player } from "../create_player"; +import { create_player } from "../Utils/create_player"; export class battle{ private _count_players: number; @@ -20,13 +20,15 @@ export class battle{ let count: number = 0; while (this._arr_players.length != 1) { count++; - console.log(`Раунд номер ${count}`); + console.log(); + console.log(`--------------Раунд номер ${count}--------------`); + console.log(); let winner: Player[] = []; - for (let i = 0; i < this._count_players; i += 2) { + for (let i = 0; i < this._count_players - 1; i += 2) { winner.push(this.fight(this._arr_players[i], this._arr_players[i + 1])) } if (this._count_players % 2 != 0) { - winner.push(this._arr_players[-1]) + winner.push(this._arr_players[this._count_players - 1]) } this._arr_players = winner; this._count_players = this._arr_players.length; @@ -39,8 +41,10 @@ export class battle{ } public fight(pers_1: Player, pers_2: Player) { + console.log(); console.log(`${pers_1.role_name()} VS ${pers_2.role_name()}`); - let count: number = 1 + console.log(); + let count: number = 1; while (true) { if (count % 2 != 0) { count = this.one_hit(count, pers_1, pers_2); @@ -80,7 +84,8 @@ export class battle{ } } else { attacker.stuuned_states = false; - console.log(`${attacker.role} '${attacker.name}' пропускает ход`) + console.log(`${attacker.role} '${attacker.name}' (${attacker.health}) пропускает ход`) + defending.activate_debaffs(); } return count; } diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts index 030e7de9e..eb4ad9029 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { ability_names } from "../../../Enums/enum_abilities"; export function activation_archer_ability(player: Player, hit: Hit): Hit { hit.damage = Math.floor(hit.damage * 1.5); diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts index ee86c0d51..022081ae7 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability.ts @@ -1,7 +1,7 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; import { Burning } from "../../Classes_debuff/Debuffs/Burning"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { ability_names } from "../../../Enums/enum_abilities"; export function activation_mage_ability(player: Player, hit: Hit): Hit { hit.debuff = new Burning(); diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts index c9eb013e2..c3ef75880 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { ability_names } from "../../../Enums/enum_abilities"; export function activation_staff_santa_ability(player: Player, hit: Hit): Hit { hit.control = true; diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts index 14afa9db6..7e2cc0f77 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability.ts @@ -1,6 +1,6 @@ import { Player } from "../../Classes_players/Player"; import { Hit } from "../../Class_hit"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { ability_names } from "../../../Enums/enum_abilities"; export function activation_warriro_ability(player: Player, hit: Hit): Hit { hit.damage = hit.damage + Math.floor((player.physical_resistance + player.magic_resistance) * 0.5); diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts index 0afcae511..9c29ca9de 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/using_abilities.ts @@ -6,7 +6,7 @@ import { activation_archer_ability } from "./Abilities/Archer_ability"; import { activation_mage_ability } from "./Abilities/Mage_ability"; import { activation_staff_santa_ability } from "./Abilities/Staff_Santa_ability"; import { activation_warriro_ability } from "./Abilities/Warrior_ability"; -import { ability_names } from "../../Utils/enum_abilities"; +import { ability_names } from "../../Enums/enum_abilities"; export function activation_ability(abilities: (Ability)[], player: Player, hit: Hit) { for (let ability of abilities) { diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts index b571482dd..8976142a8 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts @@ -9,14 +9,13 @@ export abstract class Debuff{ private _stunning: boolean; constructor( name_debuff: String, - total_duration: number, duration: number, damage: number, type_damage: String, stunning: boolean ) { this._name_debuff = name_debuff; - this._total_duration = total_duration; + this._total_duration = duration; this._duration = duration; this._damage = damage; this._type_damage = type_damage; diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts index 93c0e62b6..65e12a5ea 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuffs/Burning.ts @@ -1,9 +1,9 @@ import { Debuff } from "../Debuff"; -import { damage_types } from "../../../Utils/enum_damage_types"; -import { debuff_names } from "../../../Utils/list_debuff"; +import { damage_types } from "../../../Enums/enum_damage_types"; +import { debuff_names } from "../../../Enums/enum_debuff"; export class Burning extends Debuff{ constructor() { - super(debuff_names.burning, 3, 3, 15, damage_types.mag, false); + super(debuff_names.burning, 3, 15, damage_types.mag, false); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts index 80e46dac9..bd72d0a2d 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts @@ -3,7 +3,7 @@ import { Hit } from "../Class_hit"; import { Ability } from "../Classes_abilities/Ability"; import { activation_ability } from "../Classes_abilities/using_abilities"; import { Debuff } from "../Classes_debuff/Debuff"; -import { damage_types } from "../../Utils/enum_damage_types"; +import { damage_types } from "../../Enums/enum_damage_types"; export abstract class Player{ private _name: String; diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts index b7794f4fd..30efc4bd0 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Archer.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../../Utils/enum_abilities"; -import { role_names } from "../../../Utils/list_roles"; +import { ability_names } from "../../../Enums/enum_abilities"; +import { role_names } from "../../../Enums/enum_roles"; export class Archer extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts index 6366c495c..ef2d80242 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Mage.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../../Utils/enum_abilities"; -import { role_names } from "../../../Utils/list_roles"; +import { ability_names } from "../../../Enums/enum_abilities"; +import { role_names } from "../../../Enums/enum_roles"; export class Mage extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts index 132af6f4f..713498f1b 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Players/Warrior.ts @@ -1,8 +1,8 @@ import { Player } from "../Player"; import { Weapon } from "../../Classes_weapons/Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { ability_names } from "../../../Utils/enum_abilities"; -import { role_names } from "../../../Utils/list_roles"; +import { ability_names } from "../../../Enums/enum_abilities"; +import { role_names } from "../../../Enums/enum_roles"; export class Warrior extends Player{ constructor( diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts index 92c27c4d1..e14f74fbd 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow.ts @@ -1,10 +1,10 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../../Utils/list_weapons"; -import { damage_types } from "../../../Utils/enum_damage_types"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { weapons_names } from "../../../Enums/enum_weapons"; +import { damage_types } from "../../../Enums/enum_damage_types"; +import { ability_names } from "../../../Enums/enum_abilities"; export class Elf_Bow extends Weapon{ constructor () { - super(weapons_names.elf_bow, 15, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); + super(weapons_names.elf_bow, 20, damage_types.pure, 0, 1, 0, 1, new Ability(0, ability_names.empty)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts index 1a57f5ad5..418fb49f3 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield.ts @@ -1,10 +1,10 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../../Utils/list_weapons"; -import { damage_types } from "../../../Utils/enum_damage_types"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { weapons_names } from "../../../Enums/enum_weapons"; +import { damage_types } from "../../../Enums/enum_damage_types"; +import { ability_names } from "../../../Enums/enum_abilities"; export class Paladin_Shield extends Weapon{ constructor () { - super(weapons_names.paladin_sheild, 10, damage_types.phys, 5, 2, 5, 2, new Ability(0, ability_names.empty)); + super(weapons_names.paladin_sheild, 15, damage_types.phys, 5, 2, 5, 2, new Ability(0, ability_names.empty)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts index 6ab7e23d7..1c9ea2b02 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus.ts @@ -1,10 +1,10 @@ import { Weapon } from "../Weapon"; import { Ability } from "../../Classes_abilities/Ability"; -import { weapons_names } from "../../../Utils/list_weapons"; -import { damage_types } from "../../../Utils/enum_damage_types"; -import { ability_names } from "../../../Utils/enum_abilities"; +import { weapons_names } from "../../../Enums/enum_weapons"; +import { damage_types } from "../../../Enums/enum_damage_types"; +import { ability_names } from "../../../Enums/enum_abilities"; export class Staff_Santa_Claus extends Weapon{ constructor () { - super(weapons_names.staff_santa, 20, damage_types.mag, 0, 1, 0, 1, new Ability(20, ability_names.staff_santa)); + super(weapons_names.staff_santa, 25, damage_types.mag, 0, 1, 0, 1, new Ability(20, ability_names.staff_santa)); } } \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/enum_abilities.ts b/rpgsaga/saga/src/lab3/Enums/enum_abilities.ts similarity index 76% rename from rpgsaga/saga/src/lab3/Utils/enum_abilities.ts rename to rpgsaga/saga/src/lab3/Enums/enum_abilities.ts index 242be0c31..00374a957 100644 --- a/rpgsaga/saga/src/lab3/Utils/enum_abilities.ts +++ b/rpgsaga/saga/src/lab3/Enums/enum_abilities.ts @@ -1,6 +1,6 @@ export enum ability_names{ empty = "empty", - archer_ability = "Уселенная стрела", + archer_ability = "Уселенный выстрел", warrior_ability = "Разящий удар", mage_ability = "Поджигание", staff_santa = "Замораживание" diff --git a/rpgsaga/saga/src/lab3/Utils/enum_damage_types.ts b/rpgsaga/saga/src/lab3/Enums/enum_damage_types.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/enum_damage_types.ts rename to rpgsaga/saga/src/lab3/Enums/enum_damage_types.ts diff --git a/rpgsaga/saga/src/lab3/Utils/list_debuff.ts b/rpgsaga/saga/src/lab3/Enums/enum_debuff.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/list_debuff.ts rename to rpgsaga/saga/src/lab3/Enums/enum_debuff.ts diff --git a/rpgsaga/saga/src/lab3/Enums/enum_names.ts b/rpgsaga/saga/src/lab3/Enums/enum_names.ts new file mode 100644 index 000000000..a8bc54178 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Enums/enum_names.ts @@ -0,0 +1,32 @@ +export enum names{ + "Artemis", + "Luna", + "Dorian", + "Zara", + "Raven", + "Amber", + "Kyos", + "Selena", + "Maya", + "Tarin", + "Niko", + "Irida", + "Leonard", + "Vika", + "Dorothea", + "Phoenix", + "Cassandra", + "Talon", + "Elon", + "Nereya", + "Osiris", + "Astra", + "Rio", + "Ksenia", + "Hermione", + "Valik", + "Taras", + "Orion", + "Zelda", + "Loki" +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/list_roles.ts b/rpgsaga/saga/src/lab3/Enums/enum_roles.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/list_roles.ts rename to rpgsaga/saga/src/lab3/Enums/enum_roles.ts diff --git a/rpgsaga/saga/src/lab3/Utils/list_weapons.ts b/rpgsaga/saga/src/lab3/Enums/enum_weapons.ts similarity index 100% rename from rpgsaga/saga/src/lab3/Utils/list_weapons.ts rename to rpgsaga/saga/src/lab3/Enums/enum_weapons.ts diff --git a/rpgsaga/saga/src/lab3/Utils/check_operation.ts b/rpgsaga/saga/src/lab3/Utils/check_operation.ts index 1ad4ce23f..5bde55097 100644 --- a/rpgsaga/saga/src/lab3/Utils/check_operation.ts +++ b/rpgsaga/saga/src/lab3/Utils/check_operation.ts @@ -1,13 +1,20 @@ -import { random_value_array } from "./random_v_arr"; - export function check_operation(chance_trigger: number): boolean { - const arr = new Array(100 - chance_trigger).fill(0); - const ones = new Array(chance_trigger).fill(1); - arr.push(...ones); - const fact: number = random_value_array(arr); - if (fact == 1) { + const value: number = Math.floor(Math.random() * 100) + 1 + if (value <= chance_trigger) { return true; } else { return false; } -} \ No newline at end of file +} + +// let all_sum: number = 0 +// for (let j = 0; j < 1000; j++) { +// let count: number = 0; +// for (let i = 0; i < 100; i++) { +// if (check_operation(20)) { +// count++; +// } +// } +// all_sum += count +// } +// console.log(all_sum / 1000) \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/create_player.ts b/rpgsaga/saga/src/lab3/Utils/create_player.ts new file mode 100644 index 000000000..dd5b51809 --- /dev/null +++ b/rpgsaga/saga/src/lab3/Utils/create_player.ts @@ -0,0 +1,38 @@ +import { Weapon } from "../Clasees/Classes_weapons/Weapon"; +import { Elf_Bow } from "../Clasees/Classes_weapons/Weapons/Elf_Bow"; +import { Paladin_Shield } from "../Clasees/Classes_weapons/Weapons/Paladin_Shield"; +import { Staff_Santa_Claus } from "../Clasees/Classes_weapons/Weapons/Staff_Santa_Claus"; +import { weapons_names } from "../Enums/enum_weapons"; +import { random_weapon } from "../fun_random/random_weapon"; + + +import { Player } from "../Clasees/Classes_players/Player"; +import { Archer } from "../Clasees/Classes_players/Players/Archer"; +import { Warrior } from "../Clasees/Classes_players/Players/Warrior"; +import { Mage } from "../Clasees/Classes_players/Players/Mage"; +import { role_names } from "../Enums/enum_roles"; + +import { random_name } from "../fun_random/random_name"; +import { random_hero } from "../fun_random/random_hero"; + +export function create_weapon(): Weapon { + const name_weapon: String = random_weapon(); + if (name_weapon == weapons_names.elf_bow) { + return new Elf_Bow(); + } else if (name_weapon == weapons_names.paladin_sheild) { + return new Paladin_Shield(); + } else if (name_weapon == weapons_names.staff_santa) { + return new Staff_Santa_Claus(); + } +} +export function create_player(): Player { + const weapon: Weapon = create_weapon(); + const role_player: String = random_hero(); + if (role_player == role_names.archer) { + return new Archer(random_name(), weapon, 100); + } else if (role_player == role_names.warrior) { + return new Warrior(random_name(), weapon, 100); + } else if (role_player == role_names.mage) { + return new Mage(random_name(), weapon, 100); + } +} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts b/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts deleted file mode 100644 index 100ce2b95..000000000 --- a/rpgsaga/saga/src/lab3/Utils/random_v_arr.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function random_value_array(arr: T[]): T | undefined { - if (arr.length === 0) { - return undefined; // Если массив пустой, возвращаем undefined - } - const randomIndex = Math.floor(Math.random() * arr.length); - return arr[randomIndex]; -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/create_player.ts b/rpgsaga/saga/src/lab3/create_player.ts deleted file mode 100644 index 9d34f9dde..000000000 --- a/rpgsaga/saga/src/lab3/create_player.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Weapon } from "./Clasees/Classes_weapons/Weapon"; -import { Elf_Bow } from "./Clasees/Classes_weapons/Weapons/Elf_Bow"; -import { Paladin_Shield } from "./Clasees/Classes_weapons/Weapons/Paladin_Shield"; -import { Staff_Santa_Claus } from "./Clasees/Classes_weapons/Weapons/Staff_Santa_Claus"; -import { weapons_names } from "./Utils/list_weapons"; -import { random_weapon } from "./Utils/random_weapon"; - - -import { Player } from "./Clasees/Classes_players/Player"; -import { Archer } from "./Clasees/Classes_players/Players/Archer"; -import { Warrior } from "./Clasees/Classes_players/Players/Warrior"; -import { Mage } from "./Clasees/Classes_players/Players/Mage"; -import { role_names } from "./Utils/list_roles"; -import { random_hero } from "./Utils/random_hero"; - - -import { random_value_array } from "./Utils/random_v_arr"; - -const arr_name: String[] = ["Ivan", "Dima", "Alex", "Jhon", "Sergey", ]; - -export function create_weapon(): Weapon { - const name_weapon: String = random_weapon(); - if (name_weapon == weapons_names.elf_bow) { - return new Elf_Bow(); - } else if (name_weapon == weapons_names.paladin_sheild) { - return new Paladin_Shield(); - } else if (name_weapon == weapons_names.staff_santa) { - return new Staff_Santa_Claus(); - } -} -export function create_player(): Player { - const weapon: Weapon = create_weapon(); - const role_player: String = random_hero(); - if (role_player == role_names.archer) { - return new Archer(random_value_array(arr_name), weapon, 100); - } else if (role_player == role_names.warrior) { - return new Warrior(random_value_array(arr_name), weapon, 100); - } else if (role_player == role_names.mage) { - return new Mage(random_value_array(arr_name), weapon, 100); - } -} \ No newline at end of file diff --git a/rpgsaga/saga/src/lab3/Utils/random_hero.ts b/rpgsaga/saga/src/lab3/fun_random/random_hero.ts similarity index 81% rename from rpgsaga/saga/src/lab3/Utils/random_hero.ts rename to rpgsaga/saga/src/lab3/fun_random/random_hero.ts index 55503b7b3..b3e9aefb8 100644 --- a/rpgsaga/saga/src/lab3/Utils/random_hero.ts +++ b/rpgsaga/saga/src/lab3/fun_random/random_hero.ts @@ -1,4 +1,4 @@ -import { role_names } from "./list_roles"; +import { role_names } from "../Enums/enum_roles"; export function random_hero() { const players = Object.values(role_names).filter(key => isNaN(Number(key))); diff --git a/rpgsaga/saga/src/lab3/fun_random/random_name.ts b/rpgsaga/saga/src/lab3/fun_random/random_name.ts new file mode 100644 index 000000000..ec3d0fe1c --- /dev/null +++ b/rpgsaga/saga/src/lab3/fun_random/random_name.ts @@ -0,0 +1,7 @@ +import { names } from "../Enums/enum_names"; + +export function random_name(): String { + const all_names = Object.values(names).filter(key => isNaN(Number(key))); + const randomIndex = Math.floor(Math.random() * all_names.length); + return String(all_names[randomIndex]) +} diff --git a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts b/rpgsaga/saga/src/lab3/fun_random/random_weapon.ts similarity index 80% rename from rpgsaga/saga/src/lab3/Utils/random_weapon.ts rename to rpgsaga/saga/src/lab3/fun_random/random_weapon.ts index c785bce00..af7026a73 100644 --- a/rpgsaga/saga/src/lab3/Utils/random_weapon.ts +++ b/rpgsaga/saga/src/lab3/fun_random/random_weapon.ts @@ -1,4 +1,4 @@ -import { weapons_names } from "./list_weapons"; +import { weapons_names } from "../Enums/enum_weapons"; export function random_weapon(): string { const weapons = Object.values(weapons_names).filter(key => isNaN(Number(key))); diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index 2ae2a9f1b..a0bad636a 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,3 +1,3 @@ import { battle } from "./Clasees/Classes_Battle"; -const battle_1 = new battle(2); +const battle_1 = new battle(4); battle_1.start_game(); From 00fad2a114d4d3f896df6cb9cc1cabd0aeb59410 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Fri, 17 Jan 2025 18:18:25 +0300 Subject: [PATCH 16/18] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B2=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts | 3 ++- rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts | 2 +- rpgsaga/saga/src/lab3/output_lab3.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts index b85c105ef..04724c0dc 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_Battle.ts @@ -37,7 +37,8 @@ export class battle{ } } - console.log(`${this._arr_players[0].role_name()} - единственный выживший`) + console.log(); + console.log(`${this._arr_players[0].role_name()} - единственный выживший`); } public fight(pers_1: Player, pers_2: Player) { diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts index 21747a0da..a1e315c03 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts @@ -1,7 +1,7 @@ import { Player } from "../Classes_players/Player"; import { Ability } from "../Classes_abilities/Ability"; -export class Weapon{ +export abstract class Weapon{ private _name: string; private _damage: number; private _type_damage: String; diff --git a/rpgsaga/saga/src/lab3/output_lab3.ts b/rpgsaga/saga/src/lab3/output_lab3.ts index a0bad636a..703986435 100644 --- a/rpgsaga/saga/src/lab3/output_lab3.ts +++ b/rpgsaga/saga/src/lab3/output_lab3.ts @@ -1,3 +1,3 @@ import { battle } from "./Clasees/Classes_Battle"; -const battle_1 = new battle(4); +const battle_1 = new battle(12); battle_1.start_game(); From 42d98af14bd14692bc237437b65fef8d8bf69359 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Fri, 17 Jan 2025 20:08:05 +0300 Subject: [PATCH 17/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Classes_abilities/Abilities/Archer_ability.ts | 2 +- .../saga/src/lab3/Clasees/Classes_debuff/Debuff.ts | 2 +- .../src/lab3/Clasees/Classes_players/Player.ts | 2 +- .../src/lab3/Clasees/Classes_weapons/Weapon.ts | 2 +- rpgsaga/saga/src/lab3/test.ts | 0 rpgsaga/saga/tests/{ => lab1_test}/TaskAB.spec.ts | 2 +- rpgsaga/saga/tests/{ => lab1_test}/formul.spec.ts | 2 +- .../Volleyball_player_Class.spec.ts | 2 +- .../Abilities_test/Archer_ability.spec.ts | 12 ++++++++++++ .../lab3_tests/Abilities_test/Mage_ability.spec.ts | 10 ++++++++++ .../Abilities_test/Staff_Santa_ability.spec.ts | 10 ++++++++++ .../Abilities_test/Warrior_ability.spec.ts | 12 ++++++++++++ .../Abilities_test/using_abilities.spec.ts | 14 ++++++++++++++ .../tests/lab3_tests/Classes_test/Ability.spec.ts | 7 +++++++ .../tests/lab3_tests/Classes_test/Battle.spec.ts | 6 ++++++ .../Classes_test/Debuff_test/Burning.spec.ts | 7 +++++++ .../Classes_test/Debuff_test/Debuff.spec.ts | 7 +++++++ .../saga/tests/lab3_tests/Classes_test/Hit.spec.ts | 7 +++++++ .../Classes_test/Player_test/Archer.spec.ts | 7 +++++++ .../Classes_test/Player_test/Mage.spec.ts | 6 ++++++ .../Classes_test/Player_test/Player.spec.ts | 7 +++++++ .../Classes_test/Player_test/Warrior.spec.ts | 6 ++++++ .../Classes_test/Weapon_test/Elf_Bow.spec.ts | 7 +++++++ .../Weapon_test/Paladin_Shield.spec.ts | 7 +++++++ .../Weapon_test/Staff_Santa_Claus.spec.ts | 7 +++++++ .../Classes_test/Weapon_test/Weapon.spec.ts | 7 +++++++ .../lab3_tests/Random_test/random_hero.spec.ts | 6 ++++++ .../lab3_tests/Random_test/random_name.spec.ts | 6 ++++++ .../lab3_tests/Random_test/random_weapon.spec.ts | 6 ++++++ .../saga/tests/lab3_tests/check_operation.spec.ts | 6 ++++++ .../saga/tests/lab3_tests/create_player.spec.ts | 7 +++++++ 31 files changed, 184 insertions(+), 7 deletions(-) delete mode 100644 rpgsaga/saga/src/lab3/test.ts rename rpgsaga/saga/tests/{ => lab1_test}/TaskAB.spec.ts (86%) rename rpgsaga/saga/tests/{ => lab1_test}/formul.spec.ts (95%) rename rpgsaga/saga/tests/{ => lab2_test}/Volleyball_player_Class.spec.ts (96%) create mode 100644 rpgsaga/saga/tests/lab3_tests/Abilities_test/Archer_ability.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Abilities_test/Mage_ability.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Abilities_test/Staff_Santa_ability.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Abilities_test/Warrior_ability.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Abilities_test/using_abilities.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Ability.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Battle.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Burning.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Debuff.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Archer.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Mage.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Player.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Warrior.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Weapon.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Random_test/random_hero.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Random_test/random_name.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/Random_test/random_weapon.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/check_operation.spec.ts create mode 100644 rpgsaga/saga/tests/lab3_tests/create_player.spec.ts diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts index eb4ad9029..467532813 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability.ts @@ -6,4 +6,4 @@ export function activation_archer_ability(player: Player, hit: Hit): Hit { hit.damage = Math.floor(hit.damage * 1.5); console.log(`${player.role} активирует способность ${ability_names.archer_ability}`) return hit; -} \ No newline at end of file +} diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts index 8976142a8..d0fa5fd7f 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_debuff/Debuff.ts @@ -1,6 +1,6 @@ import { Hit } from "../Class_hit"; -export abstract class Debuff{ +export class Debuff{ private _name_debuff: String; private _total_duration: number; private _duration: number; diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts index bd72d0a2d..ea0026af2 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_players/Player.ts @@ -5,7 +5,7 @@ import { activation_ability } from "../Classes_abilities/using_abilities"; import { Debuff } from "../Classes_debuff/Debuff"; import { damage_types } from "../../Enums/enum_damage_types"; -export abstract class Player{ +export class Player{ private _name: String; private _role: String; private _weapon: Weapon; diff --git a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts index a1e315c03..21747a0da 100644 --- a/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts +++ b/rpgsaga/saga/src/lab3/Clasees/Classes_weapons/Weapon.ts @@ -1,7 +1,7 @@ import { Player } from "../Classes_players/Player"; import { Ability } from "../Classes_abilities/Ability"; -export abstract class Weapon{ +export class Weapon{ private _name: string; private _damage: number; private _type_damage: String; diff --git a/rpgsaga/saga/src/lab3/test.ts b/rpgsaga/saga/src/lab3/test.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/rpgsaga/saga/tests/TaskAB.spec.ts b/rpgsaga/saga/tests/lab1_test/TaskAB.spec.ts similarity index 86% rename from rpgsaga/saga/tests/TaskAB.spec.ts rename to rpgsaga/saga/tests/lab1_test/TaskAB.spec.ts index d3871721c..52bc30c67 100644 --- a/rpgsaga/saga/tests/TaskAB.spec.ts +++ b/rpgsaga/saga/tests/lab1_test/TaskAB.spec.ts @@ -1,4 +1,4 @@ -import { taskA, taskB } from "../src/Lab1/formuls"; +import { taskA, taskB } from "../../src/Lab1/formuls"; describe('Tests of task A and task B', () => { it('Func "taskA" return correct lenght', () => { diff --git a/rpgsaga/saga/tests/formul.spec.ts b/rpgsaga/saga/tests/lab1_test/formul.spec.ts similarity index 95% rename from rpgsaga/saga/tests/formul.spec.ts rename to rpgsaga/saga/tests/lab1_test/formul.spec.ts index 004b9456a..dd22edc86 100644 --- a/rpgsaga/saga/tests/formul.spec.ts +++ b/rpgsaga/saga/tests/lab1_test/formul.spec.ts @@ -1,4 +1,4 @@ -import { formula } from "../src/Lab1/formuls"; +import { formula } from "../../src/Lab1/formuls"; describe('Test of func formul', () => { it('Func "formul" return undefind if x = 0', () => { diff --git a/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts b/rpgsaga/saga/tests/lab2_test/Volleyball_player_Class.spec.ts similarity index 96% rename from rpgsaga/saga/tests/Volleyball_player_Class.spec.ts rename to rpgsaga/saga/tests/lab2_test/Volleyball_player_Class.spec.ts index d23c9ef00..c1de63f29 100644 --- a/rpgsaga/saga/tests/Volleyball_player_Class.spec.ts +++ b/rpgsaga/saga/tests/lab2_test/Volleyball_player_Class.spec.ts @@ -1,4 +1,4 @@ -import { Volleyball_Player } from "../src/Lab2/Volleyball_player_Class"; +import { Volleyball_Player } from "../../src/Lab2/Volleyball_player_Class"; describe("Volleyball_Player constructor tests", () => { let person: Volleyball_Player; diff --git a/rpgsaga/saga/tests/lab3_tests/Abilities_test/Archer_ability.spec.ts b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Archer_ability.spec.ts new file mode 100644 index 000000000..28de3fcb7 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Archer_ability.spec.ts @@ -0,0 +1,12 @@ +import { Player } from "../../../src/lab3/Clasees/Classes_players/Player"; +import { Elf_Bow } from "../../../src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow"; +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; +import { activation_archer_ability } from "../../../src/lab3/Clasees/Classes_abilities/Abilities/Archer_ability"; + +test('archer ability should increase damage by 50%', () => { + const weapon = new Elf_Bow() + const player = new Player("Test Archer", "Archer", weapon, 100, 5, 5, {} as any); + const hit = new Hit(100, "phys", false); + const newHit = activation_archer_ability(player, hit); + expect(newHit.damage).toBe(150); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Abilities_test/Mage_ability.spec.ts b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Mage_ability.spec.ts new file mode 100644 index 000000000..c5d57ed12 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Mage_ability.spec.ts @@ -0,0 +1,10 @@ +import { Player } from "../../../src/lab3/Clasees/Classes_players/Player"; +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; +import { activation_mage_ability } from "../../../src/lab3/Clasees/Classes_abilities/Abilities/Mage_ability"; + +test('mage ability should apply burning debuff', () => { + const player = new Player("Test Mage", "Mage", {} as any, 100, 10, 10, {} as any); + const hit = new Hit(100, "mag", false); + const newHit = activation_mage_ability(player, hit); + expect(newHit.debuff).toBeDefined(); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Abilities_test/Staff_Santa_ability.spec.ts b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Staff_Santa_ability.spec.ts new file mode 100644 index 000000000..2352500cf --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Staff_Santa_ability.spec.ts @@ -0,0 +1,10 @@ +import { Player } from "../../../src/lab3/Clasees/Classes_players/Player"; +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; +import { activation_staff_santa_ability } from "../../../src/lab3/Clasees/Classes_abilities/Abilities/Staff_Santa_ability"; + +test('staff santa ability should apply control effect', () => { + const player = new Player("Test Santa", "Santa", {} as any, 100, 0, 0, {} as any); + const hit = new Hit(100, "mag", false); + const newHit = activation_staff_santa_ability(player, hit); + expect(newHit.control).toBe(true); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Abilities_test/Warrior_ability.spec.ts b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Warrior_ability.spec.ts new file mode 100644 index 000000000..905996751 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Abilities_test/Warrior_ability.spec.ts @@ -0,0 +1,12 @@ +import { Player } from "../../../src/lab3/Clasees/Classes_players/Player"; +import { Paladin_Shield } from "../../../src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield"; +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; +import { activation_warriro_ability } from "../../../src/lab3/Clasees/Classes_abilities/Abilities/Warrior_ability"; + +test('warrior ability should increase damage based on resistances', () => { + const weapon = new Paladin_Shield() + const player = new Player("Test Warrior", "Warrior", weapon, 100, 20, 20, {} as any); + const hit = new Hit(100, "phys", false); + const newHit = activation_warriro_ability(player, hit); + expect(newHit.damage).toBeGreaterThan(100); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Abilities_test/using_abilities.spec.ts b/rpgsaga/saga/tests/lab3_tests/Abilities_test/using_abilities.spec.ts new file mode 100644 index 000000000..ea501f838 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Abilities_test/using_abilities.spec.ts @@ -0,0 +1,14 @@ +import { Ability } from "../../../src/lab3/Clasees/Classes_abilities/Ability"; +import { Elf_Bow } from "../../../src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow"; +import { Player } from "../../../src/lab3/Clasees/Classes_players/Player"; +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; +import { activation_ability } from "../../../src/lab3/Clasees/Classes_abilities/using_abilities"; + +test('activation_ability should apply correct ability', () => { + const weapon = new Elf_Bow(); + const player = new Player("Test Player", "Archer", weapon, 100, 5, 5, {} as any); + const hit = new Hit(100, "phys", false); + const abilities = [new Ability(100, "Уселенный выстрел")]; + const newHit = activation_ability(abilities, player, hit); + expect(newHit.damage).toBe(150); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Ability.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Ability.spec.ts new file mode 100644 index 000000000..ce2c39524 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Ability.spec.ts @@ -0,0 +1,7 @@ +import { Ability } from "../../../src/lab3/Clasees/Classes_abilities/Ability"; + +test('ability should have correct properties', () => { + const ability = new Ability(20, "Test Ability"); + expect(ability.change_ability).toBe(20); + expect(ability.name_ability).toBe("Test Ability"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Battle.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Battle.spec.ts new file mode 100644 index 000000000..68f239e0d --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Battle.spec.ts @@ -0,0 +1,6 @@ +import { battle } from "../../../src/lab3/Clasees/Classes_Battle"; + +test('battle should start with correct number of players', () => { + const battleInstance = new battle(12); + expect(battleInstance).toBeInstanceOf(battle); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Burning.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Burning.spec.ts new file mode 100644 index 000000000..692907c8e --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Burning.spec.ts @@ -0,0 +1,7 @@ +import { Burning } from "../../../../src/lab3/Clasees/Classes_debuff/Debuffs/Burning"; + +test('burning debuff should have correct properties', () => { + const burning = new Burning(); + expect(burning.name_debuff).toBe("Горение"); + expect(burning.duration).toBe(3); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Debuff.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Debuff.spec.ts new file mode 100644 index 000000000..3cfca25eb --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Debuff_test/Debuff.spec.ts @@ -0,0 +1,7 @@ +import { Debuff } from "../../../../src/lab3/Clasees/Classes_debuff/Debuff"; + +test('debuff should have correct properties', () => { + const debuff = new Debuff("Test Debuff", 3, 10, "mag", false); + expect(debuff.name_debuff).toBe("Test Debuff"); + expect(debuff.duration).toBe(3); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts new file mode 100644 index 000000000..00cdb60ab --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts @@ -0,0 +1,7 @@ +import { Hit } from "../../../src/lab3/Clasees/Class_hit"; + +test('hit should have correct properties', () => { + const hit = new Hit(100, "phys", false); + expect(hit.damage).toBe(100); + expect(hit.type_damage).toBe("phys"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Archer.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Archer.spec.ts new file mode 100644 index 000000000..3f98c7aae --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Archer.spec.ts @@ -0,0 +1,7 @@ +import { Archer } from "../../../../src/lab3/Clasees/Classes_players/Players/Archer"; + +test('archer should have correct properties', () => { + const archer = new Archer("Test Archer", {} as any, 100); + expect(archer.role).toBe("Archer"); + expect(archer.health).toBe(100); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Mage.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Mage.spec.ts new file mode 100644 index 000000000..96aa67ca4 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Mage.spec.ts @@ -0,0 +1,6 @@ +import { Mage } from "../../../../src/lab3/Clasees/Classes_players/Players/Mage"; + +test('mage should have correct properties', () => { + const mage = new Mage("Test Mage", {} as any, 100); + expect(mage.role).toBe("Mage"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Player.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Player.spec.ts new file mode 100644 index 000000000..245d9af9b --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Player.spec.ts @@ -0,0 +1,7 @@ +import { Player } from "../../../../src/lab3/Clasees/Classes_players/Player"; + +test('player should have correct properties', () => { + const player = new Player("Test Player", "Archer", {} as any, 100, 5, 5, {} as any); + expect(player.name).toBe("Test Player"); + expect(player.role).toBe("Archer"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Warrior.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Warrior.spec.ts new file mode 100644 index 000000000..d253f9ff6 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Player_test/Warrior.spec.ts @@ -0,0 +1,6 @@ +import { Warrior } from "../../../../src/lab3/Clasees/Classes_players/Players/Warrior"; + +test('warrior should have correct properties', () => { + const warrior = new Warrior("Test Warrior", {} as any, 100); + expect(warrior.role).toBe("Warrior"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts new file mode 100644 index 000000000..3edea59a4 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts @@ -0,0 +1,7 @@ +import { Elf_Bow } from "../../../../src/lab3/Clasees/Classes_weapons/Weapons/Elf_Bow"; + +test('elf bow should have correct properties', () => { + const elfBow = new Elf_Bow(); + expect(elfBow.name).toBe("Elf`s bow"); + expect(elfBow.damage).toBe(20); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts new file mode 100644 index 000000000..7cc2e4903 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts @@ -0,0 +1,7 @@ +import { Paladin_Shield } from "../../../../src/lab3/Clasees/Classes_weapons/Weapons/Paladin_Shield"; + +test('paladin shield should have correct properties', () => { + const paladinShield = new Paladin_Shield(); + expect(paladinShield.name).toBe("Paladin`s shield"); + expect(paladinShield.damage).toBe(15); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts new file mode 100644 index 000000000..22f94b30c --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts @@ -0,0 +1,7 @@ +import { Staff_Santa_Claus } from "../../../../src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus"; + +test('staff santa claus should have correct properties', () => { + const staffSantaClaus = new Staff_Santa_Claus(); + expect(staffSantaClaus.name).toBe("Santa Claus`s staff"); + expect(staffSantaClaus.damage).toBe(25); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Weapon.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Weapon.spec.ts new file mode 100644 index 000000000..1b9ff1ba0 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Weapon.spec.ts @@ -0,0 +1,7 @@ +import { Weapon } from "../../../../src/lab3/Clasees/Classes_weapons/Weapon"; + +test('weapon should have correct properties', () => { + const weapon = new Weapon("Test Weapon", 100, "phys", 0, 1, 0, 1, {} as any); + expect(weapon.name).toBe("Test Weapon"); + expect(weapon.damage).toBe(100); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Random_test/random_hero.spec.ts b/rpgsaga/saga/tests/lab3_tests/Random_test/random_hero.spec.ts new file mode 100644 index 000000000..447de8281 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Random_test/random_hero.spec.ts @@ -0,0 +1,6 @@ +import { random_hero } from "../../../src/lab3/fun_random/random_hero"; + +test('random_hero should return a valid role', () => { + const role = random_hero(); + expect(["Archer", "Mage", "Warrior"]).toContain(role); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Random_test/random_name.spec.ts b/rpgsaga/saga/tests/lab3_tests/Random_test/random_name.spec.ts new file mode 100644 index 000000000..afa44d389 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Random_test/random_name.spec.ts @@ -0,0 +1,6 @@ +import { random_name } from "../../../src/lab3/fun_random/random_name"; + +test('random_name should return a valid name', () => { + const name = random_name(); + expect(typeof name).toBe("string"); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Random_test/random_weapon.spec.ts b/rpgsaga/saga/tests/lab3_tests/Random_test/random_weapon.spec.ts new file mode 100644 index 000000000..ee665b86c --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/Random_test/random_weapon.spec.ts @@ -0,0 +1,6 @@ +import { random_weapon } from "../../../src/lab3/fun_random/random_weapon"; + +test('random_weapon should return a valid weapon name', () => { + const weapon = random_weapon(); + expect(["Elf`s bow", "Paladin`s shield", "Santa Claus`s staff"]).toContain(weapon); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/check_operation.spec.ts b/rpgsaga/saga/tests/lab3_tests/check_operation.spec.ts new file mode 100644 index 000000000..9e1db9c11 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/check_operation.spec.ts @@ -0,0 +1,6 @@ +import { check_operation } from "../../src/lab3/Utils/check_operation"; + +test('check_operation should return true or false based on chance', () => { + const result = check_operation(50); + expect([true, false]).toContain(result); +}); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/create_player.spec.ts b/rpgsaga/saga/tests/lab3_tests/create_player.spec.ts new file mode 100644 index 000000000..bc3e44a69 --- /dev/null +++ b/rpgsaga/saga/tests/lab3_tests/create_player.spec.ts @@ -0,0 +1,7 @@ +import { create_player } from "../../src/lab3/Utils/create_player"; + +test('create_player should return a valid player', () => { + const player = create_player(); + expect(player).toBeDefined(); + expect(["Archer", "Mage", "Warrior"]).toContain(player.role); +}); \ No newline at end of file From 06a10ec9cdc812a03af5fd923ddf177bbe5dc458 Mon Sep 17 00:00:00 2001 From: LysovDmitri Date: Sat, 18 Jan 2025 06:14:41 +0300 Subject: [PATCH 18/18] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts | 1 + .../lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts | 5 +++++ .../Classes_test/Weapon_test/Paladin_Shield.spec.ts | 5 +++++ .../Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts | 6 ++++++ 4 files changed, 17 insertions(+) diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts index 00cdb60ab..10980ee58 100644 --- a/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Hit.spec.ts @@ -4,4 +4,5 @@ test('hit should have correct properties', () => { const hit = new Hit(100, "phys", false); expect(hit.damage).toBe(100); expect(hit.type_damage).toBe("phys"); + expect(hit.control).toBe(false) }); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts index 3edea59a4..3d03d0e30 100644 --- a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Elf_Bow.spec.ts @@ -4,4 +4,9 @@ test('elf bow should have correct properties', () => { const elfBow = new Elf_Bow(); expect(elfBow.name).toBe("Elf`s bow"); expect(elfBow.damage).toBe(20); + expect(elfBow.type_damage).toBe('pure'); + expect(elfBow.increase_magic_resist).toBe(0); + expect(elfBow.increase_phys_resist).toBe(0); + expect(elfBow.multiplier_magic_resist).toBe(1); + expect(elfBow.multiplier_phys_resist).toBe(1); }); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts index 7cc2e4903..bfec89075 100644 --- a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Paladin_Shield.spec.ts @@ -4,4 +4,9 @@ test('paladin shield should have correct properties', () => { const paladinShield = new Paladin_Shield(); expect(paladinShield.name).toBe("Paladin`s shield"); expect(paladinShield.damage).toBe(15); + expect(paladinShield.type_damage).toBe('physical'); + expect(paladinShield.increase_magic_resist).toBe(5); + expect(paladinShield.increase_phys_resist).toBe(5); + expect(paladinShield.multiplier_magic_resist).toBe(2); + expect(paladinShield.multiplier_phys_resist).toBe(2); }); \ No newline at end of file diff --git a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts index 22f94b30c..7a63a681e 100644 --- a/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts +++ b/rpgsaga/saga/tests/lab3_tests/Classes_test/Weapon_test/Staff_Santa_Claus.spec.ts @@ -1,7 +1,13 @@ +import exp = require("constants"); import { Staff_Santa_Claus } from "../../../../src/lab3/Clasees/Classes_weapons/Weapons/Staff_Santa_Claus"; test('staff santa claus should have correct properties', () => { const staffSantaClaus = new Staff_Santa_Claus(); expect(staffSantaClaus.name).toBe("Santa Claus`s staff"); expect(staffSantaClaus.damage).toBe(25); + expect(staffSantaClaus.type_damage).toBe('magical') + expect(staffSantaClaus.increase_magic_resist).toBe(0); + expect(staffSantaClaus.increase_phys_resist).toBe(0); + expect(staffSantaClaus.multiplier_magic_resist).toBe(1); + expect(staffSantaClaus.multiplier_phys_resist).toBe(1); }); \ No newline at end of file