From ad5188a2807d0a18350dc348a31067d040f86660 Mon Sep 17 00:00:00 2001 From: Florian Brandes Date: Sat, 16 Apr 2022 21:56:10 +0200 Subject: [PATCH 01/86] add TIFF barcode support Signed-off-by: Florian Brandes --- docs/configuration.rst | 6 + src/documents/tasks.py | 123 +++++++++++++----- .../samples/barcodes/patch-code-t-middle.tiff | Bin 0 -> 2042862 bytes src/documents/tests/samples/simple.tiff | Bin 0 -> 57135 bytes src/documents/tests/test_tasks.py | 42 +++++- src/paperless/settings.py | 4 + 6 files changed, 138 insertions(+), 37 deletions(-) create mode 100644 src/documents/tests/samples/barcodes/patch-code-t-middle.tiff create mode 100644 src/documents/tests/samples/simple.tiff diff --git a/docs/configuration.rst b/docs/configuration.rst index 3541f2e07..248d7a492 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -626,6 +626,12 @@ PAPERLESS_CONSUMER_ENABLE_BARCODES= Defaults to false. +PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT= + Whether TIFF image files should be scanned for barcodes. + This will automatically convert any TIFF image(s) to pdfs for later + processing. + + Defaults to false. PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT Defines the string to be detected as a separator barcode. diff --git a/src/documents/tasks.py b/src/documents/tasks.py index e9a015d67..dfa2c6bcd 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -22,6 +22,8 @@ from documents.models import Tag from documents.sanity_checker import SanityCheckFailedException from pdf2image import convert_from_path from pikepdf import Pdf +from PIL import Image +from PIL import ImageSequence from pyzbar import pyzbar from whoosh.writing import AsyncWriter @@ -93,6 +95,41 @@ def barcode_reader(image) -> List[str]: return barcodes +def convert_from_tiff_to_pdf(filepath: str) -> str: + """ + converts a given TIFF image file to pdf. + Returns the new pdf file. + """ + file_extension = os.path.splitext(os.path.basename(filepath))[1] + # use old file name with pdf extension + if file_extension == ".tif": + newpath = filepath.replace(".tif", ".pdf") + elif file_extension == ".tiff": + newpath = filepath.replace(".tiff", ".pdf") + else: + logger.warning(f"Cannot convert from {str(file_extension)} to pdf.") + return "" + image = Image.open(filepath) + images = [] + for i, page in enumerate(ImageSequence.Iterator(image)): + page = page.convert("RGB") + images.append(page) + try: + if len(images) == 1: + images[0].save(newpath) + else: + images[0].save(newpath, save_all=True, append_images=images[1:]) + os.unlink(filepath) + except OSError as e: + logger.warning( + f"Could not save the file as pdf. " + f"The original image file was not deleted. Error: " + f"{str(e)}", + ) + image.close() + return newpath + + def scan_file_for_separating_barcodes(filepath: str) -> List[int]: """ Scan the provided file for page separating barcodes @@ -195,42 +232,56 @@ def consume_file( if settings.CONSUMER_ENABLE_BARCODES: separators = [] document_list = [] - separators = scan_file_for_separating_barcodes(path) - if separators: - logger.debug(f"Pages with separators found in: {str(path)}") - document_list = separate_pages(path, separators) - if document_list: - for n, document in enumerate(document_list): - # save to consumption dir - # rename it to the original filename with number prefix - if override_filename: - newname = f"{str(n)}_" + override_filename - else: - newname = None - save_to_dir(document, newname=newname) - # if we got here, the document was successfully split - # and can safely be deleted - logger.debug("Deleting file {}".format(path)) - os.unlink(path) - # notify the sender, otherwise the progress bar - # in the UI stays stuck - payload = { - "filename": override_filename, - "task_id": task_id, - "current_progress": 100, - "max_progress": 100, - "status": "SUCCESS", - "message": "finished", - } - try: - async_to_sync(get_channel_layer().group_send)( - "status_updates", - {"type": "status_update", "data": payload}, - ) - except OSError as e: - logger.warning("OSError. It could be, the broker cannot be reached.") - logger.warning(str(e)) - return "File successfully split" + if settings.CONSUMER_BARCODE_TIFF_SUPPORT: + supported_extensions = [".pdf", ".tiff", ".tif"] + else: + supported_extensions = [".pdf"] + file_extension = os.path.splitext(os.path.basename(path))[1] + if file_extension not in supported_extensions: + logger.warning( + f"Unsupported file format for barcode reader: {str(file_extension)}", + ) + else: + if file_extension == ".tif" or file_extension == ".tiff": + path = convert_from_tiff_to_pdf(path) + separators = scan_file_for_separating_barcodes(path) + if separators: + logger.debug(f"Pages with separators found in: {str(path)}") + document_list = separate_pages(path, separators) + if document_list: + for n, document in enumerate(document_list): + # save to consumption dir + # rename it to the original filename with number prefix + if override_filename: + newname = f"{str(n)}_" + override_filename + else: + newname = None + save_to_dir(document, newname=newname) + # if we got here, the document was successfully split + # and can safely be deleted + logger.debug("Deleting file {}".format(path)) + os.unlink(path) + # notify the sender, otherwise the progress bar + # in the UI stays stuck + payload = { + "filename": override_filename, + "task_id": task_id, + "current_progress": 100, + "max_progress": 100, + "status": "SUCCESS", + "message": "finished", + } + try: + async_to_sync(get_channel_layer().group_send)( + "status_updates", + {"type": "status_update", "data": payload}, + ) + except OSError as e: + logger.warning( + "OSError. It could be, the broker cannot be reached.", + ) + logger.warning(str(e)) + return "File successfully split" # continue with consumption if no barcode was found document = Consumer().try_consume_file( diff --git a/src/documents/tests/samples/barcodes/patch-code-t-middle.tiff b/src/documents/tests/samples/barcodes/patch-code-t-middle.tiff new file mode 100644 index 0000000000000000000000000000000000000000..33c420b4fe00e3e4ee7f66f0ea8e7e059032a586 GIT binary patch literal 2042862 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
bE(4)|bo#0RGnK6st+yWoS_6(8(w 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 literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index c78fa16c2..df9e10077 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -204,6 +204,30 @@ class TestTasks(DirectoriesMixin, TestCase): img = Image.open(test_file) self.assertEqual(tasks.barcode_reader(img), ["CUSTOM BARCODE"]) + def test_convert_from_tiff_to_pdf(self): + test_file = os.path.join( + os.path.dirname(__file__), + "samples", + "simple.tiff", + ) + dst = os.path.join(settings.SCRATCH_DIR, "simple.tiff") + shutil.copy(test_file, dst) + target_file = tasks.convert_from_tiff_to_pdf(dst) + file_extension = os.path.splitext(os.path.basename(target_file))[1] + self.assertTrue(os.path.isfile(target_file)) + self.assertEqual(file_extension, ".pdf") + + def test_convert_error_from_pdf_to_pdf(self): + test_file = os.path.join( + os.path.dirname(__file__), + "samples", + "simple.pdf", + ) + dst = os.path.join(settings.SCRATCH_DIR, "simple.pdf") + shutil.copy(test_file, dst) + target_file = tasks.convert_from_tiff_to_pdf(dst) + self.assertFalse(os.path.isfile(target_file)) + def test_scan_file_for_separating_barcodes(self): test_file = os.path.join( os.path.dirname(__file__), @@ -400,7 +424,23 @@ class TestTasks(DirectoriesMixin, TestCase): "barcodes", "patch-code-t-middle.pdf", ) - dst = os.path.join(settings.SCRATCH_DIR, "patch-code-t-middle.pd") + dst = os.path.join(settings.SCRATCH_DIR, "patch-code-t-middle.pdf") + shutil.copy(test_file, dst) + + self.assertEqual(tasks.consume_file(dst), "File successfully split") + + @override_settings( + CONSUMER_ENABLE_BARCODES=True, + CONSUMER_BARCODE_TIFF_SUPPORT=True, + ) + def test_consume_barcode_tiff_file(self): + test_file = os.path.join( + os.path.dirname(__file__), + "samples", + "barcodes", + "patch-code-t-middle.tiff", + ) + dst = os.path.join(settings.SCRATCH_DIR, "patch-code-t-middle.tiff") shutil.copy(test_file, dst) self.assertEqual(tasks.consume_file(dst), "File successfully split") diff --git a/src/paperless/settings.py b/src/paperless/settings.py index b267ee10f..ec18cc0ea 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -502,6 +502,10 @@ CONSUMER_ENABLE_BARCODES = __get_boolean( "PAPERLESS_CONSUMER_ENABLE_BARCODES", ) +CONSUMER_BARCODE_TIFF_SUPPORT = __get_boolean( + "PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT", +) + CONSUMER_BARCODE_STRING = os.getenv("PAPERLESS_CONSUMER_BARCODE_STRING", "PATCHT") OPTIMIZE_THUMBNAILS = __get_boolean("PAPERLESS_OPTIMIZE_THUMBNAILS", "true") From 6d0fdc751027809a13e0430c16b8f248b3eb03e8 Mon Sep 17 00:00:00 2001 From: Florian Brandes Date: Sun, 17 Apr 2022 16:10:26 +0200 Subject: [PATCH 02/86] add tests fix indention add more documentation Signed-off-by: Florian Brandes --- docs/configuration.rst | 5 +++++ src/documents/tasks.py | 7 +++--- src/documents/tests/test_tasks.py | 37 +++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 248d7a492..20cd2941f 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -624,12 +624,17 @@ PAPERLESS_CONSUMER_ENABLE_BARCODES= If no barcodes are detected in the uploaded file, no page separation will happen. + The original document will be removed and the separated pages will be + saved as pdf. + Defaults to false. PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT= Whether TIFF image files should be scanned for barcodes. This will automatically convert any TIFF image(s) to pdfs for later processing. + This only has an effect, if PAPERLESS_CONSUMER_ENABLE_BARCODES has been + enabled. Defaults to false. diff --git a/src/documents/tasks.py b/src/documents/tasks.py index dfa2c6bcd..e20554f76 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -119,20 +119,21 @@ def convert_from_tiff_to_pdf(filepath: str) -> str: images[0].save(newpath) else: images[0].save(newpath, save_all=True, append_images=images[1:]) - os.unlink(filepath) except OSError as e: logger.warning( f"Could not save the file as pdf. " f"The original image file was not deleted. Error: " f"{str(e)}", ) + return "" + os.unlink(filepath) image.close() return newpath def scan_file_for_separating_barcodes(filepath: str) -> List[int]: """ - Scan the provided file for page separating barcodes + Scan the provided pdf file for page separating barcodes Returns a list of pagenumbers, which separate the file """ separator_page_numbers = [] @@ -149,7 +150,7 @@ def scan_file_for_separating_barcodes(filepath: str) -> List[int]: def separate_pages(filepath: str, pages_to_split_on: List[int]) -> List[str]: """ - Separate the provided file on the pages_to_split_on. + Separate the provided pdf file on the pages_to_split_on. The pages which are defined by page_numbers will be removed. Returns a list of (temporary) filepaths to consume. These will need to be deleted later. diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index df9e10077..baff2f534 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -445,6 +445,43 @@ class TestTasks(DirectoriesMixin, TestCase): self.assertEqual(tasks.consume_file(dst), "File successfully split") + @override_settings( + CONSUMER_ENABLE_BARCODES=True, + CONSUMER_BARCODE_TIFF_SUPPORT=True, + ) + @mock.patch("documents.consumer.Consumer.try_consume_file") + def test_consume_barcode_unsupported_jpg_file(self, m): + """ + This test assumes barcode and TIFF support are enabled and + the user uploads an unsupported image file (e.g. jpg) + + The function shouldn't try to scan for separating barcodes + and continue archiving the file as is. + """ + test_file = os.path.join( + os.path.dirname(__file__), + "samples", + "simple.jpg", + ) + dst = os.path.join(settings.SCRATCH_DIR, "simple.jpg") + shutil.copy(test_file, dst) + with self.assertLogs("paperless.tasks", level="WARNING") as cm: + self.assertIn("Success", tasks.consume_file(dst)) + self.assertEqual( + cm.output, + [ + "WARNING:paperless.tasks:Unsupported file format for barcode reader: .jpg", + ], + ) + m.assert_called_once() + + args, kwargs = m.call_args + self.assertIsNone(kwargs["override_filename"]) + self.assertIsNone(kwargs["override_title"]) + self.assertIsNone(kwargs["override_correspondent_id"]) + self.assertIsNone(kwargs["override_document_type_id"]) + self.assertIsNone(kwargs["override_tag_ids"]) + @mock.patch("documents.tasks.sanity_checker.check_sanity") def test_sanity_check_success(self, m): m.return_value = SanityCheckMessages() From bf57b6e4a25c86c9ea48423d9b6e13c022454897 Mon Sep 17 00:00:00 2001 From: Florian Brandes Date: Tue, 19 Apr 2022 13:07:42 +0200 Subject: [PATCH 03/86] more improvements to tiff support Signed-off-by: Florian Brandes --- src/documents/tasks.py | 45 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/documents/tasks.py b/src/documents/tasks.py index e20554f76..c25b24342 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -97,15 +97,15 @@ def barcode_reader(image) -> List[str]: def convert_from_tiff_to_pdf(filepath: str) -> str: """ - converts a given TIFF image file to pdf. + converts a given TIFF image file to pdf into a temp. directory. Returns the new pdf file. """ - file_extension = os.path.splitext(os.path.basename(filepath))[1] + file_name = os.path.splitext(os.path.basename(filepath))[0] + file_extension = os.path.splitext(os.path.basename(filepath))[1].lower() + tempdir = tempfile.mkdtemp(prefix="paperless-", dir=settings.SCRATCH_DIR) # use old file name with pdf extension - if file_extension == ".tif": - newpath = filepath.replace(".tif", ".pdf") - elif file_extension == ".tiff": - newpath = filepath.replace(".tiff", ".pdf") + if file_extension == ".tif" or file_extension == ".tiff": + newpath = os.path.join(tempdir, file_name + ".pdf") else: logger.warning(f"Cannot convert from {str(file_extension)} to pdf.") return "" @@ -121,12 +121,9 @@ def convert_from_tiff_to_pdf(filepath: str) -> str: images[0].save(newpath, save_all=True, append_images=images[1:]) except OSError as e: logger.warning( - f"Could not save the file as pdf. " - f"The original image file was not deleted. Error: " - f"{str(e)}", + f"Could not save the file as pdf. Error: {str(e)}", ) return "" - os.unlink(filepath) image.close() return newpath @@ -233,22 +230,35 @@ def consume_file( if settings.CONSUMER_ENABLE_BARCODES: separators = [] document_list = [] + converted_tiff = None if settings.CONSUMER_BARCODE_TIFF_SUPPORT: supported_extensions = [".pdf", ".tiff", ".tif"] else: supported_extensions = [".pdf"] - file_extension = os.path.splitext(os.path.basename(path))[1] + file_extension = os.path.splitext(os.path.basename(path))[1].lower() if file_extension not in supported_extensions: + # if not supported, skip this routine logger.warning( f"Unsupported file format for barcode reader: {str(file_extension)}", ) else: if file_extension == ".tif" or file_extension == ".tiff": - path = convert_from_tiff_to_pdf(path) - separators = scan_file_for_separating_barcodes(path) + converted_tiff = convert_from_tiff_to_pdf(path) + if converted_tiff: + separators = scan_file_for_separating_barcodes(converted_tiff) + else: + separators = scan_file_for_separating_barcodes(path) if separators: - logger.debug(f"Pages with separators found in: {str(path)}") - document_list = separate_pages(path, separators) + if converted_tiff: + logger.debug( + f"Pages with separators found in: {str(converted_tiff)}", + ) + document_list = separate_pages(converted_tiff, separators) + else: + logger.debug( + f"Pages with separators found in: {str(path)}", + ) + document_list = separate_pages(path, separators) if document_list: for n, document in enumerate(document_list): # save to consumption dir @@ -260,6 +270,9 @@ def consume_file( save_to_dir(document, newname=newname) # if we got here, the document was successfully split # and can safely be deleted + if converted_tiff: + logger.debug("Deleting file {}".format(converted_tiff)) + os.unlink(converted_tiff) logger.debug("Deleting file {}".format(path)) os.unlink(path) # notify the sender, otherwise the progress bar @@ -282,6 +295,8 @@ def consume_file( "OSError. It could be, the broker cannot be reached.", ) logger.warning(str(e)) + # consuming stops here, since the original document with + # the barcodes has been split and will be consumed separately return "File successfully split" # continue with consumption if no barcode was found From 33134d45296d18754648a3d7d895a25dc814f13d Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 19 Apr 2022 08:32:34 -0700 Subject: [PATCH 04/86] In the event of an error when setting the mail account folder, attempt to list the account's folders to the log --- src/paperless_mail/mail.py | 14 ++++++ src/paperless_mail/tests/test_mail.py | 70 ++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 5df29e2b0..471d861e1 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -190,6 +190,20 @@ class MailAccountHandler(LoggingMixin): try: M.folder.set(rule.folder) except MailboxFolderSelectError: + + self.log( + "error", + f"Unable to access folder {rule.folder}, attempting folder listing", + ) + try: + for folder_info in M.folder.list(): + self.log("info", f"Located folder: {str(folder_info)}") + except Exception: + self.log( + "error", + "Exception during folder listing, unable to provide list folders", + ) + raise MailError( f"Rule {rule}: Folder {rule.folder} " f"does not exist in account {rule.account}", diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 9335bcd75..a638fc894 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -15,6 +15,7 @@ from django.test import TestCase from documents.models import Correspondent from documents.tests.utils import DirectoriesMixin from imap_tools import EmailAddress +from imap_tools import FolderInfo from imap_tools import MailboxFolderSelectError from imap_tools import MailMessage from imap_tools import MailMessageFlags @@ -53,13 +54,12 @@ class BogusMailBox(ContextManager): def __init__(self): self.messages: List[MailMessage] = [] self.messages_spam: List[MailMessage] = [] + self.folder = BogusFolderManager() def login(self, username, password): if not (username == "admin" and password == "secret"): raise Exception() - folder = BogusFolderManager() - def fetch(self, criteria, mark_seen, charset=""): msg = self.messages @@ -621,6 +621,72 @@ class TestMail(DirectoriesMixin, TestCase): self.assertEqual(len(self.bogus_mailbox.messages), 2) self.assertEqual(len(self.bogus_mailbox.messages_spam), 1) + def test_error_folder_set(self): + """ + GIVEN: + - Mail rule with non-existent folder + THEN: + - Should call list to output all folders in the account + - Should not process any messages + """ + account = MailAccount.objects.create( + name="test2", + imap_server="", + username="admin", + password="secret", + ) + _ = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.AttachmentAction.MOVE, + action_parameter="spam", + filter_subject="Claim", + order=1, + folder="uuuhhhh", # Invalid folder name + ) + + self.bogus_mailbox.folder.list = mock.Mock( + return_value=[FolderInfo("SomeFoldername", "|", ())], + ) + + self.mail_account_handler.handle_mail_account(account) + + self.bogus_mailbox.folder.list.assert_called_once() + self.assertEqual(self.async_task.call_count, 0) + + def test_error_folder_set_error_listing(self): + """ + GIVEN: + - Mail rule with non-existent folder + - Mail account folder listing raises exception + THEN: + - Should not process any messages + """ + account = MailAccount.objects.create( + name="test2", + imap_server="", + username="admin", + password="secret", + ) + _ = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.AttachmentAction.MOVE, + action_parameter="spam", + filter_subject="Claim", + order=1, + folder="uuuhhhh", # Invalid folder name + ) + + self.bogus_mailbox.folder.list = mock.Mock( + side_effect=MailboxFolderSelectError(None, "uhm"), + ) + + self.mail_account_handler.handle_mail_account(account) + + self.bogus_mailbox.folder.list.assert_called_once() + self.assertEqual(self.async_task.call_count, 0) + @mock.patch("paperless_mail.mail.MailAccountHandler.get_correspondent") def test_error_skip_mail(self, m): def get_correspondent_fake(message, rule): From 5603834282295874706cb6c3ab540a56b8136d22 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 19 Apr 2022 09:03:08 -0700 Subject: [PATCH 05/86] Only output the folder names --- src/paperless_mail/mail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 471d861e1..c9edf3e5e 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -197,7 +197,7 @@ class MailAccountHandler(LoggingMixin): ) try: for folder_info in M.folder.list(): - self.log("info", f"Located folder: {str(folder_info)}") + self.log("info", f"Located folder: {folder_info.name}") except Exception: self.log( "error", From 06cfba8c7e61c23a5f86ff9316cef9d8004cb570 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 19 Apr 2022 09:05:30 -0700 Subject: [PATCH 06/86] Updates the documentation --- docs/usage_overview.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index e6bb8f31e..5020b783d 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -184,7 +184,9 @@ These are as follows: define how the sub-folders are separated. Common values include ".", "/" or "|", but this varies by the mail server. Unfortunately, this isn't a value we can determine automatically. Either check the documentation for your mail server, or check for - errors in the logs and try different folder separator values. + errors in the logs and try different folder separator values. If possible, + the log will contain a listing of account folders, in the event of an error when + trying to fetch mail from a certain folder. .. note:: From b4ecf8e28ec6772d7a6fdd68c2332efbb3d460f3 Mon Sep 17 00:00:00 2001 From: Mike Unke Date: Tue, 19 Apr 2022 21:47:49 +0200 Subject: [PATCH 07/86] Open preview link in new browser tab --- .../document-card-large/document-card-large.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 5c8f651ba..04eb3385b 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -42,7 +42,7 @@  Edit - From 57f32e5360bb1c84d5a4290615a4079c7e014d2a Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 19 Apr 2022 13:37:30 -0700 Subject: [PATCH 08/86] Includes exception information during exception listing folders Co-authored-by: Florian --- src/paperless_mail/mail.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index c9edf3e5e..8a9c1106c 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -198,10 +198,11 @@ class MailAccountHandler(LoggingMixin): try: for folder_info in M.folder.list(): self.log("info", f"Located folder: {folder_info.name}") - except Exception: + except Exception as e: self.log( "error", - "Exception during folder listing, unable to provide list folders", + "Exception during folder listing, unable to provide list folders: " + + str(e), ) raise MailError( From c274bbcddf116f3b723172756f3411c779353a21 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 19 Apr 2022 15:35:45 -0700 Subject: [PATCH 09/86] Tweaks documentation around mail fetching sub-folders --- docs/usage_overview.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst index 5020b783d..ea1080177 100644 --- a/docs/usage_overview.rst +++ b/docs/usage_overview.rst @@ -182,11 +182,10 @@ These are as follows: When defining a mail rule with a folder, you may need to try different characters to define how the sub-folders are separated. Common values include ".", "/" or "|", but - this varies by the mail server. Unfortunately, this isn't a value we can determine - automatically. Either check the documentation for your mail server, or check for - errors in the logs and try different folder separator values. If possible, - the log will contain a listing of account folders, in the event of an error when - trying to fetch mail from a certain folder. + this varies by the mail server. Check the documentation for your mail server. In the + event of an error fetching mail from a certain folder, check the Paperless logs. When + a folder is not located, Paperless will attempt to list all folders found in the account + to the Paperless logs. .. note:: From a7b1658ee1a9f362ed12f049fcd1a67eb43cf667 Mon Sep 17 00:00:00 2001 From: Florian Brandes Date: Wed, 20 Apr 2022 00:55:45 +0200 Subject: [PATCH 10/86] code review changes Signed-off-by: Florian Brandes --- src/documents/tasks.py | 63 ++++++++++++++----------------- src/documents/tests/test_tasks.py | 3 +- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/documents/tasks.py b/src/documents/tasks.py index c25b24342..9fe58b325 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -108,23 +108,22 @@ def convert_from_tiff_to_pdf(filepath: str) -> str: newpath = os.path.join(tempdir, file_name + ".pdf") else: logger.warning(f"Cannot convert from {str(file_extension)} to pdf.") - return "" - image = Image.open(filepath) - images = [] - for i, page in enumerate(ImageSequence.Iterator(image)): - page = page.convert("RGB") - images.append(page) - try: - if len(images) == 1: - images[0].save(newpath) - else: - images[0].save(newpath, save_all=True, append_images=images[1:]) - except OSError as e: - logger.warning( - f"Could not save the file as pdf. Error: {str(e)}", - ) - return "" - image.close() + return None + with Image.open(filepath) as image: + images = [] + for i, page in enumerate(ImageSequence.Iterator(image)): + page = page.convert("RGB") + images.append(page) + try: + if len(images) == 1: + images[0].save(newpath) + else: + images[0].save(newpath, save_all=True, append_images=images[1:]) + except OSError as e: + logger.warning( + f"Could not save the file as pdf. Error: {str(e)}", + ) + return None return newpath @@ -242,23 +241,19 @@ def consume_file( f"Unsupported file format for barcode reader: {str(file_extension)}", ) else: - if file_extension == ".tif" or file_extension == ".tiff": - converted_tiff = convert_from_tiff_to_pdf(path) - if converted_tiff: - separators = scan_file_for_separating_barcodes(converted_tiff) + if file_extension in {".tif", ".tiff"}: + file_to_process = convert_from_tiff_to_pdf(path) else: - separators = scan_file_for_separating_barcodes(path) + file_to_process = path + + separators = scan_file_for_separating_barcodes(file_to_process) + if separators: - if converted_tiff: - logger.debug( - f"Pages with separators found in: {str(converted_tiff)}", - ) - document_list = separate_pages(converted_tiff, separators) - else: - logger.debug( - f"Pages with separators found in: {str(path)}", - ) - document_list = separate_pages(path, separators) + logger.debug( + f"Pages with separators found in: {str(path)}", + ) + document_list = separate_pages(file_to_process, separators) + if document_list: for n, document in enumerate(document_list): # save to consumption dir @@ -271,8 +266,8 @@ def consume_file( # if we got here, the document was successfully split # and can safely be deleted if converted_tiff: - logger.debug("Deleting file {}".format(converted_tiff)) - os.unlink(converted_tiff) + logger.debug("Deleting file {}".format(file_to_process)) + os.unlink(file_to_process) logger.debug("Deleting file {}".format(path)) os.unlink(path) # notify the sender, otherwise the progress bar diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index baff2f534..7e5381def 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -225,8 +225,7 @@ class TestTasks(DirectoriesMixin, TestCase): ) dst = os.path.join(settings.SCRATCH_DIR, "simple.pdf") shutil.copy(test_file, dst) - target_file = tasks.convert_from_tiff_to_pdf(dst) - self.assertFalse(os.path.isfile(target_file)) + self.assertIsNone(tasks.convert_from_tiff_to_pdf(dst)) def test_scan_file_for_separating_barcodes(self): test_file = os.path.join( From 811da4bac5d15e963c83e361dd437d1c38d30031 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 13 Apr 2022 15:02:21 -0700 Subject: [PATCH 11/86] Adds Python 3.10 to the backend test matrix --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee22ae929..ceabd191d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,7 +110,7 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - python-version: ['3.8', '3.9'] + python-version: ['3.8', '3.9', '3.10'] fail-fast: false steps: - From bca95a4972b6caa403283addf4c50eb78f703f66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:27:16 +0000 Subject: [PATCH 12/86] Bump concurrently from 7.0.0 to 7.1.0 in /src-ui Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.0.0 to 7.1.0. - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.0.0...v7.1.0) --- updated-dependencies: - dependency-name: concurrently dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 14 +++++++------- src-ui/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 1ed0ac0a9..3fe1cce3f 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -39,7 +39,7 @@ "@types/jest": "27.4.1", "@types/node": "^17.0.23", "codelyzer": "^6.0.2", - "concurrently": "7.0.0", + "concurrently": "7.1.0", "jest": "27.5.1", "ts-node": "~10.7.0", "tslint": "~6.1.3", @@ -5685,9 +5685,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/concurrently": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz", - "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", + "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -21107,9 +21107,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concurrently": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz", - "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", + "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", "dev": true, "requires": { "chalk": "^4.1.0", diff --git a/src-ui/package.json b/src-ui/package.json index e29b46275..f2c02866e 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -44,7 +44,7 @@ "@types/jest": "27.4.1", "@types/node": "^17.0.23", "codelyzer": "^6.0.2", - "concurrently": "7.0.0", + "concurrently": "7.1.0", "jest": "27.5.1", "ts-node": "~10.7.0", "tslint": "~6.1.3", From 409f17980f8fae3f5e6cf7d15d64dcab681366ad Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:34:20 -0700 Subject: [PATCH 13/86] Update environment.prod.ts --- src-ui/src/environments/environment.prod.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index f0b00cd91..dce6ce839 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + 'api/', apiVersion: '2', appTitle: 'Paperless-ngx', - version: '1.7.0', + version: '1.7.0-dev', webSocketHost: window.location.host, webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketBaseUrl: base_url.pathname + 'ws/', From eb8158673fbf23e8367f76f3e8f4b90c25564ac1 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 25 Apr 2022 11:10:32 -0700 Subject: [PATCH 14/86] Fixes backend testing of mail on dev --- src/paperless_mail/tests/test_mail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 8c4714464..85f20c2d0 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -649,7 +649,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", order=1, @@ -682,7 +682,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MOVE, + action=MailRule.MailAction.MOVE, action_parameter="spam", filter_subject="Claim", order=1, From 6c70db31bd78d166f06ace734761824239aeb3e4 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 18 Apr 2022 08:18:20 -0700 Subject: [PATCH 15/86] Incorporates the base image building back into the main repo with multi stage building --- .github/workflows/ci.yml | 335 +++++++++++------- .github/workflows/reusable-ci-backend.yml | 108 ++++++ .github/workflows/reusable-ci-frontend.yml | 42 +++ .../workflows/reusable-workflow-builder.yml | 68 ++++ .pre-commit-config.yaml | 13 +- Dockerfile | 143 ++++++-- docker-builders/Dockerfile.frontend | 13 + docker-builders/Dockerfile.jbig2enc | 39 ++ docker-builders/Dockerfile.pikepdf | 65 ++++ docker-builders/Dockerfile.psycopg2 | 44 +++ docker-builders/Dockerfile.qpdf | 51 +++ docker-builders/get-build-json.py | 112 ++++++ docker/docker-prepare.sh | 2 + docker/install_management_commands.sh | 2 + 14 files changed, 886 insertions(+), 151 deletions(-) create mode 100644 .github/workflows/reusable-ci-backend.yml create mode 100644 .github/workflows/reusable-ci-frontend.yml create mode 100644 .github/workflows/reusable-workflow-builder.yml create mode 100644 docker-builders/Dockerfile.frontend create mode 100644 docker-builders/Dockerfile.jbig2enc create mode 100644 docker-builders/Dockerfile.pikepdf create mode 100644 docker-builders/Dockerfile.psycopg2 create mode 100644 docker-builders/Dockerfile.qpdf create mode 100755 docker-builders/get-build-json.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10b81bf79..e9ed4306c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,73 +45,158 @@ jobs: name: documentation path: docs/_build/html/ - code-checks-backend: - name: "Backend Code Checks" + ci-backend: + uses: ./.github/workflows/reusable-ci-backend.yml + + ci-frontend: + uses: ./.github/workflows/reusable-ci-frontend.yml + + prepare-docker-build: + name: Prepare Docker Pipeline Data + if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/ngx-') || startsWith(github.ref, 'refs/tags/beta-')) runs-on: ubuntu-20.04 + needs: + - documentation + - ci-backend + - ci-frontend steps: - name: Checkout uses: actions/checkout@v3 - - name: Install checkers - run: | - pipx install reorder-python-imports - pipx install yesqa - pipx install add-trailing-comma - pipx install flake8 + name: Get branch name + id: branch-name + uses: tj-actions/branch-names@v5 - - name: Run reorder-python-imports - run: | - find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs reorder-python-imports - - - name: Run yesqa - run: | - find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs yesqa - - - name: Run add-trailing-comma - run: | - find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs add-trailing-comma - # black is placed after add-trailing-comma because it may format differently - # if a trailing comma is added - - - name: Run black - uses: psf/black@stable + name: Login to Github Container Registry + uses: docker/login-action@v1 with: - options: "--check --diff" - version: "22.3.0" + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Run flake8 checks - run: | - cd src/ - flake8 --max-line-length=88 --ignore=E203,W503 - - code-checks-frontend: - name: "Frontend Code Checks" - runs-on: ubuntu-20.04 - steps: - - - name: Checkout - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + name: Set up Python + uses: actions/setup-python@v3 with: - node-version: '16' + python-version: "3.9" - - name: Install prettier + name: Make script executable run: | - npm install prettier + chmod +x ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py - - name: Run prettier - run: - npx prettier --check --ignore-path Pipfile.lock **/*.js **/*.ts *.md **/*.md + name: Setup qpdf image + id: qpdf-setup + run: | + build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py qpdf) - tests-backend: - needs: [code-checks-backend] - name: "Backend Tests (${{ matrix.python-version }})" - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: ['3.8', '3.9', '3.10'] - fail-fast: false + echo ${build_json} + + echo ::set-output name=qpdf-json::${build_json} + - + name: Setup psycopg2 image + id: psycopg2-setup + run: | + build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py psycopg2) + + echo ${build_json} + + echo ::set-output name=psycopg2-json::${build_json} + - + name: Setup pikepdf image + id: pikepdf-setup + run: | + build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py pikepdf) + + echo ${build_json} + + echo ::set-output name=pikepdf-json::${build_json} + - + name: Setup jbig2enc image + id: jbig2enc-setup + run: | + build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py jbig2enc) + + echo ${build_json} + + echo ::set-output name=jbig2enc-json::${build_json} + - + name: Setup frontend image + id: frontend-setup + run: | + frontend_image=ghcr.io/${{ github.repository }}/ngx-frontend:${{ steps.branch-name.outputs.current_branch }} + + echo ${frontend_image} + + echo ::set-output name=frontend-image-tag::${frontend_image} + + outputs: + + frontend-image-tag: ${{ steps.frontend-setup.outputs.frontend-image-tag }} + + qpdf-json: ${{ steps.qpdf-setup.outputs.qpdf-json }} + + pikepdf-json: ${{ steps.pikepdf-setup.outputs.pikepdf-json }} + + psycopg2-json: ${{ steps.psycopg2-setup.outputs.psycopg2-json }} + + jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json}} + + build-qpdf-debs: + name: qpdf + needs: + - prepare-docker-build + uses: ./.github/workflows/reusable-workflow-builder.yml + with: + dockerfile: ./docker-builders/Dockerfile.qpdf + build-json: ${{ needs.prepare-docker-build.outputs.qpdf-json }} + build-args: | + QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} + + build-jbig2enc: + name: jbig2enc + needs: + - prepare-docker-build + uses: ./.github/workflows/reusable-workflow-builder.yml + with: + dockerfile: ./docker-builders/Dockerfile.jbig2enc + build-json: ${{ needs.prepare-docker-build.outputs.jbig2enc-json }} + build-args: | + JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }} + + build-psycopg2-wheel: + name: psycopg2 + needs: + - prepare-docker-build + uses: ./.github/workflows/reusable-workflow-builder.yml + with: + dockerfile: ./docker-builders/Dockerfile.psycopg2 + build-json: ${{ needs.prepare-docker-build.outputs.psycopg2-json }} + build-args: | + GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).git_tag }} + VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} + + build-pikepdf-wheel: + name: pikepdf + needs: + - prepare-docker-build + - build-qpdf-debs + uses: ./.github/workflows/reusable-workflow-builder.yml + with: + dockerfile: ./docker-builders/Dockerfile.pikepdf + build-json: ${{ needs.prepare-docker-build.outputs.pikepdf-json }} + build-args: | + QPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).image_tag }} + GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }} + VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} + + build-frontend: + name: Compile frontend + concurrency: + group: ${{ github.workflow }}-build-frontend-${{ github.ref }} + cancel-in-progress: false + needs: + - prepare-docker-build + runs-on: ubuntu-latest steps: - name: Checkout @@ -119,77 +204,82 @@ jobs: with: fetch-depth: 2 - - name: Install pipenv - run: pipx install pipenv - - - name: Set up Python - uses: actions/setup-python@v3 - with: - python-version: "${{ matrix.python-version }}" - cache: "pipenv" - cache-dependency-path: 'Pipfile.lock' - - - name: Install system dependencies - run: | - sudo apt-get update -qq - sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng libzbar0 poppler-utils - - - name: Install Python dependencies - run: | - pipenv sync --dev - - - name: Tests - run: | - cd src/ - pipenv run pytest - - - name: Get changed files + name: Get changed frontend files id: changed-files-specific uses: tj-actions/changed-files@v18.1 with: files: | - src/** + src-ui/** - - name: List all changed files - run: | - for file in ${{ steps.changed-files-specific.outputs.all_changed_files }}; do - echo "${file} was changed" - done - - - name: Publish coverage results - if: matrix.python-version == '3.9' && steps.changed-files-specific.outputs.any_changed == 'true' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # https://github.com/coveralls-clients/coveralls-python/issues/251 - run: | - cd src/ - pipenv run coveralls --service=github - - tests-frontend: - needs: [code-checks-frontend] - name: "Frontend Tests" - runs-on: ubuntu-20.04 - strategy: - matrix: - node-version: [16.x] - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + name: Login to Github Container Registry + uses: docker/login-action@v1 with: - node-version: ${{ matrix.node-version }} - - run: cd src-ui && npm ci - - run: cd src-ui && npm run test - - run: cd src-ui && npm run e2e:ci + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - + name: Determine if build needed + id: build-skip-check + # Skip building the frontend if the tag exists and no src-ui files changed + run: | + if ! docker manifest inspect ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} &> /dev/null ; then + echo "Build required, no existing image" + echo ::set-output name=frontend-build-needed::true + elif ${{ steps.changed-files-specific.outputs.any_changed }} == 'true' ; then + echo "Build required, src-ui changes" + echo ::set-output name=frontend-build-needed::true + else + echo "No build required" + echo ::set-output name=frontend-build-needed::false + fi + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} + - + name: Compile frontend + uses: docker/build-push-action@v2 + if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} + with: + context: . + file: ./docker-builders/Dockerfile.frontend + tags: ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + cache-from: type=gha + cache-to: type=gha,mode=max + - + name: Export frontend artifact from docker + run: | + docker create --name frontend-extract ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} + docker cp frontend-extract:/src/src/documents/static/frontend src/documents/static/frontend/ + - + name: Upload frontend artifact + uses: actions/upload-artifact@v3 + with: + name: frontend-compiled + path: src/documents/static/frontend/ # build and push image to docker hub. build-docker-image: - if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/ngx-') || startsWith(github.ref, 'refs/tags/beta-')) concurrency: group: ${{ github.workflow }}-build-docker-image-${{ github.ref }} cancel-in-progress: true runs-on: ubuntu-20.04 - needs: [tests-backend, tests-frontend] + concurrency: + group: ${{ github.workflow }}-build-docker-image-${{ github.ref }} + cancel-in-progress: true + needs: + - prepare-docker-build + - build-psycopg2-wheel + - build-jbig2enc + - build-qpdf-debs + - build-pikepdf-wheel + - build-frontend steps: - name: Gather Docker metadata @@ -226,26 +316,22 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker-meta.outputs.tags }} labels: ${{ steps.docker-meta.outputs.labels }} + build-args: | + JBIG2ENC_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).image_tag }} + QPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).image_tag }} + PIKEPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).image_tag }} + PSYCOPG2_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).image_tag }} + FRONTEND_BASE_IMAGE=${{ needs.prepare-docker-build.outputs.frontend-image-tag }} cache-from: type=gha cache-to: type=gha,mode=max - name: Inspect image run: | docker buildx imagetools inspect ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} - - - name: Export frontend artifact from docker - run: | - docker create --name frontend-extract ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} - docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/ - - - name: Upload frontend artifact - uses: actions/upload-artifact@v3 - with: - name: frontend-compiled - path: src/documents/static/frontend/ build-release: - needs: [build-docker-image, documentation] + needs: + - build-docker-image runs-on: ubuntu-20.04 steps: - @@ -313,7 +399,8 @@ jobs: publish-release: runs-on: ubuntu-20.04 - needs: build-release + needs: + - build-release if: contains(github.ref, 'refs/tags/ngx-') || contains(github.ref, 'refs/tags/beta-') steps: - diff --git a/.github/workflows/reusable-ci-backend.yml b/.github/workflows/reusable-ci-backend.yml new file mode 100644 index 000000000..28092fcb1 --- /dev/null +++ b/.github/workflows/reusable-ci-backend.yml @@ -0,0 +1,108 @@ +name: Backend CI Jobs + +on: + workflow_call: + +jobs: + + code-checks-backend: + name: "Code Style Checks" + runs-on: ubuntu-20.04 + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Install checkers + run: | + pipx install reorder-python-imports + pipx install yesqa + pipx install add-trailing-comma + pipx install flake8 + - + name: Run reorder-python-imports + run: | + find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs reorder-python-imports + - + name: Run yesqa + run: | + find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs yesqa + - + name: Run add-trailing-comma + run: | + find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs add-trailing-comma + # black is placed after add-trailing-comma because it may format differently + # if a trailing comma is added + - + name: Run black + uses: psf/black@stable + with: + options: "--check --diff" + version: "22.3.0" + - + name: Run flake8 checks + run: | + cd src/ + flake8 --max-line-length=88 --ignore=E203,W503 + + tests-backend: + name: "Tests (${{ matrix.python-version }})" + runs-on: ubuntu-20.04 + needs: + - code-checks-backend + strategy: + matrix: + python-version: ['3.8', '3.9', '3.10'] + fail-fast: false + steps: + - + name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - + name: Install pipenv + run: pipx install pipenv + - + name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "${{ matrix.python-version }}" + cache: "pipenv" + cache-dependency-path: 'Pipfile.lock' + - + name: Install system dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng libzbar0 poppler-utils + - + name: Install Python dependencies + run: | + pipenv sync --dev + - + name: Tests + run: | + cd src/ + pipenv run pytest + - + name: Get changed files + id: changed-files-specific + uses: tj-actions/changed-files@v18.1 + with: + files: | + src/** + - + name: List all changed files + run: | + for file in ${{ steps.changed-files-specific.outputs.all_changed_files }}; do + echo "${file} was changed" + done + - + name: Publish coverage results + if: matrix.python-version == '3.9' && steps.changed-files-specific.outputs.any_changed == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # https://github.com/coveralls-clients/coveralls-python/issues/251 + run: | + cd src/ + pipenv run coveralls --service=github diff --git a/.github/workflows/reusable-ci-frontend.yml b/.github/workflows/reusable-ci-frontend.yml new file mode 100644 index 000000000..cc565775a --- /dev/null +++ b/.github/workflows/reusable-ci-frontend.yml @@ -0,0 +1,42 @@ +name: Frontend CI Jobs + +on: + workflow_call: + +jobs: + + code-checks-frontend: + name: "Code Style Checks" + runs-on: ubuntu-20.04 + steps: + - + name: Checkout + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '16' + - + name: Install prettier + run: | + npm install prettier + - + name: Run prettier + run: + npx prettier --check --ignore-path Pipfile.lock **/*.js **/*.ts *.md **/*.md + tests-frontend: + name: "Tests" + runs-on: ubuntu-20.04 + needs: + - code-checks-frontend + strategy: + matrix: + node-version: [16.x] + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: cd src-ui && npm ci + - run: cd src-ui && npm run test + - run: cd src-ui && npm run e2e:ci diff --git a/.github/workflows/reusable-workflow-builder.yml b/.github/workflows/reusable-workflow-builder.yml new file mode 100644 index 000000000..543cd3d79 --- /dev/null +++ b/.github/workflows/reusable-workflow-builder.yml @@ -0,0 +1,68 @@ +name: Reusable Image Builder + +on: + workflow_call: + inputs: + dockerfile: + required: true + type: string + build-json: + required: true + type: string + build-args: + required: false + default: "" + type: string + +concurrency: + group: ${{ github.workflow }}-${{ fromJSON(inputs.build-json).name }}-${{ fromJSON(inputs.build-json).version }} + cancel-in-progress: false + +jobs: + build-image: + name: Build ${{ fromJSON(inputs.build-json).name }} @ ${{ fromJSON(inputs.build-json).version }} + runs-on: ubuntu-latest + steps: + - + name: Login to Github Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - + name: Determine if build needed + id: build-skip-check + run: | + if ! docker manifest inspect ${{ fromJSON(inputs.build-json).image_tag }} &> /dev/null ; then + echo "Building, no image exists with this version" + echo ::set-output name=image-exists::false + else + echo "Not building, image exists with this version" + echo ::set-output name=image-exists::true + fi + - + name: Checkout + uses: actions/checkout@v3 + if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} + - + name: Build ${{ fromJSON(inputs.build-json).name }} + uses: docker/build-push-action@v2 + if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} + with: + context: . + file: ${{ inputs.dockerfile }} + tags: ${{ fromJSON(inputs.build-json).image_tag }} + platforms: linux/amd64,linux/arm64,linux/arm/v7 + build-args: ${{ inputs.build-args }} + push: true + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65ecc7980..32998e432 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -63,10 +63,17 @@ repos: hooks: - id: black # Dockerfile hooks - - repo: https://github.com/pryorda/dockerfilelint-precommit-hooks - rev: "v0.1.0" + - repo: https://github.com/AleksaC/hadolint-py + rev: v1.19.0 hooks: - - id: dockerfilelint + - id: hadolint + args: + - --ignore + - DL3006 # https://github.com/hadolint/hadolint/wiki/DL3006 (doesn't understand FROM with ARG) + - --ignore + - DL3008 # https://github.com/hadolint/hadolint/wiki/DL3008 (should probably do this at some point) + - --ignore + - DL3013 # https://github.com/hadolint/hadolint/wiki/DL3013 (should probably do this too at some point) # Shell script hooks - repo: https://github.com/lovesegfault/beautysh rev: v6.2.1 diff --git a/Dockerfile b/Dockerfile index 8b46d072b..ef162fd38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,18 @@ -FROM node:16 AS compile-frontend +# These are all built previously in the pipeline +# They provide either a .deb, .whl or whatever npm outputs +ARG JBIG2ENC_BASE_IMAGE +ARG QPDF_BASE_IMAGE +ARG PIKEPDF_BASE_IMAGE +ARG PSYCOPG2_BASE_IMAGE +ARG FRONTEND_BASE_IMAGE -COPY . /src +FROM ${JBIG2ENC_BASE_IMAGE} AS jbig2enc-builder +FROM ${QPDF_BASE_IMAGE} as qpdf-builder +FROM ${PIKEPDF_BASE_IMAGE} as pikepdf-builder +FROM ${PSYCOPG2_BASE_IMAGE} as psycopg2-builder +FROM ${FRONTEND_BASE_IMAGE} as compile-frontend -WORKDIR /src/src-ui -RUN npm update npm -g && npm ci --no-optional -RUN ./node_modules/.bin/ng build --configuration production - -FROM ghcr.io/paperless-ngx/builder/ngx-base:1.7.0 as main-app +FROM python:3.9-slim-bullseye as main-app LABEL org.opencontainers.image.authors="paperless-ngx team " LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/" @@ -14,27 +20,115 @@ LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperles LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx" LABEL org.opencontainers.image.licenses="GPL-3.0-only" +ARG DEBIAN_FRONTEND=noninteractive + +# Packages needed only for building +ARG BUILD_PACKAGES="\ + build-essential \ + git \ + python3-dev" + +# Packages need for running +ARG RUNTIME_PACKAGES="\ + curl \ + file \ + # fonts for text file thumbnail generation + fonts-liberation \ + gettext \ + ghostscript \ + gnupg \ + gosu \ + icc-profiles-free \ + imagemagick \ + media-types \ + liblept5 \ + libpq5 \ + libxml2 \ + libxslt1.1 \ + libgnutls30 \ + libjpeg62-turbo \ + optipng \ + python3 \ + python3-pip \ + python3-setuptools \ + postgresql-client \ + # For Numpy + libatlas3-base \ + # thumbnail size reduction + pngquant \ + # OCRmyPDF dependencies + tesseract-ocr \ + tesseract-ocr-eng \ + tesseract-ocr-deu \ + tesseract-ocr-fra \ + tesseract-ocr-ita \ + tesseract-ocr-spa \ + tzdata \ + unpaper \ + # Mime type detection + zlib1g \ + # Barcode splitter + libzbar0 \ + poppler-utils" + WORKDIR /usr/src/paperless/src/ +# Copy qpdf and runtime library +COPY --from=qpdf-builder /usr/src/qpdf/libqpdf28_*.deb . +COPY --from=qpdf-builder /usr/src/qpdf/qpdf_*.deb . + +# Copy pikepdf wheel and dependencies +COPY --from=pikepdf-builder /usr/src/pikepdf/wheels/*.whl . + +# Copy psycopg2 wheel +COPY --from=psycopg2-builder /usr/src/psycopg2/wheels/psycopg2*.whl . + +# copy jbig2enc +COPY --from=jbig2enc-builder /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ +COPY --from=jbig2enc-builder /usr/src/jbig2enc/src/jbig2 /usr/local/bin/ +COPY --from=jbig2enc-builder /usr/src/jbig2enc/src/*.h /usr/local/include/ + COPY requirements.txt ../ # Python dependencies -RUN apt-get update \ - # python-Levenshtein still needs to be compiled here - && apt-get -y --no-install-recommends install \ - build-essential \ - && python3 -m pip install --upgrade --no-cache-dir pip wheel \ - && python3 -m pip install --default-timeout=1000 --upgrade --no-cache-dir supervisor \ - && python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \ - && apt-get -y purge build-essential \ - && apt-get -y autoremove --purge \ - && rm -rf /var/lib/apt/lists/* +RUN set -eux \ + && apt-get update \ + && apt-get install --yes --quiet --no-install-recommends ${RUNTIME_PACKAGES} ${BUILD_PACKAGES} \ + && python3 -m pip install --no-cache-dir --upgrade wheel \ + && echo "Installing qpdf" \ + && apt-get install --yes --no-install-recommends ./libqpdf28_*.deb \ + && apt-get install --yes --no-install-recommends ./qpdf_*.deb \ + && echo "Installing pikepdf and dependencies wheel" \ + && python3 -m pip install --no-cache-dir packaging*.whl \ + && python3 -m pip install --no-cache-dir lxml*.whl \ + && python3 -m pip install --no-cache-dir Pillow*.whl \ + && python3 -m pip install --no-cache-dir pyparsing*.whl \ + && python3 -m pip install --no-cache-dir pikepdf*.whl \ + && python -m pip list \ + && echo "Installing psycopg2 wheel" \ + && python3 -m pip install --no-cache-dir psycopg2*.whl \ + && python -m pip list \ + && echo "Installing supervisor" \ + && python3 -m pip install --default-timeout=1000 --upgrade --no-cache-dir supervisor \ + && echo "Installing Python requirements" \ + && python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \ + && echo "Cleaning up image" \ + && apt-get -y purge ${BUILD_PACKAGES} \ + && apt-get -y autoremove --purge \ + && apt-get clean --yes \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /tmp/* \ + && rm -rf /var/tmp/* \ + && rm -rf /var/cache/apt/archives/* \ + && truncate -s 0 /var/log/*log # setup docker-specific things COPY docker/ ./docker/ -RUN cd docker \ - && cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \ +WORKDIR /usr/src/paperless/src/docker/ + +RUN set -eux \ + && cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \ && mkdir /var/log/supervisord /var/run/supervisord \ && cp supervisord.conf /etc/supervisord.conf \ && cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \ @@ -42,17 +136,18 @@ RUN cd docker \ && cp docker-prepare.sh /sbin/docker-prepare.sh \ && chmod 755 /sbin/docker-prepare.sh \ && chmod +x install_management_commands.sh \ - && ./install_management_commands.sh \ - && cd .. \ - && rm -rf docker/ + && ./install_management_commands.sh -COPY gunicorn.conf.py ../ +WORKDIR /usr/src/paperless/ + +COPY gunicorn.conf.py . # copy app COPY --from=compile-frontend /src/src/ ./ # add users, setup scripts -RUN addgroup --gid 1000 paperless \ +RUN set -eux \ + && addgroup --gid 1000 paperless \ && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ && chown -R paperless:paperless ../ \ && gosu paperless python3 manage.py collectstatic --clear --no-input \ diff --git a/docker-builders/Dockerfile.frontend b/docker-builders/Dockerfile.frontend new file mode 100644 index 000000000..6e0ee5374 --- /dev/null +++ b/docker-builders/Dockerfile.frontend @@ -0,0 +1,13 @@ +# This Dockerfile compiles the frontend +# Inputs: None + +FROM node:16-bullseye-slim AS compile-frontend + +COPY . /src + +WORKDIR /src/src-ui +RUN set -eux \ + && npm update npm -g \ + && npm ci --no-optional +RUN set -eux \ + && ./node_modules/.bin/ng build --configuration production diff --git a/docker-builders/Dockerfile.jbig2enc b/docker-builders/Dockerfile.jbig2enc new file mode 100644 index 000000000..72429ec0b --- /dev/null +++ b/docker-builders/Dockerfile.jbig2enc @@ -0,0 +1,39 @@ +# This Dockerfile compiles the jbig2enc library +# Inputs: +# - JBIG2ENC_VERSION - the Git tag to checkout and build + +FROM debian:bullseye-slim + +LABEL org.opencontainers.image.description="A intermediate image with jbig2enc built" + +ARG DEBIAN_FRONTEND=noninteractive + +ARG BUILD_PACKAGES="\ + build-essential \ + automake \ + libtool \ + libleptonica-dev \ + zlib1g-dev \ + git \ + ca-certificates" + +WORKDIR /usr/src/jbig2enc + +# As this is an base image for a multi-stage final image +# the added size of the install is basically irrelevant +RUN apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \ + && rm -rf /var/lib/apt/lists/* + +# Layers after this point change according to required version +# For better caching, seperate the basic installs from +# the building + +ARG JBIG2ENC_VERSION + +RUN set -eux \ + && git clone --quiet --branch $JBIG2ENC_VERSION https://github.com/agl/jbig2enc . +RUN set -eux \ + && ./autogen.sh +RUN set -eux \ + && ./configure && make diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf new file mode 100644 index 000000000..3769caf5f --- /dev/null +++ b/docker-builders/Dockerfile.pikepdf @@ -0,0 +1,65 @@ +# This Dockerfile builds the pikepdf wheel +# Inputs: +# - QPDF_BASE_IMAGE - The image to copy built qpdf .ded files from +# - GIT_TAG - The Git tag to clone and build from +# - VERSION - Used to force the built pikepdf version to match + +ARG QPDF_BASE_IMAGE +FROM ${QPDF_BASE_IMAGE} as qpdf-builder + +# This does nothing, except provide a name for a copy below + +FROM python:3.9-slim-bullseye + +LABEL org.opencontainers.image.description="A intermediate image with pikepdf wheel built" + +ARG DEBIAN_FRONTEND=noninteractive + +ARG BUILD_PACKAGES="\ + build-essential \ + git \ + libjpeg62-turbo-dev \ + zlib1g-dev \ + libgnutls28-dev \ + libxml2-dev \ + libxslt1-dev \ + python3-dev \ + python3-pip" + +WORKDIR /usr/src + +COPY --from=qpdf-builder /usr/src/qpdf/*.deb . + +# As this is an base image for a multi-stage final image +# the added size of the install is basically irrelevant + +RUN set -eux \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ + && dpkg --install libqpdf28_*.deb \ + && dpkg --install libqpdf-dev_*.deb \ + && python3 -m pip install --no-cache-dir --upgrade pip wheel pybind11 \ + && rm -rf /var/lib/apt/lists/* + +# Layers after this point change according to required version +# For better caching, seperate the basic installs from +# the building + +ARG GIT_TAG +ARG VERSION + +RUN set -eux \ + && echo "building pikepdf wheel" \ + # Note the v in the tag name here + && git clone --quiet --depth 1 --branch "${GIT_TAG}" https://github.com/pikepdf/pikepdf.git \ + && cd pikepdf \ + # pikepdf seems to specifciy either a next version when built OR + # a post release tag. + # In either case, this won't match what we want from requirements.txt + # Directly modify the setup.py to set the version we just checked out of Git + && sed -i "s/use_scm_version=True/version=\"${VERSION}\"/g" setup.py \ + # https://github.com/pikepdf/pikepdf/issues/323 + && rm pyproject.toml \ + && mkdir wheels \ + && python3 -m pip wheel . --wheel-dir wheels \ + && ls -ahl wheels diff --git a/docker-builders/Dockerfile.psycopg2 b/docker-builders/Dockerfile.psycopg2 new file mode 100644 index 000000000..0c1cc048b --- /dev/null +++ b/docker-builders/Dockerfile.psycopg2 @@ -0,0 +1,44 @@ +# This Dockerfile builds the psycopg2 wheel +# Inputs: +# - GIT_TAG - The Git tag to clone and build from +# - VERSION - Unused, kept for future possible usage + +FROM python:3.9-slim-bullseye + +LABEL org.opencontainers.image.description="A intermediate image with psycopg2 wheel built" + +ARG DEBIAN_FRONTEND=noninteractive + +ARG BUILD_PACKAGES="\ + build-essential \ + git \ + libpq-dev \ + python3-dev \ + python3-pip" + +WORKDIR /usr/src + +# As this is an base image for a multi-stage final image +# the added size of the install is basically irrelevant + +RUN set -eux \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ + && rm -rf /var/lib/apt/lists/* \ + && python3 -m pip install --upgrade pip wheel + +# Layers after this point change according to required version +# For better caching, seperate the basic installs from +# the building + +ARG GIT_TAG +ARG VERSION + +RUN set -eux \ + && echo "Building psycopg2 wheel" \ + && cd /usr/src \ + && git clone --quiet --depth 1 --branch ${GIT_TAG} https://github.com/psycopg/psycopg2.git \ + && cd psycopg2 \ + && mkdir wheels \ + && python3 -m pip wheel . --wheel-dir wheels \ + && ls -ahl wheels/ diff --git a/docker-builders/Dockerfile.qpdf b/docker-builders/Dockerfile.qpdf new file mode 100644 index 000000000..c56a515c4 --- /dev/null +++ b/docker-builders/Dockerfile.qpdf @@ -0,0 +1,51 @@ +FROM debian:bullseye-slim + +LABEL org.opencontainers.image.description="A intermediate image with qpdf built" + +ARG DEBIAN_FRONTEND=noninteractive + +ARG BUILD_PACKAGES="\ + build-essential \ + debhelper \ + debian-keyring \ + devscripts \ + equivs \ + libtool \ + libjpeg62-turbo-dev \ + libgnutls28-dev \ + packaging-dev \ + zlib1g-dev" + +WORKDIR /usr/src + +# As this is an base image for a multi-stage final image +# the added size of the install is basically irrelevant + +RUN set -eux \ + && apt-get update --quiet \ + && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ + && rm -rf /var/lib/apt/lists/* + +# Layers after this point change according to required version +# For better caching, seperate the basic installs from +# the building + +# This must match to pikepdf's minimum at least +ARG QPDF_VERSION + +# In order to get the required version of qpdf, it is backported from bookwork +# and then built from source +RUN set -eux \ + && echo "Building qpdf" \ + && echo "deb-src http://deb.debian.org/debian/ bookworm main" | tee /etc/apt/sources.list.d/bookworm-src.list \ + && apt-get update \ + && mkdir qpdf \ + && cd qpdf \ + && apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm \ + && rm -rf /var/lib/apt/lists/* \ + && cd qpdf-$QPDF_VERSION \ + && DEBEMAIL=hello@paperless-ngx.com debchange --bpo \ + && export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \ + && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes \ + && pwd \ + && ls -ahl ../*.deb diff --git a/docker-builders/get-build-json.py b/docker-builders/get-build-json.py new file mode 100755 index 000000000..f8d4f8701 --- /dev/null +++ b/docker-builders/get-build-json.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +""" +This is a helper script to either parse the JSON of the Pipfile.lock +or otherwise return a JSON object detailing versioning and image tags +for the packages we build seperately, then copy into the final Docker image +""" +import argparse +import json +import os +from pathlib import Path +from typing import Final + +CONFIG: Final = { + # All packages need to be in the dict, even if not configured further + # as it is used for the possible choices in the argument + "psycopg2": {}, + # Most information about Python packages comes from the Pipfile.lock + "pikepdf": { + "qpdf_version": "10.6.3", + }, + # For other packages, it is directly configured, for now + # These require manual updates to this file for version updates + "qpdf": { + "version": "10.6.3", + "git_tag": "N/A", + }, + "jbig2enc": { + "version": "0.29", + "git_tag": "0.29", + }, +} + + +def _get_image_tag( + repo_name: str, + pkg_name: str, + pkg_version: str, +) -> str: + return f"ghcr.io/{repo_name}/builder/{pkg_name}:{pkg_version}" + + +def _main(): + parser = argparse.ArgumentParser( + description="Generate a JSON object of information required to build the given package, based on the Pipfile.lock", + ) + parser.add_argument( + "package", + help="The name of the package to generate JSON for", + choices=CONFIG.keys(), + ) + + args = parser.parse_args() + + pip_lock = Path("Pipfile.lock") + + repo_name = os.environ["GITHUB_REPOSITORY"] + + # The JSON object we'll output + output = {"name": args.package} + + # Read Pipfile.lock file + + pipfile_data = json.loads(pip_lock.read_text()) + + # Read the version from Pipfile.lock + + if args.package in pipfile_data["default"]: + + pkg_data = pipfile_data["default"][args.package] + + pkg_version = pkg_data["version"].split("==")[-1] + + output["version"] = pkg_version + + # Based on the package, generate the expected Git tag name + + if args.package == "pikepdf": + git_tag_name = f"v{pkg_version}" + elif args.package == "psycopg2": + git_tag_name = pkg_version.replace(".", "_") + + output["git_tag"] = git_tag_name + + # Based on the package and environment, generate the Docker image tag + + image_tag = _get_image_tag(repo_name, args.package, pkg_version) + + output["image_tag"] = image_tag + + # Check for any special configuration, based on package + + if args.package in CONFIG: + output.update(CONFIG[args.package]) + + elif args.package in CONFIG: + + # This is not a Python package + + output.update(CONFIG[args.package]) + + output["image_tag"] = _get_image_tag(repo_name, args.package, output["version"]) + + else: + raise NotImplementedError(args.package) + + # Output the JSON info to stdout + + print(json.dumps(output, indent=2)) + + +if __name__ == "__main__": + _main() diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index 681ccf5a0..48f0c6b82 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -e + wait_for_postgres() { attempt_num=1 max_attempts=5 diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh index 9da795b50..bf8bbeb93 100755 --- a/docker/install_management_commands.sh +++ b/docker/install_management_commands.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -eu + for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker manage_superuser; do echo "installing $command..." From 6179ca5668f7abac8ecf4e8a899b0c53da01adfb Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 18 Apr 2022 14:48:08 -0700 Subject: [PATCH 16/86] Fixes final WORKDIR directive --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index ef162fd38..34f4b2c27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -142,6 +142,8 @@ WORKDIR /usr/src/paperless/ COPY gunicorn.conf.py . +WORKDIR /usr/src/paperless/src/ + # copy app COPY --from=compile-frontend /src/src/ ./ From d19015579c8e74fea118e09ab1d11526683e8873 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Thu, 21 Apr 2022 15:47:50 -0700 Subject: [PATCH 17/86] Instead of using a full image name, use the repo and version to build the image to pull from. Removes building of the frontend for multiple platforms --- .github/workflows/ci.yml | 45 +++++++++++++------------- Dockerfile | 23 +++++++------ docker-builders/Dockerfile.pikepdf | 10 ++++-- docker-builders/get-build-json.py | 52 ++++++++++++++---------------- 4 files changed, 67 insertions(+), 63 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9ed4306c..fe9afb1a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,10 +63,6 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - - name: Get branch name - id: branch-name - uses: tj-actions/branch-names@v5 - name: Login to Github Container Registry uses: docker/login-action@v1 @@ -123,16 +119,14 @@ jobs: name: Setup frontend image id: frontend-setup run: | - frontend_image=ghcr.io/${{ github.repository }}/ngx-frontend:${{ steps.branch-name.outputs.current_branch }} + build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py frontend) - echo ${frontend_image} + echo ${build_json} - echo ::set-output name=frontend-image-tag::${frontend_image} + echo ::set-output name=frontend-json::${build_json} outputs: - frontend-image-tag: ${{ steps.frontend-setup.outputs.frontend-image-tag }} - qpdf-json: ${{ steps.qpdf-setup.outputs.qpdf-json }} pikepdf-json: ${{ steps.pikepdf-setup.outputs.pikepdf-json }} @@ -141,6 +135,8 @@ jobs: jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json}} + frontend-json: ${{ steps.frontend-setup.outputs.frontend-json}} + build-qpdf-debs: name: qpdf needs: @@ -185,14 +181,15 @@ jobs: dockerfile: ./docker-builders/Dockerfile.pikepdf build-json: ${{ needs.prepare-docker-build.outputs.pikepdf-json }} build-args: | - QPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).image_tag }} + REPO=${{ github.repository }} + QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }} VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} build-frontend: name: Compile frontend concurrency: - group: ${{ github.workflow }}-build-frontend-${{ github.ref }} + group: ${{ github.workflow }}-build-frontend-${{ github.ref_name }} cancel-in-progress: false needs: - prepare-docker-build @@ -222,7 +219,7 @@ jobs: id: build-skip-check # Skip building the frontend if the tag exists and no src-ui files changed run: | - if ! docker manifest inspect ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} &> /dev/null ; then + if ! docker manifest inspect ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} &> /dev/null ; then echo "Build required, no existing image" echo ::set-output name=frontend-build-needed::true elif ${{ steps.changed-files-specific.outputs.any_changed }} == 'true' ; then @@ -247,15 +244,18 @@ jobs: with: context: . file: ./docker-builders/Dockerfile.frontend - tags: ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} - platforms: linux/amd64,linux/arm64,linux/arm/v7 + tags: ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} + # The compilation is identical between different platforms + # The buildx and QEMU setup is left, just in case that ever changes + # But the platform is set to the runner's native for speedup + platforms: linux/amd64 push: true cache-from: type=gha cache-to: type=gha,mode=max - name: Export frontend artifact from docker run: | - docker create --name frontend-extract ${{ needs.prepare-docker-build.outputs.frontend-image-tag }} + docker create --name frontend-extract ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} docker cp frontend-extract:/src/src/documents/static/frontend src/documents/static/frontend/ - name: Upload frontend artifact @@ -271,7 +271,7 @@ jobs: cancel-in-progress: true runs-on: ubuntu-20.04 concurrency: - group: ${{ github.workflow }}-build-docker-image-${{ github.ref }} + group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }} cancel-in-progress: true needs: - prepare-docker-build @@ -317,11 +317,12 @@ jobs: tags: ${{ steps.docker-meta.outputs.tags }} labels: ${{ steps.docker-meta.outputs.labels }} build-args: | - JBIG2ENC_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).image_tag }} - QPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).image_tag }} - PIKEPDF_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).image_tag }} - PSYCOPG2_BASE_IMAGE=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).image_tag }} - FRONTEND_BASE_IMAGE=${{ needs.prepare-docker-build.outputs.frontend-image-tag }} + REPO=${{ github.repository }} + JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }} + QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} + PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} + PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} + FRONTEND_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).version }} cache-from: type=gha cache-to: type=gha,mode=max - @@ -401,7 +402,7 @@ jobs: runs-on: ubuntu-20.04 needs: - build-release - if: contains(github.ref, 'refs/tags/ngx-') || contains(github.ref, 'refs/tags/beta-') + if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'ngx-') || startsWith(github.ref_name, 'beta-')) steps: - name: Download release artifact diff --git a/Dockerfile b/Dockerfile index 34f4b2c27..3b71421d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,19 @@ +# Default to pulling from the main repo registry when manually building +ARG REPO="paperless-ngx/paperless-ngx" + # These are all built previously in the pipeline # They provide either a .deb, .whl or whatever npm outputs -ARG JBIG2ENC_BASE_IMAGE -ARG QPDF_BASE_IMAGE -ARG PIKEPDF_BASE_IMAGE -ARG PSYCOPG2_BASE_IMAGE -ARG FRONTEND_BASE_IMAGE +ARG JBIG2ENC_VERSION +ARG QPDF_VERSION +ARG PIKEPDF_VERSION +ARG PSYCOPG2_VERSION +ARG FRONTEND_VERSION -FROM ${JBIG2ENC_BASE_IMAGE} AS jbig2enc-builder -FROM ${QPDF_BASE_IMAGE} as qpdf-builder -FROM ${PIKEPDF_BASE_IMAGE} as pikepdf-builder -FROM ${PSYCOPG2_BASE_IMAGE} as psycopg2-builder -FROM ${FRONTEND_BASE_IMAGE} as compile-frontend +FROM ghcr.io/${REPO}/builder/jbig2enc:${JBIG2ENC_VERSION} as jbig2enc-builder +FROM ghcr.io/${REPO}/builder/qpdf:${QPDF_VERSION} as qpdf-builder +FROM ghcr.io/${REPO}/builder/pikepdf:${PIKEPDF_VERSION} as pikepdf-builder +FROM ghcr.io/${REPO}/builder/psycopg2:${PSYCOPG2_VERSION} as psycopg2-builder +FROM ghcr.io/${REPO}/builder/frontend:${FRONTEND_VERSION} as compile-frontend FROM python:3.9-slim-bullseye as main-app diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index 3769caf5f..be544e282 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -1,11 +1,15 @@ # This Dockerfile builds the pikepdf wheel # Inputs: -# - QPDF_BASE_IMAGE - The image to copy built qpdf .ded files from +# - REPO - Docker repository to pull qpdf from +# - QPDF_VERSION - The image qpdf version to copy .deb files from # - GIT_TAG - The Git tag to clone and build from # - VERSION - Used to force the built pikepdf version to match -ARG QPDF_BASE_IMAGE -FROM ${QPDF_BASE_IMAGE} as qpdf-builder +# Default to pulling from the main repo registry when manually building +ARG REPO="paperless-ngx/paperless-ngx" + +ARG QPDF_VERSION +FROM ghcr.io/${REPO}/builder/qpdf:${QPDF_VERSION} as qpdf-builder # This does nothing, except provide a name for a copy below diff --git a/docker-builders/get-build-json.py b/docker-builders/get-build-json.py index f8d4f8701..a6d24d3fa 100755 --- a/docker-builders/get-build-json.py +++ b/docker-builders/get-build-json.py @@ -1,8 +1,18 @@ #!/usr/bin/env python3 """ -This is a helper script to either parse the JSON of the Pipfile.lock -or otherwise return a JSON object detailing versioning and image tags -for the packages we build seperately, then copy into the final Docker image +This is a helper script for the mutli-stage Docker image builder. +It provides a single point of configuration for package version control. +The output JSON object is used by the CI workflow to determine what versions +to build and pull into the final Docker image. + +Python package information is obtained from the Pipfile.lock. As this is +kept updated by dependabot, it usually will need no further configuration. +The sole exception currently is pikepdf, which has a dependency on qpdf, +and is configured here to use the latest version of qpdf built by the workflow. + +Other package version information is configured directly below, generally by +setting the version and Git information, if any. + """ import argparse import json @@ -14,11 +24,13 @@ CONFIG: Final = { # All packages need to be in the dict, even if not configured further # as it is used for the possible choices in the argument "psycopg2": {}, + "frontend": {}, # Most information about Python packages comes from the Pipfile.lock + # Excpetion being pikepdf, which needs a specific qpdf "pikepdf": { "qpdf_version": "10.6.3", }, - # For other packages, it is directly configured, for now + # For other packages, version and Git information are directly configured # These require manual updates to this file for version updates "qpdf": { "version": "10.6.3", @@ -59,11 +71,9 @@ def _main(): output = {"name": args.package} # Read Pipfile.lock file - pipfile_data = json.loads(pip_lock.read_text()) # Read the version from Pipfile.lock - if args.package in pipfile_data["default"]: pkg_data = pipfile_data["default"][args.package] @@ -73,7 +83,6 @@ def _main(): output["version"] = pkg_version # Based on the package, generate the expected Git tag name - if args.package == "pikepdf": git_tag_name = f"v{pkg_version}" elif args.package == "psycopg2": @@ -81,31 +90,18 @@ def _main(): output["git_tag"] = git_tag_name - # Based on the package and environment, generate the Docker image tag + # Use the basic ref name, minus refs/heads or refs/tags for frontend builder image + elif args.package == "frontend": + output["version"] = os.environ["GITHUB_REF_NAME"] - image_tag = _get_image_tag(repo_name, args.package, pkg_version) + # Add anything special from the config + output.update(CONFIG[args.package]) - output["image_tag"] = image_tag - - # Check for any special configuration, based on package - - if args.package in CONFIG: - output.update(CONFIG[args.package]) - - elif args.package in CONFIG: - - # This is not a Python package - - output.update(CONFIG[args.package]) - - output["image_tag"] = _get_image_tag(repo_name, args.package, output["version"]) - - else: - raise NotImplementedError(args.package) + # Based on the package and environment, generate the Docker image tag + output["image_tag"] = _get_image_tag(repo_name, args.package, output["version"]) # Output the JSON info to stdout - - print(json.dumps(output, indent=2)) + print(json.dumps(output)) if __name__ == "__main__": From ecca51dbdd57901b0a33610c20f424a7534bbb47 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 24 Apr 2022 14:18:51 -0700 Subject: [PATCH 18/86] Ports over the improvements to the frontend compilation from other PR --- docker-builders/Dockerfile.frontend | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-builders/Dockerfile.frontend b/docker-builders/Dockerfile.frontend index 6e0ee5374..0caec0030 100644 --- a/docker-builders/Dockerfile.frontend +++ b/docker-builders/Dockerfile.frontend @@ -3,7 +3,8 @@ FROM node:16-bullseye-slim AS compile-frontend -COPY . /src +COPY ./src /src/src +COPY ./src-ui /src/src-ui WORKDIR /src/src-ui RUN set -eux \ From f1da37dd124e384f7d2ef17e63892e523968e009 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 24 Apr 2022 14:50:38 -0700 Subject: [PATCH 19/86] Minor fixes for local building --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3b71421d9..77417383f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,14 +77,14 @@ ARG RUNTIME_PACKAGES="\ WORKDIR /usr/src/paperless/src/ # Copy qpdf and runtime library -COPY --from=qpdf-builder /usr/src/qpdf/libqpdf28_*.deb . -COPY --from=qpdf-builder /usr/src/qpdf/qpdf_*.deb . +COPY --from=qpdf-builder /usr/src/qpdf/libqpdf28_*.deb ./ +COPY --from=qpdf-builder /usr/src/qpdf/qpdf_*.deb ./ # Copy pikepdf wheel and dependencies -COPY --from=pikepdf-builder /usr/src/pikepdf/wheels/*.whl . +COPY --from=pikepdf-builder /usr/src/pikepdf/wheels/*.whl ./ # Copy psycopg2 wheel -COPY --from=psycopg2-builder /usr/src/psycopg2/wheels/psycopg2*.whl . +COPY --from=psycopg2-builder /usr/src/psycopg2/wheels/psycopg2*.whl ./ # copy jbig2enc COPY --from=jbig2enc-builder /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ From be8ca110f422b0c2d2915e9479aade4c788aa3ef Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 24 Apr 2022 14:51:06 -0700 Subject: [PATCH 20/86] Fixes spelling --- docker-builders/get-build-json.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-builders/get-build-json.py b/docker-builders/get-build-json.py index a6d24d3fa..07a33b4d4 100755 --- a/docker-builders/get-build-json.py +++ b/docker-builders/get-build-json.py @@ -26,7 +26,7 @@ CONFIG: Final = { "psycopg2": {}, "frontend": {}, # Most information about Python packages comes from the Pipfile.lock - # Excpetion being pikepdf, which needs a specific qpdf + # Exception being pikepdf, which needs a specific qpdf version "pikepdf": { "qpdf_version": "10.6.3", }, From 609b9e3369c844c6f6fd7f425a5c7f100ac3c16a Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 24 Apr 2022 14:54:44 -0700 Subject: [PATCH 21/86] Adds utility script for building the Docker image locally --- build-docker-imaage.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 build-docker-imaage.sh diff --git a/build-docker-imaage.sh b/build-docker-imaage.sh new file mode 100755 index 000000000..7d097fe06 --- /dev/null +++ b/build-docker-imaage.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Example Usage: ./build-docker-imaage.sh -t paperless-ngx:my-awesome-feature + +set -eux + +# Parse what we can from Pipfile.lock +pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') + +# Get the branch name +frontend=$(git rev-parse --abbrev-ref HEAD) + +# Directly set these +# Future enhancement: Set this in a single location +qpdf_version="10.6.3" +jbig2enc_version="0.29" + +docker build . \ + --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ + --build-arg QPDF_VERSION="${qpdf_version}" \ + --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ + --build-arg PSYCOPG2_VERSION="${psycopg2_version}" \ + --build-arg FRONTEND_VERSION="${frontend}" "$@" From 4517692c202ca216603724941c3a660fc5c8e57b Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 24 Apr 2022 15:20:36 -0700 Subject: [PATCH 22/86] Updates the utility script to allow building of other Dockerfiles for building any image locally. Adds a single point to configure non-Python versions --- .build-config.json | 9 ++++ build-docker-imaage.sh | 24 --------- build-docker-image.sh | 35 +++++++++++++ docker-builders/get-build-json.py | 86 ++++++++++++++----------------- 4 files changed, 84 insertions(+), 70 deletions(-) create mode 100644 .build-config.json delete mode 100755 build-docker-imaage.sh create mode 100755 build-docker-image.sh diff --git a/.build-config.json b/.build-config.json new file mode 100644 index 000000000..32cf968d5 --- /dev/null +++ b/.build-config.json @@ -0,0 +1,9 @@ +{ + "qpdf": { + "version": "10.6.3" + }, + "jbig2enc": { + "version": "0.29", + "git_tag": "0.29" + } +} diff --git a/build-docker-imaage.sh b/build-docker-imaage.sh deleted file mode 100755 index 7d097fe06..000000000 --- a/build-docker-imaage.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Example Usage: ./build-docker-imaage.sh -t paperless-ngx:my-awesome-feature - -set -eux - -# Parse what we can from Pipfile.lock -pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') -psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') - -# Get the branch name -frontend=$(git rev-parse --abbrev-ref HEAD) - -# Directly set these -# Future enhancement: Set this in a single location -qpdf_version="10.6.3" -jbig2enc_version="0.29" - -docker build . \ - --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ - --build-arg QPDF_VERSION="${qpdf_version}" \ - --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ - --build-arg PSYCOPG2_VERSION="${psycopg2_version}" \ - --build-arg FRONTEND_VERSION="${frontend}" "$@" diff --git a/build-docker-image.sh b/build-docker-image.sh new file mode 100755 index 000000000..41c95167c --- /dev/null +++ b/build-docker-image.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# Helper script for building the Docker image locally. +# Parses and provides the nessecary versions of other images to Docker +# before passing in the rest of script args + +# First Argument: The Dockerfile to build +# Other Arguments: Additional arguments to docker build + +# Example Usage: +# ./build-docker-image.sh Dockerfile -t paperless-ngx:my-awesome-feature +# ./build-docker-image.sh docker-builders/Dockerfile.qpdf -t paperless-ngx-build-qpdf:x.y.z + +set -eux + +# Parse what we can from Pipfile.lock +pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') +# Read this from the other config file +qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') +jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') +# Get the branch name +frontend=$(git rev-parse --abbrev-ref HEAD) + +if [ ! -f "$1" ]; then + echo "$1 is not a file, please provide the Dockerfile" + exit 1 +fi + +docker build --file "$1" \ + --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ + --build-arg QPDF_VERSION="${qpdf_version}" \ + --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ + --build-arg PSYCOPG2_VERSION="${psycopg2_version}" \ + --build-arg FRONTEND_VERSION="${frontend}" "${@:2}" . diff --git a/docker-builders/get-build-json.py b/docker-builders/get-build-json.py index 07a33b4d4..4b96ac8d7 100755 --- a/docker-builders/get-build-json.py +++ b/docker-builders/get-build-json.py @@ -20,28 +20,6 @@ import os from pathlib import Path from typing import Final -CONFIG: Final = { - # All packages need to be in the dict, even if not configured further - # as it is used for the possible choices in the argument - "psycopg2": {}, - "frontend": {}, - # Most information about Python packages comes from the Pipfile.lock - # Exception being pikepdf, which needs a specific qpdf version - "pikepdf": { - "qpdf_version": "10.6.3", - }, - # For other packages, version and Git information are directly configured - # These require manual updates to this file for version updates - "qpdf": { - "version": "10.6.3", - "git_tag": "N/A", - }, - "jbig2enc": { - "version": "0.29", - "git_tag": "0.29", - }, -} - def _get_image_tag( repo_name: str, @@ -58,47 +36,63 @@ def _main(): parser.add_argument( "package", help="The name of the package to generate JSON for", - choices=CONFIG.keys(), ) - args = parser.parse_args() + PIPFILE_LOCK_PATH: Final[Path] = Path("Pipfile.lock") + BUILD_CONFIG_PATH: Final[Path] = Path(".build-config.json") - pip_lock = Path("Pipfile.lock") - - repo_name = os.environ["GITHUB_REPOSITORY"] - - # The JSON object we'll output - output = {"name": args.package} + # Read the main config file + build_json: Final = json.loads(BUILD_CONFIG_PATH.read_text()) # Read Pipfile.lock file - pipfile_data = json.loads(pip_lock.read_text()) + pipfile_data: Final = json.loads(PIPFILE_LOCK_PATH.read_text()) - # Read the version from Pipfile.lock - if args.package in pipfile_data["default"]: + args: Final = parser.parse_args() + repo_name: Final[str] = os.environ["GITHUB_REPOSITORY"] + + # Default output values + version = None + git_tag = None + extra_config = {} + + if args.package == "frontend": + # Version is just the branch or tag name + version = os.environ["GITHUB_REF_NAME"] + elif args.package in pipfile_data["default"]: + # Read the version from Pipfile.lock pkg_data = pipfile_data["default"][args.package] - pkg_version = pkg_data["version"].split("==")[-1] - - output["version"] = pkg_version + version = pkg_version # Based on the package, generate the expected Git tag name if args.package == "pikepdf": - git_tag_name = f"v{pkg_version}" + git_tag = f"v{pkg_version}" elif args.package == "psycopg2": - git_tag_name = pkg_version.replace(".", "_") + git_tag = pkg_version.replace(".", "_") - output["git_tag"] = git_tag_name + # Any extra/special values needed + if args.package == "pikepdf": + extra_config["qpdf_version"] = build_json["qpdf"]["version"] - # Use the basic ref name, minus refs/heads or refs/tags for frontend builder image - elif args.package == "frontend": - output["version"] = os.environ["GITHUB_REF_NAME"] + elif args.package in build_json: + version = build_json[args.package]["version"] - # Add anything special from the config - output.update(CONFIG[args.package]) + if "git_tag" in build_json[args.package]: + git_tag = build_json[args.package]["git_tag"] + else: + raise NotImplementedError(args.package) - # Based on the package and environment, generate the Docker image tag - output["image_tag"] = _get_image_tag(repo_name, args.package, output["version"]) + # The JSON object we'll output + output = { + "name": args.package, + "version": version, + "git_tag": git_tag, + "image_tag": _get_image_tag(repo_name, args.package, version), + } + + # Add anything special a package may need + output.update(extra_config) # Output the JSON info to stdout print(json.dumps(output)) From d9d6b7b151c0d81cd1d24d7d84b47ac9b11021fa Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 25 Apr 2022 06:31:00 -0700 Subject: [PATCH 23/86] Updates the utlity build script to actually support all the images --- .github/workflows/ci.yml | 8 ++++---- build-docker-image.sh | 26 +++++++++++++++++++------- docker-builders/Dockerfile.pikepdf | 14 +++++++------- docker-builders/Dockerfile.psycopg2 | 10 +++++----- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe9afb1a3..c2c25acb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -168,8 +168,8 @@ jobs: dockerfile: ./docker-builders/Dockerfile.psycopg2 build-json: ${{ needs.prepare-docker-build.outputs.psycopg2-json }} build-args: | - GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).git_tag }} - VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} + PSYCOPG2_GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).git_tag }} + PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} build-pikepdf-wheel: name: pikepdf @@ -183,8 +183,8 @@ jobs: build-args: | REPO=${{ github.repository }} QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} - GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }} - VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} + PIKEPDF_GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }} + PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} build-frontend: name: Compile frontend diff --git a/build-docker-image.sh b/build-docker-image.sh index 41c95167c..f7ab62ca6 100755 --- a/build-docker-image.sh +++ b/build-docker-image.sh @@ -2,7 +2,8 @@ # Helper script for building the Docker image locally. # Parses and provides the nessecary versions of other images to Docker -# before passing in the rest of script args +# before passing in the rest of script args. A future enhancement +# would be to combine this with the CI script # First Argument: The Dockerfile to build # Other Arguments: Additional arguments to docker build @@ -13,6 +14,14 @@ set -eux +if ! command -v jq; then + echo "jq required" + exit 1 +elif [ ! -f "$1" ]; then + echo "$1 is not a file, please provide the Dockerfile" + exit 1 +fi + # Parse what we can from Pipfile.lock pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g') @@ -20,16 +29,19 @@ psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') # Get the branch name -frontend=$(git rev-parse --abbrev-ref HEAD) +frontend_version=$(git rev-parse --abbrev-ref HEAD) -if [ ! -f "$1" ]; then - echo "$1 is not a file, please provide the Dockerfile" - exit 1 -fi +# Get Git tags for building +# psycopg2 uses X_Y_Z git tags +psycopg2_git_tag=${psycopg2_version//./_} +# pikepdf uses vX.Y.Z +pikepdf_git_tag="v${pikepdf_version}" docker build --file "$1" \ --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ --build-arg QPDF_VERSION="${qpdf_version}" \ --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ + --build-arg PIKEPDF_GIT_TAG="${pikepdf_git_tag}" \ --build-arg PSYCOPG2_VERSION="${psycopg2_version}" \ - --build-arg FRONTEND_VERSION="${frontend}" "${@:2}" . + --build-arg PSYCOPG2_GIT_TAG="${psycopg2_git_tag}" \ + --build-arg FRONTEND_VERSION="${frontend_version}" "${@:2}" . diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index be544e282..7325bceff 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -2,8 +2,8 @@ # Inputs: # - REPO - Docker repository to pull qpdf from # - QPDF_VERSION - The image qpdf version to copy .deb files from -# - GIT_TAG - The Git tag to clone and build from -# - VERSION - Used to force the built pikepdf version to match +# - PIKEPDF_GIT_TAG - The Git tag to clone and build from +# - PIKEPDF_VERSION - Used to force the built pikepdf version to match # Default to pulling from the main repo registry when manually building ARG REPO="paperless-ngx/paperless-ngx" @@ -32,7 +32,7 @@ ARG BUILD_PACKAGES="\ WORKDIR /usr/src -COPY --from=qpdf-builder /usr/src/qpdf/*.deb . +COPY --from=qpdf-builder /usr/src/qpdf/*.deb ./ # As this is an base image for a multi-stage final image # the added size of the install is basically irrelevant @@ -49,19 +49,19 @@ RUN set -eux \ # For better caching, seperate the basic installs from # the building -ARG GIT_TAG -ARG VERSION +ARG PIKEPDF_GIT_TAG +ARG PIKEPDF_VERSION RUN set -eux \ && echo "building pikepdf wheel" \ # Note the v in the tag name here - && git clone --quiet --depth 1 --branch "${GIT_TAG}" https://github.com/pikepdf/pikepdf.git \ + && git clone --quiet --depth 1 --branch "${PIKEPDF_GIT_TAG}" https://github.com/pikepdf/pikepdf.git \ && cd pikepdf \ # pikepdf seems to specifciy either a next version when built OR # a post release tag. # In either case, this won't match what we want from requirements.txt # Directly modify the setup.py to set the version we just checked out of Git - && sed -i "s/use_scm_version=True/version=\"${VERSION}\"/g" setup.py \ + && sed -i "s/use_scm_version=True/version=\"${PIKEPDF_VERSION}\"/g" setup.py \ # https://github.com/pikepdf/pikepdf/issues/323 && rm pyproject.toml \ && mkdir wheels \ diff --git a/docker-builders/Dockerfile.psycopg2 b/docker-builders/Dockerfile.psycopg2 index 0c1cc048b..cbfbba7c1 100644 --- a/docker-builders/Dockerfile.psycopg2 +++ b/docker-builders/Dockerfile.psycopg2 @@ -1,7 +1,7 @@ # This Dockerfile builds the psycopg2 wheel # Inputs: -# - GIT_TAG - The Git tag to clone and build from -# - VERSION - Unused, kept for future possible usage +# - PSYCOPG2_GIT_TAG - The Git tag to clone and build from +# - PSYCOPG2_VERSION - Unused, kept for future possible usage FROM python:3.9-slim-bullseye @@ -31,13 +31,13 @@ RUN set -eux \ # For better caching, seperate the basic installs from # the building -ARG GIT_TAG -ARG VERSION +ARG PSYCOPG2_GIT_TAG +ARG PSYCOPG2_VERSION RUN set -eux \ && echo "Building psycopg2 wheel" \ && cd /usr/src \ - && git clone --quiet --depth 1 --branch ${GIT_TAG} https://github.com/psycopg/psycopg2.git \ + && git clone --quiet --depth 1 --branch ${PSYCOPG2_GIT_TAG} https://github.com/psycopg/psycopg2.git \ && cd psycopg2 \ && mkdir wheels \ && python3 -m pip wheel . --wheel-dir wheels \ From bdcc6f861d46d4912698bdd0be497b0f8d1cd0fe Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 25 Apr 2022 09:15:12 -0700 Subject: [PATCH 24/86] Converts tabs to spaces and update EditorConfig for the new files --- .editorconfig | 2 +- .pre-commit-config.yaml | 8 ++++---- docker-builders/Dockerfile.frontend | 6 +++--- docker-builders/Dockerfile.jbig2enc | 8 ++++---- docker-builders/Dockerfile.pikepdf | 10 +++++----- docker-builders/Dockerfile.psycopg2 | 8 ++++---- docker-builders/Dockerfile.qpdf | 9 +++++---- docs/Dockerfile | 6 +++--- 8 files changed, 29 insertions(+), 28 deletions(-) diff --git a/.editorconfig b/.editorconfig index 125108a0c..8111f01d8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -33,5 +33,5 @@ indent_style = space [**/test_*.py] max_line_length = off -[Dockerfile] +[Dockerfile*] indent_style = space diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 32998e432..f0bf9bace 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: - id: yesqa exclude: "(migrations)" - repo: https://github.com/asottile/add-trailing-comma - rev: "v2.2.2" + rev: "v2.2.3" hooks: - id: add-trailing-comma exclude: "(migrations)" @@ -64,16 +64,16 @@ repos: - id: black # Dockerfile hooks - repo: https://github.com/AleksaC/hadolint-py - rev: v1.19.0 + rev: v2.10.0 hooks: - id: hadolint args: - - --ignore - - DL3006 # https://github.com/hadolint/hadolint/wiki/DL3006 (doesn't understand FROM with ARG) - --ignore - DL3008 # https://github.com/hadolint/hadolint/wiki/DL3008 (should probably do this at some point) - --ignore - DL3013 # https://github.com/hadolint/hadolint/wiki/DL3013 (should probably do this too at some point) + - --ignore + - DL3003 # https://github.com/hadolint/hadolint/wiki/DL3003 (seems excessive to use WORKDIR so much) # Shell script hooks - repo: https://github.com/lovesegfault/beautysh rev: v6.2.1 diff --git a/docker-builders/Dockerfile.frontend b/docker-builders/Dockerfile.frontend index 0caec0030..26f6c9e15 100644 --- a/docker-builders/Dockerfile.frontend +++ b/docker-builders/Dockerfile.frontend @@ -8,7 +8,7 @@ COPY ./src-ui /src/src-ui WORKDIR /src/src-ui RUN set -eux \ - && npm update npm -g \ - && npm ci --no-optional + && npm update npm -g \ + && npm ci --no-optional RUN set -eux \ - && ./node_modules/.bin/ng build --configuration production + && ./node_modules/.bin/ng build --configuration production diff --git a/docker-builders/Dockerfile.jbig2enc b/docker-builders/Dockerfile.jbig2enc index 72429ec0b..4bc633170 100644 --- a/docker-builders/Dockerfile.jbig2enc +++ b/docker-builders/Dockerfile.jbig2enc @@ -1,6 +1,6 @@ # This Dockerfile compiles the jbig2enc library # Inputs: -# - JBIG2ENC_VERSION - the Git tag to checkout and build +# - JBIG2ENC_VERSION - the Git tag to checkout and build FROM debian:bullseye-slim @@ -32,8 +32,8 @@ RUN apt-get update --quiet \ ARG JBIG2ENC_VERSION RUN set -eux \ - && git clone --quiet --branch $JBIG2ENC_VERSION https://github.com/agl/jbig2enc . + && git clone --quiet --branch $JBIG2ENC_VERSION https://github.com/agl/jbig2enc . RUN set -eux \ - && ./autogen.sh + && ./autogen.sh RUN set -eux \ - && ./configure && make + && ./configure && make diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index 7325bceff..3d2e5f235 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -1,9 +1,9 @@ # This Dockerfile builds the pikepdf wheel # Inputs: -# - REPO - Docker repository to pull qpdf from -# - QPDF_VERSION - The image qpdf version to copy .deb files from -# - PIKEPDF_GIT_TAG - The Git tag to clone and build from -# - PIKEPDF_VERSION - Used to force the built pikepdf version to match +# - REPO - Docker repository to pull qpdf from +# - QPDF_VERSION - The image qpdf version to copy .deb files from +# - PIKEPDF_GIT_TAG - The Git tag to clone and build from +# - PIKEPDF_VERSION - Used to force the built pikepdf version to match # Default to pulling from the main repo registry when manually building ARG REPO="paperless-ngx/paperless-ngx" @@ -53,7 +53,7 @@ ARG PIKEPDF_GIT_TAG ARG PIKEPDF_VERSION RUN set -eux \ - && echo "building pikepdf wheel" \ + && echo "building pikepdf wheel" \ # Note the v in the tag name here && git clone --quiet --depth 1 --branch "${PIKEPDF_GIT_TAG}" https://github.com/pikepdf/pikepdf.git \ && cd pikepdf \ diff --git a/docker-builders/Dockerfile.psycopg2 b/docker-builders/Dockerfile.psycopg2 index cbfbba7c1..cfd7ff56a 100644 --- a/docker-builders/Dockerfile.psycopg2 +++ b/docker-builders/Dockerfile.psycopg2 @@ -1,7 +1,7 @@ # This Dockerfile builds the psycopg2 wheel # Inputs: -# - PSYCOPG2_GIT_TAG - The Git tag to clone and build from -# - PSYCOPG2_VERSION - Unused, kept for future possible usage +# - PSYCOPG2_GIT_TAG - The Git tag to clone and build from +# - PSYCOPG2_VERSION - Unused, kept for future possible usage FROM python:3.9-slim-bullseye @@ -25,7 +25,7 @@ RUN set -eux \ && apt-get update --quiet \ && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ && rm -rf /var/lib/apt/lists/* \ - && python3 -m pip install --upgrade pip wheel + && python3 -m pip install --no-cache-dir --upgrade pip wheel # Layers after this point change according to required version # For better caching, seperate the basic installs from @@ -35,7 +35,7 @@ ARG PSYCOPG2_GIT_TAG ARG PSYCOPG2_VERSION RUN set -eux \ - && echo "Building psycopg2 wheel" \ + && echo "Building psycopg2 wheel" \ && cd /usr/src \ && git clone --quiet --depth 1 --branch ${PSYCOPG2_GIT_TAG} https://github.com/psycopg/psycopg2.git \ && cd psycopg2 \ diff --git a/docker-builders/Dockerfile.qpdf b/docker-builders/Dockerfile.qpdf index c56a515c4..770d8c2ee 100644 --- a/docker-builders/Dockerfile.qpdf +++ b/docker-builders/Dockerfile.qpdf @@ -36,16 +36,17 @@ ARG QPDF_VERSION # In order to get the required version of qpdf, it is backported from bookwork # and then built from source RUN set -eux \ - && echo "Building qpdf" \ - && echo "deb-src http://deb.debian.org/debian/ bookworm main" | tee /etc/apt/sources.list.d/bookworm-src.list \ + && echo "Building qpdf" \ + && echo "deb-src http://deb.debian.org/debian/ bookworm main" > /etc/apt/sources.list.d/bookworm-src.list \ && apt-get update \ && mkdir qpdf \ && cd qpdf \ && apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm \ && rm -rf /var/lib/apt/lists/* \ && cd qpdf-$QPDF_VERSION \ + # We don't need to build the tests (also don't run them) + && rm -rf libtests \ && DEBEMAIL=hello@paperless-ngx.com debchange --bpo \ - && export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \ + && export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \ && dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes \ - && pwd \ && ls -ahl ../*.deb diff --git a/docs/Dockerfile b/docs/Dockerfile index 9fb8bd0cc..bb4b35e2d 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,10 +1,10 @@ FROM python:3.5.1 # Install Sphinx and Pygments -RUN pip install Sphinx Pygments +RUN pip install --no-cache-dir Sphinx Pygments \ + # Setup directories, copy data + && mkdir /build -# Setup directories, copy data -RUN mkdir /build COPY . /build WORKDIR /build/docs From cd8d4c357d7c768d3a8b0deffe4dd0de9cf1a621 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 25 Apr 2022 11:39:05 -0700 Subject: [PATCH 25/86] Fixes the merge issues --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2c25acb4..34bcf21a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -266,9 +266,6 @@ jobs: # build and push image to docker hub. build-docker-image: - concurrency: - group: ${{ github.workflow }}-build-docker-image-${{ github.ref }} - cancel-in-progress: true runs-on: ubuntu-20.04 concurrency: group: ${{ github.workflow }}-build-docker-image-${{ github.ref_name }} From 912caf84a6d7a2c913533ee45a33bafe57b8dbb7 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:51:19 -0700 Subject: [PATCH 26/86] Bump angular & tools to 13.3.4 or 13.3.3 --- src-ui/package-lock.json | 1397 +++++++++++++++++++++----------------- src-ui/package.json | 22 +- 2 files changed, 793 insertions(+), 626 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 3fe1cce3f..21ce16680 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -8,14 +8,14 @@ "name": "paperless-ui", "version": "0.0.0", "dependencies": { - "@angular/common": "~13.3.1", - "@angular/compiler": "~13.3.1", - "@angular/core": "~13.3.1", - "@angular/forms": "~13.3.1", - "@angular/localize": "~13.3.1", - "@angular/platform-browser": "~13.3.1", - "@angular/platform-browser-dynamic": "~13.3.1", - "@angular/router": "~13.3.1", + "@angular/common": "~13.3.4", + "@angular/compiler": "~13.3.4", + "@angular/core": "~13.3.4", + "@angular/forms": "~13.3.4", + "@angular/localize": "~13.3.4", + "@angular/platform-browser": "~13.3.4", + "@angular/platform-browser-dynamic": "~13.3.4", + "@angular/router": "~13.3.4", "@ng-bootstrap/ng-bootstrap": "^12.0.1", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", @@ -33,9 +33,9 @@ }, "devDependencies": { "@angular-builders/jest": "13.0.3", - "@angular-devkit/build-angular": "~13.3.1", - "@angular/cli": "~13.3.1", - "@angular/compiler-cli": "~13.3.1", + "@angular-devkit/build-angular": "~13.3.3", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.4", "@types/jest": "27.4.1", "@types/node": "^17.0.23", "codelyzer": "^6.0.2", @@ -83,12 +83,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1303.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", - "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", + "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.1", + "@angular-devkit/core": "13.3.3", "rxjs": "6.6.7" }, "engines": { @@ -116,15 +116,15 @@ "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.1.tgz", - "integrity": "sha512-xxBW4zZZM+lewW0nEpk9SXw6BMYhxe8WI/FjyEroOV8G2IuOrjZ4112QOpk6jCgmPHSOEldbltEdwoVLAnu09Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", + "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", "dev": true, "dependencies": { "@ampproject/remapping": "1.1.1", - "@angular-devkit/architect": "0.1303.1", - "@angular-devkit/build-webpack": "0.1303.1", - "@angular-devkit/core": "13.3.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/build-webpack": "0.1303.3", + "@angular-devkit/core": "13.3.3", "@babel/core": "7.16.12", "@babel/generator": "7.16.8", "@babel/helper-annotate-as-pure": "7.16.7", @@ -135,7 +135,7 @@ "@babel/runtime": "7.16.7", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.3.1", + "@ngtools/webpack": "13.3.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -157,7 +157,7 @@ "license-webpack-plugin": "4.0.2", "loader-utils": "3.2.0", "mini-css-extract-plugin": "2.5.3", - "minimatch": "3.0.4", + "minimatch": "3.0.5", "open": "8.4.0", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", @@ -243,13 +243,19 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1303.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.1.tgz", - "integrity": "sha512-KSnR3y2q5hxh7t7ZSi0Emv/Kh9+D105JaEeyEqjqRjLdZSd2m6eAxbSUMNOAsbqnJTMCfzU5AG7jhbujuge0dQ==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", + "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1303.1", + "@angular-devkit/architect": "0.1303.3", "rxjs": "6.6.7" }, "engines": { @@ -281,9 +287,9 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", - "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", + "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", "dev": true, "dependencies": { "ajv": "8.9.0", @@ -326,12 +332,12 @@ "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.1.tgz", - "integrity": "sha512-DxXMjlq/sALcHuONZRMTBX5k30XPfN4b6Ue4k7Xl8JKZqyHhEzfXaZzgD9u2cwb7wybKEeF/BZ5eJd8JG525og==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", + "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.1", + "@angular-devkit/core": "13.3.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -362,16 +368,16 @@ "dev": true }, "node_modules/@angular/cli": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.1.tgz", - "integrity": "sha512-0uwU8v3V/2s95X4cZT582J6upReT/ZNw/VAf4p4q51JN+BBvdCEb251xTF+TcOojyToFyJYvg8T28XSrsNsmTQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", + "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1303.1", - "@angular-devkit/core": "13.3.1", - "@angular-devkit/schematics": "13.3.1", - "@schematics/angular": "13.3.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", + "@schematics/angular": "13.3.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -398,9 +404,9 @@ } }, "node_modules/@angular/common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.1.tgz", - "integrity": "sha512-Var5ChoX8kZl9cbIWbW7Reb3Xz3t1c1XHwq1k+oK2fgrPdEfypY9n/6DxyXOtSEGb9aV7ZCaxcv2c5JUKR3OPg==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.4.tgz", + "integrity": "sha512-vPZuUGWMXz6r30obBqH+iIG4Feq4YEK/4wUks7PEYGke8MXFPYsNKuHMhKCgYEhabD/4Mo4GEp3i18/3Kk72Mw==", "dependencies": { "tslib": "^2.3.0" }, @@ -408,14 +414,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.3.1", + "@angular/core": "13.3.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.1.tgz", - "integrity": "sha512-ppJURRRDPZB6UaZctH6yBsznZXB7wZdCpfy5yo4lFE4k8rygfV80TmnrbJBZXNNq057VK48Bap1tsehFwckjog==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.4.tgz", + "integrity": "sha512-Yf1Dv2BVytjmv5Nnv05hUciUOH/UpKgXG1Ql5XwQG/qGV4eEs33PJBtGsUJTPuddxfRm72JMsbZcoRjVADqbcw==", "dependencies": { "tslib": "^2.3.0" }, @@ -424,9 +430,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.1.tgz", - "integrity": "sha512-dImxLUITNwODlXaLcEACw10bxTiajWEQz3sLwhT/936UH+MNtM/RyLJ0M7xDvILDqq77W3psK5/M6F3M1mUpew==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.4.tgz", + "integrity": "sha512-wCnt2YOS5EiwWCEv8oCqIfiwUtifs+COhcYH6fpmf/3X9w1yKO1ZMA+OsFQ0IVS4d0YYavm5DTPQ2ep2c0sF5w==", "dependencies": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -448,7 +454,7 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.3.1", + "@angular/compiler": "13.3.4", "typescript": ">=4.4.2 <4.7" } }, @@ -464,24 +470,24 @@ } }, "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", + "@babel/generator": "^7.17.9", "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { @@ -501,9 +507,9 @@ } }, "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -533,9 +539,9 @@ } }, "node_modules/@angular/core": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.1.tgz", - "integrity": "sha512-ZU/B9jEiZ0jadRkRL9Sb2btzqgQ0ylx380PfRQaojVIsij/EO6+jOSHIo5upMIGu/OvkggfweShJGlylCOrOXA==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.4.tgz", + "integrity": "sha512-PqPwx9oaV0Bh0m0fdI2jtXUC6s04jfD4vyzB4sjEuRI9pRUnZ6M5hZ5Vn/KJVZyt411MevbJfqzUVf0W+GDZew==", "dependencies": { "tslib": "^2.3.0" }, @@ -548,9 +554,9 @@ } }, "node_modules/@angular/forms": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.1.tgz", - "integrity": "sha512-S6a/CEq1ht0vw2epuESiO551dsyLQTb/HuwceIBlsX2JqRRccynYlyx92gsDAo4hD2F0q+EeqZEPuq3oQIK43A==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.4.tgz", + "integrity": "sha512-QHyUXOKYITysaJJ4VnmBacE69oz0rw4G7Y2lhPb2V3a1XsWeO61SZEeGMfAWo7sLoDvi2MCEWNEhl1du4dK14A==", "dependencies": { "tslib": "^2.3.0" }, @@ -558,16 +564,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.1", - "@angular/core": "13.3.1", - "@angular/platform-browser": "13.3.1", + "@angular/common": "13.3.4", + "@angular/core": "13.3.4", + "@angular/platform-browser": "13.3.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.1.tgz", - "integrity": "sha512-1s51ufL28EZuDQJ6+dHvLA9yyR8O9dpqS1PFrtNo9OcD62/JiDI8CHQlAdk2kmU5eTmulDf39sSLbOsDUGPGuQ==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.4.tgz", + "integrity": "sha512-T55072wuH4jFweHA0cYhKaomitjxEpyVMro3QA9+SaBMy10yAP2Z1h1vA16A/vXxqVy8oSrmuda4UwMOwZv3Aw==", "dependencies": { "@babel/core": "7.17.2", "glob": "7.2.0", @@ -582,8 +588,8 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.3.1", - "@angular/compiler-cli": "13.3.1" + "@angular/compiler": "13.3.4", + "@angular/compiler-cli": "13.3.4" } }, "node_modules/@angular/localize/node_modules/@ampproject/remapping": { @@ -627,9 +633,9 @@ } }, "node_modules/@angular/localize/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -656,9 +662,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.1.tgz", - "integrity": "sha512-WtyrkK0pLYj6w7pz3xk8zlhWL1NwGCWT+k7YxEjBOONCIXlZvCqWVzWo4nNQn9Xqxd+z1FVI0dssDwZm2TD+Eg==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.4.tgz", + "integrity": "sha512-IjBOkjrIVIbbZCDQJRdel0FSDcExSLDgMxcCSQ6pKa6oR/t59BJpSpOhB1W9nRwLtvMmGYkS/oyLFsKk65UoYA==", "dependencies": { "tslib": "^2.3.0" }, @@ -666,9 +672,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "13.3.1", - "@angular/common": "13.3.1", - "@angular/core": "13.3.1" + "@angular/animations": "13.3.4", + "@angular/common": "13.3.4", + "@angular/core": "13.3.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -677,9 +683,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.1.tgz", - "integrity": "sha512-TKV63SSyjrv5EsD03PloCbo8ZrJq5owkJ38E2FO/VvJAV3xu3Ey0SnoikNZMd8o3rh7+ocuT5K9Xcr4YuKVgEA==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.4.tgz", + "integrity": "sha512-UApjgrL6B3QTdSYoCOPzMvFDmSewAHrLpreLYEmADutMWkD0ZcTPux4MJp8awT4P3l6wKzBeGJIKLlk8zsXmGQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -687,16 +693,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.1", - "@angular/compiler": "13.3.1", - "@angular/core": "13.3.1", - "@angular/platform-browser": "13.3.1" + "@angular/common": "13.3.4", + "@angular/compiler": "13.3.4", + "@angular/core": "13.3.4", + "@angular/platform-browser": "13.3.4" } }, "node_modules/@angular/router": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.1.tgz", - "integrity": "sha512-YpZLjI4UI9KK6x8yn41XMrBWZgVb5JyJR7KNhQXB7WiX8bVH5SZzFRkjR3qUxTGaxe6I7KFvzySwm4JTYNj+xw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.4.tgz", + "integrity": "sha512-UuMAjWHoFKF8b9gFOiqL7fpVXjIr89BtxVES3yXReVq/IZJz9gWup6lYK3KMja+F8HZB8LBUMYgtqjS9iyLV/Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -704,9 +710,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.1", - "@angular/core": "13.3.1", - "@angular/platform-browser": "13.3.1", + "@angular/common": "13.3.4", + "@angular/core": "13.3.4", + "@angular/platform-browser": "13.3.4", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -852,15 +858,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -940,24 +946,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -1132,12 +1126,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" }, "engines": { @@ -1145,9 +1139,9 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -1158,9 +1152,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", - "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1905,9 +1899,9 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", - "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.17.7", @@ -2034,12 +2028,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" @@ -2338,17 +2332,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -2358,9 +2352,9 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -2396,6 +2390,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -2433,9 +2436,9 @@ } }, "node_modules/@ctrl/tinycolor": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", - "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==", "engines": { "node": ">=10" } @@ -3328,9 +3331,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", "engines": { "node": ">=6.0.0" } @@ -3341,18 +3344,18 @@ "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.1.tgz", - "integrity": "sha512-q0N1Pi032kfqHdoHEu9RqSdmN0ycSKmlg0b4YaqgOxNcOfuI9bH3oSejCttcYhe0q5SPB0IgVDJ6M0MrcKVi6Q==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.2.tgz", + "integrity": "sha512-Dvd95VtJe5a/rxgQlI0QFX1OJ3I1MM484+VJMA1P2ETq/hgT44ypFI/pIiO+KcHV76IX5SjGKSRNiWNi+shnaA==", "dependencies": { "tslib": "^2.3.0" }, @@ -3397,9 +3400,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.1.tgz", - "integrity": "sha512-40iEqAA/l882MPbGuG5EYxzsPWJ37fT4fF22SkPLX2eBgNhJ4K8XMt0gqcFhkHUsSe63frg1qjQ1Pd31msu0bQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", + "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", "dev": true, "engines": { "node": "^12.20.0 || ^14.15.0 || >=16.10.0", @@ -3530,22 +3533,22 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", - "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@schematics/angular": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.1.tgz", - "integrity": "sha512-+lrK/d1eJsAK6d6E9TDeg3Vc71bDy1KsE8M+lEINdX9Wax22mAz4pw20X9RSCw5RHgn+XcNUuMsgRJAwVhDNpg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", + "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.1", - "@angular-devkit/schematics": "13.3.1", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", "jsonc-parser": "3.0.0" }, "engines": { @@ -3659,9 +3662,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.0.tgz", + "integrity": "sha512-r8aveDbd+rzGP+ykSdF3oPuTVRWRfbBiHl0rVDM2yNEmSMXfkObQLV46b4RnCv3Lra51OlfnZhkkFaDl2MIRaA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -3819,9 +3822,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "version": "17.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", + "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==", "devOptional": true }, "node_modules/@types/parse-json": { @@ -3831,9 +3834,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", "dev": true }, "node_modules/@types/qs": { @@ -3925,9 +3928,9 @@ "dev": true }, "node_modules/@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "optional": true, "dependencies": { "@types/node": "*" @@ -4098,9 +4101,9 @@ "dev": true }, "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "node_modules/abbrev": { @@ -4516,9 +4519,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", - "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", + "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", "dev": true, "funding": [ { @@ -4532,7 +4535,7 @@ ], "dependencies": { "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001317", + "caniuse-lite": "^1.0.30001332", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -5050,9 +5053,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "funding": [ { "type": "opencollective", @@ -5064,10 +5067,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" }, "bin": { @@ -5237,9 +5240,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001323", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001323.tgz", - "integrity": "sha512-e4BF2RlCVELKx8+RmklSEIVub1TWrmdhvA5kEUueummz1XyySW0DVk+3x9HyhU9MuWTa2BhqLgEuEmUwASAdCA==", + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", "funding": [ { "type": "opencollective", @@ -5396,9 +5399,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "optional": true, "dependencies": { "string-width": "^4.2.0" @@ -5407,7 +5410,7 @@ "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "1.4.0" + "@colors/colors": "1.5.0" } }, "node_modules/cli-truncate": { @@ -5592,15 +5595,6 @@ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "devOptional": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5985,12 +5979,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", + "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", "dev": true, "dependencies": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.2", "semver": "7.0.0" }, "funding": { @@ -6320,9 +6314,9 @@ "dev": true }, "node_modules/cypress": { - "version": "9.5.3", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.3.tgz", - "integrity": "sha512-ItelIVmqMTnKYbo1JrErhsGgQGjWOxCpHT1TfMvwnIXKXN/OSlPjEK7rbCLYDZhejQL99PmUqul7XORI24Ik0A==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.4.tgz", + "integrity": "sha512-6AyJAD8phe7IMvOL4oBsI9puRNOWxZjl8z1lgixJMcgJ85JJmyKeP6uqNA0dI1z14lmJ7Qklf2MOgP/xdAqJ/Q==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -6377,9 +6371,9 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "version": "14.18.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.15.tgz", + "integrity": "sha512-hzzmpfqOhsFmvQ9nu87qNQJ8ksofJLBIKkgaYWFapV+W8UGHCxtg5uf69ZtlDSS8rb4ax3lMgpqBnLUQETjCJA==", "optional": true }, "node_modules/cypress/node_modules/ansi-styles": { @@ -6522,9 +6516,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", - "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", + "integrity": "sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==", "optional": true }, "node_modules/debug": { @@ -6671,15 +6665,19 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { @@ -6851,9 +6849,9 @@ } }, "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", @@ -6865,9 +6863,9 @@ } }, "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { @@ -6943,9 +6941,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.103", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", - "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + "version": "1.4.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", + "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7015,9 +7013,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", - "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -8115,6 +8113,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -8286,9 +8293,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, "node_modules/handle-thing": { @@ -8317,6 +8324,18 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -8502,9 +8521,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz", - "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.8", @@ -8901,9 +8920,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -9166,9 +9185,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -11794,9 +11813,9 @@ } }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "engines": { "node": ">=6.11.5" @@ -12257,9 +12276,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12416,9 +12435,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", - "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -12503,9 +12522,9 @@ } }, "node_modules/ngx-cookie-service": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.1.2.tgz", - "integrity": "sha512-CInzm1xjI51QA1gCJEnqfDFLnN7w/SzqM5+kGdpI+UiCeHKgYEXpKG1s7lFz4jbLDrL/jHKtrf92t7RGsm66Cg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.2.0.tgz", + "integrity": "sha512-WxuLrZROWf59DfPPstPsrS18nxtPvT+uJ4AEjFs57NqtTfYdRQXhVJ02fZ4WP4VPElI8o6qndNL7gi9tkEdg4Q==", "dependencies": { "tslib": "^2.0.0" }, @@ -12604,9 +12623,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" }, "node_modules/nopt": { "version": "5.0.0", @@ -12741,6 +12760,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -12750,17 +12782,26 @@ "node": ">= 10" } }, + "node_modules/npm-registry-fetch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz", - "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==", + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.6.tgz", + "integrity": "sha512-9a/MLxGaw3LEGes0HaPez2RgZWDV6X0jrgChsuxfEh8xoDoYGxaGrkMe7Dlyjrb655tA/b8fX0qlUg6Ii5MBvw==", "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^1.1.2", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^7.2.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -12771,7 +12812,7 @@ "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", + "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^1.1.1" }, @@ -12779,6 +12820,26 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -12794,18 +12855,18 @@ } }, "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", - "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz", - "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", @@ -12823,7 +12884,7 @@ "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.1.1", - "ssri": "^8.0.1" + "ssri": "^9.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" @@ -12846,6 +12907,30 @@ "encoding": "^0.1.13" } }, + "node_modules/npm-registry-fetch/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12859,18 +12944,18 @@ } }, "node_modules/npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nth-check": { @@ -13470,9 +13555,9 @@ } }, "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" @@ -13587,9 +13672,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.5.tgz", - "integrity": "sha512-FHbbB/hRo/7cxLGkc2NS7cDRIDN1oFqQnUKBiyh4b/gwk8DD8udvmRDpUhEK836kB8ggUCieHVOvZDnF9XhI3g==", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -13597,6 +13682,10 @@ "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } @@ -13755,9 +13844,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.2.tgz", - "integrity": "sha512-isudf5ldhg4fk16M8viAwAbg6Gv14lVO35N3Z/49NhbwPQ2xbiEoHgrRgpgQojosF4vF7jY653ktB6dDrUOR8Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -13766,6 +13855,10 @@ "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } @@ -13876,16 +13969,20 @@ } }, "node_modules/postcss-nesting": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.3.tgz", - "integrity": "sha512-wUC+/YCik4wH3StsbC5fBG1s2Z3ZV74vjGqBFYtmYKlVxoio5TYGM06AiaKkQPPlkXWn72HKfS7Cw5PYxnoXSw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.4.tgz", + "integrity": "sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } @@ -13974,16 +14071,20 @@ } }, "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", - "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.2.tgz", + "integrity": "sha512-76XzEQv3g+Vgnz3tmqh3pqQyRojkcJ+pjaePsyhcyf164p9aZsu3t+NWxkZYbcHLK1ju5Qmalti2jPI5IWCe5w==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^12 || ^14 || >=16" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { "postcss": "^8.4" } @@ -14327,9 +14428,9 @@ "dev": true }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -14342,13 +14443,14 @@ "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -15072,14 +15174,14 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", + "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "dev": true, "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" @@ -15862,9 +15964,9 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/tslint": { "version": "6.1.3", @@ -16151,9 +16253,9 @@ } }, "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "node_modules/v8-to-istanbul": { @@ -16283,9 +16385,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { "node": ">= 8" } @@ -16808,9 +16910,9 @@ } }, "node_modules/yargs": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", - "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -16893,12 +16995,12 @@ } }, "@angular-devkit/architect": { - "version": "0.1303.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", - "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", + "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.1", + "@angular-devkit/core": "13.3.3", "rxjs": "6.6.7" }, "dependencies": { @@ -16920,15 +17022,15 @@ } }, "@angular-devkit/build-angular": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.1.tgz", - "integrity": "sha512-xxBW4zZZM+lewW0nEpk9SXw6BMYhxe8WI/FjyEroOV8G2IuOrjZ4112QOpk6jCgmPHSOEldbltEdwoVLAnu09Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", + "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", "dev": true, "requires": { "@ampproject/remapping": "1.1.1", - "@angular-devkit/architect": "0.1303.1", - "@angular-devkit/build-webpack": "0.1303.1", - "@angular-devkit/core": "13.3.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/build-webpack": "0.1303.3", + "@angular-devkit/core": "13.3.3", "@babel/core": "7.16.12", "@babel/generator": "7.16.8", "@babel/helper-annotate-as-pure": "7.16.7", @@ -16939,7 +17041,7 @@ "@babel/runtime": "7.16.7", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.3.1", + "@ngtools/webpack": "13.3.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -16962,7 +17064,7 @@ "license-webpack-plugin": "4.0.2", "loader-utils": "3.2.0", "mini-css-extract-plugin": "2.5.3", - "minimatch": "3.0.4", + "minimatch": "3.0.5", "open": "8.4.0", "ora": "5.4.1", "parse5-html-rewriting-stream": "6.0.1", @@ -17008,16 +17110,22 @@ "dev": true } } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.1303.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.1.tgz", - "integrity": "sha512-KSnR3y2q5hxh7t7ZSi0Emv/Kh9+D105JaEeyEqjqRjLdZSd2m6eAxbSUMNOAsbqnJTMCfzU5AG7jhbujuge0dQ==", + "version": "0.1303.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", + "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1303.1", + "@angular-devkit/architect": "0.1303.3", "rxjs": "6.6.7" }, "dependencies": { @@ -17039,9 +17147,9 @@ } }, "@angular-devkit/core": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", - "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", + "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", "dev": true, "requires": { "ajv": "8.9.0", @@ -17070,12 +17178,12 @@ } }, "@angular-devkit/schematics": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.1.tgz", - "integrity": "sha512-DxXMjlq/sALcHuONZRMTBX5k30XPfN4b6Ue4k7Xl8JKZqyHhEzfXaZzgD9u2cwb7wybKEeF/BZ5eJd8JG525og==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", + "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.1", + "@angular-devkit/core": "13.3.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -17100,15 +17208,15 @@ } }, "@angular/cli": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.1.tgz", - "integrity": "sha512-0uwU8v3V/2s95X4cZT582J6upReT/ZNw/VAf4p4q51JN+BBvdCEb251xTF+TcOojyToFyJYvg8T28XSrsNsmTQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", + "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1303.1", - "@angular-devkit/core": "13.3.1", - "@angular-devkit/schematics": "13.3.1", - "@schematics/angular": "13.3.1", + "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", + "@schematics/angular": "13.3.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -17127,25 +17235,25 @@ } }, "@angular/common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.1.tgz", - "integrity": "sha512-Var5ChoX8kZl9cbIWbW7Reb3Xz3t1c1XHwq1k+oK2fgrPdEfypY9n/6DxyXOtSEGb9aV7ZCaxcv2c5JUKR3OPg==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.4.tgz", + "integrity": "sha512-vPZuUGWMXz6r30obBqH+iIG4Feq4YEK/4wUks7PEYGke8MXFPYsNKuHMhKCgYEhabD/4Mo4GEp3i18/3Kk72Mw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.1.tgz", - "integrity": "sha512-ppJURRRDPZB6UaZctH6yBsznZXB7wZdCpfy5yo4lFE4k8rygfV80TmnrbJBZXNNq057VK48Bap1tsehFwckjog==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.4.tgz", + "integrity": "sha512-Yf1Dv2BVytjmv5Nnv05hUciUOH/UpKgXG1Ql5XwQG/qGV4eEs33PJBtGsUJTPuddxfRm72JMsbZcoRjVADqbcw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.1.tgz", - "integrity": "sha512-dImxLUITNwODlXaLcEACw10bxTiajWEQz3sLwhT/936UH+MNtM/RyLJ0M7xDvILDqq77W3psK5/M6F3M1mUpew==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.4.tgz", + "integrity": "sha512-wCnt2YOS5EiwWCEv8oCqIfiwUtifs+COhcYH6fpmf/3X9w1yKO1ZMA+OsFQ0IVS4d0YYavm5DTPQ2ep2c0sF5w==", "requires": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -17168,24 +17276,24 @@ } }, "@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", + "@babel/generator": "^7.17.9", "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "dependencies": { @@ -17197,9 +17305,9 @@ } }, "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "requires": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -17222,25 +17330,25 @@ } }, "@angular/core": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.1.tgz", - "integrity": "sha512-ZU/B9jEiZ0jadRkRL9Sb2btzqgQ0ylx380PfRQaojVIsij/EO6+jOSHIo5upMIGu/OvkggfweShJGlylCOrOXA==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.4.tgz", + "integrity": "sha512-PqPwx9oaV0Bh0m0fdI2jtXUC6s04jfD4vyzB4sjEuRI9pRUnZ6M5hZ5Vn/KJVZyt411MevbJfqzUVf0W+GDZew==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.1.tgz", - "integrity": "sha512-S6a/CEq1ht0vw2epuESiO551dsyLQTb/HuwceIBlsX2JqRRccynYlyx92gsDAo4hD2F0q+EeqZEPuq3oQIK43A==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.4.tgz", + "integrity": "sha512-QHyUXOKYITysaJJ4VnmBacE69oz0rw4G7Y2lhPb2V3a1XsWeO61SZEeGMfAWo7sLoDvi2MCEWNEhl1du4dK14A==", "requires": { "tslib": "^2.3.0" } }, "@angular/localize": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.1.tgz", - "integrity": "sha512-1s51ufL28EZuDQJ6+dHvLA9yyR8O9dpqS1PFrtNo9OcD62/JiDI8CHQlAdk2kmU5eTmulDf39sSLbOsDUGPGuQ==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.4.tgz", + "integrity": "sha512-T55072wuH4jFweHA0cYhKaomitjxEpyVMro3QA9+SaBMy10yAP2Z1h1vA16A/vXxqVy8oSrmuda4UwMOwZv3Aw==", "requires": { "@babel/core": "7.17.2", "glob": "7.2.0", @@ -17278,9 +17386,9 @@ } }, "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "requires": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -17300,25 +17408,25 @@ } }, "@angular/platform-browser": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.1.tgz", - "integrity": "sha512-WtyrkK0pLYj6w7pz3xk8zlhWL1NwGCWT+k7YxEjBOONCIXlZvCqWVzWo4nNQn9Xqxd+z1FVI0dssDwZm2TD+Eg==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.4.tgz", + "integrity": "sha512-IjBOkjrIVIbbZCDQJRdel0FSDcExSLDgMxcCSQ6pKa6oR/t59BJpSpOhB1W9nRwLtvMmGYkS/oyLFsKk65UoYA==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.1.tgz", - "integrity": "sha512-TKV63SSyjrv5EsD03PloCbo8ZrJq5owkJ38E2FO/VvJAV3xu3Ey0SnoikNZMd8o3rh7+ocuT5K9Xcr4YuKVgEA==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.4.tgz", + "integrity": "sha512-UApjgrL6B3QTdSYoCOPzMvFDmSewAHrLpreLYEmADutMWkD0ZcTPux4MJp8awT4P3l6wKzBeGJIKLlk8zsXmGQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.1.tgz", - "integrity": "sha512-YpZLjI4UI9KK6x8yn41XMrBWZgVb5JyJR7KNhQXB7WiX8bVH5SZzFRkjR3qUxTGaxe6I7KFvzySwm4JTYNj+xw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.4.tgz", + "integrity": "sha512-UuMAjWHoFKF8b9gFOiqL7fpVXjIr89BtxVES3yXReVq/IZJz9gWup6lYK3KMja+F8HZB8LBUMYgtqjS9iyLV/Q==", "requires": { "tslib": "^2.3.0" } @@ -17431,15 +17539,15 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -17497,21 +17605,12 @@ } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "requires": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -17641,19 +17740,19 @@ } }, "@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -17661,9 +17760,9 @@ } }, "@babel/parser": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", - "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==" + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.7", @@ -18147,9 +18246,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", - "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.17.7", @@ -18228,12 +18327,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "requires": { - "regenerator-transform": "^0.14.2" + "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { @@ -18455,26 +18554,26 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "requires": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -18503,6 +18602,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, "@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -18528,9 +18633,9 @@ } }, "@ctrl/tinycolor": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz", - "integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==" }, "@cypress/request": { "version": "2.88.10", @@ -19214,9 +19319,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.11", @@ -19224,18 +19329,18 @@ "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@ng-bootstrap/ng-bootstrap": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.1.tgz", - "integrity": "sha512-q0N1Pi032kfqHdoHEu9RqSdmN0ycSKmlg0b4YaqgOxNcOfuI9bH3oSejCttcYhe0q5SPB0IgVDJ6M0MrcKVi6Q==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.2.tgz", + "integrity": "sha512-Dvd95VtJe5a/rxgQlI0QFX1OJ3I1MM484+VJMA1P2ETq/hgT44ypFI/pIiO+KcHV76IX5SjGKSRNiWNi+shnaA==", "requires": { "tslib": "^2.3.0" } @@ -19257,9 +19362,9 @@ } }, "@ngtools/webpack": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.1.tgz", - "integrity": "sha512-40iEqAA/l882MPbGuG5EYxzsPWJ37fT4fF22SkPLX2eBgNhJ4K8XMt0gqcFhkHUsSe63frg1qjQ1Pd31msu0bQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", + "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", "dev": true, "requires": {} }, @@ -19363,18 +19468,18 @@ } }, "@popperjs/core": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", - "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==" + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" }, "@schematics/angular": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.1.tgz", - "integrity": "sha512-+lrK/d1eJsAK6d6E9TDeg3Vc71bDy1KsE8M+lEINdX9Wax22mAz4pw20X9RSCw5RHgn+XcNUuMsgRJAwVhDNpg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", + "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.1", - "@angular-devkit/schematics": "13.3.1", + "@angular-devkit/core": "13.3.3", + "@angular-devkit/schematics": "13.3.3", "jsonc-parser": "3.0.0" } }, @@ -19480,9 +19585,9 @@ } }, "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.0.tgz", + "integrity": "sha512-r8aveDbd+rzGP+ykSdF3oPuTVRWRfbBiHl0rVDM2yNEmSMXfkObQLV46b4RnCv3Lra51OlfnZhkkFaDl2MIRaA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -19640,9 +19745,9 @@ "dev": true }, "@types/node": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "version": "17.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", + "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==", "devOptional": true }, "@types/parse-json": { @@ -19652,9 +19757,9 @@ "dev": true }, "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", "dev": true }, "@types/qs": { @@ -19746,9 +19851,9 @@ "dev": true }, "@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "optional": true, "requires": { "@types/node": "*" @@ -19919,9 +20024,9 @@ "dev": true }, "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "abbrev": { @@ -20228,13 +20333,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", - "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", + "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", "dev": true, "requires": { "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001317", + "caniuse-lite": "^1.0.30001332", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -20637,14 +20742,14 @@ "dev": true }, "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" } }, @@ -20767,9 +20872,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001323", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001323.tgz", - "integrity": "sha512-e4BF2RlCVELKx8+RmklSEIVub1TWrmdhvA5kEUueummz1XyySW0DVk+3x9HyhU9MuWTa2BhqLgEuEmUwASAdCA==" + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==" }, "caseless": { "version": "0.12.0", @@ -20873,12 +20978,12 @@ "devOptional": true }, "cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "optional": true, "requires": { - "colors": "1.4.0", + "@colors/colors": "1.5.0", "string-width": "^4.2.0" } }, @@ -21027,12 +21132,6 @@ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "devOptional": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "optional": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -21322,12 +21421,12 @@ "dev": true }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", + "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", "dev": true, "requires": { - "browserslist": "^4.19.1", + "browserslist": "^4.20.2", "semver": "7.0.0" }, "dependencies": { @@ -21574,9 +21673,9 @@ } }, "cypress": { - "version": "9.5.3", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.3.tgz", - "integrity": "sha512-ItelIVmqMTnKYbo1JrErhsGgQGjWOxCpHT1TfMvwnIXKXN/OSlPjEK7rbCLYDZhejQL99PmUqul7XORI24Ik0A==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.4.tgz", + "integrity": "sha512-6AyJAD8phe7IMvOL4oBsI9puRNOWxZjl8z1lgixJMcgJ85JJmyKeP6uqNA0dI1z14lmJ7Qklf2MOgP/xdAqJ/Q==", "optional": true, "requires": { "@cypress/request": "^2.88.10", @@ -21624,9 +21723,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "version": "14.18.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.15.tgz", + "integrity": "sha512-hzzmpfqOhsFmvQ9nu87qNQJ8ksofJLBIKkgaYWFapV+W8UGHCxtg5uf69ZtlDSS8rb4ax3lMgpqBnLUQETjCJA==", "optional": true }, "ansi-styles": { @@ -21730,9 +21829,9 @@ "dev": true }, "dayjs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", - "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", + "integrity": "sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==", "optional": true }, "debug": { @@ -21843,12 +21942,13 @@ "dev": true }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "del": { @@ -21983,9 +22083,9 @@ } }, "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -21994,9 +22094,9 @@ } }, "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "domexception": { @@ -22053,9 +22153,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.103", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz", - "integrity": "sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg==" + "version": "1.4.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", + "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==" }, "emittery": { "version": "0.8.1", @@ -22112,9 +22212,9 @@ } }, "enhanced-resolve": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", - "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -22849,6 +22949,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -22975,9 +23081,9 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "devOptional": true }, "handle-thing": { @@ -23000,6 +23106,15 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -23160,9 +23275,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz", - "integrity": "sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -23443,9 +23558,9 @@ } }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -23624,9 +23739,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -25536,9 +25651,9 @@ } }, "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, "loader-utils": { @@ -25885,9 +26000,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "requires": { "brace-expansion": "^1.1.7" } @@ -26009,9 +26124,9 @@ "dev": true }, "nanoid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.2.tgz", - "integrity": "sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { @@ -26076,9 +26191,9 @@ } }, "ngx-cookie-service": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.1.2.tgz", - "integrity": "sha512-CInzm1xjI51QA1gCJEnqfDFLnN7w/SzqM5+kGdpI+UiCeHKgYEXpKG1s7lFz4jbLDrL/jHKtrf92t7RGsm66Cg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.2.0.tgz", + "integrity": "sha512-WxuLrZROWf59DfPPstPsrS18nxtPvT+uJ4AEjFs57NqtTfYdRQXhVJ02fZ4WP4VPElI8o6qndNL7gi9tkEdg4Q==", "requires": { "tslib": "^2.0.0" } @@ -26147,9 +26262,9 @@ "dev": true }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" }, "nopt": { "version": "5.0.0", @@ -26254,23 +26369,42 @@ "semver": "^7.3.5" } }, + "@npmcli/move-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "cacache": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.3.tgz", - "integrity": "sha512-eC7wYodNCVb97kuHGk5P+xZsvUJHkhSEOyNwkenqQPAsOtrTjvWOE5vSPNBpz9d8X3acIf6w2Ub5s4rvOCTs4g==", + "version": "16.0.6", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.6.tgz", + "integrity": "sha512-9a/MLxGaw3LEGes0HaPez2RgZWDV6X0jrgChsuxfEh8xoDoYGxaGrkMe7Dlyjrb655tA/b8fX0qlUg6Ii5MBvw==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^1.1.2", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^7.2.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -26281,11 +26415,25 @@ "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", + "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^1.1.1" } }, + "glob": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -26298,15 +26446,15 @@ } }, "lru-cache": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", - "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", + "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", "dev": true }, "make-fetch-happen": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.1.tgz", - "integrity": "sha512-3/mCljDQNjmrP7kl0vhS5WVlV+TvSKoZaFhdiYV7MOijEnrhrjaVnqbp/EY/7S+fhUB2KpH7j8c1iRsIOs+kjw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.2.tgz", + "integrity": "sha512-GWMGiZsKVeJACQGJ1P3Z+iNec7pLsU6YW1q11eaPn3RR8nRXHppFWfP7Eu0//55JK3hSjrAQRl8sDa5uXpq1Ew==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -26324,7 +26472,7 @@ "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^6.1.1", - "ssri": "^8.0.1" + "ssri": "^9.0.0" }, "dependencies": { "minipass-fetch": { @@ -26340,6 +26488,24 @@ } } } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ssri": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.0.tgz", + "integrity": "sha512-Y1Z6J8UYnexKFN1R/hxUaYoY2LVdKEzziPmVAFKiKX8fiwvCJTVzn/xYE9TEWod5OVyNfIHHuVfIEuBClL/uJQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } } } }, @@ -26353,14 +26519,14 @@ } }, "npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, @@ -26811,9 +26977,9 @@ }, "dependencies": { "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -26894,9 +27060,9 @@ "requires": {} }, "postcss-custom-properties": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.5.tgz", - "integrity": "sha512-FHbbB/hRo/7cxLGkc2NS7cDRIDN1oFqQnUKBiyh4b/gwk8DD8udvmRDpUhEK836kB8ggUCieHVOvZDnF9XhI3g==", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -26999,9 +27165,9 @@ "requires": {} }, "postcss-lab-function": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.1.2.tgz", - "integrity": "sha512-isudf5ldhg4fk16M8viAwAbg6Gv14lVO35N3Z/49NhbwPQ2xbiEoHgrRgpgQojosF4vF7jY653ktB6dDrUOR8Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -27070,12 +27236,12 @@ } }, "postcss-nesting": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.3.tgz", - "integrity": "sha512-wUC+/YCik4wH3StsbC5fBG1s2Z3ZV74vjGqBFYtmYKlVxoio5TYGM06AiaKkQPPlkXWn72HKfS7Cw5PYxnoXSw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.4.tgz", + "integrity": "sha512-2ixdQ59ik/Gt1+oPHiI1kHdwEI8lLKEmui9B1nl6163ANLC+GewQn7fXMxJF2JSb4i2MKL96GU8fIiQztK4TTA==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" } }, "postcss-overflow-shorthand": { @@ -27143,12 +27309,12 @@ } }, "postcss-pseudo-class-any-link": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.1.tgz", - "integrity": "sha512-JRoLFvPEX/1YTPxRxp1JO4WxBVXJYrSY7NHeak5LImwJ+VobFMwYDQHvfTXEpcn+7fYIeGkC29zYFhFWIZD8fg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.2.tgz", + "integrity": "sha512-76XzEQv3g+Vgnz3tmqh3pqQyRojkcJ+pjaePsyhcyf164p9aZsu3t+NWxkZYbcHLK1ju5Qmalti2jPI5IWCe5w==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "postcss-selector-parser": "^6.0.10" } }, "postcss-replace-overflow-wrap": { @@ -27417,9 +27583,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -27432,13 +27598,14 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, "regexpu-core": { @@ -27995,14 +28162,14 @@ } }, "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", + "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", "dev": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "source-map": { @@ -28546,9 +28713,9 @@ } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tslint": { "version": "6.1.3", @@ -28768,9 +28935,9 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "v8-to-istanbul": { @@ -28879,9 +29046,9 @@ } }, "web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, "webidl-conversions": { "version": "6.1.0", @@ -29243,9 +29410,9 @@ "dev": true }, "yargs": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.0.tgz", - "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/src-ui/package.json b/src-ui/package.json index f2c02866e..7c227ea41 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -13,14 +13,14 @@ }, "private": true, "dependencies": { - "@angular/common": "~13.3.1", - "@angular/compiler": "~13.3.1", - "@angular/core": "~13.3.1", - "@angular/forms": "~13.3.1", - "@angular/localize": "~13.3.1", - "@angular/platform-browser": "~13.3.1", - "@angular/platform-browser-dynamic": "~13.3.1", - "@angular/router": "~13.3.1", + "@angular/common": "~13.3.4", + "@angular/compiler": "~13.3.4", + "@angular/core": "~13.3.4", + "@angular/forms": "~13.3.4", + "@angular/localize": "~13.3.4", + "@angular/platform-browser": "~13.3.4", + "@angular/platform-browser-dynamic": "~13.3.4", + "@angular/router": "~13.3.4", "@ng-bootstrap/ng-bootstrap": "^12.0.1", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", @@ -38,9 +38,9 @@ }, "devDependencies": { "@angular-builders/jest": "13.0.3", - "@angular-devkit/build-angular": "~13.3.1", - "@angular/cli": "~13.3.1", - "@angular/compiler-cli": "~13.3.1", + "@angular-devkit/build-angular": "~13.3.3", + "@angular/cli": "~13.3.3", + "@angular/compiler-cli": "~13.3.4", "@types/jest": "27.4.1", "@types/node": "^17.0.23", "codelyzer": "^6.0.2", From 268715711fea8a37dfb0aef46c4a1092cd5ff1ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:14:24 +0000 Subject: [PATCH 27/86] Bump cypress from 9.5.3 to 9.6.0 in /src-ui Bumps [cypress](https://github.com/cypress-io/cypress) from 9.5.3 to 9.6.0. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js) - [Commits](https://github.com/cypress-io/cypress/compare/v9.5.3...v9.6.0) --- updated-dependencies: - dependency-name: cypress dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 15 ++++++++------- src-ui/package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 21ce16680..768d4473c 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -21,6 +21,7 @@ "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", "bootstrap": "^5.1.3", + "cypress": "~9.6.0", "file-saver": "^2.0.5", "ng2-pdf-viewer": "^9.0.0", "ngx-color": "^7.3.3", @@ -48,7 +49,7 @@ }, "optionalDependencies": { "@cypress/schematic": "^1.6.0", - "cypress": "~9.5.3" + "cypress": "~9.6.0" } }, "node_modules/@ampproject/remapping": { @@ -6314,9 +6315,9 @@ "dev": true }, "node_modules/cypress": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.4.tgz", - "integrity": "sha512-6AyJAD8phe7IMvOL4oBsI9puRNOWxZjl8z1lgixJMcgJ85JJmyKeP6uqNA0dI1z14lmJ7Qklf2MOgP/xdAqJ/Q==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.6.0.tgz", + "integrity": "sha512-nNwt9eBQmSENamwa8LxvggXksfyzpyYaQ7lNBLgks3XZ6dPE/6BCQFBzeAyAPt/bNXfH3tKPkAyhiAZPYkWoEg==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -21673,9 +21674,9 @@ } }, "cypress": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.5.4.tgz", - "integrity": "sha512-6AyJAD8phe7IMvOL4oBsI9puRNOWxZjl8z1lgixJMcgJ85JJmyKeP6uqNA0dI1z14lmJ7Qklf2MOgP/xdAqJ/Q==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.6.0.tgz", + "integrity": "sha512-nNwt9eBQmSENamwa8LxvggXksfyzpyYaQ7lNBLgks3XZ6dPE/6BCQFBzeAyAPt/bNXfH3tKPkAyhiAZPYkWoEg==", "optional": true, "requires": { "@cypress/request": "^2.88.10", diff --git a/src-ui/package.json b/src-ui/package.json index 7c227ea41..9b608ddcc 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -52,7 +52,7 @@ "wait-on": "~6.0.1" }, "optionalDependencies": { - "cypress": "~9.5.3", + "cypress": "~9.6.0", "@cypress/schematic": "^1.6.0" } } From eac0b295d2c25011130e0b086d88be241e189a6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:19:35 +0000 Subject: [PATCH 28/86] Bump tox from 3.24.5 to 3.25.0 Bumps [tox](https://github.com/tox-dev/tox) from 3.24.5 to 3.25.0. - [Release notes](https://github.com/tox-dev/tox/releases) - [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst) - [Commits](https://github.com/tox-dev/tox/compare/3.24.5...3.25.0) --- updated-dependencies: - dependency-name: tox dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 145 +++++++++++++++++++++++------------------------ requirements.txt | 4 +- 2 files changed, 73 insertions(+), 76 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 20f28d068..6e5d87712 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1265,11 +1265,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42", - "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2" + "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708", + "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376" ], - "markers": "python_version >= '3.6'", - "version": "==4.1.1" + "markers": "python_version >= '3.7'", + "version": "==4.2.0" }, "tzdata": { "hashes": [ @@ -1373,56 +1373,56 @@ }, "websockets": { "hashes": [ - "sha256:038afef2a05893578d10dadbdbb5f112bd115c46347e1efe99f6a356ff062138", - "sha256:05f6e9757017270e7a92a2975e2ae88a9a582ffc4629086fd6039aa80e99cd86", - "sha256:0b66421f9f13d4df60cd48ab977ed2c2b6c9147ae1a33caf5a9f46294422fda1", - "sha256:0cd02f36d37e503aca88ab23cc0a1a0e92a263d37acf6331521eb38040dcf77b", - "sha256:0f73cb2526d6da268e86977b2c4b58f2195994e53070fe567d5487c6436047e6", - "sha256:117383d0a17a0dda349f7a8790763dde75c1508ff8e4d6e8328b898b7df48397", - "sha256:1c1f3b18c8162e3b09761d0c6a0305fd642934202541cc511ef972cb9463261e", - "sha256:1c9031e90ebfc486e9cdad532b94004ade3aa39a31d3c46c105bb0b579cd2490", - "sha256:2349fa81b6b959484bb2bda556ccb9eb70ba68987646a0f8a537a1a18319fb03", - "sha256:24b879ba7db12bb525d4e58089fcbe6a3df3ce4666523183654170e86d372cbe", - "sha256:2aa9b91347ecd0412683f28aabe27f6bad502d89bd363b76e0a3508b1596402e", - "sha256:56d48eebe9e39ce0d68701bce3b21df923aa05dcc00f9fd8300de1df31a7c07c", - "sha256:5a38a0175ae82e4a8c4bac29fc01b9ee26d7d5a614e5ee11e7813c68a7d938ce", - "sha256:5b04270b5613f245ec84bb2c6a482a9d009aefad37c0575f6cda8499125d5d5c", - "sha256:6193bbc1ee63aadeb9a4d81de0e19477401d150d506aee772d8380943f118186", - "sha256:669e54228a4d9457abafed27cbf0e2b9f401445c4dfefc12bf8e4db9751703b8", - "sha256:6a009eb551c46fd79737791c0c833fc0e5b56bcd1c3057498b262d660b92e9cd", - "sha256:71a4491cfe7a9f18ee57d41163cb6a8a3fa591e0f0564ca8b0ed86b2a30cced4", - "sha256:7b38a5c9112e3dbbe45540f7b60c5204f49b3cb501b40950d6ab34cd202ab1d0", - "sha256:7bb9d8a6beca478c7e9bdde0159bd810cc1006ad6a7cb460533bae39da692ca2", - "sha256:82bc33db6d8309dc27a3bee11f7da2288ad925fcbabc2a4bb78f7e9c56249baf", - "sha256:8351c3c86b08156337b0e4ece0e3c5ec3e01fcd14e8950996832a23c99416098", - "sha256:8beac786a388bb99a66c3be4ab0fb38273c0e3bc17f612a4e0a47c4fc8b9c045", - "sha256:97950c7c844ec6f8d292440953ae18b99e3a6a09885e09d20d5e7ecd9b914cf8", - "sha256:98f57b3120f8331cd7440dbe0e776474f5e3632fdaa474af1f6b754955a47d71", - "sha256:9ca2ca05a4c29179f06cf6727b45dba5d228da62623ec9df4184413d8aae6cb9", - "sha256:a03a25d95cc7400bd4d61a63460b5d85a7761c12075ee2f51de1ffe73aa593d3", - "sha256:a10c0c1ee02164246f90053273a42d72a3b2452a7e7486fdae781138cf7fbe2d", - "sha256:a72b92f96e5e540d5dda99ee3346e199ade8df63152fa3c737260da1730c411f", - "sha256:ac081aa0307f263d63c5ff0727935c736c8dad51ddf2dc9f5d0c4759842aefaa", - "sha256:b22bdc795e62e71118b63e14a08bacfa4f262fd2877de7e5b950f5ac16b0348f", - "sha256:b4059e2ccbe6587b6dc9a01db5fc49ead9a884faa4076eea96c5ec62cb32f42a", - "sha256:b7fe45ae43ac814beb8ca09d6995b56800676f2cfa8e23f42839dc69bba34a42", - "sha256:bef03a51f9657fb03d8da6ccd233fe96e04101a852f0ffd35f5b725b28221ff3", - "sha256:bffc65442dd35c473ca9790a3fa3ba06396102a950794f536783f4b8060af8dd", - "sha256:c21a67ab9a94bd53e10bba21912556027fea944648a09e6508415ad14e37c325", - "sha256:c67d9cacb3f6537ca21e9b224d4fd08481538e43bcac08b3d93181b0816def39", - "sha256:c6e56606842bb24e16e36ae7eb308d866b4249cf0be8f63b212f287eeb76b124", - "sha256:cb316b87cbe3c0791c2ad92a5a36bf6adc87c457654335810b25048c1daa6fd5", - "sha256:cef40a1b183dcf39d23b392e9dd1d9b07ab9c46aadf294fff1350fb79146e72b", - "sha256:cf931c33db9c87c53d009856045dd524e4a378445693382a920fa1e0eb77c36c", - "sha256:d4d110a84b63c5cfdd22485acc97b8b919aefeecd6300c0c9d551e055b9a88ea", - "sha256:d5396710f86a306cf52f87fd8ea594a0e894ba0cc5a36059eaca3a477dc332aa", - "sha256:f09f46b1ff6d09b01c7816c50bd1903cf7d02ebbdb63726132717c2fcda835d5", - "sha256:f14bd10e170abc01682a9f8b28b16e6f20acf6175945ef38db6ffe31b0c72c3f", - "sha256:f5c335dc0e7dc271ef36df3f439868b3c790775f345338c2f61a562f1074187b", - "sha256:f8296b8408ec6853b26771599990721a26403e62b9de7e50ac0a056772ac0b5e", - "sha256:fa35c5d1830d0fb7b810324e9eeab9aa92e8f273f11fdbdc0741dcded6d72b9f" + "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af", + "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c", + "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76", + "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47", + "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69", + "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079", + "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c", + "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55", + "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02", + "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559", + "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3", + "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e", + "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978", + "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98", + "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae", + "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755", + "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d", + "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991", + "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1", + "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680", + "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247", + "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f", + "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2", + "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7", + "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4", + "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667", + "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb", + "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094", + "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36", + "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79", + "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500", + "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e", + "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582", + "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442", + "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd", + "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6", + "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731", + "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4", + "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d", + "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8", + "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f", + "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677", + "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8", + "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9", + "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e", + "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b", + "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916", + "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4" ], - "version": "==10.2" + "version": "==10.3" }, "whitenoise": { "hashes": [ @@ -1525,11 +1525,11 @@ }, "babel": { "hashes": [ - "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9", - "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0" + "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2", + "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.9.1" + "markers": "python_version >= '3.6'", + "version": "==2.10.1" }, "black": { "hashes": [ @@ -1592,9 +1592,6 @@ "version": "==8.1.2" }, "coverage": { - "extras": [ - - ], "hashes": [ "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d", @@ -1688,11 +1685,11 @@ }, "faker": { "hashes": [ - "sha256:188961065fb5c78ea639f42176f55100f72c90c3a3179ac6c955c4bd712b0511", - "sha256:7758ece2593ce603db117db3d27393c31f4af03f783e176f3f0e14839a4f3426" + "sha256:2a9716f2c409224121144f0d2fdc7105e978e2e266deb4d8216061d9668951fc", + "sha256:2d4139254c1cc69f2b5203f4a9aaab33a9e65f7994059856300ef6e21ac93f39" ], "markers": "python_version >= '3.6'", - "version": "==13.3.4" + "version": "==13.4.0" }, "filelock": { "hashes": [ @@ -1818,11 +1815,11 @@ }, "platformdirs": { "hashes": [ - "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d", - "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227" + "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", + "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" ], "markers": "python_version >= '3.7'", - "version": "==2.5.1" + "version": "==2.5.2" }, "pluggy": { "hashes": [ @@ -1858,11 +1855,11 @@ }, "pygments": { "hashes": [ - "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", - "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" + "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb", + "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519" ], - "markers": "python_version >= '3.5'", - "version": "==2.11.2" + "markers": "python_version >= '3.6'", + "version": "==2.12.0" }, "pyparsing": { "hashes": [ @@ -2085,16 +2082,16 @@ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.11'", "version": "==2.0.1" }, "tox": { "hashes": [ - "sha256:67e0e32c90e278251fea45b696d0fef3879089ccbe979b0c556d35d5a70e2993", - "sha256:be3362472a33094bce26727f5f771ca0facf6dafa217f65875314e9a6600c95c" + "sha256:0805727eb4d6b049de304977dfc9ce315a1938e6619c3ab9f38682bb04662a5a", + "sha256:37888f3092aa4e9f835fc8cc6dadbaaa0782651c41ef359e3a5743fcb0308160" ], "index": "pypi", - "version": "==3.24.5" + "version": "==3.25.0" }, "urllib3": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 99856abff..ea6810f76 100644 --- a/requirements.txt +++ b/requirements.txt @@ -97,7 +97,7 @@ tika==1.24 tqdm==4.64.0 twisted[tls]==22.4.0; python_full_version >= '3.6.7' txaio==22.2.1; python_version >= '3.6' -typing-extensions==4.1.1; python_version >= '3.6' +typing-extensions==4.2.0; python_version >= '3.7' tzdata==2022.1; python_version >= '3.6' tzlocal==4.2; python_version >= '3.6' urllib3==1.26.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' @@ -106,7 +106,7 @@ uvloop==0.16.0 watchdog==2.1.7 watchgod==0.8.2 wcwidth==0.2.5 -websockets==10.2 +websockets==10.3 whitenoise==6.0.0 whoosh==2.7.4 zipp==3.8.0; python_version < '3.9' From bea81d04498ee5b6c7886bcbf3674ee3c8ce2978 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:54:20 +0000 Subject: [PATCH 29/86] Bump importlib-resources from 5.6.0 to 5.7.1 Bumps [importlib-resources](https://github.com/python/importlib_resources) from 5.6.0 to 5.7.1. - [Release notes](https://github.com/python/importlib_resources/releases) - [Changelog](https://github.com/python/importlib_resources/blob/main/CHANGES.rst) - [Commits](https://github.com/python/importlib_resources/compare/v5.6.0...v5.7.1) --- updated-dependencies: - dependency-name: importlib-resources dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 11 +++++++---- requirements.txt | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 6e5d87712..395605e0f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -493,11 +493,11 @@ }, "importlib-resources": { "hashes": [ - "sha256:1b93238cbf23b4cde34240dd8321d99e9bf2eb4bc91c0c99b2886283e7baad85", - "sha256:a9dd72f6cc106aeb50f6e66b86b69b454766dd6e39b69ac68450253058706bcc" + "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3", + "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8" ], "markers": "python_version < '3.9'", - "version": "==5.6.0" + "version": "==5.7.1" }, "incremental": { "hashes": [ @@ -1592,6 +1592,9 @@ "version": "==8.1.2" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d", @@ -2082,7 +2085,7 @@ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.7'", "version": "==2.0.1" }, "tox": { diff --git a/requirements.txt b/requirements.txt index ea6810f76..60c5d3cbe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,7 +48,7 @@ hyperlink==21.0.0 idna==3.3; python_version >= '3.5' imap-tools==0.53.0 img2pdf==0.4.4 -importlib-resources==5.6.0; python_version < '3.9' +importlib-resources==5.7.1; python_version < '3.9' incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 From 3f5540f35b692da051df913dc368d19ce0715c87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 23:26:26 +0000 Subject: [PATCH 30/86] Bump ocrmypdf from 13.4.2 to 13.4.3 Bumps [ocrmypdf](https://github.com/jbarlow83/ocrmypdf) from 13.4.2 to 13.4.3. - [Release notes](https://github.com/jbarlow83/ocrmypdf/releases) - [Changelog](https://github.com/ocrmypdf/OCRmyPDF/blob/master/docs/release_notes.rst) - [Commits](https://github.com/jbarlow83/ocrmypdf/compare/v13.4.2...v13.4.3) --- updated-dependencies: - dependency-name: ocrmypdf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 6 +++--- requirements.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 395605e0f..73513f2c9 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -671,11 +671,11 @@ }, "ocrmypdf": { "hashes": [ - "sha256:7f0a6165b80ba1b37ce5943cf5b4faf93bf98c04c8f5157ef83c5f292491485f", - "sha256:d52410bc38cf5b66da27668e38c66ac41fd3136457c1ec388b311f0a78ee213c" + "sha256:0c1cc0a7596fa9da1bfde67141227eeb813aba5e954f88199eacc5f51f1d67d9", + "sha256:48bbdd5d15b76f34aa3a91910918e51f91bb3833b4e86da45f8542afda118404" ], "index": "pypi", - "version": "==13.4.2" + "version": "==13.4.3" }, "packaging": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 60c5d3cbe..c05400dd2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,7 +57,7 @@ langdetect==1.0.9 lxml==4.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.3 numpy==1.22.3; python_version >= '3.8' -ocrmypdf==13.4.2 +ocrmypdf==13.4.3 packaging==21.3; python_version >= '3.6' pathvalidate==2.5.0 pdf2image==1.16.0 From 9191aa32df1ca1a055f3f923ed73a561ff83c9d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Apr 2022 13:30:32 +0000 Subject: [PATCH 31/86] Bump imap-tools from 0.53.0 to 0.54.0 Bumps [imap-tools](https://github.com/ikvk/imap_tools) from 0.53.0 to 0.54.0. - [Release notes](https://github.com/ikvk/imap_tools/releases) - [Changelog](https://github.com/ikvk/imap_tools/blob/master/docs/release_notes.rst) - [Commits](https://github.com/ikvk/imap_tools/compare/v0.53.0...v0.54.0) --- updated-dependencies: - dependency-name: imap-tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 8 ++++---- requirements.txt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 73513f2c9..f609e9593 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -479,11 +479,11 @@ }, "imap-tools": { "hashes": [ - "sha256:119f1a60ea4048a4c5d72d9e9fa47c295685e340c730cb0b71fdf0ad3b7e53f8", - "sha256:3648bac835657b1c56ba856452c8a28bdbe3689d3730f95a4ad20d4c39f1c2d0" + "sha256:15d20ac8695fc4978a913c2186f482a802f5229c41c6e0c66c7bad8f1f590cf1", + "sha256:606b73a1b5ecc4c72eea5ad19231e07a88bf9ba9adbdd4acb8cf71a359dd43ec" ], "index": "pypi", - "version": "==0.53.0" + "version": "==0.54.0" }, "img2pdf": { "hashes": [ @@ -1593,7 +1593,7 @@ }, "coverage": { "extras": [ - "toml" + ], "hashes": [ "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", diff --git a/requirements.txt b/requirements.txt index c05400dd2..2145633d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,7 +46,7 @@ httptools==0.4.0 humanfriendly==10.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 idna==3.3; python_version >= '3.5' -imap-tools==0.53.0 +imap-tools==0.54.0 img2pdf==0.4.4 importlib-resources==5.7.1; python_version < '3.9' incremental==21.3.0 From 816f020cc3e412120fb8c6b4f1d22a3381e2dbcb Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 26 Apr 2022 08:11:25 -0700 Subject: [PATCH 32/86] Fixes tests with imap-tools 0.54.0 changes to the EmailAddress class --- src/paperless_mail/tests/test_mail.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 85f20c2d0..6bf89648e 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -228,7 +228,6 @@ class TestMail(DirectoriesMixin, TestCase): message.from_values = EmailAddress( "Someone!", "someone@somewhere.com", - "Someone! ", ) message2 = namedtuple("MailMessage", []) @@ -236,7 +235,6 @@ class TestMail(DirectoriesMixin, TestCase): message2.from_values = EmailAddress( "", "fake@localhost.com", - "", ) me_localhost = Correspondent.objects.create(name=message2.from_) From 2407798d2e5ec7c6a6c228ac218c97ee79032b54 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sat, 23 Apr 2022 14:40:56 -0700 Subject: [PATCH 33/86] Adds simple Python to wait for Redis broker to be ready (with minor Dockerfile improvements) --- Dockerfile | 2 ++ docker/docker-prepare.sh | 10 ++++++++++ docker/wait-for-redis.py | 42 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100755 docker/wait-for-redis.py diff --git a/Dockerfile b/Dockerfile index 77417383f..2267eab0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -138,6 +138,8 @@ RUN set -eux \ && chmod 755 /sbin/docker-entrypoint.sh \ && cp docker-prepare.sh /sbin/docker-prepare.sh \ && chmod 755 /sbin/docker-prepare.sh \ + && cp wait-for-redis.py /sbin/wait-for-redis.py \ + && chmod 755 /sbin/wait-for-redis.py \ && chmod +x install_management_commands.sh \ && ./install_management_commands.sh diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index 48f0c6b82..540b1d7ed 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -27,6 +27,14 @@ wait_for_postgres() { done } +wait_for_redis() { + # We use a Python script to send the Redis ping + # instead of installing redis-tools just for 1 thing + if ! python3 /sbin/wait-for-redis.py; then + exit 1 + fi +} + migrations() { ( # flock is in place to prevent multiple containers from doing migrations @@ -60,6 +68,8 @@ do_work() { wait_for_postgres fi + wait_for_redis + migrations search_index diff --git a/docker/wait-for-redis.py b/docker/wait-for-redis.py new file mode 100755 index 000000000..292450352 --- /dev/null +++ b/docker/wait-for-redis.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +""" +Simple script which attempts to ping the Redis broker as set in the environment for +a certain number of times, waiting a little bit in between + +""" +import os +import sys +import time +from typing import Final + +from redis import Redis + +if __name__ == "__main__": + + MAX_RETRY_COUNT: Final[int] = 5 + RETRY_SLEEP_SECONDS: Final[int] = 5 + + REDIS_URL: Final[str] = os.getenv("PAPERLESS_REDIS", "redis://localhost:6379") + + print(f"Waiting for Redis: {REDIS_URL}", flush=True) + + attempt = 0 + with Redis.from_url(url=REDIS_URL) as client: + while attempt < MAX_RETRY_COUNT: + try: + client.ping() + break + except Exception: + print( + f"Redis ping #{attempt} failed, waiting {RETRY_SLEEP_SECONDS}s", + flush=True, + ) + time.sleep(RETRY_SLEEP_SECONDS) + attempt += 1 + + if attempt >= MAX_RETRY_COUNT: + print(f"Failed to connect to: {REDIS_URL}") + sys.exit(os.EX_UNAVAILABLE) + else: + print(f"Connected to Redis broker: {REDIS_URL}") + sys.exit(os.EX_OK) From 3d6fb2383afa814b4cabd63cf981b978d4dbfdb5 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 20 Apr 2022 13:18:05 -0700 Subject: [PATCH 34/86] Updates install script to split + seperated OCR languages to spaces for installation script --- install-paperless-ngx.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/install-paperless-ngx.sh b/install-paperless-ngx.sh index 6ffcefbb6..fec14ea83 100755 --- a/install-paperless-ngx.sh +++ b/install-paperless-ngx.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ask() { while true ; do @@ -319,7 +319,10 @@ wget "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/ SECRET_KEY=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 64 | head -n 1) -DEFAULT_LANGUAGES="deu eng fra ita spa" +DEFAULT_LANGUAGES=("deu eng fra ita spa") + +_split_langs="${OCR_LANGUAGE//+/ }" +read -r -a OCR_LANGUAGES_ARRAY <<< "${_split_langs}" { if [[ ! $URL == "" ]] ; then @@ -334,8 +337,8 @@ DEFAULT_LANGUAGES="deu eng fra ita spa" echo "PAPERLESS_TIME_ZONE=$TIME_ZONE" echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE" echo "PAPERLESS_SECRET_KEY=$SECRET_KEY" - if [[ ! " ${DEFAULT_LANGUAGES[*]} " =~ ${OCR_LANGUAGE} ]] ; then - echo "PAPERLESS_OCR_LANGUAGES=$OCR_LANGUAGE" + if [[ ! ${DEFAULT_LANGUAGES[*]} =~ ${OCR_LANGUAGES_ARRAY[*]} ]] ; then + echo "PAPERLESS_OCR_LANGUAGES=${OCR_LANGUAGES_ARRAY[*]}" fi } > docker-compose.env From af58fb5fa354cffb7fa21da3d3267244af32e556 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 20 Apr 2022 19:18:10 -0700 Subject: [PATCH 35/86] Empty, dummy commit because GHA? From 1e9378b429ba1d2d05b5d9086b278b3a0a8745c1 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 13 Apr 2022 13:35:42 -0700 Subject: [PATCH 36/86] Implements a fallback to AUTH=PLAIN in the event of a UnicodeEncodeError during a normal login --- src/paperless_mail/mail.py | 25 ++++++++- src/paperless_mail/tests/test_mail.py | 77 ++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 4 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 4dd1f3a1f..4f41126cf 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -3,6 +3,7 @@ import tempfile from datetime import date from datetime import timedelta from fnmatch import fnmatch +from imaplib import IMAP4 import magic import pathvalidate @@ -145,7 +146,7 @@ class MailAccountHandler(LoggingMixin): else: raise NotImplementedError( - "Unknwown correspondent selector", + "Unknown correspondent selector", ) # pragma: nocover def handle_mail_account(self, account): @@ -164,6 +165,26 @@ class MailAccountHandler(LoggingMixin): try: M.login(account.username, account.password) + + except UnicodeEncodeError: + try: + # rfc2595 section 6 - PLAIN SASL mechanism + client: IMAP4 = M.client + encoded = ( + b"\0" + + account.username.encode("utf8") + + b"\0" + + account.password.encode("utf8") + ) + # Assumption is the server supports AUTH=PLAIN capability + # Could check the list with client.capability(), but then what? + # We're failing anyway then + client.authenticate("PLAIN", lambda x: encoded) + + # Need to transition out of AUTH state to SELECTED + M.folder.set("INBOX") + except Exception: + raise MailError(f"Error while authenticating account {account}") except Exception: raise MailError(f"Error while authenticating account {account}") @@ -184,7 +205,7 @@ class MailAccountHandler(LoggingMixin): return total_processed_files - def handle_mail_rule(self, M, rule): + def handle_mail_rule(self, M: MailBox, rule): self.log("debug", f"Rule {rule}: Selecting folder {rule.folder}") diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 85f20c2d0..352c3f369 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -17,6 +17,7 @@ from documents.tests.utils import DirectoriesMixin from imap_tools import EmailAddress from imap_tools import FolderInfo from imap_tools import MailboxFolderSelectError +from imap_tools import MailboxLoginError from imap_tools import MailMessage from imap_tools import MailMessageFlags from paperless_mail import tasks @@ -44,6 +45,14 @@ class BogusFolderManager: self.current_folder = new_folder +class BogusClient(object): + def authenticate(self, mechanism, authobject): + # authobject must be a callable object + auth_bytes = authobject(None) + if auth_bytes != b"\x00admin\x00w57\xc3\xa4\xc3\xb6\xc3\xbcw4b6huwb6nhu": + raise MailboxLoginError("BAD", "OK") + + class BogusMailBox(ContextManager): def __enter__(self): return self @@ -55,10 +64,14 @@ class BogusMailBox(ContextManager): self.messages: List[MailMessage] = [] self.messages_spam: List[MailMessage] = [] self.folder = BogusFolderManager() + self.client = BogusClient() def login(self, username, password): - if not (username == "admin" and password == "secret"): - raise Exception() + # This will raise a UnicodeEncodeError if the password is not ASCII only + password.encode("ascii") + # Otherwise, check for correct values + if username != "admin" or password not in {"secret"}: + raise MailboxLoginError("BAD", "OK") def fetch(self, criteria, mark_seen, charset=""): msg = self.messages @@ -821,6 +834,66 @@ class TestMail(DirectoriesMixin, TestCase): self.assertEqual(len(self.bogus_mailbox.messages), 2) self.assertEqual(self.async_task.call_count, 5) + def test_auth_plain_fallback(self): + """ + GIVEN: + - Mail account with password containing non-ASCII characters + THEN: + - Should still authenticate to the mail account + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + # Note the non-ascii characters here + password="w57äöüw4b6huwb6nhu", + ) + + _ = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.AttachmentAction.MARK_READ, + ) + + self.assertEqual(len(self.bogus_mailbox.messages), 3) + self.assertEqual(self.async_task.call_count, 0) + self.assertEqual(len(self.bogus_mailbox.fetch("UNSEEN", False)), 2) + + self.mail_account_handler.handle_mail_account(account) + + self.assertEqual(self.async_task.call_count, 2) + self.assertEqual(len(self.bogus_mailbox.fetch("UNSEEN", False)), 0) + self.assertEqual(len(self.bogus_mailbox.messages), 3) + + def test_auth_plain_fallback_fails_still(self): + """ + GIVEN: + - Mail account with password containing non-ASCII characters + - Incorrect password alue + THEN: + - Should raise a MailError for the account + """ + account = MailAccount.objects.create( + name="test", + imap_server="", + username="admin", + # Note the non-ascii characters here + # Passes the check in login, not in authenticate + password="réception", + ) + + _ = MailRule.objects.create( + name="testrule", + account=account, + action=MailRule.AttachmentAction.MARK_READ, + ) + + self.assertRaises( + MailError, + self.mail_account_handler.handle_mail_account, + account, + ) + class TestManagementCommand(TestCase): @mock.patch( From 330e47f0b794e0b9a949de2a86a04d7477f2a5b2 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 13 Apr 2022 13:57:39 -0700 Subject: [PATCH 37/86] Adds some logging so we know which login method has failed --- src/paperless_mail/mail.py | 6 ++++++ src/paperless_mail/tests/test_mail.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 4f41126cf..2b3267aeb 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -167,6 +167,7 @@ class MailAccountHandler(LoggingMixin): M.login(account.username, account.password) except UnicodeEncodeError: + self.log("debug", "Falling back to AUTH=PLAIN") try: # rfc2595 section 6 - PLAIN SASL mechanism client: IMAP4 = M.client @@ -184,8 +185,13 @@ class MailAccountHandler(LoggingMixin): # Need to transition out of AUTH state to SELECTED M.folder.set("INBOX") except Exception: + self.log( + "error", + "Unable to authenticate with mail server using AUTH=PLAIN", + ) raise MailError(f"Error while authenticating account {account}") except Exception: + self.log("error", "Unable to authenticate with mail server") raise MailError(f"Error while authenticating account {account}") self.log( diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 352c3f369..85fda2975 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -869,7 +869,7 @@ class TestMail(DirectoriesMixin, TestCase): """ GIVEN: - Mail account with password containing non-ASCII characters - - Incorrect password alue + - Incorrect password value THEN: - Should raise a MailError for the account """ From f5c05e12832eba4382b298ca640ecdd7004318c8 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 26 Apr 2022 10:03:41 -0700 Subject: [PATCH 38/86] Fixes newly added mail tests to account for model change --- src/paperless_mail/tests/test_mail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 85fda2975..23320e24b 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -852,7 +852,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MARK_READ, + action=MailRule.MailAction.MARK_READ, ) self.assertEqual(len(self.bogus_mailbox.messages), 3) @@ -885,7 +885,7 @@ class TestMail(DirectoriesMixin, TestCase): _ = MailRule.objects.create( name="testrule", account=account, - action=MailRule.AttachmentAction.MARK_READ, + action=MailRule.MailAction.MARK_READ, ) self.assertRaises( From f7f0df60ecf7cb09708306fd8b77a2551d144933 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 26 Apr 2022 14:46:37 -0700 Subject: [PATCH 39/86] Update messages.xlf --- src-ui/messages.xlf | 1510 +++++++++++++++++++++++++++---------------- 1 file changed, 969 insertions(+), 541 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 68120ee72..339d57cdd 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -2,25 +2,275 @@ + + Close + + node_modules/src/alert/alert.ts + 79,80 + + + + Slide of + + node_modules/src/carousel/carousel.ts + 154,159 + + Currently selected slide number read by screen reader + + + Previous + + node_modules/src/carousel/carousel.ts + 184 + + + + Next + + node_modules/src/carousel/carousel.ts + 205,206 + + + + Select month + + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 + + + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 + + + + Select year + + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 + + + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 + + + + Previous month + + node_modules/src/datepicker/datepicker-navigation.ts + 69 + + + node_modules/src/datepicker/datepicker-navigation.ts + 69 + + + + Next month + + node_modules/src/datepicker/datepicker-navigation.ts + 69 + + + node_modules/src/datepicker/datepicker-navigation.ts + 69 + + + + «« + + node_modules/src/pagination/pagination.ts + 250,252 + + + + « + + node_modules/src/pagination/pagination.ts + 267 + + + + » + + node_modules/src/pagination/pagination.ts + 294 + + + + »» + + node_modules/src/pagination/pagination.ts + 313,316 + + + + First + + node_modules/src/pagination/pagination.ts + 332,333 + + + + Previous + + node_modules/src/pagination/pagination.ts + 347,348 + + + + Next + + node_modules/src/pagination/pagination.ts + 363 + + + + Last + + node_modules/src/pagination/pagination.ts + 379,380 + + + + + + node_modules/src/progressbar/progressbar.ts + 67,68 + + + + HH + + node_modules/src/timepicker/timepicker.ts + 138,141 + + + + Hours + + node_modules/src/timepicker/timepicker.ts + 161 + + + + MM + + node_modules/src/timepicker/timepicker.ts + 182 + + + + Minutes + + node_modules/src/timepicker/timepicker.ts + 199 + + + + Increment hours + + node_modules/src/timepicker/timepicker.ts + 218,219 + + + + Decrement hours + + node_modules/src/timepicker/timepicker.ts + 240,243 + + + + Increment minutes + + node_modules/src/timepicker/timepicker.ts + 268 + + + + Decrement minutes + + node_modules/src/timepicker/timepicker.ts + 288,289 + + + + SS + + node_modules/src/timepicker/timepicker.ts + 295 + + + + Seconds + + node_modules/src/timepicker/timepicker.ts + 295 + + + + Increment seconds + + node_modules/src/timepicker/timepicker.ts + 295 + + + + Decrement seconds + + node_modules/src/timepicker/timepicker.ts + 295 + + + + + + node_modules/src/timepicker/timepicker.ts + 295 + + + + + + node_modules/src/timepicker/timepicker.ts + 295 + + + + Close + + node_modules/src/toast/toast.ts + 110,112 + + + + Drop files to begin upload + + src/app/app.component.html + 7 + + Document added src/app/app.component.ts - 51 + 71 Document was added to paperless. src/app/app.component.ts - 51 + 73 Open document src/app/app.component.ts - 51 + 74 src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -31,21 +281,28 @@ Could not add : src/app/app.component.ts - 59 + 89 New document detected src/app/app.component.ts - 65 + 103 Document is being processed by paperless. src/app/app.component.ts - 65 + 105 + + + + Initiating upload... + + src/app/app.component.ts + 140 @@ -111,19 +368,19 @@ src/app/components/document-list/document-list.component.ts - 51 + 77 - src/app/components/manage/correspondent-list/correspondent-list.component.html - 37 + src/app/components/manage/management-list/management-list.component.html + 40 - src/app/components/manage/document-type-list/document-type-list.component.html - 35 + src/app/components/manage/management-list/management-list.component.html + 40 - src/app/components/manage/tag-list/tag-list.component.html - 38 + src/app/components/manage/management-list/management-list.component.html + 40 @@ -134,7 +391,7 @@ src/app/components/manage/settings/settings.component.html - 134 + 150 @@ -164,10 +421,6 @@ src/app/components/app-frame/app-frame.component.html 119 - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 1 - Tags @@ -187,10 +440,6 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 18 - - src/app/components/manage/tag-list/tag-list.component.html - 1 - Document types @@ -198,10 +447,6 @@ src/app/components/app-frame/app-frame.component.html 133 - - src/app/components/manage/document-type-list/document-type-list.component.html - 1 - Logs @@ -249,61 +494,72 @@ 181 - - Cancel + + is available. + + src/app/components/app-frame/app-frame.component.html + 190 + + + + Click to view. + + src/app/components/app-frame/app-frame.component.html + 190 + + + + Checking for updates is disabled. + + src/app/components/app-frame/app-frame.component.html + 193 + + + + Click for more information. + + src/app/components/app-frame/app-frame.component.html + 193 + + + + Update available + + src/app/components/app-frame/app-frame.component.html + 201 + + + + Cancel src/app/components/common/confirm-dialog/confirm-dialog.component.html - 11 - - - src/app/components/common/select-dialog/select-dialog.component.html 12 - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 6 - - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 13 - - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 14 - - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 16 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 18 - Confirmation src/app/components/common/confirm-dialog/confirm-dialog.component.ts - 18 + 17 Confirm src/app/components/common/confirm-dialog/confirm-dialog.component.ts - 30 + 29 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 143 + 217 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 166 + 255 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 189 + 291 @@ -335,49 +591,262 @@ Last 7 days src/app/components/common/date-dropdown/date-dropdown.component.ts - 34 + 38 Last month src/app/components/common/date-dropdown/date-dropdown.component.ts - 35 + 39 Last 3 months src/app/components/common/date-dropdown/date-dropdown.component.ts - 36 + 40 Last year src/app/components/common/date-dropdown/date-dropdown.component.ts - 37 + 41 + + + + Name + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 8 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 9 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 8 + + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 8 + + + src/app/components/manage/management-list/management-list.component.html + 9 + + + src/app/components/manage/management-list/management-list.component.html + 9 + + + src/app/components/manage/management-list/management-list.component.html + 9 + + + src/app/components/manage/management-list/management-list.component.html + 19 + + + src/app/components/manage/management-list/management-list.component.html + 19 + + + src/app/components/manage/management-list/management-list.component.html + 19 + + + src/app/components/manage/settings/settings.component.html + 157 + + + + Matching algorithm + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 9 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 13 + + + + Matching pattern + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 11 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 14 + + + + Case insensitive + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 11 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 12 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 15 + + + + Cancel + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 14 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 16 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 18 + + + src/app/components/common/select-dialog/select-dialog.component.html + 12 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 6 + + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 18 + + + + Save + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html + 15 + + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html + 17 + + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 19 + + + src/app/components/document-detail/document-detail.component.html + 166 + + + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 19 + + + src/app/components/manage/settings/settings.component.html + 189 + + + + Create new correspondent + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 24 + + + + Edit correspondent + + src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts + 28 + + + + Create new document type + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts + 24 + + + + Edit document type + + src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts + 28 Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 50 + 52 Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 54 + 56 Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 58 + 60 + + + + Color + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 10 + + + src/app/components/manage/tag-list/tag-list.component.ts + 34 + + + + Inbox tag + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 12 + + + + Inbox tags are automatically assigned to all consumed documents. + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html + 12 + + + + Create new tag + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts + 25 + + + + Edit tag + + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts + 29 @@ -398,7 +867,7 @@ Not assigned src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts - 209 + 261 Filter drop down element to filter for documents with no correspondent/type/tag assigned @@ -406,7 +875,7 @@ Invalid date. src/app/components/common/input/date/date.component.html - 12 + 13 @@ -443,7 +912,7 @@ src/app/components/common/select-dialog/select-dialog.component.ts - 18 + 17 src/app/components/document-list/document-list.component.html @@ -454,21 +923,21 @@ Please select an object src/app/components/common/select-dialog/select-dialog.component.ts - 21 + 20 Hello , welcome to Paperless-ngx! src/app/components/dashboard/dashboard.component.ts - 33 + 28 Welcome to Paperless-ngx! src/app/components/dashboard/dashboard.component.ts - 35 + 30 @@ -490,7 +959,7 @@ src/app/components/document-list/document-list.component.html - 141 + 145 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -509,15 +978,15 @@ src/app/components/document-detail/document-detail.component.html - 55 + 69 src/app/components/document-list/document-list.component.html - 129 + 133 src/app/components/document-list/filter-editor/filter-editor.component.ts - 88 + 117 src/app/services/rest/document.service.ts @@ -586,63 +1055,35 @@ Processing: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 32 + 37 Failed: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 35 + 40 Added: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 38 + 43 , src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 40 + 46 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 117 + 162 this string is used to separate processing, failed and added on the file upload widget - - Connecting... - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 118 - - - - Uploading... - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 123 - - - - Upload complete, waiting... - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 126 - - - - HTTP error: - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 136 - - First steps @@ -725,27 +1166,27 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html - 76 + 81 - src/app/components/manage/correspondent-list/correspondent-list.component.html - 48 + src/app/components/manage/management-list/management-list.component.html + 51 - src/app/components/manage/document-type-list/document-type-list.component.html - 46 + src/app/components/manage/management-list/management-list.component.html + 51 - src/app/components/manage/generic-list/generic-list.component.ts - 106 + src/app/components/manage/management-list/management-list.component.html + 51 + + + src/app/components/manage/management-list/management-list.component.ts + 156 src/app/components/manage/settings/settings.component.html - 159 - - - src/app/components/manage/tag-list/tag-list.component.html - 49 + 175 @@ -756,7 +1197,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html - 63 + 68 src/app/components/document-list/document-card-large/document-card-large.component.html @@ -789,35 +1230,49 @@ Close src/app/components/document-detail/document-detail.component.html - 40 + 37 + + + + Previous + + src/app/components/document-detail/document-detail.component.html + 44 + + + + Next + + src/app/components/document-detail/document-detail.component.html + 49 Details src/app/components/document-detail/document-detail.component.html - 52 + 66 Archive serial number src/app/components/document-detail/document-detail.component.html - 56 + 70 Date created src/app/components/document-detail/document-detail.component.html - 57 + 71 Correspondent src/app/components/document-detail/document-detail.component.html - 58 + 72 src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -825,7 +1280,7 @@ src/app/components/document-list/document-list.component.html - 123 + 127 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -840,7 +1295,7 @@ Document type src/app/components/document-detail/document-detail.component.html - 60 + 74 src/app/components/document-list/bulk-editor/bulk-editor.component.html @@ -848,7 +1303,7 @@ src/app/components/document-list/document-list.component.html - 135 + 139 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -863,168 +1318,152 @@ Content src/app/components/document-detail/document-detail.component.html - 68 + 82 Metadata src/app/components/document-detail/document-detail.component.html - 77 + 91 src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts - 18 + 17 Date modified src/app/components/document-detail/document-detail.component.html - 83 + 97 Date added src/app/components/document-detail/document-detail.component.html - 87 + 101 Media filename src/app/components/document-detail/document-detail.component.html - 91 + 105 Original MD5 checksum src/app/components/document-detail/document-detail.component.html - 95 + 109 Original file size src/app/components/document-detail/document-detail.component.html - 99 + 113 Original mime type src/app/components/document-detail/document-detail.component.html - 103 + 117 Archive MD5 checksum src/app/components/document-detail/document-detail.component.html - 107 + 121 Archive file size src/app/components/document-detail/document-detail.component.html - 111 + 125 Original document metadata src/app/components/document-detail/document-detail.component.html - 117 + 131 Archived document metadata src/app/components/document-detail/document-detail.component.html - 118 + 132 + + + + Enter Password + + src/app/components/document-detail/document-detail.component.html + 154 + + + src/app/components/document-detail/document-detail.component.html + 184 Discard src/app/components/document-detail/document-detail.component.html - 143 + 164 Save & next src/app/components/document-detail/document-detail.component.html - 144 - - - - Save - - src/app/components/document-detail/document-detail.component.html - 145 - - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 14 - - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 15 - - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 17 - - - src/app/components/manage/settings/settings.component.html - 173 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 19 + 165 Confirm delete src/app/components/document-detail/document-detail.component.ts - 267 + 412 - src/app/components/manage/generic-list/generic-list.component.ts - 102 + src/app/components/manage/management-list/management-list.component.ts + 152 Do you really want to delete document ""? src/app/components/document-detail/document-detail.component.ts - 268 + 413 The files for this document will be deleted permanently. This operation cannot be undone. src/app/components/document-detail/document-detail.component.ts - 269 + 414 Delete document src/app/components/document-detail/document-detail.component.ts - 271 + 416 Error deleting document: src/app/components/document-detail/document-detail.component.ts - 281 + 432 @@ -1085,32 +1524,34 @@ Download originals src/app/components/document-list/bulk-editor/bulk-editor.component.html - 68 + 73 - Error executing bulk operation: + Error executing bulk operation: src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 74 + 97,99 "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 113 + 154 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 117 + 160 "" and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 115 + 156 This is for messages like 'modify "tag1" and "tag2"' @@ -1118,7 +1559,7 @@ and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 118 + 164,166 this is for messages like 'modify "tag1", "tag2" and "tag3"' @@ -1126,112 +1567,120 @@ Confirm tags assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 127 + 181 This operation will add the tag "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 130 + 187 - This operation will add the tags to selected document(s). + This operation will add the tags to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 132 + 192,194 This operation will remove the tag "" from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 135 + 200 - This operation will remove the tags from selected document(s). + This operation will remove the tags from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 137 + 205,207 - This operation will add the tags and remove the tags on selected document(s). + This operation will add the tags and remove the tags on selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 139 + 209,213 Confirm correspondent assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 159 + 248 This operation will assign the correspondent "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 161 + 250 This operation will remove the correspondent from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 163 + 252 Confirm document type assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 182 + 284 This operation will assign the document type "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 184 + 286 This operation will remove the document type from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 186 + 288 Delete confirm src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 201 + 309 This operation will permanently delete selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 202 + 310 This operation cannot be undone. src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 203 + 311 Delete document(s) src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 205 + 313 @@ -1267,16 +1716,16 @@ 66 - src/app/components/manage/correspondent-list/correspondent-list.component.html - 42 + src/app/components/manage/management-list/management-list.component.html + 45 - src/app/components/manage/document-type-list/document-type-list.component.html - 40 + src/app/components/manage/management-list/management-list.component.html + 45 - src/app/components/manage/tag-list/tag-list.component.html - 43 + src/app/components/manage/management-list/management-list.component.html + 45 @@ -1367,39 +1816,46 @@ Loading... src/app/components/document-list/document-list.component.html - 87 + 88 {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} src/app/components/document-list/document-list.component.html - 89 + 90 {VAR_PLURAL, plural, =1 {One document} other { documents}} src/app/components/document-list/document-list.component.html - 91 + 92 (filtered) src/app/components/document-list/document-list.component.html - 91 + 92 + + + + Error while loading documents + + src/app/components/document-list/document-list.component.html + 103 ASN src/app/components/document-list/document-list.component.html - 117 + 121 src/app/components/document-list/filter-editor/filter-editor.component.ts - 90 + 122 src/app/services/rest/document.service.ts @@ -1410,7 +1866,7 @@ Added src/app/components/document-list/document-list.component.html - 147 + 151 src/app/components/document-list/filter-editor/filter-editor.component.html @@ -1425,14 +1881,14 @@ View "" saved successfully. src/app/components/document-list/document-list.component.ts - 116 + 213 View "" created successfully. src/app/components/document-list/document-list.component.ts - 138 + 243 @@ -1443,80 +1899,80 @@ - Correspondent: + Correspondent: src/app/components/document-list/filter-editor/filter-editor.component.ts - 37 + 60,62 Without correspondent src/app/components/document-list/filter-editor/filter-editor.component.ts - 39 + 64 - Type: + Type: src/app/components/document-list/filter-editor/filter-editor.component.ts - 44 + 69,71 Without document type src/app/components/document-list/filter-editor/filter-editor.component.ts - 46 + 73 - Tag: + Tag: src/app/components/document-list/filter-editor/filter-editor.component.ts - 50 + 77,79 Without any tag src/app/components/document-list/filter-editor/filter-editor.component.ts - 54 + 83 Title: src/app/components/document-list/filter-editor/filter-editor.component.ts - 58 + 87 ASN: src/app/components/document-list/filter-editor/filter-editor.component.ts - 61 + 90 Title & content src/app/components/document-list/filter-editor/filter-editor.component.ts - 89 + 120 Advanced search src/app/components/document-list/filter-editor/filter-editor.component.ts - 91 + 125 More like src/app/components/document-list/filter-editor/filter-editor.component.ts - 94 + 131 @@ -1526,53 +1982,6 @@ 3 - - Name - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 8 - - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 8 - - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 9 - - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 19 - - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 9 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 9 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 19 - - - src/app/components/manage/settings/settings.component.html - 141 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 8 - - - src/app/components/manage/tag-list/tag-list.component.html - 9 - - - src/app/components/manage/tag-list/tag-list.component.html - 19 - - Show in sidebar @@ -1581,7 +1990,7 @@ src/app/components/manage/settings/settings.component.html - 153 + 169 @@ -1592,216 +2001,188 @@ src/app/components/manage/settings/settings.component.html - 149 + 165 - - Matching algorithm + + Filter rules error occurred while saving this view - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 9 + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html + 12 + + + The error returned was - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 10 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html + src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 13 - - Matching pattern + + correspondent - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 10 - - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 11 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 14 - - - - Case insensitive - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 11 - - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.html - 12 - - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 15 - - - - Create new correspondent - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 21 - - - - Edit correspondent - - src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 - - - - Create - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 2 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 2 - - - src/app/components/manage/tag-list/tag-list.component.html - 2 - - - - Filter by: - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 8 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 8 - - - src/app/components/manage/tag-list/tag-list.component.html - 8 - - - - Matching - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 20 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 20 - - - src/app/components/manage/tag-list/tag-list.component.html - 21 - - - - Document count - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 21 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 21 - - - src/app/components/manage/tag-list/tag-list.component.html - 22 + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 33 Last correspondence - src/app/components/manage/correspondent-list/correspondent-list.component.html - 22 - - - - Actions - - src/app/components/manage/correspondent-list/correspondent-list.component.html - 23 - - - src/app/components/manage/document-type-list/document-type-list.component.html - 22 - - - src/app/components/manage/settings/settings.component.html - 158 - - - src/app/components/manage/tag-list/tag-list.component.html - 23 + src/app/components/manage/correspondent-list/correspondent-list.component.ts + 37 Do you really want to delete the correspondent ""? src/app/components/manage/correspondent-list/correspondent-list.component.ts - 26 + 47 - - Create new document type + + document type - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts - 21 - - - - Edit document type - - src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + src/app/components/manage/document-type-list/document-type-list.component.ts + 30 Do you really want to delete the document type ""? src/app/components/manage/document-type-list/document-type-list.component.ts - 26 + 36 + + + + Create + + src/app/components/manage/management-list/management-list.component.html + 2 + + + src/app/components/manage/management-list/management-list.component.html + 2 + + + src/app/components/manage/management-list/management-list.component.html + 2 + + + + Filter by: + + src/app/components/manage/management-list/management-list.component.html + 8 + + + src/app/components/manage/management-list/management-list.component.html + 8 + + + src/app/components/manage/management-list/management-list.component.html + 8 + + + + Matching + + src/app/components/manage/management-list/management-list.component.html + 20 + + + src/app/components/manage/management-list/management-list.component.html + 20 + + + src/app/components/manage/management-list/management-list.component.html + 20 + + + + Document count + + src/app/components/manage/management-list/management-list.component.html + 21 + + + src/app/components/manage/management-list/management-list.component.html + 21 + + + src/app/components/manage/management-list/management-list.component.html + 21 + + + + Actions + + src/app/components/manage/management-list/management-list.component.html + 23 + + + src/app/components/manage/management-list/management-list.component.html + 23 + + + src/app/components/manage/management-list/management-list.component.html + 23 + + + src/app/components/manage/settings/settings.component.html + 174 + + + + {VAR_PLURAL, plural, =1 {One } other { total s}} + + src/app/components/manage/management-list/management-list.component.html + 60 + + + src/app/components/manage/management-list/management-list.component.html + 60 + + + src/app/components/manage/management-list/management-list.component.html + 60 Automatic - src/app/components/manage/generic-list/generic-list.component.ts - 39 + src/app/components/manage/management-list/management-list.component.ts + 86 src/app/data/matching-model.ts - 17 + 38 - - Do you really want to delete this element? + + Do you really want to delete the ? - src/app/components/manage/generic-list/generic-list.component.ts - 97 + src/app/components/manage/management-list/management-list.component.ts + 139 Associated documents will not be deleted. - src/app/components/manage/generic-list/generic-list.component.ts - 104 + src/app/components/manage/management-list/management-list.component.ts + 154 - Error while deleting element: + Error while deleting element: - src/app/components/manage/generic-list/generic-list.component.ts - 114 + src/app/components/manage/management-list/management-list.component.ts + 167,169 - - General settings + + General src/app/components/manage/settings/settings.component.html 10 @@ -1919,176 +2300,160 @@ 99 + + Theme Color + + src/app/components/manage/settings/settings.component.html + 105 + + + + Reset + + src/app/components/manage/settings/settings.component.html + 114 + + Bulk editing src/app/components/manage/settings/settings.component.html - 103 + 119 Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 107 + 123 Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 107 + 123 Apply on close src/app/components/manage/settings/settings.component.html - 108 + 124 Notifications src/app/components/manage/settings/settings.component.html - 116 + 132 Document processing src/app/components/manage/settings/settings.component.html - 119 + 135 Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 123 + 139 Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 124 + 140 Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 125 + 141 Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 126 + 142 This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 126 + 142 Appears on src/app/components/manage/settings/settings.component.html - 146 + 162 No saved views defined. src/app/components/manage/settings/settings.component.html - 163 + 179 Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 111 + 167 Settings saved successfully. src/app/components/manage/settings/settings.component.ts - 133 + 233 Use system language src/app/components/manage/settings/settings.component.ts - 138 + 237 Use date format of display language src/app/components/manage/settings/settings.component.ts - 144 + 244 - Error while storing settings on server: + Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 161 + 264,266 - - Color + + tag - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 10 - - - src/app/components/manage/tag-list/tag-list.component.html - 20 - - - - Inbox tag - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 12 - - - - Inbox tags are automatically assigned to all consumed documents. - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html - 12 - - - - Create new tag - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts - 22 - - - - Edit tag - - src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + src/app/components/manage/tag-list/tag-list.component.ts + 30 Do you really want to delete the tag ""? src/app/components/manage/tag-list/tag-list.component.ts - 26 + 45 @@ -2102,142 +2467,142 @@ Any word src/app/data/matching-model.ts - 12 + 13 Any: Document contains any of these words (space separated) src/app/data/matching-model.ts - 12 + 14 All words src/app/data/matching-model.ts - 13 + 18 All: Document contains all of these words (space separated) src/app/data/matching-model.ts - 13 + 19 Exact match src/app/data/matching-model.ts - 14 + 23 Exact: Document contains this string src/app/data/matching-model.ts - 14 + 24 Regular expression src/app/data/matching-model.ts - 15 + 28 Regular expression: Document matches this regular expression src/app/data/matching-model.ts - 15 + 29 Fuzzy word src/app/data/matching-model.ts - 16 + 33 Fuzzy: Document contains a word similar to this word src/app/data/matching-model.ts - 16 + 34 Auto: Learn matching automatically src/app/data/matching-model.ts - 17 + 39 Unsaved Changes src/app/guards/dirty-form.guard.ts - 16 + 18 src/app/services/open-documents.service.ts - 75 + 84 src/app/services/open-documents.service.ts - 96 + 107 You have unsaved changes. src/app/guards/dirty-form.guard.ts - 17 + 19 src/app/services/open-documents.service.ts - 76 + 85 src/app/services/open-documents.service.ts - 97 + 108 Are you sure you want to leave? src/app/guards/dirty-form.guard.ts - 18 + 20 Leave page src/app/guards/dirty-form.guard.ts - 20 + 22 (no title) src/app/pipes/document-title.pipe.ts - 12 + 11 Yes src/app/pipes/yes-no.pipe.ts - 9 + 8 No src/app/pipes/yes-no.pipe.ts - 9 + 8 @@ -2339,28 +2704,28 @@ Are you sure you want to close this document? src/app/services/open-documents.service.ts - 77 + 86 Close document src/app/services/open-documents.service.ts - 79 + 88 Are you sure you want to close all documents? src/app/services/open-documents.service.ts - 98 + 109 Close documents src/app/services/open-documents.service.ts - 100 + 111 @@ -2374,7 +2739,7 @@ Search score src/app/services/rest/document.service.ts - 28 + 30 Score is a value returned by the full text search engine and specifies how well a result matches the given query @@ -2382,133 +2747,196 @@ English (US) src/app/services/settings.service.ts - 90 + 184 + + + + Belarusian + + src/app/services/settings.service.ts + 190 Czech src/app/services/settings.service.ts - 91 + 196 Danish src/app/services/settings.service.ts - 92 + 202 German src/app/services/settings.service.ts - 93 + 208 English (GB) src/app/services/settings.service.ts - 94 + 214 Spanish src/app/services/settings.service.ts - 95 + 220 French src/app/services/settings.service.ts - 96 + 226 Italian src/app/services/settings.service.ts - 97 + 232 Luxembourgish src/app/services/settings.service.ts - 98 + 238 Dutch src/app/services/settings.service.ts - 99 + 244 Polish src/app/services/settings.service.ts - 100 + 250 Portuguese (Brazil) src/app/services/settings.service.ts - 101 + 256 Portuguese src/app/services/settings.service.ts - 102 + 262 Romanian src/app/services/settings.service.ts - 103 + 268 Russian src/app/services/settings.service.ts - 104 + 274 + + + + Slovenian + + src/app/services/settings.service.ts + 280 + + + + Serbian + + src/app/services/settings.service.ts + 286 Swedish src/app/services/settings.service.ts - 105 + 292 + + + + Turkish + + src/app/services/settings.service.ts + 298 + + + + Chinese Simplified + + src/app/services/settings.service.ts + 304 ISO 8601 src/app/services/settings.service.ts - 115 + 321 Error src/app/services/toast.service.ts - 35 + 32 Information src/app/services/toast.service.ts - 39 + 36 + + + + Connecting... + + src/app/services/upload-documents.service.ts + 31 + + + + Uploading... + + src/app/services/upload-documents.service.ts + 43 + + + + Upload complete, waiting... + + src/app/services/upload-documents.service.ts + 46 + + + + HTTP error: + + src/app/services/upload-documents.service.ts + 62 From 66c7f44bea5b03bc067f98f66159f377cb54bcdf Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Wed, 27 Apr 2022 11:28:19 -0700 Subject: [PATCH 40/86] Changes the intermediate image building steps to use registry caching, allowig us to always rebuild them, but do so very quickly when nothing has changed --- .github/scripts/common.py | 27 +++++++++++ .../scripts}/get-build-json.py | 21 +++++---- .github/workflows/ci.yml | 45 +++---------------- .github/workflows/reusable-ci-backend.yml | 2 +- .../workflows/reusable-workflow-builder.yml | 25 +++-------- 5 files changed, 52 insertions(+), 68 deletions(-) create mode 100644 .github/scripts/common.py rename {docker-builders => .github/scripts}/get-build-json.py (86%) diff --git a/.github/scripts/common.py b/.github/scripts/common.py new file mode 100644 index 000000000..3913c91cd --- /dev/null +++ b/.github/scripts/common.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + + +def get_image_tag( + repo_name: str, + pkg_name: str, + pkg_version: str, +) -> str: + """ + Returns a string representing the normal image for a given package + """ + return f"ghcr.io/{repo_name}/builder/{pkg_name}:{pkg_version}" + + +def get_cache_image_tag( + repo_name: str, + pkg_name: str, + pkg_version: str, + branch_name: str, +) -> str: + """ + Returns a string representing the expected image cache tag for a given package + + Registry type caching is utilized for the builder images, to allow fast + rebuilds, generally almost instant for the same version + """ + return f"ghcr.io/{repo_name}/builder/cache/{pkg_name}:{pkg_version}" diff --git a/docker-builders/get-build-json.py b/.github/scripts/get-build-json.py similarity index 86% rename from docker-builders/get-build-json.py rename to .github/scripts/get-build-json.py index 4b96ac8d7..42c37d695 100755 --- a/docker-builders/get-build-json.py +++ b/.github/scripts/get-build-json.py @@ -20,13 +20,8 @@ import os from pathlib import Path from typing import Final - -def _get_image_tag( - repo_name: str, - pkg_name: str, - pkg_version: str, -) -> str: - return f"ghcr.io/{repo_name}/builder/{pkg_name}:{pkg_version}" +from common import get_cache_image_tag +from common import get_image_tag def _main(): @@ -49,7 +44,9 @@ def _main(): args: Final = parser.parse_args() + # Read from environment variables set by GitHub Actions repo_name: Final[str] = os.environ["GITHUB_REPOSITORY"] + branch_name: Final[str] = os.environ["GITHUB_REF_NAME"] # Default output values version = None @@ -58,7 +55,7 @@ def _main(): if args.package == "frontend": # Version is just the branch or tag name - version = os.environ["GITHUB_REF_NAME"] + version = branch_name elif args.package in pipfile_data["default"]: # Read the version from Pipfile.lock pkg_data = pipfile_data["default"][args.package] @@ -88,7 +85,13 @@ def _main(): "name": args.package, "version": version, "git_tag": git_tag, - "image_tag": _get_image_tag(repo_name, args.package, version), + "image_tag": get_image_tag(repo_name, args.package, version), + "cache_tag": get_cache_image_tag( + repo_name, + args.package, + version, + branch_name, + ), } # Add anything special a package may need diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34bcf21a2..9973f0eec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,15 +75,11 @@ jobs: uses: actions/setup-python@v3 with: python-version: "3.9" - - - name: Make script executable - run: | - chmod +x ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py - name: Setup qpdf image id: qpdf-setup run: | - build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py qpdf) + build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py qpdf) echo ${build_json} @@ -92,7 +88,7 @@ jobs: name: Setup psycopg2 image id: psycopg2-setup run: | - build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py psycopg2) + build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py psycopg2) echo ${build_json} @@ -101,7 +97,7 @@ jobs: name: Setup pikepdf image id: pikepdf-setup run: | - build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py pikepdf) + build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py pikepdf) echo ${build_json} @@ -110,7 +106,7 @@ jobs: name: Setup jbig2enc image id: jbig2enc-setup run: | - build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py jbig2enc) + build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py jbig2enc) echo ${build_json} @@ -119,7 +115,7 @@ jobs: name: Setup frontend image id: frontend-setup run: | - build_json=$(python ${GITHUB_WORKSPACE}/docker-builders/get-build-json.py frontend) + build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py frontend) echo ${build_json} @@ -198,15 +194,6 @@ jobs: - name: Checkout uses: actions/checkout@v3 - with: - fetch-depth: 2 - - - name: Get changed frontend files - id: changed-files-specific - uses: tj-actions/changed-files@v18.1 - with: - files: | - src-ui/** - name: Login to Github Container Registry uses: docker/login-action@v1 @@ -214,33 +201,15 @@ jobs: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - - name: Determine if build needed - id: build-skip-check - # Skip building the frontend if the tag exists and no src-ui files changed - run: | - if ! docker manifest inspect ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} &> /dev/null ; then - echo "Build required, no existing image" - echo ::set-output name=frontend-build-needed::true - elif ${{ steps.changed-files-specific.outputs.any_changed }} == 'true' ; then - echo "Build required, src-ui changes" - echo ::set-output name=frontend-build-needed::true - else - echo "No build required" - echo ::set-output name=frontend-build-needed::false - fi - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} - name: Compile frontend uses: docker/build-push-action@v2 - if: ${{ steps.build-skip-check.outputs.frontend-build-needed == 'true' }} with: context: . file: ./docker-builders/Dockerfile.frontend @@ -250,8 +219,8 @@ jobs: # But the platform is set to the runner's native for speedup platforms: linux/amd64 push: true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=registry,ref=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).cache_tag }} + cache-to: type=registry,mode=max,ref=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).cache_tag }} - name: Export frontend artifact from docker run: | diff --git a/.github/workflows/reusable-ci-backend.yml b/.github/workflows/reusable-ci-backend.yml index 28092fcb1..7e5cafb99 100644 --- a/.github/workflows/reusable-ci-backend.yml +++ b/.github/workflows/reusable-ci-backend.yml @@ -87,7 +87,7 @@ jobs: - name: Get changed files id: changed-files-specific - uses: tj-actions/changed-files@v18.1 + uses: tj-actions/changed-files@v18.7 with: files: | src/** diff --git a/.github/workflows/reusable-workflow-builder.yml b/.github/workflows/reusable-workflow-builder.yml index 543cd3d79..3741ad67b 100644 --- a/.github/workflows/reusable-workflow-builder.yml +++ b/.github/workflows/reusable-workflow-builder.yml @@ -23,6 +23,9 @@ jobs: name: Build ${{ fromJSON(inputs.build-json).name }} @ ${{ fromJSON(inputs.build-json).version }} runs-on: ubuntu-latest steps: + - + name: Checkout + uses: actions/checkout@v3 - name: Login to Github Container Registry uses: docker/login-action@v1 @@ -30,33 +33,15 @@ jobs: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - - name: Determine if build needed - id: build-skip-check - run: | - if ! docker manifest inspect ${{ fromJSON(inputs.build-json).image_tag }} &> /dev/null ; then - echo "Building, no image exists with this version" - echo ::set-output name=image-exists::false - else - echo "Not building, image exists with this version" - echo ::set-output name=image-exists::true - fi - - - name: Checkout - uses: actions/checkout@v3 - if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} - name: Set up QEMU uses: docker/setup-qemu-action@v1 - if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} - name: Build ${{ fromJSON(inputs.build-json).name }} uses: docker/build-push-action@v2 - if: ${{ steps.build-skip-check.outputs.image-exists == 'false' }} with: context: . file: ${{ inputs.dockerfile }} @@ -64,5 +49,5 @@ jobs: platforms: linux/amd64,linux/arm64,linux/arm/v7 build-args: ${{ inputs.build-args }} push: true - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=registry,ref=${{ fromJSON(inputs.build-json).cache_tag }} + cache-to: type=registry,mode=max,ref=${{ fromJSON(inputs.build-json).cache_tag }} From 9aee44f363c447c33b0d76b3b6f26a5bf59420cc Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 26 Apr 2022 14:14:47 -0700 Subject: [PATCH 41/86] Adds extra system libraries for pikepdf/Pillow building --- Dockerfile | 7 ++++++ build-docker-image.sh | 3 +++ docker-builders/Dockerfile.jbig2enc | 2 +- docker-builders/Dockerfile.pikepdf | 35 ++++++++++++++++++++++++----- docker-builders/Dockerfile.psycopg2 | 7 +++--- docker-builders/Dockerfile.qpdf | 3 ++- 6 files changed, 46 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2267eab0b..8d2efca6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,14 @@ ARG RUNTIME_PACKAGES="\ liblept5 \ libpq5 \ libxml2 \ + liblcms2-2 \ + libtiff5 \ libxslt1.1 \ + libfreetype6 \ + libwebp6 \ + libopenjp2-7 \ + libimagequant0 \ + libraqm0 \ libgnutls30 \ libjpeg62-turbo \ optipng \ diff --git a/build-docker-image.sh b/build-docker-image.sh index f7ab62ca6..e3bdd7998 100755 --- a/build-docker-image.sh +++ b/build-docker-image.sh @@ -37,6 +37,9 @@ psycopg2_git_tag=${psycopg2_version//./_} # pikepdf uses vX.Y.Z pikepdf_git_tag="v${pikepdf_version}" +# https://docs.docker.com/develop/develop-images/build_enhancements/ +export DOCKER_BUILDKIT=1 + docker build --file "$1" \ --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ --build-arg QPDF_VERSION="${qpdf_version}" \ diff --git a/docker-builders/Dockerfile.jbig2enc b/docker-builders/Dockerfile.jbig2enc index 4bc633170..d9f1643fd 100644 --- a/docker-builders/Dockerfile.jbig2enc +++ b/docker-builders/Dockerfile.jbig2enc @@ -2,7 +2,7 @@ # Inputs: # - JBIG2ENC_VERSION - the Git tag to checkout and build -FROM debian:bullseye-slim +FROM debian:bullseye-slim as main LABEL org.opencontainers.image.description="A intermediate image with jbig2enc built" diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index 3d2e5f235..fa9618ddc 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -13,7 +13,7 @@ FROM ghcr.io/${REPO}/builder/qpdf:${QPDF_VERSION} as qpdf-builder # This does nothing, except provide a name for a copy below -FROM python:3.9-slim-bullseye +FROM python:3.9-slim-bullseye as main LABEL org.opencontainers.image.description="A intermediate image with pikepdf wheel built" @@ -21,14 +21,33 @@ ARG DEBIAN_FRONTEND=noninteractive ARG BUILD_PACKAGES="\ build-essential \ + python3-dev \ + python3-pip \ git \ - libjpeg62-turbo-dev \ - zlib1g-dev \ + # qpdf requirement - https://github.com/qpdf/qpdf#crypto-providers libgnutls28-dev \ + # lxml requrements - https://lxml.de/installation.html libxml2-dev \ libxslt1-dev \ - python3-dev \ - python3-pip" + # Pillow requirements - https://pillow.readthedocs.io/en/stable/installation.html + # JPEG functionality + libjpeg62-turbo-dev \ + # conpressed PNG + zlib1g-dev \ + # compressed TIFF + libtiff-dev \ + # type related services + libfreetype-dev \ + # color management + liblcms2-dev \ + # WebP format + libwebp-dev \ + # JPEG 2000 + libopenjp2-7-dev \ + # improved color quantization + libimagequant-dev \ + # complex text layout support + libraqm-dev" WORKDIR /usr/src @@ -42,7 +61,11 @@ RUN set -eux \ && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \ && dpkg --install libqpdf28_*.deb \ && dpkg --install libqpdf-dev_*.deb \ - && python3 -m pip install --no-cache-dir --upgrade pip wheel pybind11 \ + && python3 -m pip install --no-cache-dir --upgrade \ + pip \ + wheel \ + # https://pikepdf.readthedocs.io/en/latest/installation.html#requirements + pybind11 \ && rm -rf /var/lib/apt/lists/* # Layers after this point change according to required version diff --git a/docker-builders/Dockerfile.psycopg2 b/docker-builders/Dockerfile.psycopg2 index cfd7ff56a..78bdf2438 100644 --- a/docker-builders/Dockerfile.psycopg2 +++ b/docker-builders/Dockerfile.psycopg2 @@ -3,7 +3,7 @@ # - PSYCOPG2_GIT_TAG - The Git tag to clone and build from # - PSYCOPG2_VERSION - Unused, kept for future possible usage -FROM python:3.9-slim-bullseye +FROM python:3.9-slim-bullseye as main LABEL org.opencontainers.image.description="A intermediate image with psycopg2 wheel built" @@ -12,9 +12,10 @@ ARG DEBIAN_FRONTEND=noninteractive ARG BUILD_PACKAGES="\ build-essential \ git \ - libpq-dev \ python3-dev \ - python3-pip" + python3-pip \ + # https://www.psycopg.org/docs/install.html#prerequisites + libpq-dev" WORKDIR /usr/src diff --git a/docker-builders/Dockerfile.qpdf b/docker-builders/Dockerfile.qpdf index 770d8c2ee..0d738a4ad 100644 --- a/docker-builders/Dockerfile.qpdf +++ b/docker-builders/Dockerfile.qpdf @@ -1,4 +1,4 @@ -FROM debian:bullseye-slim +FROM debian:bullseye-slim as main LABEL org.opencontainers.image.description="A intermediate image with qpdf built" @@ -11,6 +11,7 @@ ARG BUILD_PACKAGES="\ devscripts \ equivs \ libtool \ + # https://qpdf.readthedocs.io/en/stable/installation.html#system-requirements libjpeg62-turbo-dev \ libgnutls28-dev \ packaging-dev \ From fdec13ef81de4fe8a02452b6a45371b90de39dac Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Tue, 26 Apr 2022 15:30:09 -0700 Subject: [PATCH 42/86] Updates the Pillow link to a better anchor --- docker-builders/Dockerfile.pikepdf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-builders/Dockerfile.pikepdf b/docker-builders/Dockerfile.pikepdf index fa9618ddc..d37014126 100644 --- a/docker-builders/Dockerfile.pikepdf +++ b/docker-builders/Dockerfile.pikepdf @@ -29,7 +29,7 @@ ARG BUILD_PACKAGES="\ # lxml requrements - https://lxml.de/installation.html libxml2-dev \ libxslt1-dev \ - # Pillow requirements - https://pillow.readthedocs.io/en/stable/installation.html + # Pillow requirements - https://pillow.readthedocs.io/en/stable/installation.html#external-libraries # JPEG functionality libjpeg62-turbo-dev \ # conpressed PNG From c66de5931c4f2abb05027c282eee4dc83951f163 Mon Sep 17 00:00:00 2001 From: Anthony Ruhier Date: Thu, 28 Apr 2022 01:57:43 +0200 Subject: [PATCH 43/86] docker: set default postgresql port back to 5432 Postgresql default port in the docker prepare script has been changed by mistake to 5342 in commit c2c8a2754. Set it back to 5432. --- docker/docker-prepare.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index 540b1d7ed..477233784 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -9,7 +9,7 @@ wait_for_postgres() { echo "Waiting for PostgreSQL to start..." host="${PAPERLESS_DBHOST:=localhost}" - port="${PAPERLESS_DBPORT:=5342}" + port="${PAPERLESS_DBPORT:=5432}" while [ ! "$(pg_isready -h $host -p $port)" ]; do From aa7faaaa729cc4e915d747e876a227016e219cdc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Apr 2022 01:10:48 +0000 Subject: [PATCH 44/86] Bump github/codeql-action from 1 to 2 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v1...v2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1473eb4ae..92e384d4e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -51,4 +51,4 @@ jobs: # queries: ./path/to/local/query, your-org/your-repo/queries@main - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From 157951343b3337e50f989a0c04e4857048b94418 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Apr 2022 13:33:34 +0000 Subject: [PATCH 45/86] Bump pytest from 7.1.1 to 7.1.2 Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.1 to 7.1.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.1.1...7.1.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Pipfile.lock | 65 ++++++++++++++++++++++++------------------------ requirements.txt | 2 +- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index f609e9593..fd0447e04 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -237,29 +237,31 @@ }, "cryptography": { "hashes": [ - "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b", - "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51", - "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7", - "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d", - "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6", - "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29", - "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9", - "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf", - "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815", - "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf", - "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85", - "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77", - "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86", - "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb", - "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e", - "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0", - "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3", - "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84", - "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2", - "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6" + "sha256:06bfafa6e53ccbfb7a94be4687b211a025ce0625e3f3c60bb15cd048a18f3ed8", + "sha256:0db5cf21bd7d092baacb576482b0245102cea2d3cf09f09271ce9f69624ecb6f", + "sha256:125702572be12bcd318e3a14e9e70acd4be69a43664a75f0397e8650fe3c6cc3", + "sha256:1858eff6246bb8bbc080eee78f3dd1528739e3f416cba5f9914e8631b8df9871", + "sha256:315af6268de72bcfa0bb3401350ce7d921f216e6b60de12a363dad128d9d459f", + "sha256:451aaff8b8adf2dd0597cbb1fdcfc8a7d580f33f843b7cce75307a7f20112dd8", + "sha256:58021d6e9b1d88b1105269d0da5e60e778b37dfc0e824efc71343dd003726831", + "sha256:618391152147a1221c87b1b0b7f792cafcfd4b5a685c5c72eeea2ddd29aeceff", + "sha256:6d4daf890e674d191757d8d7d60dc3a29c58c72c7a76a05f1c0a326013f47e8b", + "sha256:74b55f67f4cf026cb84da7a1b04fc2a1d260193d4ad0ea5e9897c8b74c1e76ac", + "sha256:7ceae26f876aabe193b13a0c36d1bb8e3e7e608d17351861b437bd882f617e9f", + "sha256:930b829e8a2abaf43a19f38277ae3c5e1ffcf547b936a927d2587769ae52c296", + "sha256:a18ff4bfa9d64914a84d7b06c46eb86e0cc03113470b3c111255aceb6dcaf81d", + "sha256:ae1cd29fbe6b716855454e44f4bf743465152e15d2d317303fe3b58ee9e5af7a", + "sha256:b1ee5c82cf03b30f6ae4e32d2bcb1e167ef74d6071cbb77c2af30f101d0b360b", + "sha256:bf585476fcbcd37bed08072e8e2db3954ce1bfc68087a2dc9c19cfe0b90979ca", + "sha256:c4a58eeafbd7409054be41a377e726a7904a17c26f45abf18125d21b1215b08b", + "sha256:cce90609e01e1b192fae9e13665058ab46b2ea53a3c05a3ea74a3eb8c3af8857", + "sha256:d610d0ee14dd9109006215c7c0de15eee91230b70a9bce2263461cf7c3720b83", + "sha256:e69a0e36e62279120e648e787b76d79b41e0f9e86c1c636a4f38d415595c722e", + "sha256:f095988548ec5095e3750cdb30e6962273d239b1998ba1aac66c0d5bee7111c1", + "sha256:faf0f5456c059c7b1c29441bdd5e988f0ba75bdc3eea776520d8dcb1e30e1b5c" ], "markers": "python_version >= '3.6'", - "version": "==36.0.2" + "version": "==37.0.1" }, "daphne": { "hashes": [ @@ -1592,9 +1594,6 @@ "version": "==8.1.2" }, "coverage": { - "extras": [ - - ], "hashes": [ "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d", @@ -1688,11 +1687,11 @@ }, "faker": { "hashes": [ - "sha256:2a9716f2c409224121144f0d2fdc7105e978e2e266deb4d8216061d9668951fc", - "sha256:2d4139254c1cc69f2b5203f4a9aaab33a9e65f7994059856300ef6e21ac93f39" + "sha256:0d5425894e098410b64aaade38a81074fa30163076251118523adf5bb44f8346", + "sha256:7ab2f741ef1c006ed7274a6ed75695ca8b610f78861566b599ce83c4953bf687" ], "markers": "python_version >= '3.6'", - "version": "==13.4.0" + "version": "==13.6.0" }, "filelock": { "hashes": [ @@ -1704,11 +1703,11 @@ }, "identify": { "hashes": [ - "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17", - "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323" + "sha256:3acfe15a96e4272b4ec5662ee3e231ceba976ef63fd9980ed2ce9cc415df393f", + "sha256:c83af514ea50bf2be2c4a3f2fb349442b59dc87284558ae9ff54191bff3541d2" ], "markers": "python_version >= '3.7'", - "version": "==2.4.12" + "version": "==2.5.0" }, "idna": { "hashes": [ @@ -1874,11 +1873,11 @@ }, "pytest": { "hashes": [ - "sha256:841132caef6b1ad17a9afde46dc4f6cfa59a05f9555aae5151f73bdf2820ca63", - "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea" + "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c", + "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45" ], "index": "pypi", - "version": "==7.1.1" + "version": "==7.1.2" }, "pytest-cov": { "hashes": [ diff --git a/requirements.txt b/requirements.txt index 2145633d8..295e14e1d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,7 +27,7 @@ click==8.1.2; python_version >= '3.7' coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.20 constantly==15.1.0 -cryptography==36.0.2; python_version >= '3.6' +cryptography==37.0.1; python_version >= '3.6' daphne==3.0.2; python_version >= '3.6' dateparser==1.1.1 django-cors-headers==3.11.0 From 40f88faf37039b783b87635b0c93966b491d3a64 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Thu, 28 Apr 2022 11:37:52 -0700 Subject: [PATCH 46/86] Updates the workflow to enable Docker Hub pushing --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9973f0eec..fe52da55d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,13 +63,6 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - - name: Login to Github Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Python uses: actions/setup-python@v3 @@ -247,12 +240,25 @@ jobs: - build-pikepdf-wheel - build-frontend steps: + - + name: Check pushing to Docker Hub + id: docker-hub + # Only push to Dockerhub from the main repo + # Otherwise forks would require a Docker Hub account and secrets setup + run: | + if [[ ${{ github.repository }} == "paperless-ngx/paperless-ngx" ]] ; then + echo ::set-output name=enable::"true" + else + echo ::set-output name=enable::"false" + fi - name: Gather Docker metadata id: docker-meta uses: docker/metadata-action@v3 with: - images: ghcr.io/${{ github.repository }} + images: | + ghcr.io/${{ github.repository }} + name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }} tags: | type=ref,event=branch type=ref,event=tag @@ -272,6 +278,14 @@ jobs: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - + name: Login to Docker Hub + uses: docker/login-action@v1 + # Don't attempt to login is not pushing to Docker Hub + if: steps.docker-hub.outputs.enable == 'true' + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v2 From ecbc8165d521d248342cabb80905e2749e85dfc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Apr 2022 21:27:05 +0000 Subject: [PATCH 47/86] Bump @types/node from 17.0.27 to 17.0.29 in /src-ui Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.27 to 17.0.29. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 15 +++++++-------- src-ui/package.json | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 768d4473c..e3d0249a6 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -21,7 +21,6 @@ "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", "bootstrap": "^5.1.3", - "cypress": "~9.6.0", "file-saver": "^2.0.5", "ng2-pdf-viewer": "^9.0.0", "ngx-color": "^7.3.3", @@ -38,7 +37,7 @@ "@angular/cli": "~13.3.3", "@angular/compiler-cli": "~13.3.4", "@types/jest": "27.4.1", - "@types/node": "^17.0.23", + "@types/node": "^17.0.29", "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "27.5.1", @@ -3823,9 +3822,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", - "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==", + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.29.tgz", + "integrity": "sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA==", "devOptional": true }, "node_modules/@types/parse-json": { @@ -19746,9 +19745,9 @@ "dev": true }, "@types/node": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", - "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==", + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.29.tgz", + "integrity": "sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA==", "devOptional": true }, "@types/parse-json": { diff --git a/src-ui/package.json b/src-ui/package.json index 9b608ddcc..d94b72f9c 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -42,7 +42,7 @@ "@angular/cli": "~13.3.3", "@angular/compiler-cli": "~13.3.4", "@types/jest": "27.4.1", - "@types/node": "^17.0.23", + "@types/node": "^17.0.29", "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "27.5.1", From 27a1ef25a570602a4b91969f7896d14d17e30461 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Apr 2022 21:27:25 +0000 Subject: [PATCH 48/86] Bump @ng-bootstrap/ng-bootstrap from 12.0.2 to 12.1.0 in /src-ui Bumps [@ng-bootstrap/ng-bootstrap](https://github.com/ng-bootstrap/ng-bootstrap) from 12.0.2 to 12.1.0. - [Release notes](https://github.com/ng-bootstrap/ng-bootstrap/releases) - [Changelog](https://github.com/ng-bootstrap/ng-bootstrap/blob/master/CHANGELOG.md) - [Commits](https://github.com/ng-bootstrap/ng-bootstrap/compare/12.0.2...12.1.0) --- updated-dependencies: - dependency-name: "@ng-bootstrap/ng-bootstrap" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 15 +++++++-------- src-ui/package.json | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 768d4473c..feaa7dba5 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -16,12 +16,11 @@ "@angular/platform-browser": "~13.3.4", "@angular/platform-browser-dynamic": "~13.3.4", "@angular/router": "~13.3.4", - "@ng-bootstrap/ng-bootstrap": "^12.0.1", + "@ng-bootstrap/ng-bootstrap": "^12.1.0", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", "bootstrap": "^5.1.3", - "cypress": "~9.6.0", "file-saver": "^2.0.5", "ng2-pdf-viewer": "^9.0.0", "ngx-color": "^7.3.3", @@ -3354,9 +3353,9 @@ } }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.2.tgz", - "integrity": "sha512-Dvd95VtJe5a/rxgQlI0QFX1OJ3I1MM484+VJMA1P2ETq/hgT44ypFI/pIiO+KcHV76IX5SjGKSRNiWNi+shnaA==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.0.tgz", + "integrity": "sha512-4/b1zn5esthHlH1wAHWB2cShwIjuBd1RvxFwsc2Y9tkDbhNQ8pZ7ltNpoKHlQNLJkmethB+KyqOJSsZUSa138g==", "dependencies": { "tslib": "^2.3.0" }, @@ -19339,9 +19338,9 @@ } }, "@ng-bootstrap/ng-bootstrap": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.2.tgz", - "integrity": "sha512-Dvd95VtJe5a/rxgQlI0QFX1OJ3I1MM484+VJMA1P2ETq/hgT44ypFI/pIiO+KcHV76IX5SjGKSRNiWNi+shnaA==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.0.tgz", + "integrity": "sha512-4/b1zn5esthHlH1wAHWB2cShwIjuBd1RvxFwsc2Y9tkDbhNQ8pZ7ltNpoKHlQNLJkmethB+KyqOJSsZUSa138g==", "requires": { "tslib": "^2.3.0" } diff --git a/src-ui/package.json b/src-ui/package.json index 9b608ddcc..f239910bc 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -21,7 +21,7 @@ "@angular/platform-browser": "~13.3.4", "@angular/platform-browser-dynamic": "~13.3.4", "@angular/router": "~13.3.4", - "@ng-bootstrap/ng-bootstrap": "^12.0.1", + "@ng-bootstrap/ng-bootstrap": "^12.1.0", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", From 268f99f8acb0cfaff8c93edba22a4652901c2ad1 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 28 Apr 2022 20:34:35 -0700 Subject: [PATCH 49/86] Bump angular to 13.3.5, builders to 13.3.4, types/node to 17.0.30 Supersedes #831, #832, #838, #839 --- src-ui/package-lock.json | 948 +++++++++++++++++++++++---------------- src-ui/package.json | 24 +- 2 files changed, 575 insertions(+), 397 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 5caa7a236..d1b5fcb37 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -8,14 +8,14 @@ "name": "paperless-ui", "version": "0.0.0", "dependencies": { - "@angular/common": "~13.3.4", - "@angular/compiler": "~13.3.4", - "@angular/core": "~13.3.4", - "@angular/forms": "~13.3.4", - "@angular/localize": "~13.3.4", - "@angular/platform-browser": "~13.3.4", - "@angular/platform-browser-dynamic": "~13.3.4", - "@angular/router": "~13.3.4", + "@angular/common": "~13.3.5", + "@angular/compiler": "~13.3.5", + "@angular/core": "~13.3.5", + "@angular/forms": "~13.3.5", + "@angular/localize": "~13.3.5", + "@angular/platform-browser": "~13.3.5", + "@angular/platform-browser-dynamic": "~13.3.5", + "@angular/router": "~13.3.5", "@ng-bootstrap/ng-bootstrap": "^12.1.0", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", @@ -33,11 +33,11 @@ }, "devDependencies": { "@angular-builders/jest": "13.0.3", - "@angular-devkit/build-angular": "~13.3.3", - "@angular/cli": "~13.3.3", - "@angular/compiler-cli": "~13.3.4", + "@angular-devkit/build-angular": "~13.3.4", + "@angular/cli": "~13.3.4", + "@angular/compiler-cli": "~13.3.5", "@types/jest": "27.4.1", - "@types/node": "^17.0.29", + "@types/node": "^17.0.30", "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "27.5.1", @@ -83,12 +83,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1303.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", - "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", + "version": "0.1303.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.4.tgz", + "integrity": "sha512-d6YmIWdYvwk6WaknHRcJgiXeJvX9K5i8uPMAaL2P2/LU8n3moIQ59C7SP0uULcHuuiREEmFWOyyrWnGxZCI9bg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.3", + "@angular-devkit/core": "13.3.4", "rxjs": "6.6.7" }, "engines": { @@ -116,15 +116,15 @@ "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", - "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.4.tgz", + "integrity": "sha512-z74cmDi2V+5XpvyZKFlUXxvQ446shxyZk5aGdToG6n+0/IJWkDXSiryQkCo8nblGMze7HKf75i3DsGWYQZLDnQ==", "dev": true, "dependencies": { "@ampproject/remapping": "1.1.1", - "@angular-devkit/architect": "0.1303.3", - "@angular-devkit/build-webpack": "0.1303.3", - "@angular-devkit/core": "13.3.3", + "@angular-devkit/architect": "0.1303.4", + "@angular-devkit/build-webpack": "0.1303.4", + "@angular-devkit/core": "13.3.4", "@babel/core": "7.16.12", "@babel/generator": "7.16.8", "@babel/helper-annotate-as-pure": "7.16.7", @@ -135,7 +135,7 @@ "@babel/runtime": "7.16.7", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.3.3", + "@ngtools/webpack": "13.3.4", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -250,12 +250,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1303.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", - "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", + "version": "0.1303.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.4.tgz", + "integrity": "sha512-3F10P9XshRXkI/PEmJUcgP4yK4sobaoInQfifzPNOemrS5nXs8y3uEiQuxzyswYx/dymZLV+19sV/eh1WfXnBA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/architect": "0.1303.4", "rxjs": "6.6.7" }, "engines": { @@ -287,9 +287,9 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", - "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.4.tgz", + "integrity": "sha512-gj6i8ksPaT2bvYwI7wKJxLX53pHfTmZc1RaNbAGfZB1/zFNnb3MPj8utTcJSk4qMsGXuDDhiB7hpTKBw8ROaGA==", "dev": true, "dependencies": { "ajv": "8.9.0", @@ -332,12 +332,12 @@ "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", - "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.4.tgz", + "integrity": "sha512-gKNpMMoZJjLKdXxjuVembic4GWa4AYV7kU1ou3ZuZoDKtKcig9URISr1wjS+nrhKYz+miFy0zIqSGMMattDlDQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.3", + "@angular-devkit/core": "13.3.4", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -368,16 +368,16 @@ "dev": true }, "node_modules/@angular/cli": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", - "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.4.tgz", + "integrity": "sha512-4S5FNjkZgq98zcBVgwkYtMgMRMSVsprCgq7dM8yTxIQh+Np3fYgj5eRJ1+mfFG/kankH2z/TFyuoYiILh2D9Uw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1303.3", - "@angular-devkit/core": "13.3.3", - "@angular-devkit/schematics": "13.3.3", - "@schematics/angular": "13.3.3", + "@angular-devkit/architect": "0.1303.4", + "@angular-devkit/core": "13.3.4", + "@angular-devkit/schematics": "13.3.4", + "@schematics/angular": "13.3.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -404,9 +404,9 @@ } }, "node_modules/@angular/common": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.4.tgz", - "integrity": "sha512-vPZuUGWMXz6r30obBqH+iIG4Feq4YEK/4wUks7PEYGke8MXFPYsNKuHMhKCgYEhabD/4Mo4GEp3i18/3Kk72Mw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.5.tgz", + "integrity": "sha512-teG+itdlw2sOMwYeXkeFe8h32SsNqN0qHHz/v6I9qKHgCLkC/or8A7NtsoCwYSTymIEJJ7DZ1w9VWhM7DSYd1w==", "dependencies": { "tslib": "^2.3.0" }, @@ -414,14 +414,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.3.4", + "@angular/core": "13.3.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.4.tgz", - "integrity": "sha512-Yf1Dv2BVytjmv5Nnv05hUciUOH/UpKgXG1Ql5XwQG/qGV4eEs33PJBtGsUJTPuddxfRm72JMsbZcoRjVADqbcw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.5.tgz", + "integrity": "sha512-iSQlYevMk5glwZSXTXf2GytykqZWdK3Rr8heIvEPqd8n88MSB3w1KnDc1fnHLF950q/nUR9K+3r4wWPwc8J2IQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -430,9 +430,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.4.tgz", - "integrity": "sha512-wCnt2YOS5EiwWCEv8oCqIfiwUtifs+COhcYH6fpmf/3X9w1yKO1ZMA+OsFQ0IVS4d0YYavm5DTPQ2ep2c0sF5w==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.5.tgz", + "integrity": "sha512-H7A+MZcbB4g5fa6O4giYgrCG1h5whJfIxr4txDtDfolygzwRzqH1PSMfjW/jYyIpaH6XqXMSDHvbXRFGKstboA==", "dependencies": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -454,16 +454,17 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.3.4", + "@angular/compiler": "13.3.5", "typescript": ">=4.4.2 <4.7" } }, "node_modules/@angular/compiler-cli/node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -539,9 +540,9 @@ } }, "node_modules/@angular/core": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.4.tgz", - "integrity": "sha512-PqPwx9oaV0Bh0m0fdI2jtXUC6s04jfD4vyzB4sjEuRI9pRUnZ6M5hZ5Vn/KJVZyt411MevbJfqzUVf0W+GDZew==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.5.tgz", + "integrity": "sha512-lf+Be8dDRvz8J+QFR2RxS3BBfgGM4eWq4bI1+k/aqDnM6OW4pQXdq8Lzae8SxN48u1NxB1M/1bbc9LcrChrj2Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -554,9 +555,9 @@ } }, "node_modules/@angular/forms": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.4.tgz", - "integrity": "sha512-QHyUXOKYITysaJJ4VnmBacE69oz0rw4G7Y2lhPb2V3a1XsWeO61SZEeGMfAWo7sLoDvi2MCEWNEhl1du4dK14A==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.5.tgz", + "integrity": "sha512-jCxxAwf4HkDmKE76/yQmTsbqW3jsxiKyPy32Nh6Bt4r/ww8VDv+sv5YdYNuvvZcuuQ70K+/EPnKFpQgYttvS8A==", "dependencies": { "tslib": "^2.3.0" }, @@ -564,16 +565,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.4", - "@angular/core": "13.3.4", - "@angular/platform-browser": "13.3.4", + "@angular/common": "13.3.5", + "@angular/core": "13.3.5", + "@angular/platform-browser": "13.3.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.4.tgz", - "integrity": "sha512-T55072wuH4jFweHA0cYhKaomitjxEpyVMro3QA9+SaBMy10yAP2Z1h1vA16A/vXxqVy8oSrmuda4UwMOwZv3Aw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.5.tgz", + "integrity": "sha512-0MmGvQSBZeKwsOBATWp7Y5rxyGW6OaszLtecKu32VVJSjoDN4M6uMHBMjVVe4IxbyJnbhlSPRSYL9hRFbOve0A==", "dependencies": { "@babel/core": "7.17.2", "glob": "7.2.0", @@ -588,16 +589,17 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.3.4", - "@angular/compiler-cli": "13.3.4" + "@angular/compiler": "13.3.5", + "@angular/compiler-cli": "13.3.5" } }, "node_modules/@angular/localize/node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -662,9 +664,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.4.tgz", - "integrity": "sha512-IjBOkjrIVIbbZCDQJRdel0FSDcExSLDgMxcCSQ6pKa6oR/t59BJpSpOhB1W9nRwLtvMmGYkS/oyLFsKk65UoYA==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.5.tgz", + "integrity": "sha512-DPV1J3h1ua4GI9PuXDr8IlzJoC/TR0A/onPTaE6IFOzs1r28vB+vWRRbZURXrTYeWzWVB/2R9tPOqFNoi3zlzA==", "dependencies": { "tslib": "^2.3.0" }, @@ -672,9 +674,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "13.3.4", - "@angular/common": "13.3.4", - "@angular/core": "13.3.4" + "@angular/animations": "13.3.5", + "@angular/common": "13.3.5", + "@angular/core": "13.3.5" }, "peerDependenciesMeta": { "@angular/animations": { @@ -683,9 +685,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.4.tgz", - "integrity": "sha512-UApjgrL6B3QTdSYoCOPzMvFDmSewAHrLpreLYEmADutMWkD0ZcTPux4MJp8awT4P3l6wKzBeGJIKLlk8zsXmGQ==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.5.tgz", + "integrity": "sha512-Mko8/mRlcVsZJQ5zHfc/p7so/ZN16UMynTnksrD7cEgGxDuJosE8m+exqgoT03VCYaOjJtCFXSwdOb/8FOUDZQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -693,16 +695,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.4", - "@angular/compiler": "13.3.4", - "@angular/core": "13.3.4", - "@angular/platform-browser": "13.3.4" + "@angular/common": "13.3.5", + "@angular/compiler": "13.3.5", + "@angular/core": "13.3.5", + "@angular/platform-browser": "13.3.5" } }, "node_modules/@angular/router": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.4.tgz", - "integrity": "sha512-UuMAjWHoFKF8b9gFOiqL7fpVXjIr89BtxVES3yXReVq/IZJz9gWup6lYK3KMja+F8HZB8LBUMYgtqjS9iyLV/Q==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.5.tgz", + "integrity": "sha512-3yUNyBpUi0KUKP91a3dVQsr9Jfjs4wGxpiFYb3apc7lKT5R1LJqt2O0EchjOgvFyJ6TDOemdCAzKgvSRkDxpMw==", "dependencies": { "tslib": "^2.3.0" }, @@ -710,9 +712,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.3.4", - "@angular/core": "13.3.4", - "@angular/platform-browser": "13.3.4", + "@angular/common": "13.3.5", + "@angular/core": "13.3.5", + "@angular/platform-browser": "13.3.5", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3330,6 +3332,18 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", @@ -3338,6 +3352,14 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", + "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", @@ -3400,9 +3422,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", - "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.4.tgz", + "integrity": "sha512-dNDNeAOwtpX5A7TTEsgDbkg4jTmAJHD96qLqcpJqfBg8nZ4mqn6E0HinX9HZKaCST1/75T6GsFo1Muc4MsHYgA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.15.0 || >=16.10.0", @@ -3542,13 +3564,13 @@ } }, "node_modules/@schematics/angular": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", - "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.4.tgz", + "integrity": "sha512-Cta11k965Igz2kWj60KQ/9z6RFAg9FjZ8i1TH4nyROJs9nWemWPQNA+OJFuXrEy6Ldpk7yJ5cWgJsyryGB25PA==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.3.3", - "@angular-devkit/schematics": "13.3.3", + "@angular-devkit/core": "13.3.4", + "@angular-devkit/schematics": "13.3.4", "jsonc-parser": "3.0.0" }, "engines": { @@ -3662,9 +3684,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.0.tgz", - "integrity": "sha512-r8aveDbd+rzGP+ykSdF3oPuTVRWRfbBiHl0rVDM2yNEmSMXfkObQLV46b4RnCv3Lra51OlfnZhkkFaDl2MIRaA==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -3822,9 +3844,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.29.tgz", - "integrity": "sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA==", + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", "devOptional": true }, "node_modules/@types/parse-json": { @@ -3852,9 +3874,9 @@ "dev": true }, "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, "node_modules/@types/serve-index": { @@ -4126,9 +4148,9 @@ } }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4938,24 +4960,27 @@ "optional": true }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { @@ -4976,6 +5001,15 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4983,10 +5017,13 @@ "dev": true }, "node_modules/body-parser/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -5240,9 +5277,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "version": "1.0.30001334", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", + "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==", "funding": [ { "type": "opencollective", @@ -5886,9 +5923,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, "engines": { "node": ">= 0.6" @@ -5979,12 +6016,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", - "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.3.tgz", + "integrity": "sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw==", "dev": true, "dependencies": { - "browserslist": "^4.20.2", + "browserslist": "^4.20.3", "semver": "7.0.0" }, "funding": { @@ -6371,9 +6408,9 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.15.tgz", - "integrity": "sha512-hzzmpfqOhsFmvQ9nu87qNQJ8ksofJLBIKkgaYWFapV+W8UGHCxtg5uf69ZtlDSS8rb4ax3lMgpqBnLUQETjCJA==", + "version": "14.18.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz", + "integrity": "sha512-X3bUMdK/VmvrWdoTkz+VCn6nwKwrKCFTHtqwBIaQJNx4RUIBBUFXM00bqPz/DsDd+Icjmzm6/tyYZzeGVqb6/Q==", "optional": true }, "node_modules/cypress/node_modules/ansi-styles": { @@ -6773,10 +6810,14 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-newline": { "version": "3.1.0", @@ -6941,9 +6982,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.119", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", - "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==" + "version": "1.4.126", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.126.tgz", + "integrity": "sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA==" }, "node_modules/emittery": { "version": "0.8.1", @@ -7655,38 +7696,39 @@ } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -7710,6 +7752,15 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7717,10 +7768,13 @@ "dev": true }, "node_modules/express/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" }, @@ -7920,17 +7974,17 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -8471,19 +8525,28 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, "node_modules/http-parser-js": { @@ -12623,9 +12686,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", - "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" }, "node_modules/nopt": { "version": "5.0.0", @@ -12792,9 +12855,9 @@ } }, "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.6.tgz", - "integrity": "sha512-9a/MLxGaw3LEGes0HaPez2RgZWDV6X0jrgChsuxfEh8xoDoYGxaGrkMe7Dlyjrb655tA/b8fX0qlUg6Ii5MBvw==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.7.tgz", + "integrity": "sha512-a4zfQpp5vm4Ipdvbj+ZrPonikRhm6WBEd4zT1Yc1DXsmAxrPgDwWBLF/u/wTVXSFPIgOJ1U3ghSa2Xm4s3h28w==", "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", @@ -12976,6 +13039,15 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -13026,9 +13098,9 @@ "dev": true }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { "ee-first": "1.1.1" @@ -13254,12 +13326,12 @@ } }, "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "dependencies": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.0", "retry": "^0.13.1" }, "engines": { @@ -14322,13 +14394,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -14894,24 +14966,24 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -14932,6 +15004,15 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -15007,16 +15088,25 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -15067,6 +15157,20 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -15374,12 +15478,12 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/string_decoder": { @@ -16124,9 +16228,9 @@ } }, "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16995,12 +17099,12 @@ } }, "@angular-devkit/architect": { - "version": "0.1303.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.3.tgz", - "integrity": "sha512-WRVVBCzLlMqRZVhZXGASHzNJK/OCAvl/DTGhlLuJDIjF7lVGnXHjtwNM8ilYZq949OnC3fly5Z61TfhbN/OHCg==", + "version": "0.1303.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.4.tgz", + "integrity": "sha512-d6YmIWdYvwk6WaknHRcJgiXeJvX9K5i8uPMAaL2P2/LU8n3moIQ59C7SP0uULcHuuiREEmFWOyyrWnGxZCI9bg==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.3", + "@angular-devkit/core": "13.3.4", "rxjs": "6.6.7" }, "dependencies": { @@ -17022,15 +17126,15 @@ } }, "@angular-devkit/build-angular": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.3.tgz", - "integrity": "sha512-iEpNF3tF+9Gw+qQKL63fPFHIvWokJdrgVU4GzENQ5QeL8zk8iYTEbH3jWogq5tWy5+VmNP/mKkasq9i78lRiYw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.4.tgz", + "integrity": "sha512-z74cmDi2V+5XpvyZKFlUXxvQ446shxyZk5aGdToG6n+0/IJWkDXSiryQkCo8nblGMze7HKf75i3DsGWYQZLDnQ==", "dev": true, "requires": { "@ampproject/remapping": "1.1.1", - "@angular-devkit/architect": "0.1303.3", - "@angular-devkit/build-webpack": "0.1303.3", - "@angular-devkit/core": "13.3.3", + "@angular-devkit/architect": "0.1303.4", + "@angular-devkit/build-webpack": "0.1303.4", + "@angular-devkit/core": "13.3.4", "@babel/core": "7.16.12", "@babel/generator": "7.16.8", "@babel/helper-annotate-as-pure": "7.16.7", @@ -17041,7 +17145,7 @@ "@babel/runtime": "7.16.7", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.3.3", + "@ngtools/webpack": "13.3.4", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -17120,12 +17224,12 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1303.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.3.tgz", - "integrity": "sha512-v/z/YgwrAzYn1LfN9OHNxqcThyyg4LLx28hmHzDs5gyDShAK189y34EoT9uQ+lCyQrPVhP7UKACCxCdSwOEJiA==", + "version": "0.1303.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.4.tgz", + "integrity": "sha512-3F10P9XshRXkI/PEmJUcgP4yK4sobaoInQfifzPNOemrS5nXs8y3uEiQuxzyswYx/dymZLV+19sV/eh1WfXnBA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1303.3", + "@angular-devkit/architect": "0.1303.4", "rxjs": "6.6.7" }, "dependencies": { @@ -17147,9 +17251,9 @@ } }, "@angular-devkit/core": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.3.tgz", - "integrity": "sha512-lfQwY9LuVRwcNVzGmyPcwOpb3CAobP4T+c3joR1LLIPS5lzcM0oeCE2bon9N52Ktn4Q/pH98dVtjWL+jSrUADw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.4.tgz", + "integrity": "sha512-gj6i8ksPaT2bvYwI7wKJxLX53pHfTmZc1RaNbAGfZB1/zFNnb3MPj8utTcJSk4qMsGXuDDhiB7hpTKBw8ROaGA==", "dev": true, "requires": { "ajv": "8.9.0", @@ -17178,12 +17282,12 @@ } }, "@angular-devkit/schematics": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.3.tgz", - "integrity": "sha512-S8UNlw6IoR/kxBYbiwesuA7oJGSnFkD6bJwVLhpHdT6Sqrz2/IrjHcNgTJRAvhsOKIbfDtMtXRzl/PUdWEfgyw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.4.tgz", + "integrity": "sha512-gKNpMMoZJjLKdXxjuVembic4GWa4AYV7kU1ou3ZuZoDKtKcig9URISr1wjS+nrhKYz+miFy0zIqSGMMattDlDQ==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.3", + "@angular-devkit/core": "13.3.4", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -17208,15 +17312,15 @@ } }, "@angular/cli": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.3.tgz", - "integrity": "sha512-a+nnzFP1FfnypXpAhrHbIBaJcxzegWLZUvVzJQwt6P2z60IoHdvTVmyNbY89qI0LE1SrAokEUO1zW3Yjmu7fUw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.4.tgz", + "integrity": "sha512-4S5FNjkZgq98zcBVgwkYtMgMRMSVsprCgq7dM8yTxIQh+Np3fYgj5eRJ1+mfFG/kankH2z/TFyuoYiILh2D9Uw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1303.3", - "@angular-devkit/core": "13.3.3", - "@angular-devkit/schematics": "13.3.3", - "@schematics/angular": "13.3.3", + "@angular-devkit/architect": "0.1303.4", + "@angular-devkit/core": "13.3.4", + "@angular-devkit/schematics": "13.3.4", + "@schematics/angular": "13.3.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -17235,25 +17339,25 @@ } }, "@angular/common": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.4.tgz", - "integrity": "sha512-vPZuUGWMXz6r30obBqH+iIG4Feq4YEK/4wUks7PEYGke8MXFPYsNKuHMhKCgYEhabD/4Mo4GEp3i18/3Kk72Mw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.5.tgz", + "integrity": "sha512-teG+itdlw2sOMwYeXkeFe8h32SsNqN0qHHz/v6I9qKHgCLkC/or8A7NtsoCwYSTymIEJJ7DZ1w9VWhM7DSYd1w==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.4.tgz", - "integrity": "sha512-Yf1Dv2BVytjmv5Nnv05hUciUOH/UpKgXG1Ql5XwQG/qGV4eEs33PJBtGsUJTPuddxfRm72JMsbZcoRjVADqbcw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.5.tgz", + "integrity": "sha512-iSQlYevMk5glwZSXTXf2GytykqZWdK3Rr8heIvEPqd8n88MSB3w1KnDc1fnHLF950q/nUR9K+3r4wWPwc8J2IQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.4.tgz", - "integrity": "sha512-wCnt2YOS5EiwWCEv8oCqIfiwUtifs+COhcYH6fpmf/3X9w1yKO1ZMA+OsFQ0IVS4d0YYavm5DTPQ2ep2c0sF5w==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.5.tgz", + "integrity": "sha512-H7A+MZcbB4g5fa6O4giYgrCG1h5whJfIxr4txDtDfolygzwRzqH1PSMfjW/jYyIpaH6XqXMSDHvbXRFGKstboA==", "requires": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -17268,11 +17372,12 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/core": { @@ -17330,25 +17435,25 @@ } }, "@angular/core": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.4.tgz", - "integrity": "sha512-PqPwx9oaV0Bh0m0fdI2jtXUC6s04jfD4vyzB4sjEuRI9pRUnZ6M5hZ5Vn/KJVZyt411MevbJfqzUVf0W+GDZew==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.5.tgz", + "integrity": "sha512-lf+Be8dDRvz8J+QFR2RxS3BBfgGM4eWq4bI1+k/aqDnM6OW4pQXdq8Lzae8SxN48u1NxB1M/1bbc9LcrChrj2Q==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.4.tgz", - "integrity": "sha512-QHyUXOKYITysaJJ4VnmBacE69oz0rw4G7Y2lhPb2V3a1XsWeO61SZEeGMfAWo7sLoDvi2MCEWNEhl1du4dK14A==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.5.tgz", + "integrity": "sha512-jCxxAwf4HkDmKE76/yQmTsbqW3jsxiKyPy32Nh6Bt4r/ww8VDv+sv5YdYNuvvZcuuQ70K+/EPnKFpQgYttvS8A==", "requires": { "tslib": "^2.3.0" } }, "@angular/localize": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.4.tgz", - "integrity": "sha512-T55072wuH4jFweHA0cYhKaomitjxEpyVMro3QA9+SaBMy10yAP2Z1h1vA16A/vXxqVy8oSrmuda4UwMOwZv3Aw==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.5.tgz", + "integrity": "sha512-0MmGvQSBZeKwsOBATWp7Y5rxyGW6OaszLtecKu32VVJSjoDN4M6uMHBMjVVe4IxbyJnbhlSPRSYL9hRFbOve0A==", "requires": { "@babel/core": "7.17.2", "glob": "7.2.0", @@ -17356,11 +17461,12 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/core": { @@ -17408,25 +17514,25 @@ } }, "@angular/platform-browser": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.4.tgz", - "integrity": "sha512-IjBOkjrIVIbbZCDQJRdel0FSDcExSLDgMxcCSQ6pKa6oR/t59BJpSpOhB1W9nRwLtvMmGYkS/oyLFsKk65UoYA==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.5.tgz", + "integrity": "sha512-DPV1J3h1ua4GI9PuXDr8IlzJoC/TR0A/onPTaE6IFOzs1r28vB+vWRRbZURXrTYeWzWVB/2R9tPOqFNoi3zlzA==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.4.tgz", - "integrity": "sha512-UApjgrL6B3QTdSYoCOPzMvFDmSewAHrLpreLYEmADutMWkD0ZcTPux4MJp8awT4P3l6wKzBeGJIKLlk8zsXmGQ==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.5.tgz", + "integrity": "sha512-Mko8/mRlcVsZJQ5zHfc/p7so/ZN16UMynTnksrD7cEgGxDuJosE8m+exqgoT03VCYaOjJtCFXSwdOb/8FOUDZQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.4.tgz", - "integrity": "sha512-UuMAjWHoFKF8b9gFOiqL7fpVXjIr89BtxVES3yXReVq/IZJz9gWup6lYK3KMja+F8HZB8LBUMYgtqjS9iyLV/Q==", + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.5.tgz", + "integrity": "sha512-3yUNyBpUi0KUKP91a3dVQsr9Jfjs4wGxpiFYb3apc7lKT5R1LJqt2O0EchjOgvFyJ6TDOemdCAzKgvSRkDxpMw==", "requires": { "tslib": "^2.3.0" } @@ -19318,11 +19424,25 @@ } } }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jridgewell/resolve-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==" }, + "@jridgewell/set-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", + "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==" + }, "@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", @@ -19362,9 +19482,9 @@ } }, "@ngtools/webpack": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.3.tgz", - "integrity": "sha512-O6EzafKfFuvI3Ju941u7ANs0mT7YDdChbVRhVECCPWOTm3Klr73js3bnCDzaJlxZNjzlG/KeUu5ghrhbMrHjSw==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.4.tgz", + "integrity": "sha512-dNDNeAOwtpX5A7TTEsgDbkg4jTmAJHD96qLqcpJqfBg8nZ4mqn6E0HinX9HZKaCST1/75T6GsFo1Muc4MsHYgA==", "dev": true, "requires": {} }, @@ -19473,13 +19593,13 @@ "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" }, "@schematics/angular": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.3.tgz", - "integrity": "sha512-kX5ghVCmWHcMN+g0pUaFuIJzwrXsVnK4bfid8DckU4EEtfFSv3UA5I1QNJRgpCPxTPhNEAk+3ePN8nzDSjdU+w==", + "version": "13.3.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.4.tgz", + "integrity": "sha512-Cta11k965Igz2kWj60KQ/9z6RFAg9FjZ8i1TH4nyROJs9nWemWPQNA+OJFuXrEy6Ldpk7yJ5cWgJsyryGB25PA==", "dev": true, "requires": { - "@angular-devkit/core": "13.3.3", - "@angular-devkit/schematics": "13.3.3", + "@angular-devkit/core": "13.3.4", + "@angular-devkit/schematics": "13.3.4", "jsonc-parser": "3.0.0" } }, @@ -19585,9 +19705,9 @@ } }, "@types/babel__traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.0.tgz", - "integrity": "sha512-r8aveDbd+rzGP+ykSdF3oPuTVRWRfbBiHl0rVDM2yNEmSMXfkObQLV46b4RnCv3Lra51OlfnZhkkFaDl2MIRaA==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -19745,9 +19865,9 @@ "dev": true }, "@types/node": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.29.tgz", - "integrity": "sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA==", + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", + "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", "devOptional": true }, "@types/parse-json": { @@ -19775,9 +19895,9 @@ "dev": true }, "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, "@types/serve-index": { @@ -20046,9 +20166,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-globals": { @@ -20646,21 +20766,23 @@ "optional": true }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { @@ -20678,6 +20800,12 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -20685,10 +20813,13 @@ "dev": true }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } } } }, @@ -20872,9 +21003,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==" + "version": "1.0.30001334", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", + "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==" }, "caseless": { "version": "0.12.0", @@ -21357,9 +21488,9 @@ } }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "cookie-signature": { @@ -21421,12 +21552,12 @@ "dev": true }, "core-js-compat": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", - "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.3.tgz", + "integrity": "sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw==", "dev": true, "requires": { - "browserslist": "^4.20.2", + "browserslist": "^4.20.3", "semver": "7.0.0" }, "dependencies": { @@ -21723,9 +21854,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.15.tgz", - "integrity": "sha512-hzzmpfqOhsFmvQ9nu87qNQJ8ksofJLBIKkgaYWFapV+W8UGHCxtg5uf69ZtlDSS8rb4ax3lMgpqBnLUQETjCJA==", + "version": "14.18.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz", + "integrity": "sha512-X3bUMdK/VmvrWdoTkz+VCn6nwKwrKCFTHtqwBIaQJNx4RUIBBUFXM00bqPz/DsDd+Icjmzm6/tyYZzeGVqb6/Q==", "optional": true }, "ansi-styles": { @@ -22019,9 +22150,9 @@ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-newline": { @@ -22153,9 +22284,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.119", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", - "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==" + "version": "1.4.126", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.126.tgz", + "integrity": "sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA==" }, "emittery": { "version": "0.8.1", @@ -22598,38 +22729,39 @@ } }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -22650,6 +22782,12 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -22657,10 +22795,13 @@ "dev": true }, "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "safe-buffer": { "version": "5.2.1", @@ -22812,17 +22953,17 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -23234,16 +23375,24 @@ "dev": true }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + } } }, "http-parser-js": { @@ -26262,9 +26411,9 @@ "dev": true }, "node-releases": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", - "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" }, "nopt": { "version": "5.0.0", @@ -26395,9 +26544,9 @@ } }, "cacache": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.6.tgz", - "integrity": "sha512-9a/MLxGaw3LEGes0HaPez2RgZWDV6X0jrgChsuxfEh8xoDoYGxaGrkMe7Dlyjrb655tA/b8fX0qlUg6Ii5MBvw==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.7.tgz", + "integrity": "sha512-a4zfQpp5vm4Ipdvbj+ZrPonikRhm6WBEd4zT1Yc1DXsmAxrPgDwWBLF/u/wTVXSFPIgOJ1U3ghSa2Xm4s3h28w==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -26545,6 +26694,12 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -26580,9 +26735,9 @@ "dev": true }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -26744,12 +26899,12 @@ } }, "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.0", "retry": "^0.13.1" }, "dependencies": { @@ -27493,13 +27648,13 @@ "dev": true }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -27921,24 +28076,24 @@ } }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -27958,6 +28113,12 @@ } } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -28028,19 +28189,25 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "set-blocking": { @@ -28079,6 +28246,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "devOptional": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -28322,9 +28500,9 @@ } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "string_decoder": { @@ -28840,9 +29018,9 @@ } }, "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", diff --git a/src-ui/package.json b/src-ui/package.json index 9e6bdf767..d94ce5a89 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -13,14 +13,14 @@ }, "private": true, "dependencies": { - "@angular/common": "~13.3.4", - "@angular/compiler": "~13.3.4", - "@angular/core": "~13.3.4", - "@angular/forms": "~13.3.4", - "@angular/localize": "~13.3.4", - "@angular/platform-browser": "~13.3.4", - "@angular/platform-browser-dynamic": "~13.3.4", - "@angular/router": "~13.3.4", + "@angular/common": "~13.3.5", + "@angular/compiler": "~13.3.5", + "@angular/core": "~13.3.5", + "@angular/forms": "~13.3.5", + "@angular/localize": "~13.3.5", + "@angular/platform-browser": "~13.3.5", + "@angular/platform-browser-dynamic": "~13.3.5", + "@angular/router": "~13.3.5", "@ng-bootstrap/ng-bootstrap": "^12.1.0", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", @@ -38,11 +38,11 @@ }, "devDependencies": { "@angular-builders/jest": "13.0.3", - "@angular-devkit/build-angular": "~13.3.3", - "@angular/cli": "~13.3.3", - "@angular/compiler-cli": "~13.3.4", + "@angular-devkit/build-angular": "~13.3.4", + "@angular/cli": "~13.3.4", + "@angular/compiler-cli": "~13.3.5", "@types/jest": "27.4.1", - "@types/node": "^17.0.29", + "@types/node": "^17.0.30", "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "27.5.1", From 666641f990c7e5d32b0df129f2eb839713fdf684 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 28 Apr 2022 21:07:25 -0700 Subject: [PATCH 50/86] reset password field visibility --- .../app/components/document-detail/document-detail.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index f6fdc1b86..4577b6f4d 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -244,6 +244,7 @@ export class DocumentDetailComponent updateComponent(doc: PaperlessDocument) { this.document = doc + this.requiresPassword = false this.documentsService .getMetadata(doc.id) .pipe(first()) From 49fad14920c8d58f1a641c378f5a09e74aa53033 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sat, 30 Apr 2022 10:33:09 -0700 Subject: [PATCH 51/86] Updates the Dockerfile to facilitate local image builds, adds documentation for how to build, adds registry caching for final image too --- .github/scripts/get-build-json.py | 5 +- .github/workflows/ci.yml | 86 +++++++------------------------ Dockerfile | 40 +++++++++----- build-docker-image.sh | 22 +++----- docs/extending.rst | 8 ++- 5 files changed, 62 insertions(+), 99 deletions(-) diff --git a/.github/scripts/get-build-json.py b/.github/scripts/get-build-json.py index 42c37d695..42299abae 100755 --- a/.github/scripts/get-build-json.py +++ b/.github/scripts/get-build-json.py @@ -53,10 +53,7 @@ def _main(): git_tag = None extra_config = {} - if args.package == "frontend": - # Version is just the branch or tag name - version = branch_name - elif args.package in pipfile_data["default"]: + if args.package in pipfile_data["default"]: # Read the version from Pipfile.lock pkg_data = pipfile_data["default"][args.package] pkg_version = pkg_data["version"].split("==")[-1] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe52da55d..a637dc78a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -104,15 +104,6 @@ jobs: echo ${build_json} echo ::set-output name=jbig2enc-json::${build_json} - - - name: Setup frontend image - id: frontend-setup - run: | - build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py frontend) - - echo ${build_json} - - echo ::set-output name=frontend-json::${build_json} outputs: @@ -124,8 +115,6 @@ jobs: jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json}} - frontend-json: ${{ steps.frontend-setup.outputs.frontend-json}} - build-qpdf-debs: name: qpdf needs: @@ -175,57 +164,6 @@ jobs: PIKEPDF_GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }} PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} - build-frontend: - name: Compile frontend - concurrency: - group: ${{ github.workflow }}-build-frontend-${{ github.ref_name }} - cancel-in-progress: false - needs: - - prepare-docker-build - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Login to Github Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - - name: Compile frontend - uses: docker/build-push-action@v2 - with: - context: . - file: ./docker-builders/Dockerfile.frontend - tags: ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} - # The compilation is identical between different platforms - # The buildx and QEMU setup is left, just in case that ever changes - # But the platform is set to the runner's native for speedup - platforms: linux/amd64 - push: true - cache-from: type=registry,ref=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).cache_tag }} - cache-to: type=registry,mode=max,ref=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).cache_tag }} - - - name: Export frontend artifact from docker - run: | - docker create --name frontend-extract ${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).image_tag }} - docker cp frontend-extract:/src/src/documents/static/frontend src/documents/static/frontend/ - - - name: Upload frontend artifact - uses: actions/upload-artifact@v3 - with: - name: frontend-compiled - path: src/documents/static/frontend/ - # build and push image to docker hub. build-docker-image: runs-on: ubuntu-20.04 @@ -238,7 +176,6 @@ jobs: - build-jbig2enc - build-qpdf-debs - build-pikepdf-wheel - - build-frontend steps: - name: Check pushing to Docker Hub @@ -297,18 +234,33 @@ jobs: tags: ${{ steps.docker-meta.outputs.tags }} labels: ${{ steps.docker-meta.outputs.labels }} build-args: | - REPO=${{ github.repository }} JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }} QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} - FRONTEND_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.frontend-json).version }} - cache-from: type=gha - cache-to: type=gha,mode=max + # Get cache layers from this branch, then dev, then main + # This allows new branches to get at least some cache benefits, generally from dev + cache-from: | + type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:${{ github.ref_name }} + type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:dev + type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:main + cache-to: | + type=registry,mode=max,ref=ghcr.io/${{ github.repository }}/builder/cache/app:${{ github.ref_name }} - name: Inspect image run: | docker buildx imagetools inspect ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} + - + name: Export frontend artifact from docker + run: | + docker create --name frontend-extract ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} + docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/ + - + name: Upload frontend artifact + uses: actions/upload-artifact@v3 + with: + name: frontend-compiled + path: src/documents/static/frontend/ build-release: needs: diff --git a/Dockerfile b/Dockerfile index 8d2efca6b..779b6e251 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,32 @@ -# Default to pulling from the main repo registry when manually building -ARG REPO="paperless-ngx/paperless-ngx" +# Pull the installer images from the library +# These are all built previously +# They provide either a .deb or .whl -# These are all built previously in the pipeline -# They provide either a .deb, .whl or whatever npm outputs ARG JBIG2ENC_VERSION ARG QPDF_VERSION ARG PIKEPDF_VERSION ARG PSYCOPG2_VERSION -ARG FRONTEND_VERSION -FROM ghcr.io/${REPO}/builder/jbig2enc:${JBIG2ENC_VERSION} as jbig2enc-builder -FROM ghcr.io/${REPO}/builder/qpdf:${QPDF_VERSION} as qpdf-builder -FROM ghcr.io/${REPO}/builder/pikepdf:${PIKEPDF_VERSION} as pikepdf-builder -FROM ghcr.io/${REPO}/builder/psycopg2:${PSYCOPG2_VERSION} as psycopg2-builder -FROM ghcr.io/${REPO}/builder/frontend:${FRONTEND_VERSION} as compile-frontend +FROM ghcr.io/paperless-ngx/paperless-ngx/builder/jbig2enc:${JBIG2ENC_VERSION} as jbig2enc-builder +FROM ghcr.io/paperless-ngx/paperless-ngx/builder/qpdf:${QPDF_VERSION} as qpdf-builder +FROM ghcr.io/paperless-ngx/paperless-ngx/builder/pikepdf:${PIKEPDF_VERSION} as pikepdf-builder +FROM ghcr.io/paperless-ngx/paperless-ngx/builder/psycopg2:${PSYCOPG2_VERSION} as psycopg2-builder + +FROM --platform=$BUILDPLATFORM node:16-bullseye-slim AS compile-frontend + +# This stage compiles the frontend +# This stage runs once for the native platform, as the outputs are not +# dependent on target arch +# Inputs: None + +COPY ./src-ui /src/src-ui + +WORKDIR /src/src-ui +RUN set -eux \ + && npm update npm -g \ + && npm ci --no-optional +RUN set -eux \ + && ./node_modules/.bin/ng build --configuration production FROM python:3.9-slim-bullseye as main-app @@ -156,8 +169,11 @@ COPY gunicorn.conf.py . WORKDIR /usr/src/paperless/src/ -# copy app -COPY --from=compile-frontend /src/src/ ./ +# copy backend +COPY ./src ./ + +# copy frontend +COPY --from=compile-frontend /src/src/documents/static/frontend/ ./documents/static/frontend/ # add users, setup scripts RUN set -eux \ diff --git a/build-docker-image.sh b/build-docker-image.sh index e3bdd7998..ed20589f4 100755 --- a/build-docker-image.sh +++ b/build-docker-image.sh @@ -2,15 +2,13 @@ # Helper script for building the Docker image locally. # Parses and provides the nessecary versions of other images to Docker -# before passing in the rest of script args. A future enhancement -# would be to combine this with the CI script +# before passing in the rest of script args. # First Argument: The Dockerfile to build # Other Arguments: Additional arguments to docker build # Example Usage: # ./build-docker-image.sh Dockerfile -t paperless-ngx:my-awesome-feature -# ./build-docker-image.sh docker-builders/Dockerfile.qpdf -t paperless-ngx-build-qpdf:x.y.z set -eux @@ -28,23 +26,17 @@ psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | # Read this from the other config file qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g') jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g') -# Get the branch name -frontend_version=$(git rev-parse --abbrev-ref HEAD) - -# Get Git tags for building -# psycopg2 uses X_Y_Z git tags -psycopg2_git_tag=${psycopg2_version//./_} -# pikepdf uses vX.Y.Z -pikepdf_git_tag="v${pikepdf_version}" +# Get the branch name (used for caching) +branch_name=$(git rev-parse --abbrev-ref HEAD) # https://docs.docker.com/develop/develop-images/build_enhancements/ +# Required to use cache-from export DOCKER_BUILDKIT=1 docker build --file "$1" \ + --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:"${branch_name}" \ + --cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev \ --build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \ --build-arg QPDF_VERSION="${qpdf_version}" \ --build-arg PIKEPDF_VERSION="${pikepdf_version}" \ - --build-arg PIKEPDF_GIT_TAG="${pikepdf_git_tag}" \ - --build-arg PSYCOPG2_VERSION="${psycopg2_version}" \ - --build-arg PSYCOPG2_GIT_TAG="${psycopg2_git_tag}" \ - --build-arg FRONTEND_VERSION="${frontend_version}" "${@:2}" . + --build-arg PSYCOPG2_VERSION="${psycopg2_version}" "${@:2}" . diff --git a/docs/extending.rst b/docs/extending.rst index 8b276dacc..199cd78ce 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -334,11 +334,17 @@ directory. Building the Docker image ========================= +The docker image is primarily built by the GitHub actions workflow, but it can be +faster when developing to build and tag an image locally. + +To provide the build arguments automatically, build the image using the helper +script ``build-docker-image.sh``. + Building the docker image from source: .. code:: shell-session - docker build . -t + ./build-docker-image.sh Dockerfile -t Extending Paperless =================== From 45440eec1dcb7f2315bd24b0489a4191df34103d Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:40:07 -0700 Subject: [PATCH 52/86] handle very old date strings --- .../document-detail.component.ts | 17 +++++++---------- src-ui/src/app/pipes/custom-date.pipe.ts | 2 ++ src-ui/src/app/utils/date.ts | 5 +++++ 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 src-ui/src/app/utils/date.ts diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index f6fdc1b86..fff3b6e21 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -34,6 +34,7 @@ import { } from 'rxjs/operators' import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions' import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type' +import { normalizeDateStr } from 'src/app/utils/date' @Component({ selector: 'app-document-detail', @@ -146,7 +147,7 @@ export class DocumentDetailComponent .pipe(takeUntil(this.unsubscribeNotifier)) .subscribe((changes) => { if (this.ogDate) { - let newDate = new Date(changes['created']) + let newDate = new Date(normalizeDateStr(changes['created'])) newDate.setHours( this.ogDate.getHours(), this.ogDate.getMinutes(), @@ -154,7 +155,7 @@ export class DocumentDetailComponent this.ogDate.getMilliseconds() ) this.documentForm.patchValue( - { created: this.formatDate(newDate) }, + { created: newDate.toISOString() }, { emitEvent: false } ) } @@ -199,22 +200,22 @@ export class DocumentDetailComponent this.updateComponent(doc) } - this.ogDate = new Date(doc.created) + this.ogDate = new Date(normalizeDateStr(doc.created.toString())) // Initialize dirtyCheck this.store = new BehaviorSubject({ title: doc.title, content: doc.content, - created: this.formatDate(this.ogDate), + created: this.ogDate.toISOString(), correspondent: doc.correspondent, document_type: doc.document_type, archive_serial_number: doc.archive_serial_number, tags: [...doc.tags], }) - // ensure we're always starting with 24-char ISO8601 string + // start with ISO8601 string this.documentForm.patchValue( - { created: this.formatDate(this.ogDate) }, + { created: this.ogDate.toISOString() }, { emitEvent: false } ) @@ -485,8 +486,4 @@ export class DocumentDetailComponent this.password = (event.target as HTMLInputElement).value } } - - formatDate(date: Date): string { - return date.toISOString().split('.')[0] + 'Z' - } } diff --git a/src-ui/src/app/pipes/custom-date.pipe.ts b/src-ui/src/app/pipes/custom-date.pipe.ts index bf5ab1457..bd4833d04 100644 --- a/src-ui/src/app/pipes/custom-date.pipe.ts +++ b/src-ui/src/app/pipes/custom-date.pipe.ts @@ -1,6 +1,7 @@ import { DatePipe } from '@angular/common' import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core' import { SettingsService, SETTINGS_KEYS } from '../services/settings.service' +import { normalizeDateStr } from '../utils/date' const FORMAT_TO_ISO_FORMAT = { longDate: 'y-MM-dd', @@ -33,6 +34,7 @@ export class CustomDatePipe implements PipeTransform { this.settings.get(SETTINGS_KEYS.DATE_LOCALE) || this.defaultLocale let f = format || this.settings.get(SETTINGS_KEYS.DATE_FORMAT) + if (typeof value == 'string') value = normalizeDateStr(value) if (l == 'iso-8601') { return this.datePipe.transform(value, FORMAT_TO_ISO_FORMAT[f], timezone) } else { diff --git a/src-ui/src/app/utils/date.ts b/src-ui/src/app/utils/date.ts new file mode 100644 index 000000000..de5a89542 --- /dev/null +++ b/src-ui/src/app/utils/date.ts @@ -0,0 +1,5 @@ +// see https://github.com/dateutil/dateutil/issues/878 , JS Date does not +// seem to accept these strings as valid dates so we must normalize offset +export function normalizeDateStr(dateStr: string): string { + return dateStr.replace(/-(\d\d):\d\d:\d\d/gm, `-$1:00`) +} From 0ba1ba55bd998c6689fe373e2fa4e89c0d0fd23b Mon Sep 17 00:00:00 2001 From: Oliver Lippert Date: Sun, 1 May 2022 08:41:38 +0200 Subject: [PATCH 53/86] add test for filename expectation with modified timezone Signed-off-by: Oliver Lippert #267 --- src/documents/tests/test_document_model.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/documents/tests/test_document_model.py b/src/documents/tests/test_document_model.py index a99d6dd18..bea8b6b91 100644 --- a/src/documents/tests/test_document_model.py +++ b/src/documents/tests/test_document_model.py @@ -3,6 +3,7 @@ import tempfile from pathlib import Path from unittest import mock +import pytz from django.test import override_settings from django.test import TestCase from django.utils import timezone @@ -55,6 +56,24 @@ class TestDocument(TestCase): ) self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf") + def test_file_name_with_timezone(self): + + doc = Document( + mime_type="application/pdf", + title="test", + created=timezone.datetime( + 2020, + 12, + 25, + 0, + 0, + 0, + 0, + pytz.timezone("Europe/Berlin"), + ), + ) + self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf") + def test_file_name_jpg(self): doc = Document( From 182cea3385cc4ac35b157d0b9d510f248c939314 Mon Sep 17 00:00:00 2001 From: Oliver Lippert Date: Sun, 1 May 2022 08:54:41 +0200 Subject: [PATCH 54/86] always use datetime.date.isoformat to generate filename fixes #267 Signed-off-by: Oliver Lippert --- src/documents/models.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/documents/models.py b/src/documents/models.py index a1a787325..8f531e401 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -11,7 +11,6 @@ from django.conf import settings from django.contrib.auth.models import User from django.db import models from django.utils import timezone -from django.utils.timezone import is_aware from django.utils.translation import gettext_lazy as _ from documents.parsers import get_default_file_extension @@ -210,10 +209,8 @@ class Document(models.Model): verbose_name_plural = _("documents") def __str__(self): - if is_aware(self.created): - created = timezone.localdate(self.created).isoformat() - else: - created = datetime.date.isoformat(self.created) + created = datetime.date.isoformat(self.created) + if self.correspondent and self.title: return f"{created} {self.correspondent} {self.title}" else: From 3c5f509bc71d26076d48d1734563a033339c605f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 20:07:08 +0000 Subject: [PATCH 55/86] Bump @ng-bootstrap/ng-bootstrap from 12.1.0 to 12.1.1 in /src-ui Bumps [@ng-bootstrap/ng-bootstrap](https://github.com/ng-bootstrap/ng-bootstrap) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/ng-bootstrap/ng-bootstrap/releases) - [Changelog](https://github.com/ng-bootstrap/ng-bootstrap/blob/master/CHANGELOG.md) - [Commits](https://github.com/ng-bootstrap/ng-bootstrap/compare/12.1.0...12.1.1) --- updated-dependencies: - dependency-name: "@ng-bootstrap/ng-bootstrap" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 14 +++++++------- src-ui/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index d1b5fcb37..924636a5e 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -16,7 +16,7 @@ "@angular/platform-browser": "~13.3.5", "@angular/platform-browser-dynamic": "~13.3.5", "@angular/router": "~13.3.5", - "@ng-bootstrap/ng-bootstrap": "^12.1.0", + "@ng-bootstrap/ng-bootstrap": "^12.1.1", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", @@ -3375,9 +3375,9 @@ } }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.0.tgz", - "integrity": "sha512-4/b1zn5esthHlH1wAHWB2cShwIjuBd1RvxFwsc2Y9tkDbhNQ8pZ7ltNpoKHlQNLJkmethB+KyqOJSsZUSa138g==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.1.tgz", + "integrity": "sha512-g0/b+qecgsCDspsctKcr5ihjJgtEAePs3m9l7OfioSSBGkjBiOr1ghbixNMwJx4drSVmVWGHSGZyLjDGmd1Wdg==", "dependencies": { "tslib": "^2.3.0" }, @@ -19458,9 +19458,9 @@ } }, "@ng-bootstrap/ng-bootstrap": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.0.tgz", - "integrity": "sha512-4/b1zn5esthHlH1wAHWB2cShwIjuBd1RvxFwsc2Y9tkDbhNQ8pZ7ltNpoKHlQNLJkmethB+KyqOJSsZUSa138g==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.1.tgz", + "integrity": "sha512-g0/b+qecgsCDspsctKcr5ihjJgtEAePs3m9l7OfioSSBGkjBiOr1ghbixNMwJx4drSVmVWGHSGZyLjDGmd1Wdg==", "requires": { "tslib": "^2.3.0" } diff --git a/src-ui/package.json b/src-ui/package.json index d94ce5a89..830b67f79 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -21,7 +21,7 @@ "@angular/platform-browser": "~13.3.5", "@angular/platform-browser-dynamic": "~13.3.5", "@angular/router": "~13.3.5", - "@ng-bootstrap/ng-bootstrap": "^12.1.0", + "@ng-bootstrap/ng-bootstrap": "^12.1.1", "@ng-select/ng-select": "^8.1.1", "@ngneat/dirty-check-forms": "^3.0.2", "@popperjs/core": "^2.11.4", From dce4166bc8a6a0ca407e1e74ee4efcd489315753 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Thu, 28 Apr 2022 11:20:40 -0700 Subject: [PATCH 56/86] First changes for using semver everywhere --- .github/workflows/ci.yml | 6 ++++++ docs/administration.rst | 17 +++++++++++++++++ docs/conf.py | 6 ++++-- src/documents/views.py | 29 +++++++++++++++++------------ src/paperless/middleware.py | 2 +- src/paperless/version.py | 9 ++++++++- 6 files changed, 53 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe52da55d..8fe71ac9a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -260,8 +260,14 @@ jobs: ghcr.io/${{ github.repository }} name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }} tags: | + # Tag branches with branch name type=ref,event=branch + # Tag tags with tag name type=ref,event=tag + # Process semver tags + # For a tag x.y.z or vX.Y.Z, output an x.y.z and x.y image tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} - name: Checkout uses: actions/checkout@v3 diff --git a/docs/administration.rst b/docs/administration.rst index 85f573460..1139c3a69 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -117,6 +117,23 @@ Then you can start paperless-ngx with ``-d`` to have it run in the background. image: ghcr.io/paperless-ngx/paperless-ngx:latest + .. note:: + In version 1.7.1 and onwards, the Docker image can now pinned to a release series. + This is often combined with automatic updaters such as Watchtower to allow safer + unattended upgrading to new bugfix releases only. It is still recommended to always + review release notes before upgrading. To ping your install to a release series, edit + the ``docker-compose.yml`` find the line that says + + .. code:: + + image: ghcr.io/paperless-ngx/paperless-ngx:latest + + and replace the version with the series you want to track, for example: + + .. code:: + + image: ghcr.io/paperless-ngx/paperless-ngx:1.7 + Bare Metal Route ================ diff --git a/docs/conf.py b/docs/conf.py index 19efbbdf8..0f30772ea 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -2,6 +2,8 @@ import sphinx_rtd_theme __version__ = None +__full_version_str__ = None +__major_minor_version_str__ = None exec(open("../src/paperless/version.py").read()) @@ -41,9 +43,9 @@ copyright = "2015-2022, Daniel Quinn, Jonas Winkler, and the paperless-ngx team" # # The short X.Y version. -version = ".".join([str(_) for _ in __version__[:2]]) +version = __major_minor_version_str__ # The full version, including alpha/beta/rc tags. -release = ".".join([str(_) for _ in __version__[:3]]) +release = __full_version_str__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/src/documents/views.py b/src/documents/views.py index 831e68b68..d29802394 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -676,28 +676,33 @@ class RemoteVersionView(GenericAPIView): def get(self, request, format=None): remote_version = "0.0.0" is_greater_than_current = False + current_version = packaging_version.parse(version.__full_version_str__) # TODO: this can likely be removed when frontend settings are saved to DB feature_is_set = settings.ENABLE_UPDATE_CHECK != "default" if feature_is_set and settings.ENABLE_UPDATE_CHECK: try: - with urllib.request.urlopen( - "https://api.github.com/repos/" - + "paperless-ngx/paperless-ngx/releases/latest", - ) as response: + req = urllib.request.Request( + "https://api.github.com/repos/paperless-ngx/" + "paperless-ngx/releases/latest", + ) + # Ensure a JSON response + req.add_header("Accept", "application/json") + + with urllib.request.urlopen(req) as response: remote = response.read().decode("utf-8") try: remote_json = json.loads(remote) - remote_version = remote_json["tag_name"].replace("ngx-", "") + remote_version = remote_json["tag_name"].removeprefix("ngx-") except ValueError: - logger.debug("An error occured parsing remote version json") + logger.debug("An error occurred parsing remote version json") except urllib.error.URLError: - logger.debug("An error occured checking for available updates") + logger.debug("An error occurred checking for available updates") - current_version = ".".join([str(_) for _ in version.__version__[:3]]) - is_greater_than_current = packaging_version.parse( - remote_version, - ) > packaging_version.parse( - current_version, + is_greater_than_current = ( + packaging_version.parse( + remote_version, + ) + > current_version ) return Response( diff --git a/src/paperless/middleware.py b/src/paperless/middleware.py index f82ba2435..ddf12812b 100644 --- a/src/paperless/middleware.py +++ b/src/paperless/middleware.py @@ -11,6 +11,6 @@ class ApiVersionMiddleware: if request.user.is_authenticated: versions = settings.REST_FRAMEWORK["ALLOWED_VERSIONS"] response["X-Api-Version"] = versions[len(versions) - 1] - response["X-Version"] = ".".join([str(_) for _ in version.__version__]) + response["X-Version"] = version.__full_version_str__ return response diff --git a/src/paperless/version.py b/src/paperless/version.py index 8c908319f..44d20435a 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1 +1,8 @@ -__version__ = (1, 7, 0) +from typing import Final +from typing import Tuple + +__version__: Final[Tuple[int, int, int]] = (1, 7, 0) +# Version string like X.Y.Z +__full_version_str__: Final[str] = ".".join(map(str, __version__)) +# Version string like X.Y +__major_minor_version_str__: Final[str] = ".".join(map(str, __version__[:-1])) From b9a2652013773eb0f5e92540ec68b9fbd3516a07 Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Thu, 28 Apr 2022 13:44:37 -0700 Subject: [PATCH 57/86] Fixing up more locations of the old tag naming style --- .github/release-drafter.yml | 1 - .github/workflows/ci.yml | 17 +++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index d3e2e165f..b52e08f35 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -30,7 +30,6 @@ replacers: # Changes "Feature: Update checker" to "Update checker" replace: '' change-template: '- $TITLE @$AUTHOR (#$NUMBER)' change-title-escapes: '\<*_&#@' -tag-prefix: "ngx-" template: | # Changelog diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8fe71ac9a..980a3570a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,9 @@ name: ci on: push: tags: - - ngx-* - - beta-* + - 'v[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+' + - 'beta-[0-9]+.[0-9]+.[0-9]+-rc[0-9]+' branches-ignore: - 'translations**' pull_request: @@ -53,7 +54,7 @@ jobs: prepare-docker-build: name: Prepare Docker Pipeline Data - if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/ngx-') || startsWith(github.ref, 'refs/tags/beta-')) + if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/beta-')) runs-on: ubuntu-20.04 needs: - documentation @@ -388,7 +389,7 @@ jobs: runs-on: ubuntu-20.04 needs: - build-release - if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'ngx-') || startsWith(github.ref_name, 'beta-')) + if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'v') || startsWith(github.ref_name, 'beta-')) steps: - name: Download release artifact @@ -400,11 +401,11 @@ jobs: name: Get version id: get_version run: | - if [[ $GITHUB_REF == refs/tags/ngx-* ]]; then - echo ::set-output name=version::${GITHUB_REF#refs/tags/ngx-} + if [[ $GITHUB_REF == refs/tags/v* ]]; then + echo ::set-output name=version::${{ github.ref_name }} echo ::set-output name=prerelease::false elif [[ $GITHUB_REF == refs/tags/beta-* ]]; then - echo ::set-output name=version::${GITHUB_REF#refs/tags/beta-} + echo ::set-output name=version::${{ github.ref_name }} echo ::set-output name=prerelease::true fi - @@ -413,7 +414,7 @@ jobs: uses: release-drafter/release-drafter@v5 with: name: Paperless-ngx ${{ steps.get_version.outputs.version }} - tag: ngx-${{ steps.get_version.outputs.version }} + tag: ${{ steps.get_version.outputs.version }} version: ${{ steps.get_version.outputs.version }} prerelease: ${{ steps.get_version.outputs.prerelease }} publish: true # ensures release is not marked as draft From 2ef2a561efcfd823223220896d8f64cde38ca7eb Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sun, 1 May 2022 13:58:24 -0700 Subject: [PATCH 58/86] Fixes beta or rcs from updating the latest Docker tag --- .github/workflows/ci.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 980a3570a..bbbc12032 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,9 +3,10 @@ name: ci on: push: tags: + # https://semver.org/#spec-item-2 - 'v[0-9]+.[0-9]+.[0-9]+' - - 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+' - - 'beta-[0-9]+.[0-9]+.[0-9]+-rc[0-9]+' + # https://semver.org/#spec-item-9 + - 'v[0-9]+.[0-9]+.[0-9]+-beta.rc[0-9]+' branches-ignore: - 'translations**' pull_request: @@ -54,7 +55,7 @@ jobs: prepare-docker-build: name: Prepare Docker Pipeline Data - if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/v') || startsWith(github.ref, 'refs/tags/beta-')) + if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v')) runs-on: ubuntu-20.04 needs: - documentation @@ -263,8 +264,6 @@ jobs: tags: | # Tag branches with branch name type=ref,event=branch - # Tag tags with tag name - type=ref,event=tag # Process semver tags # For a tag x.y.z or vX.Y.Z, output an x.y.z and x.y image tag type=semver,pattern={{version}} @@ -389,7 +388,7 @@ jobs: runs-on: ubuntu-20.04 needs: - build-release - if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'v') || startsWith(github.ref_name, 'beta-')) + if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'v') || contains(github.ref_name, '-beta.rc')) steps: - name: Download release artifact @@ -401,12 +400,11 @@ jobs: name: Get version id: get_version run: | - if [[ $GITHUB_REF == refs/tags/v* ]]; then - echo ::set-output name=version::${{ github.ref_name }} - echo ::set-output name=prerelease::false - elif [[ $GITHUB_REF == refs/tags/beta-* ]]; then - echo ::set-output name=version::${{ github.ref_name }} + echo ::set-output name=version::${{ github.ref_name }} + if [[ ${{ contains(github.ref_name, '-beta.rc') }} == 'true' ]]; then echo ::set-output name=prerelease::true + else + echo ::set-output name=prerelease::false fi - name: Create Release and Changelog From 2940686fba4c4e564a1994a89d571bc0eb7b2a80 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 1 May 2022 14:03:40 -0700 Subject: [PATCH 59/86] show errors on invalid date input --- .../document-detail.component.html | 4 +- .../document-detail.component.ts | 39 +++++++++++-------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index f9fecdf85..118f917ec 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -162,8 +162,8 @@
  -   -   +   +   diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 05c440450..9b223f22a 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -146,18 +146,24 @@ export class DocumentDetailComponent this.documentForm.valueChanges .pipe(takeUntil(this.unsubscribeNotifier)) .subscribe((changes) => { + this.error = null if (this.ogDate) { - let newDate = new Date(normalizeDateStr(changes['created'])) - newDate.setHours( - this.ogDate.getHours(), - this.ogDate.getMinutes(), - this.ogDate.getSeconds(), - this.ogDate.getMilliseconds() - ) - this.documentForm.patchValue( - { created: newDate.toISOString() }, - { emitEvent: false } - ) + try { + let newDate = new Date(normalizeDateStr(changes['created'])) + newDate.setHours( + this.ogDate.getHours(), + this.ogDate.getMinutes(), + this.ogDate.getSeconds(), + this.ogDate.getMilliseconds() + ) + this.documentForm.patchValue( + { created: newDate.toISOString() }, + { emitEvent: false } + ) + } catch (e) { + // catch this before we try to save and simulate an api error + this.error = { created: e.message } + } } Object.assign(this.document, this.documentForm.value) @@ -320,16 +326,17 @@ export class DocumentDetailComponent this.documentsService .get(this.documentId) .pipe(first()) - .subscribe( - (doc) => { + .subscribe({ + next: (doc) => { Object.assign(this.document, doc) this.title = doc.title this.documentForm.patchValue(doc) + this.openDocumentService.setDirty(doc.id, false) }, - (error) => { + error: () => { this.router.navigate(['404']) - } - ) + }, + }) } save() { From e16ab324f4eba2d2f7ddf920b78e85318604a4ee Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 1 May 2022 21:38:04 -0700 Subject: [PATCH 60/86] Always accept yyyy-mm-dd date inputs --- .../app/utils/ngb-date-parser-formatter.ts | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/utils/ngb-date-parser-formatter.ts b/src-ui/src/app/utils/ngb-date-parser-formatter.ts index ff7706819..5d95b21a6 100644 --- a/src-ui/src/app/utils/ngb-date-parser-formatter.ts +++ b/src-ui/src/app/utils/ngb-date-parser-formatter.ts @@ -51,11 +51,22 @@ export class LocalizedDateParserFormatter extends NgbDateParserFormatter { const dateSeparator = inputFormat.replace(/[dmy]/gi, '').charAt(0) if (this.separatorRegExp.test(value)) { - // split on separator, pad & re-join without separator - value = value - .split(this.separatorRegExp) - .map((segment) => segment.padStart(2, '0')) - .join('') + let segments = value.split(this.separatorRegExp) + + // always accept strict yyyy*mm*dd format even if thats not the input format since we can be certain its not yyyy*dd*mm + if ( + value.length == 10 && + segments.length == 3 && + segments[0].length == 4 + ) { + return inputFormat + .replace('yyyy', segments[0]) + .replace('mm', segments[1]) + .replace('dd', segments[2]) + } else { + // otherwise pad & re-join without separator + value = segments.map((segment) => segment.padStart(2, '0')).join('') + } } if (value.length == 4 && inputFormat.substring(0, 4) != 'yyyy') { From 67dd86988b637f99bc48a83179f22271fbddee9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 May 2022 20:06:20 +0000 Subject: [PATCH 61/86] Bump jest from 27.5.1 to 28.0.3 in /src-ui Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 27.5.1 to 28.0.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.0.3/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src-ui/package-lock.json | 8168 ++++++++++++++++++++++++++++++++++---- src-ui/package.json | 2 +- 2 files changed, 7371 insertions(+), 799 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 924636a5e..a04a18a8b 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -40,7 +40,7 @@ "@types/node": "^17.0.30", "codelyzer": "^6.0.2", "concurrently": "7.1.0", - "jest": "27.5.1", + "jest": "28.0.3", "ts-node": "~10.7.0", "tslint": "~6.1.3", "typescript": "~4.6.3", @@ -1646,9 +1646,9 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", + "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" @@ -2680,20 +2680,46 @@ } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.0.2.tgz", + "integrity": "sha512-tiRpnMeeyQuuzgL5UNSeiqMwF8UOWPbAE5rzcu/1zyq4oPG2Ox6xm4YCOruwbp10F8odWc+XwVxTyGzMSLMqxA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/console/node_modules/ansi-styles": { @@ -2754,6 +2780,76 @@ "node": ">=8" } }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/@jest/console/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2776,42 +2872,43 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.0.3.tgz", + "integrity": "sha512-cCQW06vEZ+5r50SB06pOnSWsOBs7F+lswPYnKKfBz1ncLlj1sMqmvjgam8q40KhlZ8Ut4eNAL2Hvfx4BKIO2FA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/reporters": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.0.3", + "jest-haste-map": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-resolve-dependencies": "^28.0.3", + "jest-runner": "^28.0.3", + "jest-runtime": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", + "jest-watcher": "^28.0.2", "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2822,6 +2919,32 @@ } } }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2880,6 +3003,76 @@ "node": ">=8" } }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/@jest/core/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2916,6 +3109,40 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/expect": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.0.3.tgz", + "integrity": "sha512-VEzZr85bqNomgayQkR7hWG5HnbZYWYWagQriZsixhLmOzU6PCpMP61aeVhkCoRrg7ri5f7JDpeTPzDAajIwFHw==", + "dev": true, + "dependencies": { + "expect": "^28.0.2", + "jest-snapshot": "^28.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.0.2.tgz", + "integrity": "sha512-YryfH2zN5c7M8eLtn9oTBRj1sfD+X4cHNXJnTejqCveOS33wADEZUxJ7de5++lRvByNpRpfAnc8zTK7yrUJqgA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/fake-timers": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", @@ -2934,53 +3161,280 @@ } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.0.3.tgz", + "integrity": "sha512-q/zXYI6CKtTSIt1WuTHBYizJhH7K8h+xG5PE3C0oawLlPIvUMDYmpj0JX0XsJwPRLCsz/fYXHZVG46AaEhSPmw==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^28.0.2", + "@jest/expect": "^28.0.3", + "@jest/types": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/@jest/globals/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.0.3.tgz", + "integrity": "sha512-xrbIc7J/xwo+D7AY3enAR9ZWYCmJ8XIkstTukTGpKDph0gLl/TJje9jl3dssvE4KJzYqMKiSrnE5Nt68I4fTEg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", + "@jridgewell/trace-mapping": "^0.3.7", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-util": "^28.0.2", + "jest-worker": "^28.0.2", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "v8-to-istanbul": "^9.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2991,6 +3445,32 @@ } } }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3049,6 +3529,52 @@ "node": ">=8" } }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@jest/reporters/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3058,15 +3584,6 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3079,83 +3596,217 @@ "node": ">=8" } }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "node_modules/@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", "dev": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "@sinclair/typebox": "^0.23.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@jest/source-map": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.0.2.tgz", + "integrity": "sha512-4EUqgjq9VzyUiVTvZfI9IRJD6t3NYBNP4f+Eq8Zr93+hkJ0RrGU4OBTw8tfNzidKX+bmuYzn8FxqpxOPIGGCMA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/types": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/test-result/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.0.2.tgz", + "integrity": "sha512-zhnZ8ydkZQTPL7YucB86eOlD79zPy5EGSUKiR2Iv93RVEDU6OEP33kwDBg70ywOcxeJGDRhyo09q7TafNCBiIg==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.0.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^28.0.2", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.0.3.tgz", + "integrity": "sha512-+Y0ikI7SwoW/YbK8t9oKwC70h4X2Gd0OVuz5tctRvSV/EDQU00AAkoqevXgPSSFimUmp/sp7Yl8s/1bExDqOIg==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.0.2", + "@jridgewell/trace-mapping": "^0.3.7", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.0.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/@jest/transform/node_modules/ansi-styles": { @@ -3216,6 +3867,23 @@ "node": ">=8" } }, + "node_modules/@jest/transform/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/transform/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3225,15 +3893,6 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3600,6 +4259,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true }, + "node_modules/@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -4607,22 +5272,21 @@ } }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.0.3.tgz", + "integrity": "sha512-S0ADyYdcrt5fp9YldRYWCUHdk1BKt9AkvBkLWBoNAEV9NoWZPIj5+MYhPcGgTS65mfv3a+Ymf2UqgWoAVd41cA==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^28.0.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^28.0.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -4778,18 +5442,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", + "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { @@ -4864,16 +5528,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", + "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^28.0.2", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -6987,12 +7651,12 @@ "integrity": "sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA==" }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -7681,18 +8345,242 @@ } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.0.2.tgz", + "integrity": "sha512-X0qIuI/zKv98k34tM+uGeOgAC73lhs4vROF9MkPk94C1zujtwv4Cla8SxhWn0G1OwvG9gLLL7RjFBkwGVaZ83w==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/expect/node_modules/diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/expect/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/express": { @@ -9344,20 +10232,20 @@ } }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.0.3.tgz", + "integrity": "sha512-uS+T5J3w5xyzd1KSJCGKhCo8WTJXbNl86f5SW11wgssbandJOVLRKKUxmhdFfmKxhPeksl1hHZ0HaA8VBzp7xA==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^28.0.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^28.0.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -9369,17 +10257,16 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-changed-files/node_modules/execa": { @@ -9427,33 +10314,100 @@ } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.0.3.tgz", + "integrity": "sha512-HJ3rUCm3A3faSy7KVH5MFCncqJLtrjEFkTPn9UIcs4Kq77+TXqHsOaI+/k73aHe6DJQigLUXq9rCYj3MYFlbIw==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/expect": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-runtime": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", + "pretty-format": "^28.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -9505,6 +10459,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-circus/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9514,6 +10477,128 @@ "node": ">=8" } }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-circus/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9536,29 +10621,29 @@ } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.0.3.tgz", + "integrity": "sha512-NCPTEONCnhYGo1qzPP4OOcGF04YasM5GZSwQLI1HtEluxa3ct4U65IbZs6DSRt8XN1Rq0jhXwv02m5lHB28Uyg==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -9569,6 +10654,32 @@ } } }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9627,6 +10738,23 @@ "node": ">=8" } }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9639,67 +10767,77 @@ "node": ">=8" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.0.3.tgz", + "integrity": "sha512-3gWOEHwGpNhyYOk9vnUMv94x15QcdjACm7A3lERaluwnyD6d1WZWe9RFCShgIXVOHzRfG1hWxsI2U0gKKSGgDQ==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.0.2", + "@jest/types": "^28.0.2", + "babel-jest": "^28.0.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^28.0.3", + "jest-environment-node": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-runner": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^28.0.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9758,6 +10896,65 @@ "node": ">=8" } }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-config/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -9865,31 +11062,57 @@ } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.0.2.tgz", + "integrity": "sha512-/W5Wc0b+ipR36kDaLngdVEJ/5UYPOITK7rW0djTlCCQdMuWpCFJweMW4TzAoJ6GiRrljPL8FwiyOSoSHKrda2w==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.0.2", + "pretty-format": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-each/node_modules/ansi-styles": { @@ -9950,6 +11173,65 @@ "node": ">=8" } }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9981,20 +11263,249 @@ } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.0.2.tgz", + "integrity": "sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-environment-node/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-get-type": { @@ -10007,36 +11518,178 @@ } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.0.2.tgz", + "integrity": "sha512-EokdL7l5uk4TqWGawwrIt8w3tZNcbeiRxmKGEURf42pl+/rWJy3sCJlon5HBhJXZTW978jk6600BLQOI7i25Ig==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.0.2", + "@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": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.0.2", + "jest-worker": "^28.0.2", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-haste-map/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-haste-map/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-jasmine2": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/source-map": "^27.5.1", @@ -10060,11 +11713,103 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-jasmine2/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-jasmine2/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -10075,11 +11820,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-jasmine2/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-jasmine2/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10096,6 +11855,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -10107,22 +11867,270 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/jest-jasmine2/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/jest-jasmine2/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } }, + "node_modules/jest-jasmine2/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jest-jasmine2/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -10130,19 +12138,74 @@ "node": ">=8" } }, + "node_modules/jest-jasmine2/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.0.2.tgz", + "integrity": "sha512-UGaSPYtxKXl/YKacq6juRAKmMp1z2os8NaU8PSC+xvNikmu3wF6QFrXrihMM4hXeMr9HuNotBrQZHmzDY8KIBQ==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-matcher-utils": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", @@ -10382,6 +12445,341 @@ "@angular/platform-browser-dynamic": ">=10.0.0" } }, + "node_modules/jest-preset-angular/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-preset-angular/node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/jest-preset-angular/node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-preset-angular/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-preset-angular/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-preset-angular/node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, "node_modules/jest-preset-angular/node_modules/esbuild": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", @@ -10645,20 +13043,335 @@ "win32" ] }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "node_modules/jest-preset-angular/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-preset-angular/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-resolve": { + "node_modules/jest-preset-angular/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-preset-angular/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-preset-angular/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-resolve": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -10675,11 +13388,12 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-resolve-dependencies": { + "node_modules/jest-preset-angular/node_modules/jest-resolve-dependencies": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "jest-regex-util": "^27.5.1", @@ -10689,6 +13403,345 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-preset-angular/node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-preset-angular/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-preset-angular/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-preset-angular/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-preset-angular/node_modules/ts-jest": { + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular/node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/jest-preset-angular/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-preset-angular/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/jest-preset-angular/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.0.3.tgz", + "integrity": "sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.0.2", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.0.3.tgz", + "integrity": "sha512-lCgHMm0/5p0qHemrOzm7kI6JDei28xJwIf7XOEcv1HeAVHnsON8B8jO/woqlU+/GcOXb58ymieYqhk3zjGWnvQ==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10747,6 +13800,23 @@ "node": ">=8" } }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-resolve/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -10769,35 +13839,102 @@ } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.0.3.tgz", + "integrity": "sha512-4OsHMjBLtYUWCENucAQ4Za0jGfEbOFi/Fusv6dzUuaweqx8apb4+5p2LR2yvgF4StFulmxyC238tGLftfu+zBA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/environment": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", + "jest-docblock": "^28.0.2", + "jest-environment-node": "^28.0.2", + "jest-haste-map": "^28.0.2", + "jest-leak-detector": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-runtime": "^28.0.3", + "jest-util": "^28.0.2", + "jest-watcher": "^28.0.2", + "jest-worker": "^28.0.2", + "source-map-support": "0.5.13", "throat": "^6.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-runner/node_modules/ansi-styles": { @@ -10858,6 +13995,146 @@ "node": ">=8" } }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-runner/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10871,36 +14148,103 @@ } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.0.3.tgz", + "integrity": "sha512-7FtPUmvbZEHLOdjsF6dyHg5Pe4E0DU+f3Vvv8BPzVR7mQA6nFR4clQYLAPyJGnsUvN8WRWn+b5a5SVwnj1WaGg==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/globals": "^28.0.3", + "@jest/source-map": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-runtime/node_modules/ansi-styles": { @@ -11005,6 +14349,89 @@ "node": ">=10.17.0" } }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-runtime/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -11031,6 +14458,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -11040,36 +14468,63 @@ } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.0.3.tgz", + "integrity": "sha512-nVzAAIlAbrMuvVUrS1YxmAeo1TfSsDDU+K5wv/Ow56MBp+L+Y71ksAbwRp3kGCgZAz4oOXcAMPAwtT9Yh1hlQQ==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^28.0.2", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^28.0.2", + "semver": "^7.3.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -11121,6 +14576,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11130,6 +14594,124 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11230,20 +14812,46 @@ } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.0.2.tgz", + "integrity": "sha512-nr0UOvCTtxP0YPdsk01Gk7e7c0xIiEe2nncAe3pj0wBfUvAykTVrMrdeASlAJnlEQCBuwN/GF4hKoCzbkGNCNw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^28.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -11316,6 +14924,48 @@ "node": ">=8" } }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11329,21 +14979,48 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.0.2.tgz", + "integrity": "sha512-uIVJLpQ/5VTGQWBiBatHsi7jrCqHjHl0e0dFHMWzwuIfUbdW/muk0DtSr0fteY2T7QTFylv+7a5Rm8sBKrE12Q==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^28.0.2", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" } }, "node_modules/jest-watcher/node_modules/ansi-styles": { @@ -11404,6 +15081,23 @@ "node": ">=8" } }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15972,49 +19666,6 @@ "tree-kill": "cli.js" } }, - "node_modules/ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, "node_modules/ts-node": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", @@ -16223,6 +19874,7 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "peer": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -16363,14 +20015,14 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", + "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" @@ -16947,15 +20599,16 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/ws": { @@ -18193,9 +21846,9 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", + "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" @@ -18935,19 +22588,42 @@ "dev": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.0.2.tgz", + "integrity": "sha512-tiRpnMeeyQuuzgL5UNSeiqMwF8UOWPbAE5rzcu/1zyq4oPG2Ox6xm4YCOruwbp10F8odWc+XwVxTyGzMSLMqxA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2", "slash": "^3.0.0" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -18988,6 +22664,63 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -19006,41 +22739,65 @@ } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.0.3.tgz", + "integrity": "sha512-cCQW06vEZ+5r50SB06pOnSWsOBs7F+lswPYnKKfBz1ncLlj1sMqmvjgam8q40KhlZ8Ut4eNAL2Hvfx4BKIO2FA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/reporters": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.0.3", + "jest-haste-map": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-resolve-dependencies": "^28.0.3", + "jest-runner": "^28.0.3", + "jest-runtime": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", + "jest-watcher": "^28.0.2", "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -19081,6 +22838,63 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -19110,6 +22924,33 @@ "jest-mock": "^27.5.1" } }, + "@jest/expect": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.0.3.tgz", + "integrity": "sha512-VEzZr85bqNomgayQkR7hWG5HnbZYWYWagQriZsixhLmOzU6PCpMP61aeVhkCoRrg7ri5f7JDpeTPzDAajIwFHw==", + "dev": true, + "requires": { + "expect": "^28.0.2", + "jest-snapshot": "^28.0.3" + } + }, + "@jest/expect-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.0.2.tgz", + "integrity": "sha512-YryfH2zN5c7M8eLtn9oTBRj1sfD+X4cHNXJnTejqCveOS33wADEZUxJ7de5++lRvByNpRpfAnc8zTK7yrUJqgA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + }, + "dependencies": { + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + } + } + }, "@jest/fake-timers": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", @@ -19125,49 +22966,74 @@ } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.0.3.tgz", + "integrity": "sha512-q/zXYI6CKtTSIt1WuTHBYizJhH7K8h+xG5PE3C0oawLlPIvUMDYmpj0JX0XsJwPRLCsz/fYXHZVG46AaEhSPmw==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "@jest/environment": "^28.0.2", + "@jest/expect": "^28.0.3", + "@jest/types": "^28.0.2" }, "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -19208,18 +23074,79 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19231,72 +23158,60 @@ } } }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "@jest/reporters": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.0.3.tgz", + "integrity": "sha512-xrbIc7J/xwo+D7AY3enAR9ZWYCmJ8XIkstTukTGpKDph0gLl/TJje9jl3dssvE4KJzYqMKiSrnE5Nt68I4fTEg==", "dev": true, "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", + "@jridgewell/trace-mapping": "^0.3.7", + "@types/node": "*", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-util": "^28.0.2", + "jest-worker": "^28.0.2", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.0" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -19337,16 +23252,289 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.23.3" + } + }, + "@jest/source-map": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", + "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.0.2.tgz", + "integrity": "sha512-4EUqgjq9VzyUiVTvZfI9IRJD6t3NYBNP4f+Eq8Zr93+hkJ0RrGU4OBTw8tfNzidKX+bmuYzn8FxqpxOPIGGCMA==", + "dev": true, + "requires": { + "@jest/console": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/test-sequencer": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.0.2.tgz", + "integrity": "sha512-zhnZ8ydkZQTPL7YucB86eOlD79zPy5EGSUKiR2Iv93RVEDU6OEP33kwDBg70ywOcxeJGDRhyo09q7TafNCBiIg==", + "dev": true, + "requires": { + "@jest/test-result": "^28.0.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.0.2", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@jest/transform": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.0.3.tgz", + "integrity": "sha512-+Y0ikI7SwoW/YbK8t9oKwC70h4X2Gd0OVuz5tctRvSV/EDQU00AAkoqevXgPSSFimUmp/sp7Yl8s/1bExDqOIg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.0.2", + "@jridgewell/trace-mapping": "^0.3.7", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.0.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "supports-color": { @@ -19624,6 +23812,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -20497,16 +24691,15 @@ } }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.0.3.tgz", + "integrity": "sha512-S0ADyYdcrt5fp9YldRYWCUHdk1BKt9AkvBkLWBoNAEV9NoWZPIj5+MYhPcGgTS65mfv3a+Ymf2UqgWoAVd41cA==", "dev": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^28.0.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^28.0.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -20626,14 +24819,14 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", + "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -20696,12 +24889,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", + "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^28.0.2", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -22289,9 +26482,9 @@ "integrity": "sha512-g/e18Yv0fBdN2c2Z8hWV9jOXxOxOByyG8uGufrJWUym+LHMYa5K2oR9C+D8Bvh0slUTarBwBBZFi41ImQjEZIA==" }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true }, "emoji-regex": { @@ -22717,15 +26910,189 @@ "dev": true }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.0.2.tgz", + "integrity": "sha512-X0qIuI/zKv98k34tM+uGeOgAC73lhs4vROF9MkPk94C1zujtwv4Cla8SxhWn0G1OwvG9gLLL7RjFBkwGVaZ83w==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "express": { @@ -23966,23 +28333,22 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.0.3.tgz", + "integrity": "sha512-uS+T5J3w5xyzd1KSJCGKhCo8WTJXbNl86f5SW11wgssbandJOVLRKKUxmhdFfmKxhPeksl1hHZ0HaA8VBzp7xA==", "dev": true, "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^28.0.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^28.0.3" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" }, @@ -24019,32 +28385,90 @@ } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.0.3.tgz", + "integrity": "sha512-HJ3rUCm3A3faSy7KVH5MFCncqJLtrjEFkTPn9UIcs4Kq77+TXqHsOaI+/k73aHe6DJQigLUXq9rCYj3MYFlbIw==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/expect": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-runtime": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", + "pretty-format": "^28.0.2", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24079,12 +28503,115 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -24103,25 +28630,48 @@ } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.0.3.tgz", + "integrity": "sha512-NCPTEONCnhYGo1qzPP4OOcGF04YasM5GZSwQLI1HtEluxa3ct4U65IbZs6DSRt8XN1Rq0jhXwv02m5lHB28Uyg==", "dev": true, "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^28.0.3", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24162,6 +28712,20 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24170,56 +28734,62 @@ "requires": { "has-flag": "^4.0.0" } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } } } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.0.3.tgz", + "integrity": "sha512-3gWOEHwGpNhyYOk9vnUMv94x15QcdjACm7A3lERaluwnyD6d1WZWe9RFCShgIXVOHzRfG1hWxsI2U0gKKSGgDQ==", "dev": true, "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.0.2", + "@jest/types": "^28.0.2", + "babel-jest": "^28.0.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^28.0.3", + "jest-environment-node": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-runner": "^28.0.3", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^28.0.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24260,6 +28830,52 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -24341,27 +28957,50 @@ } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", + "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.0.2.tgz", + "integrity": "sha512-/W5Wc0b+ipR36kDaLngdVEJ/5UYPOITK7rW0djTlCCQdMuWpCFJweMW4TzAoJ6GiRrljPL8FwiyOSoSHKrda2w==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.0.2", + "pretty-format": "^28.0.2" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24402,6 +29041,52 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24429,71 +29114,77 @@ } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.0.2.tgz", + "integrity": "sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" }, "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24534,6 +29225,79 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24545,14 +29309,559 @@ } } }, - "jest-leak-detector": { + "jest-get-type": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, + "jest-haste-map": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.0.2.tgz", + "integrity": "sha512-EokdL7l5uk4TqWGawwrIt8w3tZNcbeiRxmKGEURf42pl+/rWJy3sCJlon5HBhJXZTW978jk6600BLQOI7i25Ig==", "dev": true, "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "@jest/types": "^28.0.2", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.0.2", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "jest-leak-detector": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.0.2.tgz", + "integrity": "sha512-UGaSPYtxKXl/YKacq6juRAKmMp1z2os8NaU8PSC+xvNikmu3wF6QFrXrihMM4hXeMr9HuNotBrQZHmzDY8KIBQ==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + } } }, "jest-matcher-utils": { @@ -24723,6 +30032,259 @@ "ts-jest": "^27.0.0" }, "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "peer": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "peer": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "peer": true + }, "esbuild": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", @@ -24873,33 +30435,536 @@ "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", "dev": true, "optional": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "peer": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "peer": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "peer": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "ts-jest": { + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true + } + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.0.3.tgz", + "integrity": "sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^28.0.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -24940,6 +31005,20 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -24958,45 +31037,102 @@ } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.0.3.tgz", + "integrity": "sha512-lCgHMm0/5p0qHemrOzm7kI6JDei28xJwIf7XOEcv1HeAVHnsON8B8jO/woqlU+/GcOXb58ymieYqhk3zjGWnvQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.0.3" } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.0.3.tgz", + "integrity": "sha512-4OsHMjBLtYUWCENucAQ4Za0jGfEbOFi/Fusv6dzUuaweqx8apb4+5p2LR2yvgF4StFulmxyC238tGLftfu+zBA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.0.2", + "@jest/environment": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", + "jest-docblock": "^28.0.2", + "jest-environment-node": "^28.0.2", + "jest-haste-map": "^28.0.2", + "jest-leak-detector": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-runtime": "^28.0.3", + "jest-util": "^28.0.2", + "jest-watcher": "^28.0.2", + "jest-worker": "^28.0.2", + "source-map-support": "0.5.13", "throat": "^6.0.1" }, "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25037,6 +31173,117 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", + "integrity": "sha512-pijNxfjxT0tGAx+8+OzZ+eayVPCwy/rsZFhebmC0F4YnXu1EHPEPxg7utL3m5uX3EaFH1/jwDxGa1EbjJCST2g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25049,35 +31296,93 @@ } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.0.3.tgz", + "integrity": "sha512-7FtPUmvbZEHLOdjsF6dyHg5Pe4E0DU+f3Vvv8BPzVR7mQA6nFR4clQYLAPyJGnsUvN8WRWn+b5a5SVwnj1WaGg==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/globals": "^28.0.3", + "@jest/source-map": "^28.0.2", + "@jest/test-result": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.0.3", + "jest-snapshot": "^28.0.3", + "jest-util": "^28.0.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25147,6 +31452,73 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -25169,41 +31541,66 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.9" } }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.0.3.tgz", + "integrity": "sha512-nVzAAIlAbrMuvVUrS1YxmAeo1TfSsDDU+K5wv/Ow56MBp+L+Y71ksAbwRp3kGCgZAz4oOXcAMPAwtT9Yh1hlQQ==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.0.2", + "@jest/transform": "^28.0.3", + "@jest/types": "^28.0.2", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^28.0.2", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.0.2", + "jest-matcher-utils": "^28.0.2", + "jest-message-util": "^28.0.2", + "jest-util": "^28.0.2", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^28.0.2", + "semver": "^7.3.5" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25238,12 +31635,111 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", + "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-diff": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.0.2.tgz", + "integrity": "sha512-33Rnf821Y54OAloav0PGNWHlbtEorXpjwchnToyyWbec10X74FOW7hGfvrXLGz7xOe2dz0uo9JVFAHHj/2B5pg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.0.2.tgz", + "integrity": "sha512-SxtTiI2qLJHFtOz/bySStCnwCvISAuxQ/grS+74dfTy5AuJw3Sgj9TVUvskcnImTfpzLoMCDJseRaeRrVYbAOA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.0.2", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.0.2" + } + }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25321,19 +31817,42 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.0.2.tgz", + "integrity": "sha512-nr0UOvCTtxP0YPdsk01Gk7e7c0xIiEe2nncAe3pj0wBfUvAykTVrMrdeASlAJnlEQCBuwN/GF4hKoCzbkGNCNw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^28.0.2" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25380,6 +31899,38 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -25392,20 +31943,44 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.0.2.tgz", + "integrity": "sha512-uIVJLpQ/5VTGQWBiBatHsi7jrCqHjHl0e0dFHMWzwuIfUbdW/muk0DtSr0fteY2T7QTFylv+7a5Rm8sBKrE12Q==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^28.0.2", + "@jest/types": "^28.0.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^28.0.2", "string-length": "^4.0.1" }, "dependencies": { + "@jest/types": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -25446,6 +32021,20 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28845,22 +35434,6 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, - "ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, "ts-node": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", @@ -29013,6 +35586,7 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "peer": true, "requires": { "is-typedarray": "^1.0.0" } @@ -29119,14 +35693,14 @@ "dev": true }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", + "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.7", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" } }, "validate-npm-package-name": { @@ -29541,15 +36115,13 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, "ws": { diff --git a/src-ui/package.json b/src-ui/package.json index 830b67f79..c4b5d7f4d 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -45,7 +45,7 @@ "@types/node": "^17.0.30", "codelyzer": "^6.0.2", "concurrently": "7.1.0", - "jest": "27.5.1", + "jest": "28.0.3", "ts-node": "~10.7.0", "tslint": "~6.1.3", "typescript": "~4.6.3", From f23d10f000a6254c03a1ebbbf4158f0ce3b474d7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 May 2022 01:00:02 -0700 Subject: [PATCH 62/86] Add jest-environment-jsdom, update jest-preset-angular --- src-ui/package-lock.json | 8176 +++++++++++++++++++------------------- src-ui/package.json | 6 +- 2 files changed, 4126 insertions(+), 4056 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index a04a18a8b..6d3d6da3b 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -41,6 +41,8 @@ "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "28.0.3", + "jest-environment-jsdom": "^28.0.2", + "jest-preset-angular": "^12.0.0-next.1", "ts-node": "~10.7.0", "tslint": "~6.1.3", "typescript": "~4.6.3", @@ -82,6 +84,1539 @@ "jest": ">=27" } }, + "node_modules/@angular-builders/jest/node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@angular-builders/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular-builders/jest/node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-builders/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-builders/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@angular-builders/jest/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/@angular-builders/jest/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-builders/jest/node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@angular-builders/jest/node_modules/esbuild": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", + "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.2", + "esbuild-darwin-64": "0.14.2", + "esbuild-darwin-arm64": "0.14.2", + "esbuild-freebsd-64": "0.14.2", + "esbuild-freebsd-arm64": "0.14.2", + "esbuild-linux-32": "0.14.2", + "esbuild-linux-64": "0.14.2", + "esbuild-linux-arm": "0.14.2", + "esbuild-linux-arm64": "0.14.2", + "esbuild-linux-mips64le": "0.14.2", + "esbuild-linux-ppc64le": "0.14.2", + "esbuild-netbsd-64": "0.14.2", + "esbuild-openbsd-64": "0.14.2", + "esbuild-sunos-64": "0.14.2", + "esbuild-windows-32": "0.14.2", + "esbuild-windows-64": "0.14.2", + "esbuild-windows-arm64": "0.14.2" + } + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-android-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", + "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-darwin-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", + "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-darwin-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", + "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-freebsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", + "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-freebsd-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", + "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", + "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", + "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-arm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", + "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", + "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-mips64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", + "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-linux-ppc64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", + "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-netbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", + "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-openbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", + "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-sunos-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", + "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-wasm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", + "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-windows-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", + "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-windows-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", + "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@angular-builders/jest/node_modules/esbuild-windows-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", + "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@angular-builders/jest/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@angular-builders/jest/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@angular-builders/jest/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-builders/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-builders/jest/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-preset-angular": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", + "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", + "dev": true, + "dependencies": { + "bs-logger": "^0.2.6", + "esbuild-wasm": "0.14.2", + "jest-environment-jsdom": "^27.0.0", + "pretty-format": "^27.0.0", + "ts-jest": "^27.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0" + }, + "optionalDependencies": { + "esbuild": "0.14.2" + }, + "peerDependencies": { + "@angular-devkit/build-angular": ">=0.1002.4", + "@angular/compiler-cli": ">=10.0.0", + "@angular/core": ">=10.0.0", + "@angular/platform-browser-dynamic": ">=10.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-preset-angular/node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-preset-angular/node_modules/ts-jest": { + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@angular-builders/jest/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-builders/jest/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@angular-builders/jest/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@angular-builders/jest/node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-builders/jest/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/@angular-builders/jest/node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/@angular-builders/jest/node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/@angular-builders/jest/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-builders/jest/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/@angular-builders/jest/node_modules/ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@angular-builders/jest/node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/@angular-builders/jest/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-devkit/architect": { "version": "0.1303.4", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.4.tgz", @@ -2696,32 +4231,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2800,23 +4309,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/console/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/console/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -2919,32 +4411,6 @@ } } }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3023,23 +4489,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/core/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -3109,6 +4558,101 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/expect": { "version": "28.0.3", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.0.3.tgz", @@ -3160,6 +4704,118 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/globals": { "version": "28.0.3", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.0.3.tgz", @@ -3206,23 +4862,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/globals/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -3232,15 +4871,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/globals/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3332,23 +4962,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/globals/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/globals/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -3445,32 +5058,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3529,23 +5116,6 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -3637,102 +5207,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/test-result/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/test-result/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/test-result/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/test-result/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/test-result/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/test-sequencer": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.0.2.tgz", @@ -3783,32 +5257,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3867,23 +5315,6 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/@jest/transform/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3906,19 +5337,20 @@ } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", "dev": true, "dependencies": { + "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/types/node_modules/ansi-styles": { @@ -4496,6 +5928,17 @@ "pretty-format": "^27.0.0" } }, + "node_modules/@types/jsdom": { + "version": "16.2.14", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz", + "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/parse5": "*", + "@types/tough-cookie": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -4520,6 +5963,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", @@ -4590,6 +6039,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -4600,9 +6055,9 @@ } }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -6991,9 +8446,9 @@ } }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "node_modules/cssstyle": { @@ -7190,17 +8645,30 @@ } }, "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/date-fns": { @@ -7580,24 +9048,15 @@ ] }, "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/domhandler": { @@ -8360,32 +9819,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/expect/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/expect/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8512,23 +9945,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/expect/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/expect/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -9377,15 +10793,15 @@ } }, "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/html-entities": { @@ -10375,23 +11791,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-circus/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -10401,15 +11800,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10549,23 +11939,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-circus/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-circus/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -10654,32 +12027,6 @@ } } }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10738,23 +12085,6 @@ "node": ">=8" } }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10812,32 +12142,6 @@ } } }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10905,23 +12209,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-config/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -11089,32 +12376,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11182,23 +12443,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-each/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-each/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -11245,21 +12489,208 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.0.2.tgz", + "integrity": "sha512-rQhgV9reB6Id7VPa5jEkKx80Ppa/I6C7vKTMnceBS+d/rt+aTfbxbK/P4HRLMLE8KKsETszPpzYtGgsa8xMg7g==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/jsdom": "^16.2.4", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2", + "jsdom": "^19.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", + "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "dependencies": { + "@jest/types": "^28.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-environment-node": { @@ -11311,23 +12742,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -11337,15 +12751,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-environment-node/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11437,23 +12842,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-environment-node/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -11542,81 +12930,6 @@ "fsevents": "^2.3.2" } }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-haste-map/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-haste-map/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-haste-map/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/jest-haste-map/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11626,23 +12939,6 @@ "node": ">=8" } }, - "node_modules/jest-haste-map/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-haste-map/node_modules/jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -11672,18 +12968,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-haste-map/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-jasmine2": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", @@ -11804,6 +13088,33 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-jasmine2/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12087,6 +13398,24 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-jasmine2/node_modules/jest-validate": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", @@ -12311,6 +13640,31 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12403,6 +13757,101 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", @@ -12421,1258 +13870,62 @@ } }, "node_modules/jest-preset-angular": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", - "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", + "version": "12.0.0-next.1", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.0.0-next.1.tgz", + "integrity": "sha512-LuRqaaiL1xH1Tr0v70R9azXWV51/f1QrJ/7gHBzaFmCLHEtRVtbXvakJM313NSp2eY3Xn3+LMX/zzU4PjNXWvw==", "dev": true, "dependencies": { "bs-logger": "^0.2.6", - "esbuild-wasm": "0.14.2", - "jest-environment-jsdom": "^27.0.0", - "pretty-format": "^27.0.0", - "ts-jest": "^27.0.0" + "esbuild-wasm": ">=0.13.8", + "jest-environment-jsdom": "^28.0.0", + "pretty-format": "^28.0.0", + "ts-jest": "28.0.0-next.1" }, "engines": { "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "optionalDependencies": { - "esbuild": "0.14.2" + "esbuild": ">=0.13.8" }, "peerDependencies": { - "@angular-devkit/build-angular": ">=0.1002.4", - "@angular/compiler-cli": ">=10.0.0", - "@angular/core": ">=10.0.0", - "@angular/platform-browser-dynamic": ">=10.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "peer": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "peer": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "@angular-devkit/build-angular": ">=0.1102.19", + "@angular/compiler-cli": ">=11.2.14", + "@angular/core": ">=11.2.14", + "@angular/platform-browser-dynamic": ">=11.2.14" } }, "node_modules/jest-preset-angular/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-preset-angular/node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/jest-preset-angular/node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "peer": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-preset-angular/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-preset-angular/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/jest-preset-angular/node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-preset-angular/node_modules/esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" - } - }, - "node_modules/jest-preset-angular/node_modules/esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-preset-angular/node_modules/esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/jest-preset-angular/node_modules/esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/jest-preset-angular/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-preset-angular/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-preset-angular/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-preset-angular/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-preset-angular/node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "peer": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "peer": true, - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "peer": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "peer": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-preset-angular/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-preset-angular/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-preset-angular/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-preset-angular/node_modules/ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "node_modules/jest-preset-angular/node_modules/pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", "dev": true, "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-preset-angular/node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/jest-preset-angular/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-preset-angular/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "peer": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/jest-preset-angular/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "peer": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } + "node_modules/jest-preset-angular/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true }, "node_modules/jest-regex-util": { "version": "28.0.2", @@ -13716,32 +13969,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13800,23 +14027,6 @@ "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-resolve/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -13902,23 +14112,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-runner/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -13928,15 +14121,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14028,23 +14212,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-runner/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-runner/node_modules/jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -14212,23 +14379,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-runtime/node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -14238,15 +14388,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14382,23 +14523,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-runtime/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-runtime/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -14501,32 +14625,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14653,23 +14751,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-snapshot/node_modules/pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -14725,12 +14806,12 @@ } }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -14738,7 +14819,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-util/node_modules/ansi-styles": { @@ -14828,32 +14909,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14997,32 +15052,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -15081,23 +15110,6 @@ "node": ">=8" } }, - "node_modules/jest-watcher/node_modules/jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "dependencies": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15186,23 +15198,23 @@ "optional": true }, "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "dev": true, "dependencies": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.5.0", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", @@ -15211,16 +15223,16 @@ "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "canvas": "^2.5.0" @@ -15231,10 +15243,19 @@ } } }, + "node_modules/jsdom/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", @@ -15245,6 +15266,20 @@ "node": ">= 6" } }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsdom/node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -19646,15 +19681,15 @@ } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/tree-kill": { @@ -19666,6 +19701,49 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-jest": { + "version": "28.0.0-next.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.0-next.1.tgz", + "integrity": "sha512-rhxVFSOOcJLCjGvh/RXmvz0fSpnQrB0PjiC3JL25oNeuHH/bC3BVlanLg9AtPm/AnW3l0JCBfgACm2xAT9DPxw==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^28.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": "^28.0.0", + "jest": "^28.0.0", + "typescript": ">=4.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, "node_modules/ts-node": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", @@ -20070,15 +20148,15 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/wait-on": { @@ -20149,12 +20227,12 @@ } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { - "node": ">=10.4" + "node": ">=12" } }, "node_modules/webpack": { @@ -20343,27 +20421,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", @@ -20480,32 +20537,49 @@ } }, "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "dependencies": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { @@ -20612,12 +20686,12 @@ } }, "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -20633,10 +20707,13 @@ } }, "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/xmlchars": { "version": "2.2.0", @@ -20749,6 +20826,1123 @@ "@angular-devkit/core": "^13.0.0", "jest-preset-angular": "11.1.0", "lodash": "^4.17.15" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "peer": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "peer": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "peer": true + }, + "esbuild": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", + "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "dev": true, + "optional": true, + "requires": { + "esbuild-android-arm64": "0.14.2", + "esbuild-darwin-64": "0.14.2", + "esbuild-darwin-arm64": "0.14.2", + "esbuild-freebsd-64": "0.14.2", + "esbuild-freebsd-arm64": "0.14.2", + "esbuild-linux-32": "0.14.2", + "esbuild-linux-64": "0.14.2", + "esbuild-linux-arm": "0.14.2", + "esbuild-linux-arm64": "0.14.2", + "esbuild-linux-mips64le": "0.14.2", + "esbuild-linux-ppc64le": "0.14.2", + "esbuild-netbsd-64": "0.14.2", + "esbuild-openbsd-64": "0.14.2", + "esbuild-sunos-64": "0.14.2", + "esbuild-windows-32": "0.14.2", + "esbuild-windows-64": "0.14.2", + "esbuild-windows-arm64": "0.14.2" + } + }, + "esbuild-android-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", + "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", + "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", + "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", + "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", + "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", + "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", + "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", + "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", + "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", + "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", + "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", + "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", + "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", + "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "dev": true, + "optional": true + }, + "esbuild-wasm": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", + "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "dev": true + }, + "esbuild-windows-32": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", + "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", + "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", + "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "dev": true, + "optional": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "peer": true + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "peer": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "peer": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-preset-angular": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", + "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", + "dev": true, + "requires": { + "bs-logger": "^0.2.6", + "esbuild": "0.14.2", + "esbuild-wasm": "0.14.2", + "jest-environment-jsdom": "^27.0.0", + "pretty-format": "^27.0.0", + "ts-jest": "^27.0.0" + }, + "dependencies": { + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "ts-jest": { + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + } + } + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "peer": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "peer": true + } + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } } }, "@angular-devkit/architect": { @@ -22601,29 +23795,6 @@ "slash": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -22681,20 +23852,6 @@ "stack-utils": "^2.0.3" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -22775,29 +23932,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -22855,20 +23989,6 @@ "stack-utils": "^2.0.3" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -22922,6 +24042,79 @@ "@jest/types": "^27.5.1", "@types/node": "*", "jest-mock": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/expect": { @@ -22963,6 +24156,93 @@ "jest-message-util": "^27.5.1", "jest-mock": "^27.5.1", "jest-util": "^27.5.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/globals": { @@ -23002,20 +24282,6 @@ "jest-util": "^28.0.2" } }, - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -23025,15 +24291,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -23101,20 +24358,6 @@ "@types/node": "*" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -23189,29 +24432,6 @@ "v8-to-istanbul": "^9.0.0" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -23252,20 +24472,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -23335,80 +24541,6 @@ "@jest/types": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jest/test-sequencer": { @@ -23454,29 +24586,6 @@ "write-file-atomic": "^4.0.1" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -23517,20 +24626,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -23549,15 +24644,16 @@ } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", + "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", "dev": true, "requires": { + "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "dependencies": { @@ -24046,6 +25142,17 @@ "pretty-format": "^27.0.0" } }, + "@types/jsdom": { + "version": "16.2.14", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz", + "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "*", + "@types/tough-cookie": "*" + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -24070,6 +25177,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "@types/prettier": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", @@ -24140,6 +25253,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -24150,9 +25269,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -25974,9 +27093,9 @@ "dev": true }, "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "cssstyle": { @@ -26136,14 +27255,26 @@ } }, "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } } }, "date-fns": { @@ -26424,20 +27555,12 @@ "dev": true }, "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } + "webidl-conversions": "^7.0.0" } }, "domhandler": { @@ -26922,29 +28045,6 @@ "jest-util": "^28.0.2" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -27038,20 +28138,6 @@ "stack-utils": "^2.0.3" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -27709,12 +28795,12 @@ } }, "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" } }, "html-entities": { @@ -28437,20 +29523,6 @@ "jest-util": "^28.0.2" } }, - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -28460,15 +29532,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -28572,20 +29635,6 @@ "@types/node": "*" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -28649,29 +29698,6 @@ "yargs": "^17.3.1" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -28712,20 +29738,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -28767,29 +29779,6 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -28836,20 +29825,6 @@ "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -28978,29 +29953,6 @@ "pretty-format": "^28.0.2" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29047,20 +29999,6 @@ "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -29099,32 +30037,19 @@ } }, "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.0.2.tgz", - "integrity": "sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q==", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.0.2.tgz", + "integrity": "sha512-rQhgV9reB6Id7VPa5jEkKx80Ppa/I6C7vKTMnceBS+d/rt+aTfbxbK/P4HRLMLE8KKsETszPpzYtGgsa8xMg7g==", "dev": true, "requires": { "@jest/environment": "^28.0.2", "@jest/fake-timers": "^28.0.2", "@jest/types": "^28.0.2", + "@types/jsdom": "^16.2.4", "@types/node": "*", "jest-mock": "^28.0.2", - "jest-util": "^28.0.2" + "jest-util": "^28.0.2", + "jsdom": "^19.0.0" }, "dependencies": { "@jest/environment": { @@ -29153,20 +30078,6 @@ "jest-util": "^28.0.2" } }, - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -29176,15 +30087,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29252,18 +30154,163 @@ "@types/node": "*" } }, - "jest-util": { + "pretty-format": { "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.0.2.tgz", + "integrity": "sha512-o9u5UHZ+NCuIoa44KEF0Behhsz/p1wMm0WumsZfWR1k4IVoWSt3aN0BavSC5dd26VxSGQvkrCnJxxOzhhUEG3Q==", + "dev": true, + "requires": { + "@jest/environment": "^28.0.2", + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + }, + "dependencies": { + "@jest/environment": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.0.2.tgz", + "integrity": "sha512-IvI7dEfqVEffDYlw9FQfVBt6kXt/OI38V7QUIur0ulOQgzpKYJDVvLzj4B1TVmHWTGW5tcnJdlZ3hqzV6/I9Qg==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.0.2", + "@jest/types": "^28.0.2", + "@types/node": "*", + "jest-mock": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.0.2.tgz", + "integrity": "sha512-R75yUv+WeybPa4ZVhX9C+8XN0TKjUoceUX+/QEaDVQGxZZOK50eD74cs7iMDTtpodh00d8iLlc9197vgF6oZjA==", "dev": true, "requires": { "@jest/types": "^28.0.2", + "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", + "jest-message-util": "^28.0.2", + "jest-mock": "^28.0.2", + "jest-util": "^28.0.2" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-message-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.0.2.tgz", + "integrity": "sha512-knK7XyojvwYh1XiF2wmVdskgM/uN11KsjcEWWHfnMZNEdwXCrqB4sCBO94F4cfiAwCS8WFV6CDixDwPlMh/wdA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.0.2", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "micromatch": "^4.0.4", + "pretty-format": "^28.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.0.2.tgz", + "integrity": "sha512-vfnJ4zXRB0i24jOTGtQJyl26JKsgBKtqRlCnsrORZbG06FToSSn33h2x/bmE8XxqxkLWdZBRo+/65l8Vi3nD+g==", + "dev": true, + "requires": { + "@jest/types": "^28.0.2", + "@types/node": "*" } }, "pretty-format": { @@ -29335,83 +30382,12 @@ "walker": "^1.0.7" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -29433,15 +30409,6 @@ } } } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -29547,6 +30514,30 @@ "write-file-atomic": "^3.0.0" } }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "peer": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "peer": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29768,6 +30759,21 @@ "semver": "^7.3.2" } }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "peer": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "jest-validate": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", @@ -29944,6 +30950,28 @@ "stack-utils": "^2.0.3" }, "dependencies": { + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -30009,957 +31037,25 @@ "requires": { "@jest/types": "^27.5.1", "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-preset-angular": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", - "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", - "dev": true, - "requires": { - "bs-logger": "^0.2.6", - "esbuild": "0.14.2", - "esbuild-wasm": "0.14.2", - "jest-environment-jsdom": "^27.0.0", - "pretty-format": "^27.0.0", - "ts-jest": "^27.0.0" - }, - "dependencies": { - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "peer": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "peer": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "peer": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "peer": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "peer": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "peer": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "peer": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true, - "peer": true - }, - "esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", - "dev": true, - "optional": true, - "requires": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" - } - }, - "esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", - "dev": true, - "optional": true - }, - "esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", - "dev": true - }, - "esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", - "dev": true, - "optional": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "peer": true - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "peer": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "peer": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "peer": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "peer": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "peer": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "peer": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "peer": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "peer": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "peer": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "peer": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "peer": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "ts-jest": { - "version": "27.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", - "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "peer": true - } - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "peer": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "peer": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-resolve": { - "version": "28.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.0.3.tgz", - "integrity": "sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.0.2", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.0.2", - "jest-validate": "^28.0.2", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^17.0.8", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -31005,19 +31101,126 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "has-flag": "^4.0.0" } + } + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-preset-angular": { + "version": "12.0.0-next.1", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.0.0-next.1.tgz", + "integrity": "sha512-LuRqaaiL1xH1Tr0v70R9azXWV51/f1QrJ/7gHBzaFmCLHEtRVtbXvakJM313NSp2eY3Xn3+LMX/zzU4PjNXWvw==", + "dev": true, + "requires": { + "bs-logger": "^0.2.6", + "esbuild": ">=0.13.8", + "esbuild-wasm": ">=0.13.8", + "jest-environment-jsdom": "^28.0.0", + "pretty-format": "^28.0.0", + "ts-jest": "28.0.0-next.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", + "integrity": "sha512-UmGZ1IERwS3yY35LDMTaBUYI1w4udZDdJGGT/DqQeKG9ZLDn7/K2Jf/JtYSRiHCCKMHvUA+zsEGSmHdpaVp1yw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + } + } + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.0.3.tgz", + "integrity": "sha512-lfgjd9JhEjpjIN3HLUfdysdK+A7ePQoYmd7WL9DUEWqdnngb1rF56eee6iDXJxl/3eSolpP43VD7VrhjL3NsoQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.0.2", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.0.2", + "jest-validate": "^28.0.2", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "slash": { "version": "3.0.0", @@ -31101,20 +31304,6 @@ "jest-util": "^28.0.2" } }, - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -31124,15 +31313,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -31200,20 +31380,6 @@ "@types/node": "*" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "jest-worker": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.0.2.tgz", @@ -31351,20 +31517,6 @@ "jest-util": "^28.0.2" } }, - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, "@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", @@ -31374,15 +31526,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -31479,20 +31622,6 @@ "@types/node": "*" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -31578,29 +31707,6 @@ "semver": "^7.3.5" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -31694,20 +31800,6 @@ "stack-utils": "^2.0.3" } }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "pretty-format": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.0.2.tgz", @@ -31752,12 +31844,12 @@ } }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", + "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.0.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -31830,29 +31922,6 @@ "pretty-format": "^28.0.2" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -31958,29 +32027,6 @@ "string-length": "^4.0.1" }, "dependencies": { - "@jest/types": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.0.2.tgz", - "integrity": "sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -32021,20 +32067,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.0.2.tgz", - "integrity": "sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==", - "dev": true, - "requires": { - "@jest/types": "^28.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -32109,23 +32141,23 @@ "optional": true }, "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "dev": true, "requires": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.5.0", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", @@ -32134,19 +32166,25 @@ "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" }, "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -32154,6 +32192,17 @@ "mime-types": "^2.1.12" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -35420,9 +35469,9 @@ } }, "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -35434,6 +35483,22 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, + "ts-jest": { + "version": "28.0.0-next.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.0-next.1.tgz", + "integrity": "sha512-rhxVFSOOcJLCjGvh/RXmvz0fSpnQrB0PjiC3JL25oNeuHH/bC3BVlanLg9AtPm/AnW3l0JCBfgACm2xAT9DPxw==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^28.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^20.x" + } + }, "ts-node": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", @@ -35739,12 +35804,12 @@ } }, "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "dev": true, "requires": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" } }, "wait-on": { @@ -35803,9 +35868,9 @@ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" }, "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, "webpack": { @@ -35968,13 +36033,6 @@ "requires": { "ansi-regex": "^6.0.1" } - }, - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} } } }, @@ -36021,29 +36079,39 @@ "dev": true }, "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "requires": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "dev": true, "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } }, "which": { @@ -36125,16 +36193,16 @@ } }, "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "dev": true, "requires": {} }, "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true }, "xmlchars": { diff --git a/src-ui/package.json b/src-ui/package.json index c4b5d7f4d..0c7feee32 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -46,13 +46,15 @@ "codelyzer": "^6.0.2", "concurrently": "7.1.0", "jest": "28.0.3", + "jest-environment-jsdom": "^28.0.2", + "jest-preset-angular": "^12.0.0-next.1", "ts-node": "~10.7.0", "tslint": "~6.1.3", "typescript": "~4.6.3", "wait-on": "~6.0.1" }, "optionalDependencies": { - "cypress": "~9.6.0", - "@cypress/schematic": "^1.6.0" + "@cypress/schematic": "^1.6.0", + "cypress": "~9.6.0" } } From e7f162e5e5506262b337c0d094e8149c99d964b6 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 May 2022 01:02:28 -0700 Subject: [PATCH 63/86] setup-jest compatibility with v28 --- src-ui/setup-jest.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src-ui/setup-jest.ts b/src-ui/setup-jest.ts index 5ada7e7c6..876946e2b 100644 --- a/src-ui/setup-jest.ts +++ b/src-ui/setup-jest.ts @@ -1,4 +1,4 @@ -import 'jest-preset-angular/setup-jest' +import { jest } from '@jest/globals' /* global mocks for jsdom */ const mock = () => { @@ -26,5 +26,6 @@ Object.defineProperty(document.body.style, 'transform', { }, }) -/* output shorter and more meaningful Zone error stack traces */ -// Error.stackTraceLimit = 2 +HTMLCanvasElement.prototype.getContext = < + typeof HTMLCanvasElement.prototype.getContext +>jest.fn() From a938895e5e4f63dc6a9558158b8d0ce2f4c58eec Mon Sep 17 00:00:00 2001 From: Quinn Casey Date: Mon, 2 May 2022 08:23:04 -0700 Subject: [PATCH 64/86] Use our arm compatible tika container --- .../compose/docker-compose.postgres-tika.yml | 2 +- .../docker-compose.sqlite-tika.arm.yml | 85 ------------------- docker/compose/docker-compose.sqlite-tika.yml | 2 +- 3 files changed, 2 insertions(+), 87 deletions(-) delete mode 100644 docker/compose/docker-compose.sqlite-tika.arm.yml diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index c6a72e903..516d88b7a 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -85,7 +85,7 @@ services: - "--chromium-disable-routes=true" tika: - image: apache/tika + image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped volumes: diff --git a/docker/compose/docker-compose.sqlite-tika.arm.yml b/docker/compose/docker-compose.sqlite-tika.arm.yml deleted file mode 100644 index 16633fd1d..000000000 --- a/docker/compose/docker-compose.sqlite-tika.arm.yml +++ /dev/null @@ -1,85 +0,0 @@ -# docker-compose file for running paperless from the docker container registry. -# This file contains everything paperless needs to run. -# Paperless supports amd64, arm and arm64 hardware. -# -# All compose files of paperless configure paperless in the following way: -# -# - Paperless is (re)started on system boot, if it was running before shutdown. -# - Docker volumes for storing data are managed by Docker. -# - Folders for importing and exporting files are created in the same directory -# as this file and mounted to the correct folders inside the container. -# - Paperless listens on port 8000. -# -# SQLite is used as the database. The SQLite file is stored in the data volume. -# -# iwishiwasaneagle/apache-tika-arm docker image is used to enable arm64 arch -# which apache/tika does not currently support. -# -# In addition to that, this docker-compose file adds the following optional -# configurations: -# -# - Apache Tika and Gotenberg servers are started with paperless and paperless -# is configured to use these services. These provide support for consuming -# Office documents (Word, Excel, Power Point and their LibreOffice counter- -# parts. -# -# To install and update paperless with this file, do the following: -# -# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' -# and '.env' into a folder. -# - Run 'docker-compose pull'. -# - Run 'docker-compose run --rm webserver createsuperuser' to create a user. -# - Run 'docker-compose up -d'. -# -# For more extensive installation and update instructions, refer to the -# documentation. - -version: "3.4" -services: - broker: - image: redis:6.0 - restart: unless-stopped - volumes: - - redisdata:/data - - webserver: - image: ghcr.io/paperless-ngx/paperless-ngx:latest - restart: unless-stopped - depends_on: - - broker - - gotenberg - - tika - ports: - - 8000:8000 - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000"] - interval: 30s - timeout: 10s - retries: 5 - volumes: - - data:/usr/src/paperless/data - - media:/usr/src/paperless/media - - ./export:/usr/src/paperless/export - - ./consume:/usr/src/paperless/consume - env_file: docker-compose.env - environment: - PAPERLESS_REDIS: redis://broker:6379 - PAPERLESS_TIKA_ENABLED: 1 - PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 - PAPERLESS_TIKA_ENDPOINT: http://tika:9998 - - gotenberg: - image: gotenberg/gotenberg:7 - restart: unless-stopped - command: - - "gotenberg" - - "--chromium-disable-routes=true" - - tika: - image: iwishiwasaneagle/apache-tika-arm@sha256:a78c25ffe57ecb1a194b2859d42a61af46e9e845191512b8f1a4bf90578ffdfd - restart: unless-stopped - -volumes: - data: - media: - redisdata: diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index d9327533e..ee2aad40a 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -74,7 +74,7 @@ services: - "--chromium-disable-routes=true" tika: - image: apache/tika + image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped volumes: From d58b1a7de70f0972deca58aa7071e176cc241e1c Mon Sep 17 00:00:00 2001 From: Quinn Casey Date: Mon, 2 May 2022 09:02:29 -0700 Subject: [PATCH 65/86] Update Tika documentation --- docker/compose/docker-compose.postgres-tika.yml | 3 +-- docker/compose/docker-compose.sqlite-tika.yml | 4 +--- docs/configuration.rst | 4 ++-- docs/setup.rst | 4 +--- scripts/start_services.sh | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 516d88b7a..b25fdbc63 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -1,7 +1,6 @@ # docker-compose file for running paperless from the docker container registry. # This file contains everything paperless needs to run. -# Paperless supports amd64, arm and arm64 hardware. The apache/tika image -# does not support arm or arm64, however. +# Paperless supports amd64, arm and arm64 hardware. # # All compose files of paperless configure paperless in the following way: # diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index ee2aad40a..9017f5d20 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -1,8 +1,6 @@ # docker-compose file for running paperless from the docker container registry. # This file contains everything paperless needs to run. -# Paperless supports amd64, arm and arm64 hardware. The apache/tika image -# does not support arm or arm64, however. -# +# Paperless supports amd64, arm and arm64 hardware. # All compose files of paperless configure paperless in the following way: # # - Paperless is (re)started on system boot, if it was running before shutdown. diff --git a/docs/configuration.rst b/docs/configuration.rst index 7849d8dad..b5668c686 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -474,7 +474,7 @@ PAPERLESS_TIKA_GOTENBERG_ENDPOINT= Defaults to "http://localhost:3000". If you run paperless on docker, you can add those services to the docker-compose -file (see the provided ``docker-compose.tika.yml`` file for reference). The changes +file (see the provided ``docker-compose.sqlite-tika.yml`` file for reference). The changes requires are as follows: .. code:: yaml @@ -502,7 +502,7 @@ requires are as follows: - "--chromium-disable-routes=true" tika: - image: apache/tika + image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped Add the configuration variables to the environment of the webserver (alternatively diff --git a/docs/setup.rst b/docs/setup.rst index de694bda8..d3290b432 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -347,7 +347,7 @@ writing. Windows is not and will never be supported. paperless stores its data. If you like, you can point both to the same directory. * ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure to do so allows third parties to forge authentication credentials. - * ``PAPERLESS_URL`` if you are behind a reverse proxy. This should point to your domain. Please see + * ``PAPERLESS_URL`` if you are behind a reverse proxy. This should point to your domain. Please see :ref:`configuration` for more information. Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended @@ -728,8 +728,6 @@ configuring some options in paperless can help improve performance immensely: times. Thumbnails will be about 20% larger. * If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to 1. This will save some memory. -* Use the arm compatible docker-compose if you're wanting to use Tika on something like - a raspberry pi. The official apache/tika image does not support the arm architecture. For details, refer to :ref:`configuration`. diff --git a/scripts/start_services.sh b/scripts/start_services.sh index 24e3233cd..fdb609e85 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -3,4 +3,4 @@ docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 docker run -d -p 6379:6379 redis:latest docker run -p 3000:3000 -d gotenberg/gotenberg:7 -docker run -p 9998:9998 -d apache/tika +docker run -p 9998:9998 -d ghcr.io/paperless-ngx/tika:latest From 939dd17910af39b88bd1e9a0a46cff0e863dfa5f Mon Sep 17 00:00:00 2001 From: Quinn Casey Date: Mon, 2 May 2022 09:16:42 -0700 Subject: [PATCH 66/86] Update Gotenberg to 7.4 --- docker/compose/docker-compose.postgres-tika.yml | 2 +- docker/compose/docker-compose.sqlite-tika.yml | 2 +- docs/configuration.rst | 2 +- docs/troubleshooting.rst | 2 +- scripts/start_services.sh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index b25fdbc63..d8f93fb79 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -77,7 +77,7 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: gotenberg/gotenberg:7 + image: gotenberg/gotenberg:7.4 restart: unless-stopped command: - "gotenberg" diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index 9017f5d20..a898527da 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -65,7 +65,7 @@ services: PAPERLESS_TIKA_ENDPOINT: http://tika:9998 gotenberg: - image: gotenberg/gotenberg:7 + image: gotenberg/gotenberg:7.4 restart: unless-stopped command: - "gotenberg" diff --git a/docs/configuration.rst b/docs/configuration.rst index b5668c686..92cba8d72 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -495,7 +495,7 @@ requires are as follows: # ... gotenberg: - image: gotenberg/gotenberg:7 + image: gotenberg/gotenberg:7.4 restart: unless-stopped command: - "gotenberg" diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 3ae4909de..b1f41f096 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -125,7 +125,7 @@ If using docker-compose, this is achieved by the following configuration change .. code:: yaml gotenberg: - image: gotenberg/gotenberg:7 + image: gotenberg/gotenberg:7.4 restart: unless-stopped command: - "gotenberg" diff --git a/scripts/start_services.sh b/scripts/start_services.sh index fdb609e85..3d0addb55 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -2,5 +2,5 @@ docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13 docker run -d -p 6379:6379 redis:latest -docker run -p 3000:3000 -d gotenberg/gotenberg:7 +docker run -p 3000:3000 -d gotenberg/gotenberg:7.4 docker run -p 9998:9998 -d ghcr.io/paperless-ngx/tika:latest From 240c7913e9c54cbd074d3323d273959a1f3fdb8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 May 2022 20:38:20 +0000 Subject: [PATCH 67/86] Bump asgiref from 3.5.0 to 3.5.1 Bumps [asgiref](https://github.com/django/asgiref) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/django/asgiref/releases) - [Changelog](https://github.com/django/asgiref/blob/main/CHANGELOG.txt) - [Commits](https://github.com/django/asgiref/compare/3.5.0...3.5.1) --- updated-dependencies: - dependency-name: asgiref dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 295e14e1d..3b0256b52 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ aioredis==1.3.1 anyio==3.5.0; python_full_version >= '3.6.2' arrow==1.2.2; python_version >= '3.6' -asgiref==3.5.0; python_version >= '3.7' +asgiref==3.5.1; python_version >= '3.7' async-timeout==4.0.2; python_version >= '3.6' attrs==21.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' autobahn==22.3.2; python_version >= '3.7' From 88e71e12b116fc83c0d3b1e791b1e9a334d7064a Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Mon, 2 May 2022 15:11:45 -0700 Subject: [PATCH 68/86] Manually updates dependencies --- Pipfile.lock | 119 +++++++++++++++++++++++++++++------------------ requirements.txt | 10 ++-- 2 files changed, 79 insertions(+), 50 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index fd0447e04..8516b77d0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -44,11 +44,11 @@ }, "asgiref": { "hashes": [ - "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0", - "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9" + "sha256:45a429524fba18aba9d512498b19d220c4d628e75b40cf5c627524dbaebc5cc1", + "sha256:fddeea3c53fa99d0cdb613c3941cc6e52d822491fc2753fba25768fb5bf4e865" ], "markers": "python_version >= '3.7'", - "version": "==3.5.0" + "version": "==3.5.1" }, "async-timeout": { "hashes": [ @@ -99,6 +99,7 @@ "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac", "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2" ], + "index": "pypi", "markers": "python_version < '3.9'", "version": "==0.2.1" }, @@ -206,11 +207,11 @@ }, "click": { "hashes": [ - "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e", - "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72" + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" ], "markers": "python_version >= '3.7'", - "version": "==8.1.2" + "version": "==8.1.3" }, "coloredlogs": { "hashes": [ @@ -476,7 +477,7 @@ "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "markers": "python_version >= '3.5'", + "markers": "python_version >= '3'", "version": "==3.3" }, "imap-tools": { @@ -498,6 +499,7 @@ "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3", "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8" ], + "index": "pypi", "markers": "python_version < '3.9'", "version": "==5.7.1" }, @@ -713,36 +715,36 @@ }, "pikepdf": { "hashes": [ - "sha256:01be838a44430c4be84b748a33950fed09892472934a8041596c11189f365f7f", - "sha256:0cc95ef470169dfa5acc9196299bdba236716234a0d8b2746e2a563bc6f1f456", - "sha256:13e72d0aeeb3fc452569a3f7994acdd007de9aad804ced734d57cec269261b8b", - "sha256:2873503522ef26a09a6020c29c2efd221fa2ddc31e83bd902be27d317144cf63", - "sha256:2d5d6d3248b33ca5961d84bc3121a299cd27237fad56868d815e381c9a98d3d1", - "sha256:2f62e6c7bcf5d631e6ea74cf861f3e816f587c6ccb4ecbf6ac862e088ba2e4ac", - "sha256:51694d3d2f90510da6a8d7a4d07313ca868b373fffec6de270d9bbff1ce37180", - "sha256:5c23cbd7ae71f08fb5b5d9660eb0bc61abf345ada01bea6e1b6884c4261e17d6", - "sha256:6371bf02a436be2b7c63322b83a8e47523f2cd16438b2e93d546c7caf9ae308d", - "sha256:657293b74af8c7cf03f9905218a7935b26a4f3006803016b40b3db78e04cb35c", - "sha256:680d47377bb9fd6a36b6a81464ee269b4b29cbf29a84ae4f2ab8f6ea3665bf69", - "sha256:710535c679ab0d7b8249f72247832773e7a9a121dfbe9cad7f6465bd9bb45fae", - "sha256:7b4d7c09036d863915cb01007ca183d6fe64e2d57c0472453097bc9e029a58fb", - "sha256:978b6388ae99a024bdcae5a322c68e90c187cb568d09d43e6586b3479267121d", - "sha256:9917a03d500aab72715a9236136af7a5c8c7b26c034bf71ebdf028e177f0d25f", - "sha256:996faa6b119488f96d7271672a22af86e56e5544ec6b8eae6cd7d4432c70ae2d", - "sha256:9bac9e9d6b28dc0cc5a554051f183fbd070d0f9fe63c4e9aca939b8c44a5bb4d", - "sha256:aac14061de06843759ea6f5777fd8d7b71af808ed9264f57483a3311a09788ab", - "sha256:ad5361c3669fc0c8dbaf8fa0a590bddf59fad256bb2c527d5ce5cf991743a240", - "sha256:bc40b30c37f8f7c5bef873eca1f04e91ce34b6b74507d8d0019238a17d281fdc", - "sha256:bd9faae19787a5d05b9fcbe84d7cfe4d44e318068e06eca18906b9dba45425b6", - "sha256:c64e7905ec438b7a6c12626f2859df87f471892fab75b65b1441d9e1b38b4dde", - "sha256:d4db409b21a8ec0d3a79d2bbd894b997b13223c9ccf341cdc31b64360f1ee4c7", - "sha256:e0b635d6d9faefb4d0d32722279b8eb4e4d5d7b596c426f3433343de65e0c772", - "sha256:e62e9e8afe77fe2f06715faf10f38a4810d282d66f1e9e05208bb8d9723e6acf", - "sha256:f85d309bcfeeb3e2d344346a5050bfc41e332f19d390f79c20e4fc7de4b10a17", - "sha256:fe3fc2efe498aba6204b85c17c6a5d54ab7303354ecc5c3da624a6b6af0b3406" + "sha256:101ec256a8d312c17decae52226cf32a3e7dc834583134300c2f4e60b70e6e91", + "sha256:12b5b3cfc649e2542576a7e55c11e245278f14f727f116904893e54329102867", + "sha256:1b8f68a75c0a6f6d4d102d0821365ae2aaa9ab635c6eb6c840569a56b1a266f4", + "sha256:1bef3512be59fe0f481375b7eb415ca51ee7c80555031401f5f17ee3392e4add", + "sha256:1d3141916dc9efc433fd22beba544f67a53a805800c3ff902baffa398ef4c85e", + "sha256:3052df8514d26b676c50e65afc49a1d260c43a08c322c75cc2592c10a9a5b26d", + "sha256:356d5554516a295fc10db3f25cfde4e92326f6d015da55d71b84f5ced2a07a5a", + "sha256:55330c24b8e04ee09f1bc514c2b6107bb03a5eeb0b74929a61100cd6be22ae29", + "sha256:553cf11933fdfe07fdd357ab40b9732db102e921b27c1065239308d42b7b858f", + "sha256:5626312990a894c5db3a269455f7eb98df5f59188dde1797c0e352d60fdf89af", + "sha256:59c24a65c94693ab4a7e92f4809f847b57461120256c083054e61c99c4952e84", + "sha256:607deb1181a7cf5369cf70edfc41574d46c0a17c0cac1f6234272bd4cb3487e4", + "sha256:60bdd49e6251f8c99989e6769d4ad29b209c1eaf88090f49d4b30fba98442e40", + "sha256:73a7cc3c42609e00393b9d4e1b9ee132f528060254a174bf18ef31a154be0386", + "sha256:75f1e2917b4d2d6573fe3d1c3b2ec70829b64515b2f723f5c3bebcdd65761e6c", + "sha256:92ca9191680eccc21697e9e9c218e600ab31e7c24f6125749738c10ae2dc7c07", + "sha256:9bcaf96e2f571f0fc7e3178cdf1bcca7c13e5c68128e8246031226d47ecf23f1", + "sha256:a8f3e2229e2683497fe4ccc4af06050c125160a11bb3562b6c4ddaee4d0cc5c5", + "sha256:c277066938ca0ddb2bfe75874ef8dd3aa259936fe15c4cf7d4282f89ba82ab3a", + "sha256:c532542a99757d9f41df0cf1fc8f64a044d0eb822822cc069c80be35731df275", + "sha256:dfa89bd86e01413531c1d7d201fb01f0e62b52ea926a8e8ca6f99f86ed761e95", + "sha256:e064010b733b0a2ec4ec97982cd2887f9025292f2d228c6d5e6eca9d84851e53", + "sha256:ea927afe7cb04cc7ade30b961f528ef53e8d9cf467dcc4639cf944fef872a1a1", + "sha256:f40703b6267aa43d7f72468fa0a3b505ffff74ece2a4c69cfd3c90e023c41381", + "sha256:f45cc4544bbd4c308a525a6bb8e2e29b3f849803ee557c6e35c684447f0a92e5", + "sha256:f8ccda5ee992c73f647bcd96c9aa30f5eb9e8a6c5bdd6e3dcb29ebbffbe01a69", + "sha256:fe386d93345c9b5a9690f7a7bfb789a5ec5467c34402628e10bda8a4f5bac73e" ], "index": "pypi", - "version": "==5.1.1" + "version": "==5.1.2" }, "pillow": { "hashes": [ @@ -1448,6 +1450,7 @@ "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" ], + "index": "pypi", "markers": "python_version < '3.9'", "version": "==3.8.0" }, @@ -1587,13 +1590,14 @@ }, "click": { "hashes": [ - "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e", - "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72" + "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", + "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" ], "markers": "python_version >= '3.7'", - "version": "==8.1.2" + "version": "==8.1.3" }, "coverage": { + "extras": [], "hashes": [ "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9", "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d", @@ -1687,11 +1691,11 @@ }, "faker": { "hashes": [ - "sha256:0d5425894e098410b64aaade38a81074fa30163076251118523adf5bb44f8346", - "sha256:7ab2f741ef1c006ed7274a6ed75695ca8b610f78861566b599ce83c4953bf687" + "sha256:0301ace8365d98f3d0bf6e9a40200c8548e845d3812402ae1daf589effe3fb01", + "sha256:b1903db92175d78051858128ada397c7dc76f376f6967975419da232b3ebd429" ], "markers": "python_version >= '3.6'", - "version": "==13.6.0" + "version": "==13.7.0" }, "filelock": { "hashes": [ @@ -1714,7 +1718,7 @@ "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" ], - "markers": "python_version >= '3.5'", + "markers": "python_version >= '3'", "version": "==3.3" }, "imagesize": { @@ -1725,6 +1729,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.0" }, + "importlib-metadata": { + "hashes": [ + "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6", + "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539" + ], + "markers": "python_version < '3.10'", + "version": "==4.11.3" + }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -1734,11 +1746,11 @@ }, "jinja2": { "hashes": [ - "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119", - "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9" + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" ], "markers": "python_version >= '3.7'", - "version": "==3.1.1" + "version": "==3.1.2" }, "markupsafe": { "hashes": [ @@ -2095,6 +2107,14 @@ "index": "pypi", "version": "==3.25.0" }, + "typing-extensions": { + "hashes": [ + "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708", + "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376" + ], + "markers": "python_version >= '3.7'", + "version": "==4.2.0" + }, "urllib3": { "hashes": [ "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14", @@ -2110,6 +2130,15 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==20.14.1" + }, + "zipp": { + "hashes": [ + "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad", + "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099" + ], + "index": "pypi", + "markers": "python_version < '3.9'", + "version": "==3.8.0" } } } diff --git a/requirements.txt b/requirements.txt index 3b0256b52..e851de66f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,8 @@ # pipenv lock --requirements # --i https://pypi.python.org/simple/ ---extra-index-url https://www.piwheels.org/simple/ +-i https://pypi.python.org/simple +--extra-index-url https://www.piwheels.org/simple aioredis==1.3.1 anyio==3.5.0; python_full_version >= '3.6.2' arrow==1.2.2; python_version >= '3.6' @@ -23,7 +23,7 @@ channels-redis==3.4.0 channels==3.0.4 chardet==4.0.0; python_version >= '3.1' charset-normalizer==2.0.12; python_version >= '3' -click==8.1.2; python_version >= '3.7' +click==8.1.3; python_version >= '3.7' coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.20 constantly==15.1.0 @@ -45,7 +45,7 @@ hiredis==2.0.0; python_version >= '3.6' httptools==0.4.0 humanfriendly==10.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' hyperlink==21.0.0 -idna==3.3; python_version >= '3.5' +idna==3.3; python_version >= '3' imap-tools==0.54.0 img2pdf==0.4.4 importlib-resources==5.7.1; python_version < '3.9' @@ -62,7 +62,7 @@ packaging==21.3; python_version >= '3.6' pathvalidate==2.5.0 pdf2image==1.16.0 pdfminer.six==20220319 -pikepdf==5.1.1 +pikepdf==5.1.2 pillow==9.1.0 pluggy==1.0.0; python_version >= '3.6' portalocker==2.4.0; python_version >= '3' From 0d298d743a70989b6c08e29406ecd094f6e2b0ef Mon Sep 17 00:00:00 2001 From: phail Date: Tue, 3 May 2022 00:54:51 +0200 Subject: [PATCH 69/86] Add log messages for mail errors (#727) * adapt to starttls interface change in imap_tools pin imap-tools version to avoid breaking changes improve mail log * fix unittest * remove uneeded print and fix merge fail * bump to next version --- Pipfile | 2 +- src/paperless_mail/mail.py | 103 +++++++++++++++++++++---------------- 2 files changed, 60 insertions(+), 45 deletions(-) diff --git a/Pipfile b/Pipfile index 0ab6775e6..c38d8323d 100644 --- a/Pipfile +++ b/Pipfile @@ -19,7 +19,7 @@ djangorestframework = "~=3.13" filelock = "*" fuzzywuzzy = {extras = ["speedup"], version = "*"} gunicorn = "*" -imap-tools = "*" +imap-tools = "~=0.54.0" langdetect = "*" pathvalidate = "*" pillow = "~=9.1" diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 2b3267aeb..67cc22130 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -156,58 +156,73 @@ class MailAccountHandler(LoggingMixin): self.log("debug", f"Processing mail account {account}") total_processed_files = 0 + try: + with get_mailbox( + account.imap_server, + account.imap_port, + account.imap_security, + ) as M: - with get_mailbox( - account.imap_server, - account.imap_port, - account.imap_security, - ) as M: - - try: - M.login(account.username, account.password) - - except UnicodeEncodeError: - self.log("debug", "Falling back to AUTH=PLAIN") try: - # rfc2595 section 6 - PLAIN SASL mechanism - client: IMAP4 = M.client - encoded = ( - b"\0" - + account.username.encode("utf8") - + b"\0" - + account.password.encode("utf8") - ) - # Assumption is the server supports AUTH=PLAIN capability - # Could check the list with client.capability(), but then what? - # We're failing anyway then - client.authenticate("PLAIN", lambda x: encoded) + M.login(account.username, account.password) - # Need to transition out of AUTH state to SELECTED - M.folder.set("INBOX") - except Exception: - self.log( - "error", - "Unable to authenticate with mail server using AUTH=PLAIN", - ) - raise MailError(f"Error while authenticating account {account}") - except Exception: - self.log("error", "Unable to authenticate with mail server") - raise MailError(f"Error while authenticating account {account}") + except UnicodeEncodeError: + self.log("debug", "Falling back to AUTH=PLAIN") + try: + # rfc2595 section 6 - PLAIN SASL mechanism + client: IMAP4 = M.client + encoded = ( + b"\0" + + account.username.encode("utf8") + + b"\0" + + account.password.encode("utf8") + ) + # Assumption is the server supports AUTH=PLAIN capability + # Could check the list with client.capability(), but then what? + # We're failing anyway then + client.authenticate("PLAIN", lambda x: encoded) - self.log( - "debug", - f"Account {account}: Processing " f"{account.rules.count()} rule(s)", - ) - - for rule in account.rules.order_by("order"): - try: - total_processed_files += self.handle_mail_rule(M, rule) + # Need to transition out of AUTH state to SELECTED + M.folder.set("INBOX") + except Exception: + self.log( + "error", + "Unable to authenticate with mail server using AUTH=PLAIN", + ) + raise MailError(f"Error while authenticating account {account}") except Exception as e: self.log( "error", - f"Rule {rule}: Error while processing rule: {e}", - exc_info=True, + f"Error while authenticating account {account}: {e}", + exc_info=False, ) + raise MailError( + f"Error while authenticating account {account}", + ) from e + + self.log( + "debug", + f"Account {account}: Processing " + f"{account.rules.count()} rule(s)", + ) + + for rule in account.rules.order_by("order"): + try: + total_processed_files += self.handle_mail_rule(M, rule) + except Exception as e: + self.log( + "error", + f"Rule {rule}: Error while processing rule: {e}", + exc_info=True, + ) + except MailError: + raise + except Exception as e: + self.log( + "error", + f"Error while retrieving mailbox {account}: {e}", + exc_info=False, + ) return total_processed_files From 9ceb2e6084caa30871152d119000349e5e4f2739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 May 2022 23:00:56 +0000 Subject: [PATCH 70/86] Bump tj-actions/changed-files from 18.7 to 19 Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 18.7 to 19. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/v18.7...v19) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/reusable-ci-backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-ci-backend.yml b/.github/workflows/reusable-ci-backend.yml index 7e5cafb99..1c31a5641 100644 --- a/.github/workflows/reusable-ci-backend.yml +++ b/.github/workflows/reusable-ci-backend.yml @@ -87,7 +87,7 @@ jobs: - name: Get changed files id: changed-files-specific - uses: tj-actions/changed-files@v18.7 + uses: tj-actions/changed-files@v19 with: files: | src/** From c3b5b47b22ca6f40ae788655bfdfed2ea0f3cad8 Mon Sep 17 00:00:00 2001 From: Oliver Lippert Date: Tue, 3 May 2022 08:08:28 +0200 Subject: [PATCH 71/86] use zoneinfo instead of pytz Signed-off-by: Oliver Lippert #267 --- src/documents/tests/test_document_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/tests/test_document_model.py b/src/documents/tests/test_document_model.py index bea8b6b91..3ff4d3253 100644 --- a/src/documents/tests/test_document_model.py +++ b/src/documents/tests/test_document_model.py @@ -1,9 +1,9 @@ import shutil import tempfile +import zoneinfo from pathlib import Path from unittest import mock -import pytz from django.test import override_settings from django.test import TestCase from django.utils import timezone @@ -69,7 +69,7 @@ class TestDocument(TestCase): 0, 0, 0, - pytz.timezone("Europe/Berlin"), + zoneinfo.ZoneInfo("Europe/Berlin"), ), ) self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf") From 5e10befe286c9fc485cc658c51b5d5989353f106 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 3 May 2022 13:00:42 -0700 Subject: [PATCH 72/86] Mobile friendly management tables --- .../correspondent-list.component.ts | 2 +- .../management-list.component.html | 20 ++++++++++++++++--- .../management-list.component.scss | 4 ++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts index 4887f5e34..dd0d8ed06 100644 --- a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts +++ b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts @@ -34,7 +34,7 @@ export class CorrespondentListComponent extends ManagementListComponent { return this.datePipe.transform(c.last_correspondence) }, diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.html b/src-ui/src/app/components/manage/management-list/management-list.component.html index c9c9d60d3..761e340eb 100644 --- a/src-ui/src/app/components/manage/management-list/management-list.component.html +++ b/src-ui/src/app/components/manage/management-list/management-list.component.html @@ -17,7 +17,7 @@ Name - Matching + Matching Document count {{column.name}} Actions @@ -26,14 +26,28 @@ {{ object.name }} - {{ getMatching(object) }} + {{ getMatching(object) }} {{ object.document_count }}
{{ column.valueFn.call(null, object) }} -
+
+
+ +
+ + + +
+
+
+
+ diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index 9e058fb64..bfbf0fc47 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -137,32 +137,36 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { takeUntil(this.unsubscribeNotifier) ) .subscribe((queryParams) => { - // transform query params to filter rules - let filterRulesFromQueryParams: FilterRule[] = [] - allFilterRuleQueryParams - .filter((frqp) => queryParams.has(frqp)) - .forEach((filterQueryParamName) => { - const filterQueryParamValues: string[] = queryParams - .get(filterQueryParamName) - .split(',') + if (queryParams.has('view')) { + this.loadViewConfig(parseInt(queryParams.get('view'))) + } else { + // transform query params to filter rules + let filterRulesFromQueryParams: FilterRule[] = [] + allFilterRuleQueryParams + .filter((frqp) => queryParams.has(frqp)) + .forEach((filterQueryParamName) => { + const filterQueryParamValues: string[] = queryParams + .get(filterQueryParamName) + .split(',') - filterRulesFromQueryParams = filterRulesFromQueryParams.concat( - // map all values to filter rules - filterQueryParamValues.map((val) => { - return { - rule_type: FILTER_RULE_TYPES.find( - (rt) => rt.filtervar == filterQueryParamName - ).id, - value: val, - } - }) - ) - }) + filterRulesFromQueryParams = filterRulesFromQueryParams.concat( + // map all values to filter rules + filterQueryParamValues.map((val) => { + return { + rule_type: FILTER_RULE_TYPES.find( + (rt) => rt.filtervar == filterQueryParamName + ).id, + value: val, + } + }) + ) + }) - this.list.activateSavedView(null) - this.list.filterRules = filterRulesFromQueryParams - this.list.reload() - this.unmodifiedFilterRules = [] + this.list.activateSavedView(null) + this.list.filterRules = filterRulesFromQueryParams + this.list.reload() + this.unmodifiedFilterRules = [] + } }) } @@ -192,9 +196,19 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { this.unsubscribeNotifier.complete() } - loadViewConfig(view: PaperlessSavedView) { - this.list.loadSavedView(view) - this.list.reload() + loadViewConfig(viewId: number) { + this.savedViewService + .getCached(viewId) + .pipe(first()) + .subscribe((view) => { + this.list.loadSavedView(view) + this.list.reload() + // update query params if needed + this.router.navigate([], { + relativeTo: this.route, + queryParams: { view: viewId }, + }) + }) } saveViewConfig() { From 3e8bff03e749eb7115e082a6b96e83a585cf5b55 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 5 May 2022 00:23:06 -0700 Subject: [PATCH 78/86] Refactor query param handling to service --- .../app-frame/app-frame.component.ts | 6 +- .../saved-view-widget.component.ts | 6 +- .../document-detail.component.ts | 6 +- .../document-list/document-list.component.ts | 40 ++----- .../correspondent-list.component.ts | 6 +- .../document-type-list.component.ts | 6 +- .../management-list.component.ts | 5 +- .../manage/tag-list/tag-list.component.ts | 6 +- .../services/document-list-view.service.ts | 21 ++-- .../src/app/services/query-params.service.ts | 101 ++++++++++++++++++ .../src/app/services/rest/document.service.ts | 28 +---- 11 files changed, 147 insertions(+), 84 deletions(-) create mode 100644 src-ui/src/app/services/query-params.service.ts diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index a335aad1d..4bab42cb0 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -22,6 +22,7 @@ import { RemoteVersionService, AppRemoteVersion, } from 'src/app/services/rest/remote-version.service' +import { QueryParamsService } from 'src/app/services/query-params.service' @Component({ selector: 'app-app-frame', @@ -37,7 +38,8 @@ export class AppFrameComponent { public savedViewService: SavedViewService, private list: DocumentListViewService, private meta: Meta, - private remoteVersionService: RemoteVersionService + private remoteVersionService: RemoteVersionService, + private queryParamsService: QueryParamsService ) { this.remoteVersionService .checkForUpdates() @@ -92,7 +94,7 @@ export class AppFrameComponent { search() { this.closeMenu() - this.list.quickFilter([ + this.queryParamsService.loadFilterRules([ { rule_type: FILTER_FULLTEXT_QUERY, value: (this.searchField.value as string).trim(), diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index b8bf389dd..20cd5aa99 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -3,11 +3,11 @@ import { Router } from '@angular/router' import { Subscription } from 'rxjs' import { PaperlessDocument } from 'src/app/data/paperless-document' import { PaperlessSavedView } from 'src/app/data/paperless-saved-view' -import { DocumentListViewService } from 'src/app/services/document-list-view.service' import { ConsumerStatusService } from 'src/app/services/consumer-status.service' import { DocumentService } from 'src/app/services/rest/document.service' import { PaperlessTag } from 'src/app/data/paperless-tag' import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type' +import { QueryParamsService } from 'src/app/services/query-params.service' @Component({ selector: 'app-saved-view-widget', @@ -18,7 +18,7 @@ export class SavedViewWidgetComponent implements OnInit, OnDestroy { constructor( private documentService: DocumentService, private router: Router, - private list: DocumentListViewService, + private queryParamsService: QueryParamsService, private consumerStatusService: ConsumerStatusService ) {} @@ -67,7 +67,7 @@ export class SavedViewWidgetComponent implements OnInit, OnDestroy { } clickTag(tag: PaperlessTag) { - this.list.quickFilter([ + this.queryParamsService.loadFilterRules([ { rule_type: FILTER_HAS_TAGS_ALL, value: tag.id.toString() }, ]) } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 9b223f22a..1961c5e9f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -35,6 +35,7 @@ import { import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions' import { FILTER_FULLTEXT_MORELIKE } from 'src/app/data/filter-rule-type' import { normalizeDateStr } from 'src/app/utils/date' +import { QueryParamsService } from 'src/app/services/query-params.service' @Component({ selector: 'app-document-detail', @@ -114,7 +115,8 @@ export class DocumentDetailComponent private documentListViewService: DocumentListViewService, private documentTitlePipe: DocumentTitlePipe, private toastService: ToastService, - private settings: SettingsService + private settings: SettingsService, + private queryParamsService: QueryParamsService ) { this.titleSubject .pipe( @@ -446,7 +448,7 @@ export class DocumentDetailComponent } moreLike() { - this.documentListViewService.quickFilter([ + this.queryParamsService.loadFilterRules([ { rule_type: FILTER_FULLTEXT_MORELIKE, value: this.documentId.toString(), diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts index bfbf0fc47..8f8a0f6fc 100644 --- a/src-ui/src/app/components/document-list/document-list.component.ts +++ b/src-ui/src/app/components/document-list/document-list.component.ts @@ -31,6 +31,7 @@ import { } from 'src/app/directives/sortable.directive' import { ConsumerStatusService } from 'src/app/services/consumer-status.service' import { DocumentListViewService } from 'src/app/services/document-list-view.service' +import { QueryParamsService } from 'src/app/services/query-params.service' import { DocumentService, DOCUMENT_SORT_FIELDS, @@ -55,7 +56,8 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { private router: Router, private toastService: ToastService, private modalService: NgbModal, - private consumerStatusService: ConsumerStatusService + private consumerStatusService: ConsumerStatusService, + private queryParamsService: QueryParamsService ) {} @ViewChild('filterEditor') @@ -127,10 +129,6 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { this.unmodifiedFilterRules = view.filter_rules }) - const allFilterRuleQueryParams: string[] = FILTER_RULE_TYPES.map( - (rt) => rt.filtervar - ) - this.route.queryParamMap .pipe( filter(() => !this.route.snapshot.paramMap.has('id')), // only when not on saved view @@ -140,30 +138,9 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { if (queryParams.has('view')) { this.loadViewConfig(parseInt(queryParams.get('view'))) } else { - // transform query params to filter rules - let filterRulesFromQueryParams: FilterRule[] = [] - allFilterRuleQueryParams - .filter((frqp) => queryParams.has(frqp)) - .forEach((filterQueryParamName) => { - const filterQueryParamValues: string[] = queryParams - .get(filterQueryParamName) - .split(',') - - filterRulesFromQueryParams = filterRulesFromQueryParams.concat( - // map all values to filter rules - filterQueryParamValues.map((val) => { - return { - rule_type: FILTER_RULE_TYPES.find( - (rt) => rt.filtervar == filterQueryParamName - ).id, - value: val, - } - }) - ) - }) - this.list.activateSavedView(null) - this.list.filterRules = filterRulesFromQueryParams + this.queryParamsService.params = queryParams + this.list.filterRules = this.queryParamsService.filterRules this.list.reload() this.unmodifiedFilterRules = [] } @@ -175,8 +152,7 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { .pipe(takeUntil(this.unsubscribeNotifier)) .subscribe({ next: (filterRules) => { - const params = - this.documentService.filterRulesToQueryParams(filterRules) + this.queryParamsService.filterRules = filterRules // if we were on a saved view we navigate 'away' to /documents let base = [] @@ -184,7 +160,7 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { this.router.navigate(base, { relativeTo: this.route, - queryParams: params, + queryParams: this.queryParamsService.params, }) }, }) @@ -296,7 +272,7 @@ export class DocumentListComponent implements OnInit, OnDestroy, AfterViewInit { } clickMoreLike(documentID: number) { - this.list.quickFilter([ + this.queryParamsService.loadFilterRules([ { rule_type: FILTER_FULLTEXT_MORELIKE, value: documentID.toString() }, ]) } diff --git a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts index 4887f5e34..c848fc6e5 100644 --- a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts +++ b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts @@ -3,7 +3,7 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { FILTER_CORRESPONDENT } from 'src/app/data/filter-rule-type' import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' -import { DocumentListViewService } from 'src/app/services/document-list-view.service' +import { QueryParamsService } from 'src/app/services/query-params.service' import { CorrespondentService } from 'src/app/services/rest/correspondent.service' import { ToastService } from 'src/app/services/toast.service' import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component' @@ -20,7 +20,7 @@ export class CorrespondentListComponent extends ManagementListComponent private modalService: NgbModal, private editDialogComponent: any, private toastService: ToastService, - private list: DocumentListViewService, + private queryParamsService: QueryParamsService, protected filterRuleType: number, public typeName: string, public extraColumns: ManagementListColumn[] @@ -140,7 +141,7 @@ export abstract class ManagementListComponent } filterDocuments(object: ObjectWithId) { - this.list.quickFilter([ + this.queryParamsService.loadFilterRules([ { rule_type: this.filterRuleType, value: object.id.toString() }, ]) } diff --git a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts index 01a1614bf..c1dd98e52 100644 --- a/src-ui/src/app/components/manage/tag-list/tag-list.component.ts +++ b/src-ui/src/app/components/manage/tag-list/tag-list.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type' import { PaperlessTag } from 'src/app/data/paperless-tag' -import { DocumentListViewService } from 'src/app/services/document-list-view.service' +import { QueryParamsService } from 'src/app/services/query-params.service' import { TagService } from 'src/app/services/rest/tag.service' import { ToastService } from 'src/app/services/toast.service' import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component' @@ -18,14 +18,14 @@ export class TagListComponent extends ManagementListComponent { tagService: TagService, modalService: NgbModal, toastService: ToastService, - list: DocumentListViewService + queryParamsService: QueryParamsService ) { super( tagService, modalService, TagEditDialogComponent, toastService, - list, + queryParamsService, FILTER_HAS_TAGS_ALL, $localize`tag`, [ diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index b0d246a32..a822ce457 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute, Params, Router } from '@angular/router' import { Observable } from 'rxjs' import { cloneFilterRules, @@ -9,6 +9,7 @@ import { import { PaperlessDocument } from '../data/paperless-document' import { PaperlessSavedView } from '../data/paperless-saved-view' import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys' +import { QueryParamsService } from './query-params.service' import { DocumentService, DOCUMENT_SORT_FIELDS } from './rest/document.service' import { SettingsService, SETTINGS_KEYS } from './settings.service' @@ -220,6 +221,13 @@ export class DocumentListViewService { return this.activeListViewState.sortReverse } + get sortParams(): Params { + return { + sortField: this.sortField, + sortReverse: this.sortReverse, + } + } + get collectionSize(): number { return this.activeListViewState.collectionSize } @@ -265,14 +273,6 @@ export class DocumentListViewService { } } - quickFilter(filterRules: FilterRule[]) { - const params = this.documentService.filterRulesToQueryParams(filterRules) - this.router.navigate(['/documents'], { - relativeTo: this.route, - queryParams: params, - }) - } - getLastPage(): number { return Math.ceil(this.collectionSize / this.currentPageSize) } @@ -435,8 +435,7 @@ export class DocumentListViewService { constructor( private documentService: DocumentService, private settings: SettingsService, - private router: Router, - private route: ActivatedRoute + private queryParamsService: QueryParamsService ) { let documentListViewConfigJson = localStorage.getItem( DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG diff --git a/src-ui/src/app/services/query-params.service.ts b/src-ui/src/app/services/query-params.service.ts new file mode 100644 index 000000000..302d81b4f --- /dev/null +++ b/src-ui/src/app/services/query-params.service.ts @@ -0,0 +1,101 @@ +import { Injectable } from '@angular/core' +import { + ActivatedRoute, + convertToParamMap, + ParamMap, + Params, + Router, +} from '@angular/router' +import { FilterRule } from '../data/filter-rule' +import { FILTER_RULE_TYPES } from '../data/filter-rule-type' + +@Injectable({ + providedIn: 'root', +}) +export class QueryParamsService { + constructor(private router: Router, private route: ActivatedRoute) {} + + private filterParams: Params + private _filterRules: FilterRule[] + + set filterRules(filterRules: FilterRule[]) { + this._filterRules = filterRules + this.filterParams = this.filterRulesToQueryParams(filterRules) + } + + get filterRules(): FilterRule[] { + return this._filterRules + } + + set params(params: any) { + this.filterParams = params + this._filterRules = this.filterRulesFromQueryParams( + params.keys ? params : convertToParamMap(params) // ParamMap + ) + } + + get params(): Params { + return { + ...this.filterParams, + } + } + + private filterRulesToQueryParams(filterRules: FilterRule[]): Object { + if (filterRules) { + let params = {} + for (let rule of filterRules) { + let ruleType = FILTER_RULE_TYPES.find((t) => t.id == rule.rule_type) + if (ruleType.multi) { + params[ruleType.filtervar] = params[ruleType.filtervar] + ? params[ruleType.filtervar] + ',' + rule.value + : rule.value + } else if (ruleType.isnull_filtervar && rule.value == null) { + params[ruleType.isnull_filtervar] = true + } else { + params[ruleType.filtervar] = rule.value + } + } + return params + } else { + return null + } + } + + private filterRulesFromQueryParams(queryParams: ParamMap) { + const allFilterRuleQueryParams: string[] = FILTER_RULE_TYPES.map( + (rt) => rt.filtervar + ) + + // transform query params to filter rules + let filterRulesFromQueryParams: FilterRule[] = [] + allFilterRuleQueryParams + .filter((frqp) => queryParams.has(frqp)) + .forEach((filterQueryParamName) => { + const filterQueryParamValues: string[] = queryParams + .get(filterQueryParamName) + .split(',') + + filterRulesFromQueryParams = filterRulesFromQueryParams.concat( + // map all values to filter rules + filterQueryParamValues.map((val) => { + return { + rule_type: FILTER_RULE_TYPES.find( + (rt) => rt.filtervar == filterQueryParamName + ).id, + value: val, + } + }) + ) + }) + + return filterRulesFromQueryParams + } + + loadFilterRules(filterRules: FilterRule[]) { + this.filterRules = filterRules + this.router.navigate(['/documents'], { + relativeTo: this.route, + queryParams: this.params, + }) + } +} diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index d06282bb8..f9e68b850 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -12,6 +12,7 @@ import { DocumentTypeService } from './document-type.service' import { TagService } from './tag.service' import { FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type' import { PaperlessDocumentSuggestions } from 'src/app/data/paperless-document-suggestions' +import { QueryParamsService } from '../query-params.service' export const DOCUMENT_SORT_FIELDS = [ { field: 'archive_serial_number', name: $localize`ASN` }, @@ -52,32 +53,12 @@ export class DocumentService extends AbstractPaperlessService http: HttpClient, private correspondentService: CorrespondentService, private documentTypeService: DocumentTypeService, - private tagService: TagService + private tagService: TagService, + private queryParamsService: QueryParamsService ) { super(http, 'documents') } - public filterRulesToQueryParams(filterRules: FilterRule[]): Object { - if (filterRules) { - let params = {} - for (let rule of filterRules) { - let ruleType = FILTER_RULE_TYPES.find((t) => t.id == rule.rule_type) - if (ruleType.multi) { - params[ruleType.filtervar] = params[ruleType.filtervar] - ? params[ruleType.filtervar] + ',' + rule.value - : rule.value - } else if (ruleType.isnull_filtervar && rule.value == null) { - params[ruleType.isnull_filtervar] = true - } else { - params[ruleType.filtervar] = rule.value - } - } - return params - } else { - return null - } - } - addObservablesToDocument(doc: PaperlessDocument) { if (doc.correspondent) { doc.correspondent$ = this.correspondentService.getCached( @@ -101,12 +82,13 @@ export class DocumentService extends AbstractPaperlessService filterRules?: FilterRule[], extraParams = {} ): Observable> { + this.queryParamsService.filterRules = filterRules return this.list( page, pageSize, sortField, sortReverse, - Object.assign(extraParams, this.filterRulesToQueryParams(filterRules)) + Object.assign(extraParams, this.queryParamsService.params) ).pipe( map((results) => { results.results.forEach((doc) => this.addObservablesToDocument(doc)) From 2c3cb7f516553aeb0805f62bc11d527f3835269c Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Thu, 5 May 2022 07:37:53 -0700 Subject: [PATCH 79/86] Adds stopasgroup to the qcluster run command, as recommended by the documentation --- docker/supervisord.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/supervisord.conf b/docker/supervisord.conf index fca66c83c..c1681b7b3 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -28,6 +28,7 @@ stderr_logfile_maxbytes=0 [program:scheduler] command=python3 manage.py qcluster user=paperless +stopasgroup = true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 From 261cab84505156d155e3cb614092790879cd8e6e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 5 May 2022 08:36:18 -0700 Subject: [PATCH 80/86] support sort fields & some refactoring --- .../app-frame/app-frame.component.ts | 2 +- .../saved-view-widget.component.ts | 2 +- .../document-detail.component.ts | 2 +- .../document-list.component.html | 4 +- .../document-list/document-list.component.ts | 57 +++--- .../management-list.component.ts | 3 +- .../services/document-list-view.service.ts | 4 +- .../src/app/services/query-params.service.ts | 179 +++++++++++------- .../src/app/services/rest/document.service.ts | 9 +- 9 files changed, 145 insertions(+), 117 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 4bab42cb0..9290c09fa 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -94,7 +94,7 @@ export class AppFrameComponent { search() { this.closeMenu() - this.queryParamsService.loadFilterRules([ + this.queryParamsService.navigateWithFilterRules([ { rule_type: FILTER_FULLTEXT_QUERY, value: (this.searchField.value as string).trim(), diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index 20cd5aa99..9506e6842 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -67,7 +67,7 @@ export class SavedViewWidgetComponent implements OnInit, OnDestroy { } clickTag(tag: PaperlessTag) { - this.queryParamsService.loadFilterRules([ + this.queryParamsService.navigateWithFilterRules([ { rule_type: FILTER_HAS_TAGS_ALL, value: tag.id.toString() }, ]) } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index 1961c5e9f..4d66ea384 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -448,7 +448,7 @@ export class DocumentDetailComponent } moreLike() { - this.queryParamsService.loadFilterRules([ + this.queryParamsService.navigateWithFilterRules([ { rule_type: FILTER_FULLTEXT_MORELIKE, value: this.documentId.toString(), diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html index f3e5605eb..e00e54333 100644 --- a/src-ui/src/app/components/document-list/document-list.component.html +++ b/src-ui/src/app/components/document-list/document-list.component.html @@ -38,7 +38,7 @@