From 347417e247d9121f568de66be3d14c2fe21daf86 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 7 Apr 2020 12:49:25 +0200 Subject: [PATCH] remove requires value from extension annotation and add new requires annotation instead --- .../sonia/scm/annotation/ClassSetElement.java | 17 ++- .../annotation/ScmAnnotationProcessor.java | 11 +- .../main/java/sonia/scm/plugin/Extension.java | 10 -- .../main/java/sonia/scm/plugin/Requires.java | 34 ++--- .../java/sonia/scm/plugin/ClassElement.java | 124 ++---------------- .../main/java/sonia/scm/plugin/ScmModule.java | 71 ++-------- .../java/sonia/scm/plugin/ScmModuleTest.java | 2 +- .../sonia/scm/plugin/ExtensionCollector.java | 30 +++-- yarn.lock | 66 ++-------- 9 files changed, 84 insertions(+), 281 deletions(-) rename scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java => scm-annotations/src/main/java/sonia/scm/plugin/Requires.java (65%) diff --git a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ClassSetElement.java b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ClassSetElement.java index 48c769a422..20eccc1007 100644 --- a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ClassSetElement.java +++ b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ClassSetElement.java @@ -101,6 +101,14 @@ public class ClassSetElement implements DescriptorElement element.appendChild(attr); } + if (c.requires != null) { + for (String requiresEntry : c.requires) { + Element requiresElement = doc.createElement("requires"); + requiresElement.setTextContent(requiresEntry); + element.appendChild(requiresElement); + } + } + element.appendChild(classEl); root.appendChild(element); } @@ -122,21 +130,24 @@ public class ClassSetElement implements DescriptorElement /** * Constructs ... * - * - * @param className + * @param className * @param description + * @param requires * @param attributes */ public ClassWithAttributes(String className, String description, - Map attributes) + String[] requires, Map attributes) { this.className = className; this.description = description; + this.requires = requires; this.attributes = attributes; } //~--- fields ------------------------------------------------------------- + private final String[] requires; + /** Field description */ private final Map attributes; diff --git a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java index 7aa2135352..f800040bc6 100644 --- a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java +++ b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java @@ -42,6 +42,7 @@ import org.xml.sax.SAXException; import sonia.scm.annotation.ClassSetElement.ClassWithAttributes; import sonia.scm.plugin.PluginAnnotation; +import sonia.scm.plugin.Requires; //~--- JDK imports ------------------------------------------------------------ @@ -247,6 +248,14 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { if (isClassOrInterface(e)) { TypeElement type = (TypeElement) e; + + String[] requires = null; + Requires requiresAnnotation = type.getAnnotation(Requires.class); + + if (requiresAnnotation != null) { + requires = requiresAnnotation.value(); + } + String desc = processingEnv.getElementUtils().getDocComment(type); if (desc != null) { @@ -255,7 +264,7 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { classes.add( new ClassWithAttributes( - type.getQualifiedName().toString(), desc, getAttributesFromAnnotation(e, annotation) + type.getQualifiedName().toString(), desc, requires, getAttributesFromAnnotation(e, annotation) ) ); } 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 3d3ff59ba0..7191780e69 100644 --- a/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java +++ b/scm-annotations/src/main/java/sonia/scm/plugin/Extension.java @@ -41,14 +41,4 @@ import java.lang.annotation.Target; @PluginAnnotation("extension") @Retention(RetentionPolicy.RUNTIME) public @interface 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. - * - * @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-annotations/src/main/java/sonia/scm/plugin/Requires.java similarity index 65% rename from scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java rename to scm-annotations/src/main/java/sonia/scm/plugin/Requires.java index d8698f1a6a..530cd723e7 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ExtensionElement.java +++ b/scm-annotations/src/main/java/sonia/scm/plugin/Requires.java @@ -21,30 +21,18 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; -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<>(); +@Documented +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface Requires { + String[] value(); } diff --git a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java index ecae44b30a..fe9cfac9ff 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java @@ -21,133 +21,31 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.MoreObjects; -import com.google.common.base.Objects; +import lombok.Data; import javax.xml.bind.annotation.XmlElement; +import java.util.HashSet; +import java.util.Set; //~--- JDK imports ------------------------------------------------------------ /** - * * @author Sebastian Sdorra * @since 2.0.0 */ -public final class ClassElement -{ +@Data +public final class ClassElement { - /** - * Constructs ... - * - */ - ClassElement() {} - - /** - * Constructs ... - * - * - * @param clazz - * @param description - */ - public ClassElement(Class clazz, String description) - { - this.clazz = clazz; - this.description = description; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param obj - * - * @return - */ - @Override - public boolean equals(Object obj) - { - if (obj == null) - { - return false; - } - - if (getClass() != obj.getClass()) - { - return false; - } - - final ClassElement other = (ClassElement) obj; - - return Objects.equal(clazz, other.clazz) - && Objects.equal(description, other.description); - } - - /** - * Method description - * - * - * @return - */ - @Override - public int hashCode() - { - return Objects.hashCode(clazz, description); - } - - /** - * Method description - * - * - * @return - */ - @Override - public String toString() - { - //J- - return MoreObjects.toStringHelper(this) - .add("clazz", clazz) - .add("description", description) - .toString(); - //J+ - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public Class getClazz() - { - return clazz; - } - - /** - * Method description - * - * - * @return - */ - public String getDescription() - { - return description; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ @XmlElement(name = "class") - private Class clazz; - - /** Field description */ + private String clazz; private String description; + private Set requires = new HashSet<>(); + + ClassElement() { + } } 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 32e522f905..71f8d24415 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java @@ -48,10 +48,6 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) public class ScmModule { - - /** Field description */ - private static final Unwrapper unwrapper = new Unwrapper(); - //~--- get methods ---------------------------------------------------------- /** @@ -60,9 +56,9 @@ public class ScmModule * * @return */ - public Iterable> getEvents() + public Iterable getEvents() { - return unwrap(events); + return nonNull(events); } /** @@ -82,7 +78,7 @@ public class ScmModule * * @return */ - public Iterable getExtensions() + public Iterable getExtensions() { return nonNull(extensions); } @@ -93,9 +89,9 @@ public class ScmModule * * @return */ - public Iterable> getRestProviders() + public Iterable getRestProviders() { - return unwrap(restProviders); + return nonNull(restProviders); } /** @@ -104,9 +100,9 @@ public class ScmModule * * @return */ - public Iterable> getRestResources() + public Iterable getRestResources() { - return unwrap(restResources); + return nonNull(restResources); } /** @@ -152,57 +148,6 @@ public class ScmModule return iterable; } - /** - * Method description - * - * - * @param iterable - * - * @return - */ - private Iterable> unwrap(Iterable iterable) - { - Iterable> unwrapped; - - if (iterable != null) - { - unwrapped = Iterables.transform(iterable, unwrapper); - } - else - { - unwrapped = ImmutableSet.of(); - } - - return unwrapped; - } - - //~--- inner classes -------------------------------------------------------- - - /** - * Class description - * - * - * @version Enter version here..., 14/03/28 - * @author Enter your name here... - */ - private static class Unwrapper implements Function> - { - - /** - * Method description - * - * - * @param classElement - * - * @return - */ - @Override - public Class apply(ClassElement classElement) - { - return classElement.getClazz(); - } - } - //~--- fields --------------------------------------------------------------- @@ -216,7 +161,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 4781d8e923..1989ff9b18 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java @@ -63,7 +63,7 @@ public class ScmModuleTest //J- assertThat( - Iterables.transform(module.getExtensions(), ExtensionElement::getClazz), + Iterables.transform(module.getExtensions(), ClassElement::getClazz), containsInAnyOrder( String.class.getName(), Integer.class.getName() 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 86cafae419..99a87f5814 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,7 @@ import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -60,10 +61,10 @@ public final class ExtensionCollector this.pluginIndex = createPluginIndex(installedPlugins); for (ScmModule module : modules) { - collectRootElements(module); + collectRootElements(moduleClassLoader, module); } - for (ScmModule plugin : PluginsInternal.unwrap(installedPlugins)) { - collectRootElements(plugin); + for (InstalledPlugin plugin : installedPlugins) { + collectRootElements(plugin.getClassLoader(), plugin.getDescriptor()); } for (ScmModule module : modules) { @@ -252,7 +253,7 @@ public final class ExtensionCollector } private void collectExtensions(ClassLoader defaultClassLoader, ScmModule module) { - for (ExtensionElement extension : module.getExtensions()) { + for (ClassElement extension : module.getExtensions()) { if (isRequirementFulfilled(extension)) { Class extensionClass = loadExtension(defaultClassLoader, extension); appendExtension(extensionClass); @@ -260,7 +261,18 @@ public final class ExtensionCollector } } - private Class loadExtension(ClassLoader classLoader, ExtensionElement extension) { + private Set> collectClasses(ClassLoader defaultClassLoader, Iterable classElements) { + Set> classes = new HashSet<>(); + for (ClassElement element : classElements) { + if (isRequirementFulfilled(element)) { + Class loadedClass = loadExtension(defaultClassLoader, element); + classes.add(loadedClass); + } + } + return classes; + } + + private Class loadExtension(ClassLoader classLoader, ClassElement extension) { try { return classLoader.loadClass(extension.getClazz()); } catch (ClassNotFoundException ex) { @@ -268,7 +280,7 @@ public final class ExtensionCollector } } - private boolean isRequirementFulfilled(ExtensionElement extension) { + private boolean isRequirementFulfilled(ClassElement extension) { if (extension.getRequires() != null) { for (String requiredPlugin : extension.getRequires()) { if (!pluginIndex.contains(requiredPlugin)) { @@ -286,15 +298,15 @@ public final class ExtensionCollector * * @param module */ - private void collectRootElements(ScmModule module) + private void collectRootElements(ClassLoader classLoader, ScmModule module) { for (ExtensionPointElement epe : module.getExtensionPoints()) { extensionPointIndex.put(epe.getClazz(), epe); } - restProviders.addAll(Lists.newArrayList(module.getRestProviders())); - restResources.addAll(Lists.newArrayList(module.getRestResources())); + restProviders.addAll(collectClasses(classLoader, module.getRestProviders())); + restResources.addAll(collectClasses(classLoader, module.getRestResources())); Iterables.addAll(webElements, module.getWebElements()); } diff --git a/yarn.lock b/yarn.lock index 544007e340..f33b9dd3fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5656,7 +5656,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== @@ -5715,11 +5715,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" @@ -5835,11 +5830,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" @@ -8059,7 +8049,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== @@ -8198,7 +8188,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== @@ -10386,15 +10376,6 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" -needle@^2.2.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" - integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== - 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" @@ -10519,22 +10500,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.53: version "1.1.53" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" @@ -10633,7 +10598,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.8" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== @@ -10658,7 +10623,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: +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== @@ -12117,16 +12082,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.2: version "1.2.2" resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" @@ -13035,7 +12990,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -13198,7 +13153,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== @@ -13965,11 +13920,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -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" @@ -14113,7 +14063,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -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==