From df144e298cb25881f75bc40e1c0f86cf210bb300 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 6 Nov 2019 17:30:02 +0100 Subject: [PATCH 01/38] Add POC for diff against temporary merge result This fails for files with merge conflicts, because results for these files are not added to git and therefore there is no blob the diff formatter can use to render. This has somehow to be fixed by making jgit use the version from the file system. Taking a look at the implementation of Git.clone() might help here. --- .../repository/spi/DiffCommandRequest.java | 26 ++++++-- .../repository/spi/AbstractGitCommand.java | 26 ++++++++ .../java/sonia/scm/repository/spi/Differ.java | 36 ++++++----- .../scm/repository/spi/GitDiffCommand.java | 42 +++++++++++-- .../spi/GitRepositoryServiceProvider.java | 2 +- .../repository/spi/GitDiffCommandTest.java | 14 +++-- .../spi/GitDiffCommand_Merge_Test.java | 58 ++++++++++++++++++ .../spi/scm-git-spi-merge-diff-test.zip | Bin 0 -> 27099 bytes 8 files changed, 172 insertions(+), 32 deletions(-) create mode 100644 scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java create mode 100644 scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java index e26b2eb5aa..0b7592b446 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java @@ -90,8 +90,10 @@ public final class DiffCommandRequest extends FileBaseCommandRequest @Override public boolean isValid() { - return !Strings.isNullOrEmpty(getPath()) - ||!Strings.isNullOrEmpty(getRevision()); + return (!Strings.isNullOrEmpty(getPath()) + ||!Strings.isNullOrEmpty(getRevision())) + && (Strings.isNullOrEmpty(getAncestorChangeset()) + || Strings.isNullOrEmpty(getMergeChangeset())); } //~--- set methods ---------------------------------------------------------- @@ -101,7 +103,7 @@ public final class DiffCommandRequest extends FileBaseCommandRequest * * * @param format format of the diff output - * + * * @since 1.34 */ public void setFormat(DiffFormat format) @@ -112,14 +114,19 @@ public final class DiffCommandRequest extends FileBaseCommandRequest public void setAncestorChangeset(String ancestorChangeset) { this.ancestorChangeset = ancestorChangeset; } -//~--- get methods ---------------------------------------------------------- + + public void setMergeChangeset(String mergeChangeset) { + this.mergeChangeset = mergeChangeset; + } + + //~--- get methods ---------------------------------------------------------- /** * Return the output format of the diff command. * * * @return output format - * + * * @since 1.34 */ public DiffFormat getFormat() @@ -130,10 +137,17 @@ public final class DiffCommandRequest extends FileBaseCommandRequest public String getAncestorChangeset() { return ancestorChangeset; } -//~--- fields --------------------------------------------------------------- + + public String getMergeChangeset() { + return mergeChangeset; + } + + //~--- fields --------------------------------------------------------------- /** diff format */ private DiffFormat format = DiffFormat.NATIVE; private String ancestorChangeset; + + private String mergeChangeset; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java index 73159da5c1..c705e36e12 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java @@ -151,6 +151,32 @@ class AbstractGitCommand } } + > R inCloneWithPostponedClose(Function workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch, WorkingCopyCloser closer) { + try { + WorkingCopy workingCopy = workdirFactory.createWorkingCopy(context, initialBranch); + closer.setWorkingCopy(workingCopy); + Repository repository = workingCopy.getWorkingRepository(); + logger.debug("cloned repository to folder {}", repository.getWorkTree()); + return workerSupplier.apply(new Git(repository)).run(); + } catch (IOException e) { + throw new InternalRepositoryException(context.getRepository(), "could not clone repository", e); + } + } + + static class WorkingCopyCloser { + private WorkingCopy workingCopy; + + private void setWorkingCopy(WorkingCopy workingCopy) { + this.workingCopy = workingCopy; + } + + public void close() { + if (workingCopy != null) { + workingCopy.close(); + } + } + } + ObjectId resolveRevisionOrThrowNotFound(Repository repository, String revision) throws IOException { ObjectId resolved = repository.resolve(revision); if (resolved == null) { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java index 0204ca4e3c..b781176972 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java @@ -8,6 +8,7 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.EmptyTreeIterator; +import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.PathFilter; import sonia.scm.repository.GitUtil; @@ -37,6 +38,17 @@ final class Differ implements AutoCloseable { private static Differ create(Repository repository, DiffCommandRequest request) throws IOException { RevWalk walk = new RevWalk(repository); + if (!Strings.isNullOrEmpty(request.getMergeChangeset())) + { + ObjectId otherRevision = repository.resolve(request.getMergeChangeset()); + RevTree tree = walk.parseCommit(otherRevision).getTree(); + TreeWalk treeWalk = new TreeWalk(repository); + treeWalk.addTree(tree); + treeWalk.addTree(new FileTreeIterator( repository )); + return new Differ(null, walk, treeWalk); + } else { + + ObjectId revision = repository.resolve(request.getRevision()); RevCommit commit = walk.parseCommit(revision); @@ -46,40 +58,32 @@ final class Differ implements AutoCloseable { treeWalk.reset(); treeWalk.setRecursive(true); - if (Util.isNotEmpty(request.getPath())) - { + if (Util.isNotEmpty(request.getPath())) { treeWalk.setFilter(PathFilter.create(request.getPath())); } - if (!Strings.isNullOrEmpty(request.getAncestorChangeset())) - { + if (!Strings.isNullOrEmpty(request.getAncestorChangeset())) { ObjectId otherRevision = repository.resolve(request.getAncestorChangeset()); ObjectId ancestorId = GitUtil.computeCommonAncestor(repository, revision, otherRevision); RevTree tree = walk.parseCommit(ancestorId).getTree(); treeWalk.addTree(tree); - } - else if (commit.getParentCount() > 0) - { + } else if (commit.getParentCount() > 0) { RevTree tree = commit.getParent(0).getTree(); - if (tree != null) - { + if (tree != null) { treeWalk.addTree(tree); - } - else - { + } else { treeWalk.addTree(new EmptyTreeIterator()); } - } - else - { + } else { treeWalk.addTree(new EmptyTreeIterator()); } treeWalk.addTree(commit.getTree()); - return new Differ(commit, walk, treeWalk); + return new Differ(commit, walk, treeWalk); + } } private Diff diff() throws IOException { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 1ac64c1b5e..86c2c9baab 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -31,8 +31,14 @@ package sonia.scm.repository.spi; +import com.google.common.base.Strings; +import org.eclipse.jgit.api.MergeCommand; +import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffFormatter; +import org.eclipse.jgit.lib.ObjectId; +import sonia.scm.repository.GitWorkdirFactory; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.repository.api.DiffCommandBuilder; @@ -44,15 +50,42 @@ import java.io.IOException; */ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { - GitDiffCommand(GitContext context, Repository repository) { + private final GitWorkdirFactory workdirFactory; + + GitDiffCommand(GitContext context, Repository repository, GitWorkdirFactory workdirFactory) { super(context, repository); + this.workdirFactory = workdirFactory; } @Override public DiffCommandBuilder.OutputStreamConsumer getDiffResult(DiffCommandRequest request) throws IOException { - @SuppressWarnings("squid:S2095") // repository will be closed with the RepositoryService - org.eclipse.jgit.lib.Repository repository = open(); + WorkingCopyCloser closer = new WorkingCopyCloser(); + if (Strings.isNullOrEmpty(request.getMergeChangeset())) { + return computeDiff(request, open(), closer); + } else { + return inCloneWithPostponedClose(git -> new GitCloneWorker(git) { + @Override + DiffCommandBuilder.OutputStreamConsumer run() throws IOException { + ObjectId sourceRevision = resolveRevision(request.getRevision()); + try { + getClone().merge() + .setFastForward(MergeCommand.FastForwardMode.NO_FF) + .setCommit(false) // we want to set the author manually + .include(request.getRevision(), sourceRevision) + .call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getRevision() + " into " + request.getMergeChangeset(), e); + } + DiffCommandRequest clone = request.clone(); + clone.setRevision(sourceRevision.name()); + return computeDiff(request, getClone().getRepository(), closer); + } + }, workdirFactory, request.getMergeChangeset(), closer); + } + } + + private DiffCommandBuilder.OutputStreamConsumer computeDiff(DiffCommandRequest request, org.eclipse.jgit.lib.Repository repository, WorkingCopyCloser closer) throws IOException { Differ.Diff diff = Differ.diff(repository, request); return output -> { @@ -66,8 +99,9 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { } formatter.flush(); + } finally { + closer.close(); } }; } - } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java index dc43b8d9b7..2778fecf1d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java @@ -169,7 +169,7 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider @Override public DiffCommand getDiffCommand() { - return new GitDiffCommand(context, repository); + return new GitDiffCommand(context, repository, handler.getWorkdirFactory()); } @Override diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java index 52932e83ae..854a217f1c 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java @@ -40,7 +40,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForOneRevisionShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + GitDiffCommand gitDiffCommand = createDiffCommand(); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4"); ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -50,7 +50,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForOneBranchShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + GitDiffCommand gitDiffCommand = createDiffCommand(); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("test-branch"); ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -60,7 +60,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForPathShouldCreateLimitedDiff() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + GitDiffCommand gitDiffCommand = createDiffCommand(); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("test-branch"); diffCommandRequest.setPath("a.txt"); @@ -71,7 +71,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffBetweenTwoBranchesShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + GitDiffCommand gitDiffCommand = createDiffCommand(); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("master"); diffCommandRequest.setAncestorChangeset("test-branch"); @@ -82,7 +82,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffBetweenTwoBranchesForPathShouldCreateLimitedDiff() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + GitDiffCommand gitDiffCommand = createDiffCommand(); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("master"); diffCommandRequest.setAncestorChangeset("test-branch"); @@ -91,4 +91,8 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertEquals(DIFF_FILE_A_MULTIPLE_REVISIONS, output.toString()); } + + private GitDiffCommand createDiffCommand() { + return new GitDiffCommand(createContext(), repository, null); + } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java new file mode 100644 index 0000000000..300fbee4dc --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java @@ -0,0 +1,58 @@ +package sonia.scm.repository.spi; + +import org.junit.Rule; +import org.junit.Test; +import sonia.scm.repository.util.WorkdirProvider; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; + +public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { + + static final String DIFF_HEADER = "diff --git a/Main.java b/Main.java"; + static final String DIFF_FILE_A_MULTIPLE_REVISIONS = "--- a/Main.java\n" + + "+++ b/Main.java\n" + + "@@ -1,5 +1,5 @@\n" + + " class Main {\n" + + "- public static void main(String[] args) {\n" + + "+ public static void main(String[] arguments) {\n" + + " System.out.println(\"Expect nothing more to happen.\");\n" + + " System.out.println(\"This is for demonstration, only.\");\n" + + " }\n"; + + @Rule + public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); + + @Test + public void diffBetweenTwoBranchesWithoutConflict() throws IOException { + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); + DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); + diffCommandRequest.setRevision("feature/rename_variable"); + diffCommandRequest.setMergeChangeset("integration"); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); + assertThat(output.toString()) + .contains(DIFF_HEADER) + .contains(DIFF_FILE_A_MULTIPLE_REVISIONS); + } + + @Test + public void diffBetweenTwoBranchesWithSimpleConflict() throws IOException { + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); + DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); + diffCommandRequest.setRevision("feature/print_args"); + diffCommandRequest.setMergeChangeset("integration"); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); + assertThat(output.toString()) + .contains(DIFF_HEADER) + .contains(DIFF_FILE_A_MULTIPLE_REVISIONS); + } + + @Override + protected String getZippedRepositoryResource() { + return "sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip"; + } +} diff --git a/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip b/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip new file mode 100644 index 0000000000000000000000000000000000000000..9d957ef6f53ea51baf7339c0a2c293734d6f5023 GIT binary patch literal 27099 zcmbtdcOaGR`!^#a%Fc?&<_u>U8QHQop>vLNkiAJN$%u?dl$ET88Ii2)%p?`rk(p5n z75P0!-}lAa^1eU4_j&cl`CQNSd9M4uujjfx&z-I&DH#r6wXKn<6D5+WgQ3AQ*u!Q4+C-;B^#VXk3*B{-y|w zJpcsO#TjpJyZL?mY@H=x{Nwu(+MN;_k#FCKYKT3N=oD>{xO==!qE$;&NK;I>v;C<- zp%G~0&GEK&^^Oi5b@C4y;Ti_z$hZR$BOF9qrU_S%h@jw>1I(%egBmbxgY&?;+q-(& zyEy;u`l&nGG~2bb^aTI5Ut+AL)gr1V*z!cwSPd|2q^qMYrY+toD%b*CkBMN53DGoB zYYwk{_ZZ2xYnTGAfwsDma|E!D1=yhiuEEyc(?J}I21wkz1nkc#d=OiHgenWD;t?vRH5^vuGwQi> zQo!Ca$MU;9T6%`>VrvV6qtP#^L_Y{-lvLT{SA<|iBc#-jYi)F4rN{2V6Rt0}%Cor7 zUe9`^tCgi)&3u#{W9=h)5mRwXTtW2+RVSnrq^e||eJ zImiIA*7YEfcd(Nz3c^hebTc!rPMDQO@bTyk|dS)i&k7-YbwnzDk@-!};TV}QBi@KT3>4-W}D9NNZ1!rs{v zXX}n8+*c|>1Z*J#fPeoGg3r#y#bLL>ONgKYoVLQ3fIElZLqx>#_xD}habj2(CntMP zaSybUtK;`u`HR`$WQca@htsb+u7}@a;G;eHT3rsWMO5EbNTfiKOT3&ew#Qt?ESX=Q zUr1U!e0{kp!^VgBixy+F&q9^IkF5){!z^==cxO1&TPn`45Y-)pzR z7lF$Uv~3PgKUi4WfEi5pzszpHN70B3N;=vF+?;O8e($W|pLEJS)wB1bSOw#x($h~x z8gpNpM!+>AEvz#=h<&M;?mMbg!fx`Ty%uFWb80@8iTr zg5V3)u%-6*eGJl7dm0UcE*(nLdtBhXW?)vnBsoWN@5Dtc$n znSRq)p{}n8o=plF8nhl@6r2seG-Nl6c@!6OA?Zou_+_pXEn~#tyB3hryLOiuod>+9 z<%K|T)*JP>FIOhl@=o6N%6;LgEKGYP=Yxqdj(YJ-?$pRv(U3v~>$Rh^kJcWZKGQB5 z?2-Az{!sPvE)Urlo%Bh+E8L@zQCSbL@4G8nogbf_3y6Cgv1H3|Fv`;W-1YgQ%wn9TS>R1h8uBIblWg-s-j6QE zpWGNx--7;fdf7;ekSsfdp;4iT5T@@1uM za#r(;_SaZLKYoZ+bdZr^`O1Qv+}eAK_w*O&%1RojPKDxvza6W1mCd7Y0eqG@Cn52^ ze#8ujn*}0<0|!B&N`BzAD6$b zF152Lm5ey=2Je+S_Q{CcmO44k6a2NRyOd2}wbu!kGRiXTx5sa0{Z6?C(+2U*z2P8_ z62BK25z)bYL_`dK&ulMO8?+~G7qdFgM9+m6L4Ov1u5sW(UEoRe?y_+;FRh*#E@305 z`8!g|`1kjnnUnIh9#)lZRHe;X_F5v_bTz7We%M^=Xd60ryU@iSQ^AYlpKTWM4`mM-Q&u}`UA3-%%CBX5{a$c%*?TiMGu z&sFzTmbHMS$k5{oV~zsIA>~?bVQEUtdADnamKZ0K+0tzcp));!M5+O4Z;v-kdkn6W zeYOZW*@+wNlB3h;OlV!q6_h=CaqmIp7BRY6O1{Ke>*-+r0s%4B$`cS&&T%!at1t+y zKMVT&!IsYqFB8z`A@66o>ogYWuDOzW3Pp31Ug=7c{HB6lNYGiK^GQ2PH{JF?nJ;Kx zw87PmlnB-8Yh0RU@A5On79Z|8Of^06?*4(y6_FsDSx!)4(wUcX#8{Xo%IBd9a+ z#V}*`5Gvrj1>$4v*PvjZ3B2y$8r94RvP+bwoUdM?w9j1&Nf-)P(O4ch;ZQnaqMAF; zp7&uyO1;AExc`EaL&TtvxcS{PIn6W|WJ}Xx^M^UfoGx%(akh5qRe68(DMc6~YEe8mT6e2qr{r)$R>F^XjAY*V*L z&X^*b>v;nnXKo4J-%y$I3h22na&YuWcC9 z!^&d}a)c3dM)fo62KkQ$Q=&Fp^E~q`MR=-$5{_6e-H1yuS6p}&_u5#s$HA1duX3ak z#a?JK7XH-7a>-UH-Gvlq%khYoG^y!E^+(R=!QQ+_DIKDeet~7TyHr#uAj|iH-d|u%K5j%6;S`k+ zeZh(BZeZ~}6GbBWddx9_8vS?Phj%k8MDgeiZ#)~yg9)sRHPH@;e5_Hu z1MjBg)8G5q`e>;Tk4D9<`b!nh94EO3nNK)$uZw1O2@U1X*ZD2V?OeggdZUX{NQj7( z$cc!U{$9ZdxrwWnhutpLut-C+LqCXqont*biQy&fjS``+hS%x@FEgpIVR76|rLD`T z1M&Piv9qN$XMJK*GO>kBin!_dLH`Bq8#PFw2eNxL!cdjP=jrax(Oht!->3N2i-kw( zp=v>rD(ltDH%Xs#f3mMpn)-6H(2Dqk2DUKd!~XERD6(b&@+U`bQE)1>5XINcL|wS0 zxY+wBjQ-Z;0Axrky{2QbYRocN*r`k?OR40rsj$ZjUAP--%V{;l@4oj{2}M4tN5Pp! z!vvK^4R*eCSx-75`E=7AM4H?;>1(&t1=4K3=oO6yj7Y?)znHbOd`n_BQ5FyZH@ouS zO@Y-7(NC?hd3l##_ucU_EOU2Cs?!ry!d#Y8t;e?nRkRZY}ZjX2FlCKU`vGw?R zs@&=0ZzKB^BY2)T@lIh6RrWl8Gy5Wk#EQ0a82qZUA}{ChD-j+@pjMG7%dM3VX4_zT z9T#mx&c6$kUp?7{{KEabi&BFV%CGGsR@HKK*9p?w9qlWCRe6;+K@wk|@Cu{$OeIGC$n$dgv zylW&4S*|g!lIX8UA-^cRSIte+WGai}VKfkR_kQ0_nR_)TBEeR-(x)nquJygHsCS<9 zL@4%AfO2c5$)1_HWmFHE1wRG_BjN+BNOT$ObDv%$M8v9OA<5=RTG<}sHhtARYk z(Y%&B!RC+sNo0CWNiMYcQS_Ktvm%cz6b=(hUp(48#iq!`!+V8ufA2h~c0!QMLIcU% zRuz;!L1`Rz#GD(yG{g9Dbb>4)r!d}7VO~~R4Ru{2mn}?8hs^tA?#QJhX)3iT&{N_s zESfaQ<>U|dHuTIKm~?;cP5w$rhjzc>&{(ONn@9vAw4dkP* zjjMPk!GNkErGuX|?l4_Wr9~ZkVxTukbG>S2-s;GO&ytPCilA&1t}o?)UBEKDE6DhA z!^wR&E2tIg-G!p-zt!{x$jQyjYi-)3|XYw7^chk&((^>3~T>xw%Li?jFM zO?u>|+ooL)qL*p520z>%AaBunMOZD2^kcU%ZxxS`^P?+T4AS9)6pCxo-mMvwZhbFK z+crV_rP%YYa+$Z7=LSpDN`>7QrtD6nbu_-$TFZ77bFA0=LW`bL-o-n~kk|WUMB+bc z6}Og|=pLap3%j)%91>SoE2Ss>EV>( zQtTUXkhLSp+>_bZ%I?-Jp%|tqaYy;{=h%CN&=Di8^&1d<={KZJhWk`srWe$Xg{nVF zmPqAFDE5=Ou9dJ-+$j0B-J(lWzlAAc`Tn!LG+ZK4XGgzHDm&EQ3iG~2w1U%YS>nFU z@;>qSD)rJsVmCofJ8Oy=ul1hGBU&8}25?){rEa=QF7!3919?^-I^F!wawd)y6*QA_ z#qVoHGoCHvUDD!r%gJyJ)GK2bb-# z7xN*^1t+xgE~Y}fiIWaHivC;jTKM#ZtC_rJufMu$P`$cawS4+6(Wkek_0ym9c^ycw z^e?Kq7?xeLo?3*Ekk|29BtFm&U22zsMt5{(lz78AMN*8rndiLc_)soJ6RM+2CrtA` z_B6V<=veIwZI18JQJq`fSJlN=plrqzi*Gs+)0TTz#_yPhKk7l9<`>a3aFO7q_w(&v zTWOzr@cCNeJ`{9PQGA*6`o6NM70gIH^so-9j4ct zc3bh0fsS%)FmF$j~fXQCzNzGwX{zS)OIxV z>ia%@xi9n~@9Bf0$LH?7t|021TvfRx$V>78I%{m|Q_ zQv1(N+|Er2B{nmojJEXd5Xb|kwv#!p_7C(@H;v?7B@T;=AEBC*v;rwPUI@+5S-7Fd z8f$);Ix5`URco1EG2*@%`U!_{d2W{FM-wu>NDn%0PCPOH_1i+T2gh7~@#D+~^1Px+U$wJcAaPp$FYm?-E%O4vdwDD9Q=yTq;~VHyo9@{X{xc)C75 zGgx9FeRktY`?{Mcw#S?eB@vsMVcL^1ewzKg`TTSrfi zPrJ(Z$G*5|e&qh)3tfDWv#hWwmskdrDh~ zNI2m5Yu^c|RLXGRpW%Y~G+bDEPm?rJ>CHNNSHDTrd0;7%w<6PvF(il=~J1i41s4mLQB3*@qC)R z=6CN{4*BVH6Us4?EUZ}~ssl%X+b>ST(v<3}$T8vUkbP{d<6>&Q0IKvQ>vOpT(5pm4 zmtb$I8AZ#H&Rm*ep(A!qrNgFn$ASYTs6nltx!n6k84^ve;P$xR9T07wvI@%gMt``X zbf8W^GTt1sO3b2O48g_)m|j;;5$pO^UKtgnCy&^RYcc9PovRg<>)XU2XmF+CVl>lT zo7zb2TMh5syTY;$Ju;;+wfYpGn{=!0dI|sWzNeX`y`?h6^t$Q1bVxInp}gWI{XHiQ zNWFDGX|a__dUdi~i9)m)9=qhKF7Fl86aIK#LXvt1Rgm@+e$*wpfQslm9p_%;iYI@# zl(5|*50!0V%?K_)mJGi~3(?$(x@r3~_T_?VL6>pf%LKus7B2p>(7ht8Wybf=r&!14 zgR`~nRZcd^CA(1$19u$(73 zi!-B4N_T(|pXtr8z42DB{Q$i%edDPZ_D2e2dR@*^w`}iymOb%7KKRaw!I@(*7S~Q3 zr*UzDNpa0_vQH5!s_Qn;68Wj`W%*pgD?}^)Vn&0@Sw`lNYu+;(XX&rpSI^2;sjJd{ z9!`EX`J$20m#>c8-30SxGIT6sba8=hfPOaUw)OqjlzAk?PGUi+*V9bXlGh?Wwd}Q! zFhSCIzs&g(YWMCNdQPBbna*P%p!{9F!AUpgV38vlt2}d|-ovouHOY3u49*YL{kMyqL!+?8V8FApv@j{oV5X-<0r8iDR=SN6M zH6k!yl@;R@kF(L%)F$Q+C7AG^u#l16w~eBvcV$wSpp7+V-O*grXrAqeoB*8 zW2M0_2G!Ka=cZ`u*px314qh)k$MD>TK{Ec6vjh}{2%tQ(cv01T?QW;(tX6{i)y04K zcJZC5-Y^9b5ii3(OT6wl4BBHi*-nb7gG;{(^SbD_a0}(UtX!_rqm2CzqegoblIEOA zY$BN>8j4iMbun7*525vfr`~N0dDw>Viiu2P$e&D%RWFoBKZ|q0N8~17H~PqTT5nX?b`;wPcCFNw+&bFW1(B8P+cKjJ?U6e{sSk=Egwx^&Z*{+;kW!XNfM+_I@Y1zH- zpr|C~PWK^m{I!F;*x=HT1M%^ilr66773P=KukLNU#Yed&sHw@^jWuFilX-FXArH z)za{+C%(u$yl#;74%FUGjK=p<-p3{D(GtNirZf2Rq5g{@8gZh+73rTeu6+a7 z_zb-;FV0DI>q(^bj}*MiVQzBDX{6ys?y0d`cSZNffLih|@&_J@;COk2JxnmuN)hI} zPvdh7m*ll_LGi2yoTSZ#2<8XqZ}hS4icRJ({785WCa>L(8dab*`o#ORo$B<-LZj2r z$Xko=E6`A|=qApS$-e1#9xa`Hv`52mPzU`pdr8IlpV zSYOsM=A_eIyN!K3J^gN4aE6mxb!}l*n6a`;p2I-%@Egh^|HzAh*WzN;t{~+3-yia! z3nYOXeel;8Vyct>c6BOV0Y23sk*ui`_SN8}Tl$H49Q~!_@$!4rK`Y`X&qq?f9Iwes z^YQt}#?>gI{In*?U<0O+jW?)N4isHI!#G%cq<6$C6L!z8_HCX_Bz??mZsl^>QH%34 zWNL+iw2xoD?zkk(Pr@@DB+!4uv$(NwoKEJEWj|y=Oq(?>Vz_q+hd+t5XLNot{s zJ~Phu@?hQfsxF=W3VC(tNn3x?qwJs_rclU!<1ZiVVu!xg9C*1TcKE78&oPqqxRb2X zUlK;%krk5Lxfrw0;cfW6v>DVXx(pl@%MV=(DlU^-|1!TggOrhIk3GCrl5UE2TofEL zd*wTPq2-R_qq^c1oLm^&*?w>USzz$(hiCk&`a(x5>RaeAu~zF&O3>^DT5!2`>hot| z3-c|8e)!PhmA8%@?b46j3qaLjPFKrC?H)3fAND{7NFDU8t@5$@aB_aFU&Q|`?4Td& zal<0}s}LGmspWItR02=;XML5Qu|pYm1Qc|u@vndV@aAoQnRxinc`M5!b~bZCU#Iqa zr5z+!HQ~7!MKc^!y78&v$S3ZVr0n-@pEg#UrAV7E9v(`2u*~$6t-!HG{`oLe+U(J4a4}IG` zGn4w4tj4rnH+5o|MB?r^TpJM5oYt$k4ZZ3my#yI@JY-tT)GiU+37voRIQC)u9(LZu zSJ9&3dOBT?9eA1>=LEISCq-Rn=uC)o12twn_o8c8zXxTxsNdAhnvTeCB%`Bx+0Jr+ zmb2+`gN2aDvJxVK?)v4x(fVcfFRARzme!UDN-?CYGCq|D-o_GVRBGlHDLm^9jh_=& zw3EfiDiB3o@-lW)^}Ja(BPxdqiwcxWX%OBkqL=}1$Ze=&ciUqVGvj~vDa)<*V1{z; zJ7qEoSK=TY*B&ra-{h9asMRSDFOaaRO8JZ^j1Op`SstB2)L@S3lg<`V2M-IpsuL^p zw73f!k(D|4%u|YA@&ae3TeBy6oOkAUchHLh`YPwx8=2HG@Mb z&`C3qJFLn|5-~K5FD9Y)=MJUFOA$M2Fz9+R8W#2=ZjG)v=y?$j4yKkq7$vj*pdRd1 z#87?S4Dzf7sYE0Vr=IFSjHL`VyDbPga>P73N@A8Y$3erj>i96$?m|9po+^pjredlt zNW+u`^Qv9f^n_Ma)m(6I>wWDCb%(j0&{+1+Cn1(#!O4kddXf!=)|XmKLRCJVn+~_V zI529%xX;k{t=p7^7JKVdS~nMKtDhC+Yy_{NVBzp=psLo9xSF*+UD8ozy&rFEMCV@* z=caW1;GSw?^zaQp)%-L~mCd$5ZO&IDFPU z)6~<;)J816N$DNg7oFSBz8Bkwd85&=GJ}tmlAY8R_BlT|^hCG*etVwjyr*T&u`~+5 zer_UHweh8m>kGd38|v~J^;IOegsR7hEe&B`h|Li}z6*ilLDAV?nNG?nuOg|=MalP+ zOWeHQ+#}w>Nl{b=@|(4KmG~Kptz$bqW9y*%rn&m7Y_>g#wR5mu@wfH8JDy*Wqy#s>}0pbIt>Un%5MMWKVfYTOzNVukkfXpbXY8JE<>r zirQEquV~_6Ei>hvyTa&nLy_BEtkrdig*la?;GnmpN+OTgxxz=Rdh0Uy3g`{z3q16s zgq_nzno{ViaZYTiG578pt^__qLugK2jCHs{#N$Xk!w$OpOsI*dnD?E$tyhKvj{c%s z(n%Eq@AN8RMQxID#G%Psl4y#3`s&MJ=7B{6aJ*8Nm~>c*M0{yt<4_x0WbBz~mMs4$ zXR?D;wBPs=Zyq{Tg$oQb!ZS5;HWxMp#@P485R>(U&0aqKuB<&6&U{q~Q_#biPaFAY zF;7W5BBSJX*@Jv+#26)&=xiRx`U$e2JF$JsC#edGys#;skB%N6M}a1oF}3?oO7T|4 zl*E%d-d}qbQ^!AX*D0o%;&@ND)L6P;{9 zuQ@&x0`+^gteJ(v6jk_5-TAd-3poGm8)YKoRR^mDK zB((ZQod|cBYZjx~HJ+SRZ3zkSBfyUP@yvVs4{sd@q|LdtBx~i zT>W6i`bMFOB?-g(*kO{xvg_t?NnL6h{TzlZUTZbSCbfF-w`dQ02qpQ7I(i|75C1t$69+!~2>`&o5!uiToJB%nf#Zv4D_tWam zkxMhjN%%f$xy#Ch(G5SPc#oFwGd}MFlGB)}w&-=+J1Maa6)V1BMRHpm$`E@+OsE^@ zuK}??Thca@Z_&vMOOvhsC{4AnZ(&)keelE8hszg^QNQXLb+xUuJk9QTmUQO?diwY{ z$zGtoczZ`Jmr!5as^{*afMpb8L8#>_Zxn}XO5K%@FG%=7chjT| zL+?Klzgc;Gw0ZfB^I(%(N3Cc(iOb=sDFZf2o=G}a6YPGqrqomKbdY2cVKl=N)5&EQ z#d8>y?e3jlCbMpJ6}EbGzIuYJ;CR9rj+n5%1v@X}s?emvD*-# zwL0SUNzo`vrqL}2$!VeywQ8ziftPX>@Zv4q?imW%&@{H2>gMVwFfWq_(`=fTF(d@hqFS{nUK{ljv!9>A3zqvG+v#?)JH6UUzXC9O9#E}pDOSF#Rd%^71;kpr zJO?p0rX}gPsflzOYh`>0E71tz?WK-0T~V4IKZ3aQprO+-^nK15pM1`{Oh?`yP=2-Y zty8v{tLDi*eOzf&(=*lts*hSFmd9>Cs1EIje8-WjVr6ia&V<2zu(Uh<8I$>aW5bg1 zma<#+w;zv6zX{g~&1Q}6e$f?v==h7W%mH4|RlB{9Xg0DO!-(^l_dO__JScFqFi(g5 z#UmH0q1b5B6ZY}n4rQ>RQ(UWp1v%N&9Q^MHQ<6XPQt?rtQWfB{*{eg}YUc7(YS0gt zP4jy4M(lO14DLSeGX2`1rwKGiukkdBA%xsU=q)>nQ;W{0pOi8@b5FIAl-J3LN#bxS zP#CELlLwL(-Ckf&CJtmb6B5?9ye8BsGfhrBnSir>n&=v zw?A*w5Y@D~?bmYbjMr6G$d3}Q&Oco)M8lzvYphhJC>@qA zdKY^(_~lxE_Gf+~BQPiPuX)_g0>);SEFe|zI_FbdL}CF32xB`700LOICJP+?b(REK-#-MZzQkG4gfOL7wwz=vW@+Vf zilySE@*Y);89J15+_4sZ;6P=ynJ;O=LjAck9XHDa8mhPA0{ELPe#UuJO?ygGGR0$z z<4|^&2FzYL%vBciooMkm4*JlvNO?kWgsj=H$Zuouc!BAeGuJ}ioF=*B6wx|W9V)A# zr1$($io*hT#6zb~k8N9^m+Rl2=5Ama*HBd2V(_6BUT4i!An0cy0633@VX$bh4G4_G zNFu>_2p)xmpd_&%8x#hh0u4hz@sd#Jrt{Ka|272d<|$`lCLfBFufF0_cdO79XRA%4 zyBU7r1gGU0%TMkGtjNsPaKDIsjx|1*KK^y8yw7D?OPWL?1ss?y2MDVNaMS+&q1_h4 zu4t^oRuKH;&ioo?dnDPwwm^QNU;aLy5{>aXBAwc6KO++Wfr4-l3>stu#YjTIU?>_1 z1=*m%UZ#@pD~fFU4=4Hmyi=3>I{$;AI}KDmktc5O~4*Zx=T(#omOwL!*?BiamZNn!|+*{4G-`}BiCGqS0GJb*V zx{dSx159*0?IC@(gR}|5FY>)V5tlp?(cT?hAm}dX3OJ6}G3h;csuZA#Ft*bLfItx_ z5C#snk;EdAa2p_gz$h3L1+2(82pm{_;7B+Oi^puzH5XiGNf3ztxco$Eh6C+&rQ(-D zr@1M=h+F_2ccym_GQJnjifQZpu>L%vyw>sV?F%N1pZrqy^!mz1MzTF*PLhp(B6i7R z5k@X4b^Q%8o1?sB;)0Qgb0v-73&zZWgRjnL9kn1bs8Y zA4ne&SD1gsp1`s&LmiM~@@97|V==pAnL--~%0N$NIKVJrY-bq&K?6G+6oQ8%@E{-* zv66T!41$59U|mZ@~gY5yp1101z-5 z0qlJs8w3Ok!XRvLSR@*VOb8xtjF|?d4i|zTUG1TtBK2DDYd-cf zSG!?7qBGx6Vy(t*N~ibcaNe^!m&UljGcH=-$U9f%IN?Vse$DLmr5ypL}!TjCV=m^CP4B|4&9;hNDRm(hSlg-)UBTH-OX zC%$7&vb=hNn4%tiTFBeFqfD*)_r|p;$Ucv0CYwu+mSTtxI(8G|0oiXkP-u#2W~3~~ z$G@!nM9ktxnS3wT9QXK@_mk<*+~-!y3c3qs8>#|=6c$RLcKeS4lXTA8B_+wf`4&9+ zhWx=-FP4MlK9QW#*L}DMQ_=1&%-Es#iHyEtN3A^WrK0sw&l`3DqOwIat9OQ9?BeiM5=gr4Htv@I2;itLo?v4iJZgyY+bYt+0*3d(56-O%gw=p&WR1$Y%`d8Qd51 z5EFeL>oguhx!}gHgaxVerh6~a#~kr|@QhYTMf={$7czLjQn-3W+bE@4g6ZW&`rGqY z;^V8aYzOL^-u5js8`h7=lnIf&j3Zg@!cexhD_cG0?ltsPmpA!rsDicci0so7olN@jCCP6IXv0 zdjJSl5&;Ao7HWe;VSpI40b!sJBuo<66|fi_9uMR#P)QJClXTgVU&NkfYm1IP2!U7Y zR2LODCOj@0+@8=Uy6`5pA-3HnxTL+Zfg^Y%_EvkPCwW2FNX+WVbJnkXZO^fokXw*v zC9kc$!vw!M6I|IoZpiPDZ!S*69LgrMI~r_uyBG8T8Cw#xb>L?-03awyC<=H|LSjH5 z3=)Hc;t*IQ6lw#(A@MLA93zPa!!gM3D^^U%FIKEyPQl&>8_jVm5}gR=cv~>l^ymW4 z*;;_ui1AN(ei1uY;qGXFpm(_v%>q+UWYgo5c zrRn!coFw)Ci1b}mim+3Wt}ZR|R|O*m+ceWn21|@r;}hgxXBsb2%zrW1_FVnDwH~vL z;h*eRTeqnV2s9=Cjrc@>UBcMTFaUzVpufyW`ScqAAD1C~2UC{Un4VnKMM4G4-v zpmE^u^_jE33N)`MU~8182~PPc!j)nkbHVw|yQ$11q0%^Ri;!EtRE5#k2cAJdmFR2+gifzL5JWBc+haF7Oc!x|BT-Vo!TSZeuOW zG@K=WSw44*g5U9o+HHlW3Rt%?P8?#$0XQU#?K}b?XuJ&sivo{ZM1v7xJAo;velT$5~&$A1t;vNct-{vY} zX~w~nDkTFSdj;lE^x8s+C9iDzM)D`MajI=*IfZwOBa1G`ht86tgqt*YJ8irj7akWlU*Dj&jT0hAKPc3J@t3>E_H zv``cpSpG0b1hDtw5H@(iqdyWYi3b4*Ga7<|ZPH38cl?yrEPz%Lplf5f!q`V0EBX92 z@&4#TLpS3xg^>nq(ko@uE+Zf0e4{12QqySH=)Ij_q_meOaxS+%f2@?ukb&o2xD`14h`g1#LtaNogAcE)u`;~7LT{O~?l3zf$Mov04Eqz2b4TZ?XWO(N?~YW=Zu2|B zgQ{&I*r5m@lrXlF3V*hvdZV z@S^PCUXWBrei4G-raKPcIY+wyJJ@sVZolu@El}ssCk>Dvy^;HJ{QPWROxu`C_0mg|xwP53fODjC8OjlfoRzm!3qy4*Z9Oz~C4tN)jjupfFe{?0W)z{8vd#R+JV{Z=q4CSQaYb7A(a!GF|O1 zSD2<{RG+6)x4ZzInmd@B|on|SMhsEcMc(YC8i@h-RJqz zuf`rOM-(id0@){;-exqA8dusMhf$HRd`jAO=#uN3abJg(M|Cf(_9S2|5XQ*mkh$SB zziZ{r<}UqKGwv78`z;DJ_@3wHuJlP+F39sAHXJArmiZjrhJ~-t#kT4Erii+oSln)_ zpM*62^v~GC5NZ$xCPxDeDz0Ji%D}db5!ti(&p)0zNpZBqh>5ITKE1bYFW3#! z4TfGZefy>-hiCa{Q6hi76hi(M_~ZwxkoI?t*}W91fyytw9PcakDd%G-Th0|3@G^eL zG^p{6N!$Ne#ao2LXG_GL=)5*BsbdQ&itNeCNKCYy_oH)86)QT8CzR#o+N3*+s%9Lk z8AWu#TWdlH@VJI~^^N}<5NU+5J=y?L&U-`yK|V~`Jy)@3Z(X^4&?9@GBSb`qK8BT zB2Ec$+18etxf~g;(JiQois=j_c^A*mg35gHWRM62)h^62+i1w+IB-u z@yKmO3+=v45f_8rif5-+lRjaJ95PATV-@nS=2Ieb1cX=O>R_W<@*S zP`p??%d|!G?-B(Bc9&~I08r(b*FJMR5V%u>vHflVAUGSOBn$;4@>m!Si$)-U>OCHW z29{kskR;eh!X?pYpj^ATqgno{A@+}2L`+m?ls0E0&!u!)zJ=g%Wya}qi14xj*Wu>A zC(O-$M<3dqYHTE{vq%>}um>GuI$XuYF|QWD$s!c^a+WqbSIjR~YCW>xLFL`m%<@Z} zDRF9Ju4jSbb;Erx20}Fg4pbv#kLL^z6N=X>Vq(3!BMh`#!tj20oyWb6uaW?=2xB{8 z00A42c5fHwudaGAtAv1VlR)32a<8|0|1~@2RsSj30{EUY$U#U!G>q z$;qRQIyualBYZ!ks1^R<57|iAzMbLAn`BNJ^nT%Y_(F!;Mccp=Zl|hd51o>XmagF9 z$$6n3moe%dtX|J3dZ)+wy>X6NPe_P>6K2Rj$H>oDsb46}tNlP=Trfn1AtNh0cO}h# z2l+(!rTA%r|VTo&NOPWQD5?Zv1uXjf!LUNa}N9e>c)W0tH*}epTU_g=( zC_)kmmjt2=L`d`TAUp^QB(1;#0YYQIAfO}r{o$I>iTnA+AFV}Ie~9s7#WLeOb?wIL z&8u8IANPDYlO1?u&%Kp`h@qQpY>6)T!gpU^K7@Sh7TzDd*Qw!9TnuAmf*Ed+iYAH|T)OVN zBNn{djEb<~Hw~>qe)hNyfIwg{6j0B`0S#R=1dful0b1QyG!UmK8!!xo1>^B}1mydq z{^f@M%g6OZ@5~SVqwK}A4&{;NvL)Iz8*Gks`~Lj6e$SMvb9Xf0cKZ-S=reIVNssy& z4FCv+(AUMlaX{@*5{m=6+z1#N3_^f0P#hcqR9k_E&A;-VU-p@PO#^3f7q1bo`+;*B z>$Gi^Wm&cU0WTGq$jhZ3tv;H0n+sEki51*AzvKe^y%*(G zd9%%<6@B6X+_+Z3^G9tmFFv8ERdwu=rUe5W>wfUWU z^Q}^=`?g>ZkzcJoPlyT+6VnUDD|dBUn@+AII_I=?qFwLrU0~=lW@GnCk><` zTH_`U+hKKf9k?#hB+AI=>FesuQkuqF4B@AARj!!ddcNOSV?^)NK6Q+w>K9cu;(m|G zfbwL4JKCn24#w0t(J_741kyO>Dyf66s2=ON4Y~KF7HLN}UwHX>H;JI^**r*TlWRg3 z<0qYr-^cB?bC~`c2;o$$O%PAC?KZW{PcMX+gp2g&p6mr)O#1#qPc)}M_-)%+W#r$_ zD*MM)q^n7Q`_)Nh-{FABB+3jt27LZ?ZW(~}lQYYV6ThFp^}8$ELIV8x`)ALNyYLu5`s>84 z-(h{f1q9l5p0~AiRdazvfS&O?7C|ZckJGny2fp*jpY7nUfp@CEga6}ow%q~mJc(mF za5D8@z=W&baW2R1pm!d8upK%KIJoHhHE+pgcL+RpXJF^s{@V?Fr2ESN;oATC?*H!4 zcfPQ`9X)#gU+BMieSLREcD|js-3SHnm;VLLPu^AB9s17q1Gl4(ZJ}=xwBv2T-GT3X znP59O1JB=={_9r@c4uU#;Cj0eL%wZBekQ-(oq?U2f&YAYA>XmQ zd=Vh}OP2aOsIApyrzmynIx_=Ng8zg1TcY|q#GhXr<&KLJ6(aguziDLn@6o7tpgC_t z+f;-8888TV^xdfi{q8Uk5it>8VDV1C-6}%?vjn-rPdCz^v$E3)XY=hjC@ckL^M*-h< zYT9-J?pDqRm?g;h{slEVr`&bO7B!o?yFdFu*pzmv?za0ev=eZ*8a%-4|7%lPf^PY- zsdD?XA3ti`w)=sU+yS^-#T#Ijpm_Vw_k$OpB=z0Ho^<`5(_GdqSRF7@>h7SotkKHdQ2l_Txtl$#y?( z?*!bfq69EYXfXZfxT;jx@?%r9@n=7Nlx%GGgII9~;BEyRfZ0E+yFZE|wwq-J%IAN@ z)xVHP0A>jiiT_OBIi)SLn}UHq)AyrXV7ng;I{|kq9stY|!~_4?k3!`wKQ{aLfA-_Y zF8+2uKJ5hDZBHLC`;&hDKl=)Qw*r7)c23K$DqDVRHqrm=$B!-a?S9Cs?f~3vLme>t zFN-ic{V-J9GP~Kc-i04ObgZ}gaeXJ?Zu{4O+5gw_Vxhj}$7a*{&wl*aa^CL8&7FX| zZ9oHNe_3hxUc3FVPyF31(D(wHa~KVxon2!9kkB>$7ZYx0UAae-=&z>epDFqMqdvp& w|3Q8KhiZ1SrT!C;YDWdo^e@2wHA{bWf#g6(i-<@Y_#?zgM3fACi-_p|0Hh|N#{d8T literal 0 HcmV?d00001 From 758e4ab750ce4e18536472237c6b529cf3698a30 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 7 Nov 2019 16:26:30 +0100 Subject: [PATCH 02/38] Use jgit client library for diff with conflict --- .../repository/spi/DiffCommandRequest.java | 2 +- .../scm/repository/spi/GitDiffCommand.java | 31 ++++++++++++++----- .../spi/GitDiffCommand_Merge_Test.java | 26 +++++++++++++--- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java index 0b7592b446..3e62a8eebe 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java @@ -115,7 +115,7 @@ public final class DiffCommandRequest extends FileBaseCommandRequest this.ancestorChangeset = ancestorChangeset; } - public void setMergeChangeset(String mergeChangeset) { + public void setConflictBranch(String mergeChangeset) { this.mergeChangeset = mergeChangeset; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 86c2c9baab..0159beec9a 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -37,12 +37,15 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectReader; +import org.eclipse.jgit.treewalk.CanonicalTreeParser; import sonia.scm.repository.GitWorkdirFactory; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.repository.api.DiffCommandBuilder; import java.io.IOException; +import java.util.List; /** * @@ -61,7 +64,9 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { public DiffCommandBuilder.OutputStreamConsumer getDiffResult(DiffCommandRequest request) throws IOException { WorkingCopyCloser closer = new WorkingCopyCloser(); if (Strings.isNullOrEmpty(request.getMergeChangeset())) { - return computeDiff(request, open(), closer); + Differ.Diff diff = Differ.diff(open(), request); + List entries = diff.getEntries(); + return computeDiff(entries, open(), closer); } else { return inCloneWithPostponedClose(git -> new GitCloneWorker(git) { @Override @@ -77,22 +82,34 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getRevision() + " into " + request.getMergeChangeset(), e); } - DiffCommandRequest clone = request.clone(); - clone.setRevision(sourceRevision.name()); - return computeDiff(request, getClone().getRepository(), closer); + CanonicalTreeParser treeParser = new CanonicalTreeParser(); + ObjectId treeId = git.getRepository().resolve(request.getMergeChangeset() + "^{tree}"); + return outputStream -> { + try (ObjectReader reader = git.getRepository().newObjectReader()) { + treeParser.reset(reader, treeId); + git + .diff() + .setOldTree(treeParser) + .setOutputStream(outputStream) + .call(); + DiffCommandRequest clone = request.clone(); + clone.setRevision(sourceRevision.name()); + } catch (GitAPIException e) { + throw new InternalRepositoryException(repository, "could not calculate diff", e); + } + }; } }, workdirFactory, request.getMergeChangeset(), closer); } } - private DiffCommandBuilder.OutputStreamConsumer computeDiff(DiffCommandRequest request, org.eclipse.jgit.lib.Repository repository, WorkingCopyCloser closer) throws IOException { - Differ.Diff diff = Differ.diff(repository, request); + private DiffCommandBuilder.OutputStreamConsumer computeDiff(List entries, org.eclipse.jgit.lib.Repository repository, WorkingCopyCloser closer) throws IOException { return output -> { try (DiffFormatter formatter = new DiffFormatter(output)) { formatter.setRepository(repository); - for (DiffEntry e : diff.getEntries()) { + for (DiffEntry e : entries) { if (!e.getOldId().equals(e.getNewId())) { formatter.format(e); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java index 300fbee4dc..81b07816ba 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java @@ -12,7 +12,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { static final String DIFF_HEADER = "diff --git a/Main.java b/Main.java"; - static final String DIFF_FILE_A_MULTIPLE_REVISIONS = "--- a/Main.java\n" + + static final String DIFF_FILE_NO_CONFLICT = "--- a/Main.java\n" + "+++ b/Main.java\n" + "@@ -1,5 +1,5 @@\n" + " class Main {\n" + @@ -21,6 +21,22 @@ public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { " System.out.println(\"Expect nothing more to happen.\");\n" + " System.out.println(\"This is for demonstration, only.\");\n" + " }\n"; + static final String DIFF_FILE_CONFLICT = "--- a/Main.java\n" + + "+++ b/Main.java\n" + + "@@ -1,6 +1,13 @@\n" + + "+import java.util.Arrays;\n" + + "+\n" + + " class Main {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(\"Expect nothing more to happen.\");\n" + + "+<<<<<<< HEAD\n" + + " System.out.println(\"This is for demonstration, only.\");\n" + + "+=======\n" + + "+ System.out.println(\"Parameters:\");\n" + + "+ Arrays.stream(args).map(arg -> \"- \" + arg).forEach(System.out::println);\n" + + "+>>>>>>> feature/print_args\n" + + " }\n" + + " }\n"; @Rule public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); @@ -30,12 +46,12 @@ public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("feature/rename_variable"); - diffCommandRequest.setMergeChangeset("integration"); + diffCommandRequest.setConflictBranch("integration"); ByteArrayOutputStream output = new ByteArrayOutputStream(); gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertThat(output.toString()) .contains(DIFF_HEADER) - .contains(DIFF_FILE_A_MULTIPLE_REVISIONS); + .contains(DIFF_FILE_NO_CONFLICT); } @Test @@ -43,12 +59,12 @@ public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("feature/print_args"); - diffCommandRequest.setMergeChangeset("integration"); + diffCommandRequest.setConflictBranch("integration"); ByteArrayOutputStream output = new ByteArrayOutputStream(); gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertThat(output.toString()) .contains(DIFF_HEADER) - .contains(DIFF_FILE_A_MULTIPLE_REVISIONS); + .contains(DIFF_FILE_CONFLICT); } @Override From c65ac7f61d0efe912e5a3f37db160cff4baa1071 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 7 Nov 2019 16:34:14 +0100 Subject: [PATCH 03/38] Close working copy --- .../sonia/scm/repository/spi/GitDiffCommand.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 0159beec9a..246d4cfb52 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -62,12 +62,11 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { @Override public DiffCommandBuilder.OutputStreamConsumer getDiffResult(DiffCommandRequest request) throws IOException { - WorkingCopyCloser closer = new WorkingCopyCloser(); if (Strings.isNullOrEmpty(request.getMergeChangeset())) { Differ.Diff diff = Differ.diff(open(), request); - List entries = diff.getEntries(); - return computeDiff(entries, open(), closer); + return computeDiff(diff.getEntries(), open()); } else { + WorkingCopyCloser closer = new WorkingCopyCloser(); return inCloneWithPostponedClose(git -> new GitCloneWorker(git) { @Override DiffCommandBuilder.OutputStreamConsumer run() throws IOException { @@ -82,9 +81,9 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getRevision() + " into " + request.getMergeChangeset(), e); } - CanonicalTreeParser treeParser = new CanonicalTreeParser(); - ObjectId treeId = git.getRepository().resolve(request.getMergeChangeset() + "^{tree}"); return outputStream -> { + CanonicalTreeParser treeParser = new CanonicalTreeParser(); + ObjectId treeId = git.getRepository().resolve(request.getMergeChangeset() + "^{tree}"); try (ObjectReader reader = git.getRepository().newObjectReader()) { treeParser.reset(reader, treeId); git @@ -96,6 +95,8 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { clone.setRevision(sourceRevision.name()); } catch (GitAPIException e) { throw new InternalRepositoryException(repository, "could not calculate diff", e); + } finally { + closer.close(); } }; } @@ -103,7 +104,7 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { } } - private DiffCommandBuilder.OutputStreamConsumer computeDiff(List entries, org.eclipse.jgit.lib.Repository repository, WorkingCopyCloser closer) throws IOException { + private DiffCommandBuilder.OutputStreamConsumer computeDiff(List entries, org.eclipse.jgit.lib.Repository repository) throws IOException { return output -> { try (DiffFormatter formatter = new DiffFormatter(output)) { @@ -116,8 +117,6 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { } formatter.flush(); - } finally { - closer.close(); } }; } From 913e5289e611e2d2a9bb92f8156956a59b9e1c96 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 13:06:07 +0100 Subject: [PATCH 04/38] Move conflict computation to merge command Therefore revert changes to diff command and introduce new MergeConflictResult instead of streaming result. --- .../scm/repository/spi/MergeCommand.java | 2 + .../repository/spi/MergeConflictResult.java | 58 ++++++++++++ .../java/sonia/scm/repository/spi/Differ.java | 36 ++++---- .../scm/repository/spi/GitDiffCommand.java | 61 ++----------- .../scm/repository/spi/GitMergeCommand.java | 89 +++++++++++++++++++ .../spi/GitRepositoryServiceProvider.java | 2 +- .../repository/spi/GitDiffCommandTest.java | 14 ++- .../spi/GitDiffCommand_Merge_Test.java | 74 --------------- .../spi/GitMergeCommand_Conflict_Test.java | 81 +++++++++++++++++ 9 files changed, 257 insertions(+), 160 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java delete mode 100644 scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java create mode 100644 scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeCommand.java index 0a3680f6b3..a9655a157f 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/MergeCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeCommand.java @@ -7,4 +7,6 @@ public interface MergeCommand { MergeCommandResult merge(MergeCommandRequest request); MergeDryRunCommandResult dryRun(MergeCommandRequest request); + + MergeConflictResult computeConflicts(MergeCommandRequest request); } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java new file mode 100644 index 0000000000..8bf48417e8 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java @@ -0,0 +1,58 @@ +package sonia.scm.repository.spi; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.BOTH_MODIFIED; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_THEM; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_US; + +public class MergeConflictResult { + + private final List conflicts = new LinkedList<>(); + + public List getConflicts() { + return Collections.unmodifiableList(conflicts); + } + + void addBothModified(String path, String diff) { + conflicts.add(new SingleMergeConflict(BOTH_MODIFIED, path, diff)); + } + + void addDeletedByThem(String path) { + conflicts.add(new SingleMergeConflict(DELETED_BY_THEM, path, null)); + } + + void addDeletedByUs(String path) { + conflicts.add(new SingleMergeConflict(DELETED_BY_US, path, null)); + } + + public static class SingleMergeConflict { + private final ConflictTypes type; + private final String path; + private final String diff; + + private SingleMergeConflict(ConflictTypes type, String path, String diff) { + this.type = type; + this.path = path; + this.diff = diff; + } + + public ConflictTypes getType() { + return type; + } + + public String getPath() { + return path; + } + + public String getDiff() { + return diff; + } + } + + public enum ConflictTypes { + BOTH_MODIFIED, DELETED_BY_THEM, DELETED_BY_US + } +} diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java index b781176972..0204ca4e3c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java @@ -8,7 +8,6 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.EmptyTreeIterator; -import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.PathFilter; import sonia.scm.repository.GitUtil; @@ -38,17 +37,6 @@ final class Differ implements AutoCloseable { private static Differ create(Repository repository, DiffCommandRequest request) throws IOException { RevWalk walk = new RevWalk(repository); - if (!Strings.isNullOrEmpty(request.getMergeChangeset())) - { - ObjectId otherRevision = repository.resolve(request.getMergeChangeset()); - RevTree tree = walk.parseCommit(otherRevision).getTree(); - TreeWalk treeWalk = new TreeWalk(repository); - treeWalk.addTree(tree); - treeWalk.addTree(new FileTreeIterator( repository )); - return new Differ(null, walk, treeWalk); - } else { - - ObjectId revision = repository.resolve(request.getRevision()); RevCommit commit = walk.parseCommit(revision); @@ -58,32 +46,40 @@ final class Differ implements AutoCloseable { treeWalk.reset(); treeWalk.setRecursive(true); - if (Util.isNotEmpty(request.getPath())) { + if (Util.isNotEmpty(request.getPath())) + { treeWalk.setFilter(PathFilter.create(request.getPath())); } - if (!Strings.isNullOrEmpty(request.getAncestorChangeset())) { + if (!Strings.isNullOrEmpty(request.getAncestorChangeset())) + { ObjectId otherRevision = repository.resolve(request.getAncestorChangeset()); ObjectId ancestorId = GitUtil.computeCommonAncestor(repository, revision, otherRevision); RevTree tree = walk.parseCommit(ancestorId).getTree(); treeWalk.addTree(tree); - } else if (commit.getParentCount() > 0) { + } + else if (commit.getParentCount() > 0) + { RevTree tree = commit.getParent(0).getTree(); - if (tree != null) { + if (tree != null) + { treeWalk.addTree(tree); - } else { + } + else + { treeWalk.addTree(new EmptyTreeIterator()); } - } else { + } + else + { treeWalk.addTree(new EmptyTreeIterator()); } treeWalk.addTree(commit.getTree()); - return new Differ(commit, walk, treeWalk); - } + return new Differ(commit, walk, treeWalk); } private Diff diff() throws IOException { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 246d4cfb52..9e37c8b50c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -31,21 +31,12 @@ package sonia.scm.repository.spi; -import com.google.common.base.Strings; -import org.eclipse.jgit.api.MergeCommand; -import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffFormatter; -import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectReader; -import org.eclipse.jgit.treewalk.CanonicalTreeParser; -import sonia.scm.repository.GitWorkdirFactory; -import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.repository.api.DiffCommandBuilder; import java.io.IOException; -import java.util.List; /** * @@ -53,64 +44,22 @@ import java.util.List; */ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { - private final GitWorkdirFactory workdirFactory; - - GitDiffCommand(GitContext context, Repository repository, GitWorkdirFactory workdirFactory) { + GitDiffCommand(GitContext context, Repository repository) { super(context, repository); - this.workdirFactory = workdirFactory; } @Override public DiffCommandBuilder.OutputStreamConsumer getDiffResult(DiffCommandRequest request) throws IOException { - if (Strings.isNullOrEmpty(request.getMergeChangeset())) { - Differ.Diff diff = Differ.diff(open(), request); - return computeDiff(diff.getEntries(), open()); - } else { - WorkingCopyCloser closer = new WorkingCopyCloser(); - return inCloneWithPostponedClose(git -> new GitCloneWorker(git) { - @Override - DiffCommandBuilder.OutputStreamConsumer run() throws IOException { - ObjectId sourceRevision = resolveRevision(request.getRevision()); - try { - getClone().merge() - .setFastForward(MergeCommand.FastForwardMode.NO_FF) - .setCommit(false) // we want to set the author manually - .include(request.getRevision(), sourceRevision) - .call(); - } catch (GitAPIException e) { - throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getRevision() + " into " + request.getMergeChangeset(), e); - } + @SuppressWarnings("squid:S2095") // repository will be closed with the RepositoryService + org.eclipse.jgit.lib.Repository repository = open(); - return outputStream -> { - CanonicalTreeParser treeParser = new CanonicalTreeParser(); - ObjectId treeId = git.getRepository().resolve(request.getMergeChangeset() + "^{tree}"); - try (ObjectReader reader = git.getRepository().newObjectReader()) { - treeParser.reset(reader, treeId); - git - .diff() - .setOldTree(treeParser) - .setOutputStream(outputStream) - .call(); - DiffCommandRequest clone = request.clone(); - clone.setRevision(sourceRevision.name()); - } catch (GitAPIException e) { - throw new InternalRepositoryException(repository, "could not calculate diff", e); - } finally { - closer.close(); - } - }; - } - }, workdirFactory, request.getMergeChangeset(), closer); - } - } - - private DiffCommandBuilder.OutputStreamConsumer computeDiff(List entries, org.eclipse.jgit.lib.Repository repository) throws IOException { + Differ.Diff diff = Differ.diff(repository, request); return output -> { try (DiffFormatter formatter = new DiffFormatter(output)) { formatter.setRepository(repository); - for (DiffEntry e : entries) { + for (DiffEntry e : diff.getEntries()) { if (!e.getOldId().equals(e.getNewId())) { formatter.format(e); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 5643c858b5..2bedec93f0 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -4,11 +4,15 @@ import com.google.common.base.Strings; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.MergeCommand.FastForwardMode; import org.eclipse.jgit.api.MergeResult; +import org.eclipse.jgit.api.Status; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.merge.MergeStrategy; import org.eclipse.jgit.merge.ResolveMerger; +import org.eclipse.jgit.treewalk.CanonicalTreeParser; +import org.eclipse.jgit.treewalk.filter.PathFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitWorkdirFactory; @@ -17,6 +21,7 @@ import sonia.scm.repository.Person; import sonia.scm.repository.api.MergeCommandResult; import sonia.scm.repository.api.MergeDryRunCommandResult; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.text.MessageFormat; @@ -55,6 +60,12 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand } } + @Override + public MergeConflictResult computeConflicts(MergeCommandRequest request) { + WorkingCopyCloser closer = new WorkingCopyCloser(); + return inClone(git -> new ConflictWorker(git, request, closer), workdirFactory, request.getTargetBranch()); + } + private class MergeWorker extends GitCloneWorker { private final String target; @@ -115,4 +126,82 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand return MergeCommandResult.failure(result.getConflicts().keySet()); } } + + private class ConflictWorker extends GitCloneWorker { + private final Git git; + private final MergeCommandRequest request; + private final WorkingCopyCloser closer; + + private ConflictWorker(Git git, MergeCommandRequest request, WorkingCopyCloser closer) { + super(git); + this.git = git; + this.request = request; + this.closer = closer; + } + + @Override + MergeConflictResult run() throws IOException { + ObjectId sourceRevision = resolveRevision(request.getBranchToMerge()); + MergeResult mergeResult; + try { + mergeResult = getClone().merge() + .setFastForward(FastForwardMode.NO_FF) + .setCommit(false) + .include(request.getBranchToMerge(), sourceRevision) + .call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e); + } + + if (mergeResult.getConflicts() == null) { + return new MergeConflictResult(); + } + Status status; + try { + status = getClone().status().call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not get status", e); + } + + MergeConflictResult result = new MergeConflictResult(); + + CanonicalTreeParser treeParser = new CanonicalTreeParser(); + ObjectId treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); + + ByteArrayOutputStream diffBuffer = new ByteArrayOutputStream(); + + status.getConflictingStageState().entrySet().forEach(conflictEntry -> { + + String path = conflictEntry.getKey(); + switch (conflictEntry.getValue()) { + case BOTH_MODIFIED: + diffBuffer.reset(); + try (ObjectReader reader = git.getRepository().newObjectReader()) { + treeParser.reset(reader, treeId); + git + .diff() + .setOldTree(treeParser) + .setPathFilter(PathFilter.create(path)) + .setOutputStream(diffBuffer) + .call(); + result.addBothModified(path, diffBuffer.toString()); + } catch (GitAPIException | IOException e) { + throw new InternalRepositoryException(repository, "could not calculate diff for path " + path, e); + } finally { + closer.close(); + } + break; + case DELETED_BY_THEM: + result.addDeletedByThem(path); + break; + case DELETED_BY_US: + result.addDeletedByUs(path); + break; + default: + throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + conflictEntry.getValue()); + } + }); + return result; + } + } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java index 2778fecf1d..dc43b8d9b7 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java @@ -169,7 +169,7 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider @Override public DiffCommand getDiffCommand() { - return new GitDiffCommand(context, repository, handler.getWorkdirFactory()); + return new GitDiffCommand(context, repository); } @Override diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java index 854a217f1c..52932e83ae 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java @@ -40,7 +40,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForOneRevisionShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = createDiffCommand(); + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4"); ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -50,7 +50,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForOneBranchShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = createDiffCommand(); + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("test-branch"); ByteArrayOutputStream output = new ByteArrayOutputStream(); @@ -60,7 +60,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffForPathShouldCreateLimitedDiff() throws IOException { - GitDiffCommand gitDiffCommand = createDiffCommand(); + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("test-branch"); diffCommandRequest.setPath("a.txt"); @@ -71,7 +71,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffBetweenTwoBranchesShouldCreateDiff() throws IOException { - GitDiffCommand gitDiffCommand = createDiffCommand(); + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("master"); diffCommandRequest.setAncestorChangeset("test-branch"); @@ -82,7 +82,7 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { @Test public void diffBetweenTwoBranchesForPathShouldCreateLimitedDiff() throws IOException { - GitDiffCommand gitDiffCommand = createDiffCommand(); + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); diffCommandRequest.setRevision("master"); diffCommandRequest.setAncestorChangeset("test-branch"); @@ -91,8 +91,4 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertEquals(DIFF_FILE_A_MULTIPLE_REVISIONS, output.toString()); } - - private GitDiffCommand createDiffCommand() { - return new GitDiffCommand(createContext(), repository, null); - } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java deleted file mode 100644 index 81b07816ba..0000000000 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommand_Merge_Test.java +++ /dev/null @@ -1,74 +0,0 @@ -package sonia.scm.repository.spi; - -import org.junit.Rule; -import org.junit.Test; -import sonia.scm.repository.util.WorkdirProvider; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import static org.assertj.core.api.Assertions.assertThat; - -public class GitDiffCommand_Merge_Test extends AbstractGitCommandTestBase { - - static final String DIFF_HEADER = "diff --git a/Main.java b/Main.java"; - static final String DIFF_FILE_NO_CONFLICT = "--- a/Main.java\n" + - "+++ b/Main.java\n" + - "@@ -1,5 +1,5 @@\n" + - " class Main {\n" + - "- public static void main(String[] args) {\n" + - "+ public static void main(String[] arguments) {\n" + - " System.out.println(\"Expect nothing more to happen.\");\n" + - " System.out.println(\"This is for demonstration, only.\");\n" + - " }\n"; - static final String DIFF_FILE_CONFLICT = "--- a/Main.java\n" + - "+++ b/Main.java\n" + - "@@ -1,6 +1,13 @@\n" + - "+import java.util.Arrays;\n" + - "+\n" + - " class Main {\n" + - " public static void main(String[] args) {\n" + - " System.out.println(\"Expect nothing more to happen.\");\n" + - "+<<<<<<< HEAD\n" + - " System.out.println(\"This is for demonstration, only.\");\n" + - "+=======\n" + - "+ System.out.println(\"Parameters:\");\n" + - "+ Arrays.stream(args).map(arg -> \"- \" + arg).forEach(System.out::println);\n" + - "+>>>>>>> feature/print_args\n" + - " }\n" + - " }\n"; - - @Rule - public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); - - @Test - public void diffBetweenTwoBranchesWithoutConflict() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); - DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); - diffCommandRequest.setRevision("feature/rename_variable"); - diffCommandRequest.setConflictBranch("integration"); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); - assertThat(output.toString()) - .contains(DIFF_HEADER) - .contains(DIFF_FILE_NO_CONFLICT); - } - - @Test - public void diffBetweenTwoBranchesWithSimpleConflict() throws IOException { - GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); - DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); - diffCommandRequest.setRevision("feature/print_args"); - diffCommandRequest.setConflictBranch("integration"); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); - assertThat(output.toString()) - .contains(DIFF_HEADER) - .contains(DIFF_FILE_CONFLICT); - } - - @Override - protected String getZippedRepositoryResource() { - return "sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip"; - } -} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java new file mode 100644 index 0000000000..18a3fa0538 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java @@ -0,0 +1,81 @@ +package sonia.scm.repository.spi; + +import org.junit.Rule; +import org.junit.Test; +import sonia.scm.repository.spi.MergeConflictResult.SingleMergeConflict; +import sonia.scm.repository.util.WorkdirProvider; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.BOTH_MODIFIED; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_THEM; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_US; + +public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase { + + static final String DIFF_HEADER = "diff --git a/Main.java b/Main.java"; + static final String DIFF_FILE_CONFLICT = "--- a/Main.java\n" + + "+++ b/Main.java\n" + + "@@ -1,6 +1,13 @@\n" + + "+import java.util.Arrays;\n" + + "+\n" + + " class Main {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(\"Expect nothing more to happen.\");\n" + + "+<<<<<<< HEAD\n" + + " System.out.println(\"This is for demonstration, only.\");\n" + + "+=======\n" + + "+ System.out.println(\"Parameters:\");\n" + + "+ Arrays.stream(args).map(arg -> \"- \" + arg).forEach(System.out::println);\n" + + "+>>>>>>> feature/print_args\n" + + " }\n" + + " }\n"; + + @Rule + public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); + + @Test + public void diffBetweenTwoBranchesWithoutConflict() throws IOException { + MergeConflictResult result = computeMergeConflictResult("feature/rename_variable", "integration"); + assertThat(result.getConflicts()).isEmpty(); + } + + @Test + public void diffBetweenTwoBranchesWithSimpleConflict() throws IOException { + MergeConflictResult result = computeMergeConflictResult("feature/print_args", "integration"); + SingleMergeConflict conflict = result.getConflicts().get(0); + assertThat(conflict.getType()).isEqualTo(BOTH_MODIFIED); + assertThat(conflict.getPath()).isEqualTo("Main.java"); + assertThat(conflict.getDiff()).contains(DIFF_HEADER, DIFF_FILE_CONFLICT); + } + + @Test + public void diffBetweenTwoBranchesWithDeletedByThem() throws IOException { + MergeConflictResult result = computeMergeConflictResult("feature/remove_class", "integration"); + SingleMergeConflict conflict = result.getConflicts().get(0); + assertThat(conflict.getType()).isEqualTo(DELETED_BY_THEM); + assertThat(conflict.getPath()).isEqualTo("Main.java"); + } + + @Test + public void diffBetweenTwoBranchesWithDeletedByUs() throws IOException { + MergeConflictResult result = computeMergeConflictResult("integration", "feature/remove_class"); + SingleMergeConflict conflict = result.getConflicts().get(0); + assertThat(conflict.getType()).isEqualTo(DELETED_BY_US); + assertThat(conflict.getPath()).isEqualTo("Main.java"); + } + + private MergeConflictResult computeMergeConflictResult(String branchToMerge, String targetBranch) { + GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), repository, new SimpleGitWorkdirFactory(new WorkdirProvider())); + MergeCommandRequest mergeCommandRequest = new MergeCommandRequest(); + mergeCommandRequest.setBranchToMerge(branchToMerge); + mergeCommandRequest.setTargetBranch(targetBranch); + return gitMergeCommand.computeConflicts(mergeCommandRequest); + } + + @Override + protected String getZippedRepositoryResource() { + return "sonia/scm/repository/spi/scm-git-spi-merge-diff-test.zip"; + } +} From 0f0e7437fd610db2e44900a46ff94d3573ca0365 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 13:08:40 +0100 Subject: [PATCH 05/38] Revert changes to diff command components --- .../repository/spi/DiffCommandRequest.java | 22 ++++--------------- .../scm/repository/spi/GitDiffCommand.java | 1 + 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java index 3e62a8eebe..7321718581 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommandRequest.java @@ -90,10 +90,8 @@ public final class DiffCommandRequest extends FileBaseCommandRequest @Override public boolean isValid() { - return (!Strings.isNullOrEmpty(getPath()) - ||!Strings.isNullOrEmpty(getRevision())) - && (Strings.isNullOrEmpty(getAncestorChangeset()) - || Strings.isNullOrEmpty(getMergeChangeset())); + return !Strings.isNullOrEmpty(getPath()) + ||!Strings.isNullOrEmpty(getRevision()); } //~--- set methods ---------------------------------------------------------- @@ -114,12 +112,7 @@ public final class DiffCommandRequest extends FileBaseCommandRequest public void setAncestorChangeset(String ancestorChangeset) { this.ancestorChangeset = ancestorChangeset; } - - public void setConflictBranch(String mergeChangeset) { - this.mergeChangeset = mergeChangeset; - } - - //~--- get methods ---------------------------------------------------------- +//~--- get methods ---------------------------------------------------------- /** * Return the output format of the diff command. @@ -137,17 +130,10 @@ public final class DiffCommandRequest extends FileBaseCommandRequest public String getAncestorChangeset() { return ancestorChangeset; } - - public String getMergeChangeset() { - return mergeChangeset; - } - - //~--- fields --------------------------------------------------------------- +//~--- fields --------------------------------------------------------------- /** diff format */ private DiffFormat format = DiffFormat.NATIVE; private String ancestorChangeset; - - private String mergeChangeset; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 9e37c8b50c..1ac64c1b5e 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -69,4 +69,5 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand { } }; } + } From 21d930cbbe534cac90e708d3edc98b3e8357ec7b Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 13:24:47 +0100 Subject: [PATCH 06/38] Revert changes to abstract class --- .../repository/spi/AbstractGitCommand.java | 26 -------- .../scm/repository/spi/GitMergeCommand.java | 65 +++++++++++-------- 2 files changed, 38 insertions(+), 53 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java index 406c6849f2..adf7878221 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java @@ -151,32 +151,6 @@ class AbstractGitCommand } } - > R inCloneWithPostponedClose(Function workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch, WorkingCopyCloser closer) { - try { - WorkingCopy workingCopy = workdirFactory.createWorkingCopy(context, initialBranch); - closer.setWorkingCopy(workingCopy); - Repository repository = workingCopy.getWorkingRepository(); - logger.debug("cloned repository to folder {}", repository.getWorkTree()); - return workerSupplier.apply(new Git(repository)).run(); - } catch (IOException e) { - throw new InternalRepositoryException(context.getRepository(), "could not clone repository", e); - } - } - - static class WorkingCopyCloser { - private WorkingCopy workingCopy; - - private void setWorkingCopy(WorkingCopy workingCopy) { - this.workingCopy = workingCopy; - } - - public void close() { - if (workingCopy != null) { - workingCopy.close(); - } - } - } - ObjectId resolveRevisionOrThrowNotFound(Repository repository, String revision) throws IOException { sonia.scm.repository.Repository scmRepository = context.getRepository(); return resolveRevisionOrThrowNotFound(repository, revision, scmRepository); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 4d6878d130..9f299c65f0 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -94,49 +94,35 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand private final Git git; private final MergeCommandRequest request; private final WorkingCopyCloser closer; + private final CanonicalTreeParser treeParser; + private final ObjectId treeId; + private final ByteArrayOutputStream diffBuffer; private ConflictWorker(Git git, MergeCommandRequest request, WorkingCopyCloser closer) { super(git, context, repository); this.git = git; this.request = request; this.closer = closer; + + treeParser = new CanonicalTreeParser(); + treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); + diffBuffer = new ByteArrayOutputStream(); } @Override MergeConflictResult run() throws IOException { - ObjectId sourceRevision = resolveRevision(request.getBranchToMerge()); - MergeResult mergeResult; - try { - mergeResult = getClone().merge() - .setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF) - .setCommit(false) - .include(request.getBranchToMerge(), sourceRevision) - .call(); - } catch (GitAPIException e) { - throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e); - } - + MergeResult mergeResult = doTemporaryMerge(); if (mergeResult.getConflicts() == null) { return new MergeConflictResult(); } - Status status; - try { - status = getClone().status().call(); - } catch (GitAPIException e) { - throw new InternalRepositoryException(context.getRepository(), "could not get status", e); - } + + Status status = getStatus(); MergeConflictResult result = new MergeConflictResult(); - CanonicalTreeParser treeParser = new CanonicalTreeParser(); - ObjectId treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); - ByteArrayOutputStream diffBuffer = new ByteArrayOutputStream(); - - status.getConflictingStageState().entrySet().forEach(conflictEntry -> { - - String path = conflictEntry.getKey(); - switch (conflictEntry.getValue()) { + status.getConflictingStageState().forEach((path, value) -> { + switch (value) { case BOTH_MODIFIED: diffBuffer.reset(); try (ObjectReader reader = git.getRepository().newObjectReader()) { @@ -161,10 +147,35 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand result.addDeletedByUs(path); break; default: - throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + conflictEntry.getValue()); + throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + value); } }); return result; } + + private Status getStatus() { + Status status; + try { + status = getClone().status().call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not get status", e); + } + return status; + } + + private MergeResult doTemporaryMerge() throws IOException { + ObjectId sourceRevision = resolveRevision(request.getBranchToMerge()); + MergeResult mergeResult; + try { + mergeResult = getClone().merge() + .setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF) + .setCommit(false) + .include(request.getBranchToMerge(), sourceRevision) + .call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e); + } + return mergeResult; + } } } From 5cff9f8c16a5a14f7c0346fa51a47425b7444405 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 13:35:13 +0100 Subject: [PATCH 07/38] Cleanup worker --- .../scm/repository/spi/GitMergeCommand.java | 122 +++++++++--------- 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 9f299c65f0..6a4335346a 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -5,6 +5,7 @@ import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.MergeResult; import org.eclipse.jgit.api.Status; import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.IndexDiff; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; @@ -23,6 +24,8 @@ import java.io.IOException; import java.util.Set; import static org.eclipse.jgit.merge.MergeStrategy.RECURSIVE; +import static sonia.scm.ContextEntry.ContextBuilder.entity; +import static sonia.scm.NotFoundException.notFound; public class GitMergeCommand extends AbstractGitCommand implements MergeCommand { @@ -46,8 +49,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand @Override public MergeConflictResult computeConflicts(MergeCommandRequest request) { - WorkingCopyCloser closer = new WorkingCopyCloser(); - return inClone(git -> new ConflictWorker(git, request, closer), workdirFactory, request.getTargetBranch()); + return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getTargetBranch()); } private MergeCommandResult mergeWithStrategy(MergeCommandRequest request) { @@ -91,68 +93,79 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand } private class ConflictWorker extends GitCloneWorker { - private final Git git; - private final MergeCommandRequest request; - private final WorkingCopyCloser closer; + private final String branchToMerge; + private final String targetBranch; private final CanonicalTreeParser treeParser; private final ObjectId treeId; private final ByteArrayOutputStream diffBuffer; - private ConflictWorker(Git git, MergeCommandRequest request, WorkingCopyCloser closer) { + private final MergeConflictResult result = new MergeConflictResult(); + + + private ConflictWorker(Git git, MergeCommandRequest request) { super(git, context, repository); - this.git = git; - this.request = request; - this.closer = closer; + branchToMerge = request.getBranchToMerge(); + targetBranch = request.getTargetBranch(); treeParser = new CanonicalTreeParser(); - treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); diffBuffer = new ByteArrayOutputStream(); + try { + treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); + } catch (IOException e) { + throw notFound(entity("branch", request.getTargetBranch()).in(repository)); + } } @Override MergeConflictResult run() throws IOException { MergeResult mergeResult = doTemporaryMerge(); - if (mergeResult.getConflicts() == null) { - return new MergeConflictResult(); + if (mergeResult.getConflicts() != null) { + getStatus().getConflictingStageState().forEach(this::computeConflict); } - - Status status = getStatus(); - - MergeConflictResult result = new MergeConflictResult(); - - - status.getConflictingStageState().forEach((path, value) -> { - switch (value) { - case BOTH_MODIFIED: - diffBuffer.reset(); - try (ObjectReader reader = git.getRepository().newObjectReader()) { - treeParser.reset(reader, treeId); - git - .diff() - .setOldTree(treeParser) - .setPathFilter(PathFilter.create(path)) - .setOutputStream(diffBuffer) - .call(); - result.addBothModified(path, diffBuffer.toString()); - } catch (GitAPIException | IOException e) { - throw new InternalRepositoryException(repository, "could not calculate diff for path " + path, e); - } finally { - closer.close(); - } - break; - case DELETED_BY_THEM: - result.addDeletedByThem(path); - break; - case DELETED_BY_US: - result.addDeletedByUs(path); - break; - default: - throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + value); - } - }); return result; } + private void computeConflict(String path, IndexDiff.StageState stageState) { + switch (stageState) { + case BOTH_MODIFIED: + diffBuffer.reset(); + try (ObjectReader reader = getClone().getRepository().newObjectReader()) { + treeParser.reset(reader, treeId); + getClone() + .diff() + .setOldTree(treeParser) + .setPathFilter(PathFilter.create(path)) + .setOutputStream(diffBuffer) + .call(); + result.addBothModified(path, diffBuffer.toString()); + } catch (GitAPIException | IOException e) { + throw new InternalRepositoryException(repository, "could not calculate diff for path " + path, e); + } + break; + case DELETED_BY_THEM: + result.addDeletedByThem(path); + break; + case DELETED_BY_US: + result.addDeletedByUs(path); + break; + default: + throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + stageState); + } + } + + private MergeResult doTemporaryMerge() throws IOException { + ObjectId sourceRevision = resolveRevision(branchToMerge); + try { + return getClone().merge() + .setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF) + .setCommit(false) + .include(branchToMerge, sourceRevision) + .call(); + } catch (GitAPIException e) { + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + branchToMerge + " into " + targetBranch, e); + } + } + private Status getStatus() { Status status; try { @@ -162,20 +175,5 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand } return status; } - - private MergeResult doTemporaryMerge() throws IOException { - ObjectId sourceRevision = resolveRevision(request.getBranchToMerge()); - MergeResult mergeResult; - try { - mergeResult = getClone().merge() - .setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF) - .setCommit(false) - .include(request.getBranchToMerge(), sourceRevision) - .call(); - } catch (GitAPIException e) { - throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + request.getBranchToMerge() + " into " + request.getTargetBranch(), e); - } - return mergeResult; - } } } From 3be74fbed69f4a086235c0c612738216f68a1927 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 14:01:03 +0100 Subject: [PATCH 08/38] Add api call for conflicts --- .../scm/repository/api/MergeCommandBuilder.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java index 6c4324c259..5bf93168a2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java @@ -4,6 +4,7 @@ import com.google.common.base.Preconditions; import sonia.scm.repository.Person; import sonia.scm.repository.spi.MergeCommand; import sonia.scm.repository.spi.MergeCommandRequest; +import sonia.scm.repository.spi.MergeConflictResult; import sonia.scm.repository.util.AuthorUtil; import java.util.Set; @@ -168,7 +169,7 @@ public class MergeCommandBuilder { } /** - * Use this to check whether the given branches can be merged autmatically. If this is possible, + * Use this to check whether the given branches can be merged automatically. If this is possible, * {@link MergeDryRunCommandResult#isMergeable()} will return true. * * @return The result whether the given branches can be merged automatically. @@ -177,4 +178,14 @@ public class MergeCommandBuilder { Preconditions.checkArgument(request.isValid(), "revision to merge and target revision is required"); return mergeCommand.dryRun(request); } + + /** + * Use this to compute concrete conflicts for a merge. + * + * @return A result containing all conflicts for the merge. + */ + public MergeConflictResult conflicts() { + Preconditions.checkArgument(request.isValid(), "revision to merge and target revision is required"); + return mergeCommand.computeConflicts(request); + } } From cc7ef4715379f31dd242edd3d76ea8e1e5f2bb1f Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 16:15:45 +0100 Subject: [PATCH 09/38] Fix access across jars --- .../java/sonia/scm/repository/spi/MergeConflictResult.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java index 8bf48417e8..981a5c5446 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java @@ -16,15 +16,15 @@ public class MergeConflictResult { return Collections.unmodifiableList(conflicts); } - void addBothModified(String path, String diff) { + public void addBothModified(String path, String diff) { conflicts.add(new SingleMergeConflict(BOTH_MODIFIED, path, diff)); } - void addDeletedByThem(String path) { + public void addDeletedByThem(String path) { conflicts.add(new SingleMergeConflict(DELETED_BY_THEM, path, null)); } - void addDeletedByUs(String path) { + public void addDeletedByUs(String path) { conflicts.add(new SingleMergeConflict(DELETED_BY_US, path, null)); } From 6b9aabd3ff11909ccfa195d72de7a11d5cf53d84 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Mon, 11 Nov 2019 16:15:59 +0100 Subject: [PATCH 10/38] Fix merge direction --- .../scm/repository/spi/GitMergeCommand.java | 20 ++++++++--------- .../spi/GitMergeCommand_Conflict_Test.java | 22 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 6a4335346a..505594ba8b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -49,7 +49,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand @Override public MergeConflictResult computeConflicts(MergeCommandRequest request) { - return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getTargetBranch()); + return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getBranchToMerge()); } private MergeCommandResult mergeWithStrategy(MergeCommandRequest request) { @@ -93,8 +93,8 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand } private class ConflictWorker extends GitCloneWorker { - private final String branchToMerge; - private final String targetBranch; + private final String theirs; + private final String ours; private final CanonicalTreeParser treeParser; private final ObjectId treeId; private final ByteArrayOutputStream diffBuffer; @@ -104,15 +104,15 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand private ConflictWorker(Git git, MergeCommandRequest request) { super(git, context, repository); - branchToMerge = request.getBranchToMerge(); - targetBranch = request.getTargetBranch(); + theirs = request.getTargetBranch(); + ours = request.getBranchToMerge(); treeParser = new CanonicalTreeParser(); diffBuffer = new ByteArrayOutputStream(); try { - treeId = git.getRepository().resolve(request.getTargetBranch() + "^{tree}"); + treeId = git.getRepository().resolve(ours + "^{tree}"); } catch (IOException e) { - throw notFound(entity("branch", request.getTargetBranch()).in(repository)); + throw notFound(entity("branch", ours).in(repository)); } } @@ -154,15 +154,15 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand } private MergeResult doTemporaryMerge() throws IOException { - ObjectId sourceRevision = resolveRevision(branchToMerge); + ObjectId sourceRevision = resolveRevision(theirs); try { return getClone().merge() .setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF) .setCommit(false) - .include(branchToMerge, sourceRevision) + .include(theirs, sourceRevision) .call(); } catch (GitAPIException e) { - throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + branchToMerge + " into " + targetBranch, e); + throw new InternalRepositoryException(context.getRepository(), "could not merge branch " + theirs + " into " + ours, e); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java index 18a3fa0538..faaa553202 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java @@ -17,20 +17,18 @@ public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase { static final String DIFF_HEADER = "diff --git a/Main.java b/Main.java"; static final String DIFF_FILE_CONFLICT = "--- a/Main.java\n" + "+++ b/Main.java\n" + - "@@ -1,6 +1,13 @@\n" + - "+import java.util.Arrays;\n" + - "+\n" + + "@@ -3,7 +3,11 @@\n" + " class Main {\n" + " public static void main(String[] args) {\n" + " System.out.println(\"Expect nothing more to happen.\");\n" + "+<<<<<<< HEAD\n" + - " System.out.println(\"This is for demonstration, only.\");\n" + + " System.out.println(\"Parameters:\");\n" + + " Arrays.stream(args).map(arg -> \"- \" + arg).forEach(System.out::println);\n" + "+=======\n" + - "+ System.out.println(\"Parameters:\");\n" + - "+ Arrays.stream(args).map(arg -> \"- \" + arg).forEach(System.out::println);\n" + - "+>>>>>>> feature/print_args\n" + + "+ System.out.println(\"This is for demonstration, only.\");\n" + + "+>>>>>>> integration\n" + " }\n" + - " }\n"; + " }"; @Rule public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); @@ -51,18 +49,18 @@ public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase { } @Test - public void diffBetweenTwoBranchesWithDeletedByThem() throws IOException { + public void diffBetweenTwoBranchesWithDeletedByUs() throws IOException { MergeConflictResult result = computeMergeConflictResult("feature/remove_class", "integration"); SingleMergeConflict conflict = result.getConflicts().get(0); - assertThat(conflict.getType()).isEqualTo(DELETED_BY_THEM); + assertThat(conflict.getType()).isEqualTo(DELETED_BY_US); assertThat(conflict.getPath()).isEqualTo("Main.java"); } @Test - public void diffBetweenTwoBranchesWithDeletedByUs() throws IOException { + public void diffBetweenTwoBranchesWithDeletedByThem() throws IOException { MergeConflictResult result = computeMergeConflictResult("integration", "feature/remove_class"); SingleMergeConflict conflict = result.getConflicts().get(0); - assertThat(conflict.getType()).isEqualTo(DELETED_BY_US); + assertThat(conflict.getType()).isEqualTo(DELETED_BY_THEM); assertThat(conflict.getPath()).isEqualTo("Main.java"); } From ff1abf2c1c5e4a939c96a96dc294b03fe34bab60 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 14 Nov 2019 15:07:49 +0100 Subject: [PATCH 11/38] Add conflict type --- .../java/sonia/scm/repository/spi/MergeConflictResult.java | 7 ++++++- .../java/sonia/scm/repository/spi/GitMergeCommand.java | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java index 981a5c5446..206cf7e7dc 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeConflictResult.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; +import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.ADDED_BY_BOTH; import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.BOTH_MODIFIED; import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_THEM; import static sonia.scm.repository.spi.MergeConflictResult.ConflictTypes.DELETED_BY_US; @@ -28,6 +29,10 @@ public class MergeConflictResult { conflicts.add(new SingleMergeConflict(DELETED_BY_US, path, null)); } + public void addAddedByBoth(String path) { + conflicts.add(new SingleMergeConflict(ADDED_BY_BOTH, path, null)); + } + public static class SingleMergeConflict { private final ConflictTypes type; private final String path; @@ -53,6 +58,6 @@ public class MergeConflictResult { } public enum ConflictTypes { - BOTH_MODIFIED, DELETED_BY_THEM, DELETED_BY_US + BOTH_MODIFIED, DELETED_BY_THEM, DELETED_BY_US, ADDED_BY_BOTH } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 505594ba8b..367cd1db4d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -142,6 +142,9 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand throw new InternalRepositoryException(repository, "could not calculate diff for path " + path, e); } break; + case BOTH_ADDED: + result.addAddedByBoth(path); + break; case DELETED_BY_THEM: result.addDeletedByThem(path); break; From ecec0764f8b72fcfb2242bea5162b366b2168121 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Fri, 15 Nov 2019 09:31:08 +0100 Subject: [PATCH 12/38] Invert merge to get proper file diff --- .../java/sonia/scm/repository/spi/GitMergeCommand.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 367cd1db4d..69eb8b0748 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -49,7 +49,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand @Override public MergeConflictResult computeConflicts(MergeCommandRequest request) { - return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getBranchToMerge()); + return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getTargetBranch()); } private MergeCommandResult mergeWithStrategy(MergeCommandRequest request) { @@ -104,8 +104,8 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand private ConflictWorker(Git git, MergeCommandRequest request) { super(git, context, repository); - theirs = request.getTargetBranch(); - ours = request.getBranchToMerge(); + theirs = request.getBranchToMerge(); + ours = request.getTargetBranch(); treeParser = new CanonicalTreeParser(); diffBuffer = new ByteArrayOutputStream(); @@ -146,10 +146,10 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand result.addAddedByBoth(path); break; case DELETED_BY_THEM: - result.addDeletedByThem(path); + result.addDeletedByUs(path); break; case DELETED_BY_US: - result.addDeletedByUs(path); + result.addDeletedByThem(path); break; default: throw new InternalRepositoryException(context.getRepository(), "unexpected conflict type: " + stageState); From 8410aa68c60bb4aa27d7809b13fcbd7055cbdeae Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Dec 2019 09:51:44 +0100 Subject: [PATCH 13/38] added storybook stories for diff --- scm-ui/ui-components/.storybook/config.js | 5 + .../src/MarkdownView.stories.tsx | 2 - .../src/__resources__/Diff.simple.ts | 148 ++++++++++++++++++ .../src/buttons/index.stories.tsx | 11 +- .../ui-components/src/repos/Diff.stories.tsx | 47 ++++++ scm-ui/ui-components/src/repos/DiffFile.tsx | 4 +- scm-ui/ui-components/src/repos/DiffTypes.ts | 2 +- 7 files changed, 205 insertions(+), 14 deletions(-) create mode 100644 scm-ui/ui-components/src/__resources__/Diff.simple.ts create mode 100644 scm-ui/ui-components/src/repos/Diff.stories.tsx diff --git a/scm-ui/ui-components/.storybook/config.js b/scm-ui/ui-components/.storybook/config.js index 5b9ed3d3a2..1033a7a805 100644 --- a/scm-ui/ui-components/.storybook/config.js +++ b/scm-ui/ui-components/.storybook/config.js @@ -4,6 +4,8 @@ import { addDecorator, configure } from "@storybook/react"; import { withI18next } from "storybook-addon-i18next"; import "!style-loader!css-loader!sass-loader!../../ui-styles/src/scm.scss"; +import React, { ReactNode } from "react"; +import { MemoryRouter } from "react-router-dom"; i18n.use(initReactI18next).init({ whitelist: ["en", "de", "es"], @@ -28,4 +30,7 @@ addDecorator( }) ); +const RoutingDecorator = (story) => {story()}; +addDecorator(RoutingDecorator); + configure(require.context("../src", true, /\.stories\.tsx?$/), module); diff --git a/scm-ui/ui-components/src/MarkdownView.stories.tsx b/scm-ui/ui-components/src/MarkdownView.stories.tsx index a7e71aac2b..22a478f1b2 100644 --- a/scm-ui/ui-components/src/MarkdownView.stories.tsx +++ b/scm-ui/ui-components/src/MarkdownView.stories.tsx @@ -2,7 +2,6 @@ import React from "react"; import { storiesOf } from "@storybook/react"; import MarkdownView from "./MarkdownView"; import styled from "styled-components"; -import { MemoryRouter } from "react-router-dom"; import TestPage from "./__resources__/test-page.md"; import MarkdownWithoutLang from "./__resources__/markdown-without-lang.md"; @@ -12,7 +11,6 @@ const Spacing = styled.div` `; storiesOf("MarkdownView", module) - .addDecorator(story => {story()}) .add("Default", () => ( diff --git a/scm-ui/ui-components/src/__resources__/Diff.simple.ts b/scm-ui/ui-components/src/__resources__/Diff.simple.ts new file mode 100644 index 0000000000..a08aa7cdb0 --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Diff.simple.ts @@ -0,0 +1,148 @@ +export default `diff --git a/src/main/java/com/cloudogu/scm/review/events/EventListener.java b/src/main/java/com/cloudogu/scm/review/events/EventListener.java +index f889f9c..95e3b10 100644 +--- a/src/main/java/com/cloudogu/scm/review/events/EventListener.java ++++ b/src/main/java/com/cloudogu/scm/review/events/EventListener.java +@@ -1,20 +1,12 @@ + package com.cloudogu.scm.review.events; + +-import com.cloudogu.scm.review.comment.service.BasicComment; +-import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +-import com.cloudogu.scm.review.comment.service.CommentEvent; +-import com.cloudogu.scm.review.comment.service.ReplyEvent; + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +-import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + import com.github.legman.Subscribe; +-import lombok.Data; + import org.apache.shiro.SecurityUtils; + import org.apache.shiro.subject.PrincipalCollection; + import org.apache.shiro.subject.Subject; + import sonia.scm.EagerSingleton; +-import sonia.scm.HandlerEventType; +-import sonia.scm.event.HandlerEvent; + import sonia.scm.plugin.Extension; + import sonia.scm.repository.Repository; + import sonia.scm.security.SessionId; +diff --git a/src/main/js/ChangeNotification.tsx b/src/main/js/ChangeNotification.tsx +index f6d61a9..5f371e4 100644 +--- a/src/main/js/ChangeNotification.tsx ++++ b/src/main/js/ChangeNotification.tsx +@@ -2,6 +2,7 @@ import React, { FC, useEffect, useState } from "react"; + import { Link } from "@scm-manager/ui-types"; + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + import { PullRequest } from "./types/PullRequest"; ++import { useTranslation } from "react-i18next"; + + type HandlerProps = { + url: string; +@@ -15,14 +16,19 @@ const EventNotificationHandler: FC = ({ url, reload }) => { + pullRequest: setEvent + }); + }, [url]); ++ const { t } = useTranslation("plugins"); + if (event) { + return ( +- +-

The underlying Pull-Request has changed. Press reload to see the changes.

+-

Warning: Non saved modification will be lost.

++ ++

{t("scm-review-plugin.changeNotification.description")}

++

{t("scm-review-plugin.changeNotification.modificationWarning")}

+ +- Reload +- setEvent(undefined)}>Ignore ++ ++ {t("scm-review-plugin.changeNotification.buttons.reload")} ++ ++ setEvent(undefined)}> ++ {t("scm-review-plugin.changeNotification.buttons.ignore")} ++ + +
+ ); +diff --git a/src/main/resources/locales/de/plugins.json b/src/main/resources/locales/de/plugins.json +index 80f84a1..2c63ab3 100644 +--- a/src/main/resources/locales/de/plugins.json ++++ b/src/main/resources/locales/de/plugins.json +@@ -181,6 +181,15 @@ + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + } + } ++ }, ++ "changeNotification": { ++ "title": "Neue Änderungen", ++ "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", ++ "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", ++ "buttons": { ++ "reload": "Neu laden", ++ "ignore": "Ignorieren" ++ } + } + }, + "permissions": { +diff --git a/src/main/resources/locales/en/plugins.json b/src/main/resources/locales/en/plugins.json +index d020fcd..e3c1630 100644 +--- a/src/main/resources/locales/en/plugins.json ++++ b/src/main/resources/locales/en/plugins.json +@@ -181,6 +181,15 @@ + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + } + } ++ }, ++ "changeNotification": { ++ "title": "New Changes", ++ "description": "The underlying Pull-Request has changed. Press reload to see the changes.", ++ "modificationWarning": "Warning: Non saved modification will be lost.", ++ "buttons": { ++ "reload": "Reload", ++ "ignore": "Ignore" ++ } + } + }, + "permissions": { +diff --git a/src/test/java/com/cloudogu/scm/review/events/ClientTest.java b/src/test/java/com/cloudogu/scm/review/events/ClientTest.java +index 889cc49..d5a4811 100644 +--- a/src/test/java/com/cloudogu/scm/review/events/ClientTest.java ++++ b/src/test/java/com/cloudogu/scm/review/events/ClientTest.java +@@ -7,19 +7,16 @@ import org.mockito.Answers; + import org.mockito.Mock; + import org.mockito.junit.jupiter.MockitoExtension; + import sonia.scm.security.SessionId; ++ + import javax.ws.rs.sse.OutboundSseEvent; + import javax.ws.rs.sse.SseEventSink; +- + import java.time.Clock; + import java.time.Instant; + import java.time.LocalDateTime; + import java.time.ZoneOffset; + import java.time.temporal.ChronoField; +-import java.time.temporal.ChronoUnit; +-import java.time.temporal.TemporalField; + import java.util.concurrent.CompletableFuture; + import java.util.concurrent.CompletionStage; +-import java.util.concurrent.atomic.AtomicLong; + import java.util.concurrent.atomic.AtomicReference; + + import static java.time.temporal.ChronoUnit.MINUTES; +@@ -83,7 +80,7 @@ class ClientTest { + + @Test + @SuppressWarnings("unchecked") +- void shouldCloseEventSinkOnFailure() throws InterruptedException { ++ void shouldCloseEventSinkOnFailure() { + CompletionStage future = CompletableFuture.supplyAsync(() -> { + throw new RuntimeException("failed to send message"); + }); +@@ -91,9 +88,7 @@ class ClientTest { + + client.send(message); + +- Thread.sleep(50L); +- +- verify(eventSink).close(); ++ verify(eventSink, timeout(50L)).close(); + } + + @Test +`; diff --git a/scm-ui/ui-components/src/buttons/index.stories.tsx b/scm-ui/ui-components/src/buttons/index.stories.tsx index 79d5be448c..a238f25689 100644 --- a/scm-ui/ui-components/src/buttons/index.stories.tsx +++ b/scm-ui/ui-components/src/buttons/index.stories.tsx @@ -2,7 +2,6 @@ import React, { ReactNode } from "react"; import Button from "./Button"; import { storiesOf } from "@storybook/react"; import styled from "styled-components"; -import { MemoryRouter } from "react-router-dom"; import AddButton from "./AddButton"; import CreateButton from "./CreateButton"; import DeleteButton from "./DeleteButton"; @@ -17,14 +16,9 @@ const Spacing = styled.div` padding: 1em; `; -type StoryFn = () => ReactNode; - -const RoutingDecorator = (story: StoryFn) => {story()}; - -const SpacingDecorator = (story: StoryFn) => {story()}; +const SpacingDecorator = (story: () => ReactNode) => {story()}; storiesOf("Buttons|Button", module) - .addDecorator(RoutingDecorator) .add("Colors", () => (
{colors.map(color => ( @@ -44,7 +38,6 @@ storiesOf("Buttons|Button", module) const buttonStory = (name: string, storyFn: () => ReactElement) => { return storiesOf("Buttons|" + name, module) - .addDecorator(RoutingDecorator) .addDecorator(SpacingDecorator) .add("Default", storyFn); }; @@ -53,7 +46,7 @@ buttonStory("CreateButton", () => Create); buttonStory("DeleteButton", () => Delete); buttonStory("DownloadButton", () => ).add( "Disabled", - () => + () => ); buttonStory("EditButton", () => Edit); buttonStory("SubmitButton", () => Submit); diff --git a/scm-ui/ui-components/src/repos/Diff.stories.tsx b/scm-ui/ui-components/src/repos/Diff.stories.tsx new file mode 100644 index 0000000000..2f93ffd919 --- /dev/null +++ b/scm-ui/ui-components/src/repos/Diff.stories.tsx @@ -0,0 +1,47 @@ +import React, { useEffect, useState } from "react"; +import { storiesOf } from "@storybook/react"; +import Diff from "./Diff"; +// @ts-ignore +import parser from "gitdiff-parser"; +import simpleDiff from "../__resources__/Diff.simple"; +import Button from "../buttons/Button"; +import { DiffEventContext } from "./DiffTypes"; +import Toast from "../toast/Toast"; + +const diffFiles = parser.parse(simpleDiff); + +storiesOf("Diff", module) + .add("Default", () => ) + .add("Side-By-Side", () => ) + .add("Collapsed", () => ) + .add("File Controls", () => } />) + .add("File Annotation", () => ( + [

Custom File annotation for {file.newPath}

]} /> + )) + .add("Line Annotation", () => ( + { + return { + N2: [

Line Annotation

] + }; + }} + /> + )) + .add("OnClick", () => { + const OnClickDemo = ({}) => { + const [changeId, setChangeId] = useState(); + useEffect(() => { + const interval = setInterval(() => setChangeId(undefined), 2000); + return () => clearInterval(interval); + }); + const onClick = (context: DiffEventContext) => setChangeId(context.changeId); + return ( + <> + {changeId && } + + + ); + }; + return ; + }); diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 0c51a30982..4e2e7e08b4 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -20,7 +20,7 @@ type Collapsible = { }; type State = Collapsible & { - sideBySide: boolean; + sideBySide?: boolean; }; const DiffFilePanel = styled.div` @@ -87,7 +87,7 @@ class DiffFile extends React.Component { super(props); this.state = { collapsed: !!this.props.defaultCollapse, - sideBySide: false + sideBySide: props.sideBySide }; } diff --git a/scm-ui/ui-components/src/repos/DiffTypes.ts b/scm-ui/ui-components/src/repos/DiffTypes.ts index 58dd5aef5b..ba89d40aaa 100644 --- a/scm-ui/ui-components/src/repos/DiffTypes.ts +++ b/scm-ui/ui-components/src/repos/DiffTypes.ts @@ -66,7 +66,7 @@ export type DiffEventHandler = (context: DiffEventContext) => void; export type FileControlFactory = (file: File, setCollapseState: (p: boolean) => void) => ReactNode | null | undefined; export type DiffObjectProps = { - sideBySide: boolean; + sideBySide?: boolean; onClick?: DiffEventHandler; fileControlFactory?: FileControlFactory; fileAnnotationFactory?: FileAnnotationFactory; From 348e08cd33f151713c101e64fb59e3835f3b6b9e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 6 Jan 2020 13:14:42 +0100 Subject: [PATCH 14/38] fix broken build --- scm-ui/ui-plugins/bin/ui-plugins.js | 0 scm-ui/ui-plugins/package.json | 2 +- yarn.lock | 2785 ++++++++++++--------------- 3 files changed, 1244 insertions(+), 1543 deletions(-) mode change 100644 => 100755 scm-ui/ui-plugins/bin/ui-plugins.js diff --git a/scm-ui/ui-plugins/bin/ui-plugins.js b/scm-ui/ui-plugins/bin/ui-plugins.js old mode 100644 new mode 100755 diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index d48bdbb3fd..1fd6de4014 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-plugins", - "version": "2.0.0-11", + "version": "2.0.0-SNAPSHOT", "license": "BSD-3-Clause", "bin": { "ui-plugins": "./bin/ui-plugins.js" diff --git a/yarn.lock b/yarn.lock index 40eaddf70c..8a11f9fc5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,15 +29,15 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.4.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e" - integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw== +"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.6.3": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" + "@babel/generator" "^7.7.7" "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.5" + "@babel/parser" "^7.7.7" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" @@ -49,30 +49,10 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.6.3": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" - integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.4" - "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.4" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.3" - "@babel/types" "^7.6.3" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.4.0", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4", "@babel/generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" - integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== +"@babel/generator@^7.4.0", "@babel/generator@^7.7.4", "@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== dependencies: "@babel/types" "^7.7.4" jsesc "^2.5.1" @@ -111,7 +91,7 @@ "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.7.4": +"@babel/helper-create-class-features-plugin@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== @@ -148,7 +128,7 @@ "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helper-function-name@^7.1.0", "@babel/helper-function-name@^7.7.4": +"@babel/helper-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== @@ -245,7 +225,7 @@ "@babel/template" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helper-split-export-declaration@^7.4.4", "@babel/helper-split-export-declaration@^7.7.4": +"@babel/helper-split-export-declaration@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== @@ -262,7 +242,7 @@ "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/helpers@^7.6.2", "@babel/helpers@^7.7.4": +"@babel/helpers@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== @@ -280,17 +260,12 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== -"@babel/parser@^7.4.3", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" - integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== - -"@babel/plugin-proposal-async-generator-functions@^7.2.0", "@babel/plugin-proposal-async-generator-functions@^7.7.4": +"@babel/plugin-proposal-async-generator-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== @@ -299,7 +274,7 @@ "@babel/helper-remap-async-to-generator" "^7.7.4" "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-class-properties@7.7.4", "@babel/plugin-proposal-class-properties@^7.7.0": +"@babel/plugin-proposal-class-properties@7.7.4", "@babel/plugin-proposal-class-properties@^7.5.5", "@babel/plugin-proposal-class-properties@^7.7.0": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== @@ -307,14 +282,6 @@ "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-decorators@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz#58c1e21d21ea12f9f5f0a757e46e687b94a7ab2b" @@ -324,7 +291,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-decorators" "^7.7.4" -"@babel/plugin-proposal-dynamic-import@^7.5.0", "@babel/plugin-proposal-dynamic-import@^7.7.4": +"@babel/plugin-proposal-dynamic-import@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== @@ -332,7 +299,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-dynamic-import" "^7.7.4" -"@babel/plugin-proposal-json-strings@^7.2.0", "@babel/plugin-proposal-json-strings@^7.7.4": +"@babel/plugin-proposal-json-strings@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== @@ -356,7 +323,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-numeric-separator" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.7.4": +"@babel/plugin-proposal-object-rest-spread@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== @@ -364,7 +331,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0", "@babel/plugin-proposal-optional-catch-binding@^7.7.4": +"@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.7.4", "@babel/plugin-proposal-object-rest-spread@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== @@ -381,22 +356,22 @@ "@babel/plugin-syntax-optional-chaining" "^7.7.4" "@babel/plugin-proposal-optional-chaining@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz#e9bf1f9b9ba10c77c033082da75f068389041af8" - integrity sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg== + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.5.tgz#f0835f044cef85b31071a924010a2a390add11d4" + integrity sha512-sOwFqT8JSchtJeDD+CjmWCaiFoLxY4Ps7NjvwHC/U7l4e9i5pTRNt8nDMIFSOUL+ncFbYSwruHM8WknYItWdXw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.2.0" + "@babel/plugin-syntax-optional-chaining" "^7.7.4" -"@babel/plugin-proposal-unicode-property-regex@^7.6.2", "@babel/plugin-proposal-unicode-property-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" - integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== +"@babel/plugin-proposal-unicode-property-regex@^7.7.4", "@babel/plugin-proposal-unicode-property-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" + integrity sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.7.4": +"@babel/plugin-syntax-async-generators@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== @@ -404,9 +379,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-class-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" - integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.7.4.tgz#6048c129ea908a432a1ff85f1dc794dc62ddaa5e" + integrity sha512-JH3v5ZOeKT0qqdJ9BeBcZTFQiJOMax8RopSr1bH6ASkZKo2qWsvBML7W1mp89sszBRDBBRO8snqcByGdrMTdMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -417,49 +392,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@7.7.4", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": +"@babel/plugin-syntax-dynamic-import@7.7.4", "@babel/plugin-syntax-dynamic-import@^7", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" - integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.7.4": +"@babel/plugin-syntax-flow@^7", "@babel/plugin-syntax-flow@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b" integrity sha512-2AMAWl5PsmM5KPkB22cvOkUyWk6MjUaqhHNU5nSPUl/ns3j5qLfw2SuYP5RbVZ0tfLvePr4zUScbICtDP2CUNw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.7.4": +"@babel/plugin-syntax-json-strings@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.7.4": +"@babel/plugin-syntax-jsx@^7", "@babel/plugin-syntax-jsx@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== @@ -480,34 +434,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.7.4": +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-chaining@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff" - integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" @@ -529,14 +469,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.2.0", "@babel/plugin-transform-arrow-functions@^7.7.4": +"@babel/plugin-transform-arrow-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.5.0", "@babel/plugin-transform-async-to-generator@^7.7.4": +"@babel/plugin-transform-async-to-generator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== @@ -545,14 +485,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.7.4" -"@babel/plugin-transform-block-scoped-functions@^7.2.0", "@babel/plugin-transform-block-scoped-functions@^7.7.4": +"@babel/plugin-transform-block-scoped-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.6.3", "@babel/plugin-transform-block-scoping@^7.7.4": +"@babel/plugin-transform-block-scoping@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== @@ -560,7 +500,7 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5", "@babel/plugin-transform-classes@^7.7.4": +"@babel/plugin-transform-classes@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== @@ -574,36 +514,36 @@ "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0", "@babel/plugin-transform-computed-properties@^7.7.4": +"@babel/plugin-transform-computed-properties@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@7.7.4", "@babel/plugin-transform-destructuring@^7.6.0", "@babel/plugin-transform-destructuring@^7.7.4": +"@babel/plugin-transform-destructuring@7.7.4", "@babel/plugin-transform-destructuring@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.6.2", "@babel/plugin-transform-dotall-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" - integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== +"@babel/plugin-transform-dotall-regex@^7.7.4", "@babel/plugin-transform-dotall-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" + integrity sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-duplicate-keys@^7.5.0", "@babel/plugin-transform-duplicate-keys@^7.7.4": +"@babel/plugin-transform-duplicate-keys@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.2.0", "@babel/plugin-transform-exponentiation-operator@^7.7.4": +"@babel/plugin-transform-exponentiation-operator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== @@ -619,14 +559,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-flow" "^7.7.4" -"@babel/plugin-transform-for-of@^7.4.4", "@babel/plugin-transform-for-of@^7.7.4": +"@babel/plugin-transform-for-of@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.4.4", "@babel/plugin-transform-function-name@^7.7.4": +"@babel/plugin-transform-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== @@ -634,21 +574,21 @@ "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.2.0", "@babel/plugin-transform-literals@^7.7.4": +"@babel/plugin-transform-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.2.0", "@babel/plugin-transform-member-expression-literals@^7.7.4": +"@babel/plugin-transform-member-expression-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.5.0", "@babel/plugin-transform-modules-amd@^7.7.4", "@babel/plugin-transform-modules-amd@^7.7.5": +"@babel/plugin-transform-modules-amd@^7.7.4", "@babel/plugin-transform-modules-amd@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== @@ -657,7 +597,7 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.6.0", "@babel/plugin-transform-modules-commonjs@^7.7.4", "@babel/plugin-transform-modules-commonjs@^7.7.5": +"@babel/plugin-transform-modules-commonjs@^7.7.4", "@babel/plugin-transform-modules-commonjs@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== @@ -667,7 +607,7 @@ "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.5.0", "@babel/plugin-transform-modules-systemjs@^7.7.4": +"@babel/plugin-transform-modules-systemjs@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== @@ -676,7 +616,7 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0", "@babel/plugin-transform-modules-umd@^7.7.4": +"@babel/plugin-transform-modules-umd@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== @@ -684,21 +624,21 @@ "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3", "@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@babel/plugin-transform-new-target@^7.4.4", "@babel/plugin-transform-new-target@^7.7.4": +"@babel/plugin-transform-new-target@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.5.5", "@babel/plugin-transform-object-super@^7.7.4": +"@babel/plugin-transform-object-super@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== @@ -706,16 +646,16 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-parameters@^7.4.4", "@babel/plugin-transform-parameters@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" - integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== +"@babel/plugin-transform-parameters@^7.7.4", "@babel/plugin-transform-parameters@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== dependencies: "@babel/helper-call-delegate" "^7.7.4" "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.2.0", "@babel/plugin-transform-property-literals@^7.7.4": +"@babel/plugin-transform-property-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== @@ -730,14 +670,14 @@ "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-display-name@7.7.4", "@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.7.4": +"@babel/plugin-transform-react-display-name@7.7.4", "@babel/plugin-transform-react-display-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-jsx-self@^7.0.0", "@babel/plugin-transform-react-jsx-self@^7.7.4": +"@babel/plugin-transform-react-jsx-self@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== @@ -745,7 +685,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.7.4": +"@babel/plugin-transform-react-jsx-source@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== @@ -753,23 +693,23 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" - integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== +"@babel/plugin-transform-react-jsx@^7.7.4": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.7.tgz#5cbaa7445b4a09f774029f3cc7bb448ff3122a5d" + integrity sha512-SlPjWPbva2+7/ZJbGcoqjl4LsQaLpKEzxW9hcxU7675s24JmdotJOSJ4cgAbV82W3FcZpHIGmRZIlUL8ayMvjw== dependencies: "@babel/helper-builder-react-jsx" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-regenerator@^7.4.5", "@babel/plugin-transform-regenerator@^7.7.4", "@babel/plugin-transform-regenerator@^7.7.5": +"@babel/plugin-transform-regenerator@^7.7.4", "@babel/plugin-transform-regenerator@^7.7.5": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0", "@babel/plugin-transform-reserved-words@^7.7.4": +"@babel/plugin-transform-reserved-words@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== @@ -786,21 +726,21 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0", "@babel/plugin-transform-shorthand-properties@^7.7.4": +"@babel/plugin-transform-shorthand-properties@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.6.2", "@babel/plugin-transform-spread@^7.7.4": +"@babel/plugin-transform-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.2.0", "@babel/plugin-transform-sticky-regex@^7.7.4": +"@babel/plugin-transform-sticky-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== @@ -808,7 +748,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.4.4", "@babel/plugin-transform-template-literals@^7.7.4": +"@babel/plugin-transform-template-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== @@ -816,14 +756,14 @@ "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.2.0", "@babel/plugin-transform-typeof-symbol@^7.7.4": +"@babel/plugin-transform-typeof-symbol@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.6.0", "@babel/plugin-transform-typescript@^7.7.4": +"@babel/plugin-transform-typescript@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== @@ -832,7 +772,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.7.4" -"@babel/plugin-transform-unicode-regex@^7.6.2", "@babel/plugin-transform-unicode-regex@^7.7.4": +"@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== @@ -841,9 +781,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/polyfill@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.6.0.tgz#6d89203f8b6cd323e8d946e47774ea35dc0619cc" - integrity sha512-q5BZJI0n/B10VaQQvln1IlDK3BTBJFbADx7tv+oXDPIDZuTo37H5Adb9jhlXm/fEN4Y7/64qD9mnrJJG7rmaTw== + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" + integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" @@ -905,19 +845,19 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.7.1": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.6.tgz#39ac600427bbb94eec6b27953f1dfa1d64d457b2" - integrity sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ== +"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.6.3", "@babel/preset-env@^7.7.1": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.7.tgz#c294167b91e53e7e36d820e943ece8d0c7fe46ac" + integrity sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== dependencies: "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.7.4" "@babel/plugin-proposal-dynamic-import" "^7.7.4" "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.7" "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.7" "@babel/plugin-syntax-async-generators" "^7.7.4" "@babel/plugin-syntax-dynamic-import" "^7.7.4" "@babel/plugin-syntax-json-strings" "^7.7.4" @@ -931,7 +871,7 @@ "@babel/plugin-transform-classes" "^7.7.4" "@babel/plugin-transform-computed-properties" "^7.7.4" "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.7" "@babel/plugin-transform-duplicate-keys" "^7.7.4" "@babel/plugin-transform-exponentiation-operator" "^7.7.4" "@babel/plugin-transform-for-of" "^7.7.4" @@ -945,7 +885,7 @@ "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" "@babel/plugin-transform-new-target" "^7.7.4" "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.7" "@babel/plugin-transform-property-literals" "^7.7.4" "@babel/plugin-transform-regenerator" "^7.7.5" "@babel/plugin-transform-reserved-words" "^7.7.4" @@ -957,63 +897,7 @@ "@babel/plugin-transform-unicode-regex" "^7.7.4" "@babel/types" "^7.7.4" browserslist "^4.6.0" - core-js-compat "^3.4.7" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-env@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" - integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.6.2" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.6.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.6.2" - "@babel/types" "^7.6.3" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + core-js-compat "^3.6.0" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" @@ -1026,7 +910,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.7.4" -"@babel/preset-react@7.7.4", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.7.0": +"@babel/preset-react@7.7.4", "@babel/preset-react@^7.0.0", "@babel/preset-react@^7.6.3", "@babel/preset-react@^7.7.0": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== @@ -1037,17 +921,6 @@ "@babel/plugin-transform-react-jsx-self" "^7.7.4" "@babel/plugin-transform-react-jsx-source" "^7.7.4" -"@babel/preset-react@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.6.3.tgz#d5242c828322520205ae4eda5d4f4f618964e2f6" - integrity sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/preset-typescript@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" @@ -1057,12 +930,20 @@ "@babel/plugin-transform-typescript" "^7.7.4" "@babel/preset-typescript@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz#25768cb8830280baf47c45ab1a519a9977498c98" - integrity sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww== + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.7.tgz#69ddea54e8b4e491ccbf94147e673b2ac6e11e2e" + integrity sha512-Apg0sCTovsSA+pEaI8efnA44b9x4X/7z4P8vsWMiN8rSUaM4y4+Shl5NMWnMl6njvt96+CEb6jwpXAKYAVCSQA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.6.0" + "@babel/plugin-transform-typescript" "^7.7.4" + +"@babel/runtime-corejs3@^7.7.4": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.7.7.tgz#78fcbd472daec13abc42678bfc319e58a62235a3" + integrity sha512-kr3W3Fw8mB/CTru2M5zIRQZZgC/9zOxNSoJ/tVCzjPt3H1/p5uuGbz6WwmaQy/TLQcW31rUhUUWKY28sXFRelA== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.2" "@babel/runtime@7.7.4": version "7.7.4" @@ -1071,21 +952,14 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4": - version "7.7.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" - integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" + integrity sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA== dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" - integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/template@^7.4.0", "@babel/template@^7.6.0", "@babel/template@^7.7.4": +"@babel/template@^7.4.0", "@babel/template@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== @@ -1094,22 +968,7 @@ "@babel/parser" "^7.7.4" "@babel/types" "^7.7.4" -"@babel/traverse@^7.0.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.3", "@babel/traverse@^7.7.4": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== @@ -1124,7 +983,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.3", "@babel/types@^7.7.4": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== @@ -1153,80 +1012,73 @@ find-root "^1.1.0" source-map "^0.7.2" -"@emotion/cache@^10.0.17": - version "10.0.19" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" - integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== +"@emotion/cache@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.27.tgz#7895db204e2c1a991ae33d51262a3a44f6737303" + integrity sha512-Zp8BEpbMunFsTcqAK4D7YTm3MvCp1SekflSLJH8lze2fCcSZ/yMkXHo8kb3t1/1Tdd3hAqf3Fb7z9VZ+FMiC9w== dependencies: - "@emotion/sheet" "0.9.3" - "@emotion/stylis" "0.8.4" - "@emotion/utils" "0.11.2" - "@emotion/weak-memoize" "0.2.4" + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" "@emotion/core@^10.0.14": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.22.tgz#2ac7bcf9b99a1979ab5b0a876fbf37ab0688b177" - integrity sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA== + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.27.tgz#7c3f78be681ab2273f3bf11ca3e2edc4a9dd1fdc" + integrity sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.17" - "@emotion/css" "^10.0.22" - "@emotion/serialize" "^0.11.12" - "@emotion/sheet" "0.9.3" - "@emotion/utils" "0.11.2" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" -"@emotion/css@^10.0.22": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.22.tgz#37b1abb6826759fe8ac0af0ac0034d27de6d1793" - integrity sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA== +"@emotion/css@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== dependencies: - "@emotion/serialize" "^0.11.12" - "@emotion/utils" "0.11.2" - babel-plugin-emotion "^10.0.22" + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + babel-plugin-emotion "^10.0.27" -"@emotion/hash@0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" - integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== +"@emotion/hash@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831" + integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A== "@emotion/hash@^0.6.2", "@emotion/hash@^0.6.6": version "0.6.6" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.6.6.tgz#62266c5f0eac6941fece302abad69f2ee7e25e44" integrity sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ== -"@emotion/is-prop-valid@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.5.tgz#2dda0791f0eafa12b7a0a5b39858405cc7bde983" - integrity sha512-6ZODuZSFofbxSbcxwsFz+6ioPjb0ISJRRPLZ+WIbjcU2IMU0Io+RGQjjaTgOvNQl007KICBm7zXQaYQEC1r6Bg== +"@emotion/is-prop-valid@0.8.6", "@emotion/is-prop-valid@^0.8.1": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.6.tgz#4757646f0a58e9dec614c47c838e7147d88c263c" + integrity sha512-mnZMho3Sq8BfzkYYRVc8ilQTnc8U02Ytp6J1AwM6taQStZ3AhsEJBX2LzhA/LJirNCwM2VtHL3VFIZ+sNJUgUQ== dependencies: - "@emotion/memoize" "0.7.3" + "@emotion/memoize" "0.7.4" -"@emotion/is-prop-valid@^0.8.1": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29" - integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig== - dependencies: - "@emotion/memoize" "0.7.3" - -"@emotion/memoize@0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" - integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== "@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.6": version "0.6.6" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" integrity sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ== -"@emotion/serialize@^0.11.12", "@emotion/serialize@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.14.tgz#56a6d8d04d837cc5b0126788b2134c51353c6488" - integrity sha512-6hTsySIuQTbDbv00AnUO6O6Xafdwo5GswRlMZ5hHqiFx+4pZ7uGWXUQFW46Kc2taGhP89uXMXn/lWQkdyTosPA== +"@emotion/serialize@^0.11.15": + version "0.11.15" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.15.tgz#9a0f5873fb458d87d4f23e034413c12ed60a705a" + integrity sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg== dependencies: - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/unitless" "0.7.4" - "@emotion/utils" "0.11.2" + "@emotion/hash" "0.7.4" + "@emotion/memoize" "0.7.4" + "@emotion/unitless" "0.7.5" + "@emotion/utils" "0.11.3" csstype "^2.5.7" "@emotion/serialize@^0.9.1": @@ -1239,63 +1091,63 @@ "@emotion/unitless" "^0.6.7" "@emotion/utils" "^0.8.2" -"@emotion/sheet@0.9.3": - version "0.9.3" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" - integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== +"@emotion/sheet@0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/styled-base@^10.0.23": - version "10.0.24" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.24.tgz#9497efd8902dfeddee89d24b0eeb26b0665bfe8b" - integrity sha512-AnBImerf0h4dGAJVo0p0VE8KoAns71F28ErGFK474zbNAHX6yqSWQUasb+1jvg/VPwZjCp19+tAr6oOB0pwmLQ== +"@emotion/styled-base@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.27.tgz#d9efa307ae4e938fcc4d0596b40b7e8bc10f7c7c" + integrity sha512-ufHM/HhE3nr309hJG9jxuFt71r6aHn7p+bwXduFxcwPFEfBIqvmZUMtZ9YxIsY61PVwK3bp4G1XhaCzy9smVvw== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.5" - "@emotion/serialize" "^0.11.14" - "@emotion/utils" "0.11.2" + "@emotion/is-prop-valid" "0.8.6" + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" "@emotion/styled@^10.0.14": - version "10.0.23" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.23.tgz#2f8279bd59b99d82deade76d1046249ddfab7c1b" - integrity sha512-gNr04eqBQ2iYUx8wFLZDfm3N8/QUOODu/ReDXa693uyQGy2OqA+IhPJk+kA7id8aOfwAsMuvZ0pJImEXXKtaVQ== + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" + integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== dependencies: - "@emotion/styled-base" "^10.0.23" - babel-plugin-emotion "^10.0.23" + "@emotion/styled-base" "^10.0.27" + babel-plugin-emotion "^10.0.27" -"@emotion/stylis@0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" - integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== +"@emotion/stylis@0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== "@emotion/stylis@^0.7.0": version "0.7.1" resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.7.1.tgz#50f63225e712d99e2b2b39c19c70fff023793ca5" integrity sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ== -"@emotion/unitless@0.7.4", "@emotion/unitless@^0.7.0": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" - integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== +"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.0": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== "@emotion/unitless@^0.6.2", "@emotion/unitless@^0.6.7": version "0.6.7" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.6.7.tgz#53e9f1892f725b194d5e6a1684a7b394df592397" integrity sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg== -"@emotion/utils@0.11.2": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" - integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== +"@emotion/utils@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== "@emotion/utils@^0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc" integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== -"@emotion/weak-memoize@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" - integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== +"@emotion/weak-memoize@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" @@ -1372,9 +1224,9 @@ which "^1.3.1" "@fortawesome/fontawesome-free@^5.11.2": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.11.2.tgz#8644bc25b19475779a7b7c1fc104bc0a794f4465" - integrity sha512-XiUPoS79r1G7PcpnNtq85TJ7inJWe0v+b5oZJZKb0pGHNIV6+UiNeQWiFGmuQ0aj7GEhnD/v9iqxIsjuRKtEnQ== + version "5.12.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.12.0.tgz#8ceb9f09edfb85ea18a6c7bf098f6f5dd5ffd62b" + integrity sha512-vKDJUuE2GAdBERaQWmmtsciAMzjwNrROXA5KTGSZvayAsmuTGjam5z6QNqNPCwDfVljLWuov1nEC3mEQf/n6fQ== "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" @@ -1524,15 +1376,15 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@lerna/add@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.18.0.tgz#86e38f14d7a0a7c61315dccb402377feb1c9db83" - integrity sha512-Z5EaQbBnJn1LEPb0zb0Q2o9T8F8zOnlCsj6JYpY6aSke17UUT7xx0QMN98iBK+ueUHKjN/vdFdYlNCYRSIdujA== +"@lerna/add@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" + integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== dependencies: "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" + "@lerna/bootstrap" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" @@ -1540,20 +1392,20 @@ p-map "^2.1.0" semver "^6.2.0" -"@lerna/bootstrap@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.18.0.tgz#705d9eb51a24d549518796a09f24d24526ed975b" - integrity sha512-3DZKWIaKvr7sUImoKqSz6eqn84SsOVMnA5QHwgzXiQjoeZ/5cg9x2r+Xj3+3w/lvLoh0j8U2GNtrIaPNis4bKQ== +"@lerna/bootstrap@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" + integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" "@lerna/has-npm-version" "3.16.5" "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.0" + "@lerna/package-graph" "3.18.5" "@lerna/pulse-till-done" "3.13.0" "@lerna/rimraf-dir" "3.16.5" "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" + "@lerna/run-topologically" "3.18.5" "@lerna/symlink-binary" "3.17.0" "@lerna/symlink-dependencies" "3.17.0" "@lerna/validation-error" "3.13.0" @@ -1569,16 +1421,15 @@ read-package-tree "^5.1.6" semver "^6.2.0" -"@lerna/changed@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.18.3.tgz#50529e8bd5d7fe2d0ace046a6e274d3de652a493" - integrity sha512-xZW7Rm+DlDIGc0EvKGyJZgT9f8FFa4d52mr/Y752dZuXR2qRmf9tXhVloRG39881s2A6yi3jqLtXZggKhsQW4Q== +"@lerna/changed@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" + integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== dependencies: - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/listable" "3.18.0" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/listable" "3.18.5" "@lerna/output" "3.13.0" - "@lerna/version" "3.18.3" "@lerna/check-working-tree@3.16.5": version "3.16.5" @@ -1598,29 +1449,29 @@ execa "^1.0.0" strong-log-transformer "^2.0.0" -"@lerna/clean@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.18.0.tgz#cc67d7697db969a70e989992fdf077126308fb2e" - integrity sha512-BiwBELZNkarRQqj+v5NPB1aIzsOX+Y5jkZ9a5UbwHzEdBUQ5lQa0qaMLSOve/fSkaiZQxe6qnTyatN75lOcDMg== +"@lerna/clean@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" + integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/prompt" "3.13.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" "@lerna/pulse-till-done" "3.13.0" "@lerna/rimraf-dir" "3.16.5" p-map "^2.1.0" p-map-series "^1.0.0" p-waterfall "^1.0.0" -"@lerna/cli@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.0.tgz#2b6f8605bee299c6ada65bc2e4b3ed7bf715af3a" - integrity sha512-AwDyfGx7fxJgeaZllEuyJ9LZ6Tdv9yqRD9RX762yCJu+PCAFvB9bp6OYuRSGli7QQgM0CuOYnSg4xVNOmuGKDA== +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== dependencies: "@lerna/global-options" "3.13.0" dedent "^0.7.0" npmlog "^4.1.2" - yargs "^14.2.0" + yargs "^14.2.2" "@lerna/collect-uncommitted@3.16.5": version "3.16.5" @@ -1632,10 +1483,10 @@ figgy-pudding "^3.5.1" npmlog "^4.1.2" -"@lerna/collect-updates@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.18.0.tgz#6086c64df3244993cc0a7f8fc0ddd6a0103008a6" - integrity sha512-LJMKgWsE/var1RSvpKDIxS8eJ7POADEc0HM3FQiTpEczhP6aZfv9x3wlDjaHpZm9MxJyQilqxZcasRANmRcNgw== +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== dependencies: "@lerna/child-process" "3.16.5" "@lerna/describe-ref" "3.16.5" @@ -1643,26 +1494,26 @@ npmlog "^4.1.2" slash "^2.0.0" -"@lerna/command@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.0.tgz#1e40399324a69d26a78969d59cf60e19b2f13fc3" - integrity sha512-JQ0TGzuZc9Ky8xtwtSLywuvmkU8X62NTUT3rMNrUykIkOxBaO+tE0O98u2yo/9BYOeTRji9IsjKZEl5i9Qt0xQ== +"@lerna/command@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" + integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== dependencies: "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.0" + "@lerna/package-graph" "3.18.5" "@lerna/project" "3.18.0" "@lerna/validation-error" "3.13.0" "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" dedent "^0.7.0" execa "^1.0.0" is-ci "^2.0.0" - lodash "^4.17.14" npmlog "^4.1.2" -"@lerna/conventional-commits@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.16.4.tgz#bf464f11b2f6534dad204db00430e1651b346a04" - integrity sha512-QSZJ0bC9n6FVaf+7KDIq5zMv8WnHXnwhyL5jG1Nyh3SgOg9q2uflqh7YsYB+G6FwaRfnPaKosh6obijpYg0llA== +"@lerna/conventional-commits@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" + integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== dependencies: "@lerna/validation-error" "3.13.0" conventional-changelog-angular "^5.0.3" @@ -1685,14 +1536,14 @@ fs-extra "^8.1.0" npmlog "^4.1.2" -"@lerna/create@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.0.tgz#78ba4af5eced661944a12b9d7da8553c096c390d" - integrity sha512-y9oS7ND5T13c+cCTJHa2Y9in02ppzyjsNynVWFuS40eIzZ3z058d9+3qSBt1nkbbQlVyfLoP6+bZPsjyzap5ig== +"@lerna/create@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" + integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== dependencies: "@evocateur/pacote" "^9.6.3" "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" + "@lerna/command" "3.18.5" "@lerna/npm-conf" "3.16.0" "@lerna/validation-error" "3.13.0" camelcase "^5.0.0" @@ -1717,34 +1568,35 @@ "@lerna/child-process" "3.16.5" npmlog "^4.1.2" -"@lerna/diff@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.0.tgz#9638ff4b46e2a8b0d4ebf54cf2f267ac2f8fdb29" - integrity sha512-3iLNlpurc2nV9k22w8ini2Zjm2UPo3xtQgWyqdA6eJjvge0+5AlNAWfPoV6cV+Hc1xDbJD2YDSFpZPJ1ZGilRw== +"@lerna/diff@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" + integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== dependencies: "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" + "@lerna/command" "3.18.5" "@lerna/validation-error" "3.13.0" npmlog "^4.1.2" -"@lerna/exec@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.18.0.tgz#d9ec0b7ca06b7521f0b9f14a164e2d4ca5e1b3b9" - integrity sha512-hwkuzg1+38+pbzdZPhGtLIYJ59z498/BCNzR8d4/nfMYm8lFbw9RgJJajLcdbuJ9LJ08cZ93hf8OlzetL84TYg== +"@lerna/exec@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" + integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== dependencies: "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/run-topologically" "3.18.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" "@lerna/validation-error" "3.13.0" p-map "^2.1.0" -"@lerna/filter-options@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.18.0.tgz#406667dc75a8fc813c26a91bde754b6a73e1a868" - integrity sha512-UGVcixs3TGzD8XSmFSbwUVVQnAjaZ6Rmt8Vuq2RcR98ULkGB1LiGNMY89XaNBhaaA8vx7yQWiLmJi2AfmD63Qg== +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== dependencies: - "@lerna/collect-updates" "3.18.0" + "@lerna/collect-updates" "3.20.0" "@lerna/filter-packages" "3.18.0" dedent "^0.7.0" figgy-pudding "^3.5.1" @@ -1808,58 +1660,67 @@ "@lerna/child-process" "3.16.5" semver "^6.2.0" -"@lerna/import@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.0.tgz#c6b124b346a097e6c0f3f1ed4921a278d18bc80b" - integrity sha512-2pYIkkBTZsEdccfc+dPsKZeSw3tBzKSyl0b2lGrfmNX2Y41qqOzsJCyI1WO1uvEIP8aOaLy4hPpqRIBe4ee7hw== +"@lerna/import@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" + integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== dependencies: "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/prompt" "3.13.0" + "@lerna/command" "3.18.5" + "@lerna/prompt" "3.18.5" "@lerna/pulse-till-done" "3.13.0" "@lerna/validation-error" "3.13.0" dedent "^0.7.0" fs-extra "^8.1.0" p-map-series "^1.0.0" -"@lerna/init@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.0.tgz#b23b9170cce1f4630170dd744e8ee75785ea898d" - integrity sha512-/vHpmXkMlSaJaq25v5K13mcs/2L7E32O6dSsEkHaZCDRiV2BOqsZng9jjbE/4ynfsWfLLlU9ZcydwG72C3I+mQ== +"@lerna/info@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" + integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" + integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== dependencies: "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" + "@lerna/command" "3.18.5" fs-extra "^8.1.0" p-map "^2.1.0" write-json-file "^3.2.0" -"@lerna/link@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.0.tgz#bc72dc62ef4d8fb842b3286887980f98b764781d" - integrity sha512-FbbIpH0EpsC+dpAbvxCoF3cn7F1MAyJjEa5Lh3XkDGATOlinMFuKCbmX0NLpOPQZ5zghvrui97cx+jz5F2IlHw== +"@lerna/link@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" + integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== dependencies: - "@lerna/command" "3.18.0" - "@lerna/package-graph" "3.18.0" + "@lerna/command" "3.18.5" + "@lerna/package-graph" "3.18.5" "@lerna/symlink-dependencies" "3.17.0" p-map "^2.1.0" slash "^2.0.0" -"@lerna/list@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.18.0.tgz#6e5fe545ce4ba7c1eeb6d6cf69240d06c02bd496" - integrity sha512-mpB7Q6T+n2CaiPFz0LuOE+rXphDfHm0mKIwShnyS/XDcii8jXv+z9Iytj8p3rfCH2I1L80j2qL6jWzyGy/uzKA== +"@lerna/list@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" + integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/listable" "3.18.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" "@lerna/output" "3.13.0" -"@lerna/listable@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.0.tgz#752b014406a9a012486626d22e940edb8205973a" - integrity sha512-9gLGKYNLSKeurD+sJ2RA+nz4Ftulr91U127gefz0RlmAPpYSjwcJkxwa0UfJvpQTXv9C7yzHLnn0BjyAQRjuew== +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== dependencies: - "@lerna/query-graph" "3.18.0" + "@lerna/query-graph" "3.18.5" chalk "^2.3.1" columnify "^1.5.4" @@ -1881,13 +1742,13 @@ config-chain "^1.1.11" pify "^4.0.1" -"@lerna/npm-dist-tag@3.18.1": - version "3.18.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.1.tgz#d4dd82ea92e41e960b7117f83102ebcd7a23e511" - integrity sha512-vWkZh2T/O9OjPLDrba0BTWO7ug/C3sCwjw7Qyk1aEbxMBXB/eEJPqirwJTWT+EtRJQYB01ky3K8ZFOhElVyjLw== +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== dependencies: "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.16.0" + "@lerna/otplease" "3.18.5" figgy-pudding "^3.5.1" npm-package-arg "^6.1.0" npmlog "^4.1.2" @@ -1905,13 +1766,13 @@ signal-exit "^3.0.2" write-pkg "^3.1.0" -"@lerna/npm-publish@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.16.2.tgz#a850b54739446c4aa766a0ceabfa9283bb0be676" - integrity sha512-tGMb9vfTxP57vUV5svkBQxd5Tzc+imZbu9ZYf8Mtwe0+HYfDjNiiHLIQw7G95w4YRdc5KsCE8sQ0uSj+f2soIg== +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== dependencies: "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.16.0" + "@lerna/otplease" "3.18.5" "@lerna/run-lifecycle" "3.16.2" figgy-pudding "^3.5.1" fs-extra "^8.1.0" @@ -1929,12 +1790,12 @@ "@lerna/get-npm-exec-opts" "3.13.0" npmlog "^4.1.2" -"@lerna/otplease@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.16.0.tgz#de66aec4f3e835a465d7bea84b58a4ab6590a0fa" - integrity sha512-uqZ15wYOHC+/V0WnD2iTLXARjvx3vNrpiIeyIvVlDB7rWse9mL4egex/QSgZ+lDx1OID7l2kgvcUD9cFpbqB7Q== +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== dependencies: - "@lerna/prompt" "3.13.0" + "@lerna/prompt" "3.18.5" figgy-pudding "^3.5.1" "@lerna/output@3.13.0": @@ -1958,10 +1819,10 @@ tar "^4.4.10" temp-write "^3.4.0" -"@lerna/package-graph@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.0.tgz#eb42d14404a55b26b2472081615e26b0817cd91a" - integrity sha512-BLYDHO5ihPh20i3zoXfLZ5ZWDCrPuGANgVhl7k5pCmRj90LCvT+C7V3zrw70fErGAfvkcYepMqxD+oBrAYwquQ== +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== dependencies: "@lerna/prerelease-id-from-version" "3.16.0" "@lerna/validation-error" "3.13.0" @@ -1985,6 +1846,16 @@ dependencies: semver "^6.2.0" +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + "@lerna/project@3.18.0": version "3.18.0" resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" @@ -2003,41 +1874,41 @@ resolve-from "^4.0.0" write-json-file "^3.2.0" -"@lerna/prompt@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.13.0.tgz#53571462bb3f5399cc1ca6d335a411fe093426a5" - integrity sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA== +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== dependencies: inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.18.3.tgz#478bb94ee712a40b723413e437bcb9e307d3709c" - integrity sha512-XlfWOWIhaSK0Y2sX5ppNWI5Y3CDtlxMcQa1hTbZlC5rrDA6vD32iutbmH6Ix3c6wtvVbSkgA39GWsQEXxPS+7w== +"@lerna/publish@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" + integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== dependencies: "@evocateur/libnpmaccess" "^3.1.2" "@evocateur/npm-registry-fetch" "^4.0.0" "@evocateur/pacote" "^9.6.3" "@lerna/check-working-tree" "3.16.5" "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" "@lerna/describe-ref" "3.16.5" "@lerna/log-packed" "3.16.0" "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.1" - "@lerna/npm-publish" "3.16.2" - "@lerna/otplease" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" "@lerna/output" "3.13.0" "@lerna/pack-directory" "3.16.4" "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" + "@lerna/prompt" "3.18.5" "@lerna/pulse-till-done" "3.13.0" "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" + "@lerna/run-topologically" "3.18.5" "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.18.3" + "@lerna/version" "3.20.2" figgy-pudding "^3.5.1" fs-extra "^8.1.0" npm-package-arg "^6.1.0" @@ -2054,12 +1925,12 @@ dependencies: npmlog "^4.1.2" -"@lerna/query-graph@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.0.tgz#43801a2f1b80a0ea0bfd9d42d470605326a3035d" - integrity sha512-fgUhLx6V0jDuKZaKj562jkuuhrfVcjl5sscdfttJ8dXNVADfDz76nzzwLY0ZU7/0m69jDedohn5Fx5p7hDEVEg== +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== dependencies: - "@lerna/package-graph" "3.18.0" + "@lerna/package-graph" "3.18.5" figgy-pudding "^3.5.1" "@lerna/resolve-symlink@3.16.0": @@ -2091,25 +1962,26 @@ npm-lifecycle "^3.1.2" npmlog "^4.1.2" -"@lerna/run-topologically@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.0.tgz#9508604553cfbeba106cd84b711fade17947f94a" - integrity sha512-lrfEewwuUMC3ioxf9Z9NdHUakN6ihekcPfdYbzR2slmdbjYKmIA5srkWdrK8NwOpQCAuekpOovH2s8X3FGEopg== +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== dependencies: - "@lerna/query-graph" "3.18.0" + "@lerna/query-graph" "3.18.5" figgy-pudding "^3.5.1" p-queue "^4.0.0" -"@lerna/run@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.18.0.tgz#b7069880f6313e4c6026b564b7b76e5d0f30a521" - integrity sha512-sblxHBZ9djaaG7wefPcfEicDqzrB7CP1m/jIB0JvPEQwG4C2qp++ewBpkjRw/mBtjtzg0t7v0nNMXzaWYrQckQ== +"@lerna/run@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" + integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" "@lerna/npm-run-script" "3.16.5" "@lerna/output" "3.13.0" - "@lerna/run-topologically" "3.18.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" "@lerna/timer" "3.13.0" "@lerna/validation-error" "3.13.0" p-map "^2.1.0" @@ -2149,23 +2021,23 @@ dependencies: npmlog "^4.1.2" -"@lerna/version@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.18.3.tgz#01344b39c0749fdeb6c178714733bacbde4d602f" - integrity sha512-IXXRlyM3Q/jrc+QZio+bgjG4ZaK+4LYmY4Yql1xyY0wZhAKsWP/Q6ho7e1EJNjNC5dUJO99Fq7qB05MkDf2OcQ== +"@lerna/version@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" + integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== dependencies: "@lerna/check-working-tree" "3.16.5" "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/conventional-commits" "3.16.4" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/conventional-commits" "3.18.5" "@lerna/github-client" "3.16.5" "@lerna/gitlab-client" "3.15.0" "@lerna/output" "3.13.0" "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" + "@lerna/prompt" "3.18.5" "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" + "@lerna/run-topologically" "3.18.5" "@lerna/validation-error" "3.13.0" chalk "^2.3.1" dedent "^0.7.0" @@ -2203,11 +2075,11 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@octokit/endpoint@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.0.tgz#d7e7960ffe39096cb67062f07efa84db52b20edb" - integrity sha512-TXYS6zXeBImNB9BVj+LneMDqXX+H0exkOpyXobvp92O3B1348QsKnNioISFKgOMsb3ibZvQGwCdpiwQd3KAjIA== + version "5.5.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.1.tgz#2eea81e110ca754ff2de11c79154ccab4ae16b3f" + integrity sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg== dependencies: - "@octokit/types" "^1.0.0" + "@octokit/types" "^2.0.0" is-plain-object "^3.0.0" universal-user-agent "^4.0.0" @@ -2217,21 +2089,22 @@ integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== "@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be" - integrity sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.0.tgz#a64d2a9d7a13555570cd79722de4a4d76371baaa" + integrity sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg== dependencies: + "@octokit/types" "^2.0.0" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^5.2.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.0.tgz#ce49c9d05519054499b5bb729d4ecb4735cee78a" - integrity sha512-mMIeNrtYyNEIYNsKivDyUAukBkw0M5ckyJX56xoFRXSasDPCloIXaQOnaKNopzQ8dIOvpdq1ma8gmrS+h6O2OQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.1.tgz#3a1ace45e6f88b1be4749c5da963b3a3b4a2f120" + integrity sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg== dependencies: "@octokit/endpoint" "^5.5.0" "@octokit/request-error" "^1.0.1" - "@octokit/types" "^1.0.0" + "@octokit/types" "^2.0.0" deprecation "^2.0.0" is-plain-object "^3.0.0" node-fetch "^2.3.0" @@ -2239,9 +2112,9 @@ universal-user-agent "^4.0.0" "@octokit/rest@^16.28.4": - version "16.34.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.34.0.tgz#8703e46d7e9f6aec24a7e591b073f325ca13f6e2" - integrity sha512-EBe5qMQQOZRuezahWCXCnSe0J6tAqrW2hrEH9U8esXzKor1+HUDf8jgImaZf5lkTyWCQA296x9kAH5c0pxEgVQ== + version "16.36.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.36.0.tgz#99892c57ba632c2a7b21845584004387b56c2cb7" + integrity sha512-zoZj7Ya4vWBK4fjTwK2Cnmu7XBB1p9ygSvTk2TthN6DVJXM4hQZQoAiknWFLJWSTix4dnA3vuHtjPZbExYoCZA== dependencies: "@octokit/request" "^5.2.0" "@octokit/request-error" "^1.0.2" @@ -2256,12 +2129,12 @@ once "^1.4.0" universal-user-agent "^4.0.0" -"@octokit/types@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-1.1.0.tgz#6c9b286f9766f8cc6c5bab9fd3eb6a7aa019c586" - integrity sha512-t4ZD74UnNVMq6kZBDZceflRKK3q4o5PoCKMAGht0RK84W57tqonqKL3vCxJHtbGExdan9RwV8r7VJBZxIM1O7Q== +"@octokit/types@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.0.2.tgz#0888497f5a664e28b0449731d5e88e19b2a74f90" + integrity sha512-StASIL2lgT3TRjxv17z9pAqbnI7HGu9DrJlg3sEBFfCLaMEqp+O3IQPUF6EZtQ4xkAu2ml6kMBBCtGxjvmtmuQ== dependencies: - "@types/node" "^12.11.1" + "@types/node" ">= 8" "@reach/router@^1.2.1": version "1.2.1" @@ -2309,7 +2182,7 @@ regenerator-runtime "^0.12.1" ts-dedent "^1.1.0" -"@storybook/addons@5.2.8": +"@storybook/addons@5.2.8", "@storybook/addons@^5.1.9": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.2.8.tgz#f8bf8bd555b7a69fb1e9a52ab8cdb96384d931ff" integrity sha512-yAo1N5z/45bNIQP8SD+HVTr7X898bYAtz1EZBrQ6zD8bGamzA2Br06rOLL9xXw29eQhsaVnPlqgDwCS1sTC7aQ== @@ -2322,42 +2195,6 @@ global "^4.3.2" util-deprecate "^1.0.2" -"@storybook/addons@^5.1.9": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.2.5.tgz#e3e23d5ea6eb221df31e1a5d125be47454e9a0e8" - integrity sha512-CvMj7Bs3go9tv5rZuAvFwuwe8p/16LDCHS7+5nVFosvcL8nuN339V3rzakw8nLy/S6XKeZ1ACu4t3vYkreRE3w== - dependencies: - "@storybook/api" "5.2.5" - "@storybook/channels" "5.2.5" - "@storybook/client-logger" "5.2.5" - "@storybook/core-events" "5.2.5" - core-js "^3.0.1" - global "^4.3.2" - util-deprecate "^1.0.2" - -"@storybook/api@5.2.5": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.2.5.tgz#dcc68c873820485372a47c095a8fc5e4fb53a34c" - integrity sha512-JvLafqFVgA3dIWpLMoGNk4sRuogE5imhD6/g0d8DOwnCID9xowj5xIptSrCTKvGGGxuN3wWRGn6I2lEbY6969g== - dependencies: - "@storybook/channels" "5.2.5" - "@storybook/client-logger" "5.2.5" - "@storybook/core-events" "5.2.5" - "@storybook/router" "5.2.5" - "@storybook/theming" "5.2.5" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - prop-types "^15.6.2" - react "^16.8.3" - semver "^6.0.0" - shallow-equal "^1.1.0" - store2 "^2.7.1" - telejson "^3.0.2" - util-deprecate "^1.0.2" - "@storybook/api@5.2.8": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.2.8.tgz#21f03df8041114eb929bd10b570a17f266568b7f" @@ -2392,13 +2229,6 @@ global "^4.3.2" telejson "^3.0.2" -"@storybook/channels@5.2.5": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.2.5.tgz#d6ca2b490281dacb272096563fe760ccb353c4bb" - integrity sha512-I+zB3ym5ozBcNBqyzZbvB6gRIG/ZKKkqy5k6LwKd5NMx7NU7zU74+LQUBBOcSIrigj8kCArZz7rlgb0tlSKXxQ== - dependencies: - core-js "^3.0.1" - "@storybook/channels@5.2.8": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.2.8.tgz#79a99ad85dcacb688073c22340c5b7d16b801202" @@ -2428,13 +2258,6 @@ stable "^0.1.8" util-deprecate "^1.0.2" -"@storybook/client-logger@5.2.5": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.5.tgz#6f386ac6f81b4a783c57d54bb328281abbea1bab" - integrity sha512-6DyYUrMgAvF+th0foH7UNz+2JJpRdvNbpvYKtvi/+hlvRIaI6AqANgLkPUgMibaif5TLzjCr0bLdAYcjeJz03w== - dependencies: - core-js "^3.0.1" - "@storybook/client-logger@5.2.8": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.8.tgz#5affe2f9dbbee374721fd2e8729116f5ac39c779" @@ -2442,7 +2265,7 @@ dependencies: core-js "^3.0.1" -"@storybook/components@5.2.8": +"@storybook/components@5.2.8", "@storybook/components@^5.1.9": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.2.8.tgz#f5d4a06ba4ba8c700b2d962deae182105b72fb99" integrity sha512-h9l/LAMaj+emUCOyY/+ETy/S3P0npwQU280J88uL4O9XJALJ72EKfyttBCvMLvpM50E+fAPeDzuYn0t5qzGGxg== @@ -2467,39 +2290,7 @@ react-textarea-autosize "^7.1.0" simplebar-react "^1.0.0-alpha.6" -"@storybook/components@^5.1.9": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.2.5.tgz#40190dafbee34f083182255d26c19a0ea50789c8" - integrity sha512-6NVaBJm5wY53e9k+2ZiL2ABsHghE1ssQciLTG3jJPahnM6rfkM8ue66rhxhP88jE9isT48JgOZOJepEyxDz/fg== - dependencies: - "@storybook/client-logger" "5.2.5" - "@storybook/theming" "5.2.5" - "@types/react-syntax-highlighter" "10.1.0" - "@types/react-textarea-autosize" "^4.3.3" - core-js "^3.0.1" - global "^4.3.2" - markdown-to-jsx "^6.9.1" - memoizerific "^1.11.3" - polished "^3.3.1" - popper.js "^1.14.7" - prop-types "^15.7.2" - react "^16.8.3" - react-dom "^16.8.3" - react-focus-lock "^1.18.3" - react-helmet-async "^1.0.2" - react-popper-tooltip "^2.8.3" - react-syntax-highlighter "^8.0.1" - react-textarea-autosize "^7.1.0" - simplebar-react "^1.0.0-alpha.6" - -"@storybook/core-events@5.2.5", "@storybook/core-events@^5.1.9": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.2.5.tgz#62881164a4a01aa99ff0691e70eaed2dd58e229e" - integrity sha512-O5GM8XEBbYNbM6Z7a4H1bbnbO2cxQrXMhEwansC7a7YinQdkTPiuGxke3NiyK+7pLDh778kpQyjoCjXq6UfAoQ== - dependencies: - core-js "^3.0.1" - -"@storybook/core-events@5.2.8": +"@storybook/core-events@5.2.8", "@storybook/core-events@^5.1.9": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.2.8.tgz#93fc458ea0820ff1409d268b0fe51abba200f5a4" integrity sha512-NkQKC5doO/YL9gsO61bqaxgveKktkiJWZ3XyyhL1ZebgnO9wTlrU+i9b5aX73Myk1oxbicQw9KcwDGYk0qFuNQ== @@ -2619,19 +2410,6 @@ semver "^6.0.0" webpack "^4.33.0" -"@storybook/router@5.2.5": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.5.tgz#a005332bc6aa1e7849503187ad50c41b3f3bef92" - integrity sha512-e6ElDAWSoEW1KSnsTbVwbpzaZ8CNWYw0Ok3b5AHfY2fuSH5L4l6s6k/bP7QSYqvWUeTvkFQYux7A2rOFCriAgA== - dependencies: - "@reach/router" "^1.2.1" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - "@storybook/router@5.2.8": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.8.tgz#d7de2d401701857c033e28560c30e16512f7f72f" @@ -2645,25 +2423,7 @@ memoizerific "^1.11.3" qs "^6.6.0" -"@storybook/theming@5.2.5", "@storybook/theming@^5.1.9": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.5.tgz#9579e7944f61ded637d1d79be5fb859a617620f5" - integrity sha512-PGZNYrRgAhXFJKnktFpyyKlaDXEhtTi5XPq5ASVJrsPW6l963Mk2EMKSm4TCTxIJhs0Kx4cv2MnNZFDqHf47eg== - dependencies: - "@emotion/core" "^10.0.14" - "@emotion/styled" "^10.0.14" - "@storybook/client-logger" "5.2.5" - common-tags "^1.8.0" - core-js "^3.0.1" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.14" - global "^4.3.2" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - resolve-from "^5.0.0" - -"@storybook/theming@5.2.8": +"@storybook/theming@5.2.8", "@storybook/theming@^5.1.9": version "5.2.8" resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.8.tgz#a4c9e0e9a5789c1aa71e4fcb7a8ee86efe3dadcf" integrity sha512-rGb66GkXb0jNJMH8UQ3Ru4FL+m1x0+UdxM8a8HSE/qb1GMv2qOwjVETfAL6nVL9u6ZmrtbhHoero4f6xDwZdRg== @@ -2840,9 +2600,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" - integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" @@ -2855,16 +2615,16 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" - integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" + integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== dependencies: "@babel/types" "^7.3.0" "@types/cheerio@*": - version "0.22.13" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.13.tgz#5eecda091a24514185dcba99eda77e62bf6523e6" - integrity sha512-OZd7dCUOUkiTorf97vJKwZnSja/DmHfuBAroe1kREZZTCf/tlFecwHhsOos3uVHxeKGZDwzolIrCUApClkdLuA== + version "0.22.15" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.15.tgz#69040ffa92c309beeeeb7e92db66ac3f80700c0b" + integrity sha512-UGiiVtJK5niCqMKYmLEFz1Wl/3L5zF/u78lu8CwoUywWXRr9LDimeYuOzXVLXBMO758fcTdFtgjvqlztMH90MA== dependencies: "@types/node" "*" @@ -2886,9 +2646,9 @@ "@types/enzyme" "*" "@types/enzyme@*", "@types/enzyme@^3.10.3": - version "3.10.3" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.3.tgz#02b6c5ac7d0472005944a652e79045e2f6c66804" - integrity sha512-f/Kcb84sZOSZiBPCkr4He9/cpuSLcKRyQaEE20Q30Prx0Dn6wcyMAWI0yofL6yvd9Ht9G7EVkQeRqK0n5w8ILw== + version "3.10.4" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.4.tgz#dd4961042381a7c0f6637ce25fec3f773ce489dd" + integrity sha512-P5XpxcIt9KK8QUH4al4ttfJfIHg6xmN9ZjyUzRSzAsmDYwRXLI05ng/flZOPXrEXmp8ZYiN8/tEXYK5KSOQk3w== dependencies: "@types/cheerio" "*" "@types/react" "*" @@ -2904,9 +2664,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/fetch-mock@^7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@types/fetch-mock/-/fetch-mock-7.3.1.tgz#df7421e8bcb351b430bfbfa5c52bb353826ac94f" - integrity sha512-2U4vZWHNbsbK7TRmizgr/pbKe0FKopcxu+hNDtIBDiM1wvrKRItybaYj7VQ6w/hZJStU/JxRiNi5ww4YDEvKbA== + version "7.3.2" + resolved "https://registry.yarnpkg.com/@types/fetch-mock/-/fetch-mock-7.3.2.tgz#58805ba36a9357be92cc8c008dbfda937e9f7d8f" + integrity sha512-NCEfv49jmDsBAixjMjEHKVgmVQlJ+uK56FOc+2roYPExnXCZDpi6mJOHQ3v23BiO84hBDStND9R2itJr7PNoow== "@types/glob@^7.1.1": version "7.1.1" @@ -2922,6 +2682,14 @@ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== +"@types/hoist-non-react-statics@*": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/i18next@^13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@types/i18next/-/i18next-13.0.0.tgz#403ef338add0104e74d9759f1b39217e7c5d4084" @@ -2954,22 +2722,17 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - "@types/jest@^24.0.19": - version "24.0.20" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.20.tgz#729d5fe8684e7fb06368d3bd557ac6d91289d861" - integrity sha512-M8ebEkOpykGdLoRrmew7UowTZ1DANeeP0HiSIChl/4DGgmnSC1ntitNtkyNSXjMTsZvXuaxJrxjImEnRWNPsPw== + version "24.0.25" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.25.tgz#2aba377824ce040114aa906ad2cac2c85351360f" + integrity sha512-hnP1WpjN4KbGEK4dLayul6lgtys6FPz0UfxMeMQCv0M+sTnzN3ConfiO72jHgLxl119guHgI8gLqDOrRLsyp2g== dependencies: - "@types/jest-diff" "*" + jest-diff "^24.3.0" "@types/json-schema@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" - integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== "@types/lodash.merge@^4.6.4": version "4.6.6" @@ -2979,24 +2742,19 @@ "@types/lodash" "*" "@types/lodash@*", "@types/lodash@^4.14.136": - version "4.14.144" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e" - integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg== + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*": - version "12.12.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.17.tgz#191b71e7f4c325ee0fb23bc4a996477d92b8c39b" - integrity sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA== - -"@types/node@^12.11.1": - version "12.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" - integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== +"@types/node@*", "@types/node@>= 8": + version "13.1.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.4.tgz#4cfd90175a200ee9b02bd6b1cd19bc349741607e" + integrity sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3009,9 +2767,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^1.18.0": - version "1.18.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.3.tgz#64ff53329ce16139f17c3db9d3e0487199972cd8" - integrity sha512-48rnerQdcZ26odp+HOvDGX8IcUkYOCuMc2BodWYTe956MqkHlOGAG4oFQ83cjZ0a4GAgj7mb4GUClxYd2Hlodg== + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.0.tgz#a2502fb7ce9b6626fdbfc2e2a496f472de1bdd05" + integrity sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A== "@types/prop-types@*": version "15.7.3" @@ -3037,16 +2795,16 @@ "@types/react" "*" "@types/react-dom@*", "@types/react-dom@^16.9.2": - version "16.9.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.3.tgz#4006ff0e13958af91313869077c04cb20d9b9d04" - integrity sha512-FUuZKXPr9qlzUT9lhuzrZgLjH63TvNn28Ch3MvKG4B+F52zQtO8DtE0Opbncy3xaucNZM2WIPfuNTgkbKx5Brg== + version "16.9.4" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df" + integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw== dependencies: "@types/react" "*" "@types/react-native@*": - version "0.60.22" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.22.tgz#ba199a441cb0612514244ffb1d0fe6f04c878575" - integrity sha512-LTXMKEyGA+x4kadmjujX6yAgpcaZutJ01lC7zLJWCULaZg7Qw5/3iOQpwIJRUcOc+a8A2RR7rSxplehVf9IuhA== + version "0.60.28" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.28.tgz#5982bc1e96defb033bc243adcb9ed315bdacd737" + integrity sha512-X9oC4gPoHhYbAUxaddeBRVHqq307zSR6SzaIoQFjghe7a/90mJ1bqXnv49AkisN1LKI66i8dkIrb5IOvQEJ/0Q== dependencies: "@types/prop-types" "*" "@types/react" "*" @@ -3060,18 +2818,18 @@ redux "^3.6.0" "@types/react-router-dom@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.0.tgz#8baa84a7fa8c8e7797fb3650ca51f93038cb4caf" - integrity sha512-YCh8r71pL5p8qDwQf59IU13hFy/41fDQG/GeOI3y+xmD4o0w3vEPxE8uBe+dvOgMoDl0W1WUZsWH0pxc1mcZyQ== + version "5.1.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.3.tgz#b5d28e7850bd274d944c0fbbe5d57e6b30d71196" + integrity sha512-pCq7AkOvjE65jkGS5fQwQhvUp4+4PVD9g39gXLZViP2UqFiFzsEpB3PKf0O6mdbKsewSK8N14/eegisa/0CwnA== dependencies: "@types/history" "*" "@types/react" "*" "@types/react-router" "*" "@types/react-router@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.2.tgz#41e5e6aa333a7b9a2bfdac753c04e1ca4b3e0d21" - integrity sha512-euC3SiwDg3NcjFdNmFL8uVuAFTpZJm0WMFUw+4eXMUnxa7M9RGFEG0szt0z+/Zgk4G2k9JBFhaEnY64RBiFmuw== + version "5.1.3" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.3.tgz#7c7ca717399af64d8733d8cb338dd43641b96f2d" + integrity sha512-0gGhmerBqN8CzlnDmSgGNun3tuZFXerUclWkqEhozdLaJtfcJRUTGkKaEKk+/MpHd1KDS1+o2zb/3PkBUiv2qQ== dependencies: "@types/history" "*" "@types/react" "*" @@ -3093,9 +2851,9 @@ "@types/react" "*" "@types/react-syntax-highlighter@^11.0.1": - version "11.0.1" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.1.tgz#37215d91c23c556d8b369cd7d9a2d8756ec8c9c5" - integrity sha512-SQfkfKoSOQE1RLSJtPzo/uguliluNNt9tmjENca6+wZ1jfojUM3jNOQ2c6KCzQVtIknOZWrJTCoJMy4RSQcGOA== + version "11.0.4" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz#d86d17697db62f98046874f62fdb3e53a0bbc4cd" + integrity sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg== dependencies: "@types/react" "*" @@ -3113,18 +2871,10 @@ dependencies: "@types/react" "*" -"@types/react@*": - version "16.9.16" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.16.tgz#4f12515707148b1f53a8eaa4341dae5dfefb066d" - integrity sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/react@^16.9.9": - version "16.9.11" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120" - integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ== +"@types/react@*", "@types/react@^16.9.9": + version "16.9.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.17.tgz#58f0cc0e9ec2425d1441dd7b623421a867aa253e" + integrity sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -3142,23 +2892,24 @@ "@storybook/react" "^5.2.0" "@types/styled-components@^4.1.19": - version "4.1.20" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.1.20.tgz#8afd41039c0fd582152e57ff75c58a5353870de6" - integrity sha512-WztLENdKY+H9udccx5ZhAblgTp08NSfOFYdGaWM0MMm+1tEOioYVFwIIQ7Hx+9wWXiWKDXeoX6R3D/i1obnG3g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.4.1.tgz#bc40cf5ce0708032f4b148b04ab3c470d3e74026" + integrity sha512-cQXT4pkAkM0unk/s26UBrJx9RmJ2rNUn2aDTgzp1rtu+tTkScebE78jbxNWhlqkA43XF3d41CcDlyl9Ldotm2g== dependencies: + "@types/hoist-non-react-statics" "*" "@types/react" "*" "@types/react-native" "*" csstype "^2.2.0" "@types/systemjs@^0.20.6": - version "0.20.6" - resolved "https://registry.yarnpkg.com/@types/systemjs/-/systemjs-0.20.6.tgz#79838d2b4bce9c014330efa0b4c7b9345e830a72" - integrity sha512-p3yv9sBBJXi3noUG216BpUI7VtVBUAvBIfZNTiDROUY31YBfsFHM4DreS7XMekN8IjtX0ysvCnm6r3WnirnNeA== + version "0.20.7" + resolved "https://registry.yarnpkg.com/@types/systemjs/-/systemjs-0.20.7.tgz#73281a628736336f6c645304f31d6fe8669d387d" + integrity sha512-sCMqKfN5KEacy+cLfNOV66EYAs7a2c4m/Z86Ph81Anzj39/A0Tij8bVjlvAnwRgdC1pOewNhIDFQV0peZ9/K1w== "@types/webpack-env@^1.13.7": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7" - integrity sha512-0Ki9jAAhKDSuLDXOIMADg54Hu60SuBTEsWaJGGy5cV+SSUQ63J2a+RrYYGrErzz39fXzTibhKrAQJAb8M7PNcA== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.0.tgz#bd9956d5044b1fb43e869a9ba9148862ff98d9fd" + integrity sha512-TfcyNecCz8Z9/s90gBOBniyzZrTru8u2Vp0VZODq4KEBaQu8bfXvu7o/KUOecMpzjbFPUA7aqgSq628Iue5BQg== "@types/yargs-parser@*": version "13.1.0" @@ -3166,46 +2917,46 @@ integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== "@types/yargs@^13.0.0": - version "13.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" - integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== + version "13.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.4.tgz#53d231cebe1a540e7e13727fc1f0d13ad4a9ba3b" + integrity sha512-Ke1WmBbIkVM8bpvsNEcGgQM70XcEh/nbpxQhW7FhrsbCsXSY9BmLB1+LHtD7r9zrsOcFlLiF+a/UeJsdfw3C5A== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.12.0.tgz#0da7cbca7b24f4c6919e9eb31c704bfb126f90ad" - integrity sha512-1t4r9rpLuEwl3hgt90jY18wJHSyb0E3orVL3DaqwmpiSDHmHiSspVsvsFF78BJ/3NNG3qmeso836jpuBWYziAA== + version "2.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.14.0.tgz#c74447400537d4eb7aae1e31879ab43e6c662a8a" + integrity sha512-sneOJ3Hu0m5whJiVIxGBZZZMxMJ7c0LhAJzeMJgHo+n5wFs+/6rSR/gl7crkdR2kNwfOOSdzdc0gMvatG4dX2Q== dependencies: - "@typescript-eslint/experimental-utils" "2.12.0" + "@typescript-eslint/experimental-utils" "2.14.0" eslint-utils "^1.4.3" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.12.0.tgz#e0a76ffb6293e058748408a191921e453c31d40d" - integrity sha512-jv4gYpw5N5BrWF3ntROvCuLe1IjRenLy5+U57J24NbPGwZFAjhnM45qpq0nDH1y/AZMb3Br25YiNVwyPbz6RkA== +"@typescript-eslint/experimental-utils@2.14.0": + version "2.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.14.0.tgz#e9179fa3c44e00b3106b85d7b69342901fb43e3b" + integrity sha512-KcyKS7G6IWnIgl3ZpyxyBCxhkBPV+0a5Jjy2g5HxlrbG2ZLQNFeneIBVXdaBCYOVjvGmGGFKom1kgiAY75SDeQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.12.0" + "@typescript-eslint/typescript-estree" "2.14.0" eslint-scope "^5.0.0" "@typescript-eslint/parser@^2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.12.0.tgz#393f1604943a4ca570bb1a45bc8834e9b9158884" - integrity sha512-lPdkwpdzxEfjI8TyTzZqPatkrswLSVu4bqUgnB03fHSOwpC7KSerPgJRgIAf11UGNf7HKjJV6oaPZI4AghLU6g== + version "2.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.14.0.tgz#30fa0523d86d74172a5e32274558404ba4262cd6" + integrity sha512-haS+8D35fUydIs+zdSf4BxpOartb/DjrZ2IxQ5sR8zyGfd77uT9ZJZYF8+I0WPhzqHmfafUBx8MYpcp8pfaoSA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.12.0" - "@typescript-eslint/typescript-estree" "2.12.0" + "@typescript-eslint/experimental-utils" "2.14.0" + "@typescript-eslint/typescript-estree" "2.14.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.12.0": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.12.0.tgz#bd9e547ccffd17dfab0c3ab0947c80c8e2eb914c" - integrity sha512-rGehVfjHEn8Frh9UW02ZZIfJs6SIIxIu/K1bbci8rFfDE/1lQ8krIJy5OXOV3DVnNdDPtoiPOdEANkLMrwXbiQ== +"@typescript-eslint/typescript-estree@2.14.0": + version "2.14.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.14.0.tgz#c67698acdc14547f095eeefe908958d93e1a648d" + integrity sha512-pnLpUcMNG7GfFFfNQbEX6f1aPa5fMnH2G9By+A1yovYI4VIOK2DzkaRuUlIkbagpAcrxQHLqovI1YWqEcXyRnA== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -3389,9 +3140,9 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: through ">=2.2.7 <3" abab@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.2.tgz#a2fba1b122c69a85caa02d10f9270c7219709a9d" - integrity sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" @@ -3429,12 +3180,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== - -acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.2.1: version "6.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== @@ -3557,11 +3303,11 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== dependencies: - type-fest "^0.5.2" + type-fest "^0.8.1" ansi-html@0.0.7: version "0.0.7" @@ -3583,6 +3329,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -3704,12 +3455,13 @@ array-ify@^1.0.0: integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.0.tgz#48a929ef4c6bb1fa6dc4a92c9b023a261b0ca404" - integrity sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" + es-abstract "^1.17.0" + is-string "^1.0.5" array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" @@ -3736,24 +3488,33 @@ array.prototype.find@^2.1.0: define-properties "^1.1.3" es-abstract "^1.13.0" -array.prototype.flat@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz#8f3c71d245ba349b6b64b4078f76f5576f1fd723" - integrity sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ== +array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.15.0" - function-bind "^1.1.1" + es-abstract "^1.17.0-next.1" array.prototype.flatmap@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.2.tgz#28d621d351c19a62b84331b01669395ef6cef4c4" - integrity sha512-ZZtPLE74KNE+0XcPv/vQmcivxN+8FhwOLvt2udHauO0aDEpsXDQrmd5HuJGpgPVyaV8HvkDPWnJ2iaem0oCKtA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== dependencies: define-properties "^1.1.3" - es-abstract "^1.15.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" +array.prototype.map@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" + integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.4" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3850,7 +3611,7 @@ atob-lite@^2.0.0: resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -3874,16 +3635,17 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== axobject-query@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" - integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== + version "2.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.1.tgz#2a3b1271ec722d48a4cd4b3fcc20c853326a49a7" + integrity sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw== dependencies: - ast-types-flow "0.0.7" + "@babel/runtime" "^7.7.4" + "@babel/runtime-corejs3" "^7.7.4" babel-code-frame@^6.22.0: version "6.26.0" @@ -3981,15 +3743,15 @@ babel-plugin-dynamic-import-node@2.3.0, babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" -babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.22, babel-plugin-emotion@^10.0.23: - version "10.0.23" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.23.tgz#040d40bf61dcab6d31dd6043d10e180240b8515b" - integrity sha512-1JiCyXU0t5S2xCbItejCduLGGcKmF3POT0Ujbexog2MI4IlRcIn/kWjkYwCUZlxpON0O5FC635yPl/3slr7cKQ== +babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.27.tgz#59001cf5de847c1d61f2079cd906a90a00d3184f" + integrity sha512-SUNYcT4FqhOqvwv0z1oeYhqgheU8qrceLojuHyX17ngo7WtWqN5I9l3IGHzf21Xraj465CVzF4IvOlAF+3ed0A== dependencies: "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/serialize" "^0.11.14" + "@emotion/hash" "0.7.4" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.15" babel-plugin-macros "^2.0.0" babel-plugin-syntax-jsx "^6.18.0" convert-source-map "^1.5.0" @@ -4387,6 +4149,13 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -4394,16 +4163,11 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.3.5, bluebird@^3.5.5: +bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bluebird@^3.5.1, bluebird@^3.5.3: - version "3.7.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" - integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -4565,23 +4329,14 @@ browserslist@4.7.0: electron-to-chromium "^1.3.247" node-releases "^1.1.29" -browserslist@^4.0.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" - integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.8.0, browserslist@^4.8.2: + version "4.8.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44" + integrity sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg== dependencies: - caniuse-lite "^1.0.30001004" - electron-to-chromium "^1.3.295" - node-releases "^1.1.38" - -browserslist@^4.6.0, browserslist@^4.8.0, browserslist@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" - integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== - dependencies: - caniuse-lite "^1.0.30001015" + caniuse-lite "^1.0.30001017" electron-to-chromium "^1.3.322" - node-releases "^1.1.42" + node-releases "^1.1.44" bser@2.1.1: version "2.1.1" @@ -4811,15 +4566,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0: - version "1.0.30001010" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001010.tgz#397a14034d384260453cc81994f494626d34b938" - integrity sha512-RA5GH9YjFNea4ZQszdWgh2SC+dpLiRAg4VDQS2b5JRI45OxmbGrYocYHTa9x0bKMQUE7uvHkNPNffUr+pCxSGw== - -caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001004, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: - version "1.0.30001015" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" - integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001017: + version "1.0.30001019" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz#857e3fccaad2b2feb3f1f6d8a8f62d747ea648e1" + integrity sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g== capture-exit@^2.0.0: version "2.0.0" @@ -4878,7 +4628,7 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -cheerio@^1.0.0-rc.2: +cheerio@^1.0.0-rc.3: version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== @@ -5152,9 +4902,9 @@ commander@^3.0.0: integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== commander@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" - integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" + integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== common-tags@^1.8.0: version "1.8.0" @@ -5180,11 +4930,11 @@ component-emitter@^1.2.1: integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" @@ -5275,9 +5025,9 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.5.tgz#69b541bcf3e538a8578b1e5fbaabe9bd8f572b57" - integrity sha512-RrkdWnL/TVyWV1ayWmSsrWorsTDqjL/VwG5ZSEneBQrd65ONcfeA1cW7FLtNweQyMiKOyriCMTKRSlk18DjTrw== + version "5.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" + integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== dependencies: compare-func "^1.3.1" q "^1.5.1" @@ -5302,22 +5052,22 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-preset-loader@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" - integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" + integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== conventional-changelog-writer@^4.0.6: - version "4.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.9.tgz#44ac4c48121bc90e71cb2947e1ea1a6c222ccd7f" - integrity sha512-2Y3QfiAM37WvDMjkVNaRtZgxVzWKj73HE61YQ/95T53yle+CRwTVSl6Gbv/lWVKXeZcM5af9n9TDVf0k7Xh+cw== + version "4.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" + integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== dependencies: compare-func "^1.3.1" conventional-commits-filter "^2.0.2" dateformat "^3.0.0" handlebars "^4.4.0" json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" + lodash "^4.17.15" + meow "^5.0.0" semver "^6.0.0" split "^1.0.0" through2 "^3.0.0" @@ -5331,14 +5081,14 @@ conventional-commits-filter@^2.0.2: modify-values "^1.0.0" conventional-commits-parser@^3.0.3: - version "3.0.5" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.5.tgz#df471d6cb3f6fecfd1356ac72e0b577dbdae0a9c" - integrity sha512-qVz9+5JwdJzsbt7JbJ6P7NOXBGt8CyLFJYSjKAuPSgO+5UGfcsbk9EMR+lI8Unlvx6qwIc2YDJlrGIfay2ehNA== + version "3.0.8" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" + integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== dependencies: JSONStream "^1.0.4" - is-text-path "^2.0.0" - lodash "^4.2.1" - meow "^4.0.0" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^5.0.0" split2 "^2.0.0" through2 "^3.0.0" trim-off-newlines "^1.0.0" @@ -5357,20 +5107,13 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -5405,38 +5148,33 @@ copy-to-clipboard@^3.0.8: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.1.1, core-js-compat@^3.4.7: - version "3.5.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.5.0.tgz#5a11a619a9e9dd2dcf1c742b2060bc4a2143e5b6" - integrity sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg== +core-js-compat@^3.1.1, core-js-compat@^3.6.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.1.tgz#39638c935c83c93a793abb628b252ec43e85783a" + integrity sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg== dependencies: browserslist "^4.8.2" - semver "^6.3.0" + semver "7.0.0" -core-js-pure@^3.0.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.5.0.tgz#f63c7f2b245e7d678e73f87ad28505480554d70e" - integrity sha512-wB0QtKAofWigiISuT1Tej3hKgq932fB//Lf1VoPbiLpTYlHY0nIDhgF+q1na0DAKFHH5wGCirkAknOmDN8ijXA== +core-js-pure@^3.0.0, core-js-pure@^3.0.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.1.tgz#59acfb71caf2fb495aae4c1a0b2a7f2c1b65267e" + integrity sha512-yKiUdvQWq66xUc408duxUCxFHuDfz5trF5V4xnQzb8C7P/5v2gFUdyNWQoevyAeGYB1hl1X/pzGZ20R3WxZQBA== core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.4.0: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5, core-js@^2.6.9: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^2.5.0, core-js@^2.6.5, core-js@^2.6.9: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== - core-js@^3.0.1, core-js@^3.0.4: - version "3.5.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.5.0.tgz#66df8e49be4bd775e6f952a9d083b756ad41c1ed" - integrity sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw== + version "3.6.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.1.tgz#39d5e2e346258cc01eb7d44345b1c3c014ca3f05" + integrity sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -5595,10 +5333,10 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-loader@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.3.0.tgz#65f889807baec3197313965d6cda9899f936734d" - integrity sha512-x9Y1vvHe5RR+4tzwFdWExPueK00uqFTCw7mZy+9aE/X1SKWOArm5luaOrtJ4d05IpOwJ6S86b/tVcIdhw1Bu4A== +css-loader@^3.0.0, css-loader@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.1.tgz#dfb7968aa9bffb26bd20375afdffe77d5a234b77" + integrity sha512-+ybmv7sVxxNEenQhkifQDvny/1iNQM7YooJbSfVUdQQvisyg1aKIqgGjCjoFSyVLJMp17z9rfZFQaR5HGHcMbw== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" @@ -5613,24 +5351,6 @@ css-loader@^3.0.0: postcss-value-parser "^4.0.2" schema-utils "^2.6.0" -css-loader@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" - integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.17" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" - css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -5786,9 +5506,9 @@ cssstyle@^1.0.0: cssom "0.3.x" csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" - integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + version "2.6.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" + integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== currently-unhandled@^0.4.1: version "0.4.1" @@ -5831,16 +5551,16 @@ data-urls@^1.0.0: whatwg-url "^7.0.0" date-fns@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.6.0.tgz#a5bc82e6a4c3995ae124b0ba1a71aec7b8cbd666" - integrity sha512-F55YxqRdEfP/eYQmQjLN798v0AwLjmZ8nMBjdQvNwEE3N/zWVrlkkqT+9seBlPlsbkybG4JmWg3Ee3dIV9BcGQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.8.1.tgz#2109362ccb6c87c3ca011e9e31f702bc09e4123b" + integrity sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg== dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5901,19 +5621,7 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= -deep-equal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" - integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-equal@^1.1.1: +deep-equal@^1.0.1, deep-equal@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== @@ -6179,7 +5887,7 @@ dom-helpers@^3.4.0: dependencies: "@babel/runtime" "^7.1.2" -dom-serializer@0: +dom-serializer@0, dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -6187,14 +5895,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" - integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -6284,9 +5984,9 @@ dot-prop@^4.1.1, dot-prop@^4.2.0: is-obj "^1.0.0" dotenv-defaults@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz#441cf5f067653fca4bbdce9dd3b803f6f84c585d" - integrity sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.3.tgz#434a78209f2cab07f9ec9b86b79ae7e9ca5d818b" + integrity sha512-EHeXF8VZA/XhkGJCtRpJCTHC8GkoisPXjdvJMzxgFrlN6lTEW/eksRNsVKnW0BxR1pGZH8IEBO/D0mDkIrC6fA== dependencies: dotenv "^6.2.0" @@ -6345,10 +6045,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.295, electron-to-chromium@^1.3.322: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== +electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.322: + version "1.3.326" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.326.tgz#71715aca9afd328ea208a3bc4651c15b869f0d1b" + integrity sha512-kaBmGWJlLW5bGEbm7/HWG9jt4oH+uecBIIfzFWfFkgqssPT2I6RDenGqo4wmKzm7seNu7DSCRZBXCuf7w8dtkQ== element-resize-detector@^1.1.15: version "1.1.15" @@ -6386,12 +6086,12 @@ emojis-list@^2.0.0: integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= emotion-theming@^10.0.14: - version "10.0.19" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.19.tgz#66d13db74fccaefad71ba57c915b306cf2250295" - integrity sha512-dQRBPLAAQ6eA8JKhkLCIWC8fdjPbiNC1zNTdFF292h9amhZXofcNGUP7axHoHX4XesqQESYwZrXp53OPInMrKw== + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" + integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.4" + "@emotion/weak-memoize" "0.2.5" hoist-non-react-statics "^3.3.0" emotion@^9.1.2: @@ -6449,37 +6149,42 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.3.1: + version "7.5.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" + integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== enzyme-adapter-react-16@^1.15.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz#8ad55332be7091dc53a25d7d38b3485fc2ba50d5" - integrity sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA== + version "1.15.2" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz#b16db2f0ea424d58a808f9df86ab6212895a4501" + integrity sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q== dependencies: - enzyme-adapter-utils "^1.12.1" - enzyme-shallow-equal "^1.0.0" + enzyme-adapter-utils "^1.13.0" + enzyme-shallow-equal "^1.0.1" has "^1.0.3" object.assign "^4.1.0" - object.values "^1.1.0" + object.values "^1.1.1" prop-types "^15.7.2" - react-is "^16.10.2" + react-is "^16.12.0" react-test-renderer "^16.0.0-0" semver "^5.7.0" -enzyme-adapter-utils@^1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz#e828e0d038e2b1efa4b9619ce896226f85c9dd88" - integrity sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g== +enzyme-adapter-utils@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz#01c885dde2114b4690bf741f8dc94cee3060eb78" + integrity sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ== dependencies: airbnb-prop-types "^2.15.0" - function.prototype.name "^1.1.1" + function.prototype.name "^1.1.2" object.assign "^4.1.0" - object.fromentries "^2.0.1" + object.fromentries "^2.0.2" prop-types "^15.7.2" - semver "^5.7.0" + semver "^5.7.1" enzyme-context-react-router-4@^2.0.0: version "2.0.0" @@ -6505,40 +6210,41 @@ enzyme-context@^1.1.2: lodash.merge "^4.6.2" once "^1.4.0" -enzyme-shallow-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz#d8e4603495e6ea279038eef05a4bf4887b55dc69" - integrity sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ== +enzyme-shallow-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz#7afe03db3801c9b76de8440694096412a8d9d49e" + integrity sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ== dependencies: has "^1.0.3" - object-is "^1.0.1" + object-is "^1.0.2" enzyme@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6" - integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg== + version "3.11.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" + integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== dependencies: - array.prototype.flat "^1.2.1" - cheerio "^1.0.0-rc.2" - function.prototype.name "^1.1.0" + array.prototype.flat "^1.2.3" + cheerio "^1.0.0-rc.3" + enzyme-shallow-equal "^1.0.1" + function.prototype.name "^1.1.2" has "^1.0.3" - html-element-map "^1.0.0" - is-boolean-object "^1.0.0" - is-callable "^1.1.4" - is-number-object "^1.0.3" - is-regex "^1.0.4" - is-string "^1.0.4" + html-element-map "^1.2.0" + is-boolean-object "^1.0.1" + is-callable "^1.1.5" + is-number-object "^1.0.4" + is-regex "^1.0.5" + is-string "^1.0.5" is-subset "^0.1.1" lodash.escape "^4.0.1" lodash.isequal "^4.5.0" - object-inspect "^1.6.0" - object-is "^1.0.1" + object-inspect "^1.7.0" + object-is "^1.0.2" object.assign "^4.1.0" - object.entries "^1.0.4" - object.values "^1.0.4" - raf "^3.4.0" + object.entries "^1.1.1" + object.values "^1.1.1" + raf "^3.4.1" rst-selector-parser "^2.2.3" - string.prototype.trim "^1.1.2" + string.prototype.trim "^1.2.1" err-code@^1.0.0: version "1.1.2" @@ -6559,38 +6265,40 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.15.0, es-abstract@^1.16.0, es-abstract@^1.4.3, es-abstract@^1.5.1: - version "1.16.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" - integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== +es-abstract@^1.13.0, es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" + integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.7.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" - -es-abstract@^1.17.0-next.0: - version "1.17.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" - integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" + is-callable "^1.1.5" + is-regex "^1.0.5" object-inspect "^1.7.0" object-keys "^1.1.1" object.assign "^4.1.0" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.0.2.tgz#bc99065aa8c98ce52bc86ab282dedbba4120e0b3" + integrity sha512-ZHb4fuNK3HKHEOvDGyHPKf5cSWh/OvAMskeM/+21NMnTuvqFvz8uHatolu+7Kf6b6oK9C+3Uo1T37pSGPWv0MA== + dependencies: + es-abstract "^1.17.0-next.1" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.0" + is-set "^2.0.0" + is-string "^1.0.4" + isarray "^2.0.5" es-to-primitive@^1.2.1: version "1.2.1" @@ -6634,9 +6342,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.12.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.1.tgz#08770602a74ac34c7a90ca9229e7d51e379abc76" + integrity sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -6646,16 +6354,16 @@ escodegen@^1.9.1: source-map "~0.6.1" eslint-config-prettier@^6.4.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb" - integrity sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ== + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz#430d24822e82f7deb1e22a435bfa3999fae4ad64" + integrity sha512-k4E14HBtcLv0uqThaI6I/n1LEqROp8XaPu6SO9Z32u5NlGRC07Enu1Bh2KEFw4FNHbekH8yzbIU9kUGxbiGmCA== dependencies: get-stdin "^6.0.0" eslint-config-react-app@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.0.2.tgz#df40d73a1402986030680c040bbee520db5a32a4" - integrity sha512-VhlESAQM83uULJ9jsvcKxx2Ab0yrmjUt8kDz5DyhTQufqWE0ssAnejlWri5LXv25xoXfdqOyeDPdfJS9dXKagQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.1.0.tgz#a37b3f2d4f56f856f93277281ef52bd791273e63" + integrity sha512-hBaxisHC6HXRVvxX+/t1n8mOdmCVIKgkXsf2WoUkJi7upHJTwYTsdCmx01QPOjKNT34QMQQ9sL0tVBlbiMFjxA== dependencies: confusing-browser-globals "^1.0.9" @@ -6667,37 +6375,43 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== +eslint-module-utils@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c" + integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw== dependencies: - debug "^2.6.8" + debug "^2.6.9" pkg-dir "^2.0.0" +eslint-plugin-eslint-plugin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz#a7a00f15a886957d855feacaafee264f039e62d5" + integrity sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg== + eslint-plugin-flowtype@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.3.0.tgz#06d0837ac341caf369e7e6dbb112dd7fd21acf17" - integrity sha512-elvqoadMHnYqSYN1YXn02DR7SFW8Kc2CLe8na3m2GdQPQhIY+BgCd2quVJ1AbW3aO0zcyE9loVJ7Szy8A/xlMA== + version "4.5.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.5.3.tgz#21322e62c206cb4440d32ed3ba8eabe14e6d0fdf" + integrity sha512-9PBGkk3dQ2TnP04Zrm8ziVHyNIYzd24PEY12I5DXC/R35+3if0C1/PqTQW94v3okKWoBh2/7EysMEX9AimONjQ== dependencies: lodash "^4.17.15" eslint-plugin-import@^2.18.2: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + version "2.19.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448" + integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw== dependencies: array-includes "^3.0.3" + array.prototype.flat "^1.2.1" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" + eslint-module-utils "^2.4.1" has "^1.0.3" minimatch "^3.0.4" object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.11.0" + resolve "^1.12.0" eslint-plugin-jsx-a11y@^6.2.3: version "6.2.3" @@ -6715,31 +6429,32 @@ eslint-plugin-jsx-a11y@^6.2.3: jsx-ast-utils "^2.2.1" eslint-plugin-prettier@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" - integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" + integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-react-hooks@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.2.0.tgz#078264e9e388da6929ace09d6abe92c85963aff4" - integrity sha512-jSlnBjV2cmyIeL555H/FbvuSbQ1AtpHjLMHuPrQnt1eVA6lX8yufdygh7AArI2m8ct7ChHGx2uOaCuxq2MUn6g== + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a" + integrity sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw== eslint-plugin-react@^7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz#9928e4f3e2122ed3ba6a5b56d0303ba3e41d8c09" - integrity sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug== + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz#a31b3e134b76046abe3cd278e7482bd35a1d12d7" + integrity sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A== dependencies: array-includes "^3.0.3" doctrine "^2.1.0" + eslint-plugin-eslint-plugin "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.2.1" + jsx-ast-utils "^2.2.3" object.entries "^1.1.0" - object.fromentries "^2.0.0" + object.fromentries "^2.0.1" object.values "^1.1.0" prop-types "^15.7.2" - resolve "^1.12.0" + resolve "^1.13.1" eslint-scope@^4.0.3: version "4.0.3" @@ -6770,9 +6485,9 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^6.5.1: - version "6.6.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" - integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g== + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -6789,7 +6504,7 @@ eslint@^6.5.1: file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^11.7.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -6802,7 +6517,7 @@ eslint@^6.5.1: minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" + optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" @@ -6861,9 +6576,9 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= event-source-polyfill@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.9.tgz#1fe3ebf8e3faddafd4fc237424f5e5ab2706b6d0" - integrity sha512-+x0BMKTYwZcmGmlkHK0GsXkX1+otfEwqu3QitN0wmWuHaZniw3HeIx1k5OjWX3JUHQHlPS4yONol6eokS1ZAWg== + version "1.0.11" + resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.11.tgz#37b5d37161b8980bbbacb29081b7c8e501909e3a" + integrity sha512-fbo96OutP0Bb+gIYTTy8LGhNWySdetsFElCn/vhOzQL3cXWsS70TP/aRUe32U7F+PuOZH/tvb40tZgoJV8/Ilw== eventemitter3@^3.1.0: version "3.1.2" @@ -7075,11 +6790,11 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: micromatch "^3.1.10" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -7126,9 +6841,9 @@ fbjs@^0.8.0: ua-parser-js "^0.7.18" fetch-mock@^7.5.1: - version "7.7.0" - resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-7.7.0.tgz#28c4cef45739b29419e9324637c84965abab979a" - integrity sha512-1EqaOdqexYqOx7tp77dltysWaNQybSzIqingcafmQK8w3aK13koNzuvqbEAiKhazo5N46mAkdRpQ6cWZQJUibw== + version "7.7.3" + resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-7.7.3.tgz#6a3f94cfed6e423ab7f5464912982030da605335" + integrity sha512-I4OkK90JFQnjH8/n3HDtWxH/I6D1wrxoAM2ri+nb444jpuH3RTcgvXx2el+G20KO873W727/66T7QhOvFxNHPg== dependencies: babel-polyfill "^6.26.0" core-js "^2.6.9" @@ -7172,12 +6887,12 @@ file-loader@^3.0.1: schema-utils "^1.0.0" file-loader@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" - integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== dependencies: loader-utils "^1.2.3" - schema-utils "^2.0.0" + schema-utils "^2.5.0" file-system-cache@^1.0.5: version "1.0.5" @@ -7188,6 +6903,11 @@ file-system-cache@^1.0.5: fs-extra "^0.30.0" ramda "^0.21.0" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + filesize@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -7226,9 +6946,9 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: pkg-dir "^3.0.0" find-cache-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.1.0.tgz#9935894999debef4cf9f677fdf646d002c4cdecb" - integrity sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874" + integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg== dependencies: commondir "^1.0.1" make-dir "^3.0.0" @@ -7431,12 +7151,12 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" @@ -7448,27 +7168,26 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0, function.prototype.name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" - integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== +function.prototype.name@^1.1.0, function.prototype.name@^1.1.1, function.prototype.name@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" + integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" - functions-have-names "^1.1.1" - is-callable "^1.1.4" + es-abstract "^1.17.0-next.1" + functions-have-names "^1.2.0" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.1.1: +functions-have-names@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d" integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ== @@ -7642,7 +7361,7 @@ glob-to-regexp@^0.4.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -7654,18 +7373,6 @@ glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@~7.1.1: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -7710,19 +7417,24 @@ global@^4.3.2, global@^4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalthis@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.0.tgz#c5fb98213a9b4595f59cf3e7074f141b4169daae" - integrity sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg== +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - object-keys "^1.0.12" + type-fest "^0.8.1" + +globalthis@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" + integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== + dependencies: + define-properties "^1.1.3" globby@8.0.2: version "8.0.2" @@ -7763,9 +7475,9 @@ globby@^9.2.0: slash "^2.0.0" globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.0.tgz#41d0e9fb44afd4b80d93a23263714f90b3dec904" + integrity sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg== dependencies: glob "~7.1.1" lodash "~4.17.10" @@ -7778,7 +7490,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -7807,9 +7519,9 @@ handle-thing@^2.0.0: integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== handlebars@^4.1.2, handlebars@^4.4.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.1.tgz#8a01c382c180272260d07f2d1aa3ae745715c7ba" - integrity sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -7883,7 +7595,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.1, has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -7962,14 +7674,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== - dependencies: - react-is "^16.7.0" - -hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== @@ -8013,10 +7718,10 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== -html-element-map@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.1.0.tgz#e5aab9a834caf883b421f8bd9eaedcaac887d63c" - integrity sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA== +html-element-map@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.2.0.tgz#dfbb09efe882806af63d990cf6db37993f099f22" + integrity sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw== dependencies: array-filter "^1.0.0" @@ -8200,9 +7905,9 @@ humanize-ms@^1.2.1: ms "^2.0.0" i18next-browser-languagedetector@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.0.0.tgz#42dfe51b307821707d34669f1b848a7703675c01" - integrity sha512-w0glQVjhxMTPJHeDg1pUzF8h3teSkp1aotJp6GU6zvF0vVjdlsQdAyvDiQOYKwyQeg1P6Ja5XQLxfyq6sZZkFg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.0.1.tgz#6a0b44a93835146287130da36ce3d04a1836879f" + integrity sha512-RxSoX6mB8cab0CTIQ+klCS764vYRj+Jk621cnFVsINvcdlb/cdi3vQFyrPwmnowB7ReUadjHovgZX+RPIzHVQQ== dependencies: "@babel/runtime" "^7.5.5" @@ -8212,9 +7917,9 @@ i18next-fetch-backend@^2.2.0: integrity sha512-HodOCr4fezjMgJwWnOR/JUotdbM1onXdnB6Y+XDgDpXX58SkZXcyz6VmmUGc/8XMxFzq3162Qs2vO+SlO4TCFw== i18next@*: - version "18.0.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-18.0.1.tgz#10841209f6983df4d8e367204da403d8cbc609cf" - integrity sha512-KWd9qMFXw0qjxF7cTAqQselPCYoHfaLvBs8c6JcNzaQKVxbAlE/wv9EZXPy+JlKUcXCT0qgjcmxrJjmbnEp60A== + version "19.0.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.0.2.tgz#d72502ef031403572703f2e9f013cae005265444" + integrity sha512-fBa43Ann2udP1CQAz3IQpOZ1dGAkmi3mMfzisOhH17igneSRbvZ7P2RNbL+L1iRYKMufBmVwnC7G3gqcyviZ9g== dependencies: "@babel/runtime" "^7.3.1" @@ -8286,15 +7991,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -8430,9 +8127,9 @@ inquirer@^6.2.0: through "^2.3.6" inquirer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" - integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.2.tgz#b39b205b95c9424839a1fd991d60426cf9bbc0e9" + integrity sha512-cZGvHaHwcR9E3xK9EGO5pHKELU+yaeJO7l2qGKIbqk4bCuDuAn15LCoUTS2nSkfv9JybFlnAGrOcVpCDZZOLhw== dependencies: ansi-escapes "^4.2.1" chalk "^2.4.2" @@ -8443,7 +8140,7 @@ inquirer@^7.0.0: lodash "^4.17.15" mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.4.0" + rxjs "^6.5.3" string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -8456,6 +8153,15 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + interpret@1.2.0, interpret@^1.0.0, interpret@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -8483,7 +8189,7 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -8557,20 +8263,20 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= +is-boolean-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" + integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== is-ci@^2.0.0: version "2.0.0" @@ -8606,9 +8312,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-decimal@^1.0.0: version "1.0.3" @@ -8716,10 +8422,15 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= +is-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== is-number@^3.0.0: version "3.0.0" @@ -8781,12 +8492,12 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: - has "^1.0.1" + has "^1.0.3" is-resolvable@^1.0.0: version "1.1.0" @@ -8798,6 +8509,11 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== +is-set@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + is-ssh@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" @@ -8810,10 +8526,10 @@ is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= +is-string@^1.0.4, is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== is-subset@^0.1.1: version "0.1.1" @@ -8834,12 +8550,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.1" -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: - text-extensions "^2.0.0" + text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" @@ -8852,9 +8568,9 @@ is-utf8@^0.2.0: integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-what@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.3.1.tgz#79502181f40226e2d8c09226999db90ef7c1bcbe" - integrity sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.5.0.tgz#c50b0e8f3021e0b39410c159bea43a5510d99027" + integrity sha512-00pwt/Jf7IaRh5m2Dp93Iw8LG2cd3OpDj3NrD1XPNUpAWVxPvBP296p4IiGmIU4Ur0f3f56IoIM+fS2pFYF+tQ== is-whitespace-character@^1.0.0: version "1.0.3" @@ -8891,6 +8607,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -8971,6 +8692,13 @@ istanbul-reports@^2.2.6: dependencies: handlebars "^4.1.2" +iterate-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.1.tgz#d2003239b4a06c91a3f8092e379f6062b03c268c" + integrity sha512-xc6jTbwPOWEdD26y41BpJBqh/w3kuEcsQxTypXD+xYQA2+OZIfemmkm725cnRbm1cHj4SMLUO1+7oIA97e88gg== + dependencies: + es-get-iterator "^1.0.1" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -9022,7 +8750,7 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.9.0: +jest-diff@^24.3.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -9490,7 +9218,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.2.1: +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== @@ -9595,25 +9323,26 @@ left-pad@^1.3.0: integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== lerna@^3.17.0: - version "3.18.3" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.18.3.tgz#c94556e76f98df9c7ae4ed3bc0166117cc42cd13" - integrity sha512-Bnr/RjyDSVA2Vu+NArK7do4UIpyy+EShOON7tignfAekPbi7cNDnMMGgSmbCQdKITkqPACMfCMdyq0hJlg6n3g== + version "3.20.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" + integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA== dependencies: - "@lerna/add" "3.18.0" - "@lerna/bootstrap" "3.18.0" - "@lerna/changed" "3.18.3" - "@lerna/clean" "3.18.0" - "@lerna/cli" "3.18.0" - "@lerna/create" "3.18.0" - "@lerna/diff" "3.18.0" - "@lerna/exec" "3.18.0" - "@lerna/import" "3.18.0" - "@lerna/init" "3.18.0" - "@lerna/link" "3.18.0" - "@lerna/list" "3.18.0" - "@lerna/publish" "3.18.3" - "@lerna/run" "3.18.0" - "@lerna/version" "3.18.3" + "@lerna/add" "3.20.0" + "@lerna/bootstrap" "3.20.0" + "@lerna/changed" "3.20.0" + "@lerna/clean" "3.20.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.18.5" + "@lerna/diff" "3.18.5" + "@lerna/exec" "3.20.0" + "@lerna/import" "3.18.5" + "@lerna/info" "3.20.0" + "@lerna/init" "3.18.5" + "@lerna/link" "3.18.5" + "@lerna/list" "3.20.0" + "@lerna/publish" "3.20.2" + "@lerna/run" "3.20.0" + "@lerna/version" "3.20.2" import-local "^2.0.0" npmlog "^4.1.2" @@ -9839,10 +9568,10 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -loglevel@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" - integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== +loglevel@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" + integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -9923,9 +9652,9 @@ make-dir@^3.0.0: semver "^6.0.0" make-fetch-happen@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.1.tgz#fac65400ab5f7a9c001862a3e9b0f417f0840175" - integrity sha512-b4dfaMvUDR67zxUq1+GN7Ke9rH5WvGRmoHuMH7l+gmUCR2tCXFP6mpeJ9Dp+jB6z8mShRopSf1vLRBhRs8Cu5w== + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== dependencies: agentkeepalive "^3.4.1" cacache "^12.0.0" @@ -10092,10 +9821,25 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-anything@^2.2.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.1.tgz#e9bccaec1e49ec6cb5f77ca78c5770d1a35315e6" - integrity sha512-dYOIAl9GFCJNctSIHWOj9OJtarCjsD16P8ObCl6oxrujAG+kOvlwJuOD9/O9iYZ9aTi1RGpGTG9q9etIvuUikQ== + version "2.4.4" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.4.tgz#6226b2ac3d3d3fc5fb9e8d23aa400df25f98fdf0" + integrity sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ== dependencies: is-what "^3.3.1" @@ -10160,29 +9904,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== -mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "1.40.0" - -mime-types@~2.1.24: - version "2.1.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== - dependencies: - mime-db "1.42.0" + mime-db "1.43.0" mime@1.6.0: version "1.6.0" @@ -10231,9 +9963,9 @@ mini-css-extract-plugin@^0.7.0: webpack-sources "^1.1.0" mini-css-extract-plugin@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" - integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -10402,9 +10134,9 @@ multimatch@^3.0.0: minimatch "^3.0.4" mustache@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.1.0.tgz#9fba26e7aefc5709f07ff585abb7e0abced6c372" - integrity sha512-3Bxq1R5LBZp7fbFPZzFe5WN4s0q3+gxZaZuZVY+QctYJiCiVgXHOTIC0/HgZuOPFt/6BQcx5u0H2CUOxT/RoGQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.2.1.tgz#89e78a9d207d78f2799b1e95764a25bf71a28322" + integrity sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA== mute-stream@0.0.7: version "0.0.7" @@ -10547,21 +10279,21 @@ node-gyp@^3.8.0: which "1" node-gyp@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" - integrity sha512-WABl9s4/mqQdZneZHVWVG4TVr6QQJZUC6PAx47ITSk9lreZ1n+7Z9mMAIbA3vnO4J9W20P7LhCxtzfWsAD/KDw== + version "5.0.7" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.7.tgz#dd4225e735e840cf2870e4037c2ed9c28a31719e" + integrity sha512-K8aByl8OJD51V0VbUURTKsmdswkQQusIvlvmTyhHlIT1hBvaSxzdxpSle857XuXa7uc02UEZx9OR5aDxSWS5Qw== dependencies: - env-paths "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" tar "^4.4.12" - which "1" + which "^1.3.1" node-int64@^0.4.0: version "0.4.0" @@ -10613,10 +10345,10 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -10627,12 +10359,12 @@ node-pre-gyp@^0.12.0: rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^4" + tar "^4.4.2" -node-releases@^1.1.29, node-releases@^1.1.38, node-releases@^1.1.42: - version "1.1.42" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" - integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== +node-releases@^1.1.29, node-releases@^1.1.44: + version "1.1.44" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.44.tgz#cd66438a6eb875e3eb012b6a12e48d9f4326ffd7" + integrity sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw== dependencies: semver "^6.3.0" @@ -10744,7 +10476,7 @@ npm-lifecycle@^3.1.2: umask "^1.1.0" which "^1.3.1" -npm-normalize-package-bin@^1.0.1: +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== @@ -10759,7 +10491,7 @@ npm-normalize-package-bin@^1.0.1: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6: +npm-packlist@^1.1.6, npm-packlist@^1.4.4: version "1.4.7" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== @@ -10767,14 +10499,6 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-packlist@^1.4.4: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-pick-manifest@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" @@ -10819,9 +10543,9 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.7: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" @@ -10842,15 +10566,15 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0, object-inspect@^1.7.0: +object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= +object-is@^1.0.1, object-is@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -10874,33 +10598,33 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.0.4, object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== +object.entries@^1.1.0, object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.0, "object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" - integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== +"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.1, object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.15.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -10909,13 +10633,13 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.0.4, object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" @@ -10992,17 +10716,17 @@ optimize-css-assets-webpack-plugin@^5.0.3: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= +optionator@^0.8.1, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" original@^1.0.0: version "1.0.2" @@ -11088,9 +10812,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" @@ -11348,9 +11072,9 @@ path-to-regexp@0.1.7: integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" @@ -11664,7 +11388,7 @@ postcss-modules-local-by-default@^3.0.2: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.0" -postcss-modules-scope@^2.1.0, postcss-modules-scope@^2.1.1: +postcss-modules-scope@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== @@ -11846,19 +11570,10 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== -postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.24.tgz#972c3c5be431b32e40caefe6c81b5a19117704c2" - integrity sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7.0.1: - version "7.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -11882,9 +11597,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier-reflow@^1.18.2-1: - version "1.18.2-2" - resolved "https://registry.yarnpkg.com/prettier-reflow/-/prettier-reflow-1.18.2-2.tgz#8959aabf7b23138fa85b54a26f65afd15a52cfde" - integrity sha512-Pd/rr0Si0f5qPQM+OheBsGV8w/u1mjpfXZPyVxLieG3aOLIOhbwzeCkoCPIlQ3VefWwKDq6gijoPlsa/fHQlFw== + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier-reflow/-/prettier-reflow-1.19.1.tgz#145a7147b7da110a2fa8e947d4bb8eef894d4560" + integrity sha512-ZFeFOCjHcdOs8WH5AfH8ieg/QumCyJ+d3XpirrtFHw4G543h9rnV326rXtYUrqAZp3FeOW2FW6lk5maa2y10dg== prettier@^1.19.1: version "1.19.1" @@ -11914,7 +11629,14 @@ pretty-hrtime@^1.0.3: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -prismjs@^1.8.4, prismjs@~1.17.0: +prismjs@^1.8.4: + version "1.18.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.18.0.tgz#8f04dd47fa232cbd27d1ca969107580ff43f06e4" + integrity sha512-N0r3i/Cto516V8+GKKamhsPVZSFcO0TMUBtIDW6uq6BVqoC3FNtZVZ+cmH16N2XtGQlgRN+sFUTjOdCsEP51qw== + optionalDependencies: + clipboard "^2.0.0" + +prismjs@~1.17.0: version "1.17.1" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== @@ -11955,13 +11677,15 @@ promise-retry@^1.1.1: retry "^0.10.0" promise.allsettled@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.1.tgz#afe4bfcc13b26e2263a97a7fbbb19b8ca6eb619c" - integrity sha512-3ST7RS7TY3TYLOIe+OACZFvcWVe1osbgz2x07nTb446pa3t4GUZWidMDzQ4zf9jC2l6mRa1/3X81icFYbi+D/g== + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" + integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== dependencies: + array.prototype.map "^1.0.1" define-properties "^1.1.3" - es-abstract "^1.13.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" + iterate-value "^1.0.0" promise.prototype.finally@^3.1.0: version "3.1.2" @@ -11980,9 +11704,9 @@ promise@^7.1.1: asap "~2.0.3" prompts@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" - integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" + integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== dependencies: kleur "^3.0.3" sisteransi "^1.0.3" @@ -12055,9 +11779,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== public-encrypt@^4.0.0: version "4.0.3" @@ -12315,17 +12039,7 @@ react-docgen@^4.1.1: node-dir "^0.1.10" recast "^0.17.3" -react-dom@^16.10.2, react-dom@^16.8.6: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.11.0.tgz#7e7c4a5a85a569d565c2462f5d345da2dd849af5" - integrity sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.17.0" - -react-dom@^16.8.3: +react-dom@^16.10.2, react-dom@^16.8.3, react-dom@^16.8.6: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== @@ -12405,12 +12119,7 @@ react-inspector@^3.0.2: is-dom "^1.0.9" prop-types "^15.6.1" -react-is@^16.10.2, react-is@^16.6.0, react-is@^16.8.6, react-is@^16.9.0: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" - integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== - -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -12421,9 +12130,9 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-markdown@^4.0.6: - version "4.2.2" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-4.2.2.tgz#b378774fcffb354653db8749153fc8740f9ed2f1" - integrity sha512-/STJiRFmJuAIUdeBPp/VyO5bcenTIqP3LXuC3gYvregmYGKjnszGiFc2Ph0LsWC17Un3y/CT8TfxnwJT7v9EJw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-4.3.1.tgz#39f0633b94a027445b86c9811142d05381300f2f" + integrity sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw== dependencies: html-to-react "^1.3.4" mdast-add-list-metadata "1.0.1" @@ -12543,14 +12252,14 @@ react-syntax-highlighter@^8.0.1: refractor "^2.4.1" react-test-renderer@^16.0.0-0, react-test-renderer@^16.10.2: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.11.0.tgz#72574566496462c808ac449b0287a4c0a1a7d8f8" - integrity sha512-nh9gDl8R4ut+ZNNb2EeKO5VMvTKxwzurbSMuGBoKtjpjbg8JK/u3eVPVNi1h1Ue+eYK9oSzJjb+K3lzLxyA4ag== + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.12.0.tgz#11417ffda579306d4e841a794d32140f3da1b43f" + integrity sha512-Vj/teSqt2oayaWxkbhQ6gKis+t5JrknXfPVo+aIJ8QwYAqMPH77uptOdrlphyxl8eQI/rtkOYg86i/UWkpFu0w== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" react-is "^16.8.6" - scheduler "^0.17.0" + scheduler "^0.18.0" react-textarea-autosize@^7.1.0: version "7.1.2" @@ -12570,16 +12279,7 @@ react-transition-group@^2.2.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react@^16.10.2, react@^16.8.6: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb" - integrity sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -react@^16.8.3: +react@^16.10.2, react@^16.8.3, react@^16.8.6: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== @@ -12589,21 +12289,21 @@ react@^16.8.3: prop-types "^15.6.2" read-cmd-shim@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz#b4a53d43376211b45243f0072b6e603a8e37640d" - integrity sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== dependencies: graceful-fs "^4.1.2" "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" - integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" normalize-package-data "^2.0.0" - slash "^1.0.0" + npm-normalize-package-bin "^1.0.0" optionalDependencies: graceful-fs "^4.1.2" @@ -12702,9 +12402,9 @@ read@1, read@~1.0.1: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -12812,9 +12512,9 @@ redux-logger@^3.0.6: deep-diff "^0.3.5" redux-mock-store@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.3.tgz#1f10528949b7ce8056c2532624f7cafa98576c6d" - integrity sha512-ryhkkb/4D4CUGpAV2ln1GOY/uh51aczjcRz9k2L2bPx/Xja3c5pSGJJPyR25GNVRXtKIExScdAgFdiXp68GmJA== + version "1.5.4" + resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.4.tgz#90d02495fd918ddbaa96b83aef626287c9ab5872" + integrity sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA== dependencies: lodash.isplainobject "^4.0.6" @@ -12834,9 +12534,9 @@ redux@^3.6.0: symbol-observable "^1.0.3" redux@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" - integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== dependencies: loose-envify "^1.4.0" symbol-observable "^1.2.0" @@ -12902,12 +12602,13 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== dependencies: - define-properties "^1.1.2" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" regexpp@^2.0.1: version "2.0.1" @@ -12937,9 +12638,9 @@ regjsgen@^0.5.0: integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + version "0.6.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== dependencies: jsesc "~0.5.0" @@ -13007,19 +12708,19 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.11" + lodash "^4.17.15" request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" @@ -13119,17 +12820,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.12.0, resolve@^1.5.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" + integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== dependencies: path-parse "^1.0.6" @@ -13223,10 +12917,10 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== +rxjs@^6.4.0, rxjs@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" @@ -13298,14 +12992,6 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" - integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" @@ -13323,7 +13009,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.0: +schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.5.0, schema-utils@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== @@ -13331,14 +13017,6 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.0: ajv "^6.10.2" ajv-keywords "^3.4.1" -schema-utils@^2.0.1, schema-utils@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" - integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== - dependencies: - ajv "^6.10.2" - ajv-keywords "^3.4.1" - script-loader@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.2.tgz#2016db6f86f25f5cf56da38915d83378bb166ba7" @@ -13371,11 +13049,16 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -13540,6 +13223,14 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -13573,9 +13264,9 @@ simplebar@^4.2.3: resize-observer-polyfill "^1.5.1" sisteransi@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" - integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" + integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== slash@^1.0.0: version "1.0.0" @@ -13601,10 +13292,10 @@ slide@^1.1.6: resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" @@ -13665,12 +13356,12 @@ socks-proxy-agent@^4.0.0: socks "~2.3.2" socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" + ip "1.1.5" + smart-buffer "^4.1.0" sort-keys@^1.0.0: version "1.1.2" @@ -13692,25 +13383,17 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6: - version "0.5.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.15.tgz#20fe16f16e74644e21a396c78c841fa66e35df6c" - integrity sha512-wYF5aX1J0+V51BDT3Om7uXNn0ct2FWiV4bvwiGVefxkm+1S1o5jsecE5lb2U28DDblzxzxeIDbTVpXHI9D/9hA== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.12: +source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== @@ -13933,9 +13616,9 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" @@ -13977,64 +13660,63 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" + strip-ansi "^6.0.0" "string.prototype.matchall@^4.0.0 || ^3.0.1": - version "4.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.0.tgz#47191e37b67dca43131706bc9c4550df31b2c471" - integrity sha512-/cSuf1qsUaPicdvXcVZJ98fM9FmvkXvw7PKSM5pTtlj4R9VLQc7B51fOZBMsGfv9UXhUhdpxSrEsGe2ObsR2cw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== dependencies: define-properties "^1.1.3" - es-abstract "^1.15.0" - function-bind "^1.1.1" - has-symbols "^1.0.0" - regexp.prototype.flags "^1.2.0" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" string.prototype.padstart@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" - integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string.prototype.trim@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d" - integrity sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" + integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== dependencies: define-properties "^1.1.3" - es-abstract "^1.13.0" + es-abstract "^1.17.0-next.1" + +string.prototype.trim@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" @@ -14074,6 +13756,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -14131,17 +13820,17 @@ style-loader@^0.23.1: schema-utils "^1.0.0" style-loader@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.2.tgz#1b519c19faf548df6182b93e72ea1a4156022c2f" + integrity sha512-0Mpq1ZHFDCNq1F+6avNBgv+7q8V+mWRuzehxyJT+aKgzyN/yfKTwjYqaYwBgx+11UpQxL21zNQfzzlz+JcGURw== dependencies: loader-utils "^1.2.3" schema-utils "^2.0.1" styled-components@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.0.tgz#4e381e2dab831d0e6ea431c2840a96323e84e21b" - integrity sha512-xQ6vTI/0zNjZ1BBDRxyjvBddrxhQ3DxjeCdaLM1lSn5FDnkTOQgRkmWvcUiTajqc5nJqKVl+7sUioMqktD0+Zw== + version "4.4.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.1.tgz#e0631e889f01db67df4de576fedaca463f05c2f2" + integrity sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/traverse" "^7.0.0" @@ -14230,12 +13919,12 @@ symbol-tree@^3.2.2: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== symbol.prototype.description@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.1.tgz#e44e5db04d977932d1a261570bf65312773406d0" - integrity sha512-smeS1BCkN6lcz1XveFK+cfvfBmNJ6dcPi6lgOnLUU8Po8SmV+rtmYGObbNOisW9RHWMyUfsgMA+eTQg+b3v9Vg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.2.tgz#f325e1e6ad534b3b29c9c3ca73c136c9ce03c5e2" + integrity sha512-2CW5SU4/Ki1cYOOHcL2cXK4rxSg5hCU1TwZ7X4euKhV9VnfqKslh7T6/UyKkubA8cq2tOmsOv7m3ZUmQslBRuw== dependencies: - es-abstract "^1.16.0" - has-symbols "^1.0.0" + es-abstract "^1.17.0-next.1" + has-symbols "^1.0.1" systemjs@0.21.6: version "0.21.6" @@ -14266,7 +13955,7 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: +tar@^4.4.10, tar@^4.4.12, tar@^4.4.2, tar@^4.4.8: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -14317,7 +14006,7 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== @@ -14333,9 +14022,9 @@ terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: worker-farm "^1.7.0" terser@^4.1.2, terser@^4.3.9: - version "4.4.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" - integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== + version "4.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.5.1.tgz#63b52d6b6ce344aa6fedcd0ee06a695799eb50bd" + integrity sha512-lH9zLIbX8PRBEFCTvfHGCy0s9HEKnNso1Dx9swSopF3VUnFLB8DpQ61tHxoofovNC/sG0spajJM3EIIRSTByiQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -14351,10 +14040,10 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" -text-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" - integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@0.2.0, text-table@^0.2.0: version "0.2.0" @@ -14621,7 +14310,7 @@ type-fest@^0.3.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== -type-fest@^0.5.0, type-fest@^0.5.2: +type-fest@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== @@ -14631,6 +14320,11 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -14650,19 +14344,19 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" - integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== + version "3.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" + integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== ua-parser-js@^0.7.18: - version "0.7.20" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" - integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== uglify-js@^3.1.4: - version "3.6.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.5.tgz#b0ee796d2ae7e25672e04f65629b997cd4b30bd6" - integrity sha512-7L3W+Npia1OCr5Blp4/Vw83tK1mu5gnoIURtT1fUVfQ3Kf8WStWV6NJz0fdoBJZls0KlweruRTLVe6XLafmy5g== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -14765,9 +14459,9 @@ unist-util-is@^3.0.0: integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== unist-util-remove-position@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" - integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== dependencies: unist-util-visit "^1.1.0" @@ -14825,7 +14519,7 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: +upath@^1.1.1, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== @@ -14976,9 +14670,9 @@ verror@1.10.0: extsprintf "^1.2.0" vfile-location@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" - integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== vfile-message@^1.0.0: version "1.1.1" @@ -15064,9 +14758,9 @@ webidl-conversions@^4.0.2: integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-cli@^3.3.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.9.tgz#79c27e71f94b7fe324d594ab64a8e396b9daa91a" - integrity sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A== + version "3.3.10" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" + integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -15092,9 +14786,9 @@ webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: webpack-log "^2.0.0" webpack-dev-server@^3.8.2: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" - integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== + version "3.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#1ff3e5cccf8e0897aa3f5909c654e623f69b1c0e" + integrity sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -15111,7 +14805,7 @@ webpack-dev-server@^3.8.2: ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.4" + loglevel "^1.6.6" opn "^5.5.0" p-retry "^3.0.1" portfinder "^1.0.25" @@ -15157,9 +14851,9 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.0, webpack@^4.41.1: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== + version "4.41.5" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" + integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -15181,7 +14875,7 @@ webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.0, webpack@^4.41.1: node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" + terser-webpack-plugin "^1.4.3" watchpack "^1.6.0" webpack-sources "^1.4.1" @@ -15272,16 +14966,16 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -15436,6 +15130,13 @@ yaml@^1.7.2: dependencies: "@babel/runtime" "^7.6.3" +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -15518,10 +15219,10 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" -yargs@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.0.tgz#f116a9242c4ed8668790b40759b4906c276e76c3" - integrity sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg== +yargs@^14.2.2: + version "14.2.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" + integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== dependencies: cliui "^5.0.0" decamelize "^1.2.0" From 3e1828eb129f85d2084c236e81a9d2d538ca9ac2 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 6 Jan 2020 14:48:32 +0100 Subject: [PATCH 15/38] fixed storyshots with react-diff-view --- .../src/__snapshots__/storyshots.test.ts.snap | 16415 ++++++++++++++++ .../ui-components/src/repos/Diff.stories.tsx | 7 +- scm-ui/ui-components/src/storyshots.test.ts | 20 +- 3 files changed, 16438 insertions(+), 4 deletions(-) diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 7fa1b1193f..009fe0cd21 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -334,6 +334,16421 @@ exports[`Storyshots DateFromNow Default 1`] = `
`; +exports[`Storyshots Diff Collapsed 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
, +] +`; + +exports[`Storyshots Diff Default 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; +
+ + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; +
+ + + import com.github.legman.Subscribe; +
+ + + import lombok.Data; +
+ + + import org.apache.shiro.SecurityUtils; +
+ + + import org.apache.shiro.subject.PrincipalCollection; +
+ + + import org.apache.shiro.subject.Subject; +
+ + + import sonia.scm.EagerSingleton; +
+ + + import sonia.scm.HandlerEventType; +
+ + + import sonia.scm.event.HandlerEvent; +
+ + + import sonia.scm.plugin.Extension; +
+ + + import sonia.scm.repository.Repository; +
+ + + import sonia.scm.security.SessionId; +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; +
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; +
+ + + import { PullRequest } from "./types/PullRequest"; +
+ + + import { useTranslation } from "react-i18next"; +
+ + + +
+ + + type HandlerProps = { +
+ + + url: string; +
+
+
+ + + pullRequest: setEvent +
+ + + }); +
+ + + }, [url]); +
+ + + const { t } = useTranslation("plugins"); +
+ + + if (event) { +
+ + + return ( +
+ + + <Toast type="warning" title="New Changes"> +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> +
+ + + <p>Warning: Non saved modification will be lost.</p> +
+ + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> +
+ + + <p>{t("scm-review-plugin.changeNotification.description")}</p> +
+ + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> +
+ + + <ToastButtons> +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> +
+ + + <ToastButton icon="redo" onClick={reload}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.reload")} +
+ + + </ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.ignore")} +
+ + + </ToastButton> +
+ + + </ToastButtons> +
+ + + </Toast> +
+ + + ); +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "Neue Änderungen", +
+ + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + "buttons": { +
+ + + "reload": "Neu laden", +
+ + + "ignore": "Ignorieren" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "New Changes", +
+ + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + "buttons": { +
+ + + "reload": "Reload", +
+ + + "ignore": "Ignore" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; +
+ + + import org.mockito.junit.jupiter.MockitoExtension; +
+ + + import sonia.scm.security.SessionId; +
+ + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; +
+ + + import javax.ws.rs.sse.SseEventSink; +
+ + + +
+ + + import java.time.Clock; +
+ + + import java.time.Instant; +
+ + + import java.time.LocalDateTime; +
+ + + import java.time.ZoneOffset; +
+ + + import java.time.temporal.ChronoField; +
+ + + import java.time.temporal.ChronoUnit; +
+ + + import java.time.temporal.TemporalField; +
+ + + import java.util.concurrent.CompletableFuture; +
+ + + import java.util.concurrent.CompletionStage; +
+ + + import java.util.concurrent.atomic.AtomicLong; +
+ + + import java.util.concurrent.atomic.AtomicReference; +
+ + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; +
+
+
+ + + +
+ + + @Test +
+ + + @SuppressWarnings("unchecked") +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { +
+ + + void shouldCloseEventSinkOnFailure() { +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { +
+ + + throw new RuntimeException("failed to send message"); +
+ + + }); +
+
+
+ + + +
+ + + client.send(message); +
+ + + +
+ + + Thread.sleep(50L); +
+ + + +
+ + + verify(eventSink).close(); +
+ + + verify(eventSink, timeout(50L)).close(); +
+ + + } +
+ + + +
+ + + @Test +
+
+
, +] +`; + +exports[`Storyshots Diff File Annotation 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + src/main/java/com/cloudogu/scm/review/events/EventListener.java +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; +
+ + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; +
+ + + import com.github.legman.Subscribe; +
+ + + import lombok.Data; +
+ + + import org.apache.shiro.SecurityUtils; +
+ + + import org.apache.shiro.subject.PrincipalCollection; +
+ + + import org.apache.shiro.subject.Subject; +
+ + + import sonia.scm.EagerSingleton; +
+ + + import sonia.scm.HandlerEventType; +
+ + + import sonia.scm.event.HandlerEvent; +
+ + + import sonia.scm.plugin.Extension; +
+ + + import sonia.scm.repository.Repository; +
+ + + import sonia.scm.security.SessionId; +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + src/main/js/ChangeNotification.tsx +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; +
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; +
+ + + import { PullRequest } from "./types/PullRequest"; +
+ + + import { useTranslation } from "react-i18next"; +
+ + + +
+ + + type HandlerProps = { +
+ + + url: string; +
+
+
+ + + pullRequest: setEvent +
+ + + }); +
+ + + }, [url]); +
+ + + const { t } = useTranslation("plugins"); +
+ + + if (event) { +
+ + + return ( +
+ + + <Toast type="warning" title="New Changes"> +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> +
+ + + <p>Warning: Non saved modification will be lost.</p> +
+ + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> +
+ + + <p>{t("scm-review-plugin.changeNotification.description")}</p> +
+ + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> +
+ + + <ToastButtons> +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> +
+ + + <ToastButton icon="redo" onClick={reload}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.reload")} +
+ + + </ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.ignore")} +
+ + + </ToastButton> +
+ + + </ToastButtons> +
+ + + </Toast> +
+ + + ); +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + src/main/resources/locales/de/plugins.json +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "Neue Änderungen", +
+ + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + "buttons": { +
+ + + "reload": "Neu laden", +
+ + + "ignore": "Ignorieren" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + src/main/resources/locales/en/plugins.json +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "New Changes", +
+ + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + "buttons": { +
+ + + "reload": "Reload", +
+ + + "ignore": "Ignore" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + src/test/java/com/cloudogu/scm/review/events/ClientTest.java +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; +
+ + + import org.mockito.junit.jupiter.MockitoExtension; +
+ + + import sonia.scm.security.SessionId; +
+ + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; +
+ + + import javax.ws.rs.sse.SseEventSink; +
+ + + +
+ + + import java.time.Clock; +
+ + + import java.time.Instant; +
+ + + import java.time.LocalDateTime; +
+ + + import java.time.ZoneOffset; +
+ + + import java.time.temporal.ChronoField; +
+ + + import java.time.temporal.ChronoUnit; +
+ + + import java.time.temporal.TemporalField; +
+ + + import java.util.concurrent.CompletableFuture; +
+ + + import java.util.concurrent.CompletionStage; +
+ + + import java.util.concurrent.atomic.AtomicLong; +
+ + + import java.util.concurrent.atomic.AtomicReference; +
+ + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; +
+
+
+ + + +
+ + + @Test +
+ + + @SuppressWarnings("unchecked") +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { +
+ + + void shouldCloseEventSinkOnFailure() { +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { +
+ + + throw new RuntimeException("failed to send message"); +
+ + + }); +
+
+
+ + + +
+ + + client.send(message); +
+ + + +
+ + + Thread.sleep(50L); +
+ + + +
+ + + verify(eventSink).close(); +
+ + + verify(eventSink, timeout(50L)).close(); +
+ + + } +
+ + + +
+ + + @Test +
+
+
, +] +`; + +exports[`Storyshots Diff File Controls 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; +
+ + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; +
+ + + import com.github.legman.Subscribe; +
+ + + import lombok.Data; +
+ + + import org.apache.shiro.SecurityUtils; +
+ + + import org.apache.shiro.subject.PrincipalCollection; +
+ + + import org.apache.shiro.subject.Subject; +
+ + + import sonia.scm.EagerSingleton; +
+ + + import sonia.scm.HandlerEventType; +
+ + + import sonia.scm.event.HandlerEvent; +
+ + + import sonia.scm.plugin.Extension; +
+ + + import sonia.scm.repository.Repository; +
+ + + import sonia.scm.security.SessionId; +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; +
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; +
+ + + import { PullRequest } from "./types/PullRequest"; +
+ + + import { useTranslation } from "react-i18next"; +
+ + + +
+ + + type HandlerProps = { +
+ + + url: string; +
+
+
+ + + pullRequest: setEvent +
+ + + }); +
+ + + }, [url]); +
+ + + const { t } = useTranslation("plugins"); +
+ + + if (event) { +
+ + + return ( +
+ + + <Toast type="warning" title="New Changes"> +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> +
+ + + <p>Warning: Non saved modification will be lost.</p> +
+ + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> +
+ + + <p>{t("scm-review-plugin.changeNotification.description")}</p> +
+ + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> +
+ + + <ToastButtons> +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> +
+ + + <ToastButton icon="redo" onClick={reload}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.reload")} +
+ + + </ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.ignore")} +
+ + + </ToastButton> +
+ + + </ToastButtons> +
+ + + </Toast> +
+ + + ); +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "Neue Änderungen", +
+ + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + "buttons": { +
+ + + "reload": "Neu laden", +
+ + + "ignore": "Ignorieren" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "New Changes", +
+ + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + "buttons": { +
+ + + "reload": "Reload", +
+ + + "ignore": "Ignore" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; +
+ + + import org.mockito.junit.jupiter.MockitoExtension; +
+ + + import sonia.scm.security.SessionId; +
+ + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; +
+ + + import javax.ws.rs.sse.SseEventSink; +
+ + + +
+ + + import java.time.Clock; +
+ + + import java.time.Instant; +
+ + + import java.time.LocalDateTime; +
+ + + import java.time.ZoneOffset; +
+ + + import java.time.temporal.ChronoField; +
+ + + import java.time.temporal.ChronoUnit; +
+ + + import java.time.temporal.TemporalField; +
+ + + import java.util.concurrent.CompletableFuture; +
+ + + import java.util.concurrent.CompletionStage; +
+ + + import java.util.concurrent.atomic.AtomicLong; +
+ + + import java.util.concurrent.atomic.AtomicReference; +
+ + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; +
+
+
+ + + +
+ + + @Test +
+ + + @SuppressWarnings("unchecked") +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { +
+ + + void shouldCloseEventSinkOnFailure() { +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { +
+ + + throw new RuntimeException("failed to send message"); +
+ + + }); +
+
+
+ + + +
+ + + client.send(message); +
+ + + +
+ + + Thread.sleep(50L); +
+ + + +
+ + + verify(eventSink).close(); +
+ + + verify(eventSink, timeout(50L)).close(); +
+ + + } +
+ + + +
+ + + @Test +
+
+
, +] +`; + +exports[`Storyshots Diff Line Annotation 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; +
+ + + +
+

+ Line Annotation +

+
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; +
+ + + import com.github.legman.Subscribe; +
+ + + import lombok.Data; +
+ + + import org.apache.shiro.SecurityUtils; +
+ + + import org.apache.shiro.subject.PrincipalCollection; +
+ + + import org.apache.shiro.subject.Subject; +
+ + + import sonia.scm.EagerSingleton; +
+ + + import sonia.scm.HandlerEventType; +
+ + + import sonia.scm.event.HandlerEvent; +
+ + + import sonia.scm.plugin.Extension; +
+ + + import sonia.scm.repository.Repository; +
+ + + import sonia.scm.security.SessionId; +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; +
+

+ Line Annotation +

+
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; +
+ + + import { PullRequest } from "./types/PullRequest"; +
+ + + import { useTranslation } from "react-i18next"; +
+ + + +
+ + + type HandlerProps = { +
+ + + url: string; +
+
+
+ + + pullRequest: setEvent +
+ + + }); +
+ + + }, [url]); +
+ + + const { t } = useTranslation("plugins"); +
+ + + if (event) { +
+ + + return ( +
+ + + <Toast type="warning" title="New Changes"> +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> +
+ + + <p>Warning: Non saved modification will be lost.</p> +
+ + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> +
+ + + <p>{t("scm-review-plugin.changeNotification.description")}</p> +
+ + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> +
+ + + <ToastButtons> +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> +
+ + + <ToastButton icon="redo" onClick={reload}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.reload")} +
+ + + </ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.ignore")} +
+ + + </ToastButton> +
+ + + </ToastButtons> +
+ + + </Toast> +
+ + + ); +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "Neue Änderungen", +
+ + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + "buttons": { +
+ + + "reload": "Neu laden", +
+ + + "ignore": "Ignorieren" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "New Changes", +
+ + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + "buttons": { +
+ + + "reload": "Reload", +
+ + + "ignore": "Ignore" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; +
+ + + import org.mockito.junit.jupiter.MockitoExtension; +
+ + + import sonia.scm.security.SessionId; +
+ + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; +
+ + + import javax.ws.rs.sse.SseEventSink; +
+ + + +
+ + + import java.time.Clock; +
+ + + import java.time.Instant; +
+ + + import java.time.LocalDateTime; +
+ + + import java.time.ZoneOffset; +
+ + + import java.time.temporal.ChronoField; +
+ + + import java.time.temporal.ChronoUnit; +
+ + + import java.time.temporal.TemporalField; +
+ + + import java.util.concurrent.CompletableFuture; +
+ + + import java.util.concurrent.CompletionStage; +
+ + + import java.util.concurrent.atomic.AtomicLong; +
+ + + import java.util.concurrent.atomic.AtomicReference; +
+ + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; +
+
+
+ + + +
+ + + @Test +
+ + + @SuppressWarnings("unchecked") +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { +
+ + + void shouldCloseEventSinkOnFailure() { +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { +
+ + + throw new RuntimeException("failed to send message"); +
+ + + }); +
+
+
+ + + +
+ + + client.send(message); +
+ + + +
+ + + Thread.sleep(50L); +
+ + + +
+ + + verify(eventSink).close(); +
+ + + verify(eventSink, timeout(50L)).close(); +
+ + + } +
+ + + +
+ + + @Test +
+
+
, +] +`; + +exports[`Storyshots Diff OnClick 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; +
+ + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; +
+ + + import com.github.legman.Subscribe; +
+ + + import lombok.Data; +
+ + + import org.apache.shiro.SecurityUtils; +
+ + + import org.apache.shiro.subject.PrincipalCollection; +
+ + + import org.apache.shiro.subject.Subject; +
+ + + import sonia.scm.EagerSingleton; +
+ + + import sonia.scm.HandlerEventType; +
+ + + import sonia.scm.event.HandlerEvent; +
+ + + import sonia.scm.plugin.Extension; +
+ + + import sonia.scm.repository.Repository; +
+ + + import sonia.scm.security.SessionId; +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; +
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; +
+ + + import { PullRequest } from "./types/PullRequest"; +
+ + + import { useTranslation } from "react-i18next"; +
+ + + +
+ + + type HandlerProps = { +
+ + + url: string; +
+
+
+ + + pullRequest: setEvent +
+ + + }); +
+ + + }, [url]); +
+ + + const { t } = useTranslation("plugins"); +
+ + + if (event) { +
+ + + return ( +
+ + + <Toast type="warning" title="New Changes"> +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> +
+ + + <p>Warning: Non saved modification will be lost.</p> +
+ + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> +
+ + + <p>{t("scm-review-plugin.changeNotification.description")}</p> +
+ + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> +
+ + + <ToastButtons> +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> +
+ + + <ToastButton icon="redo" onClick={reload}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.reload")} +
+ + + </ToastButton> +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> +
+ + + {t("scm-review-plugin.changeNotification.buttons.ignore")} +
+ + + </ToastButton> +
+ + + </ToastButtons> +
+ + + </Toast> +
+ + + ); +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "Neue Änderungen", +
+ + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + "buttons": { +
+ + + "reload": "Neu laden", +
+ + + "ignore": "Ignorieren" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." +
+ + + } +
+ + + } +
+ + + }, +
+ + + "changeNotification": { +
+ + + "title": "New Changes", +
+ + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + "buttons": { +
+ + + "reload": "Reload", +
+ + + "ignore": "Ignore" +
+ + + } +
+ + + } +
+ + + }, +
+ + + "permissions": { +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; +
+ + + import org.mockito.junit.jupiter.MockitoExtension; +
+ + + import sonia.scm.security.SessionId; +
+ + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; +
+ + + import javax.ws.rs.sse.SseEventSink; +
+ + + +
+ + + import java.time.Clock; +
+ + + import java.time.Instant; +
+ + + import java.time.LocalDateTime; +
+ + + import java.time.ZoneOffset; +
+ + + import java.time.temporal.ChronoField; +
+ + + import java.time.temporal.ChronoUnit; +
+ + + import java.time.temporal.TemporalField; +
+ + + import java.util.concurrent.CompletableFuture; +
+ + + import java.util.concurrent.CompletionStage; +
+ + + import java.util.concurrent.atomic.AtomicLong; +
+ + + import java.util.concurrent.atomic.AtomicReference; +
+ + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; +
+
+
+ + + +
+ + + @Test +
+ + + @SuppressWarnings("unchecked") +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { +
+ + + void shouldCloseEventSinkOnFailure() { +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { +
+ + + throw new RuntimeException("failed to send message"); +
+ + + }); +
+
+
+ + + +
+ + + client.send(message); +
+ + + +
+ + + Thread.sleep(50L); +
+ + + +
+ + + verify(eventSink).close(); +
+ + + verify(eventSink, timeout(50L)).close(); +
+ + + } +
+ + + +
+ + + @Test +
+
+
, +] +`; + +exports[`Storyshots Diff Side-By-Side 1`] = ` +Array [ +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/events/EventListener.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + package com.cloudogu.scm.review.events; + + + + + package com.cloudogu.scm.review.events; + +
+ + + + + + + + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicComment; + + + +
+ + + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + + + +
+ + + import com.cloudogu.scm.review.comment.service.CommentEvent; + + + +
+ + + import com.cloudogu.scm.review.comment.service.ReplyEvent; + + + +
+ + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + + + + + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + + + + + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + +
+ + + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + + + +
+ + + import com.github.legman.Subscribe; + + + + + import com.github.legman.Subscribe; + +
+ + + import lombok.Data; + + + +
+ + + import org.apache.shiro.SecurityUtils; + + + + + import org.apache.shiro.SecurityUtils; + +
+ + + import org.apache.shiro.subject.PrincipalCollection; + + + + + import org.apache.shiro.subject.PrincipalCollection; + +
+ + + import org.apache.shiro.subject.Subject; + + + + + import org.apache.shiro.subject.Subject; + +
+ + + import sonia.scm.EagerSingleton; + + + + + import sonia.scm.EagerSingleton; + +
+ + + import sonia.scm.HandlerEventType; + + + +
+ + + import sonia.scm.event.HandlerEvent; + + + +
+ + + import sonia.scm.plugin.Extension; + + + + + import sonia.scm.plugin.Extension; + +
+ + + import sonia.scm.repository.Repository; + + + + + import sonia.scm.repository.Repository; + +
+ + + import sonia.scm.security.SessionId; + + + + + import sonia.scm.security.SessionId; + +
+
+
, +
+
+
+
+ + + src/main/js/ChangeNotification.tsx + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import { Link } from "@scm-manager/ui-types"; + + + + + import { Link } from "@scm-manager/ui-types"; + +
+ + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + + + + + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + +
+ + + import { PullRequest } from "./types/PullRequest"; + + + + + import { PullRequest } from "./types/PullRequest"; + +
+ + + + + import { useTranslation } from "react-i18next"; + +
+ + + + + + + + + +
+ + + type HandlerProps = { + + + + + type HandlerProps = { + +
+ + + url: string; + + + + + url: string; + +
+
+
+ + + pullRequest: setEvent + + + + + pullRequest: setEvent + +
+ + + }); + + + + + }); + +
+ + + }, [url]); + + + + + }, [url]); + +
+ + + + + const { t } = useTranslation("plugins"); + +
+ + + if (event) { + + + + + if (event) { + +
+ + + return ( + + + + + return ( + +
+ + + <Toast type="warning" title="New Changes"> + + + +
+ + + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + + + +
+ + + <p>Warning: Non saved modification will be lost.</p> + + + + + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + +
+ + + + + <p>{t("scm-review-plugin.changeNotification.description")}</p> + +
+ + + + + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + +
+ + + <ToastButtons> + + + + + <ToastButtons> + +
+ + + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + + + +
+ + + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + + + + + <ToastButton icon="redo" onClick={reload}> + +
+ + + + + {t("scm-review-plugin.changeNotification.buttons.reload")} + +
+ + + + + </ToastButton> + +
+ + + + + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + +
+ + + + + {t("scm-review-plugin.changeNotification.buttons.ignore")} + +
+ + + + + </ToastButton> + +
+ + + </ToastButtons> + + + + + </ToastButtons> + +
+ + + </Toast> + + + + + </Toast> + +
+ + + ); + + + + + ); + +
+
+
, +
+
+
+
+ + + src/main/resources/locales/de/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + + + + + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + +
+ + + } + + + + + } + +
+ + + } + + + + + } + +
+ + + + + }, + +
+ + + + + "changeNotification": { + +
+ + + + + "title": "Neue Änderungen", + +
+ + + + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + +
+ + + + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + +
+ + + + + "buttons": { + +
+ + + + + "reload": "Neu laden", + +
+ + + + + "ignore": "Ignorieren" + +
+ + + + + } + +
+ + + } + + + + + } + +
+ + + }, + + + + + }, + +
+ + + "permissions": { + + + + + "permissions": { + +
+
+
, +
+
+
+
+ + + src/main/resources/locales/en/plugins.json + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + + + + + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + +
+ + + } + + + + + } + +
+ + + } + + + + + } + +
+ + + + + }, + +
+ + + + + "changeNotification": { + +
+ + + + + "title": "New Changes", + +
+ + + + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + +
+ + + + + "modificationWarning": "Warning: Non saved modification will be lost.", + +
+ + + + + "buttons": { + +
+ + + + + "reload": "Reload", + +
+ + + + + "ignore": "Ignore" + +
+ + + + + } + +
+ + + } + + + + + } + +
+ + + }, + + + + + }, + +
+ + + "permissions": { + + + + + "permissions": { + +
+
+
, +
+
+
+
+ + + src/test/java/com/cloudogu/scm/review/events/ClientTest.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + import org.mockito.Mock; + + + + + import org.mockito.Mock; + +
+ + + import org.mockito.junit.jupiter.MockitoExtension; + + + + + import org.mockito.junit.jupiter.MockitoExtension; + +
+ + + import sonia.scm.security.SessionId; + + + + + import sonia.scm.security.SessionId; + +
+ + + + + + +
+ + + import javax.ws.rs.sse.OutboundSseEvent; + + + + + import javax.ws.rs.sse.OutboundSseEvent; + +
+ + + import javax.ws.rs.sse.SseEventSink; + + + + + import javax.ws.rs.sse.SseEventSink; + +
+ + + + + + +
+ + + import java.time.Clock; + + + + + import java.time.Clock; + +
+ + + import java.time.Instant; + + + + + import java.time.Instant; + +
+ + + import java.time.LocalDateTime; + + + + + import java.time.LocalDateTime; + +
+ + + import java.time.ZoneOffset; + + + + + import java.time.ZoneOffset; + +
+ + + import java.time.temporal.ChronoField; + + + + + import java.time.temporal.ChronoField; + +
+ + + import java.time.temporal.ChronoUnit; + + + +
+ + + import java.time.temporal.TemporalField; + + + +
+ + + import java.util.concurrent.CompletableFuture; + + + + + import java.util.concurrent.CompletableFuture; + +
+ + + import java.util.concurrent.CompletionStage; + + + + + import java.util.concurrent.CompletionStage; + +
+ + + import java.util.concurrent.atomic.AtomicLong; + + + +
+ + + import java.util.concurrent.atomic.AtomicReference; + + + + + import java.util.concurrent.atomic.AtomicReference; + +
+ + + + + + + + + +
+ + + import static java.time.temporal.ChronoUnit.MINUTES; + + + + + import static java.time.temporal.ChronoUnit.MINUTES; + +
+
+
+ + + + + + + + + +
+ + + @Test + + + + + @Test + +
+ + + @SuppressWarnings("unchecked") + + + + + @SuppressWarnings("unchecked") + +
+ + + void shouldCloseEventSinkOnFailure() throws InterruptedException { + + + + + void shouldCloseEventSinkOnFailure() { + +
+ + + CompletionStage future = CompletableFuture.supplyAsync(() -> { + + + + + CompletionStage future = CompletableFuture.supplyAsync(() -> { + +
+ + + throw new RuntimeException("failed to send message"); + + + + + throw new RuntimeException("failed to send message"); + +
+ + + }); + + + + + }); + +
+
+
+ + + + + + + + + +
+ + + client.send(message); + + + + + client.send(message); + +
+ + + + + + + + + +
+ + + Thread.sleep(50L); + + + +
+ + + + + + +
+ + + verify(eventSink).close(); + + + + + verify(eventSink, timeout(50L)).close(); + +
+ + + } + + + + + } + +
+ + + + + + + + + +
+ + + @Test + + + + + @Test + +
+
+
, +] +`; + exports[`Storyshots Forms|Checkbox Default 1`] = `
) .add("File Controls", () => } />) .add("File Annotation", () => ( - [

Custom File annotation for {file.newPath}

]} /> + [

Custom File annotation for {file.newPath}

]} + /> )) .add("Line Annotation", () => ( { return { - N2: [

Line Annotation

] + N2:

Line Annotation

}; }} /> diff --git a/scm-ui/ui-components/src/storyshots.test.ts b/scm-ui/ui-components/src/storyshots.test.ts index ee4e34653e..2843046f99 100644 --- a/scm-ui/ui-components/src/storyshots.test.ts +++ b/scm-ui/ui-components/src/storyshots.test.ts @@ -1,6 +1,22 @@ import path from "path"; -import initStoryshots from "@storybook/addon-storyshots"; +import initStoryshots, { snapshotWithOptions } from "@storybook/addon-storyshots"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const createNodeMock = (element: any) => { + if (element.type === "tr") { + return { + // eslint-disable-next-line @typescript-eslint/no-empty-function + querySelector: (selector: string) => {} + }; + } + return null; +}; initStoryshots({ - configPath: path.resolve(__dirname, "..", ".storybook") + configPath: path.resolve(__dirname, "..", ".storybook"), + // fix snapshot tests with react-diff-view which uses a ref on tr + // @see https://github.com/storybookjs/storybook/pull/1090 + test: snapshotWithOptions({ + createNodeMock + }) }); From cc26ffcaa8f27a1bb0a5fdf7dd06ee6a621fefe7 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 6 Jan 2020 15:59:16 +0100 Subject: [PATCH 16/38] upgrade react-diff-view to v2.4.1 --- scm-ui/ui-components/package.json | 5 +- .../src/__snapshots__/storyshots.test.ts.snap | 12114 +++++++++++----- scm-ui/ui-components/src/repos/DiffFile.tsx | 26 +- scm-ui/ui-components/src/repos/DiffTypes.ts | 4 + .../ui-components/src/repos/LoadingDiff.tsx | 11 +- scm-ui/ui-styles/package.json | 2 +- scm-ui/ui-styles/src/scm.scss | 2 +- yarn.lock | 136 +- 8 files changed, 8368 insertions(+), 3932 deletions(-) diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 9bf3c8381f..1e3648dbab 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -50,13 +50,14 @@ "event-source-polyfill": "^1.0.9", "query-string": "5", "react": "^16.8.6", - "react-diff-view": "^1.8.1", + "react-diff-view": "^2.4.1", "react-dom": "^16.8.6", "react-i18next": "^10.13.1", "react-markdown": "^4.0.6", "react-router-dom": "^5.1.2", "react-select": "^2.1.2", - "react-syntax-highlighter": "^11.0.2" + "react-syntax-highlighter": "^11.0.2", + "gitdiff-parser": "^0.1.2" }, "babel": { "presets": [ diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 009fe0cd21..2c065b4394 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -704,7 +704,7 @@ Array [ className="panel-block is-paddingless" > @@ -724,14 +724,22 @@ Array [ > @@ -741,16 +749,24 @@ Array [ > @@ -774,13 +797,20 @@ Array [ > @@ -790,13 +820,20 @@ Array [ > @@ -806,13 +843,20 @@ Array [ > @@ -822,14 +866,22 @@ Array [ > @@ -839,14 +891,22 @@ Array [ > @@ -856,13 +916,20 @@ Array [ > @@ -872,14 +939,22 @@ Array [ > @@ -889,13 +964,20 @@ Array [ > @@ -905,14 +987,22 @@ Array [ > @@ -922,14 +1012,22 @@ Array [ > @@ -939,14 +1037,22 @@ Array [ > @@ -956,14 +1062,22 @@ Array [ > @@ -973,13 +1087,20 @@ Array [ > @@ -989,13 +1110,20 @@ Array [ > @@ -1005,14 +1133,22 @@ Array [ > @@ -1022,14 +1158,22 @@ Array [ > @@ -1039,14 +1183,22 @@ Array [ > @@ -1118,7 +1270,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import sonia.scm.security.SessionId;
@@ -1138,14 +1290,22 @@ Array [ > @@ -1155,14 +1315,22 @@ Array [ > @@ -1172,14 +1340,22 @@ Array [ > @@ -1189,13 +1365,20 @@ Array [ > @@ -1205,16 +1388,24 @@ Array [ > @@ -1239,14 +1438,22 @@ Array [ > @@ -1255,31 +1462,27 @@ Array [ - - - @@ -1289,14 +1492,22 @@ Array [ > @@ -1306,14 +1517,22 @@ Array [ > @@ -1323,13 +1542,20 @@ Array [ > @@ -1339,14 +1565,22 @@ Array [ > @@ -1356,14 +1590,22 @@ Array [ > @@ -1373,13 +1615,20 @@ Array [ > @@ -1389,13 +1638,20 @@ Array [ > @@ -1405,13 +1661,20 @@ Array [ > @@ -1421,13 +1684,20 @@ Array [ > @@ -1437,13 +1707,20 @@ Array [ > @@ -1453,13 +1730,20 @@ Array [ > @@ -1469,14 +1753,22 @@ Array [ > @@ -1486,13 +1778,20 @@ Array [ > @@ -1502,13 +1801,20 @@ Array [ > @@ -1518,13 +1824,20 @@ Array [ > @@ -1534,13 +1847,20 @@ Array [ > @@ -1550,13 +1870,20 @@ Array [ > @@ -1566,13 +1893,20 @@ Array [ > @@ -1582,13 +1916,20 @@ Array [ > @@ -1598,13 +1939,20 @@ Array [ > @@ -1614,14 +1962,22 @@ Array [ > @@ -1631,14 +1987,22 @@ Array [ > @@ -1648,14 +2012,22 @@ Array [ > @@ -1727,7 +2099,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import { useTranslation } from "react-i18next"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + url: string;
-
-
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + pullRequest: setEvent + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + }, [url]); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + const { t } = useTranslation("plugins"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + <p>{t("scm-review-plugin.changeNotification.description")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + <ToastButton icon="redo" onClick={reload}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + {t("scm-review-plugin.changeNotification.buttons.reload")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + {t("scm-review-plugin.changeNotification.buttons.ignore")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + );
@@ -1747,14 +2119,22 @@ Array [ > @@ -1764,14 +2144,22 @@ Array [ > @@ -1781,14 +2169,22 @@ Array [ > @@ -1798,13 +2194,20 @@ Array [ > @@ -1814,13 +2217,20 @@ Array [ > @@ -1830,13 +2240,20 @@ Array [ > @@ -1846,13 +2263,20 @@ Array [ > @@ -1862,13 +2286,20 @@ Array [ > @@ -1878,13 +2309,20 @@ Array [ > @@ -1894,13 +2332,20 @@ Array [ > @@ -1910,13 +2355,20 @@ Array [ > @@ -1926,13 +2378,20 @@ Array [ > @@ -1942,14 +2401,22 @@ Array [ > @@ -1959,14 +2426,22 @@ Array [ > @@ -1976,14 +2451,22 @@ Array [ > @@ -2055,7 +2538,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "Neue Änderungen", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Neu laden", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignorieren" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -2075,14 +2558,22 @@ Array [ > @@ -2092,14 +2583,22 @@ Array [ > @@ -2109,14 +2608,22 @@ Array [ > @@ -2126,13 +2633,20 @@ Array [ > @@ -2142,13 +2656,20 @@ Array [ > @@ -2158,13 +2679,20 @@ Array [ > @@ -2174,13 +2702,20 @@ Array [ > @@ -2190,13 +2725,20 @@ Array [ > @@ -2206,13 +2748,20 @@ Array [ > @@ -2222,13 +2771,20 @@ Array [ > @@ -2238,13 +2794,20 @@ Array [ > @@ -2254,13 +2817,20 @@ Array [ > @@ -2270,14 +2840,22 @@ Array [ > @@ -2287,14 +2865,22 @@ Array [ > @@ -2304,14 +2890,22 @@ Array [ > @@ -2383,7 +2977,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "New Changes", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warning: Non saved modification will be lost.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Reload", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignore" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -2403,14 +2997,22 @@ Array [ > @@ -2420,14 +3022,22 @@ Array [ > @@ -2437,14 +3047,22 @@ Array [ > @@ -2454,15 +3072,22 @@ Array [ > @@ -2487,14 +3120,22 @@ Array [ > @@ -2504,15 +3145,22 @@ Array [ > @@ -2537,14 +3193,22 @@ Array [ > @@ -2554,14 +3218,22 @@ Array [ > @@ -2571,14 +3243,22 @@ Array [ > @@ -2588,14 +3268,22 @@ Array [ > @@ -2605,13 +3293,20 @@ Array [ > @@ -2621,13 +3316,20 @@ Array [ > @@ -2637,14 +3339,22 @@ Array [ > @@ -2654,14 +3364,22 @@ Array [ > @@ -2671,13 +3389,20 @@ Array [ > @@ -2687,14 +3412,22 @@ Array [ > @@ -2704,16 +3437,24 @@ Array [ > @@ -2738,15 +3487,28 @@ Array [ className="diff-hunk" > + + - - @@ -2788,14 +3541,22 @@ Array [ > @@ -2805,13 +3566,20 @@ Array [ > @@ -2821,13 +3589,20 @@ Array [ > @@ -2837,14 +3612,22 @@ Array [ > @@ -2854,14 +3637,22 @@ Array [ > @@ -2871,14 +3662,22 @@ Array [ > @@ -2888,15 +3687,28 @@ Array [ className="diff-hunk" > + + - - @@ -2938,16 +3741,24 @@ Array [ > @@ -2971,15 +3789,22 @@ Array [ > @@ -3003,13 +3835,20 @@ Array [ > @@ -3019,14 +3858,22 @@ Array [ > @@ -3036,16 +3883,24 @@ Array [ > @@ -3141,7 +4004,7 @@ Array [ src/main/java/com/cloudogu/scm/review/events/EventListener.java

+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ 80 + +
- - - + 84
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 82 + @SuppressWarnings("unchecked") + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + void shouldCloseEventSinkOnFailure() { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + });
-
+ 91 +
+ 88 + +
- - - + 92
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 90 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + verify(eventSink, timeout(50L)).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + @Test
@@ -3161,14 +4024,22 @@ Array [ > @@ -3178,16 +4049,24 @@ Array [ > @@ -3211,13 +4097,20 @@ Array [ > @@ -3227,13 +4120,20 @@ Array [ > @@ -3243,13 +4143,20 @@ Array [ > @@ -3259,14 +4166,22 @@ Array [ > @@ -3276,14 +4191,22 @@ Array [ > @@ -3293,13 +4216,20 @@ Array [ > @@ -3309,14 +4239,22 @@ Array [ > @@ -3326,13 +4264,20 @@ Array [ > @@ -3342,14 +4287,22 @@ Array [ > @@ -3359,14 +4312,22 @@ Array [ > @@ -3376,14 +4337,22 @@ Array [ > @@ -3393,14 +4362,22 @@ Array [ > @@ -3410,13 +4387,20 @@ Array [ > @@ -3426,13 +4410,20 @@ Array [ > @@ -3442,14 +4433,22 @@ Array [ > @@ -3459,14 +4458,22 @@ Array [ > @@ -3476,14 +4483,22 @@ Array [ > @@ -3559,7 +4574,7 @@ Array [ src/main/js/ChangeNotification.tsx

+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import sonia.scm.security.SessionId;
@@ -3579,14 +4594,22 @@ Array [ > @@ -3596,14 +4619,22 @@ Array [ > @@ -3613,14 +4644,22 @@ Array [ > @@ -3630,13 +4669,20 @@ Array [ > @@ -3646,16 +4692,24 @@ Array [ > @@ -3680,14 +4742,22 @@ Array [ > @@ -3696,31 +4766,27 @@ Array [ - - - @@ -3730,14 +4796,22 @@ Array [ > @@ -3747,14 +4821,22 @@ Array [ > @@ -3764,13 +4846,20 @@ Array [ > @@ -3780,14 +4869,22 @@ Array [ > @@ -3797,14 +4894,22 @@ Array [ > @@ -3814,13 +4919,20 @@ Array [ > @@ -3830,13 +4942,20 @@ Array [ > @@ -3846,13 +4965,20 @@ Array [ > @@ -3862,13 +4988,20 @@ Array [ > @@ -3878,13 +5011,20 @@ Array [ > @@ -3894,13 +5034,20 @@ Array [ > @@ -3910,14 +5057,22 @@ Array [ > @@ -3927,13 +5082,20 @@ Array [ > @@ -3943,13 +5105,20 @@ Array [ > @@ -3959,13 +5128,20 @@ Array [ > @@ -3975,13 +5151,20 @@ Array [ > @@ -3991,13 +5174,20 @@ Array [ > @@ -4007,13 +5197,20 @@ Array [ > @@ -4023,13 +5220,20 @@ Array [ > @@ -4039,13 +5243,20 @@ Array [ > @@ -4055,14 +5266,22 @@ Array [ > @@ -4072,14 +5291,22 @@ Array [ > @@ -4089,14 +5316,22 @@ Array [ > @@ -4172,7 +5407,7 @@ Array [ src/main/resources/locales/de/plugins.json

+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import { useTranslation } from "react-i18next"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + url: string;
-
-
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + pullRequest: setEvent + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + }, [url]); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + const { t } = useTranslation("plugins"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + <p>{t("scm-review-plugin.changeNotification.description")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + <ToastButton icon="redo" onClick={reload}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + {t("scm-review-plugin.changeNotification.buttons.reload")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + {t("scm-review-plugin.changeNotification.buttons.ignore")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + );
@@ -4192,14 +5427,22 @@ Array [ > @@ -4209,14 +5452,22 @@ Array [ > @@ -4226,14 +5477,22 @@ Array [ > @@ -4243,13 +5502,20 @@ Array [ > @@ -4259,13 +5525,20 @@ Array [ > @@ -4275,13 +5548,20 @@ Array [ > @@ -4291,13 +5571,20 @@ Array [ > @@ -4307,13 +5594,20 @@ Array [ > @@ -4323,13 +5617,20 @@ Array [ > @@ -4339,13 +5640,20 @@ Array [ > @@ -4355,13 +5663,20 @@ Array [ > @@ -4371,13 +5686,20 @@ Array [ > @@ -4387,14 +5709,22 @@ Array [ > @@ -4404,14 +5734,22 @@ Array [ > @@ -4421,14 +5759,22 @@ Array [ > @@ -4504,7 +5850,7 @@ Array [ src/main/resources/locales/en/plugins.json

+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "Neue Änderungen", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Neu laden", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignorieren" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -4524,14 +5870,22 @@ Array [ > @@ -4541,14 +5895,22 @@ Array [ > @@ -4558,14 +5920,22 @@ Array [ > @@ -4575,13 +5945,20 @@ Array [ > @@ -4591,13 +5968,20 @@ Array [ > @@ -4607,13 +5991,20 @@ Array [ > @@ -4623,13 +6014,20 @@ Array [ > @@ -4639,13 +6037,20 @@ Array [ > @@ -4655,13 +6060,20 @@ Array [ > @@ -4671,13 +6083,20 @@ Array [ > @@ -4687,13 +6106,20 @@ Array [ > @@ -4703,13 +6129,20 @@ Array [ > @@ -4719,14 +6152,22 @@ Array [ > @@ -4736,14 +6177,22 @@ Array [ > @@ -4753,14 +6202,22 @@ Array [ > @@ -4836,7 +6293,7 @@ Array [ src/test/java/com/cloudogu/scm/review/events/ClientTest.java

+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "New Changes", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warning: Non saved modification will be lost.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Reload", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignore" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -4856,14 +6313,22 @@ Array [ > @@ -4873,14 +6338,22 @@ Array [ > @@ -4890,14 +6363,22 @@ Array [ > @@ -4907,15 +6388,22 @@ Array [ > @@ -4940,14 +6436,22 @@ Array [ > @@ -4957,15 +6461,22 @@ Array [ > @@ -4990,14 +6509,22 @@ Array [ > @@ -5007,14 +6534,22 @@ Array [ > @@ -5024,14 +6559,22 @@ Array [ > @@ -5041,14 +6584,22 @@ Array [ > @@ -5058,13 +6609,20 @@ Array [ > @@ -5074,13 +6632,20 @@ Array [ > @@ -5090,14 +6655,22 @@ Array [ > @@ -5107,14 +6680,22 @@ Array [ > @@ -5124,13 +6705,20 @@ Array [ > @@ -5140,14 +6728,22 @@ Array [ > @@ -5157,16 +6753,24 @@ Array [ > @@ -5191,15 +6803,28 @@ Array [ className="diff-hunk" > + + - - @@ -5241,14 +6857,22 @@ Array [ > @@ -5258,13 +6882,20 @@ Array [ > @@ -5274,13 +6905,20 @@ Array [ > @@ -5290,14 +6928,22 @@ Array [ > @@ -5307,14 +6953,22 @@ Array [ > @@ -5324,14 +6978,22 @@ Array [ > @@ -5341,15 +7003,28 @@ Array [ className="diff-hunk" > + + - - @@ -5391,16 +7057,24 @@ Array [ > @@ -5424,15 +7105,22 @@ Array [ > @@ -5456,13 +7151,20 @@ Array [ > @@ -5472,14 +7174,22 @@ Array [ > @@ -5489,16 +7199,24 @@ Array [ > @@ -5602,7 +7328,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ 80 + +
- - - + 84
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 82 + @SuppressWarnings("unchecked") + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + void shouldCloseEventSinkOnFailure() { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + });
-
+ 91 +
+ 88 + +
- - - + 92
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 90 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + verify(eventSink, timeout(50L)).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + @Test
@@ -5622,14 +7348,22 @@ Array [ > @@ -5639,16 +7373,24 @@ Array [ > @@ -5672,13 +7421,20 @@ Array [ > @@ -5688,13 +7444,20 @@ Array [ > @@ -5704,13 +7467,20 @@ Array [ > @@ -5720,14 +7490,22 @@ Array [ > @@ -5737,14 +7515,22 @@ Array [ > @@ -5754,13 +7540,20 @@ Array [ > @@ -5770,14 +7563,22 @@ Array [ > @@ -5787,13 +7588,20 @@ Array [ > @@ -5803,14 +7611,22 @@ Array [ > @@ -5820,14 +7636,22 @@ Array [ > @@ -5837,14 +7661,22 @@ Array [ > @@ -5854,14 +7686,22 @@ Array [ > @@ -5871,13 +7711,20 @@ Array [ > @@ -5887,13 +7734,20 @@ Array [ > @@ -5903,14 +7757,22 @@ Array [ > @@ -5920,14 +7782,22 @@ Array [ > @@ -5937,14 +7807,22 @@ Array [ > @@ -6028,7 +7906,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import sonia.scm.security.SessionId;
@@ -6048,14 +7926,22 @@ Array [ > @@ -6065,14 +7951,22 @@ Array [ > @@ -6082,14 +7976,22 @@ Array [ > @@ -6099,13 +8001,20 @@ Array [ > @@ -6115,16 +8024,24 @@ Array [ > @@ -6149,14 +8074,22 @@ Array [ > @@ -6165,31 +8098,27 @@ Array [ - - - @@ -6199,14 +8128,22 @@ Array [ > @@ -6216,14 +8153,22 @@ Array [ > @@ -6233,13 +8178,20 @@ Array [ > @@ -6249,14 +8201,22 @@ Array [ > @@ -6266,14 +8226,22 @@ Array [ > @@ -6283,13 +8251,20 @@ Array [ > @@ -6299,13 +8274,20 @@ Array [ > @@ -6315,13 +8297,20 @@ Array [ > @@ -6331,13 +8320,20 @@ Array [ > @@ -6347,13 +8343,20 @@ Array [ > @@ -6363,13 +8366,20 @@ Array [ > @@ -6379,14 +8389,22 @@ Array [ > @@ -6396,13 +8414,20 @@ Array [ > @@ -6412,13 +8437,20 @@ Array [ > @@ -6428,13 +8460,20 @@ Array [ > @@ -6444,13 +8483,20 @@ Array [ > @@ -6460,13 +8506,20 @@ Array [ > @@ -6476,13 +8529,20 @@ Array [ > @@ -6492,13 +8552,20 @@ Array [ > @@ -6508,13 +8575,20 @@ Array [ > @@ -6524,14 +8598,22 @@ Array [ > @@ -6541,14 +8623,22 @@ Array [ > @@ -6558,14 +8648,22 @@ Array [ > @@ -6649,7 +8747,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import { useTranslation } from "react-i18next"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + url: string;
-
-
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + pullRequest: setEvent + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + }, [url]); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + const { t } = useTranslation("plugins"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + <p>{t("scm-review-plugin.changeNotification.description")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + <ToastButton icon="redo" onClick={reload}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + {t("scm-review-plugin.changeNotification.buttons.reload")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + {t("scm-review-plugin.changeNotification.buttons.ignore")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + );
@@ -6669,14 +8767,22 @@ Array [ > @@ -6686,14 +8792,22 @@ Array [ > @@ -6703,14 +8817,22 @@ Array [ > @@ -6720,13 +8842,20 @@ Array [ > @@ -6736,13 +8865,20 @@ Array [ > @@ -6752,13 +8888,20 @@ Array [ > @@ -6768,13 +8911,20 @@ Array [ > @@ -6784,13 +8934,20 @@ Array [ > @@ -6800,13 +8957,20 @@ Array [ > @@ -6816,13 +8980,20 @@ Array [ > @@ -6832,13 +9003,20 @@ Array [ > @@ -6848,13 +9026,20 @@ Array [ > @@ -6864,14 +9049,22 @@ Array [ > @@ -6881,14 +9074,22 @@ Array [ > @@ -6898,14 +9099,22 @@ Array [ > @@ -6989,7 +9198,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "Neue Änderungen", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Neu laden", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignorieren" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -7009,14 +9218,22 @@ Array [ > @@ -7026,14 +9243,22 @@ Array [ > @@ -7043,14 +9268,22 @@ Array [ > @@ -7060,13 +9293,20 @@ Array [ > @@ -7076,13 +9316,20 @@ Array [ > @@ -7092,13 +9339,20 @@ Array [ > @@ -7108,13 +9362,20 @@ Array [ > @@ -7124,13 +9385,20 @@ Array [ > @@ -7140,13 +9408,20 @@ Array [ > @@ -7156,13 +9431,20 @@ Array [ > @@ -7172,13 +9454,20 @@ Array [ > @@ -7188,13 +9477,20 @@ Array [ > @@ -7204,14 +9500,22 @@ Array [ > @@ -7221,14 +9525,22 @@ Array [ > @@ -7238,14 +9550,22 @@ Array [ > @@ -7329,7 +9649,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "New Changes", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warning: Non saved modification will be lost.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Reload", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignore" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -7349,14 +9669,22 @@ Array [ > @@ -7366,14 +9694,22 @@ Array [ > @@ -7383,14 +9719,22 @@ Array [ > @@ -7400,15 +9744,22 @@ Array [ > @@ -7433,14 +9792,22 @@ Array [ > @@ -7450,15 +9817,22 @@ Array [ > @@ -7483,14 +9865,22 @@ Array [ > @@ -7500,14 +9890,22 @@ Array [ > @@ -7517,14 +9915,22 @@ Array [ > @@ -7534,14 +9940,22 @@ Array [ > @@ -7551,13 +9965,20 @@ Array [ > @@ -7567,13 +9988,20 @@ Array [ > @@ -7583,14 +10011,22 @@ Array [ > @@ -7600,14 +10036,22 @@ Array [ > @@ -7617,13 +10061,20 @@ Array [ > @@ -7633,14 +10084,22 @@ Array [ > @@ -7650,16 +10109,24 @@ Array [ > @@ -7684,15 +10159,28 @@ Array [ className="diff-hunk" > + + - - @@ -7734,14 +10213,22 @@ Array [ > @@ -7751,13 +10238,20 @@ Array [ > @@ -7767,13 +10261,20 @@ Array [ > @@ -7783,14 +10284,22 @@ Array [ > @@ -7800,14 +10309,22 @@ Array [ > @@ -7817,14 +10334,22 @@ Array [ > @@ -7834,15 +10359,28 @@ Array [ className="diff-hunk" > + + - - @@ -7884,16 +10413,24 @@ Array [ > @@ -7917,15 +10461,22 @@ Array [ > @@ -7949,13 +10507,20 @@ Array [ > @@ -7965,14 +10530,22 @@ Array [ > @@ -7982,16 +10555,24 @@ Array [ > @@ -8083,7 +10672,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ 80 + +
- - - + 84
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 82 + @SuppressWarnings("unchecked") + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + void shouldCloseEventSinkOnFailure() { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + });
-
+ 91 +
+ 88 + +
- - - + 92
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 90 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + verify(eventSink, timeout(50L)).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + @Test
@@ -8103,14 +10692,22 @@ Array [ > @@ -8120,16 +10717,24 @@ Array [ > @@ -8165,13 +10777,20 @@ Array [ > @@ -8181,13 +10800,20 @@ Array [ > @@ -8197,13 +10823,20 @@ Array [ > @@ -8213,14 +10846,22 @@ Array [ > @@ -8230,14 +10871,22 @@ Array [ > @@ -8247,13 +10896,20 @@ Array [ > @@ -8263,14 +10919,22 @@ Array [ > @@ -8280,13 +10944,20 @@ Array [ > @@ -8296,14 +10967,22 @@ Array [ > @@ -8313,14 +10992,22 @@ Array [ > @@ -8330,14 +11017,22 @@ Array [ > @@ -8347,14 +11042,22 @@ Array [ > @@ -8364,13 +11067,20 @@ Array [ > @@ -8380,13 +11090,20 @@ Array [ > @@ -8396,14 +11113,22 @@ Array [ > @@ -8413,14 +11138,22 @@ Array [ > @@ -8430,14 +11163,22 @@ Array [ > @@ -8509,7 +11250,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import sonia.scm.security.SessionId;
@@ -8529,14 +11270,22 @@ Array [ > @@ -8558,14 +11307,22 @@ Array [ > @@ -8575,14 +11332,22 @@ Array [ > @@ -8592,13 +11357,20 @@ Array [ > @@ -8608,16 +11380,24 @@ Array [ > @@ -8642,14 +11430,22 @@ Array [ > @@ -8658,31 +11454,27 @@ Array [ - - - @@ -8692,14 +11484,22 @@ Array [ > @@ -8709,14 +11509,22 @@ Array [ > @@ -8726,13 +11534,20 @@ Array [ > @@ -8742,14 +11557,22 @@ Array [ > @@ -8759,14 +11582,22 @@ Array [ > @@ -8776,13 +11607,20 @@ Array [ > @@ -8792,13 +11630,20 @@ Array [ > @@ -8808,13 +11653,20 @@ Array [ > @@ -8824,13 +11676,20 @@ Array [ > @@ -8840,13 +11699,20 @@ Array [ > @@ -8856,13 +11722,20 @@ Array [ > @@ -8872,14 +11745,22 @@ Array [ > @@ -8889,13 +11770,20 @@ Array [ > @@ -8905,13 +11793,20 @@ Array [ > @@ -8921,13 +11816,20 @@ Array [ > @@ -8937,13 +11839,20 @@ Array [ > @@ -8953,13 +11862,20 @@ Array [ > @@ -8969,13 +11885,20 @@ Array [ > @@ -8985,13 +11908,20 @@ Array [ > @@ -9001,13 +11931,20 @@ Array [ > @@ -9017,14 +11954,22 @@ Array [ > @@ -9034,14 +11979,22 @@ Array [ > @@ -9051,14 +12004,22 @@ Array [ > @@ -9130,7 +12091,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import { useTranslation } from "react-i18next"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + url: string;
-
-
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + pullRequest: setEvent + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + }, [url]); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + const { t } = useTranslation("plugins"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + <p>{t("scm-review-plugin.changeNotification.description")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + <ToastButton icon="redo" onClick={reload}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + {t("scm-review-plugin.changeNotification.buttons.reload")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + {t("scm-review-plugin.changeNotification.buttons.ignore")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + );
@@ -9150,14 +12111,22 @@ Array [ > @@ -9167,14 +12136,22 @@ Array [ > @@ -9184,14 +12161,22 @@ Array [ > @@ -9201,13 +12186,20 @@ Array [ > @@ -9217,13 +12209,20 @@ Array [ > @@ -9233,13 +12232,20 @@ Array [ > @@ -9249,13 +12255,20 @@ Array [ > @@ -9265,13 +12278,20 @@ Array [ > @@ -9281,13 +12301,20 @@ Array [ > @@ -9297,13 +12324,20 @@ Array [ > @@ -9313,13 +12347,20 @@ Array [ > @@ -9329,13 +12370,20 @@ Array [ > @@ -9345,14 +12393,22 @@ Array [ > @@ -9362,14 +12418,22 @@ Array [ > @@ -9379,14 +12443,22 @@ Array [ > @@ -9458,7 +12530,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "Neue Änderungen", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Neu laden", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignorieren" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -9478,14 +12550,22 @@ Array [ > @@ -9495,14 +12575,22 @@ Array [ > @@ -9512,14 +12600,22 @@ Array [ > @@ -9529,13 +12625,20 @@ Array [ > @@ -9545,13 +12648,20 @@ Array [ > @@ -9561,13 +12671,20 @@ Array [ > @@ -9577,13 +12694,20 @@ Array [ > @@ -9593,13 +12717,20 @@ Array [ > @@ -9609,13 +12740,20 @@ Array [ > @@ -9625,13 +12763,20 @@ Array [ > @@ -9641,13 +12786,20 @@ Array [ > @@ -9657,13 +12809,20 @@ Array [ > @@ -9673,14 +12832,22 @@ Array [ > @@ -9690,14 +12857,22 @@ Array [ > @@ -9707,14 +12882,22 @@ Array [ > @@ -9786,7 +12969,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "New Changes", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warning: Non saved modification will be lost.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Reload", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignore" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -9806,14 +12989,22 @@ Array [ > @@ -9823,14 +13014,22 @@ Array [ > @@ -9840,14 +13039,22 @@ Array [ > @@ -9857,15 +13064,22 @@ Array [ > @@ -9890,14 +13112,22 @@ Array [ > @@ -9907,15 +13137,22 @@ Array [ > @@ -9940,14 +13185,22 @@ Array [ > @@ -9957,14 +13210,22 @@ Array [ > @@ -9974,14 +13235,22 @@ Array [ > @@ -9991,14 +13260,22 @@ Array [ > @@ -10008,13 +13285,20 @@ Array [ > @@ -10024,13 +13308,20 @@ Array [ > @@ -10040,14 +13331,22 @@ Array [ > @@ -10057,14 +13356,22 @@ Array [ > @@ -10074,13 +13381,20 @@ Array [ > @@ -10090,14 +13404,22 @@ Array [ > @@ -10107,16 +13429,24 @@ Array [ > @@ -10141,15 +13479,28 @@ Array [ className="diff-hunk" > + + - - @@ -10191,14 +13533,22 @@ Array [ > @@ -10208,13 +13558,20 @@ Array [ > @@ -10224,13 +13581,20 @@ Array [ > @@ -10240,14 +13604,22 @@ Array [ > @@ -10257,14 +13629,22 @@ Array [ > @@ -10274,14 +13654,22 @@ Array [ > @@ -10291,15 +13679,28 @@ Array [ className="diff-hunk" > + + - - @@ -10341,16 +13733,24 @@ Array [ > @@ -10374,15 +13781,22 @@ Array [ > @@ -10406,13 +13827,20 @@ Array [ > @@ -10422,14 +13850,22 @@ Array [ > @@ -10439,16 +13875,24 @@ Array [ > @@ -10540,7 +13992,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ 80 + +
- - - + 84
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 82 + @SuppressWarnings("unchecked") + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + void shouldCloseEventSinkOnFailure() { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + });
-
+ 91 +
+ 88 + +
- - - + 92
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 90 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + verify(eventSink, timeout(50L)).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + @Test
@@ -10560,16 +14012,24 @@ Array [ > @@ -10579,18 +14039,26 @@ Array [ > @@ -10616,15 +14091,22 @@ Array [ > @@ -10634,15 +14116,22 @@ Array [ > @@ -10652,15 +14141,22 @@ Array [ > @@ -10670,16 +14166,24 @@ Array [ > @@ -10689,16 +14193,24 @@ Array [ > @@ -10708,15 +14220,22 @@ Array [ > @@ -10726,16 +14245,24 @@ Array [ > @@ -10745,15 +14272,22 @@ Array [ > @@ -10763,16 +14297,24 @@ Array [ > @@ -10782,16 +14324,24 @@ Array [ > @@ -10801,16 +14351,24 @@ Array [ > @@ -10820,16 +14378,24 @@ Array [ > @@ -10839,15 +14405,22 @@ Array [ > @@ -10857,15 +14430,22 @@ Array [ > @@ -10875,16 +14455,24 @@ Array [ > @@ -10894,16 +14482,24 @@ Array [ > @@ -10913,16 +14509,24 @@ Array [ > @@ -10994,7 +14598,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import sonia.scm.security.SessionId;
@@ -11014,16 +14618,24 @@ Array [ > @@ -11033,16 +14645,24 @@ Array [ > @@ -11052,16 +14672,24 @@ Array [ > @@ -11072,14 +14700,21 @@ Array [ @@ -11089,18 +14724,26 @@ Array [ > @@ -11127,16 +14778,24 @@ Array [ > @@ -11145,33 +14804,29 @@ Array [ - - - @@ -11181,16 +14836,24 @@ Array [ > @@ -11200,16 +14863,24 @@ Array [ > @@ -11220,14 +14891,21 @@ Array [ @@ -11237,16 +14915,24 @@ Array [ > @@ -11256,16 +14942,24 @@ Array [ > @@ -11275,15 +14969,22 @@ Array [ > @@ -11293,15 +14994,22 @@ Array [ > @@ -11311,15 +15019,22 @@ Array [ > @@ -11330,14 +15045,21 @@ Array [ @@ -11348,14 +15070,21 @@ Array [ @@ -11366,14 +15095,21 @@ Array [ @@ -11383,16 +15119,24 @@ Array [ > @@ -11402,15 +15146,22 @@ Array [ > @@ -11420,15 +15171,22 @@ Array [ > @@ -11439,14 +15197,21 @@ Array [ @@ -11457,14 +15222,21 @@ Array [ @@ -11475,14 +15247,21 @@ Array [ @@ -11493,14 +15272,21 @@ Array [ @@ -11511,14 +15297,21 @@ Array [ @@ -11529,14 +15322,21 @@ Array [ @@ -11546,16 +15346,24 @@ Array [ > @@ -11565,16 +15373,24 @@ Array [ > @@ -11584,16 +15400,24 @@ Array [ > @@ -11665,7 +15489,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + import { useTranslation } from "react-i18next"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + url: string;
-
-
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + pullRequest: setEvent + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + }, [url]); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + const { t } = useTranslation("plugins"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + <p>{t("scm-review-plugin.changeNotification.description")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + <ToastButton icon="redo" onClick={reload}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + {t("scm-review-plugin.changeNotification.buttons.reload")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + <ToastButton icon="times" onClick={() => setEvent(undefined)}> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + {t("scm-review-plugin.changeNotification.buttons.ignore")} + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + </ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + );
@@ -11685,16 +15509,24 @@ Array [ > @@ -11704,16 +15536,24 @@ Array [ > @@ -11723,16 +15563,24 @@ Array [ > @@ -11743,14 +15591,21 @@ Array [ @@ -11761,14 +15616,21 @@ Array [ @@ -11779,14 +15641,21 @@ Array [ @@ -11797,14 +15666,21 @@ Array [ @@ -11815,14 +15691,21 @@ Array [ @@ -11833,14 +15716,21 @@ Array [ @@ -11851,14 +15741,21 @@ Array [ @@ -11869,14 +15766,21 @@ Array [ @@ -11887,14 +15791,21 @@ Array [ @@ -11904,16 +15815,24 @@ Array [ > @@ -11923,16 +15842,24 @@ Array [ > @@ -11942,16 +15869,24 @@ Array [ > @@ -12023,7 +15958,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "Neue Änderungen", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Neu laden", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignorieren" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -12043,16 +15978,24 @@ Array [ > @@ -12062,16 +16005,24 @@ Array [ > @@ -12081,16 +16032,24 @@ Array [ > @@ -12101,14 +16060,21 @@ Array [ @@ -12119,14 +16085,21 @@ Array [ @@ -12137,14 +16110,21 @@ Array [ @@ -12155,14 +16135,21 @@ Array [ @@ -12173,14 +16160,21 @@ Array [ @@ -12191,14 +16185,21 @@ Array [ @@ -12209,14 +16210,21 @@ Array [ @@ -12227,14 +16235,21 @@ Array [ @@ -12245,14 +16260,21 @@ Array [ @@ -12262,16 +16284,24 @@ Array [ > @@ -12281,16 +16311,24 @@ Array [ > @@ -12300,16 +16338,24 @@ Array [ > @@ -12381,7 +16427,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + "changeNotification": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + "title": "New Changes", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 187 + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 188 + "modificationWarning": "Warning: Non saved modification will be lost.", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 189 + "buttons": { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 190 + "reload": "Reload", + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 191 + "ignore": "Ignore" + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 192 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 186 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 195 + "permissions": {
@@ -12401,16 +16447,24 @@ Array [ > @@ -12420,16 +16474,24 @@ Array [ > @@ -12439,16 +16501,24 @@ Array [ > @@ -12459,16 +16529,23 @@ Array [ @@ -12495,16 +16580,24 @@ Array [ > @@ -12514,17 +16607,24 @@ Array [ > @@ -12551,16 +16659,24 @@ Array [ > @@ -12570,16 +16686,24 @@ Array [ > @@ -12589,16 +16713,24 @@ Array [ > @@ -12608,16 +16740,24 @@ Array [ > @@ -12627,15 +16767,22 @@ Array [ > @@ -12645,15 +16792,22 @@ Array [ > @@ -12663,16 +16817,24 @@ Array [ > @@ -12682,16 +16844,24 @@ Array [ > @@ -12701,15 +16871,22 @@ Array [ > @@ -12719,16 +16896,24 @@ Array [ > @@ -12738,18 +16923,26 @@ Array [ > @@ -12776,15 +16977,30 @@ Array [ className="diff-hunk" > + + - - @@ -12830,16 +17035,24 @@ Array [ > @@ -12849,15 +17062,22 @@ Array [ > @@ -12868,14 +17088,21 @@ Array [ @@ -12885,16 +17112,24 @@ Array [ > @@ -12904,16 +17139,24 @@ Array [ > @@ -12923,16 +17166,24 @@ Array [ > @@ -12942,15 +17193,30 @@ Array [ className="diff-hunk" > + + - - @@ -12996,18 +17251,26 @@ Array [ > @@ -13033,17 +17303,24 @@ Array [ > @@ -13070,14 +17354,21 @@ Array [ @@ -13087,16 +17378,24 @@ Array [ > @@ -13106,18 +17405,26 @@ Array [ > @@ -13211,7 +17526,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ 80 + +
- - - + 84
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 82 + @SuppressWarnings("unchecked") + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + void shouldCloseEventSinkOnFailure() { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + });
-
+ 91 +
+ 88 + +
- - - + 92
- + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 90 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + verify(eventSink, timeout(50L)).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + @Test
@@ -13232,29 +17547,31 @@ Array [ > @@ -13838,7 +18185,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + - - package com.cloudogu.scm.review.events; - + package com.cloudogu.scm.review.events; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 1 + - - package com.cloudogu.scm.review.events; - + package com.cloudogu.scm.review.events;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + - - import com.cloudogu.scm.review.comment.service.BasicComment; - + import com.cloudogu.scm.review.comment.service.BasicComment; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + - - import com.cloudogu.scm.review.comment.service.BasicCommentEvent; - + import com.cloudogu.scm.review.comment.service.BasicCommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + - - import com.cloudogu.scm.review.comment.service.CommentEvent; - + import com.cloudogu.scm.review.comment.service.CommentEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - - import com.cloudogu.scm.review.comment.service.ReplyEvent; - + import com.cloudogu.scm.review.comment.service.ReplyEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; - + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + - - import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent; - + import com.cloudogu.scm.review.pullrequest.service.BasicPullRequestEvent;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + - - import com.cloudogu.scm.review.pullrequest.service.PullRequest; - + import com.cloudogu.scm.review.pullrequest.service.PullRequest; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + - - import com.cloudogu.scm.review.pullrequest.service.PullRequest; - + import com.cloudogu.scm.review.pullrequest.service.PullRequest;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + - - import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; - + import com.cloudogu.scm.review.pullrequest.service.PullRequestEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - - import com.github.legman.Subscribe; - + import com.github.legman.Subscribe; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + - - import com.github.legman.Subscribe; - + import com.github.legman.Subscribe;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + - - import lombok.Data; - + import lombok.Data; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - - import org.apache.shiro.SecurityUtils; - + import org.apache.shiro.SecurityUtils; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - - import org.apache.shiro.SecurityUtils; - + import org.apache.shiro.SecurityUtils;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + - - import org.apache.shiro.subject.PrincipalCollection; - + import org.apache.shiro.subject.PrincipalCollection; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - import org.apache.shiro.subject.PrincipalCollection; - + import org.apache.shiro.subject.PrincipalCollection;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + - - import org.apache.shiro.subject.Subject; - + import org.apache.shiro.subject.Subject; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + - - import org.apache.shiro.subject.Subject; - + import org.apache.shiro.subject.Subject;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + - - import sonia.scm.EagerSingleton; - + import sonia.scm.EagerSingleton; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + - - import sonia.scm.EagerSingleton; - + import sonia.scm.EagerSingleton;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + - - import sonia.scm.HandlerEventType; - + import sonia.scm.HandlerEventType; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + - - import sonia.scm.event.HandlerEvent; - + import sonia.scm.event.HandlerEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + - - import sonia.scm.plugin.Extension; - + import sonia.scm.plugin.Extension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - - import sonia.scm.plugin.Extension; - + import sonia.scm.plugin.Extension;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + - - import sonia.scm.repository.Repository; - + import sonia.scm.repository.Repository; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + - - import sonia.scm.repository.Repository; - + import sonia.scm.repository.Repository;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + - - import sonia.scm.security.SessionId; - + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - - import sonia.scm.security.SessionId; - + import sonia.scm.security.SessionId;
@@ -13859,29 +18206,31 @@ Array [ > @@ -14062,15 +18422,35 @@ Array [ className="diff-hunk" > + + + - - - - @@ -14723,7 +19104,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - - import { Link } from "@scm-manager/ui-types"; - + import { Link } from "@scm-manager/ui-types"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 2 + - - import { Link } from "@scm-manager/ui-types"; - + import { Link } from "@scm-manager/ui-types";
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + - - import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; - + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 3 + - - import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components"; - + import { apiClient, Toast, ToastButtons, ToastButton } from "@scm-manager/ui-components";
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + - - import { PullRequest } from "./types/PullRequest"; - + import { PullRequest } from "./types/PullRequest"; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 4 + - - import { PullRequest } from "./types/PullRequest"; - + import { PullRequest } from "./types/PullRequest";
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + - - import { useTranslation } from "react-i18next"; - + import { useTranslation } from "react-i18next";
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 5 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 6 + - - type HandlerProps = { - + type HandlerProps = { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - type HandlerProps = { - + type HandlerProps = {
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - url: string; - + url: string; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + - - url: string; - + url: string;
-
+ 15 +
+ pullRequest: setEvent + + 16 + + pullRequest: setEvent
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + - - pullRequest: setEvent - + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + - - pullRequest: setEvent - + });
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + - - }); - + }, [url]); - - - }); - -
- - - }, [url]); - + 18 - - }, [url]); - + }, [url]);
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + - - const { t } = useTranslation("plugins"); - + const { t } = useTranslation("plugins");
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + - - if (event) { - + if (event) { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + - - if (event) { - + if (event) {
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + - - return ( - + return ( + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - - return ( - + return (
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + - - <Toast type="warning" title="New Changes"> - + <Toast type="warning" title="New Changes"> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - - <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> - + <p>The underlying Pull-Request has changed. Press reload to see the changes.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + - - <p>Warning: Non saved modification will be lost.</p> - + <p>Warning: Non saved modification will be lost.</p> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + - - <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}> - + <Toast type="warning" title={t("scm-review-plugin.changeNotification.title")}>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + - - <p>{t("scm-review-plugin.changeNotification.description")}</p> - + <p>{t("scm-review-plugin.changeNotification.description")}</p>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + - - <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p> - + <p>{t("scm-review-plugin.changeNotification.modificationWarning")}</p>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + - - <ToastButtons> - + <ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + - - <ToastButtons> - + <ToastButtons>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + - - <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> - + <ToastButton icon="redo" onClick={reload}>Reload</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + - - <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> - + <ToastButton icon="times" onClick={() => setEvent(undefined)}>Ignore</ToastButton> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + - - <ToastButton icon="redo" onClick={reload}> - + <ToastButton icon="redo" onClick={reload}>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + - - {t("scm-review-plugin.changeNotification.buttons.reload")} - + {t("scm-review-plugin.changeNotification.buttons.reload")}
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + - - </ToastButton> - + </ToastButton>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 29 + - - <ToastButton icon="times" onClick={() => setEvent(undefined)}> - + <ToastButton icon="times" onClick={() => setEvent(undefined)}>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 30 + - - {t("scm-review-plugin.changeNotification.buttons.ignore")} - + {t("scm-review-plugin.changeNotification.buttons.ignore")}
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 31 + - - </ToastButton> - + </ToastButton>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 26 + - - </ToastButtons> - + </ToastButtons> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 32 + - - </ToastButtons> - + </ToastButtons>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 27 + - - </Toast> - + </Toast> + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 33 + - - </Toast> - + </Toast>
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 28 + - - ); - + ); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 34 + - - ); - + );
@@ -14744,29 +19125,31 @@ Array [ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15193,7 +19595,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + - - "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." - + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + - - "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen." - + "titleClickable": "Der Kommentar bezieht sich auf eine ältere Version des Source- oder Target-Branches. Klicken Sie hier, um den ursprünglichen Kontext zu sehen."
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + - - } - + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + - - } - + }
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + - - } - - - - - } - -
- - - - - }, - -
- - - - - "changeNotification": { - -
- - - - - "title": "Neue Änderungen", - -
- - - - - "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", - -
- - - - - "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", - -
- - - - - "buttons": { - -
- - - - - "reload": "Neu laden", - -
- - - - - "ignore": "Ignorieren" - -
- - - - - } - -
- - } - + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + } +
+ + + 184 + + }, +
+ + + 185 + + "changeNotification": { +
+ + + 186 + + "title": "Neue Änderungen", +
+ + + 187 + + "description": "An diesem Pull Request wurden Änderungen vorgenommen. Laden Sie die Seite neu um diese anzuzeigen.", +
+ + + 188 + + "modificationWarning": "Warnung: Nicht gespeicherte Eingaben gehen verloren.", +
+ + + 189 + + "buttons": { +
+ + + 190 + + "reload": "Neu laden", +
+ + + 191 + + "ignore": "Ignorieren" +
+ + + 192 + - } -
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + - - }, - + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + - - }, - + }
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + - - "permissions": { - + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + - - "permissions": { - + }, +
+ 186 + + "permissions": { + + 195 + + "permissions": {
@@ -15214,29 +19616,31 @@ Array [ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15663,7 +20086,7 @@ Array [ className="panel-block is-paddingless" >
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + - - "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." - + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 181 + - - "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context." - + "titleClickable": "The comment is related to an older of the source or target branch. Click here to see the original context."
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + - - } - + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 182 + - - } - + }
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + - - } - - - - - } - -
- - - - - }, - -
- - - - - "changeNotification": { - -
- - - - - "title": "New Changes", - -
- - - - - "description": "The underlying Pull-Request has changed. Press reload to see the changes.", - -
- - - - - "modificationWarning": "Warning: Non saved modification will be lost.", - -
- - - - - "buttons": { - -
- - - - - "reload": "Reload", - -
- - - - - "ignore": "Ignore" - -
- - - - - } - -
- - } - + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 183 + + } +
+ + + 184 + + }, +
+ + + 185 + + "changeNotification": { +
+ + + 186 + + "title": "New Changes", +
+ + + 187 + + "description": "The underlying Pull-Request has changed. Press reload to see the changes.", +
+ + + 188 + + "modificationWarning": "Warning: Non saved modification will be lost.", +
+ + + 189 + + "buttons": { +
+ + + 190 + + "reload": "Reload", +
+ + + 191 + + "ignore": "Ignore" +
+ + + 192 + - } -
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 184 + - - }, - + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 193 + - - }, - + }
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 185 + - - "permissions": { - + }, + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 194 + - - "permissions": { - + }, +
+ 186 + + "permissions": { + + 195 + + "permissions": {
@@ -15684,29 +20107,31 @@ Array [ > @@ -16249,15 +20707,35 @@ Array [ className="diff-hunk" > + + + - - - - @@ -16475,15 +20935,35 @@ Array [ className="diff-hunk" > + + + - - - - diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 4e2e7e08b4..8f584fcfe2 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -3,11 +3,13 @@ import { withTranslation, WithTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; // @ts-ignore -import { Change, Diff as DiffComponent, getChangeKey, Hunk } from "react-diff-view"; +import { Diff as DiffComponent, getChangeKey, Hunk } from "react-diff-view"; import { Button, ButtonGroup } from "../buttons"; import Tag from "../Tag"; import Icon from "../Icon"; -import { File, Hunk as HunkType, DiffObjectProps } from "./DiffTypes"; +import { ChangeEvent, Change, File, Hunk as HunkType, DiffObjectProps } from "./DiffTypes"; + +const EMPTY_ANNOTATION_FACTORY = {}; type Props = DiffObjectProps & WithTranslation & { @@ -56,6 +58,10 @@ const ChangeTypeTag = styled(Tag)` `; const ModifiedDiffComponent = styled(DiffComponent)` + /* align line numbers */ + & .diff-gutter { + text-align: right; + } /* column sizing */ > colgroup .diff-gutter-col { width: 3.25rem; @@ -136,6 +142,8 @@ class DiffFile extends React.Component { hunk, file }); + } else { + return EMPTY_ANNOTATION_FACTORY; } }; @@ -152,14 +160,12 @@ class DiffFile extends React.Component { } }; - createCustomEvents = (hunk: HunkType) => { + createGutterEvents = (hunk: HunkType) => { const { onClick } = this.props; if (onClick) { return { - gutter: { - onClick: (change: Change) => { - this.handleClickEvent(change, hunk); - } + onClick: (event: ChangeEvent) => { + this.handleClickEvent(event.change, hunk); } }; } @@ -172,7 +178,7 @@ class DiffFile extends React.Component { hunk={hunk} header={this.createHunkHeader(hunk, i)} widgets={this.collectHunkAnnotations(hunk)} - customEvents={this.createCustomEvents(hunk)} + gutterEvents={this.createGutterEvents(hunk)} /> ); }; @@ -228,8 +234,8 @@ class DiffFile extends React.Component { body = (
{fileAnnotations} - - {file.hunks.map(this.renderHunk)} + + {(hunks: HunkType[]) => hunks.map(this.renderHunk)}
); diff --git a/scm-ui/ui-components/src/repos/DiffTypes.ts b/scm-ui/ui-components/src/repos/DiffTypes.ts index ba89d40aaa..635d5e93d8 100644 --- a/scm-ui/ui-components/src/repos/DiffTypes.ts +++ b/scm-ui/ui-components/src/repos/DiffTypes.ts @@ -40,6 +40,10 @@ export type Change = { type: ChangeType; }; +export type ChangeEvent = { + change: Change; +}; + export type BaseContext = { hunk: Hunk; file: File; diff --git a/scm-ui/ui-components/src/repos/LoadingDiff.tsx b/scm-ui/ui-components/src/repos/LoadingDiff.tsx index ec782bc968..a0a64a2903 100644 --- a/scm-ui/ui-components/src/repos/LoadingDiff.tsx +++ b/scm-ui/ui-components/src/repos/LoadingDiff.tsx @@ -9,12 +9,13 @@ import Diff from "./Diff"; import { DiffObjectProps, File } from "./DiffTypes"; import { NotFoundError } from "../errors"; import { Notification } from "../index"; -import {withTranslation, WithTranslation} from "react-i18next"; +import { withTranslation, WithTranslation } from "react-i18next"; -type Props = WithTranslation & DiffObjectProps & { - url: string; - defaultCollapse?: boolean; -}; +type Props = WithTranslation & + DiffObjectProps & { + url: string; + defaultCollapse?: boolean; + }; type State = { diff?: File[]; diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index 16fdb5b307..f5f984be08 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -13,7 +13,7 @@ "bulma": "^0.7.5", "bulma-popover": "^1.0.0", "bulma-tooltip": "^3.0.0", - "react-diff-view": "^1.8.1" + "react-diff-view": "^2.4.1" }, "devDependencies": { "css-loader": "^3.2.0", diff --git a/scm-ui/ui-styles/src/scm.scss b/scm-ui/ui-styles/src/scm.scss index dada35eb6b..9f6a086541 100644 --- a/scm-ui/ui-styles/src/scm.scss +++ b/scm-ui/ui-styles/src/scm.scss @@ -423,7 +423,7 @@ $danger-25: scale-color($danger, $lightness: 75%); $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "~@fortawesome/fontawesome-free/scss/solid"; -@import "~react-diff-view/index"; +@import "~react-diff-view/style/index"; // NEW STYLES diff --git a/yarn.lock b/yarn.lock index 8a11f9fc5f..b69a934a48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4608,6 +4608,11 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= + character-entities-legacy@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" @@ -5574,7 +5579,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -5633,11 +5638,6 @@ deep-equal@^1.0.1, deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -5753,11 +5753,6 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -5792,6 +5787,11 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" +diff-match-patch@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.4.tgz#6ac4b55237463761c4daf0dc603eb869124744b1" + integrity sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg== + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" @@ -6827,7 +6827,7 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.0: +fbjs@^0.8.0, fbjs@^0.8.1: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -7674,6 +7674,11 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" @@ -7930,7 +7935,7 @@ i18next@^17.3.0: dependencies: "@babel/runtime" "^7.3.1" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -8069,7 +8074,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -9346,11 +9351,6 @@ lerna@^3.17.0: import-local "^2.0.0" npmlog "^4.1.2" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -9478,11 +9478,6 @@ lodash.escape@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= -lodash.findlastindex@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.findlastindex/-/lodash.findlastindex-4.6.0.tgz#b8375ac0f02e9b926375cdf8dc3ea814abf9c6ac" - integrity sha1-uDdawPAum5Jjdc343D6oFKv5xqw= - lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -9508,11 +9503,6 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -10195,15 +10185,6 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -10345,22 +10326,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.29, node-releases@^1.1.44: version "1.1.44" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.44.tgz#cd66438a6eb875e3eb012b6a12e48d9f4326ffd7" @@ -10491,7 +10456,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6, npm-packlist@^1.4.4: +npm-packlist@^1.4.4: version "1.4.7" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== @@ -10515,7 +10480,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -11965,16 +11930,6 @@ raw-loader@~0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-clientside-effect@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" @@ -12013,18 +11968,16 @@ react-dev-utils@^9.0.0: strip-ansi "5.2.0" text-table "0.2.0" -react-diff-view@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-1.8.1.tgz#0b9b4adcb92de6730d28177d68654dfcc2097f73" - integrity sha512-+soJL85Xnsak/VOdxSgiDKhhaFiOkckiswwrXdiWVCxV3LP9POyJR4AqGVFGdkntJ3YT63mtwTYuunFeId+XSA== +react-diff-view@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.4.1.tgz#bbeca5746bc8b60b3abab13b3f2f55d37f1430b8" + integrity sha512-PJL5jWvVAlNfihK4QadSJDC2noo04ppJNKgb+m59lAqYoRTFIRvH6+zSiQFN2l+H84MLYIQgBx/xyLDj7pca8w== dependencies: classnames "^2.2.6" - gitdiff-parser "^0.1.2" - leven "^2.1.0" - lodash.escape "^4.0.1" - lodash.findlastindex "^4.6.0" - lodash.mapvalues "^4.6.0" - warning "^4.0.1" + diff-match-patch "^1.0.4" + recompose "^0.30.0" + shallow-equal "^1.2.0" + warning "^4.0.2" react-docgen@^4.1.1: version "4.1.1" @@ -12124,7 +12077,7 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-i resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -12476,6 +12429,18 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recompose@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" + integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== + dependencies: + "@babel/runtime" "^7.0.0" + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^2.3.1" + react-lifecycles-compat "^3.0.2" + symbol-observable "^1.0.4" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -12868,7 +12833,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -13049,7 +13014,7 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -13182,7 +13147,7 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallow-equal@^1.1.0: +shallow-equal@^1.1.0, shallow-equal@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== @@ -13797,11 +13762,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strong-log-transformer@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -13908,7 +13868,7 @@ svgo@^1.0.0, svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-observable@^1.0.3, symbol-observable@^1.2.0: +symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -13955,7 +13915,7 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.2, tar@^4.4.8: +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -14722,7 +14682,7 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -warning@^4.0.1, warning@^4.0.2, warning@^4.0.3: +warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== From 88fb31c47b2893359487009c4939f6bf91438de5 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 7 Jan 2020 15:49:35 +0100 Subject: [PATCH 17/38] Add unit test for diff command This new tests ensures, that changes on a feature branch will be shown in a diff even though the integration branch has been merged into the feature branch. --- .../repository/spi/GitDiffCommandTest.java | 25 ++++++++++++++++++ .../scm/repository/spi/scm-git-spi-test.zip | Bin 36171 -> 37734 bytes 2 files changed, 25 insertions(+) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java index 52932e83ae..26d6fc7c13 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java @@ -37,6 +37,20 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { "+++ b/f.txt\n" + "@@ -0,0 +1 @@\n" + "+f\n"; + public static final String DIFF_FILE_PARTIAL_MERGE = "diff --git a/a.txt b/a.txt\n" + + "index 7898192..8cd63ec 100644\n" + + "--- a/a.txt\n" + + "+++ b/a.txt\n" + + "@@ -1 +1,2 @@\n" + + " a\n" + + "+change\n" + + "diff --git a/b.txt b/b.txt\n" + + "index 6178079..09ccdf0 100644\n" + + "--- a/b.txt\n" + + "+++ b/b.txt\n" + + "@@ -1 +1,2 @@\n" + + " b\n" + + "+change\n"; @Test public void diffForOneRevisionShouldCreateDiff() throws IOException { @@ -91,4 +105,15 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertEquals(DIFF_FILE_A_MULTIPLE_REVISIONS, output.toString()); } + + @Test + public void diffBetweenTwoBranchesWithMergedIntegrationBranchShouldCreateDiffOfAllIncomingChanges() throws IOException { + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); + diffCommandRequest.setRevision("partially_merged"); + diffCommandRequest.setAncestorChangeset("master"); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); + assertEquals(DIFF_FILE_PARTIAL_MERGE, output.toString()); + } } diff --git a/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip b/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip index 8e43da1d828d94bc3f0bbe423d6488c88c52e5bf..da166155a780700c719e046b5070e591b4434371 100644 GIT binary patch delta 17224 zcmb7L3s_ZE+TL8efg+}e7X%ar5Eah-qN1WGAR=N~YTnKjNf8oE9P@&bzvg7x?#a@u zoG?wN8k77RlhU$Mz*~)_zm6BO($Z1;8*OaL|NGY7Ywxwr+2_Q6o@ZG-uJ3!-cU^1k z_13gG^xM}%2Tdpl3-2ZfLVLkJy`=E#pG8kfh#-6nqm2+Jl+Jg1swYqCAcQ^rVap?H z_Wo!3;E=Ge@CY%)727RNm{(p>nMwZo*7?&#UytuLQ!GyF8WJIHi;wLo|MdcoS7T1k z2*4DC-VdfuApau&5iP`tAqib00niKDWQ{SgxW3KPN(!Ua{BiYPVQx08uP4kcN{H(K zb88Q@JW|_BtWNm2H??L`Mbn7R74NP35N21x?A|c@pYC{^J^RAxBAC4~@pEPN`E^Yr zD*m;0X9&!EJ5&(5!|e5ad*WLXpp zF_(Lezuf1Idxg%I#>TX?U(>s8ZKtpeyVCCN2y1t#?BcDNEAIEZHq;#4!s_B_cKhA5|wx2fQ3F!O2UgG<&I_^M&zfW46Ne#xld*W}`KQn^gb&-P5ff}4Q zIy;BSz1+CmP(2k|3qJiU?d19sp#B9Ai~ymM(yF-`E{AK5he#PD-&Q=*k^vbD^913+ z`As9pzsP@JimUng^tsbTUld9?Y|zfnNGc%3LGk+;IrYa$VwkGO?|(3&Kj7f##*2}l zIh^yPbz<@&tWVtRdNH#qB_RUcDrv=(-juMSiE4$c6U2FmJ>uk?)=*;fir-eJ#4}1T z)Bk*BQz2E-1!A-3p>C)n6Ea;xhu0-`%1ar~=)m+}vh$&>j1I|-l28l@3!Ny6XsvNYrK7LV2%$N{Cta&OXBu-42 z8iQ?8`MZY6J;mu$6QPet*@9&?ptN!a^iBasIIM=NC=Hha?%+gb$z_hpD$fGqVQG)R z0$#hS(Yu-Y) zRDvkA=Goqd6z5?9_y4}(FP%UFM-)hnDk?0@pEPT9PX46A2XjdXrG3Y5(PicCQt#qK zXGT?Z6|-{R&8|HtEq6ZZaaGA1q_-U;BHcyh4)mT+%R-M+A&Xuzx&Suc^K#>oH`Y1O zf@fGd8@j;aapFSVz#-l|Obt*v~nBJjt>z#U+%WX25?Ovl^XS6u2W|Q7)v>Gi|tJ`kV*)1fS z0~{dGJ-VxZ^Deq|`02Z+ZrtB-bLXAUKYabZ{_%`S*$+$!`R>JEUb^slW!KE|U#4Ab z8CudX|LCqK#V>W%q0bJtzNKc7Z{c=g7FywO&6O-{T%yQK+6$?JfI0sI_ z!8!)S3^te7>~R_$Cbw5-b{lLam&I#v8>|+WLFdwWbsn?R;tJ-N>X7Xl3dgq5N7v5y zu3N*B$lDu_7Nv%C$y}beCU(PrCVg7-;!#)gzyl3kehUBRu61wkzt&iG?)mZ4uD!oZ za2uK?Za3?9Iy-IfOqzP`($w_V2F7mL4`fkf#V%lY`U%utN z3(G$H?!dmi_5VKb?Y^v2?yX-9%ZsYYOzr_(y7u$+&ZB0` zIlJVwQ`xgx_AhHFA3mh*Hou6MwC|lM0?T!y$ zo>6PHb!u01bJl_99zHks{hJS#HuXGtZ}!N)e|oU^wJ#s7|9Wo1`OM+nC&!mI7)>>% ze-%AEYtiT9uc{u!=KR`zv9bU>f&;uF_8dSOMS$ikRtzX4=Yu_SV|%IfZIqi4o{)T+ zFCM6toUDEPIOxZL82W((17~Zs!8HRbA1*=@(BQ!Lk51KD=Qj_D>oHR{?12U;*#~&0+XvXC$r0ttdEAyR+BZ@p2{DJsip97W|@^; zs$D)r;#rnXl5-kQ!EcY-v-}A75eEk0qLsJ{SMuC{w=x~~y zR*T8)H0h0I8|+kYcCvU)7LUzkvN@c3oyTbowo^g*#dg;|Mv3PKnuoR(B95h(s-eY8 zHmpPWu_wKw4_?vOTMV+VH1?Kvp}Mw? z+K|&1^y5H`U#d(~Acen)l8VZw%hSt+sU+`80>QLPj%ua*6O$D&?tEbkTI|Mf3 zKs&dsRP5ABkNU!o74PCFD3DTqY*KpUvmkz6^+`$;+j?kTV<8CQK-Ba_1Qlm%p*9aK zQc#1HfYL>!2EcD2a_X&RsuXqvjxjvg5}7P@VG$MD|7=OTabvdLSf zMsZ;N?)oAn`Uyb9fvC@9Dfz2q>$h3U6kCIN*eI7|01yBBmHzF{0wNAX{hw;Z!&>>9 zIsBZ08Z4VU@*y)oHobH3_WRud5eK6FFy3Sa594eNTd9Xj(#97aKT!ZK?sqhNsg{ck z!ChQ?_1UFHfW(2Y%SHrs@#zs}#n@mU7A$h<&<_;M39lP`UHmdS{9U$umt~vsz}PA9 zQ6Y%2&b+UoeCLNc)$+wPgzV0W+6~LcfhI(cBqkuVR=i3^zNwfHbd!@i5c{owxsJue zytA|iAmRX2b(6Da!bbwH&TeuV&33m%?>0IuUbEF}GntHbmjmv`R+Gcw&#$55=%C9>h=Xvp)&cP1sGW*~ zVuCa(y<6HnulXO&P^@wO@^bpo6j6W4F_l1!adzMs|8;iWB(S#_Kb|E&8*Wo09V}EP zc^_v(#hgcGY`gLRa}-rV1!5K*ezh<;>;|{l0LIr&EqvY zZC0<>4vzy?r^#XPx-AB;S8sOPgTBkDrE*0rm3HBOx2Qf}0X_$Vl^?s?+GU3o`5)U+ z?D^F64^lu72RbY|*R&jx7-wsQigslKeEc1I{KSC#V*`rw1~i_SoR>bfx#0MvP~rK9 zI^0zk7VLWEm3>ODSIS9HoR$_LUo235@2k)J3t#VW;0ie@G}4zs6_W#dd9h(>_x42^~> zuW4X<2A)E~!_!pf2TN$Z#s!B-=$9Pld+!8);{cy44F$wn_uLh%p}^-*=~G-A=~LYC z;UV}XE^+y_s@<2yxsR;)Y*F_M2frDxv!(cz@4geh{@n4G=1VVSoT)mUbIktACy&-| z8*{V%%$!kw8kE|c-O$w7v|?b&#_G5By_a%zOaA(mFL<4at7=zXpPM*&-|edd&R09$ zizx4R;G@#=TR;7FEVAL=m-m)#*?FSmx@BO(gIAuFny!O$uScTy!m)IJb_0E0={WV$`@9+9aWx;N=I3R{0J6<&=J@^y^w*dyy4Bm<$Gy`e6_+`Xa zPWix#8Jo_w6NHDm5=+FFBN=WNdWEFxFGoer}Au3sYBsYr(Cur(ES_Wu;Yv$|_4Vyj9jC zB2=Lfp!uG&Nxw}2$Z{AMN>}-OZ)pihT66(|Fcps|%2Xi3B(YQL=v4C3I(ZT^zdxuZ;J!s3 zP0nlhR|s|$UV(uo(+(u@=zvHdDOrRYHBXa~umM!4uQ7xQNSZ-O+_q6NjY{IxgQv`> zl65uaF!6>v0R{2;!9ij>=h-u?V1BrOTpE-_E)6G%M*^Nm!%A*$1Cq%-!$49z^kl5E zP`qOCgc??AQ(JMrC$23B!R<`kq#H4vT3Q)^hcBB+GlC)$8o>T+d0c$nw;F09@z z?ZrfI06!^1XR0Z`lBO~F{FvE!f4Zw-P z71(H+VbMTdD8DvbnoaH~NK^!pqgX+RK8y7Zn)rINH(_>U!bu|;<86U|qJ_#&U8zwMIPv|0Bf;CfDbF`Cy6d9Dn(+T=u z1O>$e=BY3&XclyRhE73=F`x+ZSy?&eGf#eDmFxi}NQGfCdOU^45b%r_Rx-6S2k*~+ zVM3BelM<7eXR)v3 zzUD1Z!O&Yk0n%I0(pFYpuLp4BA*2=teK>0XPikQem`a5eiVLG7n_7US$5UKb9pm6g z;7fP`Ewt!{P%XYapgq?Ewt*J;g-`7d`Z(vQ_$1 zU8sr>A-N{4n}Ea@EFO4U#pahq*Y5uvhzjB!TL-y9*G@<-pg~S=1sXN*3>T^ap|1fn z@LibB-%99T;I2TS3DYG2G*5G3p+|HVko5BZhaLpSTnbI7E&-rRM&)3Mipn zqLl{!iBUp$EX+DMgLxJUYw#&vMQb@N3{WfA8rxenn2AZ^8az7X# zrSAL*6f95$P)C7I!IV7NkKhYFw;!eSQB5L53P6%ij0zC$%sh*N1)AGOKu!e$$%2YE z{aFN5ko1;#6`HUqKm&3LxW4AkrJyQEbBTvC8)U-0kxDAy!JBH2L=~KnDnJEos&J&0 z_BVe@1q(hSQM_1YMr7GYBW7QF&0X8Cg| zSgevHK?G(6nnfiw&FYh^LJ|H%AhUS(1PkR%7KcB^nWaPz55jQfRerpgoBp6;6BY$v z(-W~`ray;*#XkQBK?FtxmJBc|a62Ye0(*iB-ck5&sq6*FrGWYPqRIu&pGm2 z7nqqQ(8|{SRH_Q?e*`0|1p)=L+F!FzF(QOc0js4aCB-jz-r~s=>}tEG2}rHL@Kedb zv=;q8JW@%_^ZfqmdI_rnRET?4;B8qdWq&>e6~`Q3-(S47!c4B%AfzNh@U41tx{66S z6@aO^Rr8Dr7WX2rqP6@A21xOb|GNSOLjSxoKwT^0O`w0IuL+WWP@HE>P;vCn-2u<8 zmfQm}B>KMlNX{S?fRH8tK;90N82B?LSd6uU#CuhwAdx=7trgj&fdAf#Eq>vSptp+o?JW&!hr z2o~j}PAq<$E#OufH%_lY6DEX~aXbfth25wZUtOsfrxb+$yF3*_hc*~gOu~ZzO!}Ej zNdi>CvmmGnbZV$k?7xU40Top24W8ipjVd-_L!iCB3C{B%Sls(Y@yzdJ_;QnqK$s7J z;G5x?s66d~1vzXIL#o+CZKYp#n^k1OehB1Op8LQ;-!hA5tF`?ayhuz|6`OD%(65m1 zN=HX=p8de$F18BDg&>`kR*7%xxW_;czC!@V@?-}VWw=e;vzT>kE3cUUu&Kro&I2I( z-fsN~4=i#&yC4Gn0e38=>y!iqH=L-0xn3DtOKT3w|BIfq{Ve zPbHP@H~9HGB}WA(d*U z69jziXBWXq@=yJ&$A$Ss!V z0r*6-{LmK}c;C6;i0O2(kEqQj{w2S*=8Bts+(WI&~m_fPvVqG9ee{BK7|WTWr+XK|J8|wv&!n~2Wm%7E$+_j8!nzJm=t(q zW-k20V}k=i1DON8?wx?t>BsL&v|?VY1!P(!b`ywhoNpi<)6~ z6}R~@7GM}&TvJw3S3aV)WPZ)Oas!2~(>HIeZ?xSJRQT53CBBTIq_xgtHux1_?VQrj z4Oa7%zP2K}W6q6drgedr@I`ACZ$nIa8?b7sYwL!$hK)xTZUtzYyWKdl4kS_9TJPNf zTEt#^#yw)4imur~#jwAQc=m#wF?`Wl#YfL!KCA1s}>xXetHHJGk^L$9U)yJP8?(-C{& zWfTzhxic-O589hoJy%che|(~*c&uhG<=(mZASIrdu8eh-LgRBXv$d=|e0hd2cJP)X z*9WXU^2W9I;vwevx?!z<7b&=?yn>k2@>$ze$=Y7L_CQ&IG>L!qP$VnMOUiWlzOcVg zo-eEqx(#$m2i$M=H;e9v6k;u^CS z)WR>geg0A^vSZGra|ODFWgX6f2LGBrtU3%D@I6z*C+kfO`ydj*pdqa+6fwm3pVu`U zT;m&Pi?usyzF)i32IBalsbbZb6e9@rU;sCuSS;S`7leu;_pTMr=LYhRJ1qk!@x5)& zSHPS2Hqlc%#n8jy7j$NXLpbwMw;fW$RL3$vGP`PCchrFInHuuvo6GShzzNRiNJ=UL z5XpfsZ5a-P@e3V~Kmr^)cE=b@H+);@;fLdcLLDGiec%1%rFHu9q1^d?M`mtZACw~N z@bBH~a91Lf6szrwNsy`UhI$m^O5$lxupSGZUZ0n+0uVOno}$#^2fH$x@0YL>#lQB< z`PbORXVZ^|pSaR9pu_AwMPUHh?wFb69|u*3p&~65@E>dyF@b-l=*m(wbQo2M4sG$o zV1NC%pyE3~91;G0e!@UNh*Fr&76@%S*fbX}4%#)|?r1tNc-AW*iPG(ZRi5Mti=1E- z(n=lDiUkHF%ylbBE7@`v-xItVAdQ;vuOFTONtA9Mq?nj?LrT;kJr&X>q(pYo#Xk*6 zo@jS`mXx`56iA}935g!o@B`~kQmdw<^Z^YNp7aIeq_+j~9s@%9nW>wUti3qp(>Akk z5?H}C-Vi3xV;24gGSDiZlUSpRUkuBK-Sg6$ymksmqO?HIUC9(cydFL*05Z|&iju-{ zMh6gED*(unVFlm}i*@nyeLnyI4}Y+F$%i0`(i(tE;S@lMo>IO4dagheezhrjos`dG zI)IxR0F*f6B?8A-8f1C@cOj+TTi+aW0wht|T));zL$bd4yp#qiDoaCCUBWoncqri| z%SmbI45gt<(J(+`cN~1Y@RU*-xEh|=5-mZ{S&Q|d;gLHoEkdjhN_fFy6FY8g#A;Zd zUT^N(r|dYl42{==;Uz<}tIfk{uD(8ZE)f7w!W)3O>^T=dG@uFq{5#?Cta%`b(prKz z(`bTJBxn)9mck+eJqQ4~MM9S*42RV~32y*!i#%wHj+&T1H7354XQU72*9HXjVXMCF z^BJy7=yMHy)P19F+{9FK<65LG4a-SAET1nm!s0D$PqIW8KRxJuNZZn;aXHN(iPC1; zUL?H${Ggl}$?+Pbk5=E zX#fVbUCiXZS-9*M9H|koZ-R?_#J=%AzD3~tj0hdTE6YW6|IbhB5)rnShULhhPp_QV#pk}2HD>bH_GMfCIr_>^zg`=0 zv*S5N8H}R@H(5|;*X8^ z1BBuEqgfS)Ko{!M!k{KunZEIUL6Wt^h~nJ7zAXxp%&%yG@H*v%>3M2#-k(SlzFa@O zv5~jP3EKMOXAkB?|9FuTvh}xE5?eky;NtV+3m_OONR?A(#2;a zT?7C(e-mZD1d=Fi6@j?+M<8AYaBoVR5r}8+yZG*uM5x27zudSy1td{g0DwPR@7gIc*I&9fAmm(SqE?_O#na%Z)eTRY`TjN8@&_4 zzUt3uebG2dn_&+m-5~s+6zJG8tv-Hbefm(*5D>+fB#aUD5hc9z33}I7nYA)^&3mEO zGoH%L>o$~6(|Wg)3szKzf+|#JVx%Vl{Geb=DAh2Uhlr1I1xRIOH)UHV;wG;ftSW}y zO~vxL=_wGqQCV|lD;*WWV9Uu>2L4?++!8fh1=fcf6^#T@jNSAnMeIEL&@LDoT54 zpt0Yv$U!QLjTC~8*dStw65evKnZ>yH-C2LmhTi;zr@sGRkVI({llz4djboYKBw%5~ zs3>FGjEpQ2PG(RdP&9@qlFwEQ6Fer@=?hqki@9G8Y?oz z5C9>!*2&hy#=7{=u}5?4j*r%@zxXalqICNZmFwT#h5@gLf^|fjlEsEI1UwNLA)9%$ z`Nk*9u0N62ZQ|hR_uKHGIB?|KL%l&0YHJ_D3cbV=gM46pFUzR?R>%1Dqej$F4F7SD z+HcuCF8;;H9dO8OuN*jdH%OwizyvpYA$`otk$Al-k*ht!I=x4HOSkSy7uNB0`H#Ex zw^){o=V!bF)(`L5^gON?N?Tb^)U&uP>z8%wfy3Igewp=k@%x5d1?$)5r2p_YkVI)K z>v4MY+p;dVP*{S<4(T`k>E^qU9n-H|?c8@CB*&uB!_ICW>xtDbx;=cmH1kMm1+ zENr%82%qi$*eOrb^bA7NJ!J?nGJIlL7sP<4kyi{&AmZq-|L}*!GYUeVIC{Y4h@9#F z&9cFD?e#|tH(p&f*#ZN(dca?C z1qg;ms{C-tu{D(#_!s`E(RRnZNyn3hc(_FOKB|Kd@i~=&=tnF0-?8Zg_<^y!=mBI{iRrRzZIL zgyPvb*%ONMi*kiN**PNJ?3UxFP8XcW+fzLLZ1k=npKBK@QGb8?6@O5M3bj2n(w$kZ zhM$nqF0EcrQKey4F1q)WRE@Jc$}bH3&op=w-!?ZREh-b>7wn$O%4i-Sl%ljNxj`t*U!qL}^KBrAA%GnY7m8u9qQ@ z?+y8&9@{y5-_%5DNvwmuph;mQ<$}6}FM4AB!NMUE^P|rY{Z1&m$g7f zSJm!NzYd}?kkr;uo8)QB${*BRm-Odr!$;Ww@0A~Uc_h4rZxXzumB(a48nvKsLhft> z^yx#Aob*`pj!o^YDMcPd#pV;(!TX2}A@);9UHICFue*Fdy3U?4Oqi0BLh5S&sWAnMndfBSTQ z3q*w!5uH^)qE$XE&S$zvL~YJJc*3Id3u>U8UHSfJtOBLDMTZw)%0Z$6w+;vJ?i&YM zxD`d+qLT}1SdIoW4g(KuDWG!;ssmBI8IC(xC`d;H_|Uq6f5&D-J}sHQ>cgyu9WY(S zQ7`E50!}-~r@?t#>ad)B2owv_0aW3%!(i2X^KHy}_5sajN%Oe#=`;iGTKP0Mdxhyb zj6J+T)&kY`FsyU(Y02EuPnQ!1ktiaP_keq;(^oaUn)V z;Mqe59$+v+s$z}Kxc;!9K4G|^MoMB=M&})9N;Nnqg!2ofVyDTQQr(%3BAR@P zZ;+p9u)(=7f{!W_31p5$2Xbb)~c z7ZdL2egTpSIKm|oi)jYbq@*JqNKldNi((vx8)!P}P>dSjUPqB3lTS-#C49n2D3((U z2u9>7u%XdZ@*t747-~?Qz!al%391u64`n#xAahKgaWD)6DW(`c6>UPc7-m2@qvqhZ z5S>R*4F?Y6F|}eHWiil$CmaS^Ua?y-+_anGIm4jXMV6k9A*gou4d*{wsKT; zSYTaH%eOBKK}jSQ;|8e7SaO^)FRImP+ z%-268yuyA9J2sk7?lsdd)%3w)tU$4ga|M+BSMA=N%J(c6cFB+d$|quHg5P*pb1A2< z%KuwMve7@XhiGB30=s+Ro)ZaarWY1d0f@p#M$8Gy=Bp@{r!fvg0`kZqN4Q8vpuCl2 z^dD^+wip3W3}c&1S$x&-w9yPF0?@GRb6Z=ts4=Et3+i7njB%&zy=r*T7{*}|01aCm zcJ3Z88fzN1p!^lX=rLvORl|qIG7b{}(qs2EcF)w_8Kz+is$VgT9#ghnHC&RxI57Vf z9vii<_13j_rU}J@;#Z(xx>0K04N4~C!1yB+w;E*RD?*_hysF?kPyl>BDsXFlMZUV9 zTLZF8MD}MIUCm*rI*wWBP5hQ$FR_l z+{)ZN&IFR`$-^rlK~0n?SAl#tj!%11AR(;05|Y+W_vdp>Bo#XQMaXpp32LJJxQgUz zE)U-zkPxaJSEj=7_5l&V54fG9!iC)ATsh9((2uyco>{Au-?J#gz>A%W+<%Ka}@^VyHyxx zCNmCP`u`V3d4UPTgCa+FjNHU%P>NfH@oEA8`=f~xg<#83S`=`gP=|!$LWrj&^COr< zmfOLT6gM*wi7`rRs}{rWWE?1RdFzBXPv)(YYH$t=9ZG|qJh*C*GTExZU4@JTE8ZT1 z{>7$2PwHDWNZD%D;Iv}Kfe3dq*v>oTZvcXMhf3&etXr1L5<69wAeW^k&mA%pw->g+ zczjT58hLK{G&&ywEy#M~p-Nb9v}$O;o{BQeNTAB6!P)69&;W!sY9NHRq5y`uCkC0iPtVRtir#!onb4W&+)p#oz+U{6B{UDb(~@8&gC z;s%%Sz=}L(H|1qj7viSz*_A z1g(4;opbJGmUJz8B{n}|K^2rur3_A^^AxD4THwLLY6ObmPYSFR-9(hZX>?}KVy&>S UJd=m`)v{W)5U%Tv!K;k@7n<2Jwg3PC From 71accfce1f25d1c5655cc163f12c9be60a54fab6 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Jan 2020 09:57:57 +0100 Subject: [PATCH 18/38] restore missing hunk headers --- .../src/__resources__/Diff.hunks.ts | 36 + .../src/__snapshots__/storyshots.test.ts.snap | 1448 +++++++++++++++++ .../ui-components/src/repos/Diff.stories.tsx | 5 + scm-ui/ui-components/src/repos/DiffFile.tsx | 15 +- 4 files changed, 1497 insertions(+), 7 deletions(-) create mode 100644 scm-ui/ui-components/src/__resources__/Diff.hunks.ts diff --git a/scm-ui/ui-components/src/__resources__/Diff.hunks.ts b/scm-ui/ui-components/src/__resources__/Diff.hunks.ts new file mode 100644 index 0000000000..86acfbff0a --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Diff.hunks.ts @@ -0,0 +1,36 @@ +export default `diff --git a/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java b/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java +index 17c35f6..cdf70f1 100644 +--- a/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java ++++ b/src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java +@@ -25,6 +25,8 @@ import java.util.Optional; + import java.util.Set; + import java.util.stream.Collectors; + ++import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVAL_REMOVED; ++import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVED; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.MERGED; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.OPEN; + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.REJECTED; +@@ -200,6 +202,7 @@ public class DefaultPullRequestService implements PullRequestService { + PullRequest pullRequest = getPullRequestFromStore(repository, pullRequestId); + pullRequest.addApprover(user.getId()); + getStore(repository).update(pullRequest); ++ eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVED)); + } + + @Override +@@ -211,8 +214,12 @@ public class DefaultPullRequestService implements PullRequestService { + approver.stream() + .filter(recipient -> user.getId().equals(recipient)) + .findFirst() +- .ifPresent(pullRequest::removeApprover); +- getStore(repository).update(pullRequest); ++ .ifPresent( ++ approval -> { ++ pullRequest.removeApprover(approval); ++ getStore(repository).update(pullRequest); ++ eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVAL_REMOVED)); ++ }); + } + + @Override`; diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 2c065b4394..8034701cbd 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -716,6 +716,18 @@ Array [ />
+ + + + + @@ -1282,6 +1294,18 @@ Array [ /> + + + + + @@ -1459,6 +1483,20 @@ Array [ + + + + + @@ -2111,6 +2149,18 @@ Array [ /> + + + + + @@ -2550,6 +2600,18 @@ Array [ /> + + + + + @@ -2989,6 +3051,18 @@ Array [ /> + + + + + @@ -3483,6 +3557,20 @@ Array [ + + + + + @@ -3683,6 +3771,20 @@ Array [ + + + + + @@ -4016,6 +4118,18 @@ Array [ /> + + + + + @@ -4586,6 +4700,18 @@ Array [ /> + + + + + @@ -4763,6 +4889,20 @@ Array [ + + + + + @@ -5419,6 +5559,18 @@ Array [ /> + + + + + @@ -5862,6 +6014,18 @@ Array [ /> + + + + + @@ -6305,6 +6469,18 @@ Array [ /> + + + + + @@ -6799,6 +6975,20 @@ Array [ + + + + + @@ -6999,6 +7189,20 @@ Array [ + + + + + @@ -7340,6 +7544,18 @@ Array [ /> + + + + + @@ -7918,6 +8134,18 @@ Array [ /> + + + + + @@ -8095,6 +8323,20 @@ Array [ + + + + + @@ -8759,6 +9001,18 @@ Array [ /> + + + + + @@ -9210,6 +9464,18 @@ Array [ /> + + + + + @@ -9661,6 +9927,18 @@ Array [ /> + + + + + @@ -10155,6 +10433,20 @@ Array [ + + + + + @@ -10355,6 +10647,20 @@ Array [ + + + + + @@ -10607,6 +10913,842 @@ Array [ ] `; +exports[`Storyshots Diff Hunks 1`] = ` +
+
+
+
+ + + src/main/java/com/cloudogu/scm/review/pullrequest/service/DefaultPullRequestService.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - import org.mockito.Mock; - + import org.mockito.Mock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 7 + - - import org.mockito.Mock; - + import org.mockito.Mock;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + - - import org.mockito.junit.jupiter.MockitoExtension; - + import org.mockito.junit.jupiter.MockitoExtension; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 8 + - - import org.mockito.junit.jupiter.MockitoExtension; - + import org.mockito.junit.jupiter.MockitoExtension;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + - - import sonia.scm.security.SessionId; - + import sonia.scm.security.SessionId; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 9 + - - import sonia.scm.security.SessionId; - + import sonia.scm.security.SessionId;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 10 + - - import javax.ws.rs.sse.OutboundSseEvent; - + import javax.ws.rs.sse.OutboundSseEvent; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + - - import javax.ws.rs.sse.OutboundSseEvent; - + import javax.ws.rs.sse.OutboundSseEvent;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 11 + - - import javax.ws.rs.sse.SseEventSink; - + import javax.ws.rs.sse.SseEventSink; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - - import javax.ws.rs.sse.SseEventSink; - + import javax.ws.rs.sse.SseEventSink;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 12 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + - - import java.time.Clock; - + import java.time.Clock; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 13 + - - import java.time.Clock; - + import java.time.Clock;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + - - import java.time.Instant; - + import java.time.Instant; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 14 + - - import java.time.Instant; - + import java.time.Instant;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + - - import java.time.LocalDateTime; - + import java.time.LocalDateTime; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 15 + - - import java.time.LocalDateTime; - + import java.time.LocalDateTime;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + - - import java.time.ZoneOffset; - + import java.time.ZoneOffset; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 16 + - - import java.time.ZoneOffset; - + import java.time.ZoneOffset;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + - - import java.time.temporal.ChronoField; - + import java.time.temporal.ChronoField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 17 + - - import java.time.temporal.ChronoField; - + import java.time.temporal.ChronoField;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + - - import java.time.temporal.ChronoUnit; - + import java.time.temporal.ChronoUnit; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + - - import java.time.temporal.TemporalField; - + import java.time.temporal.TemporalField; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + - - import java.util.concurrent.CompletableFuture; - + import java.util.concurrent.CompletableFuture; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 18 + - - import java.util.concurrent.CompletableFuture; - + import java.util.concurrent.CompletableFuture;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - - import java.util.concurrent.CompletionStage; - + import java.util.concurrent.CompletionStage; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 19 + - - import java.util.concurrent.CompletionStage; - + import java.util.concurrent.CompletionStage;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + - - import java.util.concurrent.atomic.AtomicLong; - + import java.util.concurrent.atomic.AtomicLong; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 23 + - - import java.util.concurrent.atomic.AtomicReference; - + import java.util.concurrent.atomic.AtomicReference; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 20 + - - import java.util.concurrent.atomic.AtomicReference; - + import java.util.concurrent.atomic.AtomicReference;
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 24 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 21 + - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 25 + - - import static java.time.temporal.ChronoUnit.MINUTES; - + import static java.time.temporal.ChronoUnit.MINUTES; + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 22 + - - import static java.time.temporal.ChronoUnit.MINUTES; - + import static java.time.temporal.ChronoUnit.MINUTES;
-
+ 83 +
+ + + 80 + +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + - - - + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 81 + - - - + @Test
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + - - @Test - + @SuppressWarnings("unchecked") - - - @Test - -
- - - @SuppressWarnings("unchecked") - + 82 - - @SuppressWarnings("unchecked") - + @SuppressWarnings("unchecked")
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + - - void shouldCloseEventSinkOnFailure() throws InterruptedException { - + void shouldCloseEventSinkOnFailure() throws InterruptedException { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 83 + - - void shouldCloseEventSinkOnFailure() { - + void shouldCloseEventSinkOnFailure() {
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 87 + - - CompletionStage future = CompletableFuture.supplyAsync(() -> { - + CompletionStage future = CompletableFuture.supplyAsync(() -> { + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 84 + - - CompletionStage future = CompletableFuture.supplyAsync(() -> { - + CompletionStage future = CompletableFuture.supplyAsync(() -> {
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 88 + - - throw new RuntimeException("failed to send message"); - + throw new RuntimeException("failed to send message"); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 85 + - - throw new RuntimeException("failed to send message"); - + throw new RuntimeException("failed to send message");
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + - - }); - + }); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 86 + - - }); - + });
-
+ 91 +
+ + + 88 + +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + - - - + client.send(message); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 89 + - - - + client.send(message);
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - - client.send(message); - + - - - client.send(message); - -
- - - - + 90 - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + - - Thread.sleep(50L); - + Thread.sleep(50L); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 95 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 96 + - - verify(eventSink).close(); - + verify(eventSink).close(); + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 91 + - - verify(eventSink, timeout(50L)).close(); - + verify(eventSink, timeout(50L)).close();
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 97 + - - } - + } + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 92 + - - } - + }
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 98 + - - - + + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 93 + - - - +
+ onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 99 + - - @Test - + @Test + onMouseEnter={[Function]} + onMouseLeave={[Function]} + > + 94 + - - @Test - + @Test
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 25 + + 25 + + import java.util.Set; +
+ 26 + + 26 + + import java.util.stream.Collectors; +
+ 27 + + 27 + + +
+ + 28 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVAL_REMOVED; +
+ + 29 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestApprovalEvent.ApprovalCause.APPROVED; +
+ 28 + + 30 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.MERGED; +
+ 29 + + 31 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.OPEN; +
+ 30 + + 32 + + import static com.cloudogu.scm.review.pullrequest.service.PullRequestStatus.REJECTED; +
+
+
+ 200 + + 202 + + PullRequest pullRequest = getPullRequestFromStore(repository, pullRequestId); +
+ 201 + + 203 + + pullRequest.addApprover(user.getId()); +
+ 202 + + 204 + + getStore(repository).update(pullRequest); +
+ + 205 + + eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVED)); +
+ 203 + + 206 + + } +
+ 204 + + 207 + + +
+ 205 + + 208 + + @Override +
+
+
+ 211 + + 214 + + approver.stream() +
+ 212 + + 215 + + .filter(recipient -> user.getId().equals(recipient)) +
+ 213 + + 216 + + .findFirst() +
+ 214 + + + .ifPresent(pullRequest::removeApprover); +
+ 215 + + + getStore(repository).update(pullRequest); +
+ + 217 + + .ifPresent( +
+ + 218 + + approval -> { +
+ + 219 + + pullRequest.removeApprover(approval); +
+ + 220 + + getStore(repository).update(pullRequest); +
+ + 221 + + eventBus.post(new PullRequestApprovalEvent(repository, pullRequest, APPROVAL_REMOVED)); +
+ + 222 + + }); +
+ 216 + + 223 + + } +
+ 217 + + 224 + + +
+ 218 + + 225 + + @Override +
+
+ +`; + exports[`Storyshots Diff Line Annotation 1`] = ` Array [
+ + + + + + + @@ -11262,6 +12416,18 @@ Array [ /> + + + + + + + @@ -11451,6 +12617,20 @@ Array [ + + + +
+ + + @@ -12103,6 +13283,18 @@ Array [ /> + + + + + + + @@ -12542,6 +13734,18 @@ Array [ /> + + + + + + + @@ -12981,6 +14185,18 @@ Array [ /> + + + + + + + @@ -13475,6 +14691,20 @@ Array [ + + + +
+ + + @@ -13675,6 +14905,20 @@ Array [ + + + +
+ + + @@ -14004,6 +15248,18 @@ Array [ /> + + + + + + + @@ -14610,6 +15866,18 @@ Array [ /> + + + + + + + @@ -14801,6 +16069,20 @@ Array [ + + + +
+ + + @@ -15501,6 +16783,18 @@ Array [ /> + + + + + + + @@ -15970,6 +17264,18 @@ Array [ /> + + + + + + + @@ -16439,6 +17745,18 @@ Array [ /> + + + + + + + @@ -16973,6 +18291,20 @@ Array [ + + + +
+ + + @@ -17189,6 +18521,20 @@ Array [ + + + +
+ + + @@ -17539,6 +18885,18 @@ Array [ /> + + + + + + + @@ -18198,6 +19556,18 @@ Array [ /> + + + + + + + @@ -18418,6 +19788,20 @@ Array [ + + + +
+ + + @@ -19117,6 +20501,18 @@ Array [ /> + + + + + + + @@ -19608,6 +21004,18 @@ Array [ /> + + + + + + + @@ -20099,6 +21507,18 @@ Array [ /> + + + + + + + @@ -20703,6 +22123,20 @@ Array [ + + + +
+ + + @@ -20931,6 +22365,20 @@ Array [ + + + +
+ + + diff --git a/scm-ui/ui-components/src/repos/Diff.stories.tsx b/scm-ui/ui-components/src/repos/Diff.stories.tsx index 96f9a8e1b4..09ef48c0b5 100644 --- a/scm-ui/ui-components/src/repos/Diff.stories.tsx +++ b/scm-ui/ui-components/src/repos/Diff.stories.tsx @@ -4,6 +4,7 @@ import Diff from "./Diff"; // @ts-ignore import parser from "gitdiff-parser"; import simpleDiff from "../__resources__/Diff.simple"; +import hunksDiff from "../__resources__/Diff.hunks"; import Button from "../buttons/Button"; import { DiffEventContext } from "./DiffTypes"; import Toast from "../toast/Toast"; @@ -47,4 +48,8 @@ storiesOf("Diff", module) ); }; return ; + }) + .add("Hunks", () => { + const hunkDiffFiles = parser.parse(hunksDiff); + return ; }); diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 8f584fcfe2..fe35cc111f 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -3,7 +3,7 @@ import { withTranslation, WithTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; // @ts-ignore -import { Diff as DiffComponent, getChangeKey, Hunk } from "react-diff-view"; +import { Diff as DiffComponent, getChangeKey, Hunk, Decoration } from "react-diff-view"; import { Button, ButtonGroup } from "../buttons"; import Tag from "../Tag"; import Icon from "../Icon"; @@ -132,7 +132,8 @@ class DiffFile extends React.Component { if (i > 0) { return ; } - return null; + // hunk header must be defined + return ; }; collectHunkAnnotations = (hunk: HunkType) => { @@ -172,15 +173,15 @@ class DiffFile extends React.Component { }; renderHunk = (hunk: HunkType, i: number) => { - return ( + return [ + {this.createHunkHeader(hunk, i)}, - ); + ]; }; renderFileTitle = (file: File) => { @@ -235,7 +236,7 @@ class DiffFile extends React.Component {
{fileAnnotations} - {(hunks: HunkType[]) => hunks.map(this.renderHunk)} + {(hunks: HunkType[]) => hunks.map(this.renderHunk).reduce((a, b) => a.concat(b))}
); From d1db083e9a8b0c716373a0aca5a577abd9fa6d7f Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 10:14:43 +0100 Subject: [PATCH 19/38] Use namespace and name in logging --- .../src/main/java/sonia/scm/repository/GitGcTask.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitGcTask.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitGcTask.java index 9a30cc9f3e..61b5dbede3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitGcTask.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitGcTask.java @@ -81,19 +81,19 @@ public class GitGcTask implements Runnable { { if (repository.isValid() && repository.isHealthy()) { - logger.info("start git gc for repository {}", repository.getName()); + logger.info("start git gc for repository {}", repository.getNamespaceAndName()); Stopwatch sw = Stopwatch.createStarted(); gc(repository); - logger.debug("gc of repository {} has finished after {}", repository.getName(), sw.stop()); + logger.debug("gc of repository {} has finished after {}", repository.getNamespaceAndName(), sw.stop()); } else { - logger.debug("skip non valid/healthy repository {}", repository.getName()); + logger.debug("skip non valid/healthy repository {}", repository.getNamespaceAndName()); } } else { - logger.trace("skip non git repository {}", repository.getName()); + logger.trace("skip non git repository {}", repository.getNamespaceAndName()); } } From 4f960cf2a90bddc94032a4120947fda31bad69ec Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 10:09:07 +0000 Subject: [PATCH 20/38] Close branch feature/react-diff-view-2 From cf96b1b9981c4867e8efa11d83afaaad37ada03e Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 12:58:13 +0100 Subject: [PATCH 21/38] Hack for conflict marker --- scm-ui/ui-components/src/repos/DiffFile.tsx | 12 ++++++++++++ scm-ui/ui-components/src/repos/DiffTypes.ts | 2 +- scm-ui/ui-styles/src/scm.scss | 8 ++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index fe35cc111f..87174ad72d 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -173,6 +173,18 @@ class DiffFile extends React.Component { }; renderHunk = (hunk: HunkType, i: number) => { + let inConflict = false; + for (i = 0; i < hunk.changes.length; ++i) { + if (hunk.changes[i].content === "<<<<<<< HEAD") { + inConflict = true; + } + if (inConflict) { + hunk.changes[i].type = "conflict"; + } + if (hunk.changes[i].content.startsWith(">>>>>>>")) { + inConflict = false; + } + } return [ {this.createHunkHeader(hunk, i)}, Date: Wed, 8 Jan 2020 13:45:18 +0100 Subject: [PATCH 22/38] Make conflict marking optional --- scm-ui/ui-components/src/repos/DiffFile.tsx | 31 +++++++++++++-------- scm-ui/ui-components/src/repos/DiffTypes.ts | 1 + 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 87174ad72d..cab227bbd5 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -86,7 +86,8 @@ const ModifiedDiffComponent = styled(DiffComponent)` class DiffFile extends React.Component { static defaultProps: Partial = { - defaultCollapse: false + defaultCollapse: false, + markConflicts: true }; constructor(props: Props) { @@ -173,17 +174,8 @@ class DiffFile extends React.Component { }; renderHunk = (hunk: HunkType, i: number) => { - let inConflict = false; - for (i = 0; i < hunk.changes.length; ++i) { - if (hunk.changes[i].content === "<<<<<<< HEAD") { - inConflict = true; - } - if (inConflict) { - hunk.changes[i].type = "conflict"; - } - if (hunk.changes[i].content.startsWith(">>>>>>>")) { - inConflict = false; - } + if (this.props.markConflicts) { + this.markConflicts(hunk); } return [ {this.createHunkHeader(hunk, i)}, @@ -196,6 +188,21 @@ class DiffFile extends React.Component { ]; }; + markConflicts = (hunk: HunkType) => { + let inConflict = false; + for (let i = 0; i < hunk.changes.length; ++i) { + if (hunk.changes[i].content === "<<<<<<< HEAD") { + inConflict = true; + } + if (inConflict) { + hunk.changes[i].type = "conflict"; + } + if (hunk.changes[i].content.startsWith(">>>>>>>")) { + inConflict = false; + } + } + }; + renderFileTitle = (file: File) => { if (file.oldPath !== file.newPath && (file.type === "copy" || file.type === "rename")) { return ( diff --git a/scm-ui/ui-components/src/repos/DiffTypes.ts b/scm-ui/ui-components/src/repos/DiffTypes.ts index 592ac7b6db..49e9785d29 100644 --- a/scm-ui/ui-components/src/repos/DiffTypes.ts +++ b/scm-ui/ui-components/src/repos/DiffTypes.ts @@ -75,4 +75,5 @@ export type DiffObjectProps = { fileControlFactory?: FileControlFactory; fileAnnotationFactory?: FileAnnotationFactory; annotationFactory?: AnnotationFactory; + markConflicts?: boolean; }; From 3a2b48e3ca4eeb9a03d0d6994e917e87c97a7613 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 14:01:02 +0100 Subject: [PATCH 23/38] Add storybook for conflicts in diff --- .../src/__resources__/Diff.simple.ts | 23 + .../src/__snapshots__/storyshots.test.ts.snap | 3353 +++++++++++++++++ 2 files changed, 3376 insertions(+) diff --git a/scm-ui/ui-components/src/__resources__/Diff.simple.ts b/scm-ui/ui-components/src/__resources__/Diff.simple.ts index a08aa7cdb0..39d30be8ad 100644 --- a/scm-ui/ui-components/src/__resources__/Diff.simple.ts +++ b/scm-ui/ui-components/src/__resources__/Diff.simple.ts @@ -145,4 +145,27 @@ index 889cc49..d5a4811 100644 } @Test +diff --git a/Main.java b/Main.java +index e77e6da..f183b7c 100644 +--- a/Main.java ++++ b/Main.java +@@ -1,9 +1,18 @@ ++import java.io.PrintStream; + import java.util.Arrays; + + class Main { ++ private static final PrintStream OUT = System.out; ++ + public static void main(String[] args) { ++<<<<<<< HEAD + System.out.println("Expect nothing more to happen."); + System.out.println("The command line parameters are:"); + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); ++======= ++ OUT.println("Expect nothing more to happen."); ++ OUT.println("Parameters:"); ++ Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); ++>>>>>>> feature/use_constant + } + } `; diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 8034701cbd..99e9f85993 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -636,6 +636,66 @@ Array [
, +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
, ] `; @@ -4034,6 +4094,532 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + 1 + + import java.io.PrintStream; +
+ 1 + + 2 + + import java.util.Arrays; +
+ 2 + + 3 + + +
+ 3 + + 4 + + class Main { +
+ + 5 + + private static final PrintStream OUT = System.out; +
+ + 6 + + +
+ 4 + + 7 + + public static void main(String[] args) { +
+ + 8 + + <<<<<<< HEAD +
+ 5 + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + 12 + + ======= +
+ + 13 + + OUT.println("Expect nothing more to happen."); +
+ + 14 + + OUT.println("Parameters:"); +
+ + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + 16 + + >>>>>>> feature/use_constant +
+ 8 + + 17 + + } +
+ 9 + + 18 + + } +
+
+
, ] `; @@ -7452,6 +8038,536 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+

+ Custom File annotation for + Main.java +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + 1 + + import java.io.PrintStream; +
+ 1 + + 2 + + import java.util.Arrays; +
+ 2 + + 3 + + +
+ 3 + + 4 + + class Main { +
+ + 5 + + private static final PrintStream OUT = System.out; +
+ + 6 + + +
+ 4 + + 7 + + public static void main(String[] args) { +
+ + 8 + + <<<<<<< HEAD +
+ 5 + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + 12 + + ======= +
+ + 13 + + OUT.println("Expect nothing more to happen."); +
+ + 14 + + OUT.println("Parameters:"); +
+ + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + 16 + + >>>>>>> feature/use_constant +
+ 8 + + 17 + + } +
+ 9 + + 18 + + } +
+
+
, ] `; @@ -10910,6 +12026,544 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + 1 + + import java.io.PrintStream; +
+ 1 + + 2 + + import java.util.Arrays; +
+ 2 + + 3 + + +
+ 3 + + 4 + + class Main { +
+ + 5 + + private static final PrintStream OUT = System.out; +
+ + 6 + + +
+ 4 + + 7 + + public static void main(String[] args) { +
+ + 8 + + <<<<<<< HEAD +
+ 5 + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + 12 + + ======= +
+ + 13 + + OUT.println("Expect nothing more to happen."); +
+ + 14 + + OUT.println("Parameters:"); +
+ + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + 16 + + >>>>>>> feature/use_constant +
+ 8 + + 17 + + } +
+ 9 + + 18 + + } +
+
+
, ] `; @@ -15168,6 +16822,544 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + 1 + + import java.io.PrintStream; +
+ 1 + + 2 + + import java.util.Arrays; +
+ 2 + + 3 + + +
+

+ Line Annotation +

+
+ 3 + + 4 + + class Main { +
+ + 5 + + private static final PrintStream OUT = System.out; +
+ + 6 + + +
+ 4 + + 7 + + public static void main(String[] args) { +
+ + 8 + + <<<<<<< HEAD +
+ 5 + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + 12 + + ======= +
+ + 13 + + OUT.println("Expect nothing more to happen."); +
+ + 14 + + OUT.println("Parameters:"); +
+ + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + 16 + + >>>>>>> feature/use_constant +
+ 8 + + 17 + + } +
+ 9 + + 18 + + } +
+
+
, ] `; @@ -18804,6 +20996,568 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + 1 + + import java.io.PrintStream; +
+ 1 + + 2 + + import java.util.Arrays; +
+ 2 + + 3 + + +
+ 3 + + 4 + + class Main { +
+ + 5 + + private static final PrintStream OUT = System.out; +
+ + 6 + + +
+ 4 + + 7 + + public static void main(String[] args) { +
+ + 8 + + <<<<<<< HEAD +
+ 5 + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + 12 + + ======= +
+ + 13 + + OUT.println("Expect nothing more to happen."); +
+ + 14 + + OUT.println("Parameters:"); +
+ + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + 16 + + >>>>>>> feature/use_constant +
+ 8 + + 17 + + } +
+ 9 + + 18 + + } +
+
+
, ] `; @@ -22658,6 +25412,605 @@ Array [ , +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + 1 + + import java.io.PrintStream; +
+ 1 + + import java.util.Arrays; + + 2 + + import java.util.Arrays; +
+ 2 + + + + 3 + + +
+ 3 + + class Main { + + 4 + + class Main { +
+ + + 5 + + private static final PrintStream OUT = System.out; +
+ + + 6 + + +
+ 4 + + public static void main(String[] args) { + + 7 + + public static void main(String[] args) { +
+ + + 8 + + <<<<<<< HEAD +
+ 5 + + System.out.println("Expect nothing more to happen."); + + 9 + + System.out.println("Expect nothing more to happen."); +
+ 6 + + System.out.println("The command line parameters are:"); + + 10 + + System.out.println("The command line parameters are:"); +
+ 7 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); + + 11 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(System.out::println); +
+ + + 12 + + ======= +
+ + + 13 + + OUT.println("Expect nothing more to happen."); +
+ + + 14 + + OUT.println("Parameters:"); +
+ + + 15 + + Arrays.stream(args).map(arg -> "- " + arg).forEach(OUT::println); +
+ + + 16 + + >>>>>>> feature/use_constant +
+ 8 + + } + + 17 + + } +
+ 9 + + } + + 18 + + } +
+
+
, ] `; From 658a2bd3cd4c32cfa0d2ea1aa89ff6e71c5eef07 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 14:07:50 +0100 Subject: [PATCH 24/38] Remove empty object from parameter list --- scm-ui/ui-components/src/repos/Diff.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/ui-components/src/repos/Diff.stories.tsx b/scm-ui/ui-components/src/repos/Diff.stories.tsx index 09ef48c0b5..8e5260bcc5 100644 --- a/scm-ui/ui-components/src/repos/Diff.stories.tsx +++ b/scm-ui/ui-components/src/repos/Diff.stories.tsx @@ -33,7 +33,7 @@ storiesOf("Diff", module) /> )) .add("OnClick", () => { - const OnClickDemo = ({}) => { + const OnClickDemo = () => { const [changeId, setChangeId] = useState(); useEffect(() => { const interval = setInterval(() => setChangeId(undefined), 2000); From 3244e552a9d9acb6338530848e49c80ac2b65603 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Jan 2020 14:22:14 +0100 Subject: [PATCH 25/38] extension binder logs now to debug instead of info --- .../sonia/scm/plugin/ExtensionBinder.java | 130 +++--------------- 1 file changed, 20 insertions(+), 110 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionBinder.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionBinder.java index 935bcbb3b6..a6e4c3281c 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionBinder.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionBinder.java @@ -55,63 +55,37 @@ import sonia.scm.util.Util; public final class ExtensionBinder { - /** Field description */ private static final String TYPE_LOOSE_EXT = "loose extension"; - - /** Field description */ private static final String TYPE_REST_RESOURCE = "rest resource"; + private static final String AS_EAGER_SINGLETON = " as eager singleton"; /** * the logger for ExtensionBinder */ - private static final Logger logger = - LoggerFactory.getLogger(ExtensionBinder.class); + private static final Logger logger = LoggerFactory.getLogger(ExtensionBinder.class); - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param binder - */ public ExtensionBinder(Binder binder) { this.binder = binder; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param collector - */ public void bind(ExtensionCollector collector) { - logger.info("bind extensions to extension points"); + logger.debug("bind extensions to extension points"); for (ExtensionPointElement epe : collector.getExtensionPointElements()) { bindExtensionPoint(collector, epe); } - logger.info("bind loose extensions"); + logger.debug("bind loose extensions"); bindLooseExtensions(collector.getLooseExtensions()); - logger.info("bind rest providers"); + logger.debug("bind rest providers"); bindRestProviders(collector.getRestProviders()); - logger.info("bind rest resources"); + logger.debug("bind rest resources"); bindRestResource(collector.getRestResources()); } - /** - * Method description - * - * - * @param collector - * @param epe - */ private void bindExtensionPoint(ExtensionCollector collector, ExtensionPointElement epe) { @@ -142,12 +116,6 @@ public final class ExtensionBinder } } - /** - * Method description - * - * - * @param extensions - */ private void bindLooseExtensions(Iterable extensions) { for (Class extension : extensions) @@ -156,46 +124,27 @@ public final class ExtensionBinder } } - /** - * Method description - * - * - * - * @param found - * - * @param extensionPoint - * - * @param boundClasses - * @param extensionPointClass - * @param extensions - */ - private void bindMultiExtensionPoint(ExtensionPointElement extensionPoint, - Iterable extensions) + private void bindMultiExtensionPoint(ExtensionPointElement extensionPoint, Iterable extensions) { Class extensionPointClass = extensionPoint.getClazz(); - if (logger.isInfoEnabled()) - { - logger.info("create multibinder for {}", extensionPointClass.getName()); - } - - Multibinder multibinder = Multibinder.newSetBinder(binder, - extensionPointClass); + logger.debug("create multibinder for {}", extensionPointClass.getName()); + Multibinder multibinder = Multibinder.newSetBinder(binder, extensionPointClass); for (Class extensionClass : extensions) { boolean eagerSingleton = isEagerSingleton(extensionClass); - if (logger.isInfoEnabled()) + if (logger.isDebugEnabled()) { String as = Util.EMPTY_STRING; if (eagerSingleton) { - as = " as eager singleton"; + as = AS_EAGER_SINGLETON; } - logger.info("bind {} to multibinder of {}{}", extensionClass.getName(), + logger.debug("bind {} to multibinder of {}{}", extensionClass.getName(), extensionPointClass.getName(), as); } @@ -208,27 +157,15 @@ public final class ExtensionBinder } } - /** - * Method description - * - * - * @param restProviders - */ private void bindRestProviders(Iterable restProviders) { for (Class restProvider : restProviders) { - logger.info("bind rest provider {}", restProvider); + logger.debug("bind rest provider {}", restProvider); binder.bind(restProvider).in(Singleton.class); } } - /** - * Method description - * - * - * @param restResources - */ private void bindRestResource(Iterable restResources) { for (Class restResource : restResources) @@ -237,31 +174,22 @@ public final class ExtensionBinder } } - /** - * Method description - * - * - * @param extensionPointClass - * - * @param extensionPoint - * @param extensionClass - */ private void bindSingleInstance(ExtensionPointElement extensionPoint, Class extensionClass) { Class extensionPointClass = extensionPoint.getClazz(); boolean eagerSingleton = isEagerSingleton(extensionClass); - if (logger.isInfoEnabled()) + if (logger.isDebugEnabled()) { String as = Util.EMPTY_STRING; if (eagerSingleton) { - as = " as eager singleton"; + as = AS_EAGER_SINGLETON; } - logger.info("bind {} to {}{}", extensionClass.getName(), + logger.debug("bind {} to {}{}", extensionClass.getName(), extensionPointClass.getName(), as); } @@ -274,13 +202,6 @@ public final class ExtensionBinder } } - /** - * Method description - * - * - * @param type - * @param extension - */ private void singleBind(String type, Class extension) { StringBuilder log = new StringBuilder(); @@ -291,30 +212,19 @@ public final class ExtensionBinder if (isEagerSingleton(extension)) { - log.append(" as eager singleton"); + log.append(AS_EAGER_SINGLETON); abb.asEagerSingleton(); } - logger.info(log.toString()); + if (logger.isDebugEnabled()) { + logger.debug(log.toString()); + } } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param extensionClass - * - * @return - */ private boolean isEagerSingleton(Class extensionClass) { return extensionClass.isAnnotationPresent(EagerSingleton.class); } - //~--- fields --------------------------------------------------------------- - - /** Field description */ private final Binder binder; } From c1aa4af6e0710c7d6b880225646e510d60b7cad0 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Jan 2020 14:27:11 +0100 Subject: [PATCH 26/38] implemented optional dependencies Plugin authors could now define optional dependencies to other plugins in their pom. Extensions which are using classes from optional dependencies must specify this with the "requires" attribute of the extension annotation. Extensions with "requires" attribute are not installed if one of the specified plugins, is not installed. --- docs/dtd/plugin/2.0.0-01.dtd | 7 +- .../main/java/sonia/scm/plugin/Extension.java | 13 ++- .../sonia/scm/plugin/ExtensionElement.java | 26 ++++++ .../scm/plugin/InstalledPluginDescriptor.java | 36 ++++++++- .../main/java/sonia/scm/plugin/ScmModule.java | 6 +- .../java/sonia/scm/plugin/ScmModuleTest.java | 23 +++--- .../resources/sonia/scm/plugin/module.xml | 18 +++-- .../sonia/scm/plugin/DefaultPluginLoader.java | 15 +--- .../java/sonia/scm/plugin/ExplodedSmp.java | 4 +- .../sonia/scm/plugin/ExtensionCollector.java | 78 ++++++++++++------ .../sonia/scm/plugin/PluginProcessor.java | 2 +- .../java/sonia/scm/plugin/PluginTree.java | 37 +++++++-- .../sonia/scm/plugin/ExplodedSmpTest.java | 2 +- .../java/sonia/scm/plugin/PluginTreeTest.java | 81 +++++++++++++++++-- 14 files changed, 262 insertions(+), 86 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java diff --git a/docs/dtd/plugin/2.0.0-01.dtd b/docs/dtd/plugin/2.0.0-01.dtd index 954a2c2219..62907f9481 100644 --- a/docs/dtd/plugin/2.0.0-01.dtd +++ b/docs/dtd/plugin/2.0.0-01.dtd @@ -23,7 +23,7 @@ --> - + @@ -79,7 +79,10 @@ - + + + + diff --git a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java index ce3bd24406..948dd46200 100644 --- a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java +++ b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java @@ -49,4 +49,15 @@ import java.lang.annotation.Target; @Target({ ElementType.TYPE }) @PluginAnnotation("extension") @Retention(RetentionPolicy.RUNTIME) -public @interface Extension {} +public @interface Extension { + /** + * List of required plugins to load this extension. + * The requires attribute can be used to implement optional extensions. + * A plugin author is able to implement an extension point of an optional plugin and the extension is only loaded if + * all of the specified plugins are installed. + * + * @since 2.0.0 + * @return list of required plugins to load this extension + */ + String[] requires() default {}; +} diff --git a/scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java b/scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java new file mode 100644 index 0000000000..1dd6f51291 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java @@ -0,0 +1,26 @@ +package sonia.scm.plugin; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import java.util.HashSet; +import java.util.Set; + +@Getter +@ToString +@NoArgsConstructor +@EqualsAndHashCode +@AllArgsConstructor +@XmlAccessorType(XmlAccessType.FIELD) +public class ExtensionElement { + @XmlElement(name = "class") + private String clazz; + private String description; + private Set requires = new HashSet<>(); +} diff --git a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java index 88ae4c5dff..097a06ab2c 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java @@ -38,6 +38,7 @@ package sonia.scm.plugin; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -76,7 +77,7 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin */ public InstalledPluginDescriptor(int scmVersion, PluginInformation information, PluginResources resources, PluginCondition condition, - boolean childFirstClassLoader, Set dependencies) + boolean childFirstClassLoader, Set dependencies, Set optionalDependencies) { this.scmVersion = scmVersion; this.information = information; @@ -84,6 +85,7 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin this.condition = condition; this.childFirstClassLoader = childFirstClassLoader; this.dependencies = dependencies; + this.optionalDependencies = optionalDependencies; } //~--- methods -------------------------------------------------------------- @@ -116,7 +118,8 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin && Objects.equal(information, other.information) && Objects.equal(resources, other.resources) && Objects.equal(childFirstClassLoader, other.childFirstClassLoader) - && Objects.equal(dependencies, other.dependencies); + && Objects.equal(dependencies, other.dependencies) + && Objects.equal(optionalDependencies, other.optionalDependencies); } /** @@ -129,7 +132,7 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin public int hashCode() { return Objects.hashCode(scmVersion, condition, information, resources, - childFirstClassLoader, dependencies); + childFirstClassLoader, dependencies, optionalDependencies); } /** @@ -149,6 +152,7 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin .add("resources", resources) .add("childFirstClassLoader", childFirstClassLoader) .add("dependencies", dependencies) + .add("optionalDependencies", optionalDependencies) .toString(); //J+ } @@ -186,6 +190,27 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin return dependencies; } + /** + * Method description + * + * + * @return + * + * @since 2.0.0 + */ + public Set getOptionalDependencies() { + if (optionalDependencies == null) + { + optionalDependencies = ImmutableSet.of(); + } + + return optionalDependencies; + } + + public Set getDependenciesInclusiveOptionals() { + return ImmutableSet.copyOf(Iterables.concat(getDependencies(), getOptionalDependencies())); + } + /** * Method description * @@ -246,6 +271,11 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin @XmlElementWrapper(name = "dependencies") private Set dependencies; + /** Field description */ + @XmlElement(name = "dependency") + @XmlElementWrapper(name = "optional-dependencies") + private Set optionalDependencies; + /** Field description */ @XmlElement(name = "information") private PluginInformation information; diff --git a/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java b/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java index 683b2a7e0c..398698273c 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java @@ -89,9 +89,9 @@ public class ScmModule * * @return */ - public Iterable> getExtensions() + public Iterable getExtensions() { - return unwrap(extensions); + return nonNull(extensions); } /** @@ -223,7 +223,7 @@ public class ScmModule /** Field description */ @XmlElement(name = "extension") - private Set extensions; + private Set extensions; /** Field description */ @XmlElement(name = "rest-provider") diff --git a/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java b/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java index 1629562132..86bd7fe19d 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java @@ -33,6 +33,7 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.collect.Iterables; import com.google.common.io.Resources; import org.junit.Test; @@ -69,43 +70,43 @@ public class ScmModuleTest //J- assertThat( - module.getExtensions(), + Iterables.transform(module.getExtensions(), ExtensionElement::getClazz), containsInAnyOrder( - String.class, - Integer.class + String.class.getName(), + Integer.class.getName() ) ); assertThat( - module.getExtensionPoints(), + module.getExtensionPoints(), containsInAnyOrder( - new ExtensionPointElement(String.class, "ext01", true, true), - new ExtensionPointElement(Long.class, "ext02", true, true), + new ExtensionPointElement(String.class, "ext01", true, true), + new ExtensionPointElement(Long.class, "ext02", true, true), new ExtensionPointElement(Integer.class, "ext03", false, true) ) ); assertThat( - module.getEvents(), + module.getEvents(), containsInAnyOrder( String.class, Boolean.class ) ); assertThat( - module.getSubscribers(), + module.getSubscribers(), containsInAnyOrder( - new SubscriberElement(Long.class, Integer.class, "sub01"), + new SubscriberElement(Long.class, Integer.class, "sub01"), new SubscriberElement(Double.class, Float.class, "sub02") ) ); assertThat( - module.getRestProviders(), + module.getRestProviders(), containsInAnyOrder( Integer.class, Long.class ) ); assertThat( - module.getRestResources(), + module.getRestResources(), containsInAnyOrder( Float.class, Double.class diff --git a/scm-core/src/test/resources/sonia/scm/plugin/module.xml b/scm-core/src/test/resources/sonia/scm/plugin/module.xml index c135803a7d..0bea44d06e 100644 --- a/scm-core/src/test/resources/sonia/scm/plugin/module.xml +++ b/scm-core/src/test/resources/sonia/scm/plugin/module.xml @@ -1,6 +1,6 @@ - + java.lang.Long @@ -47,28 +47,32 @@ java.lang.String + scm-mail-plugin + scm-review-plugin + ext01 java.lang.Integer + ext02 - + - + java.lang.Integer - + java.lang.Long - + - + java.lang.Float - + java.lang.Double diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java index 5612b0395c..e5ab89821f 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java @@ -99,7 +99,7 @@ public class DefaultPluginLoader implements PluginLoader modules = getInstalled(parent, context, PATH_MODULECONFIG); - collector = new ExtensionCollector(Iterables.concat(modules, unwrap())); + collector = new ExtensionCollector(parent, modules, installedPlugins); extensionProcessor = new DefaultExtensionProcessor(collector); } catch (IOException | JAXBException ex) @@ -170,19 +170,6 @@ public class DefaultPluginLoader implements PluginLoader return uberWebResourceLoader; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - private Iterable unwrap() - { - return PluginsInternal.unwrap(installedPlugins); - } - //~--- get methods ---------------------------------------------------------- /** diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java index ee2514dc3e..60bcc09dcb 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java @@ -98,8 +98,8 @@ public final class ExplodedSmp implements Comparable { int result; - Set depends = plugin.getDependencies(); - Set odepends = o.plugin.getDependencies(); + Set depends = plugin.getDependenciesInclusiveOptionals(); + Set odepends = o.plugin.getDependenciesInclusiveOptionals(); if (depends.isEmpty() && odepends.isEmpty()) { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java index 9ecf9a9da8..8ddf847935 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java @@ -39,6 +39,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; //~--- JDK imports ------------------------------------------------------------ @@ -47,6 +49,7 @@ import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Collectors; /** * @@ -56,23 +59,33 @@ import java.util.Set; public final class ExtensionCollector { - /** - * Constructs ... - * - * - * @param modules - */ - ExtensionCollector(Iterable modules) - { - for (ScmModule module : modules) - { + private static final Logger LOG = LoggerFactory.getLogger(ExtensionCollector.class); + + private final Set pluginIndex; + + public ExtensionCollector(ClassLoader moduleClassLoader, Set modules, Set installedPlugins) { + this.pluginIndex = createPluginIndex(installedPlugins); + + for (ScmModule module : modules) { collectRootElements(module); } - - for (ScmModule module : modules) - { - collectExtensions(module); + for (ScmModule plugin : PluginsInternal.unwrap(installedPlugins)) { + collectRootElements(plugin); } + + for (ScmModule module : modules) { + collectExtensions(moduleClassLoader, module); + } + + for (InstalledPlugin plugin : installedPlugins) { + collectExtensions(plugin.getClassLoader(), plugin.getDescriptor()); + } + } + + private Set createPluginIndex(Set installedPlugins) { + return installedPlugins.stream() + .map(p -> p.getDescriptor().getInformation().getName()) + .collect(Collectors.toSet()); } //~--- methods -------------------------------------------------------------- @@ -245,20 +258,35 @@ public final class ExtensionCollector } } - /** - * Method description - * - * - * @param module - */ - private void collectExtensions(ScmModule module) - { - for (Class extension : module.getExtensions()) - { - appendExtension(extension); + private void collectExtensions(ClassLoader defaultClassLoader, ScmModule module) { + for (ExtensionElement extension : module.getExtensions()) { + if (isRequirementFulfilled(extension)) { + Class extensionClass = loadExtension(defaultClassLoader, extension); + appendExtension(extensionClass); + } } } + private Class loadExtension(ClassLoader classLoader, ExtensionElement extension) { + try { + return classLoader.loadClass(extension.getClazz()); + } catch (ClassNotFoundException ex) { + throw new RuntimeException("failed to load clazz", ex); + } + } + + private boolean isRequirementFulfilled(ExtensionElement extension) { + if (extension.getRequires() != null) { + for (String requiredPlugin : extension.getRequires()) { + if (!pluginIndex.contains(requiredPlugin)) { + LOG.debug("skip loading of extension {}, because the required plugin {} is not installed", extension.getClazz(), requiredPlugin); + return false; + } + } + } + return true; + } + /** * Method description * diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 2bbab3c650..431cb44e1b 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -189,7 +189,7 @@ public final class PluginProcessor PluginTree pluginTree = new PluginTree(smps); - logger.trace("build plugin tree: {}", pluginTree); + logger.info("install plugin tree:\n{}", pluginTree); List rootNodes = pluginTree.getRootNodes(); diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java index bd338c0741..2ebe06db02 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java @@ -35,15 +35,13 @@ package sonia.scm.plugin; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Arrays; import java.util.List; -import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -104,9 +102,7 @@ public final class PluginTree if ((condition == null) || condition.isSupported()) { - Set dependencies = plugin.getDependencies(); - - if ((dependencies == null) || dependencies.isEmpty()) + if (plugin.getDependencies().isEmpty() && plugin.getOptionalDependencies().isEmpty()) { rootNodes.add(new PluginNode(smp)); } @@ -170,6 +166,20 @@ public final class PluginTree //J+ } } + + boolean rootNode = smp.getPlugin().getDependencies().isEmpty(); + for (String dependency : smp.getPlugin().getOptionalDependencies()) { + if (appendNode(rootNodes, child, dependency)) { + rootNode = false; + } else { + logger.info("optional dependency {} of {} is not installed", dependency, child.getId()); + } + } + + if (rootNode) { + logger.info("could not find optional dependencies of {}, append it as root node", child.getId()); + rootNodes.add(new PluginNode(smp)); + } } /** @@ -212,7 +222,18 @@ public final class PluginTree @Override public String toString() { - return "plugin tree: " + rootNodes.toString(); + StringBuilder buffer = new StringBuilder(); + for (PluginNode node : rootNodes) { + append(buffer, "", node); + } + return buffer.toString(); + } + + private void append(StringBuilder buffer, String indent, PluginNode node) { + buffer.append(indent).append("+- ").append(node.getId()).append("\n"); + for (PluginNode child : node.getChildren()) { + append(buffer, indent + " ", child); + } } //~--- fields --------------------------------------------------------------- diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java index 090d903f49..c4a4c0a0d3 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java @@ -134,7 +134,7 @@ public class ExplodedSmpTest info.setVersion(version); InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, info, null, null, false, - Sets.newSet(dependencies)); + Sets.newSet(dependencies), null); return new ExplodedSmp(null, plugin); } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java index 72c48d4d16..33a139aa5a 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java @@ -34,6 +34,7 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Function; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import org.junit.Rule; @@ -72,7 +73,7 @@ public class PluginTreeTest PluginCondition condition = new PluginCondition("999", new ArrayList(), "hit"); InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo("a", "1"), null, condition, - false, null); + false, null, null); ExplodedSmp smp = createSmp(plugin); new PluginTree(smp).getRootNodes(); @@ -115,7 +116,7 @@ public class PluginTreeTest public void testScmVersion() throws IOException { InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(1, createInfo("a", "1"), null, null, false, - null); + null, null); ExplodedSmp smp = createSmp(plugin); new PluginTree(smp).getRootNodes(); @@ -131,10 +132,10 @@ public class PluginTreeTest public void testSimpleDependencies() throws IOException { //J- - ExplodedSmp[] smps = new ExplodedSmp[] { + ExplodedSmp[] smps = new ExplodedSmp[] { createSmpWithDependency("a"), createSmpWithDependency("b", "a"), - createSmpWithDependency("c", "a", "b") + createSmpWithDependency("c", "a", "b") }; //J+ @@ -152,6 +153,61 @@ public class PluginTreeTest assertThat(unwrapIds(b.getChildren()), containsInAnyOrder("c")); } + @Test + public void testWithOptionalDependency() throws IOException { + ExplodedSmp[] smps = new ExplodedSmp[] { + createSmpWithDependency("a"), + createSmpWithDependency("b", null, ImmutableSet.of("a")), + createSmpWithDependency("c", null, ImmutableSet.of("a", "b")) + }; + + PluginTree tree = new PluginTree(smps); + List rootNodes = tree.getRootNodes(); + + assertThat(unwrapIds(rootNodes), containsInAnyOrder("a")); + + PluginNode a = rootNodes.get(0); + assertThat(unwrapIds(a.getChildren()), containsInAnyOrder("b", "c")); + + PluginNode b = a.getChild("b"); + assertThat(unwrapIds(b.getChildren()), containsInAnyOrder("c")); + } + + @Test + public void testWithDeepOptionalDependency() throws IOException { + ExplodedSmp[] smps = new ExplodedSmp[] { + createSmpWithDependency("a"), + createSmpWithDependency("b", "a"), + createSmpWithDependency("c", null, ImmutableSet.of("b")) + }; + + PluginTree tree = new PluginTree(smps); + + System.out.println(tree); + + List rootNodes = tree.getRootNodes(); + + assertThat(unwrapIds(rootNodes), containsInAnyOrder("a")); + + PluginNode a = rootNodes.get(0); + assertThat(unwrapIds(a.getChildren()), containsInAnyOrder("b")); + + PluginNode b = a.getChild("b"); + assertThat(unwrapIds(b.getChildren()), containsInAnyOrder("c")); + } + + @Test + public void testWithNonExistentOptionalDependency() throws IOException { + ExplodedSmp[] smps = new ExplodedSmp[] { + createSmpWithDependency("a", null, ImmutableSet.of("b")) + }; + + PluginTree tree = new PluginTree(smps); + List rootNodes = tree.getRootNodes(); + + assertThat(unwrapIds(rootNodes), containsInAnyOrder("a")); + } + /** * Method description * @@ -200,7 +256,7 @@ public class PluginTreeTest private ExplodedSmp createSmp(String name) throws IOException { return createSmp(new InstalledPluginDescriptor(2, createInfo(name, "1.0.0"), null, null, - false, null)); + false, null, null)); } /** @@ -224,10 +280,19 @@ public class PluginTreeTest { dependencySet.add(d); } + return createSmpWithDependency(name, dependencySet, null); + } - InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo(name, "1"), null, null, - false, dependencySet); - + private ExplodedSmp createSmpWithDependency(String name, Set dependencies, Set optionalDependencies) throws IOException { + InstalledPluginDescriptor plugin = new InstalledPluginDescriptor( + 2, + createInfo(name, "1"), + null, + null, + false, + dependencies, + optionalDependencies + ); return createSmp(plugin); } From 71b9567437667005faa5212c827e79e0e14f05a0 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 16:35:46 +0100 Subject: [PATCH 27/38] Fix reduce error with empty diff --- scm-ui/ui-components/src/repos/DiffFile.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index cab227bbd5..634376626d 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -174,7 +174,7 @@ class DiffFile extends React.Component { }; renderHunk = (hunk: HunkType, i: number) => { - if (this.props.markConflicts) { + if (this.props.markConflicts && hunk.changes) { this.markConflicts(hunk); } return [ @@ -241,6 +241,14 @@ class DiffFile extends React.Component { return ; }; + concat = (array: object[][]) => { + if (array.length > 0) { + return array.reduce((a, b) => a.concat(b)); + } else { + return []; + } + }; + render() { const { file, fileControlFactory, fileAnnotationFactory, t } = this.props; const { collapsed, sideBySide } = this.state; @@ -255,7 +263,7 @@ class DiffFile extends React.Component {
{fileAnnotations} - {(hunks: HunkType[]) => hunks.map(this.renderHunk).reduce((a, b) => a.concat(b))} + {(hunks: HunkType[]) => this.concat(hunks.map(this.renderHunk))}
); From 67777ff52d8bd7e2e599812daf25e5e96f2b6d57 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 8 Jan 2020 16:42:07 +0100 Subject: [PATCH 28/38] Fix reduce error with empty diff --- scm-ui/ui-components/src/repos/DiffFile.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index fe35cc111f..942d789f99 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -222,6 +222,14 @@ class DiffFile extends React.Component { return ; }; + concat = (array: object[][]) => { + if (array.length > 0) { + return array.reduce((a, b) => a.concat(b)); + } else { + return []; + } + }; + render() { const { file, fileControlFactory, fileAnnotationFactory, t } = this.props; const { collapsed, sideBySide } = this.state; @@ -236,7 +244,7 @@ class DiffFile extends React.Component {
{fileAnnotations} - {(hunks: HunkType[]) => hunks.map(this.renderHunk).reduce((a, b) => a.concat(b))} + {(hunks: HunkType[]) => this.concat(hunks.map(this.renderHunk))}
); From 8236e6be7fdbb491f20826d58e52695837483d12 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 08:19:13 +0100 Subject: [PATCH 29/38] added missing requires element to extension --- docs/dtd/plugin/2.0.0-01.dtd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/dtd/plugin/2.0.0-01.dtd b/docs/dtd/plugin/2.0.0-01.dtd index 62907f9481..23441a5a63 100644 --- a/docs/dtd/plugin/2.0.0-01.dtd +++ b/docs/dtd/plugin/2.0.0-01.dtd @@ -88,7 +88,10 @@ - + + + + From bac3068b7387ac2dde77ca3fa55eb045f961330e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 08:19:43 +0100 Subject: [PATCH 30/38] improve javadoc of requires attribute --- scm-annotations/src/main/java/sonia/scm/plugin/Extension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java index 948dd46200..2d99ed69be 100644 --- a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java +++ b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java @@ -51,7 +51,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface Extension { /** - * List of required plugins to load this extension. + * This extension is loaded only if all of the specified plugins are installed. * The requires attribute can be used to implement optional extensions. * A plugin author is able to implement an extension point of an optional plugin and the extension is only loaded if * all of the specified plugins are installed. From 6b62f0aab6f9f3e1d0212d6372952b40c55a74d2 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 08:20:47 +0100 Subject: [PATCH 31/38] throw more specific PluginLoadException instead of generic RuntimeException --- .../src/main/java/sonia/scm/plugin/ExtensionCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java index 8ddf847935..b4d4451596 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java @@ -271,7 +271,7 @@ public final class ExtensionCollector try { return classLoader.loadClass(extension.getClazz()); } catch (ClassNotFoundException ex) { - throw new RuntimeException("failed to load clazz", ex); + throw new PluginLoadException("failed to load clazz", ex); } } From c0e82b129981228d410bb3d3308fe197ced88348 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 14:15:42 +0100 Subject: [PATCH 32/38] fixed mutliple versions of hibernate-validator SCM-WebApp had multiple copies of hibernate-validator 5.3.6 and 6.1.0. We use now only 6.1.0. --- pom.xml | 7 +++++++ scm-core/pom.xml | 13 +++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index a27dcdb44e..918d43439a 100644 --- a/pom.xml +++ b/pom.xml @@ -284,6 +284,12 @@ ${jackson.version} + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + @@ -843,6 +849,7 @@ 2.10.0 4.0 2.3.0 + 6.1.0.Final 1.6.1 diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 4e8e315253..086013364b 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -173,6 +173,13 @@ activation + + + + org.hibernate + hibernate-validator + + @@ -214,12 +221,6 @@ shiro-unit test - - org.hibernate - hibernate-validator - 5.3.6.Final - compile - From 0ff4e22d87ba94cf9c9eeae2c49ceb55febc6ea9 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 9 Jan 2020 14:10:18 +0000 Subject: [PATCH 33/38] Close branch feature/optional_dependencies From 917a2ba1d664774861b8d856f06b14ee5358d0ef Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 9 Jan 2020 16:31:28 +0100 Subject: [PATCH 34/38] Add story for diffs with binary files --- .../src/__resources__/Diff.binary.ts | 18 ++ .../src/__snapshots__/storyshots.test.ts.snap | 299 ++++++++++++++++++ .../ui-components/src/repos/Diff.stories.tsx | 5 + 3 files changed, 322 insertions(+) create mode 100644 scm-ui/ui-components/src/__resources__/Diff.binary.ts diff --git a/scm-ui/ui-components/src/__resources__/Diff.binary.ts b/scm-ui/ui-components/src/__resources__/Diff.binary.ts new file mode 100644 index 0000000000..d11d0fcc0e --- /dev/null +++ b/scm-ui/ui-components/src/__resources__/Diff.binary.ts @@ -0,0 +1,18 @@ +export default `diff --git a/Main.java b/Main.java +index 9b5ca13..7ced845 100644 +--- a/Main.java ++++ b/Main.java +@@ -1,5 +1,5 @@ + class Main { + - public static void main(String[] args) { + + public static void main(String[] arguments) { + System.out.println("Expect nothing more to happen."); + } +} +diff --git a/conflict.png b/conflict.png +new file mode 100644 +index 0000000..7c77c7f +--- /dev/null ++++ b/conflict.png +Binary files differ +`; diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 8034701cbd..27e3eb6da0 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -334,6 +334,305 @@ exports[`Storyshots DateFromNow Default 1`] = ` `; +exports[`Storyshots Diff Binaries 1`] = ` +Array [ +
+
+
+
+ + + Main.java + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 1 + + 1 + + class Main { +
+ 2 + + 2 + + - public static void main(String[] args) { +
+ 3 + + 3 + + + public static void main(String[] arguments) { +
+ 4 + + 4 + + System.out.println("Expect nothing more to happen."); +
+ 5 + + 5 + + } +
+
+
, +
+
+
+
+ + conflict.png + + + modify + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + +
+
+
, +] +`; + exports[`Storyshots Diff Collapsed 1`] = ` Array [
{ const hunkDiffFiles = parser.parse(hunksDiff); return ; + }) + .add("Binaries", () => { + const binaryDiffFiles = parser.parse(binaryDiff); + return ; }); From 779a2004a05083b1f03e933cbcdb88f26b65fe82 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 16:49:03 +0100 Subject: [PATCH 35/38] use new version of gitdiff-parser, to fix wrong type of binary diffs --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8d9a9c931b..c50258f18d 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "resolutions": { "babel-core": "7.0.0-bridge.0", - "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#6baa7278824ecd17a199d842ca720d0453f68982" + "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351" }, "babel": { "presets": [ diff --git a/yarn.lock b/yarn.lock index b69a934a48..f75ea838fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7332,9 +7332,9 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#6baa7278824ecd17a199d842ca720d0453f68982": +gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351": version "0.1.2" - resolved "https://github.com/scm-manager/gitdiff-parser#6baa7278824ecd17a199d842ca720d0453f68982" + resolved "https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351" glob-parent@^3.1.0: version "3.1.0" From bbb2af7ebc4d59e6af8cfd9ab6ea74dd90558dc4 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 9 Jan 2020 17:06:55 +0100 Subject: [PATCH 36/38] update storyshot snapshots --- scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 27e3eb6da0..71aec23d5a 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -577,7 +577,7 @@ Array [ - modify + add
Date: Fri, 10 Jan 2020 10:35:53 +0000 Subject: [PATCH 37/38] Close branch feature/merge_diff From dd3949b8175b81e9f495fa30900eaac1d39bed18 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Fri, 10 Jan 2020 13:54:04 +0100 Subject: [PATCH 38/38] Hide toggle when there are no hunks to display --- scm-ui/ui-components/src/repos/DiffFile.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scm-ui/ui-components/src/repos/DiffFile.tsx b/scm-ui/ui-components/src/repos/DiffFile.tsx index 634376626d..7272febede 100644 --- a/scm-ui/ui-components/src/repos/DiffFile.tsx +++ b/scm-ui/ui-components/src/repos/DiffFile.tsx @@ -110,7 +110,7 @@ class DiffFile extends React.Component { toggleCollapse = () => { const { file } = this.props; - if (file && !file.isBinary) { + if (this.hasContent(file)) { this.setState(state => ({ collapsed: !state.collapsed })); @@ -249,6 +249,8 @@ class DiffFile extends React.Component { } }; + hasContent = (file: File) => file && !file.isBinary && file.hunks && file.hunks.length > 0; + render() { const { file, fileControlFactory, fileAnnotationFactory, t } = this.props; const { collapsed, sideBySide } = this.state; @@ -268,7 +270,7 @@ class DiffFile extends React.Component {
); } - const collapseIcon = file && !file.isBinary ? : null; + const collapseIcon = this.hasContent(file) ? : null; const fileControls = fileControlFactory ? fileControlFactory(file, this.setCollapse) : null; return (