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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 z 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
Lg|D+j7wJc*++MP_xmdxY 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

2t-Zhf=ikW>9HW$~Urzno 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

tM`z zzmtqhGo!sjEiM}QY+EvyBP_V&VM6HSL_?t?AAQ0jbj4)jy`zo1=c-;h>pRnP?UcVe z9TKkVhKyV##g4cD{HcQ@ay z_1Re#yI0^?ewcPi{6RHeUakudRvA5=Rx4hfu=VP9({PEu5B(D?UiXJaec#Ki7bKyo zS%0^<%rRt|*_4IO@sk!hw=)1-HHt&;@U*_!s!uiNeJ_8N^$+P8kfPfGWfpzbIdR5`DRNU> zN&bAHjHGXEPghRPiMl=aI``B|uQuFJD~o7r(=hB&Ozy8__@jGxzte~CJLc{piN}pU zdGFbwv(^5*ZAr{uo5M=ng)%WGrU%yEk)BlfRLU~-dARAE^BE?AS-pO%!}e^=PfhH< zGWq+Jtj&o!FLl)Z&)vZNX}f*?Ydh&Jib`CUOfE==HSgxTyyLwMzwn9A3VjERc_&>hbf(_5tb^U#9{>m+L) z&E>O5c+&G(de)?!Pkt}5wMw@!R5m!43mw06IIrBQ2lZ)3tuVco?!cg%gC^m1RwP~}!T9`fhC&77-e zqfRIpeUZ5qB(zm!uYUfDWP^iOXWKE|oa}Pd%=dE3Q-2lcuFvrBll;~{WjwDfWVE{W zC40TyQN6#6$`?XPIaRMsang==nNYK`#Our4-jtxv!ZSLer|0fv4)|2d^UORao6jjmu0OU=~sj=h@T~w%6zjycg`b=bIw!i z8zeV}_62Dl?exm9sULiakr~tZE^qww=@IYg;12gd zajy0AB{ye9sI#y8Y;oUw!)cj##;TjKvoxbajPH6L&A+X-*x<6_RCDn!_t>63j2ATx zJhAQ1?DA7z=K3BjsxX!P$Q4`KDhpZzI0W%ap{*aDehLeD zI=#iL*lo^3Z=0$Mu5UTAgLd7RzMb=(xc1U3uIn>$iYg}c>3r{Hd3>N?`@662_d9(E z{bRkVCGj}(r-V&cS4X=^=|FmI}YzY&&2U+;)K<8 z)%_bz{b$zA&brTP+IQ&9?nV94xAt|d{>9C{sb{l6^ZxfTET08aSSj6`zhQTi(~i{Y zuE%XcucuAgxkP&2ixWjPQg1h0Xo-1wj9;YZlS9ABP3cC%Gv$^pi9SAi_da|4NNmfe z8?i1&KCOyra=TnoXyGsT#Ocx2hr&r2W;wwU$Bl&7M7=+eq0_B=Y|5JZGJU;=OFB*q zIETGB%Q98_=>xo?h8^Za4(l#YkRER^rBjX@WtizEi-uMr`_CE zyQszHThWS$hZAfs3xo@`mTF#~5?WgqVSZ-PCC^;nt1$swOmdu}A}?KX;dXFRboRVZY0UGk49OTGn4 z@jeib^r&m>&WJdA(k|`WUHu4i7QeIYSrV<+H7?xjTf6Y}k1Ok!huscy-1ch5+WYZG zdl%@$K!( ze3^6i*Qf3Iq#d49_D)?==T6ZRO{9raLGf3xP^`@Qe~$nzil_-8(N^OFD7uYV!=y0t93Zhrrp zX4d#~Jge8-pZ_Xy{t2!6oW1`xy1y`;zlXEIfcM@07lI7(m-QMA{J0z=bXiX_G7dnq zAH0$2Ls{w8{rQS9PUdEyYZA2XWfc5g9riA4&(!>a=(qowo0}5z#aHD-U04n3jPG!> zSDt({!En->l4(mPY)w`8bmiKV%ga??xkc^Ji*}xQ_;JE*o;&felUAp>RB!tC?UB>Y zmh$McUr)U(JNjT-*tOEV`}aS1T6}Hpf%TcE&M{ba$32SQllCF*+fTbm%=Xi_9@+Jy zfqi`{Yx$q>`-c42!;G$-ELpkMa(R&IzW1lkyfWrt-Yt=>2~>mJf5dI zy4^(&L;XUcdEG9)pQ`M6X|t4i`01-ht}340q;p^S;^jYQWiJG=_PTkAn`_ej}IEiGy3Jw4&}N)7(Wx39Jy zjEwlc=hVgMvb_(BQo|ol`lh6-dR000X6@st_bPX%&b6Oh^3~$$+If=~x$Jxv+Zeq| zc+=b6>wX_@x~^@ub?xg}@Aj^LBh7bor zvN`Wy*oV#eZrffSe82nG=>xB0bT=OSI458B_$Q86OaqWFPAuM{`_^T5g5O;Zp_sgY zHdwwm_VnxI`ltt<7Dn&HUY70dDRe!PqIkI9ImO4)`c4q2272%lvU&Gz)b^sSPgYOu zd~SS;!)>*Z_O+8)k$3C5J-Z|xbI*9w=B?@5oxS;M?$$?N4>T8+?5Qk~pStV{gIujy zf9T8WEt=Lo|DLVy?0EX}r$Ai25x1`YFaNj=|F>_x{qFUndGX@rlOMdO_-d_loIm00 z{@%rZo|^Mst|-`~VytGcK2JEJ^FU8PHRnNt=tYYT=zadz?0DviCC|3?EL_JHyr~hm z@7RAymG5xAjU(fJe&e|k`!*Ib+&t{tllN~6|Ki0Q+YOa?g`L*^ekt`aOT}uJBRXezeHo8jXM6v?r6W>i>2_R0K* zUwe6N5+ouR+a7IQyT9|X>E4y1Iyd!vCqI?+3!VCOW?t;{XOexXGoQ^|mpl8p+}5>=2V~poiJx0c z-nvyM=iTM7iSZA&a1MJDwnsES#3D)R&)NfO1x|Mq?@L8g-mu%JfcG!LC(d~vi{`C24`*vr45zXEE z>^mq`-vOoS`s_soL?EqumDa?VB^+aa!M&m_PmK z*(X1&q=1uIMRjM~Nzxv6zIb#af(S{9c#MyRfY5%!(fOjIp zExUp*4!3OtjQLs2Hze2nG5T=F>746DWsk>pZ(Pzo9Q@d0E#dtB5654db0uEKTwa(6 zb05vODY>@TpoLl0eZ!M_>HURC9KYR-dg2*9^Zu+<*l+YFtI6}CNX=^b%|2pozAYtp zT3CfUoh@69*O=;>37ag{H`%nxVZXo;SC)H@zF%aX_-uUQ&R}=e=C^^ux|!=vJtig_({E*7PzDsB(b;#R(JmF2wpnMrRW+E4R8V2s!=;)Ke`NQu2Odme48jgCpYE~eUet>V*J%v61@bnf$+?`r2i zn7DK8!WU9n9HN<$LPwrvq-_gd!WtEHcv;3Qv&I!!-fSzE>)bl>d36rBwC@;@35_!h zpmF%^t=j}1@37Bv>t2xe=IS2N^{&xR`FNflP&06_QP|GobcCfaVE5s$FJXdDJbzjg z9M>^A&=lU!!$@(JWrENrG$6b$$I5HLX2)+1?bFN~5}P{h8f4CZ)Lt zqXSnp6;^z?VXyW341-RU_r3-5*KoaYvho&tUmksA&%K|Y-sQLVK5jZ49Jkqji|PB; z7Q2WhF%4yr=UG((@#mFP9-5x{opH`0SNqIe^WG0hXW0CG*ls(lKf-s?s6**N;X3zM zFHH0f-0EiE{dNkAgV{#zbRmacc;?#88$kHlf^YN0Pw&$iL3yqE% zF5*h}ZL7J{B6qoSvt`HTH9`+gU+7tGa_p_mmL3CkZ5AJc1_^8Dh3uvx-WQuqW%hed zcA59Vhu1mK-p50E+bi+B4SsJJ{Vp$gH+v(`iBFd{|5fU6Em&ODcCxTHj3F$e)L+iq z4zRdbit5$B`aN+cVAIs+%F7D$=VVS9O z^|Wru?hJz{?dR-?hi?|<-_gFey-xd9?qpfB`tZ+NO+3bi7u_4{IA2BZMCCrZFlfj z4!CcB;)uu@`wz3vaxK`fN9mEm`onpD&2y!^{EsqU2~j-Sd&Qc;^xWw;&4=Il=w04w z*gfs>Mh2E_CbJDDG5_57t&F7)8=jtbz0D}&qWa$cl6oa)zdeOq7J|2*w0ITxbn|&l z3f31i7m}WG*ezqtgl6Z9Q`mY=uY0^FZV!v`5rad)BI4qw*1SAyKVb`psbk9)&1~mR z6OY}l=O_w>K<81Y;}M6$=2F?s(YWQ z-dlF}U2(kf4g2OhqNU{q3?ff2w%pwu;xBTvFxNBvkyvbYdSdC^yq~v!^jW(5X}dhP zI``$6(&kk31`0f-i}RFaXUyX3X=07?S+m*nm*U!KnTlc4Hoe@X*T3ME)vS}NUcNTl zbnew}aKl~8WI!fWPqb~((e;u}ScX4|n|^ftljtl{b%MwwzHFbt{yvQq{z#lje3q@D zIy8y*J(7HX-|k1{?mN%z1n+Fs(e08hSf;uDZBfF0-X7(}y~m#<%z10J`NZpeea>%= z?&m%Ig~7fzisy@NcGg{nJ-N;`{}u~)8~k_j*U@M?bfLMUY2Vx3pYCqS)MOWKH1saH z>)ii4=FPqpHa1TVowW`Y-54SCkQBrx6cAEKL82 zIJQeBB{Hr7AE0af$@|S>f1Sr?oER-P+Le^gKhm@4TU+VM?wp+4^S*OWz4W$XZ@m7M z8(X$2Z&!Hd{d-g0H*RpVy^aaoZ2#oZgC;?&U;H+Hc-!gzZawY^4;P%% z{;}HSTuH!7SHA`RVn<)7NL)U6Hb&vvq1*~(fxY}CZC5xp_1JW8JA1g~p7{xtoOg;s zcha636Jdw{8z(c1!Fo z`s2hL$doE_oR_D;T;_nV61TDYyUnh;0aLh4)laNVu;z4{u*FFzq)FB1r|y*{jV7m- zbQdXXPx`am$N%Hx-v-BnWh#x1Uyapc@IL3u9(7^s?wN*up^sl1pU_xqapm9(lb0&z zE=4B`+HO=b^l&c_dd$>NV5!g2b0O+7+btm@o=fuKxh9W-jUMr*?<@TLA%6bQ%*cz&9A0V;JGFt2UldltP zuja-_T+6RLuM}(Y)loHN+9myNmZ=7vA#y*iN%!B_xJ-HKbICGZ>ph}s**&qAS7*1s z2wUn}e}086zstp(YQ-7P-|Aktnz@zheM_Xt-0I%NR>zjEh~I7VF(;+k_3YZzSx@?# zUfxpq^xbB6*@w=v#X0va&PU{2$lZN3C&I$Dho)C%^PrL|0x9h&#y;SbO}ej#Wc z-!AHUrQE$oKh~s(J&3;OXy{{`=C0nkKU<>ejf=czWAo#0Gd<3&k8V5se7*RZC(^A8 zu6$e@`A_w;^=YSP<`H4y;iOkl_ct%gE&SL%@!U7df4%AT0pCsk-Y!@-Tjkb5Jz;~hrhM8rURVlD;`p}3V3W%2 zjVqL|JUYO4geUO8gy=u}4t#jU%WC@K)S{KE+DcOXTKC+Z^J(3OHTj%-&dC@{A2HDW zcVqiU6PayCC!_?tbq(J&z_0ur;1`S`A-O` zFl)FJE}3(}BPhn(XlrnYtK!L?l9Q^+Mr#zl9{RBOPXFOvqX+VVf@j%fY(8xgRyp!{ zji;vnl;p*R=a_G=O7zR)WtHFi@l9#KnUGRmj^i1jTz@YcFV$sV7}BJvE4As#UIQLe z-BiKLTRIpOPF(rRuq7gpB{=v-@t5@>A$_S1J=dmgJ{l7qe780s^x{)*`@><~hcnNZ zga?xepJBFplx0_DnwKs6$ELe()HGUCeu`OcORU(L~BpmvzU}; ztm{%#o=uZFKl`~Pq*|$+59=fJE`BNHH)T`wp^a;ozpU!w5Y3uVv_^Ezue^ELI=>c# zuGV^Owsl2TRNUST+0r80K4e$DTea$qwH|mL|INTm!=GWOyA}6s``2v(>^ou-#iqYq z`;K)_%!2;eProTK9bhVOuu)O^UDy18Awt1VfL(T1?ArCOYmYrF-Wv6uA^J)- z+U~~Ry7fiZ_IDU3+%zy?5_`J#gtf~fg?HR%o-CM9+}3>{Lq+V5{kh4%YIYfznEhO^ zesxgKDy>;7gk1UO=(FwqP$Ti);+*hA@%{S0zr8%X{*FMsi~nwqSB3^U`Mk#srOajb z_*-#go$NcY=55#FH%m_HZhXVcUeDYveUrBSfpKf z_j?|Zi#B~WQ+f|=y7Yj_zh6gP%*}X`u(rFf$(1hwMr&H0&!6mFE_VK7%U{WJ>sf@F zy)$Ay3!DhHWz;h22<7NJ*|uh`hL`hO$G|gFO1Y&CFHF_+KX>-eXP-mHy?U?qlrBlN zUNlwL@9kC7SZh=7&9d5#;gk2ayp5PN>!z#km9MIqS4@t)jCZ{jyW(zG@Scg5*H@&P zHHCIuJhgx;rn(%;&yIz?E8I zxriU7YUdt?ZPQNioqU1s_3UX9tKLnx$r(LyvZY4!}xSCV1j;D7W+txZiqeCHd z@dK_6VVhq_39i}v;$hgN)oX6$wJ&;pt8e+zSDUgoFVB*4TD>Y;8a&kRWiTM!2FRNA zU7x4jnX!Xc&*k?LMd;alvUQ7tS6zKO!$x(}Kk!V}9zC=D&{o%X+39D}iX(R}b5@;l zI^86o=Ig7UzS}a3sw&I+W7pqs{P1H=+_B?%MR$b76_;L^U$!T6)2;@#^UOWBG1vMz zmip#BPrIS@A=e-*4zkv7r<@;W^p0!qqy9qI`hA3~^`rkKx}X{m7D8=zT6eImbM9WE zc)L96o~QYyx8DveKA`)-Wskyr9+e}}h7r3%-Ij;0ery!_Y+cCO=~~Y+Ds7&X+s?n> zTeLQ2XS7l1*%ze&y>iq2S8jP-EV(LgeeU)P=lc$2J&)H*6uirQ?zwK?VEgUR&jThO z+-em4d8#N6y7RZ2?>*_+rM&KX_tm$1&+C8jj5S^!B7B{3s0ZC{Wve^qcQ`SLgS$MN zcfa?3{h;lS(Sc}#2<8>o31$JTO6r zXCRZ=?$m8}^LIclI(u7A;2uq@-{Cr8XG}LodRwfv1@9}W*&J>VcGh(B&R=We&Mv+D zY7p(*NZ%5b8#d~_h&@AbThX4+TTFEQqf;{6^Lb)&eYralyvsL7%r4*V`X#ZR?Ll_= zw!2?1)=MNfZl5Fj>2JfqWTmk7x#wP&3myG1BgaikbIR$MVo8l-O;@My$<+Lny{tPp z@>-U$Va`2!;fb5xl-{-teO_92{ra{YHEsIUCJ&#NOZoYW+h<;W_jATOwfnuA_h0<@ zyVFl__x%>8KQZg}7n$FD@NLOdq8 z7F`WErEzOz#@KIUuO$#s3*>GHLFbHs$}TWi0% z){8vIF5hDMHNHMD!POidQEhwAy)L(PrD{Y8-f!XjgBelJ`#=$ubLfv#JtCq~jQ6=H zphQ#-W<&)KyNG(fMgMJBdyQghe(D`xbAzkb1Pu2uzIV-j81~nBbA;p#b2gFYc8*6W z*)pj|rx%;FeG2H2w&r?pctW9~3~wH&S^IgT+PY~!!uE?62>Sd25BWWs6}E1E@al_i zzFfck*Sy$&Th#PNdVj>LK$J!gDWzROU|FT zS|QDy^-hWK@rIC^)_IpWH!F5*((!BBJ@I0>9LvWKq6+gaNp4o^*kr}2a=h?Cx$cgG zlTL~YeF)%WV_u>4LE`j^;v2{Jp67lrX_asBNybfUb{n1Dn3FP9&GXEicSl`2YeMb> zXz4t-VCSz@X|>^uE5n3~Jx66YE))o<{k!OO)ZoEdKLtmVB_XT7b@}G~zVCEZ)HgKr z>eSrW@N1&I34f%nu1$?@4Lzgov!--u&gO8%(6ZOtRzJ4>wAzNfT0@wBydpojFgg8+M-cUUcL2-A$+GpGy0@&DO0gf62jv-=wmRomZ5& z?PPA@d&fJv`)cI(O}78S!;g0rmd4no?l(Sg(akbe&aHaxf)`F!wGq49_q2WBuW>!E zV(l69C9d$pzB|IXZx49ZO6V>(=Rg10rEV1Sy}_NU))~P^T#P$=c7ib@S2Yyu7U>&OAGOME zx%ZWG)$UE#a~|9gD0lt)Ok+Olxiuv-d#+v7pCI+5ZKiKqd}_nN>^nbmjg8yS_k0M8 z-Qga*k!{PWS6$1VPv5qw=@IAc7v(eD`d0bs;;;wWdQPj_nk~+( zPBNKX;I-tVZeo`cHeC|l&=W6Oz3*bxL||UM?Twv zFB~s+yv?5W($3(JsHnjS>nq=s^^7OVG4QYcc2Tn5`ZC}47iSc9tjk`L$-OV1$(wag z))tvR(~OKCYS?r56pDFp=uBsDd6mU4ZzRm6tA9MmNzjCCa{!}-UvLty?9t0Y_tm&I z%+Z!QrP1AUTWsyY19v%eAM97K(U(4z=k37qQDxyo=G}S$xx0(*Zr^-L+ULTSyTX2# zrev*jzhpA|*11a>x{P{@z8atSZ2M)(o#rzIJONF9mu#ZF6ic>jdv5o_HC5ZV|FYNn zMW$zFb9sJK$<=q`(K+bvSJ*t^sp;gN*hGb^Ri=uO$vz#wEw-%*H@p6h*(%^3>)$5= zaZRyr&N!;vS;=T~R%6!>mpMz%ech`a z7XL!^sPx^ybH-(hZkRrvE#4w}W^rmj_LT?wcO296j@@%Y+Rt{5!tJ7;#rw2>|NPdstA!=kzW+U+ zOGC6~()yxJ)%TgseqxO`S-0u0+V-PA7s;pJ+5Au2{%u{|{P%xAhXz-vunfS0S>zgt zC(osO(Y-hC_OPsXnf>72AJqen(G_NXVsEzZv0f+WA z)V>Jq6Dpj+s3R6N|BBpJzuL6zAyrq@UwMItl1@GSY`Nzx=l~7I9Ugf~-+Nv>NnvB_ zODvwdY|@)=yKB!LdtSQx{T3O8E{ilD5So$5-{y!h_-qha!FE>nO0tmKgql4Jy1Gk@754F&JZn0??oF+1hv@fZJd`fpFCgoO5bhV1?*a_Gn@!?%;Z2dtlZ+9mRPi!P5- zW9*g3re_1}JJ0KF*(m7~;{8$j{*|1g4VO%1u4-@Z-t46QR7iAYnZk`Lxs@v0g`+$A z-LK`UKmPKMMMBK-rQ!U8498j-w!ZC?xc%^lS!7G>)xF_;m#>zddz!wqug)jKN?PXn zqlAB2+98|sEaxOhUUO!8FfDG%uZI?Qt;0@iWliXqGJD&l5?kOkExORr8j%j$~|4b&NGbq zQ4u!(qs#V^fUb#&f)!^>S{%&fT5dTXNX_TevvIleMBuV=-8t1i8+WiX1z2BCc%ORI zCPZbyjO@ulXC3$Ne|)Yg&iZTqdCfn2j?dZ37rkBQ!#OGEh+N)>M=aX|-pM)Ns0p96 z;aW$)KP5qjP{9YBX&r_%@cbwa}Vc3jyp-$Wfq;_f|V8KdQE5S)V|!@ zC;9%U4dW|rUB_3BQk&Opk6q1@6;P@QzBKD;(a$;e%05@`yWjW6{J1FR@$gSYT#EH3 z{O2#9ESsHs?A7DqU3b6#;^Ujl%yMwyhE;bz%(q{dRpl~o-_lJg*MErbbJ@S}{9BIC z-%Iw2u$@l0Zg+SV*D=90g;`HGIeI_H-sklBh3WzQ!wnbp-~C|NvTb!lSc@}%cG32A zOlw>gHt=&F`?O!#`cjr{qKeHa7oNi#&RP4Ls9oHj&&+YyZ4GFjq0TII)`J^rl$sn` zVx~Nr&-`Ytkjur#0(;yq=rja6>TO9mYi%?q=bcmEXJ1*Hpvl5o2QIj@bb1F0tQIom z4UV{W;sFb%$q7ZDgws}^o@DB~8XnQ*I~=6^?AN{*w#-~-3U$gpxv#K!uYKCE=dMQJ z8;fY)oe!+^H7*H#x#(pSoa44^!B>;}A%T~5osBOA{^7Sd?fYccdABb~N_E#KCHFa5 zs#Z^X*81i3kN|&|?0Ch6)iqpccANF}bIwyvL`*YMjFaDXwlQ~SU-5z_ zKNac!R)NM_Q%xQHd-*wHSLlixDt-68o*KI?^n(BZ@?SHt**ATzX{pA#&RFBi{0xTvqiE~B?O<>iI#Qx{i7WtfR`C*M57UjBUMw}zh?PJJDAW)d6N zdt6MdVvW*8#T;!SulGn+p4-07az(J!l!>cyH99}vW?Y2dGN8m&wXE;zrbxz>m6~?=EOT!zFwGglfi|t?xR@U)RxTMWwEhJce+iip(G_RhT zZR^1m!&H}?uUlj0a;EIO<15>ajE+5z@6^jIo}BpX;g4@0_5!SlE`c}JxQK6-vGj})+CK_DyzWV8j$}aJD zN2Cw9OBd`HEfBhLt>p52)faA27J6#ev`^%1P+A-U;k5%p)ozG7AxnoTf zKgTYO?jJvAUO1V}JL$uVv;6zl2WNBcTOVDvbNiabb$fT{PhR!Q{(_CC#F4xyGT(Rf zGuvD+@l`37vU@Sd?}V#vNxrzPpl~n4PQM!tpBH@C6VGMv!p10FM(A|3==z=$r}Ymn z*}-YpdRb>1$BKB@7uFQ(vc^ zn9(C_B|`J z913(&+D|>x`;+s5NuNckV8)S?#(FnCD!1SLDVtoI@$=o}75>voAD@i5wM=u_BCFc- znlJfmllSa=Yq#F+^=z4Io6%NHtzPT7_U?DtR~n)f(zj0DE$=pO5Uuc*@5nB{m!JH7f?^Mtiy2b*2f98e%ki=r{cc+)NN}|U3|qe zD{^jFacS1|tVe!wO42=&Pk4U@G^Cp(o@e_~euDR2bt~(&M_+bnxaa5Jxc}b5)^6SE zy)_@c?wP}L$N&81rt0tFxBs!TvmaVn@aBK`?ySq^yo=u5*vq&0#x{j>r{fv7o#}q` ze|OI=ul>Sr7`_~2KBLTY#C-i1Nd_AM<0Ib=>ibxA+WEavcz-BR_*b)ZVdqZCh3q0Z zj|C3%lrrsEFJrTZ&4{B~@wniH!|ckbDpR6QHu=oqJjLPQsoAn=O(_2%?KR)OfZC*NLcfAfnJzjVOnrTo5UX6nvn@+rGkBKp*@B~>b|cuw)`N0zzbiTgI} z-PLsan_D^C^KC(f^+6@8Kk_~ZImf^1_4|4C(|wKpgzXLap>w*>;=5{jarpMo`ozdt zY-@wlXNz21A9;l@r8#ZdJi)2yKfisS?DKo=&(*2f_Oi!6$@Ht9{4{61?&;4mr*>SB zy7S)j{G!Hi*T6M3&uuoBIEH&{EIGE_@%kcJ|F8{TSKFs<`UY96`0CVvw|`MH6yG0? z0}LAi+OLUtQXxb6-&20v)BQxbGN94j)b+dwNf~P2hDZK*Gn7CMgTO%sAAA`~;9@7g zo2&91fo~`-2E%C|=14A2Bo3>;_X- zOZiL487lh{(^r)o)C^S@f}Ek&dvae{xDl42-V{6$%nOvlouL@6;K@)TmQRHji7XTf z{H!KbRB&EHItX`$if)~3krCbA@T2Fd-oo;$!fs*~=fuJuE;-@fKiiV`iRP0@E51T= z)rr=%Q!#RtFF04#h(6s2%2l7|6wiHB*^9_k^=vQ9kaN|VH~I70XJXG)YFmRdq)jev zjJ(2^)0{3gPjGrhmDvBOKEKcYT$}pZ9-g7jo1XnV=hco2Qg``nFD_~f_YGWA%kHwd zaSgUymGvj{0NaOv4Q=2_w4~|TM_;{U zJr~i(}{bYJiSoMX05?+?$+mmTEDclOD{T^iSM=BZaQbul}*1^ zT(+*c@W4rKkJ)*V?&Ip85_V^&NYBu|`S`(H*>%sZuDkkq*X@1BgWXrWeZF(ge!frY z_ijdiiuU{a?SJFJLmL+ISh5QV9{sh&?!52)Yx`{09WHP%_ZMF9*W}!9MHVxiRbKmr zeHbnsWX@6MIb!H~ao)JiD&CZQPT<G%`{bMVre0yEM@FJ^ zTZoswoplJez3%R(y(+Pn8f|r0FLSu6M9iM@hSx|bzeMQ=bDrd@N3-=Tx)qf}S&n-s zY`Loud+DI90qfemCP(UnfLN+0x7~!pADVB7iFO9xxEed5>12D&ocL4hElZU>#cfOt z9QEHG<@1hUJsugfWv@~5<tNd{JKjm>;-_JeI zrTsQu**VRj+(hliLj8H>nVEj`c6BC-E)$JOoO;#fYR1o{Q|F{t?%mJ3K0@Z>wuR!^ zP0d%Xx`yV&%uKsH-FBDH!R-8wxaNf~wv<&K2#{LxyFdT;wB>Ww`~g=};9LbdjGvp? zA-iNQzfTuytk0g!CAC^-ue8QSoxV2fu6<5Nne3#Kw{-rVslNR~j=%Nck8Z1h?sXwo zSKeOWdFF?_dz2UR7#v|P4D{amAi3Z8Ng*>&fVp(x&dUkYZ~tQxoU^s-)Au=NcJVLX z8?Ule`&+yH>a7V{w|aGyGpo-sm`E!|pRc*_K&`^(pIX^Xq5C#Jco~kHc%Q!={aL!# z>~-SWd)XJH&Y5*DUGl0V@2_ome)7ELcOR_l^^0R)zW!b~_pjeG?l*US?f4L*oX=BY zl(YKT$35JO-~BRMbNkWv1?MmCWwKkhhM&VxZ}XWqwj9R4{vXhZQu|}Ip?J%8YlA-m zAGUn7zV&%qVQ|sE=@&bBC3_6lg!9;EsF)qzs1xGQbj0IKIfMIx9CtCt*GH5-dIqd% z<~7*(SX18h!X!@lMVD$CS&wYU+41$%`p29S(=X2CmFh9v{iNq~K#0ES>C4s5Itu5! zr#)-ttMKYRyJ3r`fzw2nzbby`xZ56`E9T;N+SymU(A@uHE;F;zHUgcQxGW7b? z++3TBuh+(hd2F&xX1px2fHB}!X|2iq3s>F>+>4sFNa^29bI$z2PIHZ&#S1UL)sI|c zCbQo&%8W}nH1_Kh?n))`B~SHEm)~WqxHiq!Tj$=kw`-fOevf_k>X_h^Olf=bwR0_e z{J$(Y_23$7X63ytclrG(X4^n;#9#qc{Q@3*(7q)KK;HOD`sCzou zP<;Bd%HCr>cNXTJV}3Fc^MhOI*Y5h92XQwn9IAQrjtCSw%A^Fntq@A_m}$eE&i0Kp z&E@CDdnKv!n{Giz?k;AU-1yylZZ`Y1xYA26RJJN_KPmv)%lO?{b!Eoeq`kebUa~%V z^I-e6(!bqPPd{^v+-UWA&7C({YbUDLm)76UtcZ!TaQ9w0SN8d_=r8Q-TbDP#s;IqQ zUt9k$v*J!%%(Y^h3krS7b6yy9Sk7mjAK-oO$@<(1Mn(f35w2#3XEj2#wr`5=?O?d@ zBAI`G-|RnM4hU5J<=Av#7T00sGY&C#Ha2u={IWZL_)CkN;ORH!$Ge~SJwN2WnG1CH zktCbN3zdoNPC_ifiV7c7VkHb$%$atJfq$~s+r9n8?Yw#)p4bW~yf<b*K-o9MBA z<|CgJCMK|3PWrs!to8A8IRU3n6y|g(95dQIU4GLdU7mZLFZRr4^5QUAYJbc)`@Q-8 z44a|~_rfvKXYYN_pDk!QbI|&tNu*in^o-akGndrGH~aqKeIU&Ak+0#xkL1iVA9ckQ z?&)o;cq2U__Rv#>Z@qWD7F_RrE_78a#HjgUQSDywE21Ks`(yLh-j+VI-OfDQ<+`fm z#8XpwJ)1Zy&;Buaz;KV{+LbGEseY%7)I1#wXKah?d3tSKE8~kPWxcbWKiXC}H~t5k z&y%Do9%et!AGw!1c2wP&y6&V#;_0pDmh8;lK1aH{IFE@V!gTlZbic1FQar*;mn$yq zXNmnVZHecM6mt{T$^wq{!lHgw^Srk>-gwEFbK`36#L4$={NmLO+kQ5`Cr&D#ulozv zwlfSVcfC7Lg}hLk8WZjyciXz>^zxXN!Y?`DCo>uP(=RDZ*=uC}R-?aqW8(La>sO!L zeI>|s=+F1SDPj8k8!tQ!zc&5S$I9CHP9Li+$D5z-=a;@-QQG?@7l6qsiM_fPLdT}=|hwh^S!)5DC*7j>X@v*diCwWBfOtgR4 zhd)Y}mTcYdIr7ZcRX6jt-+RCPPmFwM>F#?8Gr#Ix^E=ZE0>?WV|^=EZ1HZkH=2pE`%RBGPHX*b zqxjEXy8XoWhY#a*Rs1LYu+KSttJVJfC7wIx9w;K)&;dcdojtuQZu+{|@KgG2!%7X0s2o z-?Q)7`1qr|-H9u)%qKib#M%ySlF|BeNW*3^k9(oYMqWpaIrA92-p)yvSg_F~tv>cb=bNBr? z!Yu(7SArYvnO;?FzPH&e<5%jHCy7nrk@qyEukZX@)RiRp)OXsgt9*6OC%@}n_UdW) zwaA|9RVt5{toij0<>WZd-BMW_A8lN_{jGJEhG^cbS?f0ER_EQz*7?04bhp**!!pO; zS5N2Z$iKsMe$R*5O=pj++P$A2GAj6bfQHR$ZpBaA;JSr9zjc3}fA<2RH|%?y^!#rx ze)NWA599lA>&3r$Ihd2+8N`35^*hNwOlP7U#XiU=UHZ9ozcH2!^8MO1?oQ@xj102R z=w^dhCOh5?Vz&^UK@{u=W{~-3=$S$08*XW0b|1|kxHHIvykV9>(wCd<??5N%EFn ztoJ5!58L~Iu3o>@;X9$Xj~kA)?t@U-kIG8mwl1m=a~grDR%x% zS+wo4>$%(Sr0M!bCq}N_f9H;CjBVb&^Skf8zjdunVs&@Jrcb(a*6}W$ef~z|uIP8H zv)9+Z`3kzfWt#Xv9Kd=OB@n#47u|c~xrgO_K%4K^^Yyj~&OfZDp zFPijb`yQcuN9(7*8JiAee1ir;UUAv7wHwx4dyuzIX`O0dXqf2D@3Y@AN1Z<+TDVhY zb?oNZhqjbhg;tyEuRXZAY}MX#$ETlt{>ACRz+6CqoErRRFZO$rzQ=5RK=a%$uj^S7 z94d$kh{ey|T;3!3-goto4hZYF-oF!?KsS-;1y%>|yRp9_E|Ho0>4DT@*kyb;vqjnV z(%tvs#CN|vZVSJOY);l2uiIwZuE!UN=4F9ePvulEhZhTxmrzf9j`{CWWJ7X=> zjV-UNPm-RyqjZnw!sa(``#t)r53+rXW}LV8pPlH1&-bchPpHpcD)YK{ef|8B<(H~# z6OwPeQQ>cX&!p7+zAeI(n{@3?6H z<)quLZ8vA`xSOx}E^bl$8k097)=` zCv?2_C|(eexpRm^`!=gVTg{UEQ%yW;I8JlQ1d6&&%uv)nb%ftxv{!A*U7{ zc=tzWk(XP|iu^OiQtlS#iq~xTv!yuL+-&puqK)c1w1eB_RfHdZXS3WCy{PBB(3_me?!}}Lp0*F>4fZv(7V&q)@-Y0&fFu`yEXUrw6}XY7Ys=A z5M%G%+wwiGx{yOn*WP=-{r4HWJ6Cszu5*oE`pP?KU(^Rd8#{IJ-a}_ML~6?A{mnV^ zpzzz8e|{6E?zr=EW6n2WXRj+sTZ7(Q>sMZS{m?hd+PG)c+YY`kzZ{#-<+}UkAxnv~ zZt1yBrJ&_`W-7i%Yi4gpz3SH5)@R#a!N<$p-CsY*iT1!T$4u zy^TY^0{@5%cJQ9ZXM5PzBky^fCE#~N#1Opa(c}bg5oph&DQM4Q1&`>xkL^buJ@|2_ z&Ru<8aq4EtHP5UA7pNz73G}MoRxmlqTe8@9ihI`d+wV&%@3A?zvfY1JCQ}i0c+RF5 zPNw0v|7cIH+zcJS-WYwbj^^KR!urKC zr2@^FjP@%`Ld6sXtGB$Y3P~>uEl&Qg- zjPEwwNrnl*m)1IZcng?{YEKhRUGBSQ%PVgGqbqb>rR_}Ka&!lo%+>b3Y@Bu9ylcZ7 z&%D4K)ok^^3(9jnMM4(Vd$Wifn4TCj2jc{@rk zPmT7!(YmE6dWOyWmh%;{1#MS9Q>b`(#$9Y;LjH%`o#s?A-GX zeKoT}D-ORcx^Hg#yX4k4*;3G5BtIVC{pt)uu-sYZYWJEr zYi2_(r>ipmGfqc&aXRFcO%1M&wvb!D{dM-Y?6PwVM%AG>_XY-LQ3D^Z9ar*Jej`VOIaghy8UYs#PMDow~ZBRz=zGwFLL>m9A!HK z1vVYYXoy@CJ*m^sPs=r8t>~kJaszU%2l9e!9zB=Y(7l%7P99kHTFMql!1h|6h&T8# z`-0cco&%f(5k98(K6dXRP3Vh&2Y22zhA-W9FMneUub(}iq9!gRE2bs@^lsHacV0f_mOt;G4{p*dnzSspw> z+B598J%@{}fY!OiiuCRPPus$c`ttn5A(zQi~Qr9IG zToQh_&10q3QvOwwVg&pTI-ij!alFtR_I^iq)q__(MlX5wr(fngZ`fw6ao%`m(qp%~ zd*Ap}J@jVC{_@dg!p6xw#^*yg`Ic;|S*&>`-Qufb^B0|FRox(qaAB*9E~RF!`OTR; zN6*V7O78f$CX#1kgQ>0lgv*?@4rdnjoHIVFv4@}KU_p*vlh-*3X)eF@f8(0nKHmxU zaPNCktKG)h+v0Pht+t2fCX?t?$Nmrv`zR^?FEUNn4Q}65cF~x-Ff;7iQp?!Dcc;_M zkAFI?t9#^SX?bB#xN5_-%Z$w?yY-uD-*R2MyoWje*2U9zJvL8S^j7>t@$8>bw=z^$ z^Eq5`nd#~hQIeQ@?(*T>y7Mh8f5T2q-J5K&NL9@>N!ZMAehRZ$Kx6iTSDj z;}+cb+njh~o9*P(3sX$DT18o`{cdwO~{U;DB9Hy5+o8GNnGApfIw$>u;X`kohRLQW&`HJfNrW>zR>-sM9jmR?%^9n87Kifv? zUF(L7iAO^_Jt~VQHhf+E?WjRcyRCQdM?TXhPvW-k6U=)U{_Od#^B+=~)8ylFZ<-f= z*G<2g725QNr<%ont6q;yl=`u|`}($B_x3qzEM0MPO1bZgDXU*MEt0C~>^YggW%{oZ zReeGXX@=*YyqR*@pjQ9q4UOerKFU8~E`7xKM`Ni(>HQd{+BLl1*5apn<(;>(y}KK* zdwSUmg&1CY0onCyUzprEvG_!Czpmq+i(fw9I>?%Kn)9UbG{18X#*>?uHPgFIoesGzYnwg$L0QkBy?Zs=yR-aEI;>KVoyeRpOxueWlibDDw2KLv39#$8D?Bdu?|#!#NfVcCA*aO zypUH*R~v97eO;tgIAQgLT^@(dt3Ek0b8=8l%bbU6)t@|BsN%3HNSW!p`clTUDGjTF z#WDj-mx^puzO*iET4Y@0)5RaA1-*;&zFDjPj8S&L3o8mXd%k9EIUM^Qd>Qj3#D4Gx z2{TO0M5DJJb^O?Ir|7!EqLW-@=F)Soz0rNa_$yE@GGg`hg$H--En1&mx$i-?#jJO3 zp6j3MS9#WLp1)0S{)HD`cGbRHF1YPNywv=S>fgXa92%czz4zGjwKG5C+4pU4g^MmL zbY`-1HVUkG&3({AyY11AcRrlVjsmCnewgzrmoVt6M*nA6DCiTm+B)yhth-xze}@Pk zX}12BWxr4*o>3`pb=q^gk4L0_y1e`S=E$Ca$8jQy42!NSC|sJtu+3|w)>2WeNq5v7 z4=r%fvpV9yV)n_>uw#|o+4duMocvg8o;+^-ym|@qzJ8W`wX;04)cN=NC*Ku3@u7;F z(`mw%w&xBooe|Le%Y4N$8{y%2cA8C3JaEm6_$%3f1-T=Z&Jn9)@jrov?i!-&37mH;Pg(e7tel_r{svGu8{lW?z5f z80$Fo&BTO=kR#H*_Lt`FX1e`ZcdgT%X(t(VkAKYFDu1hjwc^KZK__qhGsZHfjqh## zBv@$)`ckND<0?aR$Yz4Pp%6y(I~?}*;wExeMv z*E{&CX+*sBqEB0xdtO@bS$5no+4Ftw`GtNP+hZcyW-mWyJX_J~RcV&IDcA2Fo}9c6 zhtIp8{rJc@!D)fmpVn3x-m4l4KOH}1e&prcdbH(E?w1$FI(zR*F598EuQ{d9c7kAP zWLoQVM#(0zx-YX`1GkDqr>*SFpDbb+`Pp>u-k8@Gcf9v3nzbdd`b5c}?qwm9>n?}p z7Oz)&mR9@qd)@3?ZYLOGs?WwxxR|`=kjro3tDPHCc8jNHW%@~qf4s6e;n$l*bGC0k z6KhnLaw|k~%jEUtKdgVY-0o;E)e88rXVyW+VJmwwTV4%?o0cpYB#QP zUuZZR#;zc$^;ACCG<=PsysCxJ`vsSybKY}a-s2v$TKLeqrlnCFCd=dw%y_*s`IYK* zjqU5cg&Q8M?Y?-{_*vKm$!r&=m9<@}7E#yc?*5#v7t3pRt?IetkGKq7-bF{sbJov3 zBiWe#^7p~(pIjE~)GM8EaiTTHoFbpad*bzvNtmA4%C{)TruO2>CmS+ui^VVc)SmOn zL`CAoANe)qF7JIKmYEzDRN&ribY989NyMAus`240zqRX*Y`-p({OI+>>_=8}J}C?|> z#rZ_`8a{J5In$+Lz!!RwxZRZJ&*OUA$)_HvY}Jun6Fyx#`I8m*+5Lv~%MKb^wwE-O?F1AG)n@^H^Qw{xzoyEN)Afi?^~qNu2w4>;F>c`*{`R z5*72KO|LY4yZiU*kM=u;Kgv{Au3xzNjrX4#HhbNzt0!IF<+r<&Vb42hri=T}MDe}Z zZlK)HVzU1Cm2cKhxew*p|aJdT>u9x80I3Zg~=;H0DpSkf)PfU3BlfaK{X;QiKdW7Fa18J<&k|C`+U zvTjo6OR=-bR#&ZZ6HYjvS^GOMGkmJC;fu+p%abqO5<74>Zq38&&693>oZY&CW9ge0 z>06x}bHk#pMt!^tg^;ofDT8E*Gi z6vk}NugEvp?ilo-PHyLo7u%-w-wMAyZ+>3UY}wV(-|jSrKghdxjCsfVY1_B1IwE^l z^68mfX75vKYNnq)TR!i9_RpM{y5(Vg=T;0sw6ZV@4!53wH(M%c1HWKnDh=;AulX#2Y=b12X$JVY-<#X2T;$M6swE?#I)Hq^J++uI3+i_nbwd;aQ zmoemo{W0hyLfk5#oj;WSy1}>nNl}y5XXZ3VRo{|W9(t(l3tO#o zeTstQ`xiWn`z_qN_xCja-C{kbNBGB8d!OI~O$T&WS6wpypuA(Nga6^fta}QwrJ1+t zF<0!~e(oj%XkY86gUoL}r(AIIm|e8j@b#sqB1Z#LOy2E#zeeHr{&y_gj0<{GtggH0 zHrr*m8JcL^-ttLCSms#1lCkubAd`4D!@`M-681&KW&gb{Zka5!SSV$wmUoBdcEj0| zwO72h=DQpM+PE{Jd8ecD456Ku&b;Q~I^VrS&*wS!I_KTWJo7nD8Hs%4TJ-7jXWau= zY&x!9oOo1G^Ay*XZ0q&HmzOo~x%`*e@q|IGrc;nd@tH3I=L3wsvAr*T@WL)3XTR6M z3!&~(ekZny2KtC-sd}H-Qqs5Ux`weqp$hmMTck(*Z!2v8^5?Kn3!5$`nq?8^*uH_)86!;uoca2wed}&e{2&3S>GL* z`9rh4`2q7amTfmyEMa0!V)IjZIPH0v4rel-#^f-+65rj8H!qf~>kKd5TJ7oCSH0MG z!Id|c9aA#;g4<4u)iCDW;7DDX6?L=LG56YqC$_B%&i2k`dv37Lm0Rh$HGgX4L{;gf zmj%w{=lU4AZH!kkv(keZSN9S3c&ZUb^lCGzkF@_r-FEPUHz`L3T4-|X9iBZuzW@W{tcKX7Sp?)$1W zQ}=7`zRVzRV>Vyp{PEnPMD}@!ujg`H+-~KNw?y&p^_nvOy}O@GTeAArZG~&|+1fPz zekqIR*q>y6mqVl`B;L^fn&6WUj}`v+^1W7SvOgRAv&xOk)~7=_{@N5| zpJv~*{U&Zv56b zRLrF+z35ZPN^Qq4DO0sh1*^>U)Z5^_B+shB!a$I`n1j8=_4pjUTAF?9`-1l!0Y9hsuLw>E6%&%X z*m;BFXX6nDIo>)$-I+gIAMCKYou#xvGP!f=j+MsUEk90f?md?@&*nLQIBThQ$TTH& z_i!^lLGAM;cdc_nj9)2xKN8b154>Y~x0gpTZ0p7uv0_hsC*HsK#8EKzlIYPmk1OY9 zsw@_dHamAhP;ctow4YBWF25*xM0w6tjhtYy*H*I46}wGK6C>lkF8w~`{!X*)bKl(V zJ?2Ix~i{B<^{yc3DxmTR)eA@Q2AOCU+gns?@ zTG;)w)M@)`qP45}?|=Slf6Dsjzt!yT{&*YziGKfz$svN5@qr7ca>_uT{f3%hv;Jfq zVB3Ig=dIFVo!w`+iXGNGQB0nnmjPOqv|hRLchC9rLaNGf-?BNL*VVrz9+rDv#+@1Z;>(79_O6=} z>Az|N+P80A|6b{jm%QDdX-gk&?fNr6J8aUL`-U%67_Qr_KmEi)*_rRBjmVT4Ba3)+AYQ4y{>)hcjZ5O9xYn|S#bK9zU^V4ppya*4| zh%bBliy!>7oAlSZx!T$rg3i&BwQ~ zdA6OIo-0_saC%2l_fw0|-c+wC+gv-&f-kI9H+kmmx7aK@WXyUSazna<7LoATq|1BZ;WQ#@|DoINajuyDtvhr0vA zTOaSw`BAo2@51$R>uH~Vvg(G!@9@hk{%o5j(2*DYoO^PLt-Rrh6E<_&Po20Xw^OzB zw|;WWv%A-GA3wSKY~rcRm~As3t@#H&q47+=uGGEvTi-8n3_p5pO|Jc}Y@PoCp`Uc( z&G&w&<9L7dn~r_?h0S%f^B;rT$^RcPN)7lp9C9Xw?OH_M#rs&mz$B&c$AUbw$HmJI z>TmzUectB61vQf>wzi_R)3lR6srAg$4y@YenHByzj*Gt~_u*WrJ8SprSD!g%`m?h{ zzWu`HDJoo;$ zT-&>HJmN1;ekk9Y!8>n8*zf)Mud|-p>3^2^V#dFUlfgJZhwb);HP%8$7p3#)I6E_( zF%fcZ-D9J2gz=3lkHCcs#(XRjKIRK>Dm{s1*t?#K@6Y}Z&R5y?Pwf6G-uKjVm_$A$EgGmCTf8dqovl^EteaZM3Fs1smiT~@P%w8wAHv4-o6y*(% z44N`!cg(^sUu&bn{lCgw6y{a=9`5!|wBf12mJ|QrK^6kM0&N;wQtg{{3hlGX1S?>xnOar<DB-d&IXF-?(GDQIeNQpELd?v9?4 zajd=%uWgd&mN8WE6>$wriO~xe-O3+$+Oo{l?}<_C#)S$uzbdz+na-OyIXbN^P&+lu zO>)7jYfIG@-MbamIPJBil5)?(ZEN=SZJ%W(JmK|qvy)pqBEk+&W01~^ugkgmNOo)H z)@LX8zSzF*cjNWyDZM>$7k?L9`-=x(xM~#L&${QsG<*JC`E!;fo=u*_c6q{@zx=Kj zzs%KVw3E8)?|XHLV|XmH&RO@MY@NRap*M8)P7l3S-tj*7j?Ucc8Jo+$gjYZQDd#`+ z>CcVT{Q}aWC8>w~s zMK_)~z1W8PUe@dUGldlnyw^V0Xtt!A{qbHRZg>5{^e)@Y*UPvs9f(%A$HNo6{^r{$ z)yr472lqbtSpIF=dXDvXPdEMj=fS&fe!<6mxtm}8H7?-(^WwnS-4ajq^|)`dnfccU z{o0VD&39yD#?0Tm^95dt^G_?}G!|^#sKF_Gc=-`K*CVQP+b~fO`b&o%6+?c>dvWU^vKv#tm>|B?Q+TF+?=wfj-OJb_1rgZ z(db#aMCJ^OFY}!%Uyp749jLpm_ae9DQRO#pEe@T1WAMVmsQRy}y>WBTYZG4X%Vs{t z#s4}kaHy<#Yu)!%Si{a_&VNVC!ZU*Q-a%iK{wPezV06FmWdftG|7MXz9U)V?Z#18p zB&r>JE%2(XoWj-YtHGfHtd@o+O^)o^6Z}nPHfQ*ouUz^jX_LK#g1+uK(Bm0AhGi^So~ZEks$f*4)>iqnoA19K4Gu7yy4}^Wyp*lghPC(2bN`H3*V-6y)t%81 zQ;+VAx?KMETSxfjTus+YSKcvaUg$f@8}1dl)-~eJ4%Yqv2C>zgmJ>Fwd7l#hL-)a* z^Llmqbq^}ep4W+zC^Jv?{$3|OIqkz0OMVwY5l^9G33j5Tk)^uvstAn6f@i%Ro_kOTETRUk{^|hHk52pHx9!;zE4SSX^UHa&_5zn;GI|`!L z?K~8_C*Jnt2kErX%{qVmL$7|Fn3Nc&80_Jll7cXRekT z@0BFaZ@M4({hMC6{!ErE(v1-msGL`4TVkZ}5l-@wf3O zvEEq3XP~@g&z+YWr`LzpU(YOyiQVBIdhfso=|AD;GOXYrR$`&YR5)jFLi3Dah{ct)1b)Zk0Gz%hR7OHcOZ zWlQxO+UO;yvdv(Q+@w_jJyV)b_D)`~SFbZuS+_&z#eV%RVeXcTM{@SGJ+%vyJUu{g(r<=ilV+(FTq#$nW{bI48=ZdSdQ70&q0cGCh2hudHmXk$>dDsf;tu^O z?QeLbIGVHcz~xxxvM)cH9$iV@@b6%5V%c@+30u?KuYEmRniO&Mt;gYz1F8Yuq0T0o zCY?^{*`?t9=+7YyrO$gGrYKAcu}@3Rx3hLiG4!i1ylJl2-jud;U-8^UR#CEkCzi8q zEs6H%S=Z$mKvjTq}Rh}0S;j^^$p@g2u&8&;h zPA|Vy{q4JU)D|cHo%uFqu17BBz5Sbfr&QNJ>-w9o_fJ)}1_R zR=Vk3WYopF)j@og;$lDKTjU!rwC1U;Q0YCpaYyn5-88%JQU|A)XtaEoId^)Q(TvTvksu zcv^5v*Y%KS^-YV7606V17nbgRpL}hq()3=wBhx-szxfwke(Isqk2$G2%9(k$oyvdl z*l4ex{pRSenhN`ROO8jGWjk-!FS~i;o8z9^c)j$8^Y$fHZ2I$c&Rgd_JD8z7nPKtzV!z*eR|nr`-YalLpU+uU`N|Lbcib#Zb{RTqFBVJ) zE@?hmXx+AD*Mwwu9=m|g*Lt1K$9NrZZD5IcKlzi^l2GtfM#n!ai8_CPPb8SreBvaH z6|1rq&euJ*Y4JjB#h@7sPu9PFv)I5Rpe3%^O-K6EJEITTheh1_m3aOg6kg)Wd+@}O zBTeV|4;MW@dD-W_@!2afiCP!+SQ<^7*Xg`<@C!b}YN}YmWo*A-%H^#-4jcD4%3Sha z^4{x`p{!fe@r_4>P5p&(nj?LMWOy$7_kT?c2`*miYovGC#5XMbVyHxS=+>C8dRM-R z{B}FX_qUM$=C@dNzw1*~XPVs<(~`~$`dq{DFIuB?a@HN)vo^i1S5(tABFf%+CwqTW z`JUyMzQk#`^38e zCSCp~KKV>v_~i6A(YA;e>&j3ll{6Z&Vxy4;627Jo}o|zphc1-zkb-{&K z->+5AO#h{JIpCc}-OPzwPbsfAij7mn!s?tIO0kIp#*jZX4(6 zpQ_INJb3Z8Sam`EmT>0ompio1gWAKsmlwrk%Vn3&b&r|I8rwHz^_sf@Yp+S2woei* zON=^yyIi)urN6xPeckcW+N`sWR_$Hh4yvq|zWmkkYG96#qF^ty>~W4Cr_&fBSI15L ziO6hr@XTh9l-Z`Ae%;G=q;Vr6v!!35S!Po|O?+mXP=qtHE$|%PnTuK5E_ze*`Vb-eCkhT=BxixFsp{+Ys7iAuUaWR*m?wn@(H zFnQEmaZ=Y?z5n#9?a_OmeXnKN8LM}__rG}W@h4HaWyiLgPp%d%DVmvW&pz|q<`UOf zo7U-T!k%s2`F-8>;^KQxe^`sf>pedH{zpw+V8wu(VT{;jjWtY8`6%7z@jSxvF`&)Q z^nAZfz{ZPAZ7Ef&l(mYr}i)pRx}O!ha$tec*FoEdca zXs+4rXp~t6m#8qw%zIL-S^LO_Rg2jJN@EJ>7V=d z%dfu`8<=Jgfq*$bN7 z*jvBfN&oIB?%>H4-wnw{1rgR?&%OF^#7Wxe4&WF{Gi!P;p zw%ogHv-7%}A1Y$(WCmmsax`&{CeCn!u+a;z?H@RBsEF~hw>TvR>_{<_Jv|#|Flz!DOhRR$qPn5mt4!0n>zpL=88AR0&RNF zrI&DA`9)ldb4yh2@V(Fb3`5bapljPrw+Z;~5YY?h_MUcan$*4g@an547P3YpgjrZP zWbALbcJKKTQC6o~+nt(R`2A1EeKpn1 zxP#_NQDw}&bo06AUzAkE+AR-Xd;LvWb?n}?PghrKo9>A{J7e`(&@g_r-1p`q*KYi5 zjq4BJ^tJl?PqTRarEzDz?dO*|^G|F2=da8M1$;zW2PVK;w`k{j?oOC@m%}Y4Y`UrF zl~8biZM*v=vVNP|(H&;bME16;CHc+R;hZj$dP3xr`<^9Y7h1P!7nnV?J@m9>ckHcO zHkQ>wK1b&o?)cN^ubqY`Eny9?XzSBq-@-0#-CeD{W7UdPtGT|(-uvI4`1JFy+Va)+ zcOQSh`%l)l{PgQ?e{4>z{`UL81RY-Hg&70UYddj%i-oQWcY@np4$z|Aw6#~(mJ7xC zi0@8hx+A!2Yu?kObz<#o2OfM_8e_X~epW$z{&!AY&+w4Y(AJ9C`}Fx)%U?uD8L~}D zUcNbtaK=LkEZe+-HP_yhnkKD#mTbE6b(z$yc@I|a4c}Z*ZM$B*?3wn5*meK(^Jm|G z^QW#pen-wgw0O=iRNjjGwteX~fu%c4^g#X0u&aAS*SkhP<>Rf$y4Q7>M=_t5qcADp z#%3|IzpPvKyv_NYed&JT&Z}AHWFE=eNL=9E63~z~C3!j9tDIkiiY1iLv0ENy*>KQw zcWiFN>b)hqBY%spyBu}?o@j;Ew|vRy(|109|LnA1^!dr#o2zW&{oB9)`G0_8K+di| z!;l^2eQn#(Z34e`aOPo#(b+u;(!3n?N%0b!zk$MN>)O=U*-79qx-tEm?uV`m$|eDg zZc|;Ci)N7(Mk!Ud_Ij*(S+@C`e(Y-V^8MkPE4uFa-JO1RmgtXsJ8R$h_e;N2*T?UF z{*8Aaj-NZRVT;~dr`ZX5cR9A`NKdy~v}%nusQliv_FFsKo~`+*iE1JX+uL~zon=zQ z9%segW;J^dd+1_uUTofnwz|@V^IL37d}|fOecLr6w-T({P}9(|-OSC|WmUTlhL@X$ zZ!UdbJ8j$QU0UzEzQ!qSpS*oFs5n|LpLO=*svoxh_doysXJ88KlYuL*W}UZAw!1SE zYc9KfXzefVoXXoXAI?dbF3Y+_>)rGmH?0RVcbXWL?atjTA$goLQG!QIm^bYTiDgh! zujdqys`3n*{+0orcWfI>bLg&&>&LVK=1Rj@rNOtJF7QB3wYj@-nSxL90zCGV&E?*LRclPw| zYl8RN5|X4Wmh%}sE;`ZoDOp16aL(yFQrjK(KAjC(Ckt&hqUJ4F+h`x?Aiob4pz|$3 zM>~e=_eOt=T>JjZ2iAC7)wr{-zx}>-`~8g7uSB<>KlJCXo$l{n{|{)tVf&$T!D`iS zhYdZdoQFE124cqO3`4=KfN$GHx7g;}+=(bRQ@!@6lK)<=o^+HXj+nxkd(`5MdpEx#vFf+*4qp@Y#&mbA zugB`WpcpHw+Z?_j?5*jVzYoKkk3M<*t-AKK`R2Rfn=5Pn&5y5J^~Y`k4=dw=4x@ny zsQRdQvEAN3So2w8;-_0LJtCOT7@eEnp!$WkzTIv^goW#)w-v4T)=ryadg^8I;oA=- zY*gf>%TGFfD39(_I!{{X37_AsaD~8dE0lxRr zMs0K`X>=%QbSP=$lKYX-ei1fBtZ3|wkTr*lRj8+Vz6~k!7Fj_H;Rt%<_ zM=OTWqe(_je;7U70{3ZgqjLZvlVYJ6E z+GE%elNWBi^xE6E&0&qXU7X1A(IhfujR~qXU6Qk_sdCq?yZ(Rt%#R1AB{8V!&v{Fj_H;Rt%#R!)V12 zcGh(B&R=WeMk|KVih)^u;)(O46~k!7Fj_H;Rt%#RLxcST2M!f6-qDI-v|{*`?y@9k zv|<>o7)C3G(TZWTVvwKUkrKqhGIg|K7_Asor;V=09bJt(x*B(MHSXwY+|kvzqpNX8 zSL2SZ#vNUaJGvTobT#hiYTUc|qpNX87hR3ct&dKjjEk+RW|veA*U(UG#zk+P?wBW0r_Wuqfyqa$UbBV`?CZkpIwj7 z?G<6W;kM17blS%BEubPE%5CRgNQ&BJv~B9zwch*W7y7-pi?5Zs(a!jnikJd;Ud9!UX|3oOHazG~0F6 z6*8)#dfD|BYvm?Ep9VPqHNVP zS1;Gjin_H|_eJRXRa&bK?LIem^-ArmTi54StWMs1>y>HL+1$s~`&ZvHyWM;3b7JU| zk5#dD%fomX>EPuldqByVZ_nEevN?{gRRWKuyWVmt+xT`%c0PMdwz&1uYj4Z<;4h4@ zd3n0;@+(=TQG3%2SFhL3iMnl@#}T?6N>`#KBRx+7~hXD5_BT6^w2+MU2qU5^fj(gU$>iRKCjf9>@*CENa5tPWm%`-MrA@3YIH z+wOjgu~_*?HFki>`8Q zo%Ob@-+TFkJk#B4|C`S}|NHkNG2fmG8(f^X8LypUo4$s^#&JeT#I|)))-KP^ zDk*Oa+qPoWYOZ&`!q&}MyD~fW>!P)F$J3Wx$=X_;d+*!&vRk>^rPr2*_aA;yQWa}K zmx>hJJbvi5r)q-iTYRRI|sbf{cF{>^$Aw%2)0L=Kr_w(!(E>vGtRulS}pm=@z z^UlB4wfUF2w)~nKo40e_#WyBbqxSBO+MUz>%qOf@#|Dp`*|!VI+M30vUzGZ zrDGG*Wv*Tk-Rhg0HtU<#jZo3h#MsvXSFeh0?ajV+Aav8M+^tr7^LBmS_aOAWb?v$L z)f-oR+Hu!zdH7nkh6XxRH&b@3_Sp5{-5#qA;evVIDgl=1R=1q5?K(=~fXsB?{;XGC zx3+ED?q4IClhw6q!@BP)vtFILb#3eWB(0lo%YLm*+Z|tZ|3lXIwZ~pp?z zeC>7m3`0#hF#r9j2V8sO*V!vOcq_1-ji7XhF{98oRx#S=+LerTkJhFJhK7mW-O?Lt z7#(nJcQ$L(+qTo*%dfmzw|ni=xYwI+z5Q-=Ydt+16;mKddr$C&Fda%86?>lO!ZPvT z>zYs5n(dnPVB4PX4UVp2hQ3rNoHMe0qaH@0j2(a31szQNX1eRy<=}1CLbJa6PWv8M za{C=!2UEeGeVnw1X@jHxHe+hkM1$S44;JkS-ryJ=X00N2FkSPSZWx6l$2NB}SI20Z zZjJIju{t&+G_yA7s7zP2YY1IC4S#00u1` zuh}Xh@#$Nf7`JWQxW*fmhk;Qg<=bw}6M-|E`-d+y!5 zo%?QnFuNMH_jl#-oAEnr?DEyuUVl?YpPm82-}X8FuT@03)3-RWnr*e+wnm%k{@#B7 z>#o1uQUAA!=6*MSd$+iH^ZmE0w$`cU_iox>U=ef9J$&u;H;xMw=ur=Y3NBD|x0$T* z^;S`kPnW&rBu0&Tc&%x6YZ^*DeD!tI^}QXd)3@Hf_Imc(y3eVhtM6@>u`PXFy`QcV zBRf`moO+bJv4?W3sXanofhqhph^kvu-@(Y8Z>w}|F$mtJ-4bM2;mA1uOt zKYJgaeE)6k?Rk)r`T<=_>Sh}qpJ-*hGheqzzx6zw>KP7dK$LcqGN^+d-=O*2?YdD} z*SXH-F5AtfbtgtILbvU7#o1VRQx_axX5BYO! z>yG{2_aOQQxPQz}pZ+ntUbfHi^;Rr98tK`iXX6?7+%GWOqkA;GxBf}awi$f#VoxEH_BQmG@SLZm z?UVKJ(jK`DF4ki>R?4TiPYOlvwb!adxJQ?2W6y}+}_U(Ei z5*W{WBQnfBJ$7|m3HZ$8hO)%bW{@UU0Y0!AI z)C0XeYM{Y9bJHp5>1?+W#mp{WyOY0zT`!dKHnh&w8=~8MA#G^ToJ$;c!quCi+j?`v z9)#|?m%q*0cHM2}V^2aqSpVba@7}rU%g(#|o|o^X)0_*eP00|FRT{NN?#OD;0yip; z_2ioEzPCJlZFbx@rL}XXecrY%&-C}&sgrJ2J;*k_zV_aCdamIB^%TK9hfxm`eIG9N zF@b)h(Y!$w!{D(zuRZ!39HY$4S*O&eb3`SInRV~FQ?i47-LTKlpaH%|LVH>_IQo|v zO`WnmJtrzr%=qS~JIp&6@`k(b=b5|?-J!8B5ROmuX9>iS;(31XD z5AybCZt#%$X0AIWH=TXBFYX2v;js(yT(FWt|D#RSZhAl zZpqr!*>RGs}x-`4M63tD&BO4oIVQ}&>Yf&`vS_qgR)wsGy2@_dfr zzHMWkmbQ1-gMWJjHn_@(nek4Un65*O^gWn&>CCeS&GYB&xv{~ORm@a(+8S*}YHUo> z+JT(D*L=s3zSq$|eJ`;ArSD^VMc8k+ml?EDVWq^N-etFDcz2ygy+>#d-JssVFq$}r z_WqNpTXV~lWI+2*ZjXTdC!pExOB-CArx`CD8T(H_v)nZsTp7v?c&SlOqHfOy?MDBy zG}k)n^=i@V(%(|o&S$T@{aR~l^|I5xD|Y3X$M~_E&prQwKFg3s(C(85oA!inaB;k5 zxOLhwKC0{~0&TV#lsgtovt6?u$L(R-;Nlu)YCCO>HZ{H5EwO6Fs?B%5?5g#SdcXGi zo4ngr&#s4W-v~Nk;NJJpvODxWVE~+hA1vAv0*>3KQ{>aB=~?&&xxus><@7<5}3|$6e6Pk0p@Jk5MmIiDsML=9Qc7zhdV*^U&&f$J4joe)Vb(U5h7& z`R{K%656wFgXWvi#8|5PcGAm5SueS6rER?&qIE5MT{UPA%C@UlvwrWDo91&EYr=SoVQV9nqV+*%~)cw+T+yYNqa^3BK)R}jO|soo@9XM zu7~&bsx=Iv;AXNkXj#!nXeQ5kEVc*KOx|WZcVsk^yB_-OsR3`(79HKDO~R=@gMDi+ zq@ldcaPJh^VcwWRYABnTx>C8J3~oEZ8_J^D-^_F87H6-%{d(2b+Nb%ot9B1WUk}<+ z{$_Z0+A;oN-%`Hyz-^E92HrO#qow@n5#OG*8?ni@7NxU$1dzy?E`5l zyB@t}cy~%Zbrw?$=0*3Q#T1anvg?IurnyrCsk4~EZ166ofUS7!0-sq)dEPyIZPwO9 zo1=XfAV#S&P0nU7TM@eEdX9GK*?EhzS8vLGS1tQ&-t%pDBFpdWOE;fO=hdB~ekFaA z`e2UNJ=s1{kG1yP+~9iTo8i_e<>~CySRpc)%c*%<*`Ygj#_f%#{4BDFY3oYX&PO?m z?Ap4TwF|SOzbsm7w>*5_g^Vp_Z|7ZGpLZ>Lo3yTJc>V4tMU^r1IjnV_{p!#iJGh3u zKSx)IjII(Hw8wZ(+40&_>hYw#vV0M~-wfVTW1@X9ANvkEco-K__&_JmX8oRi1lHenY` zw?v-qSnUfsSfQNfbGSp;MbmXsiD8RF*MJUW^{%^|8@~N@>2KM2^Hv|YS5z6ZFNH2! zh?h9bfB)(M+a9Lj?$LSL+Mzofia-atEJO4NeSb2&R@b^4rx zS*BKN<2F*bX>IwH6m8$2ZQG7ryK=uZ+6r_5%f44%m*&=fPt&^f_PgoYd*735?tjR= zzW3U$LpT-(BxORY0(!n__vUATsHoXh*$hGEy%*WSrqD=mBP((3*D3d+OpKKph5 z2>AGPx*TaT1v+Z+1-$A)MQ_VT@L?`{N5Ww)**;kh&p{4zne|v|Pw@yi%w=_e`VTJ1 zVJ@$pRWbv zyyo09-P@V_PDf9_^0shx&AR`#3od3VNj#e8u-g2FtL2;*eYM9Idc3$ZEB4qf#cOZM z7TMbL*H66p)cMbxAKTsHU%&eKCxpM{_FbW0hyTdTyR*OM&LaQY7yd2P|GlTp?!C0! zr?q{;W;YiV2tWJkn4kRRr>*AhPwh?tr=)ooZg|7VzT;$#%OV$!6u+m3)_1S_r!>L1 z;rhW7Eh$IcRzAtQYwR1{&7e{kqw(xu#}c7d_e`HwArFq6z6nPS50^b$HmOTg_1L*L zXg#qSy_U7xB5GpOcs0%1WB)wk~4rjBJ;J&9y1c?E?4m zcSx>vD^fjq`dP)LQ~Ao;7ax3i9viV<%=vix7xTZG&zmyuwO20Orx&w7cGbzRe`;s? z@6TO&{-|xxd>8pQoqPM0FTFB2&;8`vo(;;6?(OCi5qa&{KTG5PQUmT6v-fAj=(1ZE zXvy*}Dp(}*Z^1?3gg<7UdwkklI$6RdxNy`MT{1bnd)D;!GHW*y7P&YSI_ z;ZiDXu2*zj_2i_Sx$38cdX{RQnzUxE_G!TuenxMjSDfN&gshGlXnz*jtK-x4<;(_O zW1G9?=Y)Hn^eNEepuEv28;!EjT;{-`LfZ@I8Kkam+grw^xq)5BXSPD#8Lcg0xtQl- z2fQ+IyPyRrD!(b#A9(P{BJ-Kj>hO+awJ9e{qE&g1Cu|bXLhmkYKZBSin`^T4(ASiyRmn!aQVc055NBSyT{w*>Lt-F7iE^*FBW)q#NyAq znEmy~F22mJIhks{^ybsDU$S@BgwI!earjs5T3hDJCZ7-Q{cu0N{kG=oBXxV@kMo;6 z+M2?Y(!DR!`%&|Lz26hQS$AIE^VNp`Q9jec{M$#`4|Rm-{9b?lv%{3bSt>>?NAzW6 zJ}tbcrOL8!f)%frVquY^gks<%dnx6M!B0LZecZq(qrCBQ%K?ktCoI=C6+YH^uxz80 zprYA^&q;eB1*6cJt-7!pu$be}XOS~aC%AJK>^Q5Pa^3ihaMpG6wV$Uvv_3C<=Bw>u z4SJlRx`si`L+gpi-*~MEZ!v4mpyEg@7ZEtGxF{I<4RlQRi|IRBzl7EwI8reAjG5AU zfumxtha*8aQRy1gr7)-I=QGuH~9Jo`P6ug7`nndez%w^mG#_g?&*}Z9`9R0)FF)KWr~SL=GcTO^RZJNcO~?vnKj67XsP)K%$Co)5Ui4BI)c4codb@o^ir9o> zykB@8sC_);EUx&`I^~vIp7oB2C-{tI{<{Y$Wh)vNPMOblXu=;|Rf}w-*n_rTmIV1+ zG+i+9(|uDt;i9`1zLRa9Y&+Lo^4{wF%MvPMXRr_)j@Jk>`!0$eBN%e{~YUYZTsFc z#XVnC!2N0Bfj&cqnM&_}1^rv_!8`1mJ%5oryJCTf&g{b+AttZ)>U@67<=`&3NM_{#4Dv(xXDpQG4PVTobtu&zv7$US@V1}_vC5m@ZfN%S#Y9% zO3y6U443K3n{d5@eH`?B~8 z?|vHH{pa7lQ~8a{-ug=MXEHw&&ld$VD7^o??APA@u98ptdbPJbvt2)VBD>v%7LiT1 z0nR^e?N}QX^!L!oJuIz9_+`X?9yVAa^vF=RJK~|~i4vYRhfbcf)?+JK^7@ag>rwga z#=9hyZ`(_rs!sO|pQ1jO!s@m!?jN#O3vBqL+_(2Maybf$MXkxoXD<72YwHU;y;NEI zx#X&;A9u-A4`OTjRbU8wQGzLdwa5N7Na2~W+?eXe?)82Tu8}4RCd#7<- z-eRNcuANYI7uy-(fhm`NRIKI&P4AU>nYi<49Z6bbaf{7fIlLoPZOh4$Xj8t^p~V7! z{+K&=UOW=DYty!^YuC@p{1iDyR<3f>l`CdD-q>}EJ6t+!F8x>Sz4qQKg^G71;`uaJ zXTA2i^=*s0rTH@#tB-u`-YYjg$$1oex9sp%on_xm=f$m`SNgK+TZ-+D`pL_m&8tbLdF>N%YU_z$@=?pVT<(!Kwr_mAd-yusIg?_E(N)p}sVs(kK+0jJk|FVFD>dTirGOl=Zvzzlk|-aYp;loh3$Git-Bu zUo|W4Gt$ZwRTK*8IbnW=2hkb@m7+RljaLh8xoEmzQqoIPz0XC@!R?uye%)){!`d^y z=+d5XSndBsv}|t_!;PGP;I~u$rf-bEcGTC7vrox<`!U+r+euq#^^S!VA0rg){Jxbm-T-1BImw^^pKm8s^NmwhbRGkLv9 z_*%s`&VOwAWj;SP`F?ochx_x3;_h$HRle}c*3*aK@wT%~8h@ASpWhqGUz;_% zpEB-0zeStT^1SzQ-aQ}QaCA9w`lvE3`;a6qeE5BePP=Qz9ItlA6DDa74(dteOD~+b z%27^5uuERlZ0&A=_ZFNyEl)NX@DwVmZBn**qIPMLpz4Wt!Ta`kV~nXy)$t9^;#SZL zPI_*kXFTPusb6=?n;qwk_x!cLAi~Qskv_vO3{q2fJ+X+4-w=l7BGG_XCN81nkao;9 z#d6WO{6gt3pBbB0A29%zq1|l{U+tJt=Oj64Z>o}R%)@A#YZrWtC2T@w)wk_Qc|R+J z<<#4iXI?#@nGx4-8gM!AtAuQraPj(kIY~2*t*cnOAls#IbL|r6=>m@mcS`BDO;Wvh z{zc`bQ~A!;H=lfa9(!ZGne+MfZx(-7K3|miti5{SzIAi<=WaUt{coM5|NWY4TV5=F zGG!l!^`Fjt{mGBs8J_q4@@wyg6HrHa^xC^EB8a%X3Ib zxoYPr@Q4{wgNDmh@l3E5r;M(#(p3{(;gGWiXS;3gZ1FR$c?;?oe(9r6TgGO!PuGK@ zJz7{-7=(72xE+9Y=C3K1@45HL{N*#I)!`k9;Lf}#@8P(O0)J|Zm76-Z7Q5y=j#1hbbN6`{3!XJCZq4}|rQ9?7jpCn< zcJ}t8m+qMh`jwU23p{iFwa0J2UZn5wyk~c3l;=$^ZREPI%<4nE2(O;ev~gE*t6=8(lQPb}rKf4OYt_TBy_RdR+~1omlF_m1Ex5k(UgGpdYfs!F^P5lqGb6=ZXdyV}Do-8( z9TQW!cK)o?4-qp>{&Sa~jQi5TIrVzrjH~`e8}^E&EnK?z7`=Z-sn5&h7Iqcz@e1b2Yp3*b{HfJ@2+V_noU~^rznT2`M_1#Zrp?m$p{ifR_jghL;eG7~IAVAfIckK6eNgwieeT^}1M9lOyE;YW zzV6XmZSmgPp!-O>bHVP4t6Nupesx=Mf{-(lQSYZl36(-EX|`kfuZ!BPE_z3KJX_<46B!390e74v=;Of2gGkaK>&3Ufp z7Dvm(owwc9p8K$R#)wJ_U83E z?ei19B>r9JUsU;OR+Zv?j{ME5^&h$XyZ2K5d6|Qn$L<$X_IX(UxnQH8eXRXJM)Y^q zWgoIc*?0DRR{MHTf0rurl7K~xoQeitB)J{=tdDd#ccgGNyK2OQO>kWi64!rBy?q^Vzyt3pX8o zX#As#txIz2y^L~6-D}gE`R+UY5cG8p4+*O$s#qYRG8;7f`Et*i%TGD%PfU@S=$yr3)N*9Q z9BcNS=e;xq7fwjxl~634~qq5?dPtiR(`=}K;8CN^c#1ndK|Tv zslFj6%pzjhnUz~YTT8JmF%$E(Z|~X=>KeML)2-t{YlM%9v!KJ#WUU{s|H@_iOn2S* zLq;}So&W6NO_r}?{6Kr5vd?BN>*t=|o{@IzOyEe1 zIr>s*R;_1rxZoMz?|V5@%@ogE4d1%QkHvoDxwkG>wpG{7=RbP&ENQQ$c>ms~Z(eK2 zy@}Bmon5`;zUkTE zuIHBPinqK3jl2A{UrLuj>?NSG^J(T|&{3jc)*N;l(=i9J7oA-G;UjbqdrC$xWDt7_ z4`dKK6Euh|3mL@DLmR{vUuE+-c)^NngY9q5aW&3q%l>wA?=<7g`F9U*7ub6x7(4}W zHlxok|8Pg~BAGgW{lNWKU3SfiwRem3efi?|oO54Z9~6DzQ5Ep-zV>dLuV-xy-uIZ_ zzBc`1Qhj|*|Cf6LoRjo^E!CgJ_kWAN@SRVJAC$!YId<-mX?5bu-gnA&Lhy%9M@|u~ z1x^`0_H2hfcu)AaXu>N=W`&DE;$kX-MWPbQA1B!g?whEsb#Hy&;e-jtIa+dB+`4#5 zzPNWTacc1}e9d=jJz{PaT;)xAvuBOxrawoTJhEdBZTDFna^CRtWv|PoYbTf7v;;R+ z7Qdj!?86dJEA#QWy&`Nk+{Fw^u`anEjX0Dp!XSw_P$Tnk++Gop8=+=a8`j~?ahon` zT$FyX>VIQL!V8HQ+j!xs#b-e|PU~mgs>cg|W|SElr*&SNwKNwzZIoaf@aDU z{p`zYi!5U~uX|~qpIH9z?|xb4t0rH{cUk(!x350^`u+F%So!+_f30;Nf-1bKxE~Ao z4)^@F?mztG)4q=48}F8VFp}gvc%nq7^)Sa0k?Dum7e9OJ*qBUceeX+mpr!sPx_tj^rA~20a{>k7exe#86KT-JY6=* z@f+5Yy+#`?sCC}pXtbaaUwb(FqxIY6 z?71Qrww9#kYDXzgn*AM!Ex2lz-goPRRv%rfg5;Li?>_VX zyzOTH80+V}-@mE;-n*~)#1EU3-aj60^G(wDy;Oe{KjWhO(~o}J=*+(Jf4~0}rT>=x z+Vi>h6r5q`a_sbxWmxvXNnG%7zKcq`E5{tCc1I7BxO)fI{>qnJII+u7Mny17Uf4`` zHpg4@PM(@a8`rnawqwc)h zS2?RK^Yc~SP~p;T?RkpTKbAGFUZkBVby21V-r<{_xdODIB@Wc#ds|dJ;a^Yqe8o?P zch&BTWxlKrS~qb%zWcW3BbR@BBkP|B-PrhI@w18hG_3!;+3`Mk#(N`=>Te&HeUK7m z-}iosB#YIAW|r66GkG)?IeGZly<6`0N9M!+jwyWi9C)L(`78vJQx>>pq;O3*wvxr| zlhd2o)w~;ei!x=m6>(>E9DDJ`>A~?gE!DyY^*3qCtosC7P=*|ZNBTS_%baQQ>W(?J z-B&y0y78Idtjp$WC&SlGWY8t{T){gNHpg$k7-ea`xJYR=__ExKdV$;vR=ut0xc7Ye z?Y~v>O|wAx&c&QFcFz&R4QFca^9p7?^SZfhTUqAR11U=`|B=0}*m&{c!(TjmZmV-& zODXs@OYL|-!_1g3H*=>Yo6b4!Vi;Uo&lTz0kruUc)3(yJ^Y6Y$idmO#rF{6w`=5Ix z>XWu^nO(l{t{=Ny=T#JZ^i#zBbqmUJKv3*0z7(=k zzd`WQNqwEmLdT7Kgsz;~=*z8g-Q=7wXq2Vn7JaI{)jnO1&+Qe=yb&j6JQc^Gc#!oG z&?$B)Wyln}DYIbL>LZ5W^%0ZXlV9zWs7sQbbue8?H&!v)=h_ut6Nx=jKlR&OeX&aF zjUBUj%YyWUvt^H!XZGFBDBtk*ihiZYCDW3lxz16_Q)hpKmYP=!N+;@Vn;#4=HREuW zntv+hKYuiFfA2?7t7TWvuLU2t-9Fjz8_6>(=6{iyeTXAO<@p|+&3D=CJ*J3Ebb7_2 z)pEq3#+Y@dzm_Kd!U;~OOO>?W3U7M*>(5&=Po9zvcMg}F1;_hCYG%1)xU|b})ZO(J zx`q=JX^^E#Tu0^`oas>M+IA+p<=i%3W1WMhYm2k)TKHZD4QdLXqHi}{&^{u^L0WYh z-WKO-t`~&+c%T-iYUNs!^GQVn`goug=ORnX{d|gNItssR{aG)je(A|q#lIZ&$y3iy z3ohDyXL`Hl-L*y5pU*wHJoonJj9Ob;`|$czo#nfO?6!fUEi3N(LjKoJF7E4#e)M8r z-sxB09P?cS*&RJEALX?5zop2m;(tYM_5qI+TdoxaM}#^LccgGM9|et%9bFL;H^EKg zi`xgM^H!RY3ns3zmR=P2iC<2`pr`DU+C(mK1+yIMtUX@neLTqc7%ymi>>+r3%m6e# zw%r##K1P>WAaLLO@u|IntGSL&vpPBrvzqe+4U2)sH4nQicFBiSa|=M#ob982a5dL` z^%J<7yRl}+It_R=S9ivFb8xPmv~l0T)UA@Q*w#s|y>i7&V(zrvp}S8#G~W4_uisnX z#My5b<$RnWdsK7Hz8CX9|58lf`G<~u9L0C09MG`-*SSA`^P{=e=NB*dx?+NqILn>@;U^u3`d=qKG|OCK z%yH=5AGv?l6Ox~O*|%YpBJuc_blsx+OiN$@DfZr1Z_N-$zd+iqZ zCYaZ?NQF^R^}}RoDZ`gb=Cm9?F(q#|MoUF&veuc)KD?@W!A|$J*IouMYsq=C?Hp`b z%k%|wSw_tub#=RHNq#*0jW{zi-zk>qqEXpqyHmH_MctOSqf|;cQxrZOo3LS`jLm1^ zP*AA}S_?n9?eT|7iMk}oSx1lD+GVtD+O})6GK{B#7A9pL&3Ywu%f>#mbwT>V>YB7m zoqJB^Z!sJNioUS?U7*pGzHp=X1CL*tT-}$mY4+u}MZf3DeT&k*FyYI> zzkc@?HNr-wkG`AoP02oQ`}2;oJI*G8O3g(qId_vUl|ntk9z^pB4V zKdchv-p~E}--V?Hk2-l34TVp#?>SN8)9L7uBGBx*A_kQ6Lelz=t@sl5bI*!Bc?|9v zZ^|BS(9^DF+sHwocTMv+W-UhysxEwW?BAuzzlz^VUQEBRC|^Rc zz{yog`J;}>PomInZZP$l|pp*8{UX<{S9dc&}D^b~ZtJXRg0>;-NdTJHqtBF^)G1i8T2q zr*#C92YUsNaBYk@(P!5<@#NJ| zI#awwJvUS}7SuPthC3Rg*NJ$UxC>|<4Sgg5T9j0H@?pkj&;s2lhaY9_)TnEcop$k= zQs}a^1#7O|@HG|tt77eIcJt9^4bExSu3N79e*19t+_iYF-}m5Tfp?WwRsU`5FN-`pwRFn8_v;Tjd_Voqu76(jm1}#> zZHjxU)USP$QPn`X?B4GD*PEVg&Z}0qa$x=DTkZB5DLlWIPdFvcd+0@uO{FOVZRf7!oL;1VN9dzvMoP`ZgPuNd-yP5VDdlwUtmzj% zxmIV|^rIWkD9k>!!e(BF#~PWvD4WE5u9~h4x^vTf!KPO~&GmyPeYf%xPI4n6d z+WpGSknvA%?)Ftr6o0-b3wEB?83sO2F4p97bV9`1 zq|U?lKbA-M>U}RyYolRRcE|$>sh7r=fHdBNp0?( zG6GYMu1}FTcU+*QWcrDXI@2zm)T{}YK6rA^vgVU3TG|d^=EtczXM?l2b=LPGFojJM1aIHUg;<>vCe0WOK z(TWki?RIcfjNp}?rIGQ$H(aNgZJn|{T`S7}+6LZjR9daO?bJ15SL^=hE6P99QMyQ$ zZ+cMtxz6vV*W%V}ntl6P#W&gcW@XwpCVX4?PjCLD#!s_q6z_NBU*0oi569#`za99T z(;iLWoTT?pRsRw{!&ZOqS6>%?ND^l})VW8e)tO(bBZiF zPwfInC(P31Fc0wNxZrU1lq9=~;gYh)W*<*andmC8Cgi+_;1RDUM?Q*h3K@Npsh2i8 zxx}2s(R0hX7LQFWJ_nF@Py1XoJv%vTzTVl(UA*%8!cCv8^geHSYH^->%a`5fH{WG- zyf8(VXCl42iBq@BmXt!eiKbJm)5UOg6Nlfb-F-WGocBCXoKWN}xx>J_ZT9g_o}~7p zzN_=4E&YDEEAG_kVU|1ba!uEHw@p(VxsL>#ne|v7ebuhdm5H8{W9~G0XivGd^PG0i zbMv#os~%dfGrsZ>v}%{taq$YejBGPVUETG>MK)gghT}J@vseaf1l>Bi)`x;xJuZ7( z^qp2e{iO_^m#An{$^CZiBX|?%}@+-6d&1E#& z^Xl`go6pk3m!7*~DpDIJ9NB*NP5Et$WwompYG*wB$+_!tBsRliB# z|DycIH-0SlSAOw$50?r@>p}lL5(^K$n$K!2wLR6Jnb8e71})g< zny`M);)m}eqt$d7jrKg)I{mHNapAR>Uw_ve>w&D#)jjX(ofmf`Kl|A+T}yFZ z)(fs%YTG8aE_?K);%}VKrrGBom;4m?R}wx`>wSviU%u%~{@%Rq|N6u4roXS4 z$9KJZ$CUjZ-A_K*>P0uSAJCY6_i`?%c0xns9*ImMxS?UMPEH!(aPC2#xtai+G<1?4Du9~mi44+w|Oa24x<^=Wm zc{YR#F?Xv@JDO^E%ROvE?KW(uV1XCMgo%N-=1$4z6A5iUa-?tyPnpwtfs=VX@aK!XX2C@rTT5MYlcQrzE~gYrXxV&DUa=zAa7QkmR^yVk-0!z+uLV~we|UI@ zz&?@SkgL~3x1P=D%gaCAQMyRxU%!9i@tZEYXWgw&i}Zc_>d#z%lh+qT-*{99{FnDW zZS(W2ox%Gv=C9tXzRObkzwf0C%OlXTrhiNIZ}Bs4)enC2P4PpLIFl2&PUKsC?ws9( zDGZ%XoFY~WoHKmM8e4&s^?$Y`JbSd}^0I z%bFnl{k@>AoX@P4%+3gG;alrmonS|WW=*zlG&d*;pKP|UviY36az(D;jao6i#-*Sr z^t~2dxdIx6;cKrSF`ir(?-l9WQT%$=vu%g_H+7bE-96Fozd8Etm&AV=>%*Miv{&qz z!r!w0F5j=ic5y4^&D8$xURnJI9D9G3 zio`_cm3wqrTnxI`ojW|C_&LAz+e4D93K#ywJ=%6Ld(xc)Yn1XORRpyp1&<3DDat8- z{Ol-gRJbTp!L9Igw(5}&*%4n37$z&++hBycykfG>nKd4lZLTnQbZ-Gg;TrJl{7a-L zT%tjbS`fL5_<4r#U)J=ns8F+A8`j~?h1)J_T$IsR&EE;>>BlQKL3{d~ZL6Lx1o!mw zIqvX{ z`$xZ*;<?Gi>C zcS*7?7mVqZH`ZL@*K#tWWzqp}^wx}5C#0vp?sC$5@W`8~U-yzXyWk^l^x1=i9F1Q_ zH&qYCP1P2Np1$L2g-vH!v!dd}HqYI5Kz2<`9>x$jWb%IWa0B=OTZ80q14KtZbeq*H zF0Q&QQ4VIiQy_87ZQHhGEuSZXy2$JEw69P2miSMve^Mo^ zqrYqV&W_oCeybF4w}JM#{Ft)e!-nUIt^Vq3?FTbr*g2Ph<`8%F8=L(+r2k8meM!Kh zMqWij6HR_6zUnJoE*&XS&2AboX%pO5gyi)f*Z30h_h`@Kj)S}3?sAr2B=|~Dc7+l5 zeZ^%Hodi`pdWtLdqwkWKthG_g=du?kXcqXjnVxaURiksfF-2Od0yz}bsJ&<;^Q09wq_@ddliPg39Tp5iP<(tiV{q4B(-p))D=-Qcgi)1<4wf$F4 z|FEbwFFi^AO8a-qJwH>;^^eT1P`s!2<^EOum*szU=JWPXfBfd-)>-!37TY=Zm7l$^iE3Y6n!xpY6tRC9l~ zM(U4JkkogKZehohZlkjdENix(dEIkuyYFV7-lNToqjyGck;b2wYjG==la~!-_p0pPTO*Mt!B5U$`LHd(WG7UbM%m{sq>$1u6T1S(5ClXdI`ssU+FGOf-+4sb+zX5PFwZLYt@2vYyC%i z^h5rTEelAGo_~Y#8t2)HQLr98mFmLO8Q|4W#2i<6n{A7`wfVCnRv-EL{gd^dANjp4 zZ+TRt@4M`pxj*Xjv~N!Mz3`rG{igg+)Bh;m??}IV>Vu{3B9;GkCxs6^1`lwneX(4Yn%216BbpnDF&QAGuKw&h|2#(0Zq^&nrt_0QF>`xaJlNl_BV_B4m;>x z0!{jwluIxB_{mYszOdL{!Q|uV>B2_}bPA;`1GfkrS~f9wri!Z3CVnL)Az@bZ)lg@< zSazD7{$u`Ti5xbo`P)G7D&%|CeIqu-v1aZB3Q^1uJQ$M}5B<=cF}4%gYP ztXEU}yDwAv&jU~_{#mNOi=T1JdgCWw6hAnLGdOYXQE7GR>pphIPN4Wlr(>sx(E_Iz zKJFZc3$kZ?UNn(Ql2zeik+_74;3QEg<&T?eh4%}38$H;-_c&w1@s5^~7I!Y5nr|MQ zOT1bU{4qRdBWb(RiNvV5c7nAG46&um!7NL`Vn_Ly4%5L z#q8X&MITq6efuc#En~FHwT{QnetWcQDIU4-;_2@b^PPJywSQjtH_u)z()YysWp`JU z7jHEGI zEOO9@KFhN3LYFA#q6u2=JQ@O^a%UhKm9qv;Kl88XzQ8P zF6RwTZ}vKGy4D!JZJs`x&lse(ZrfX?#0R>%?YAnvt%GZ{7sVxsZw&qRU+|#6!Hldu z&cY_kycga0k*Bx1xBaQ&%SytcD;;242U}l)whqci zwq8#%-)+ZsO>+V0y045rxBMNT75Tk#)8cpCPJdl9FWxND_vN==d(QROt3u8@SgySm ze%`^|*KbV)_4n^{dt>3-9oA*H()(HS0gli>q)t+HO>U({I@H4(9j-xyrbfn!M@R4@+ zCcZ7RT=zV>SN~^z>8y<9+uXh`cz;Um`@VO-HyvB}L8;@vVnFbQxz+*RuRbpd5DI2j zpO7TXV>`k6#X0K@+I5HbDQ>tDc3=P8gx&%oj39kx^rf;FSiM7%WkI- zJ;pv^-96{gNE>32_CzEyzN77pyR<^t*$B+@nD&6r-UV$r3vDg&GI9H(bs%ApMHHL7 zFz8B%EubqQ_>PAb2|%};W&47%9B9i~r1V|6%2gMxnC{5_m(A{Q?y#A3&9n2;TQB4* z-kuTnPIK|4m$xp;EVwFrawXTZ>*`()Rg+XiW$OwK}VIipjT4zzaZ3Fkkp4KB{x zjHgaJCX1_vvxA)gDy0m*&LfKra-9b>?h-)Pd6*k_bzYmb_0VR}g%Hmk-n_YPIp@TE zf$y*J_^rxa)B1X2wUpZHgoc@k-)8)+@pfHu*>sVm=e|dv<)5$T%ys8CJ=*bQ%dWbb zO|vhq{qlRlzn1X1ik}Yej`c!{yV_$PzWogPzi)j-w;ed{)-$_(w9f~}-4dbM2Q)%t zo*v9Q{RtFz&YXKUtl@cLw<1TW zoOK`GwxrW`K~UU14BBhi(U21mEx<;NJ@U}FBVvy{DDI$p-IlX=w)WfpP#Ab zi=$tDd-#`Qy_NHm_Ohxe{4V>?@_jpO8>cBRrvCY<_rKdmSWfBvSdw4G_jijv^Oiq* z@?LAS@8?osXmwoosN}ul1mkO+4xJ)O^BiCJnEh}J(02Q9kasrUt&P5~e!Mp0NMV_9 z*svsI_AyNsySBsYMAFV3?c*`!w(DrgYIS|_rs&50)weR07hK#EF1&;L2-+0iUj5ZV zB?k=`Op>~7sC(Jyriss_KcFeT6xb9WCl_6+Ih$;ss>e!uK5dZ689n`TD4qV9?bG$B z40QVE8u;m-qX%iZ52@2XvmQt79SnUW0cxsb z9=#9Qk=wKXLDr5HbxE>)XP(X0)oV9m7aNYTlS8aCSswepi|Hh>)pR2R%t7TPPj{S1cyQlU@ z=H2gK@9_Dot?ke2?YEb{`(`L5vAp=idsRIlrJsAwM=yA^DbM=b9sBjgr`qi_vj2Qv zKA}sJ^Wcjdoz}ww%(<*PHD#<8IcJ2p{nE(ay_RRQA@i2j1060bH@B_H-t=(c#4cCK zrG_?KzxH-4DQR|}C?dj5J?6hW&ox(Q9i* zudN-uX;{3+Eje((YkEN z)n!X8UVHp{@N7@$2Io~?+ia&iPUpKdx^!WvEM1tgC)=m%@u@veAZv)i&ho9)y0r~_ zHwvCzLECP>n3B;a6WY1@h#_c`?88Zi0>P)7ska>oEi(A?$69;Q=_6}%gCN(uy}e~o zHZ6D4(KG>JoxJw+m9yV2oZY+B+1TY#fyM1Tdb4YHUXA*?G`BiRdCr56kM4G~tzUli z#^)a!{(ak>2s%+IE^qsyNZ<2io9q6(Umf{oQB~R;z5SPzKJDta3VO0=0`r0C2YN48 zyxo6t^N&_Xz3%r6dskF{X*+O1D4%=bgfm+0&K)r}T~3-ZZVOyALj1WM*Kgj>t0bsB zoplRObwJ0#57I}TDo#A*E~#P|<0!Uh;wOFu6(Nyi+2j0^GDWsbDvH-o6bi{YZ4iXH z!_w=r&6Ork?jx7>_^#dqUK0J*avgk0^b!wx?691&HQN=`^OhBj0Iv(eHCXwZW7YB0 zMS+XVZ~u)`Y+8`0wIicW34Gngg*Ty-CHYPsF51B{H*l{>fHP z5C57ar()kb>3;IhNV)6WJFm?vf3~OZd!O>{=cj)N>bIAb-2S=0N`DdTEmrDG_~czS&>)E}O(9Ea9HlUAD(_QV!~L+^LN! z-a)Up#dV7w-8aw;7TK%o)9rI++gW3qyXNPFd!Eo|4-hEVRXskn=kW&RH_o#a!_Eq_ zN98n67~Psagtn$zy!LqYz;2J_20oq82i3>UoY=yy8=4r4Z6lrvY$IOIqQFHKj$zV* z0^sY4_Bk`VgE!*!@pFfsI{bOVn|V#Qg|lEA@eaR8yk)uVu>7Lak3RpFwSnzxo(A66 zym40s(nh@cE1(-3-nDzjAA9Khd)C|5Ocv_*qQ(m+<`EyFo?ew;Je(fx{d*CaumBm`k2+?_A=v z$oYkj-#2x?%g>(g^;n{CM}TvR+bM@UnXH3qA7@XL-7NU}pv)4(7)`OgCzi-GyPp*4 zmEPI2rIF{*n#Yr7xoWt~>+oFt2efnuzMWDSbQGNs|R?z4&S%dPa)tLIGL@28z{U8#SS+s_3bxYT~{e{X&0)WQ!*oy>{>lMl?b z3F!XyeNjMAFt_@IMZyAh6RLk)ve}T`cl?0wYM!^|CsG6^96nK!Ho+_X|=~<178m4V9zt=TP$<^wG)qx9_*<&G!ORF@u^lmcBW|bV9%j_u;)6_)t_hR zoLaIPd^7D)^fRt^Km7)|5XagVypa89MARPeC2+bk-mpS1fzwe9mj+(~_hydQma7}K zZVmR8U2V^I;q2BOIg6N5JI}q|vbna$IDP$!)Qs7G@3ZGNUd$_-m36l`X7~_WUUi z?EOyvnzFlhb>6GJ>t^?zw$zFCc(;$=Na2^_dKHyMu@u~&IL*E1(yp_sx7;^9^SSFa@+EL|S!@k+`7s<0L7MSSFKFkqf@_Mh%=eJxA9#d2%I=^DEYB_4K$C-1N zf0m~3!U;{hQi_F}9Ay*(FWJi}U(Eh1zWJRs&qs4lo*}hK7Sb>cTe%^$H8&gFF!f7V zAdUa1k0gRUjD~QLtXDZlvz4PVm!kGCY?+}aC&79cxo)e@uI+fX?DxN(O|u2AY%Q(j ztY@zldh_kg+{o*3@(-W?cqFUyTrKm>=g(W`t$cnc^UBw+o9pGSFOPY*1$s4cul=pdafMB_;t_*aimD4Ic@^?6+BC^p zR53_NRYU*N8?+wAl||mcF?UrR3=e%YTQBtJwUzJZnm4=rxwp`_hp~o1YU_5{l48h# zp0-o0(^qr7#(wVu_(0FFS*pJj8$=T}Oyn{7EZDXBvC8G2YmH*Xjve0kHKxbjnD^|1 z&l{y~hpb(mos~9ACazlD{dhw0v^A5MQtNMKY@2-Mk8$MU71=Ll|GoRYwf)ZPlBs(w zql2z>JYDwt9w;I&eXjhq&!0*D=9R2PvU|K#7jPP^&0QO}jAj)R^ej^YQ-b_?BHHqk^;#F)=YUV4e)=ZUi01DCYS za_KWkxZyd8#p12wCu>D<{Ye;gVn6g0vniK$`mXK)pJMjVa-A^z*a7;SC1?X4CfzH- z4!S0;mI{~VY%OtxT+>K!L7>akOQKuOj$VvP)`SwcG4nWTugGv799_eE+2Yt9oh2@p z75jg=aw!%DIg2TO*d)tg_EFnZczdTv%KhVltH11BHgR#Z{8l3#YZiz6Efp`eXCFZw z96hsDceUW1o%#zlHr>|O{Va6T$VceOnXPBJbKrXw=(vdU)L!nw8-d>p&rUg>zNv5Y zR?Q)F75EzGJEdDnOXTBaZn%qC{jeLoRdXobs_Fj&-han__Hjqo`Y>tG*~fdi)=#Yf zpM8AOU{mHF&_;Cd*~dciliHr@L?X^UzWQCPVP>Go&Qonh{rp!SEuYzuc1(H8rMOSK zHOd}|ZtHwLYZueD&b5Na&wjt~&&Rp-$m6_%=pD=Lofmf$C;rXTPoAl>>`Ce6x+~T@ zFD|G|{j;NdmE`mH9-vtzx%kibemuJOQhpQPAImep*ZsDBdHK-W1AcEfKH2cJ2s}KH z=OT6PpuUqTgNpvDj(>^)mp5}BFlZ6!a^{Hs)9kV$#BYMDhEG`k(G_oOnO0=1iDPin zc#^hfyU*>4Yg>7;GWm?&UzQbceAoQwfcsjbx9X?Ru8Es)MqBmtW}ZT|t=&0g+ugNo z&Kr7f_BxAv6*yfETwODIq2^G$P!rO=6wJDj?JqoaiZ$iiVRgiWz;}yf7*=XOm8)EJ zF~oF74O>2^!+B>j>6&-vWw%~<583FI2)Y`sY>T_L`6Cz0k9_XhGgm&ydK4RLws@(| zvacp{@8#E(KJ5CEVrx-fJpJChYPESQ%1=qZdwu%HMf>B2-2QG~!j#gz@1*yO<^#Oa zlRjCVXV&?)C%^jCkAoM2*Zf!9pe6S2Q0`)(+iDX)SHlGgpILZFAV#IjQFjWy&Od7RLT zq%|%|LoSjAUF068*ae;jY_W!1Bz*^Tk@Q;A?AEN$QJHg(B)>PQe74v=;OayDojttF z<~-MPi=$=Y&fD&4&wW@uV_CcV(hc64oAX4RRTr$ip8e^cihu8=%f&k*E$ZVvFSmdG zH2X|{{=!9X0&Rlh^4re}yf3nv{np3(@q>w9%QHBq#9y0byTbX)=N<14N&R2Ae)pz% zjvOf>PnP>d?|QNOLv+evv(6=Q3mjL(n0FsH0w{rB7r5jJZ{Ji;Wh;ihK z71)I&G@)eW;wl5(P}xoUZ~`St)BLQE{C&)3^Sc|fKO3hD_4;YU!l*`?HUHqNtgKf>eR}y@+6xy+|KsPk-+lVX&Y5Sv zI8Wt&`C-?Fe|v%_%D+2YZS#t~E%<(0<-$6zr&X!tC`d{ZCEdJHU?t5KZ`-UI8 z{b%o(rnxSL;gfp*DWPu;em)$>?B6jz>9SiXBC*KP!$t44?9E@^ngPE>^FCy0S<#xHU1%456AAM>%@PbdPJz5)FvJX5wi|6PLVmCI! z$HEA1Y=(`61wjtYsq@zlJbbn=$<|kI{$ibFU%u4dO9!`ARBScsi>D&BRlL97$(P@M zYRdlH=!$MTa9c%Rc)};k^~_q|_OCzvnBBUd`@ye66M|QBFB0%_`s3U)$C$%0|BKY; zgD*-P{_pT%?zp>y`?bLv6P_n*^PEq_@J%?b@h4n(MZQnITrFz(#5(&(&!OU7-zV5{fax|>Tbo1EiLd9nk31oZ^E+-n1Ft2_+b zJ9-wx=m8%8xyw(+ed*wwdOdK)Rez%md&SZgE?xZcgVY?k$FaL_xEfcEp1MN*eg<$( zdm^?*yQ5u)@Btp-FQ#PlLhg*7!egeizH9GA@TzL@+Wp`=qphW9ZE$%FJHX?E<&Ltl z+*L=O8(GAhTkmXh-Pug)RNHyUtv6nm-|Vq#f*;^fdpSIM2Sk z_G|Tqe}BT~D}6e=yEY4S2*jt7qP^?+i>K?~ef!96zfAup#HH;Q?bathnrr31*yE$! z%O`BD`zQ3U{IoCd{?*~|(no6%sB!Y%nV&`Ox6*{yEe>kFi@R<+@JZ#1nr}?{DY={f zlB?jsEa|h7iW?U>%ekH@DQR<9dBj`(*qKS00t<~)EM?XkVca0K#w%FnOw$SPmQy=? zwQH^$pDE6|Yrgg}>|DPkbU7Xl5_=+{@u1k##&i5iZA~a>`5@@{mA?%KT?)4F*oLha zI10Wv%1yTSz~hHMGxCy!g+YC~v~ANe=bd%lJUP~lU$J`e{p=sTKDWcUuRYo(;(Kl{ zqtW4WhQR@HPuy;D(V<7%nzZE|8*9LS9#J&Qjd!2r=m?Ly@IDYz>$8F2ib)vIwSuV@x z?cIIx`K+9`&cRK4pRWJHbH+Gw^O@|A)-ul?$!=|Z`)KB0zTUNhCwzYh^7%M-#yrj} zpH(s4-gU_{Z_Pcg?mKVfe|EI8NS?=fEol7mpG7%n{PM()K>K#N_|JDhtKv)gZ#3`c z`Mm4(zVpmmPAq)Cs^j0nfZ$DYtqXkEz9ykaYaF1+kxkt3hthRgL5#)00o+=ueJ6eSe{ldPpp&tLj5%cH|2Q^ckB)oYCL%dR8S z_0DjpG;H;L9dm5Unaw;qjn@i$T{iO#?s;l?Zt^NRMH^@r`sn!`hpgUKIZH1ZYUg(p z?TtwRox7rp3Ei-+NB zzFX_jCg~=<*|WxT)1M+t7MKkd%9na z|0=S!+Hda1_urgb_Gr&eelz)N zkG`qT%UnK5_D$O_E2F>54jbS7^8KlO?6dV=U3Q$_cbfNi%zpCK_T6QP&-?jjUuU&@ zC%xy16WS4y23_h z!G~pTI@@gmJ1mpq6+O1Tu3^yXS~Y1MSLg=59FNzk9YtYyuA*FfwY3Ct73EdPRg}%h zS5fX*0lJDZG+|M1tm=X_*RJ@QNa=JjrMg^wu0K=D#y)w%y!3^$EBaoCHk^HDR`q6H zdgH>IE+)OPW((H}o;v&eB459@cgFMlk213I@%}4cd28;?OHV$?|LSN}k-U%f^s}GO z{@wIH#`-zW_n$jI{e9y9>HYpp?_cM(b?kmOao-9XwvPSpP9K_UlTjn}W7!2OQO*PU zn~$7!^7|sw>6j^Eu*m6zk30K{g4d@RlqPaXvMjiWa_h)mfm`}A41$-e<@C>4M>1LT zuF4eJkz1oJZ`0pmblBsZ7v`CL6Ytn^`E2%S*4p7cr(@>{@0|OlKAXF4TCOvOFHHBK z$Kelu16(cYc>W%AEn{ZgNwx%`sMKgIQj4^7|2F^A=^N`ZEtgPO-4hAI0`*oa)S zU4Qys`@t76{M^evoD${T%^z&{`_Kj{Rn8@WOpW}Ch9QQ6PJOfQbh&b*C^fsSh{>Da zt`Sn!e|*K4nE%IknI|0HlY7fqap>)T1z&VOy60|4?zsaW867qngX?-!KD&*^V3Opl zgDFX-%SJDyJWuaSDffhI2)D->+QbxYNyWOX~(vl`~BpL z68|Qt&rY3BblRNx7fJIjEO^6p*NOL0rl7_|CQ%Wm4bhu951;ws^=zAej@&6F{UeN$ z2Rvd*nH}`3oW*Pki?rnz3RndzxlBAF@Kp6J5O5^uZ{ZqosTlv3m zecfNsJ?EFkgd}k$TaOa($vP76%`|14c@C|gqW6DSq4#gmLxs|H?|1UP_7pNZks>qk z5bqwLGio1SIScRiy!@!^c!o{O1dom>(^@?>kHmaCcCyB<<>bc64j&AJP-9Wp=gLxV z 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

Ijz$whIpG%lw9=9+np6u&UT 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

ddK2zNZh3-ZmWZ@92XKpS}yo9e!Iir&3nbU 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 PDJ?E3s?^I%Enxrvsf{%S literal 0 HcmV?d00001 diff --git a/src/documents/tests/samples/simple.tiff b/src/documents/tests/samples/simple.tiff new file mode 100644 index 0000000000000000000000000000000000000000..ef30a868952e0ab1fe22bda7cde29f79e71231eb GIT binary patch literal 57135 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 LoK(Gnlr#nahbpy3 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 @@